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_list = LIST_HEAD_INIT(krng_alg.cra_list), 39 .cra_u = { 40 .rng = { 41 .rng_make_random = krng_get_random, 42 .rng_reset = krng_reset, 43 .seedsize = 0, 44 } 45 } 46}; 47 48 49/* Module initalization */ 50static int __init krng_mod_init(void) 51{ 52 return crypto_register_alg(&krng_alg); 53} 54 55static void __exit krng_mod_fini(void) 56{ 57 crypto_unregister_alg(&krng_alg); 58 return; 59} 60 61module_init(krng_mod_init); 62module_exit(krng_mod_fini); 63 64MODULE_LICENSE("GPL"); 65MODULE_DESCRIPTION("Kernel Random Number Generator"); 66MODULE_ALIAS("stdrng"); 67