📄 tomcrypt_prng.h
字号:
/* ---- PRNG Stuff ---- */#ifdef YARROWstruct yarrow_prng { int cipher, hash; unsigned char pool[MAXBLOCKSIZE]; symmetric_CTR ctr;};#endif#ifdef RC4struct rc4_prng { int x, y; unsigned char buf[256];};#endif#ifdef FORTUNAstruct fortuna_prng { hash_state pool[FORTUNA_POOLS]; /* the pools */ symmetric_key skey; unsigned char K[32], /* the current key */ IV[16]; /* IV for CTR mode */ unsigned long pool_idx, /* current pool we will add to */ pool0_len, /* length of 0'th pool */ wd; ulong64 reset_cnt; /* number of times we have reset */};#endif#ifdef SOBER128struct sober128_prng { ulong32 R[17], /* Working storage for the shift register */ initR[17], /* saved register contents */ konst, /* key dependent constant */ sbuf; /* partial word encryption buffer */ int nbuf, /* number of part-word stream bits buffered */ flag, /* first add_entropy call or not? */ set; /* did we call add_entropy to set key? */ };#endiftypedef union Prng_state {#ifdef YARROW struct yarrow_prng yarrow;#endif#ifdef RC4 struct rc4_prng rc4;#endif#ifdef FORTUNA struct fortuna_prng fortuna;#endif#ifdef SOBER128 struct sober128_prng sober128;#endif} prng_state;extern struct ltc_prng_descriptor { /** Name of the PRNG */ char *name; /** size in bytes of exported state */ int export_size; /** Start a PRNG state @param prng [out] The state to initialize @return CRYPT_OK if successful */ int (*start)(prng_state *prng); /** Add entropy to the PRNG @param in The entropy @param inlen Length of the entropy (octets)\ @param prng The PRNG state @return CRYPT_OK if successful */ int (*add_entropy)(const unsigned char *in, unsigned long inlen, prng_state *prng); /** Ready a PRNG state to read from @param prng The PRNG state to ready @return CRYPT_OK if successful */ int (*ready)(prng_state *prng); /** Read from the PRNG @param out [out] Where to store the data @param outlen Length of data desired (octets) @param prng The PRNG state to read from @return Number of octets read */ unsigned long (*read)(unsigned char *out, unsigned long outlen, prng_state *prng); /** Terminate a PRNG state @param prng The PRNG state to terminate @return CRYPT_OK if successful */ int (*done)(prng_state *prng); /** Export a PRNG state @param out [out] The destination for the state @param outlen [in/out] The max size and resulting size of the PRNG state @param prng The PRNG to export @return CRYPT_OK if successful */ int (*pexport)(unsigned char *out, unsigned long *outlen, prng_state *prng); /** Import a PRNG state @param in The data to import @param inlen The length of the data to import (octets) @param prng The PRNG to initialize/import @return CRYPT_OK if successful */ int (*pimport)(const unsigned char *in, unsigned long inlen, prng_state *prng); /** Self-test the PRNG @return CRYPT_OK if successful, CRYPT_NOP if self-testing has been disabled */ int (*test)(void);} prng_descriptor[];#ifdef YARROWint yarrow_start(prng_state *prng);int yarrow_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng);int yarrow_ready(prng_state *prng);unsigned long yarrow_read(unsigned char *out, unsigned long outlen, prng_state *prng);int yarrow_done(prng_state *prng);int yarrow_export(unsigned char *out, unsigned long *outlen, prng_state *prng);int yarrow_import(const unsigned char *in, unsigned long inlen, prng_state *prng);int yarrow_test(void);extern const struct ltc_prng_descriptor yarrow_desc;#endif#ifdef FORTUNAint fortuna_start(prng_state *prng);int fortuna_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng);int fortuna_ready(prng_state *prng);unsigned long fortuna_read(unsigned char *out, unsigned long outlen, prng_state *prng);int fortuna_done(prng_state *prng);int fortuna_export(unsigned char *out, unsigned long *outlen, prng_state *prng);int fortuna_import(const unsigned char *in, unsigned long inlen, prng_state *prng);int fortuna_test(void);extern const struct ltc_prng_descriptor fortuna_desc;#endif#ifdef RC4int rc4_start(prng_state *prng);int rc4_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng);int rc4_ready(prng_state *prng);unsigned long rc4_read(unsigned char *out, unsigned long outlen, prng_state *prng);int rc4_done(prng_state *prng);int rc4_export(unsigned char *out, unsigned long *outlen, prng_state *prng);int rc4_import(const unsigned char *in, unsigned long inlen, prng_state *prng);int rc4_test(void);extern const struct ltc_prng_descriptor rc4_desc;#endif#ifdef SPRNGint sprng_start(prng_state *prng);int sprng_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng);int sprng_ready(prng_state *prng);unsigned long sprng_read(unsigned char *out, unsigned long outlen, prng_state *prng);int sprng_done(prng_state *prng);int sprng_export(unsigned char *out, unsigned long *outlen, prng_state *prng);int sprng_import(const unsigned char *in, unsigned long inlen, prng_state *prng);int sprng_test(void);extern const struct ltc_prng_descriptor sprng_desc;#endif#ifdef SOBER128int sober128_start(prng_state *prng);int sober128_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng);int sober128_ready(prng_state *prng);unsigned long sober128_read(unsigned char *out, unsigned long outlen, prng_state *prng);int sober128_done(prng_state *prng);int sober128_export(unsigned char *out, unsigned long *outlen, prng_state *prng);int sober128_import(const unsigned char *in, unsigned long inlen, prng_state *prng);int sober128_test(void);extern const struct ltc_prng_descriptor sober128_desc;#endifint find_prng(const char *name);int register_prng(const struct ltc_prng_descriptor *prng);int unregister_prng(const struct ltc_prng_descriptor *prng);int prng_is_valid(int idx);LTC_MUTEX_PROTO(ltc_prng_mutex);/* Slow RNG you **might** be able to use to seed a PRNG with. Be careful as this * might not work on all platforms as planned */unsigned long rng_get_bytes(unsigned char *out, unsigned long outlen, void (*callback)(void));int rng_make_prng(int bits, int wprng, prng_state *prng, void (*callback)(void));/* $Source: /cvs/libtom/libtomcrypt/src/headers/tomcrypt_prng.h,v $ *//* $Revision: 1.3 $ *//* $Date: 2005/06/19 18:00:28 $ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -