亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? esign.c

?? 應(yīng)用密碼學(xué)這本書的源代碼
?? C
字號:
/*
  Author:  Pate Williams (c) 1997

  ESIGN digital signature scheme. See "Handbook of
  Applied Cryptography" by Alfred J. Menezes et al
  Section 11.7.2 pages 473 - 474.
*/

#include <math.h>
#include <mem.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "lip.h"

#define DEBUG
#define LITTLE_ENDIAN

typedef unsigned char uchar;
typedef unsigned long ulong;

struct SHA_1_struct {
  ulong A, B, C, D, E, H1, H2, H3, H4, H5;
  struct {ulong hi, lo;} length;
};

union ByteWord {
  uchar byte[4];
  ulong word;
};

ulong f(ulong u, ulong v, ulong w)
{
  return (u & v) | (~u & w);
}

ulong g(ulong u, ulong v, ulong w)
{
  return (u & v) | (u & w) | (v & w);
}

ulong h(ulong u, ulong v, ulong w)
{
  return u ^ v ^ w;
}

#ifdef LITTLE_ENDIAN

void BigEndian(int number, ulong *buffer)
{
  int i;
  union ByteWord byteWord;
  uchar *cp = (uchar *) buffer;

  for (i = 0; i < (number >> 2); i++) {
    byteWord.byte[0] = *(cp + 3);
    byteWord.byte[1] = *(cp + 2);
    byteWord.byte[2] = *(cp + 1);
    byteWord.byte[3] = *cp;
    buffer[i] = byteWord.word;
    cp += 4;
  }
}

#endif

ulong LeftShift(ulong x, int number)
//left circular shift number bits
{
  return (x << number) | (x >> (32 - number));
}

void Round(int j_min, ulong y, ulong *X,
           struct SHA_1_struct *data,
           ulong (*z)(ulong, ulong, ulong))
{
  int j;
  ulong t;

  for (j = j_min; j < j_min + 20; j++) {
    t = LeftShift(data->A, 5) + z(data->B, data->C, data->D)
      + data->E + X[j] + y;
    data->E = data->D;
    data->D = data->C;
    data->C = LeftShift(data->B, 30);
    data->B = data->A;
    data->A = t;
  }
}

void SHA_1_init(ulong number, struct SHA_1_struct *data)
{
  static ulong h1 = 0x67452301ul, h2 = 0xefcdab89ul,
               h3 = 0x98badcfeul, h4 = 0x10325476ul,
               h5 = 0xc3d2e1f0ul;

  data->H1 = h1, data->H2 = h2, data->H3 = h3;
  data->H4 = h4, data->H5 = h5;
  /* determine bit length of the message */
  data->length.hi = number >> 29;
  data->length.lo = number << 3;
}

void SHA_1_update(uchar *buffer, struct SHA_1_struct *data)
{
  int j;
  static ulong y1 = 0x5a827999ul, y2 = 0x6ed9eba1ul,
               y3 = 0x8f1bbcdcul, y4 = 0xca62c1d6ul;
  ulong M[16], X[80];

  memcpy((uchar *) M, buffer, 64);
  #ifdef LITTLE_ENDIAN
  BigEndian(64, M);
  #endif
  memcpy(X, M, sizeof(M));
  data->A = data->H1;
  data->B = data->H2;
  data->C = data->H3;
  data->D = data->H4;
  data->E = data->H5;
  for (j = 16; j < 80; j++)
    X[j] = LeftShift(X[j - 3] ^ X[j - 8] ^ X[j - 14] ^ X[j - 16], 1);
  Round( 0, y1, X, data, f);
  Round(20, y2, X, data, h);
  Round(40, y3, X, data, g);
  Round(60, y4, X, data, h);
  data->H1 += data->A;
  data->H2 += data->B;
  data->H3 += data->C;
  data->H4 += data->D;
  data->H5 += data->E;
}

void SHA_1_final(uchar *buffer, ulong number, ulong *digest,
                 struct SHA_1_struct *data)
{
  uchar *cp;
  ulong M[16];

  number %= 64;
  memcpy((uchar *) M, buffer, number);
  cp = (uchar *) M + number;
  *cp = 0x80;
  number++;
  memset((uchar *) M + number, 0, 56 - number);
  memcpy((uchar *) M + 56, &data->length, 8);
  #ifdef LITTLE_ENDIAN
  BigEndian(8, M + 14);
  #endif
  SHA_1_update((uchar *) M, data);
  memcpy(digest, &data->H1, 20);
  memset(data, 0, sizeof(struct SHA_1_struct));
}

void ESIGN_gen_keys(long length, long *k,
                    verylong *zn, verylong *zp,
                    verylong *zq)
/* generate public key (n, k) and private key (p, q) */
{
  verylong za = 0;

  zrstarts(time(NULL));
  zrandomprime(length, 5l, zp, zrandomb);
  zrandomprime(length, 5l, zq, zrandomb);
  zsq(*zp, &za);
  zmul(za, *zq, zn);
  do *k = rand() % 129l; while (*k < 4);
  zfree(&za);
}

void zhorner(ulong *digest, verylong *zs)
{
  long i;
  verylong za = 0, zb = 0, zx = 0;

  zintoz(2147483647l, &za);
  zlshift(za, 1l, &zb);
  zsadd(zb, 2l, &zx);
  if (digest[0] >= 2147483648ul) {
    zintoz((long)(digest[0] - 2147483648ul), &za);
    zsadd(za, 2147483647l, &zb);
    zsadd(zb, 1l, zs);
  }
  else zintoz(digest[0], zs);
  for (i = 1; i < 5; i++) {
    if (digest[i] >= 2147483648ul) {
      zintoz((long)(digest[i] - 2147483648ul), &za);
      zsadd(za, 2147483647l, &zb);
      zsadd(zb, 1l, &za);
    }
    else zintoz(digest[i], &za);
    zmul(*zs, zx, &zb);
    zadd(za, zb, zs);
  }
  zfree(&za);
  zfree(&zb);
  zfree(&zx);
}

void ESIGN_sign(uchar *m, ulong length, long k,
                verylong zn, verylong zp,
                verylong zq, verylong *zs)
{
  long k1 = k - 1;
  struct SHA_1_struct data;
  ulong blocks, digest[5], i, left;
  verylong za = 0, zb = 0, zc = 0, zv = 0;
  verylong zw = 0, zx = 0, zy = 0;
  verylong zpq = 0;

  SHA_1_init(length, &data);
  blocks = length / 64l;
  left = length % 64l;
  for (i = 0; i < blocks; i++)
    SHA_1_update(m + i * 64l, &data);
  SHA_1_final(m + blocks * 64l, left, digest, &data);
  zhorner(digest, &zv);
  zrandomb(zp, &zx);
  zsexp(zx, k, &za);
  zsubmod(zv, za, zn, &zb);
  zmul(zp, zq, &zpq);
  zdiv(zb, zpq, &za, &zb);
  zsadd(za, 1l, &zw);
  zsexp(zx, k1, &za);
  zsmul(za, k, &zb);
  zinvmod(zb, zp, &za);
  zmulmod(za, zw, zp, &zy);
  zmulmod(zy, zpq, zn, &za);
  zaddmod(za, zx, zn, zs);
  #ifdef DEBUG
  printf("%ul %s\n", length, m);
  for (i = 0; i < 5; i++)
    printf("%lx\n", digest[i]);
  printf("v = "); zwriteln(zv);
  printf("pq = "); zwriteln(zpq);
  printf("log2(pq) = %ld\n", z2log(zpq));
  #endif
  zfree(&za);
  zfree(&zb);
  zfree(&zc);
  zfree(&zv);
  zfree(&zw);
  zfree(&zx);
  zfree(&zy);
  zfree(&zpq);
}

int ESIGN_verify(uchar *m, ulong length, long k,
                 verylong zn, verylong zs)
{
  int value;
  long log;
  struct SHA_1_struct data;
  ulong blocks, digest[5], i, left;
  verylong za = 0, zb = 0, zk = 0, zu = 0, zz = 0;

  SHA_1_init(length, &data);
  blocks = length / 64l;
  left = length % 64l;
  for (i = 0; i < blocks; i++)
    SHA_1_update(m + i * 64l, &data);
  SHA_1_final(m + blocks * 64l, left, digest, &data);
  zhorner(digest, &zz);
  zintoz(k, &zk);
  zexpmod(zs, zk, zn, &zu);
  zone(&za);
  log = ceil((2.0 * z2log(zn)) / 3.0);
  zlshift(za, log, &zb);
  zadd(zz, zb, &za);
  #ifdef DEBUG
  printf("%ul %ld %s\n", length, log, m);
  for (i = 0; i < 5; i++)
    printf("%lx\n", digest[i]);
  printf("log2(n) = %ld\n", z2log(zn));
  printf("z = "); zwriteln(zz);
  printf("u = "); zwriteln(zu);
  printf("a = "); zwriteln(za);
  printf("compare(z, u) = %d\n", zcompare(zz, zu));
  printf("compare(u, a) = %d\n", zcompare(zu, za));
  #endif
  value = zcompare(zz, zu) <= 0 && zcompare(zu, za) <= 0;
  zfree(&za);
  zfree(&zb);
  zfree(&zk);
  zfree(&zu);
  zfree(&zz);
  return value;
}

int main(void)
{
  long k;
  uchar m[16] = "abc";
  verylong zn = 0, zp = 0, zq = 0, zs = 0;

  ESIGN_gen_keys(256l, &k, &zn, &zp, &zq);
  #ifdef DEBUG
  printf("%s\n", m);
  #endif
  ESIGN_sign(m, 3ul, k, zn, zp, zq, &zs);
  #ifdef DEBUG
  printf("k = %ld\n", k);
  printf("n = "); zwriteln(zn);
  printf("p = "); zwriteln(zp);
  printf("q = "); zwriteln(zq);
  printf("s = "); zwriteln(zs);
  printf("%s\n", m);
  #endif
  printf("%d\n", ESIGN_verify(m, 3ul, k, zn, zs));
  zfree(&zn);
  zfree(&zp);
  zfree(&zq);
  zfree(&zs);
  return 0;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产综合色在线| 中文文精品字幕一区二区| 一区二区在线看| 欧洲精品中文字幕| 亚洲国产精品视频| 欧美电视剧免费全集观看| 国产一二精品视频| 国产精品久久影院| 在线精品视频免费观看| 香蕉加勒比综合久久| 欧美大胆人体bbbb| 国产精品中文字幕日韩精品| 综合久久给合久久狠狠狠97色| 色综合 综合色| 三级一区在线视频先锋 | 欧美α欧美αv大片| 国产一本一道久久香蕉| 亚洲色图欧洲色图婷婷| 欧美年轻男男videosbes| 国产自产视频一区二区三区| 中文字幕不卡三区| 欧美色窝79yyyycom| 美女www一区二区| 亚洲视频一区二区在线观看| 欧美人牲a欧美精品| 粉嫩久久99精品久久久久久夜| 亚洲精品乱码久久久久久日本蜜臀| 91精品国产综合久久久久久漫画| 国产成都精品91一区二区三| 亚洲一本大道在线| 国产午夜精品在线观看| 欧美性生活影院| 国产二区国产一区在线观看| 亚洲国产裸拍裸体视频在线观看乱了| 精品国产三级电影在线观看| 色婷婷久久一区二区三区麻豆| 麻豆精品久久精品色综合| 亚洲视频一区在线| 国产日韩一级二级三级| 欧美精品少妇一区二区三区| 成人av电影在线| 看国产成人h片视频| 亚洲一区视频在线观看视频| 久久久久国产精品麻豆ai换脸| 欧美日韩国产免费一区二区 | 捆绑紧缚一区二区三区视频| 怡红院av一区二区三区| 欧美国产精品久久| 欧美一级二级三级乱码| 91久久线看在观草草青青| 国产成人免费视频一区| 青青草一区二区三区| 一区二区三区在线高清| 国产精品福利一区二区三区| 久久免费国产精品| 亚洲精品在线三区| 日韩色视频在线观看| 欧美日韩三级一区| 在线观看国产一区二区| 91网站在线播放| 91视频一区二区三区| 国产999精品久久久久久绿帽| 久久成人精品无人区| 免费日韩伦理电影| 日韩电影网1区2区| 日韩国产精品91| 日本美女视频一区二区| 五月婷婷色综合| 亚洲国产乱码最新视频| 亚洲乱码精品一二三四区日韩在线| 中文字幕欧美区| 亚洲国产激情av| 中文字幕乱码日本亚洲一区二区| 国产日韩三级在线| 国产精品国产三级国产aⅴ入口 | 国产日韩欧美麻豆| 久久综合99re88久久爱| 久久久亚洲欧洲日产国码αv| 久久午夜国产精品| 国产精品婷婷午夜在线观看| 国产精品久久久久婷婷| 亚洲图片激情小说| 亚洲一区二区三区小说| 午夜av一区二区| 免费人成在线不卡| 韩国一区二区在线观看| 国产成人一区二区精品非洲| 99久久免费精品| 色猫猫国产区一区二在线视频| 欧洲一区在线电影| 欧美一区二区三区性视频| 欧美电影免费观看高清完整版| 久久久久99精品国产片| 国产精品白丝在线| 亚洲第四色夜色| 极品尤物av久久免费看| 成人免费看的视频| 91成人在线观看喷潮| 欧美一级xxx| 国产日韩欧美a| 一区二区三区色| 精品亚洲成a人在线观看| 国产白丝精品91爽爽久久 | 欧美日韩久久一区二区| 日韩午夜精品视频| 久久久精品免费观看| 亚洲男人的天堂在线aⅴ视频| 亚洲一区二区精品久久av| 久久99国产精品麻豆| 91色综合久久久久婷婷| 91精品免费在线观看| 国产亚洲成aⅴ人片在线观看| 亚洲精品国产第一综合99久久| 轻轻草成人在线| 99久久婷婷国产综合精品| 欧美美女一区二区在线观看| 久久综合999| 亚洲成国产人片在线观看| 国产成人一区二区精品非洲| 欧美色视频一区| 国产精品污www在线观看| 日本在线不卡视频| 成人性视频免费网站| 欧美精品一卡二卡| 日韩伦理av电影| 国产精品一区二区你懂的| 欧美日韩亚洲综合一区二区三区 | 中文字幕亚洲不卡| 蜜乳av一区二区| 色综合天天综合狠狠| 久久综合精品国产一区二区三区| 亚洲一区中文在线| 99在线热播精品免费| 日韩精品在线看片z| 香蕉影视欧美成人| 色综合视频在线观看| 国产亚洲精品aa| 精品一区二区三区在线播放| 欧美人狂配大交3d怪物一区| 中文字幕在线不卡| 国产精选一区二区三区| 91精品国产麻豆国产自产在线 | 欧美一级在线观看| 亚洲一区二区三区小说| 91在线观看成人| 国产精品视频看| 国产乱码字幕精品高清av| 日韩一卡二卡三卡国产欧美| 亚洲.国产.中文慕字在线| 91免费观看在线| 中文字幕亚洲区| 国产精品小仙女| 国产婷婷色一区二区三区| 久久99蜜桃精品| 日韩一区二区在线免费观看| 日韩综合小视频| 欧美女孩性生活视频| 午夜国产精品一区| 欧美丰满少妇xxxxx高潮对白| 亚洲国产三级在线| 欧美日韩视频在线观看一区二区三区 | 天堂一区二区在线| 欧美剧情片在线观看| 午夜精品一区二区三区免费视频 | 亚洲午夜在线视频| 欧美日韩中字一区| 午夜视频一区二区三区| 884aa四虎影成人精品一区| 水蜜桃久久夜色精品一区的特点| 欧美精选一区二区| 蜜桃av一区二区三区电影| 精品国产乱码久久久久久牛牛| 狠狠色综合播放一区二区| 精品国产99国产精品| 国产精品一区二区三区99| 国产精品女人毛片| 色婷婷av一区二区三区gif| 亚洲日本一区二区三区| 欧美在线视频不卡| 午夜久久久影院| 欧美岛国在线观看| 床上的激情91.| 亚洲欧美一区二区久久| 欧美高清精品3d| 狠狠色丁香婷婷综合| 国产精品久久久久国产精品日日 | 欧美人牲a欧美精品| 久久福利视频一区二区| 久久久精品黄色| 91搞黄在线观看| 日本不卡一区二区三区高清视频| 26uuu亚洲| 99re8在线精品视频免费播放| 亚洲自拍偷拍图区| 精品成人一区二区| 91亚洲精品久久久蜜桃| 日韩一区欧美二区| 国产欧美精品一区二区色综合| 欧美在线免费视屏| 国产精品一级黄|