Lines Matching refs:prng

31 int rc4_start(prng_state *prng)  in rc4_start()  argument
33 LTC_ARGCHK(prng != NULL); in rc4_start()
34 prng->ready = 0; in rc4_start()
36 prng->u.rc4.s.x = 0; in rc4_start()
38 XMEMSET(&prng->u.rc4.s.buf, 0, sizeof(prng->u.rc4.s.buf)); in rc4_start()
39 LTC_MUTEX_INIT(&prng->lock) in rc4_start()
50 int rc4_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng) in rc4_add_entropy() argument
56 LTC_ARGCHK(prng != NULL); in rc4_add_entropy()
60 LTC_MUTEX_LOCK(&prng->lock); in rc4_add_entropy()
61 if (prng->ready) { in rc4_add_entropy()
63 … if ((err = rc4_stream_keystream(&prng->u.rc4.s, buf, sizeof(buf))) != CRYPT_OK) goto LBL_UNLOCK; in rc4_add_entropy()
66 if ((err = rc4_stream_setup(&prng->u.rc4.s, buf, sizeof(buf))) != CRYPT_OK) goto LBL_UNLOCK; in rc4_add_entropy()
68 for (i = 0; i < 12; i++) rc4_stream_keystream(&prng->u.rc4.s, buf, sizeof(buf)); in rc4_add_entropy()
73 while (inlen--) prng->u.rc4.s.buf[prng->u.rc4.s.x++ % sizeof(prng->u.rc4.s.buf)] ^= *in++; in rc4_add_entropy()
77 LTC_MUTEX_UNLOCK(&prng->lock); in rc4_add_entropy()
86 int rc4_ready(prng_state *prng) in rc4_ready() argument
92 LTC_ARGCHK(prng != NULL); in rc4_ready()
94 LTC_MUTEX_LOCK(&prng->lock); in rc4_ready()
95 if (prng->ready) { err = CRYPT_OK; goto LBL_UNLOCK; } in rc4_ready()
96 XMEMCPY(buf, prng->u.rc4.s.buf, sizeof(buf)); in rc4_ready()
98 len = MIN(prng->u.rc4.s.x, 256); /* TODO: we can perhaps always use all 256 bytes */ in rc4_ready()
99 if ((err = rc4_stream_setup(&prng->u.rc4.s, buf, len)) != CRYPT_OK) goto LBL_UNLOCK; in rc4_ready()
101 for (i = 0; i < 12; i++) rc4_stream_keystream(&prng->u.rc4.s, buf, sizeof(buf)); in rc4_ready()
102 prng->ready = 1; in rc4_ready()
104 LTC_MUTEX_UNLOCK(&prng->lock); in rc4_ready()
115 unsigned long rc4_read(unsigned char *out, unsigned long outlen, prng_state *prng) in rc4_read() argument
117 if (outlen == 0 || prng == NULL || out == NULL) return 0; in rc4_read()
118 LTC_MUTEX_LOCK(&prng->lock); in rc4_read()
119 if (!prng->ready) { outlen = 0; goto LBL_UNLOCK; } in rc4_read()
120 if (rc4_stream_keystream(&prng->u.rc4.s, out, outlen) != CRYPT_OK) outlen = 0; in rc4_read()
122 LTC_MUTEX_UNLOCK(&prng->lock); in rc4_read()
131 int rc4_done(prng_state *prng) in rc4_done() argument
134 LTC_ARGCHK(prng != NULL); in rc4_done()
135 LTC_MUTEX_LOCK(&prng->lock); in rc4_done()
136 prng->ready = 0; in rc4_done()
137 err = rc4_stream_done(&prng->u.rc4.s); in rc4_done()
138 LTC_MUTEX_UNLOCK(&prng->lock); in rc4_done()
139 LTC_MUTEX_DESTROY(&prng->lock); in rc4_done()
159 int rc4_import(const unsigned char *in, unsigned long inlen, prng_state *prng) in LTC_PRNG_EXPORT()
163 LTC_ARGCHK(prng != NULL); in LTC_PRNG_EXPORT()
167 if ((err = rc4_start(prng)) != CRYPT_OK) return err; in LTC_PRNG_EXPORT()
168 if ((err = rc4_add_entropy(in, inlen, prng)) != CRYPT_OK) return err; in LTC_PRNG_EXPORT()