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

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

?? chc.c

?? 這是一個提供了各種加密算法的庫的源代碼
?? 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.com */#include "tomcrypt.h"/**  @file chc.c  CHC support. (Tom St Denis)*/#ifdef CHC_HASH#define UNDEFED_HASH  -17/* chc settings */static int            cipher_idx=UNDEFED_HASH,        /* which cipher */                      cipher_blocksize;               /* blocksize of cipher */const struct ltc_hash_descriptor chc_desc = {   "chc_hash", 12, 0, 0, { 0 }, 0,   &chc_init,   &chc_process,   &chc_done,   &chc_test,   NULL};/**  Initialize the CHC state with a given cipher   @param cipher  The index of the cipher you wish to bind   @return CRYPT_OK if successful*/int chc_register(int cipher){   int err, kl, idx;   if ((err = cipher_is_valid(cipher)) != CRYPT_OK) {      return err;   }   /* will it be valid? */   kl = cipher_descriptor[cipher].block_length;   /* must be >64 bit block */   if (kl <= 8) {      return CRYPT_INVALID_CIPHER;   }   /* can we use the ideal keysize? */   if ((err = cipher_descriptor[cipher].keysize(&kl)) != CRYPT_OK) {      return err;   }   /* we require that key size == block size be a valid choice */   if (kl != cipher_descriptor[cipher].block_length) {      return CRYPT_INVALID_CIPHER;   }   /* determine if chc_hash has been register_hash'ed already */   if ((err = hash_is_valid(idx = find_hash("chc_hash"))) != CRYPT_OK) {      return err;   }   /* store into descriptor */   hash_descriptor[idx].hashsize  =    hash_descriptor[idx].blocksize = cipher_descriptor[cipher].block_length;   /* store the idx and block size */   cipher_idx       = cipher;   cipher_blocksize = cipher_descriptor[cipher].block_length;   return CRYPT_OK;}/**   Initialize the hash state   @param md   The hash state you wish to initialize   @return CRYPT_OK if successful*/int chc_init(hash_state *md){   symmetric_key *key;   unsigned char  buf[MAXBLOCKSIZE];   int            err;    LTC_ARGCHK(md != NULL);   /* is the cipher valid? */   if ((err = cipher_is_valid(cipher_idx)) != CRYPT_OK) {      return err;   }   if (cipher_blocksize != cipher_descriptor[cipher_idx].block_length) {      return CRYPT_INVALID_CIPHER;   }   if ((key = XMALLOC(sizeof(*key))) == NULL) {      return CRYPT_MEM;   }   /* zero key and what not */      zeromem(buf, cipher_blocksize);   if ((err = cipher_descriptor[cipher_idx].setup(buf, cipher_blocksize, 0, key)) != CRYPT_OK) {      XFREE(key);      return err;   }   /* encrypt zero block */   cipher_descriptor[cipher_idx].ecb_encrypt(buf, md->chc.state, key);   /* zero other members */   md->chc.length = 0;   md->chc.curlen = 0;   zeromem(md->chc.buf, sizeof(md->chc.buf));   XFREE(key);   return CRYPT_OK;}/*    key    <= state   T0,T1  <= block   T0     <= encrypt T0   state  <= state xor T0 xor T1*/static int chc_compress(hash_state *md, unsigned char *buf){   unsigned char  T[2][MAXBLOCKSIZE];   symmetric_key *key;   int            err, x;   if ((key = XMALLOC(sizeof(*key))) == NULL) {      return CRYPT_MEM;   }   if ((err = cipher_descriptor[cipher_idx].setup(md->chc.state, cipher_blocksize, 0, key)) != CRYPT_OK) {      XFREE(key);      return err;   }   XMEMCPY(T[1], buf, cipher_blocksize);   cipher_descriptor[cipher_idx].ecb_encrypt(buf, T[0], key);   for (x = 0; x < cipher_blocksize; x++) {       md->chc.state[x] ^= T[0][x] ^ T[1][x];   }   XFREE(key);#ifdef LTC_CLEAN_STACK   zeromem(T, sizeof(T));   zeromem(&key, sizeof(key));#endif   return CRYPT_OK;}/* function for processing blocks */int _chc_process(hash_state * md, const unsigned char *buf, unsigned long len);HASH_PROCESS(_chc_process, chc_compress, chc, (unsigned long)cipher_blocksize)/**   Process a block of memory though the hash   @param md   The hash state   @param in   The data to hash   @param inlen  The length of the data (octets)   @return CRYPT_OK if successful*/int chc_process(hash_state * md, const unsigned char *in, unsigned long inlen){   int err;   LTC_ARGCHK(md   != NULL);   LTC_ARGCHK(in  != NULL);   /* is the cipher valid? */   if ((err = cipher_is_valid(cipher_idx)) != CRYPT_OK) {      return err;   }   if (cipher_blocksize != cipher_descriptor[cipher_idx].block_length) {      return CRYPT_INVALID_CIPHER;   }   return _chc_process(md, in, inlen);}/**   Terminate the hash to get the digest   @param md   The hash state   @param out [out] The destination of the hash (length of the block size of the block cipher)   @return CRYPT_OK if successful*/int chc_done(hash_state *md, unsigned char *out){    int err;    LTC_ARGCHK(md   != NULL);    LTC_ARGCHK(out  != NULL);    /* is the cipher valid? */    if ((err = cipher_is_valid(cipher_idx)) != CRYPT_OK) {       return err;    }    if (cipher_blocksize != cipher_descriptor[cipher_idx].block_length) {       return CRYPT_INVALID_CIPHER;    }    if (md->chc.curlen >= sizeof(md->chc.buf)) {       return CRYPT_INVALID_ARG;    }    /* increase the length of the message */    md->chc.length += md->chc.curlen * 8;    /* append the '1' bit */    md->chc.buf[md->chc.curlen++] = (unsigned char)0x80;    /* if the length is currently above l-8 bytes we append zeros     * then compress.  Then we can fall back to padding zeros and length     * encoding like normal.     */    if (md->chc.curlen > (unsigned long)(cipher_blocksize - 8)) {        while (md->chc.curlen < (unsigned long)cipher_blocksize) {            md->chc.buf[md->chc.curlen++] = (unsigned char)0;        }        chc_compress(md, md->chc.buf);        md->chc.curlen = 0;    }    /* pad upto l-8 bytes of zeroes */    while (md->chc.curlen < (unsigned long)(cipher_blocksize - 8)) {        md->chc.buf[md->chc.curlen++] = (unsigned char)0;    }    /* store length */    STORE64L(md->chc.length, md->chc.buf+(cipher_blocksize-8));    chc_compress(md, md->chc.buf);    /* copy output */    XMEMCPY(out, md->chc.state, cipher_blocksize);#ifdef LTC_CLEAN_STACK    zeromem(md, sizeof(hash_state));#endif    return CRYPT_OK;}/**  Self-test the hash  @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled*/  int chc_test(void){   static const struct {      unsigned char *msg,                     md[MAXBLOCKSIZE];      int            len;   } tests[] = {{   (unsigned char *)"hello world",   { 0xcf, 0x57, 0x9d, 0xc3, 0x0a, 0x0e, 0xea, 0x61,      0x0d, 0x54, 0x47, 0xc4, 0x3c, 0x06, 0xf5, 0x4e },   16}};   int x, oldhashidx, idx;   unsigned char out[MAXBLOCKSIZE];   hash_state md;   /* AES can be under rijndael or aes... try to find it */   if ((idx = find_cipher("aes")) == -1) {      if ((idx = find_cipher("rijndael")) == -1) {         return CRYPT_NOP;      }   }   oldhashidx = cipher_idx;   chc_register(idx);   for (x = 0; x < (int)(sizeof(tests)/sizeof(tests[0])); x++) {       chc_init(&md);       chc_process(&md, tests[x].msg, strlen((char *)tests[x].msg));       chc_done(&md, out);       if (XMEMCMP(out, tests[x].md, tests[x].len)) {          return CRYPT_FAIL_TESTVECTOR;       }   }   if (oldhashidx != UNDEFED_HASH) {      chc_register(oldhashidx);   }   return CRYPT_OK;}#endif/* $Source: /cvs/libtom/libtomcrypt/src/hashes/chc/chc.c,v $ *//* $Revision: 1.6 $ *//* $Date: 2006/11/01 09:28:17 $ */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成年人午夜久久久| 一区二区欧美精品| 亚洲国产精品久久艾草纯爱| 色偷偷久久一区二区三区| 亚洲免费av观看| 91丨九色porny丨蝌蚪| 一区二区成人在线视频 | 欧美videos大乳护士334| 久久精品久久99精品久久| 久久久久久久国产精品影院| 盗摄精品av一区二区三区| 综合久久国产九一剧情麻豆| 欧美亚洲动漫精品| 久久99国产精品成人| 国产精品―色哟哟| 欧美天天综合网| 久久不见久久见免费视频7| 欧美日韩国产123区| 久久激五月天综合精品| 热久久一区二区| 欧美国产日韩在线观看| 在线亚洲+欧美+日本专区| 麻豆精品久久久| 国产精品久久久久四虎| 宅男在线国产精品| 欧美在线免费观看视频| 蜜臀精品一区二区三区在线观看| 久久久久久久久久电影| 色婷婷综合久久久久中文 | 99久久精品久久久久久清纯| 国产999精品久久久久久绿帽| 91极品美女在线| 2020国产精品久久精品美国| 亚洲国产精品欧美一二99| 成人不卡免费av| 国产精品久久一卡二卡| 日本成人在线电影网| 久久久久久日产精品| 欧美三级在线播放| 国产在线播放一区| 午夜天堂影视香蕉久久| 欧美性videosxxxxx| 国产999精品久久久久久绿帽| 亚洲综合一二三区| 欧美精品一区二区三区高清aⅴ| av电影天堂一区二区在线观看| 日韩电影一区二区三区| 亚洲三级电影网站| 久久亚洲二区三区| 欧美伦理视频网站| 91黄色免费版| 不卡高清视频专区| 国产精品66部| 久久精品国产99国产精品| 亚洲精品日韩一| 国产精品久久久久久久久免费桃花| 51精品秘密在线观看| 在线看国产一区二区| 9人人澡人人爽人人精品| 色婷婷综合在线| 成人黄色小视频| 国产九九视频一区二区三区| 粉嫩蜜臀av国产精品网站| 亚洲一卡二卡三卡四卡无卡久久| 国产视频一区二区三区在线观看| 3d成人h动漫网站入口| 91福利小视频| 色婷婷综合久久久久中文一区二区| 成人精品在线视频观看| 国产a区久久久| 国产精品一区二区免费不卡| 免费高清成人在线| 美腿丝袜一区二区三区| 性做久久久久久| 日韩精品电影在线| 午夜成人免费电影| 日韩福利视频网| 首页国产丝袜综合| 天堂成人国产精品一区| 丝袜亚洲精品中文字幕一区| 午夜视频久久久久久| 日韩精品免费专区| 日本成人中文字幕在线视频| 免费人成在线不卡| 久久99九九99精品| 国产一区二区三区免费看| 国产在线精品国自产拍免费| 国产成人亚洲综合a∨猫咪| 国产成人在线观看免费网站| 成人av网站免费观看| 94-欧美-setu| 亚洲国产精品一区二区久久恐怖片 | 国产伦精品一区二区三区免费迷| 日本成人在线网站| 亚洲成人第一页| 欧美经典一区二区| 中文字幕一区二区三区在线播放 | 91成人网在线| 欧美亚洲一区二区三区四区| 欧美主播一区二区三区美女| 欧美视频一区二区三区在线观看| 欧美色图12p| 欧美性感一类影片在线播放| 色婷婷久久99综合精品jk白丝| 欧美三区在线视频| 制服.丝袜.亚洲.中文.综合| 欧美成人欧美edvon| 亚洲精品在线电影| 国产性色一区二区| 国产欧美一区二区在线| 欧美激情一区二区三区| 亚洲欧美一区二区三区极速播放 | 香蕉av福利精品导航| 五月综合激情日本mⅴ| 麻豆成人久久精品二区三区红| 国产曰批免费观看久久久| 国产精品一区二区黑丝| 高清国产午夜精品久久久久久| eeuss国产一区二区三区| 欧美性大战久久| 欧美成人一区二区三区片免费| 久久久久国产一区二区三区四区| 精品免费国产一区二区三区四区| 国产精品国产三级国产aⅴ入口| 亚洲综合一二三区| 久久99精品国产91久久来源| voyeur盗摄精品| 欧美电影一区二区| 91精品国产综合久久久久久久| 视频一区在线播放| 国产黄色成人av| 欧美日韩精品欧美日韩精品一| 日韩欧美一级片| 久久综合九色综合久久久精品综合 | 欧美女孩性生活视频| 欧美精品一区二| 夜夜嗨av一区二区三区网页| 理论片日本一区| 国产精品一卡二卡在线观看| 色狠狠色狠狠综合| 久久久久国产精品厨房| 亚洲韩国一区二区三区| 免费成人美女在线观看.| 91美女在线观看| 精品播放一区二区| 亚洲国产日韩a在线播放性色| 国产一区视频在线看| 精品1区2区3区| 久久九九影视网| 久久精品国产99国产精品| 在线观看日韩av先锋影音电影院| 久久人人97超碰com| 亚洲动漫第一页| av在线这里只有精品| 欧美一级日韩一级| 石原莉奈一区二区三区在线观看| voyeur盗摄精品| 欧美成人a∨高清免费观看| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲午夜国产一区99re久久| 国产成人免费xxxxxxxx| 欧美色图第一页| 亚洲一区精品在线| av电影一区二区| 国产欧美精品一区aⅴ影院| 蜜臀av一级做a爰片久久| 91福利国产精品| 国产精品私房写真福利视频| 精品一区二区三区视频在线观看| 91麻豆精品国产自产在线| 一区二区三区欧美日| 99久久免费精品高清特色大片| 欧美sm美女调教| 黄色日韩网站视频| 日韩亚洲欧美高清| 日韩黄色免费网站| 5858s免费视频成人| 亚洲不卡av一区二区三区| 这里只有精品视频在线观看| 丝袜亚洲精品中文字幕一区| 欧美日韩国产综合久久| 亚洲大型综合色站| 91无套直看片红桃| 一区二区三区四区精品在线视频 | 制服丝袜成人动漫| 午夜电影网一区| 9191成人精品久久| 久久久久久久综合| 欧美日韩中文国产| 精品国产欧美一区二区| 在线视频你懂得一区| 国产精品综合久久| 亚洲mv大片欧洲mv大片精品| 久久久久久久久久美女| 欧美久久一区二区| 成人av小说网| 国产福利一区二区三区视频 | 国产精品乱码妇女bbbb| 亚洲黄色免费网站| 欧美蜜桃一区二区三区|