PageRenderTime 21ms CodeModel.GetById 10ms app.highlight 9ms RepoModel.GetById 1ms app.codeStats 0ms

/crypto/crypto_null.c

https://bitbucket.org/evzijst/gittest
C | 137 lines | 98 code | 21 blank | 18 comment | 3 complexity | c34bc347e12e68a270ebb83dcc7696fc MD5 | raw file
  1/* 
  2 * Cryptographic API.
  3 *
  4 * Null algorithms, aka Much Ado About Nothing.
  5 *
  6 * These are needed for IPsec, and may be useful in general for
  7 * testing & debugging.
  8 * 
  9 * The null cipher is compliant with RFC2410.
 10 *
 11 * Copyright (c) 2002 James Morris <jmorris@intercode.com.au>
 12 *
 13 * This program is free software; you can redistribute it and/or modify
 14 * it under the terms of the GNU General Public License as published by
 15 * the Free Software Foundation; either version 2 of the License, or
 16 * (at your option) any later version.
 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
 29static int null_compress(void *ctx, const u8 *src, unsigned int slen,
 30                         u8 *dst, unsigned int *dlen)
 31{ return 0; }
 32
 33static int null_decompress(void *ctx, const u8 *src, unsigned int slen,
 34                           u8 *dst, unsigned int *dlen)
 35{ return 0; }
 36
 37static void null_init(void *ctx)
 38{ }
 39
 40static void null_update(void *ctx, const u8 *data, unsigned int len)
 41{ }
 42
 43static void null_final(void *ctx, u8 *out)
 44{ }
 45
 46static int null_setkey(void *ctx, const u8 *key,
 47                       unsigned int keylen, u32 *flags)
 48{ return 0; }
 49
 50static void null_encrypt(void *ctx, u8 *dst, const u8 *src)
 51{ }
 52
 53static void null_decrypt(void *ctx, u8 *dst, const u8 *src)
 54{ }
 55
 56static 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
 68static 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
 82static 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
 97MODULE_ALIAS("compress_null");
 98MODULE_ALIAS("digest_null");
 99MODULE_ALIAS("cipher_null");
100
101static 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
122out:	
123	return ret;
124}
125
126static 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
133module_init(init);
134module_exit(fini);
135
136MODULE_LICENSE("GPL");
137MODULE_DESCRIPTION("Null Cryptographic Algorithms");