Something went wrong. Try again.
Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125// SPDX-License-Identifier: GPL-2.0-or-later/* * Cryptographic API. * * Null algorithms, aka Much Ado About Nothing. * * These are needed for IPsec, and may be useful in general for * testing & debugging. * * The null cipher is compliant with RFC2410. * * Copyright (c) 2002 James Morris <jmorris@intercode.com.au> */
#include <crypto/null.h>#include <crypto/internal/hash.h>#include <crypto/internal/skcipher.h>#include <crypto/scatterwalk.h>#include <linux/init.h>#include <linux/module.h>#include <linux/string.h>
static int null_init(struct shash_desc *desc){ return 0;}
static int null_update(struct shash_desc *desc, const u8 *data, unsigned int len){ return 0;}
static int null_final(struct shash_desc *desc, u8 *out){ return 0;}
static int null_digest(struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out){ return 0;}
static int null_hash_setkey(struct crypto_shash *tfm, const u8 *key, unsigned int keylen){ return 0; }
static int null_skcipher_setkey(struct crypto_skcipher *tfm, const u8 *key, unsigned int keylen){ return 0; }
static int null_skcipher_crypt(struct skcipher_request *req){ if (req->src != req->dst) memcpy_sglist(req->dst, req->src, req->cryptlen); return 0;}
static struct shash_alg digest_null = { .digestsize = NULL_DIGEST_SIZE, .setkey = null_hash_setkey, .init = null_init, .update = null_update, .finup = null_digest, .digest = null_digest, .final = null_final, .base = { .cra_name = "digest_null", .cra_driver_name = "digest_null-generic", .cra_blocksize = NULL_BLOCK_SIZE, .cra_module = THIS_MODULE, }};
static struct skcipher_alg skcipher_null = { .base.cra_name = "ecb(cipher_null)", .base.cra_driver_name = "ecb-cipher_null", .base.cra_priority = 100, .base.cra_blocksize = NULL_BLOCK_SIZE, .base.cra_ctxsize = 0, .base.cra_module = THIS_MODULE, .min_keysize = NULL_KEY_SIZE, .max_keysize = NULL_KEY_SIZE, .ivsize = NULL_IV_SIZE, .setkey = null_skcipher_setkey, .encrypt = null_skcipher_crypt, .decrypt = null_skcipher_crypt,};
MODULE_ALIAS_CRYPTO("digest_null");MODULE_ALIAS_CRYPTO("ecb(cipher_null)");
static int __init crypto_null_mod_init(void){ int ret = 0;
ret = crypto_register_shash(&digest_null); if (ret < 0) goto out;
ret = crypto_register_skcipher(&skcipher_null); if (ret < 0) goto out_unregister_shash;
return 0;
out_unregister_shash: crypto_unregister_shash(&digest_null);out: return ret;}
static void __exit crypto_null_mod_fini(void){ crypto_unregister_shash(&digest_null); crypto_unregister_skcipher(&skcipher_null);}
module_init(crypto_null_mod_init);module_exit(crypto_null_mod_fini);
MODULE_LICENSE("GPL");MODULE_DESCRIPTION("Null Cryptographic Algorithms");