Lines Matching +full:stm +full:- +full:base
1 // SPDX-License-Identifier: GPL-2.0-or-later
33 * See http://csrc.nist.gov/groups/STM/cavp/documents/rng/931rngext.pdf
90 hexdump("Input DT: ", ctx->DT, DEFAULT_BLK_SZ); in _get_more_prng_bytes()
91 hexdump("Input I: ", ctx->I, DEFAULT_BLK_SZ); in _get_more_prng_bytes()
92 hexdump("Input V: ", ctx->V, DEFAULT_BLK_SZ); in _get_more_prng_bytes()
105 memcpy(tmp, ctx->DT, DEFAULT_BLK_SZ); in _get_more_prng_bytes()
106 output = ctx->I; in _get_more_prng_bytes()
116 xor_vectors(ctx->I, ctx->V, tmp, DEFAULT_BLK_SZ); in _get_more_prng_bytes()
118 output = ctx->rand_data; in _get_more_prng_bytes()
125 if (!memcmp(ctx->rand_data, ctx->last_rand_data, in _get_more_prng_bytes()
136 ctx->flags |= PRNG_NEED_RESET; in _get_more_prng_bytes()
137 return -EINVAL; in _get_more_prng_bytes()
139 memcpy(ctx->last_rand_data, ctx->rand_data, in _get_more_prng_bytes()
146 xor_vectors(ctx->rand_data, ctx->I, tmp, in _get_more_prng_bytes()
148 output = ctx->V; in _get_more_prng_bytes()
155 crypto_cipher_encrypt_one(ctx->tfm, output, tmp); in _get_more_prng_bytes()
162 for (i = DEFAULT_BLK_SZ - 1; i >= 0; i--) { in _get_more_prng_bytes()
163 ctx->DT[i] += 1; in _get_more_prng_bytes()
164 if (ctx->DT[i] != 0) in _get_more_prng_bytes()
169 ctx->rand_data_valid = 0; in _get_more_prng_bytes()
171 hexdump("Output DT: ", ctx->DT, DEFAULT_BLK_SZ); in _get_more_prng_bytes()
172 hexdump("Output I: ", ctx->I, DEFAULT_BLK_SZ); in _get_more_prng_bytes()
173 hexdump("Output V: ", ctx->V, DEFAULT_BLK_SZ); in _get_more_prng_bytes()
174 hexdump("New Random Data: ", ctx->rand_data, DEFAULT_BLK_SZ); in _get_more_prng_bytes()
188 spin_lock_bh(&ctx->prng_lock); in get_prng_bytes()
190 err = -EINVAL; in get_prng_bytes()
191 if (ctx->flags & PRNG_NEED_RESET) in get_prng_bytes()
198 err = -EINVAL; in get_prng_bytes()
199 if (ctx->flags & PRNG_FIXED_SIZE) { in get_prng_bytes()
216 if (ctx->rand_data_valid == DEFAULT_BLK_SZ) { in get_prng_bytes()
219 err = -EINVAL; in get_prng_bytes()
229 while (ctx->rand_data_valid < DEFAULT_BLK_SZ) { in get_prng_bytes()
230 *ptr = ctx->rand_data[ctx->rand_data_valid]; in get_prng_bytes()
232 byte_count--; in get_prng_bytes()
233 ctx->rand_data_valid++; in get_prng_bytes()
242 for (; byte_count >= DEFAULT_BLK_SZ; byte_count -= DEFAULT_BLK_SZ) { in get_prng_bytes()
243 if (ctx->rand_data_valid == DEFAULT_BLK_SZ) { in get_prng_bytes()
246 err = -EINVAL; in get_prng_bytes()
250 if (ctx->rand_data_valid > 0) in get_prng_bytes()
252 memcpy(ptr, ctx->rand_data, DEFAULT_BLK_SZ); in get_prng_bytes()
253 ctx->rand_data_valid += DEFAULT_BLK_SZ; in get_prng_bytes()
264 spin_unlock_bh(&ctx->prng_lock); in get_prng_bytes()
272 crypto_free_cipher(ctx->tfm); in free_prng_context()
282 spin_lock_bh(&ctx->prng_lock); in reset_prng_context()
283 ctx->flags |= PRNG_NEED_RESET; in reset_prng_context()
291 memcpy(ctx->V, V, DEFAULT_BLK_SZ); in reset_prng_context()
293 memcpy(ctx->V, DEFAULT_V_SEED, DEFAULT_BLK_SZ); in reset_prng_context()
296 memcpy(ctx->DT, DT, DEFAULT_BLK_SZ); in reset_prng_context()
298 memset(ctx->DT, 0, DEFAULT_BLK_SZ); in reset_prng_context()
300 memset(ctx->rand_data, 0, DEFAULT_BLK_SZ); in reset_prng_context()
301 memset(ctx->last_rand_data, 0, DEFAULT_BLK_SZ); in reset_prng_context()
303 ctx->rand_data_valid = DEFAULT_BLK_SZ; in reset_prng_context()
305 ret = crypto_cipher_setkey(ctx->tfm, prng_key, klen); in reset_prng_context()
308 crypto_cipher_get_flags(ctx->tfm)); in reset_prng_context()
313 ctx->flags &= ~PRNG_NEED_RESET; in reset_prng_context()
315 spin_unlock_bh(&ctx->prng_lock); in reset_prng_context()
323 spin_lock_init(&ctx->prng_lock); in cprng_init()
324 ctx->tfm = crypto_alloc_cipher("aes", 0, 0); in cprng_init()
325 if (IS_ERR(ctx->tfm)) { in cprng_init()
328 return PTR_ERR(ctx->tfm); in cprng_init()
332 return -EINVAL; in cprng_init()
339 ctx->flags |= PRNG_NEED_RESET; in cprng_init()
371 return -EINVAL; in cprng_reset()
378 if (prng->flags & PRNG_NEED_RESET) in cprng_reset()
379 return -EINVAL; in cprng_reset()
403 return -EINVAL; in fips_cprng_reset()
407 return -EINVAL; in fips_cprng_reset()
416 prng->rand_data_valid = DEFAULT_BLK_SZ; in fips_cprng_reset()
427 .base = {
441 .base = {