1/* 2 * RNG implementation using standard kernel RNG. 3 * 4 * Copyright (c) 2008 Herbert Xu <herbert@gondor.apana.org.au> 5 * 6 * This program is free software; you can redistribute it and/or modify it 7 * under the terms of the GNU General Public License as published by the 8 * Free Software Foundation; either version 2 of the License, or (at your 9 * any later version. 10 * 11 */ 12 13#include <crypto/internal/rng.h> 14#include <linux/err.h> 15#include <linux/init.h> 16#include <linux/module.h> 17#include <linux/random.h> 18 19static int krng_get_random(struct crypto_rng *tfm, u8 *rdata, unsigned int dlen) 20{ 21 get_random_bytes(rdata, dlen); 22 return 0; 23} 24 25static int krng_reset(struct crypto_rng *tfm, u8 *seed, unsigned int slen) 26{ 27 return 0; 28} 29 30static struct crypto_alg krng_alg = { 31 .cra_name = "stdrng", 32 .cra_driver_name = "krng", 33 .cra_priority = 200, 34 .cra_flags = CRYPTO_ALG_TYPE_RNG, 35 .cra_ctxsize = 0, 36 .cra_type = &crypto_rng_type, 37 .cra_module = THIS_MODULE, 38 .cra_u = { 39 .rng = { 40 .rng_make_random = krng_get_random, 41 .rng_reset = krng_reset, 42 .seedsize = 0, 43 } 44 } 45}; 46 47 48/* Module initalization */ 49static int __init krng_mod_init(void) 50{ 51 return crypto_register_alg(&krng_alg); 52} 53 54static void __exit krng_mod_fini(void) 55{ 56 crypto_unregister_alg(&krng_alg); 57 return; 58} 59 60module_init(krng_mod_init); 61module_exit(krng_mod_fini); 62 63MODULE_LICENSE("GPL"); 64MODULE_DESCRIPTION("Kernel Random Number Generator"); 65MODULE_ALIAS_CRYPTO("stdrng"); 66MODULE_ALIAS_CRYPTO("krng"); 67