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

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

?? chc.c

?? 一些封裝好的加密函數(shù)的源代碼
?? 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 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};/**  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;   }   memcpy(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 (memcmp(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.3 $ *//* $Date: 2005/05/05 14:35:58 $ */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美女被吸乳得到大胸91| 欧美一区二区三级| 日韩亚洲欧美成人一区| 中文乱码免费一区二区| 日韩国产欧美一区二区三区| 成人午夜看片网址| 日韩欧美自拍偷拍| 亚洲风情在线资源站| 成人免费精品视频| www亚洲一区| 日本欧美一区二区在线观看| 99re热这里只有精品免费视频| www国产亚洲精品久久麻豆| 日本欧美肥老太交大片| 欧美性欧美巨大黑白大战| 国产女主播一区| 国产精品夜夜嗨| 精品噜噜噜噜久久久久久久久试看| 亚洲va在线va天堂| 欧美亚洲一区二区在线| 亚洲激情自拍偷拍| 99精品视频一区二区| 国产精品视频yy9299一区| 福利一区在线观看| 国产日韩欧美亚洲| 成人免费视频一区二区| 欧美激情综合在线| 不卡大黄网站免费看| 1区2区3区国产精品| 91亚洲国产成人精品一区二区三 | 蜜桃av一区二区| 欧美剧情片在线观看| 亚洲1区2区3区视频| 7777精品久久久大香线蕉| 五月天国产精品| 日韩视频免费观看高清完整版| 美国av一区二区| 久久婷婷国产综合精品青草| 国产一区二区三区观看| 国产欧美精品区一区二区三区| 福利电影一区二区三区| 最近中文字幕一区二区三区| 91久久香蕉国产日韩欧美9色| 亚洲精品免费在线播放| 欧美精品一卡两卡| 经典三级视频一区| 国产精品欧美久久久久无广告| 97国产精品videossex| 亚洲国产日韩精品| 日韩欧美一级精品久久| 国产一区视频在线看| 中文字幕亚洲一区二区av在线| 91在线免费视频观看| 亚洲午夜久久久久久久久电影院| 欧美日本一区二区在线观看| 久久精品999| 国产精品成人免费| 欧美精品在线一区二区三区| 精品一二三四在线| 亚洲欧美韩国综合色| 91精品中文字幕一区二区三区| 国产一二精品视频| 伊人夜夜躁av伊人久久| 日韩精品一区国产麻豆| 91亚洲国产成人精品一区二区三| 五月天亚洲精品| 国产精品美女久久久久aⅴ | 99久久99久久精品国产片果冻| 一区二区欧美视频| 精品国产91亚洲一区二区三区婷婷| 成人久久18免费网站麻豆| 午夜影院在线观看欧美| 中文字幕巨乱亚洲| 日韩欧美一卡二卡| 在线中文字幕一区| 国产成人综合亚洲网站| 婷婷久久综合九色综合伊人色| 久久精品亚洲国产奇米99| 91极品美女在线| 成人国产免费视频| 久久99国产精品免费| 洋洋成人永久网站入口| 国产视频一区在线观看| 91精品国产综合久久久久久久久久 | 色综合久久中文字幕综合网| 蜜臀久久99精品久久久画质超高清 | 欧美亚洲日本一区| 成人网在线免费视频| 欧美bbbbb| 亚洲va欧美va人人爽午夜| 日韩美女久久久| 久久久久久久久岛国免费| 欧美高清精品3d| 91农村精品一区二区在线| 国产高清不卡一区| 久久国产婷婷国产香蕉| 日韩精品一二三区| 亚洲国产另类av| 亚洲欧美另类小说视频| 中文字幕亚洲一区二区va在线| 国产网红主播福利一区二区| 制服丝袜在线91| 欧美日韩电影在线| 欧美视频日韩视频| 欧美亚洲国产一区二区三区| 91国产免费看| 在线一区二区视频| 欧美午夜免费电影| 欧美日韩亚洲丝袜制服| 欧美日韩综合在线免费观看| 欧洲国内综合视频| 在线欧美一区二区| 欧美性受xxxx黑人xyx| 欧美日韩一区不卡| 555夜色666亚洲国产免| 欧美欧美欧美欧美| 欧美一卡在线观看| 精品国产91洋老外米糕| 久久久精品国产99久久精品芒果| 国产欧美日韩亚州综合| 中文一区二区完整视频在线观看| 欧美激情一区二区三区四区| 中文字幕精品—区二区四季| 亚洲人成网站在线| 亚洲一本大道在线| 欧美96一区二区免费视频| 琪琪一区二区三区| 国内精品自线一区二区三区视频| 国产精品1区二区.| 91丨porny丨中文| 欧美在线免费观看亚洲| 欧美一区国产二区| 久久日韩粉嫩一区二区三区| 国产精品免费aⅴ片在线观看| 亚洲美女屁股眼交| 日韩国产欧美三级| 国产jizzjizz一区二区| 色成人在线视频| 日韩午夜在线观看| 国产精品私人影院| 亚洲va欧美va人人爽午夜| 精品无人区卡一卡二卡三乱码免费卡 | 亚洲图片你懂的| 无码av免费一区二区三区试看 | 秋霞午夜鲁丝一区二区老狼| 国模大尺度一区二区三区| 成人av资源在线观看| 在线免费不卡视频| 久久久精品国产99久久精品芒果| 亚洲人xxxx| 国产精品一线二线三线| 91福利区一区二区三区| 精品国产91乱码一区二区三区 | 激情图区综合网| 91在线国内视频| 日韩精品资源二区在线| 最新高清无码专区| 国精产品一区一区三区mba桃花| 日本精品视频一区二区三区| 欧美精品一区二区在线播放| 一区二区三区美女| 国产成人av在线影院| 欧美三级三级三级| 国产精品国产三级国产aⅴ原创| 日韩高清在线电影| 一本一本久久a久久精品综合麻豆| 精品国产乱码91久久久久久网站| 一区二区三区在线视频免费| 成人综合婷婷国产精品久久蜜臀| 欧美丰满美乳xxx高潮www| 中文字幕亚洲在| 国产成人av电影在线播放| 日韩亚洲国产中文字幕欧美| 一区二区高清在线| 91小视频在线免费看| 国产欧美日韩在线看| 精一区二区三区| 欧美一区二区三区四区视频| 亚洲精品v日韩精品| 成人av在线一区二区三区| 久久综合久久鬼色中文字| 日本一不卡视频| 欧美日韩亚洲综合一区二区三区| 亚洲欧美日韩在线不卡| 成人app在线| 中文字幕一区二区三区在线播放| 国产成人久久精品77777最新版本| 日韩欧美在线观看一区二区三区| 亚洲国产精品久久久久婷婷884| 99久久综合99久久综合网站| 国产欧美一区视频| 国产传媒日韩欧美成人| 2024国产精品视频| 国产一区二区不卡| 久久久三级国产网站| 韩国v欧美v日本v亚洲v| 精品国产精品一区二区夜夜嗨| 久久国产福利国产秒拍| 精品国产亚洲在线| 国产一区欧美二区|