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

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

?? dh.c

?? 該壓縮包中包括 tom的加密函數庫及pdf說明 ,以及Rinick s ECC:橢圓曲線非對稱加密密鑰生成器
?? C
字號:
/* LibTomCrypt, modular cryptographic library -- Tom St Denis * * LibTomCrypt is a library that provides various cryptographic * algorithms in a highly modular and flexible manner. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org */#include "tomcrypt.h"/**  @file dh.c  DH crypto, Tom St Denis*/  #ifdef MDH/* max export size we'll encounter (smaller than this but lets round up a bit) */#define DH_BUF_SIZE 1200/* This holds the key settings.  ***MUST*** be organized by size from smallest to largest. */static const struct {    int size;    char *name, *base, *prime;} sets[] = {#ifdef DH768{   96,   "DH-768",   "4",   "F///////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "//////m3wvV"},#endif#ifdef DH1024{   128,   "DH-1024",   "4",   "F///////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "////////////////////////////////////////////////m3C47"},#endif#ifdef DH1280{   160,   "DH-1280",   "4",   "F///////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "//////////////////////////////m4kSN"},#endif#ifdef DH1536{   192,   "DH-1536",   "4",   "F///////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "////////////m5uqd"},#endif#ifdef DH1792{   224,   "DH-1792",   "4",   "F///////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "//////////////////////////////////////////////////////mT/sd"},#endif#ifdef DH2048{   256,   "DH-2048",   "4",   "3///////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "/////////////////////////////////////////m8MPh"},#endif#ifdef DH2560{   320,   "DH-2560",   "4",   "3///////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "/////mKFpF"},#endif#ifdef DH3072{   384,   "DH-3072",   "4",   "3///////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "/////////////////////////////m32nN"},#endif#ifdef DH4096{   512,   "DH-4096",   "4",   "////////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "////////////////////////////////////////////////////////////"   "/////////////////////m8pOF"},#endif{   0,   NULL,   NULL,   NULL}};static int is_valid_idx(int n){   int x;   for (x = 0; sets[x].size; x++);   if ((n < 0) || (n >= x)) {      return 0;   }   return 1;}/**   Test the DH sub-system (can take a while)   @return CRYPT_OK if successful*/int dh_test(void){    mp_int p, g, tmp;    int x, err, primality;    if ((err = mp_init_multi(&p, &g, &tmp, NULL)) != MP_OKAY)                 { goto error; }    for (x = 0; sets[x].size != 0; x++) {#if 0        printf("dh_test():testing size %d-bits\n", sets[x].size * 8);#endif        if ((err = mp_read_radix(&g,(char *)sets[x].base, 64)) != MP_OKAY)    { goto error; }        if ((err = mp_read_radix(&p,(char *)sets[x].prime, 64)) != MP_OKAY)   { goto error; }        /* ensure p is prime */        if ((err = is_prime(&p, &primality)) != CRYPT_OK)                     { goto done; }        if (primality == 0) {           err = CRYPT_FAIL_TESTVECTOR;           goto done;        }        if ((err = mp_sub_d(&p, 1, &tmp)) != MP_OKAY)                         { goto error; }        if ((err = mp_div_2(&tmp, &tmp)) != MP_OKAY)                          { goto error; }        /* ensure (p-1)/2 is prime */        if ((err = is_prime(&tmp, &primality)) != CRYPT_OK)                   { goto done; }        if (primality == 0) {           err = CRYPT_FAIL_TESTVECTOR;           goto done;        }        /* now see if g^((p-1)/2) mod p is in fact 1 */        if ((err = mp_exptmod(&g, &tmp, &p, &tmp)) != MP_OKAY)                { goto error; }        if (mp_cmp_d(&tmp, 1)) {           err = CRYPT_FAIL_TESTVECTOR;           goto done;        }    }    err = CRYPT_OK;    goto done;error:    err = mpi_to_ltc_error(err);done:    mp_clear_multi(&tmp, &g, &p, NULL);    return err;}/**   Get the min and max DH key sizes (octets)   @param low    [out] The smallest key size supported   @param high   [out] The largest key size supported*/void dh_sizes(int *low, int *high){   int x;   LTC_ARGCHK(low != NULL);   LTC_ARGCHK(high != NULL);   *low  = INT_MAX;   *high = 0;   for (x = 0; sets[x].size != 0; x++) {       if (*low > sets[x].size)  *low  = sets[x].size;       if (*high < sets[x].size) *high = sets[x].size;   }}/**  Returns the key size of a given DH key (octets)  @param key   The DH key to get the size of  @return The size if valid or INT_MAX if not*/int dh_get_size(dh_key *key){    LTC_ARGCHK(key != NULL);    if (is_valid_idx(key->idx) == 1) {        return sets[key->idx].size;    } else {        return INT_MAX; /* large value that would cause dh_make_key() to fail */    }}/**  Make a DH key [private key pair]  @param prng     An active PRNG state  @param wprng    The index for the PRNG you desire to use  @param keysize  The key size (octets) desired  @param key      [out] Where the newly created DH key will be stored  @return CRYPT_OK if successful, note: on error all allocated memory will be freed automatically.*/int dh_make_key(prng_state *prng, int wprng, int keysize, dh_key *key){   unsigned char *buf;   unsigned long x;   mp_int p, g;   int err;   LTC_ARGCHK(key  != NULL);   /* good prng? */   if ((err = prng_is_valid(wprng)) != CRYPT_OK) {      return err;   }   /* find key size */   for (x = 0; (keysize > sets[x].size) && (sets[x].size != 0); x++);#ifdef FAST_PK   keysize = MIN(sets[x].size, 32);#else   keysize = sets[x].size;#endif   if (sets[x].size == 0) {      return CRYPT_INVALID_KEYSIZE;   }   key->idx = x;   /* allocate buffer */   buf = XMALLOC(keysize);   if (buf == NULL) {      return CRYPT_MEM;   }   /* make up random string */   if (prng_descriptor[wprng].read(buf, keysize, prng) != (unsigned long)keysize) {      err = CRYPT_ERROR_READPRNG;       goto error2;   }   /* init parameters */   if ((err = mp_init_multi(&g, &p, &key->x, &key->y, NULL)) != MP_OKAY) {      goto error;   }   if ((err = mp_read_radix(&g, sets[key->idx].base, 64)) != MP_OKAY)      { goto error; }   if ((err = mp_read_radix(&p, sets[key->idx].prime, 64)) != MP_OKAY)     { goto error; }   /* load the x value */   if ((err = mp_read_unsigned_bin(&key->x, buf, keysize)) != MP_OKAY)     { goto error; }   if ((err = mp_exptmod(&g, &key->x, &p, &key->y)) != MP_OKAY)            { goto error; }   key->type = PK_PRIVATE;   if ((err = mp_shrink(&key->x)) != MP_OKAY)                              { goto error; }   if ((err = mp_shrink(&key->y)) != MP_OKAY)                              { goto error; }   /* free up ram */   err = CRYPT_OK;   goto done;error:   err = mpi_to_ltc_error(err);error2:   mp_clear_multi(&key->x, &key->y, NULL);done:#ifdef LTC_CLEAN_STACK   zeromem(buf, keysize);#endif   mp_clear_multi(&p, &g, NULL);   XFREE(buf);   return err;}/**  Free the allocated ram for a DH key  @param key   The key which you wish to free*/ void dh_free(dh_key *key){   LTC_ARGCHK(key != NULL);   mp_clear_multi(&key->x, &key->y, NULL);}/**  Export a DH key to a binary packet  @param out    [out] The destination for the key  @param outlen [in/out] The max size and resulting size of the DH key  @param type   Which type of key (PK_PRIVATE or PK_PUBLIC)  @param key    The key you wish to export  @return CRYPT_OK if successful*/int dh_export(unsigned char *out, unsigned long *outlen, int type, dh_key *key){   unsigned long y, z;   int err;   LTC_ARGCHK(out    != NULL);   LTC_ARGCHK(outlen != NULL);   LTC_ARGCHK(key    != NULL);   /* can we store the static header?  */   if (*outlen < (PACKET_SIZE + 2)) {      return CRYPT_BUFFER_OVERFLOW;   }      if (type == PK_PRIVATE && key->type != PK_PRIVATE) {      return CRYPT_PK_NOT_PRIVATE;   }   /* header */   y = PACKET_SIZE;   /* header */   out[y++] = type;   out[y++] = (unsigned char)(sets[key->idx].size / 8);   /* export y */   OUTPUT_BIGNUM(&key->y, out, y, z);   if (type == PK_PRIVATE) {      /* export x */      OUTPUT_BIGNUM(&key->x, out, y, z);   }   /* store header */   packet_store_header(out, PACKET_SECT_DH, PACKET_SUB_KEY);   /* store len */   *outlen = y;   return CRYPT_OK;}/**  Import a DH key from a binary packet  @param in     The packet to read  @param inlen  The length of the input packet  @param key    [out] Where to import the key to  @return CRYPT_OK if successful, on error all allocated memory is freed automatically*/int dh_import(const unsigned char *in, unsigned long inlen, dh_key *key){   unsigned long x, y, s;   int err;   LTC_ARGCHK(in  != NULL);   LTC_ARGCHK(key != NULL);   /* make sure valid length */   if ((2+PACKET_SIZE) > inlen) {      return CRYPT_INVALID_PACKET;   }   /* check type byte */   if ((err = packet_valid_header((unsigned char *)in, PACKET_SECT_DH, PACKET_SUB_KEY)) != CRYPT_OK) {      return err;   }   /* init */   if ((err = mp_init_multi(&key->x, &key->y, NULL)) != MP_OKAY) {      return mpi_to_ltc_error(err);   }   /* advance past packet header */   y = PACKET_SIZE;   /* key type, e.g. private, public */   key->type = (int)in[y++];   /* key size in bytes */   s  = (unsigned long)in[y++] * 8;   for (x = 0; (s > (unsigned long)sets[x].size) && (sets[x].size != 0); x++);   if (sets[x].size == 0) {      err = CRYPT_INVALID_KEYSIZE;      goto error;   }   key->idx = (int)x;   /* type check both values */   if ((key->type != PK_PUBLIC) && (key->type != PK_PRIVATE))  {      err = CRYPT_PK_TYPE_MISMATCH;      goto error;   }   /* is the key idx valid? */   if (is_valid_idx(key->idx) != 1) {      err = CRYPT_PK_TYPE_MISMATCH;      goto error;   }   /* load public value g^x mod p*/   INPUT_BIGNUM(&key->y, in, x, y, inlen);   if (key->type == PK_PRIVATE) {      INPUT_BIGNUM(&key->x, in, x, y, inlen);   }   /* eliminate private key if public */   if (key->type == PK_PUBLIC) {      mp_clear(&key->x);   }   return CRYPT_OK;error:   mp_clear_multi(&key->y, &key->x, NULL);   return err;}/**   Create a DH shared secret.   @param private_key     The private DH key in the pair   @param public_key      The public DH key in the pair    @param out             [out] The destination of the shared data   @param outlen          [in/out] The max size and resulting size of the shared data.   @return CRYPT_OK if successful*/int dh_shared_secret(dh_key *private_key, dh_key *public_key,                     unsigned char *out, unsigned long *outlen){   mp_int tmp, p;   unsigned long x;   int err;   LTC_ARGCHK(private_key != NULL);   LTC_ARGCHK(public_key  != NULL);   LTC_ARGCHK(out         != NULL);   LTC_ARGCHK(outlen      != NULL);   /* types valid? */   if (private_key->type != PK_PRIVATE) {      return CRYPT_PK_NOT_PRIVATE;   }   /* same idx? */   if (private_key->idx != public_key->idx) {      return CRYPT_PK_TYPE_MISMATCH;   }   /* compute y^x mod p */   if ((err = mp_init_multi(&tmp, &p, NULL)) != MP_OKAY) {      return mpi_to_ltc_error(err);   }   if ((err = mp_read_radix(&p, (char *)sets[private_key->idx].prime, 64)) != MP_OKAY)     { goto error; }   if ((err = mp_exptmod(&public_key->y, &private_key->x, &p, &tmp)) != MP_OKAY)           { goto error; }   /* enough space for output? */   x = (unsigned long)mp_unsigned_bin_size(&tmp);   if (*outlen < x) {      err = CRYPT_BUFFER_OVERFLOW;      goto done;   }   if ((err = mp_to_unsigned_bin(&tmp, out)) != MP_OKAY)                                   { goto error; }   *outlen = x;   err = CRYPT_OK;   goto done;error:   err = mpi_to_ltc_error(err);done:   mp_clear_multi(&p, &tmp, NULL);   return err;}#include "dh_sys.c"#endif/* $Source: /cvs/libtom/libtomcrypt/src/pk/dh/dh.c,v $ *//* $Revision: 1.3 $ *//* $Date: 2005/05/05 14:35:59 $ */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
www.66久久| 最新中文字幕一区二区三区| 中文字幕va一区二区三区| 午夜精品福利在线| av高清不卡在线| 精品国产伦一区二区三区观看方式| 中文字幕字幕中文在线中不卡视频| 免费xxxx性欧美18vr| 91美女片黄在线观看91美女| 久久久综合激的五月天| 肉色丝袜一区二区| 色综合久久综合| 国产午夜精品理论片a级大结局| 手机精品视频在线观看| 色哟哟国产精品| 亚洲欧洲日韩av| 成人av午夜影院| 久久亚洲影视婷婷| 国产美女精品人人做人人爽| 欧美一区二区三区四区高清| 亚洲国产成人91porn| 91香蕉视频黄| 国产精品久久久久久久久果冻传媒| 蓝色福利精品导航| 日韩欧美一区中文| 玖玖九九国产精品| 欧美一区二区三区啪啪| 日韩电影在线观看网站| 欧美精品久久天天躁| 亚洲123区在线观看| 欧美日韩三级视频| 午夜精品福利在线| 欧美一区二区福利在线| 秋霞成人午夜伦在线观看| 91精品国产91久久久久久一区二区 | 成人免费的视频| 国产日韩欧美精品在线| 成人午夜视频在线观看| 综合色中文字幕| 色就色 综合激情| 亚洲一区在线电影| 欧美精品一二三四| 九九国产精品视频| 久久午夜老司机| 成人综合在线网站| 一区二区三区自拍| 欧美乱妇20p| 国产酒店精品激情| **欧美大码日韩| 欧美三级资源在线| 老汉av免费一区二区三区| 亚洲国产精品精华液2区45| 色综合一个色综合亚洲| 亚洲国产va精品久久久不卡综合| 91精品国产美女浴室洗澡无遮挡| 日本aⅴ亚洲精品中文乱码| 久久久99精品免费观看不卡| 福利91精品一区二区三区| 亚洲欧美国产高清| 26uuu亚洲综合色欧美 | av高清久久久| 性感美女极品91精品| 精品国产三级a在线观看| 99视频精品免费视频| 婷婷久久综合九色综合伊人色| 亚洲精品在线观看视频| 色伊人久久综合中文字幕| 麻豆久久久久久| 亚洲欧美乱综合| 久久先锋资源网| 欧美日韩综合在线| 成人丝袜18视频在线观看| 水蜜桃久久夜色精品一区的特点| 久久女同精品一区二区| 精品视频一区三区九区| 不卡av电影在线播放| 天堂av在线一区| 亚洲精品视频在线| 久久伊人蜜桃av一区二区| 欧美三区在线视频| 99国产精品久久久| 黑人巨大精品欧美一区| 午夜亚洲国产au精品一区二区| 中国色在线观看另类| 欧美一区二区三区四区在线观看| 91看片淫黄大片一级在线观看| 久久99蜜桃精品| 亚洲福利国产精品| 亚洲视频免费看| 国产欧美视频一区二区三区| 欧美人xxxx| 欧洲av在线精品| 91啪九色porn原创视频在线观看| 精品一区二区三区香蕉蜜桃| 婷婷综合另类小说色区| 一区二区在线电影| 最近中文字幕一区二区三区| 26uuu亚洲| 久久综合九色综合欧美98| 91精品国产入口在线| 欧美日韩国产另类一区| 欧美丝袜自拍制服另类| 91色乱码一区二区三区| 成人黄色在线网站| 丰满岳乱妇一区二区三区| 国产黄人亚洲片| 国产精品1区二区.| 国产精品一区专区| 国产精品综合在线视频| 国产精品一线二线三线| 国产白丝精品91爽爽久久| 国产一区二区女| 成人综合在线观看| 99精品欧美一区二区蜜桃免费 | 一区二区三区加勒比av| 亚洲天堂成人在线观看| 成人免费小视频| 亚洲嫩草精品久久| 亚洲国产综合人成综合网站| 亚洲成人免费电影| 日韩vs国产vs欧美| 国精产品一区一区三区mba桃花 | 色哟哟亚洲精品| 91福利在线免费观看| 精品视频免费看| 91精品久久久久久久91蜜桃| 91麻豆精品国产91久久久资源速度 | 91精品免费观看| 欧美一区二区美女| 欧美精品一区二区三区蜜桃| 国产亚洲精品久| 综合在线观看色| 亚洲成精国产精品女| 麻豆精品在线观看| 懂色av噜噜一区二区三区av| av电影在线观看完整版一区二区 | 国产91精品免费| 色婷婷一区二区| 666欧美在线视频| 久久久久久久国产精品影院| 国产欧美综合在线观看第十页| 1000精品久久久久久久久| 午夜一区二区三区视频| 久久国产尿小便嘘嘘| heyzo一本久久综合| 欧美福利视频导航| 欧美国产一区二区| 婷婷六月综合网| 国产99一区视频免费| 欧美日韩国产一区| 久久免费国产精品| 亚洲永久精品大片| 国产尤物一区二区在线| 欧美又粗又大又爽| 久久九九99视频| 天堂久久一区二区三区| 成人高清视频在线观看| 91精品免费观看| 亚洲美女屁股眼交3| 国精品**一区二区三区在线蜜桃| 色屁屁一区二区| 久久精品在这里| 日本免费新一区视频| 色噜噜狠狠色综合中国| 2欧美一区二区三区在线观看视频| 亚洲另类春色校园小说| 精品一区二区三区欧美| 欧美午夜精品一区二区三区| 欧美极品少妇xxxxⅹ高跟鞋 | 精品国产网站在线观看| 亚洲成人资源网| 92精品国产成人观看免费| 国产亚洲短视频| 奇米影视一区二区三区小说| 色婷婷精品大在线视频| 国产精品视频看| 国产精品综合一区二区三区| 91精品国产免费| 亚洲成人av免费| 欧美性xxxxxx少妇| 欧美激情一区二区三区在线| 久久99精品国产.久久久久| 欧美精品久久一区二区三区| 亚洲精品久久嫩草网站秘色| 国产夫妻精品视频| 久久久一区二区三区捆绑**| 毛片一区二区三区| 日韩精品中文字幕一区| 肉丝袜脚交视频一区二区| 欧美日韩国产精品自在自线| 亚洲乱码国产乱码精品精98午夜| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 亚洲高清免费视频| 欧美在线制服丝袜| 亚洲最新视频在线播放| 色欲综合视频天天天| 亚洲黄色av一区| 欧美天堂亚洲电影院在线播放| 尤物在线观看一区| 精品视频全国免费看|