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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gq.c

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

  Guillou-Quisquater signature scheme. See "Handbook
  of Applied Cryptography" by Alfred J. Menezes et al
  pages 450 - 451. Also see Section 14.5.2 page 612.
*/

#include <malloc.h>
#include <mem.h>
#include <stdio.h>
#include <time.h>
#include "lip.h"

#define CRT_SIZE 128l
#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 Garner(long t, verylong *zm, verylong *zv, verylong *zx)
/* solution of the Chinese remaider theorem */
{
  long i, j;
  verylong za = 0, zb = 0, zu = 0, zC[CRT_SIZE];

  for (i = 0; i < CRT_SIZE; i++) zC[i] = 0;
  for (i = 1; i < t; i++) {
    zone(&zC[i]);
    for (j = 0; j <= i - 1; j++) {
      zinvmod(zm[j], zm[i], &zu);
      zmulmod(zu, zC[i], zm[i], &za);
      zcopy(za, &zC[i]);
    }
  }
  zcopy(zv[0], &zu);
  zcopy(zu, zx);
  for (i = 1; i < t; i++) {
    zsub(zv[i], *zx, &za);
    zmulmod(za, zC[i], zm[i], &zu);
    zone(&za);
    for (j = 0; j <= i - 1; j++) {
      zmul(za, zm[j], &zb);
      zcopy(zb, &za);
    }
    zmul(za, zu, &zb);
    zadd(*zx, zb, &za);
    zcopy(za, zx);
  }
  zfree(&za);
  zfree(&zb);
  zfree(&zu);
  for (i = 0; i < CRT_SIZE; i++) zfree(&zC[i]);
}

void GQ_gen_keys(long length, verylong *zJA, verylong *za,
                 verylong *ze, verylong *zn)
{
  verylong zd = 0, zd1 = 0, zd2 = 0, ze1 = 0;
  verylong zn1 = 0, zp = 0, zp1 = 0, zq = 0, zq1 = 0;
  verylong zJA1 = 0, zm[2], zv[2];

  zm[0] = zm[1] = zv[0] = zv[1] = 0;
  zrstarts(time(NULL));
  zrandomprime(length, 5l, &zp, zrandomb);
  zrandomprime(length, 5l, &zq, zrandomb);
  zmul(zp, zq, zn);
  zsadd(zp, - 1l, &zp1);
  zsadd(zq, - 1l, &zq1);
  zmul(zp1, zq1, &zn1);
  do {
    do
      zrandomb(*zn, ze);
     while (zscompare(*ze, 0l) == 0);
    zgcd(*ze, zn1, &zd);
  } while (zscompare(zd, 1l) != 0);
  do {
    do
      zrandomb(*zn, zJA);
    while (zscompare(*zJA, 1l) <= 0);
    zgcd(*zJA, *zn, &zd);
  } while (zscompare(zd, 1l) != 0);
  zinvmod(*zJA, *zn, &zJA1);
  zinvmod(*ze, zp1, &zd1);
  zinvmod(*ze, zq1, &zd2);
  zexpmod(zJA1, zd1, zp, &zv[0]);
  zexpmod(zJA1, zd2, zq, &zv[1]);
  zcopy(zp, &zm[0]);
  zcopy(zq, &zm[1]);
  Garner(2l, zm, zv, za);
  /* check our work */
  zexpmod(*za, *ze, *zn, &zd);
  zmulmod(zd, *zJA, *zn, &zp);
  if (zscompare(zp, 1l) != 0)
    printf("JA * a ^ e != 1 mod n");
  #ifdef DEBUG
  printf("JA = "); zwriteln(*zJA);
  #endif
  zfree(&zd);
  zfree(&zd1);
  zfree(&zd2);
  zfree(&ze1);
  zfree(&zn1);
  zfree(&zp);
  zfree(&zp1);
  zfree(&zq);
  zfree(&zq1);
  zfree(&zJA1);
  zfree(&zm[0]);
  zfree(&zm[1]);
  zfree(&zv[0]);
  zfree(&zv[1]);
}

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 GQ_sign(uchar *buffer, ulong length,
             verylong za, verylong ze, verylong zn,
             verylong *zl, verylong *zs)
{
  long log;
  struct SHA_1_struct data;
  uchar *m;
  ulong blocks, digest[5], i, j, left, len;
  verylong zb = 0, zk = 0, zr = 0, zt = 0;

  do
    zrandomb(zn, &zk);
  while (zscompare(zk, 1l) <= 0);
  zexpmod(zk, ze, zn, &zr);
  zcopy(zr, &zt);
  log = z2log(zr);
  len = length + log / 8l;
  if (log % 8l != 0) len++;
  m = malloc(len * sizeof(uchar));
  memcpy(m, buffer, length);
  i = length;
  for (j = 0; j < log / 8l; j++) {
    zlowbits(zt, 8l, &zb);
    m[i++] = (uchar) (zb[1] & 255);
    zrshift(zt, 1l, &zb);
    zcopy(zb, &zt);
  }
  if (log % 8l != 0) m[i] = (uchar) (zr[1] & 255);
  SHA_1_init(len, &data);
  blocks = len / 64l;
  left = blocks % 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, zl);
  zexpmod(za, *zl, zn, &zb);
  zmulmod(zk, zb, zn, zs);
  #ifdef DEBUG
  printf("%s\n", buffer);
  printf("e = "); zwriteln(ze);
  printf("l = "); zwriteln(*zl);
  printf("n = "); zwriteln(zn);
  printf("s = "); zwriteln(*zs);
  printf("r = "); zwriteln(zr);
  #endif
  free(m);
  zfree(&zb);
  zfree(&zk);
  zfree(&zr);
  zfree(&zt);
}

int GQ_verify(uchar *buffer, ulong length,
              verylong zJA, verylong ze, verylong zl,
              verylong zn, verylong zs)
{
  int value;
  long log;
  struct SHA_1_struct data;
  uchar *m;
  ulong blocks, digest[5], i, j, left, len;
  verylong za = 0, zb = 0, zlp = 0, zu = 0;

  zexpmod(zs, ze, zn, &za);
  zexpmod(zJA, zl, zn, &zb);
  zmulmod(za, zb, zn, &zu);
  #ifdef DEBUG
  printf("JA = "); zwriteln(zJA);
  printf("%s\n", buffer);
  printf("e = "); zwriteln(ze);
  printf("l = "); zwriteln(zl);
  printf("n = "); zwriteln(zn);
  printf("s = "); zwriteln(zs);
  printf("u = "); zwriteln(zu);
  #endif
  log = z2log(zu);
  len = length + log / 8l;
  if (log % 8l != 0) len++;
  m = malloc(len * sizeof(uchar));
  memcpy(m, buffer, length);
  i = length;
  for (j = 0; j < log / 8l; j++) {
    zlowbits(zu, 8l, &za);
    m[i++] = (uchar) (za[1] & 255);
    zrshift(zu, 1l, &za);
    zcopy(za, &zu);
  }
  if (log % 8l != 0) m[i] = (uchar) (zu[1] & 255);
  SHA_1_init(len, &data);
  blocks = len / 64l;
  left = blocks % 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, &zlp);
  #ifdef DEBUG
  printf("l' = "); zwriteln(zlp);
  #endif
  value = zcompare(zl, zlp) == 0;
  free(m);
  zfree(&za);
  zfree(&zb);
  zfree(&zlp);
  zfree(&zu);
  return value;
}

int main(void)
{
  long i, t = 4l;
  uchar buffer[16] = "abcd";
  verylong zJA = 0, za = 0, ze = 0, zl = 0;
  verylong zn = 0, zs = 0, zx = 0, zm[4], zv[4];

  for (i = 0; i < 4; i++) zm[i] = zv[i] = 0;
  zintoz(5, &zm[0]);
  zintoz(7, &zm[1]);
  zintoz(11, &zm[2]);
  zintoz(13, &zm[3]);
  zintoz(2, &zv[0]);
  zintoz(1, &zv[1]);
  zintoz(3, &zv[2]);
  zintoz(8, &zv[3]);
  Garner(t, zm, zv, &zx);
  if (zscompare(zx, 2192l) != 0)
    printf("error in Garner!\n");
  GQ_gen_keys(256l, &zJA, &za, &ze, &zn);
  GQ_sign(buffer, 4ul, za, ze, zn, &zl, &zs);
  printf("%d\n", GQ_verify(buffer, 4ul, zJA, ze, zl, zn, zs));
  zfree(&zJA);
  zfree(&za);
  zfree(&ze);
  zfree(&zl);
  zfree(&zn);
  zfree(&zs);
  zfree(&zx);
  for (i = 0; i < 4; i++) {
    zfree(&zm[i]);
    zfree(&zv[i]);
  }
  return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产毛片精品国产一区二区三区| 亚洲国产精品成人综合色在线婷婷| 日韩一区二区三区视频在线观看| 欧美本精品男人aⅴ天堂| 国产日韩欧美综合一区| 一区二区三区在线免费| 日本中文字幕一区二区视频| 国产精品自拍毛片| 在线观看视频欧美| 欧美精品一区二区三区在线播放| 国产精品你懂的在线| 性感美女极品91精品| 精品一区二区av| 色综合久久久久综合体| 日韩精品一区二区三区在线观看| 国产精品私房写真福利视频| 首页国产欧美久久| 国产91露脸合集magnet | xnxx国产精品| 一区二区免费视频| 国产麻豆精品视频| 欧美日韩精品欧美日韩精品| 久久久三级国产网站| 亚洲图片欧美色图| 成人黄色av电影| 欧美一二三区精品| 一区二区三区精品| 国产成人精品影院| 欧美一三区三区四区免费在线看| 中文字幕制服丝袜成人av| 美女视频黄 久久| 欧美在线视频不卡| 亚洲欧洲日韩av| 国产在线国偷精品免费看| 91国偷自产一区二区三区成为亚洲经典 | 91精品国产高清一区二区三区| 国产欧美日本一区二区三区| 日韩精品国产精品| 一本在线高清不卡dvd| 久久综合999| 蜜臀久久久99精品久久久久久| 91色porny| 欧美国产日产图区| 国产一区二区看久久| 日韩一级免费观看| 天天影视网天天综合色在线播放| 99精品久久免费看蜜臀剧情介绍| 国产亚洲一本大道中文在线| 免费看黄色91| 欧美日韩成人在线一区| 最新国产成人在线观看| 粉嫩在线一区二区三区视频| 欧美大黄免费观看| 日产欧产美韩系列久久99| 欧美无砖砖区免费| 亚洲激情图片一区| 色综合久久88色综合天天6| 亚洲欧洲日韩在线| 不卡欧美aaaaa| 中文字幕第一区综合| 国产成人精品免费网站| 久久人人爽人人爽| 国产一区激情在线| 久久综合九色综合97_久久久| 免费精品视频在线| 777久久久精品| 性感美女久久精品| 69堂精品视频| 午夜精品在线视频一区| 欧美日韩精品是欧美日韩精品| 老司机精品视频一区二区三区| 欧美视频自拍偷拍| 亚洲国产一区二区a毛片| 色综合久久综合网欧美综合网| 亚洲视频在线一区| 色94色欧美sute亚洲13| 亚洲午夜精品一区二区三区他趣| 91福利国产成人精品照片| 一区二区高清视频在线观看| 91福利在线播放| 五月天亚洲精品| 日韩一区二区精品| 激情图片小说一区| 欧美国产禁国产网站cc| 不卡电影一区二区三区| 亚洲色图丝袜美腿| 欧美在线视频日韩| 日韩av电影免费观看高清完整版在线观看 | 欧美精品一区二区三区蜜桃视频| 韩日欧美一区二区三区| 欧美不卡一区二区三区四区| 久99久精品视频免费观看| 国产欧美一区视频| 91小视频在线观看| 亚洲h精品动漫在线观看| 91精品国产欧美一区二区| 精品亚洲免费视频| 亚洲欧洲精品成人久久奇米网| 色综合一个色综合| 亚洲成年人网站在线观看| 日韩欧美国产1| 成人福利视频网站| 亚洲自拍偷拍综合| 精品久久久久久久久久久久久久久久久| 久久成人麻豆午夜电影| 中文字幕精品在线不卡| 色婷婷激情综合| 奇米色777欧美一区二区| 国产欧美精品一区二区色综合朱莉| 99久久免费精品| 日日夜夜精品视频天天综合网| 欧美精品一区二区三| youjizz久久| 日韩精品一二三区| 欧美经典三级视频一区二区三区| 色八戒一区二区三区| 捆绑调教一区二区三区| 国产精品欧美久久久久无广告| 欧美日韩国产综合视频在线观看| 久久99精品一区二区三区| 国产精品灌醉下药二区| 69成人精品免费视频| 成人性色生活片免费看爆迷你毛片| 亚洲高清在线精品| 国产亚洲欧美日韩日本| 欧美日韩一区三区| 国产99久久久国产精品免费看 | 欧美久久一二区| 国产99久久久久久免费看农村| 亚洲午夜久久久久久久久电影网| 久久久噜噜噜久久中文字幕色伊伊| 一本久久a久久精品亚洲| 久久99精品久久久久久国产越南| 亚洲精品写真福利| 久久免费美女视频| 欧美日韩视频在线一区二区| 国产91清纯白嫩初高中在线观看 | 日韩午夜激情电影| 在线亚洲+欧美+日本专区| 国产乱码精品1区2区3区| 亚洲成av人片| 中文字幕日韩一区| 久久色.com| 91精品国产高清一区二区三区| 91美女片黄在线观看91美女| 久久电影网电视剧免费观看| 亚洲国产另类精品专区| 中文字幕的久久| 精品国产乱码久久久久久夜甘婷婷 | 日韩欧美123| 欧洲人成人精品| 成人理论电影网| 国产一区二区三区高清播放| 日韩中文字幕一区二区三区| 最近中文字幕一区二区三区| 久久综合九色综合欧美98| 555夜色666亚洲国产免| 色悠久久久久综合欧美99| 成人一区二区三区中文字幕| 久久99精品国产91久久来源| 日韩在线一二三区| 亚洲综合无码一区二区| 中文字幕视频一区二区三区久| 国产片一区二区| 久久久亚洲精品一区二区三区 | 久久精品久久99精品久久| 午夜伦欧美伦电影理论片| 亚洲男人的天堂在线aⅴ视频| 久久久久国产精品免费免费搜索| 日韩一级片在线观看| 5566中文字幕一区二区电影| 欧美日韩一本到| 欧美吻胸吃奶大尺度电影 | 亚洲一区二区视频在线观看| 亚洲欧洲日产国码二区| **网站欧美大片在线观看| 欧美—级在线免费片| 日本一区二区三区在线观看| 久久久久国产一区二区三区四区 | 国产福利一区在线| 国产一区二区福利视频| 国产美女av一区二区三区| 国产乱妇无码大片在线观看| 久久66热re国产| 国产自产v一区二区三区c| 精品无人区卡一卡二卡三乱码免费卡 | 粉嫩在线一区二区三区视频| 丁香网亚洲国际| 成人短视频下载| 色综合天天做天天爱| 色噜噜狠狠成人网p站| 欧美色图天堂网| 欧美日韩国产美| 日韩欧美一级片| 久久久久久久久免费| 国产视频不卡一区| 日韩一区在线看| 亚洲综合清纯丝袜自拍| 丝袜诱惑制服诱惑色一区在线观看 | 一本大道久久a久久精品综合|