📄 tomcrypt_hash.h
字号:
int rmd128_test(void);extern const struct ltc_hash_descriptor rmd128_desc;#endif#ifdef RIPEMD160int rmd160_init(hash_state * md);int rmd160_process(hash_state * md, const unsigned char *in, unsigned long inlen);int rmd160_done(hash_state * md, unsigned char *hash);int rmd160_test(void);extern const struct ltc_hash_descriptor rmd160_desc;#endifint find_hash(const char *name);int find_hash_id(unsigned char ID);int find_hash_any(const char *name, int digestlen);int register_hash(const struct ltc_hash_descriptor *hash);int unregister_hash(const struct ltc_hash_descriptor *hash);int hash_is_valid(int idx);int hash_memory(int hash, const unsigned char *in, unsigned long inlen, unsigned char *out, unsigned long *outlen);int hash_memory_multi(int hash, unsigned char *out, unsigned long *outlen, const unsigned char *in, unsigned long inlen, ...);int hash_filehandle(int hash, FILE *in, unsigned char *out, unsigned long *outlen);int hash_file(int hash, const char *fname, unsigned char *out, unsigned long *outlen);/* a simple macro for making hash "process" functions */#define HASH_PROCESS(func_name, compress_name, state_var, block_size) \int func_name (hash_state * md, const unsigned char *in, unsigned long inlen) \{ \ unsigned long n; \ int err; \ LTC_ARGCHK(md != NULL); \ LTC_ARGCHK(in != NULL); \ if (md-> state_var .curlen > sizeof(md-> state_var .buf)) { \ return CRYPT_INVALID_ARG; \ } \ while (inlen > 0) { \ if (md-> state_var .curlen == 0 && inlen >= block_size) { \ if ((err = compress_name (md, (unsigned char *)in)) != CRYPT_OK) { \ return err; \ } \ md-> state_var .length += block_size * 8; \ in += block_size; \ inlen -= block_size; \ } else { \ n = MIN(inlen, (block_size - md-> state_var .curlen)); \ memcpy(md-> state_var .buf + md-> state_var.curlen, in, (size_t)n); \ md-> state_var .curlen += n; \ in += n; \ inlen -= n; \ if (md-> state_var .curlen == block_size) { \ if ((err = compress_name (md, md-> state_var .buf)) != CRYPT_OK) {\ return err; \ } \ md-> state_var .length += 8*block_size; \ md-> state_var .curlen = 0; \ } \ } \ } \ return CRYPT_OK; \}#ifdef HMACtypedef struct Hmac_state { hash_state md; int hash; hash_state hashstate; unsigned char *key;} hmac_state;int hmac_init(hmac_state *hmac, int hash, const unsigned char *key, unsigned long keylen);int hmac_process(hmac_state *hmac, const unsigned char *in, unsigned long inlen);int hmac_done(hmac_state *hmac, unsigned char *out, unsigned long *outlen);int hmac_test(void);int hmac_memory(int hash, const unsigned char *key, unsigned long keylen, const unsigned char *in, unsigned long inlen, unsigned char *out, unsigned long *outlen);int hmac_memory_multi(int hash, const unsigned char *key, unsigned long keylen, unsigned char *out, unsigned long *outlen, const unsigned char *in, unsigned long inlen, ...);int hmac_file(int hash, const char *fname, const unsigned char *key, unsigned long keylen, unsigned char *dst, unsigned long *dstlen);#endif#ifdef OMACtypedef struct { int cipher_idx, buflen, blklen; unsigned char block[MAXBLOCKSIZE], prev[MAXBLOCKSIZE], Lu[2][MAXBLOCKSIZE]; symmetric_key key;} omac_state;int omac_init(omac_state *omac, int cipher, const unsigned char *key, unsigned long keylen);int omac_process(omac_state *omac, const unsigned char *in, unsigned long inlen);int omac_done(omac_state *omac, unsigned char *out, unsigned long *outlen);int omac_memory(int cipher, const unsigned char *key, unsigned long keylen, const unsigned char *in, unsigned long inlen, unsigned char *out, unsigned long *outlen);int omac_memory_multi(int cipher, const unsigned char *key, unsigned long keylen, unsigned char *out, unsigned long *outlen, const unsigned char *in, unsigned long inlen, ...);int omac_file(int cipher, const unsigned char *key, unsigned long keylen, const char *filename, unsigned char *out, unsigned long *outlen);int omac_test(void);#endif /* OMAC */#ifdef PMACtypedef struct { unsigned char Ls[32][MAXBLOCKSIZE], /* L shifted by i bits to the left */ Li[MAXBLOCKSIZE], /* value of Li [current value, we calc from previous recall] */ Lr[MAXBLOCKSIZE], /* L * x^-1 */ block[MAXBLOCKSIZE], /* currently accumulated block */ checksum[MAXBLOCKSIZE]; /* current checksum */ symmetric_key key; /* scheduled key for cipher */ unsigned long block_index; /* index # for current block */ int cipher_idx, /* cipher idx */ block_len, /* length of block */ buflen; /* number of bytes in the buffer */} pmac_state;int pmac_init(pmac_state *pmac, int cipher, const unsigned char *key, unsigned long keylen);int pmac_process(pmac_state *pmac, const unsigned char *in, unsigned long inlen);int pmac_done(pmac_state *pmac, unsigned char *out, unsigned long *outlen);int pmac_memory(int cipher, const unsigned char *key, unsigned long keylen, const unsigned char *msg, unsigned long msglen, unsigned char *out, unsigned long *outlen);int pmac_memory_multi(int cipher, const unsigned char *key, unsigned long keylen, unsigned char *out, unsigned long *outlen, const unsigned char *in, unsigned long inlen, ...);int pmac_file(int cipher, const unsigned char *key, unsigned long keylen, const char *filename, unsigned char *out, unsigned long *outlen);int pmac_test(void);/* internal functions */int pmac_ntz(unsigned long x);void pmac_shift_xor(pmac_state *pmac);#endif /* PMAC */#ifdef EAX_MODE#if !(defined(OMAC) && defined(CTR)) #error EAX_MODE requires OMAC and CTR#endiftypedef struct { unsigned char N[MAXBLOCKSIZE]; symmetric_CTR ctr; omac_state headeromac, ctomac;} eax_state;int eax_init(eax_state *eax, int cipher, const unsigned char *key, unsigned long keylen, const unsigned char *nonce, unsigned long noncelen, const unsigned char *header, unsigned long headerlen);int eax_encrypt(eax_state *eax, const unsigned char *pt, unsigned char *ct, unsigned long length);int eax_decrypt(eax_state *eax, const unsigned char *ct, unsigned char *pt, unsigned long length);int eax_addheader(eax_state *eax, const unsigned char *header, unsigned long length);int eax_done(eax_state *eax, unsigned char *tag, unsigned long *taglen);int eax_encrypt_authenticate_memory(int cipher, const unsigned char *key, unsigned long keylen, const unsigned char *nonce, unsigned long noncelen, const unsigned char *header, unsigned long headerlen, const unsigned char *pt, unsigned long ptlen, unsigned char *ct, unsigned char *tag, unsigned long *taglen);int eax_decrypt_verify_memory(int cipher, const unsigned char *key, unsigned long keylen, const unsigned char *nonce, unsigned long noncelen, const unsigned char *header, unsigned long headerlen, const unsigned char *ct, unsigned long ctlen, unsigned char *pt, unsigned char *tag, unsigned long taglen, int *stat); int eax_test(void);#endif /* EAX MODE */#ifdef OCB_MODEtypedef struct { unsigned char L[MAXBLOCKSIZE], /* L value */ Ls[32][MAXBLOCKSIZE], /* L shifted by i bits to the left */ Li[MAXBLOCKSIZE], /* value of Li [current value, we calc from previous recall] */ Lr[MAXBLOCKSIZE], /* L * x^-1 */ R[MAXBLOCKSIZE], /* R value */ checksum[MAXBLOCKSIZE]; /* current checksum */ symmetric_key key; /* scheduled key for cipher */ unsigned long block_index; /* index # for current block */ int cipher, /* cipher idx */ block_len; /* length of block */} ocb_state;int ocb_init(ocb_state *ocb, int cipher, const unsigned char *key, unsigned long keylen, const unsigned char *nonce);int ocb_encrypt(ocb_state *ocb, const unsigned char *pt, unsigned char *ct);int ocb_decrypt(ocb_state *ocb, const unsigned char *ct, unsigned char *pt);int ocb_done_encrypt(ocb_state *ocb, const unsigned char *pt, unsigned long ptlen, unsigned char *ct, unsigned char *tag, unsigned long *taglen);int ocb_done_decrypt(ocb_state *ocb, const unsigned char *ct, unsigned long ctlen, unsigned char *pt, const unsigned char *tag, unsigned long taglen, int *stat);int ocb_encrypt_authenticate_memory(int cipher, const unsigned char *key, unsigned long keylen, const unsigned char *nonce, const unsigned char *pt, unsigned long ptlen, unsigned char *ct, unsigned char *tag, unsigned long *taglen);int ocb_decrypt_verify_memory(int cipher, const unsigned char *key, unsigned long keylen, const unsigned char *nonce, const unsigned char *ct, unsigned long ctlen, unsigned char *pt, const unsigned char *tag, unsigned long taglen, int *stat);int ocb_test(void);/* internal functions */void ocb_shift_xor(ocb_state *ocb, unsigned char *Z);int ocb_ntz(unsigned long x);int s_ocb_done(ocb_state *ocb, const unsigned char *pt, unsigned long ptlen, unsigned char *ct, unsigned char *tag, unsigned long *taglen, int mode);#endif /* OCB_MODE */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -