| 1 |
|
|---|
| 2 |
|
|---|
| 3 |
|
|---|
| 4 |
|
|---|
| 5 |
|
|---|
| 6 |
|
|---|
| 7 |
|
|---|
| 8 |
|
|---|
| 9 |
|
|---|
| 10 |
|
|---|
| 11 |
|
|---|
| 12 |
|
|---|
| 13 |
|
|---|
| 14 |
|
|---|
| 15 |
|
|---|
| 16 |
|
|---|
| 17 |
|
|---|
| 18 |
|
|---|
| 19 |
#include <linux/init.h> |
|---|
| 20 |
#include <linux/module.h> |
|---|
| 21 |
#include <linux/mm.h> |
|---|
| 22 |
#include <asm/scatterlist.h> |
|---|
| 23 |
#include <linux/crypto.h> |
|---|
| 24 |
|
|---|
| 25 |
#define NULL_KEY_SIZE 0 |
|---|
| 26 |
#define NULL_BLOCK_SIZE 1 |
|---|
| 27 |
#define NULL_DIGEST_SIZE 0 |
|---|
| 28 |
|
|---|
| 29 |
static int null_compress(void *ctx, const u8 *src, unsigned int slen, |
|---|
| 30 |
u8 *dst, unsigned int *dlen) |
|---|
| 31 |
{ return 0; } |
|---|
| 32 |
|
|---|
| 33 |
static int null_decompress(void *ctx, const u8 *src, unsigned int slen, |
|---|
| 34 |
u8 *dst, unsigned int *dlen) |
|---|
| 35 |
{ return 0; } |
|---|
| 36 |
|
|---|
| 37 |
static void null_init(void *ctx) |
|---|
| 38 |
{ } |
|---|
| 39 |
|
|---|
| 40 |
static void null_update(void *ctx, const u8 *data, unsigned int len) |
|---|
| 41 |
{ } |
|---|
| 42 |
|
|---|
| 43 |
static void null_final(void *ctx, u8 *out) |
|---|
| 44 |
{ } |
|---|
| 45 |
|
|---|
| 46 |
static int null_setkey(void *ctx, const u8 *key, |
|---|
| 47 |
unsigned int keylen, u32 *flags) |
|---|
| 48 |
{ return 0; } |
|---|
| 49 |
|
|---|
| 50 |
static void null_encrypt(void *ctx, u8 *dst, const u8 *src) |
|---|
| 51 |
{ } |
|---|
| 52 |
|
|---|
| 53 |
static void null_decrypt(void *ctx, u8 *dst, const u8 *src) |
|---|
| 54 |
{ } |
|---|
| 55 |
|
|---|
| 56 |
static struct crypto_alg compress_null = { |
|---|
| 57 |
.cra_name = "compress_null", |
|---|
| 58 |
.cra_flags = CRYPTO_ALG_TYPE_COMPRESS, |
|---|
| 59 |
.cra_blocksize = NULL_BLOCK_SIZE, |
|---|
| 60 |
.cra_ctxsize = 0, |
|---|
| 61 |
.cra_module = THIS_MODULE, |
|---|
| 62 |
.cra_list = LIST_HEAD_INIT(compress_null.cra_list), |
|---|
| 63 |
.cra_u = { .compress = { |
|---|
| 64 |
.coa_compress = null_compress, |
|---|
| 65 |
.coa_decompress = null_decompress } } |
|---|
| 66 |
}; |
|---|
| 67 |
|
|---|
| 68 |
static struct crypto_alg digest_null = { |
|---|
| 69 |
.cra_name = "digest_null", |
|---|
| 70 |
.cra_flags = CRYPTO_ALG_TYPE_DIGEST, |
|---|
| 71 |
.cra_blocksize = NULL_BLOCK_SIZE, |
|---|
| 72 |
.cra_ctxsize = 0, |
|---|
| 73 |
.cra_module = THIS_MODULE, |
|---|
| 74 |
.cra_list = LIST_HEAD_INIT(digest_null.cra_list), |
|---|
| 75 |
.cra_u = { .digest = { |
|---|
| 76 |
.dia_digestsize = NULL_DIGEST_SIZE, |
|---|
| 77 |
.dia_init = null_init, |
|---|
| 78 |
.dia_update = null_update, |
|---|
| 79 |
.dia_final = null_final } } |
|---|
| 80 |
}; |
|---|
| 81 |
|
|---|
| 82 |
static struct crypto_alg cipher_null = { |
|---|
| 83 |
.cra_name = "cipher_null", |
|---|
| 84 |
.cra_flags = CRYPTO_ALG_TYPE_CIPHER, |
|---|
| 85 |
.cra_blocksize = NULL_BLOCK_SIZE, |
|---|
| 86 |
.cra_ctxsize = 0, |
|---|
| 87 |
.cra_module = THIS_MODULE, |
|---|
| 88 |
.cra_list = LIST_HEAD_INIT(cipher_null.cra_list), |
|---|
| 89 |
.cra_u = { .cipher = { |
|---|
| 90 |
.cia_min_keysize = NULL_KEY_SIZE, |
|---|
| 91 |
.cia_max_keysize = NULL_KEY_SIZE, |
|---|
| 92 |
.cia_setkey = null_setkey, |
|---|
| 93 |
.cia_encrypt = null_encrypt, |
|---|
| 94 |
.cia_decrypt = null_decrypt } } |
|---|
| 95 |
}; |
|---|
| 96 |
|
|---|
| 97 |
MODULE_ALIAS("compress_null"); |
|---|
| 98 |
MODULE_ALIAS("digest_null"); |
|---|
| 99 |
MODULE_ALIAS("cipher_null"); |
|---|
| 100 |
|
|---|
| 101 |
static int __init init(void) |
|---|
| 102 |
{ |
|---|
| 103 |
int ret = 0; |
|---|
| 104 |
|
|---|
| 105 |
ret = crypto_register_alg(&cipher_null); |
|---|
| 106 |
if (ret < 0) |
|---|
| 107 |
goto out; |
|---|
| 108 |
|
|---|
| 109 |
ret = crypto_register_alg(&digest_null); |
|---|
| 110 |
if (ret < 0) { |
|---|
| 111 |
crypto_unregister_alg(&cipher_null); |
|---|
| 112 |
goto out; |
|---|
| 113 |
} |
|---|
| 114 |
|
|---|
| 115 |
ret = crypto_register_alg(&compress_null); |
|---|
| 116 |
if (ret < 0) { |
|---|
| 117 |
crypto_unregister_alg(&digest_null); |
|---|
| 118 |
crypto_unregister_alg(&cipher_null); |
|---|
| 119 |
goto out; |
|---|
| 120 |
} |
|---|
| 121 |
|
|---|
| 122 |
out: |
|---|
| 123 |
return ret; |
|---|
| 124 |
} |
|---|
| 125 |
|
|---|
| 126 |
static void __exit fini(void) |
|---|
| 127 |
{ |
|---|
| 128 |
crypto_unregister_alg(&compress_null); |
|---|
| 129 |
crypto_unregister_alg(&digest_null); |
|---|
| 130 |
crypto_unregister_alg(&cipher_null); |
|---|
| 131 |
} |
|---|
| 132 |
|
|---|
| 133 |
module_init(init); |
|---|
| 134 |
module_exit(fini); |
|---|
| 135 |
|
|---|
| 136 |
MODULE_LICENSE("GPL"); |
|---|
| 137 |
MODULE_DESCRIPTION("Null Cryptographic Algorithms"); |
|---|