Module Name: src Committed By: drochner Date: Thu May 5 17:44:39 UTC 2011
Modified Files: src/sys/opencrypto: cryptosoft.c cryptosoft_xform.c files.opencrypto Log Message: support camellia-cbc by swcrypt To generate a diff of this commit: cvs rdiff -u -r1.29 -r1.30 src/sys/opencrypto/cryptosoft.c cvs rdiff -u -r1.14 -r1.15 src/sys/opencrypto/cryptosoft_xform.c cvs rdiff -u -r1.21 -r1.22 src/sys/opencrypto/files.opencrypto Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/opencrypto/cryptosoft.c diff -u src/sys/opencrypto/cryptosoft.c:1.29 src/sys/opencrypto/cryptosoft.c:1.30 --- src/sys/opencrypto/cryptosoft.c:1.29 Fri Feb 25 20:13:10 2011 +++ src/sys/opencrypto/cryptosoft.c Thu May 5 17:44:39 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: cryptosoft.c,v 1.29 2011/02/25 20:13:10 drochner Exp $ */ +/* $NetBSD: cryptosoft.c,v 1.30 2011/05/05 17:44:39 drochner Exp $ */ /* $FreeBSD: src/sys/opencrypto/cryptosoft.c,v 1.2.2.1 2002/11/21 23:34:23 sam Exp $ */ /* $OpenBSD: cryptosoft.c,v 1.35 2002/04/26 08:43:50 deraadt Exp $ */ @@ -24,7 +24,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: cryptosoft.c,v 1.29 2011/02/25 20:13:10 drochner Exp $"); +__KERNEL_RCSID(0, "$NetBSD: cryptosoft.c,v 1.30 2011/05/05 17:44:39 drochner Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -653,6 +653,9 @@ case CRYPTO_RIJNDAEL128_CBC: txf = &swcr_enc_xform_rijndael128; goto enccommon; + case CRYPTO_CAMELLIA_CBC: + txf = &swcr_enc_xform_camellia; + goto enccommon; case CRYPTO_NULL_CBC: txf = &swcr_enc_xform_null; goto enccommon; @@ -839,6 +842,7 @@ case CRYPTO_CAST_CBC: case CRYPTO_SKIPJACK_CBC: case CRYPTO_RIJNDAEL128_CBC: + case CRYPTO_CAMELLIA_CBC: case CRYPTO_NULL_CBC: txf = swd->sw_exf; @@ -966,6 +970,7 @@ case CRYPTO_CAST_CBC: case CRYPTO_SKIPJACK_CBC: case CRYPTO_RIJNDAEL128_CBC: + case CRYPTO_CAMELLIA_CBC: if ((crp->crp_etype = swcr_encdec(crd, sw, crp->crp_buf, type)) != 0) goto done; @@ -1032,6 +1037,7 @@ REGISTER(CRYPTO_BLF_CBC); REGISTER(CRYPTO_CAST_CBC); REGISTER(CRYPTO_SKIPJACK_CBC); + REGISTER(CRYPTO_CAMELLIA_CBC); REGISTER(CRYPTO_NULL_CBC); REGISTER(CRYPTO_MD5_HMAC); REGISTER(CRYPTO_MD5_HMAC_96); Index: src/sys/opencrypto/cryptosoft_xform.c diff -u src/sys/opencrypto/cryptosoft_xform.c:1.14 src/sys/opencrypto/cryptosoft_xform.c:1.15 --- src/sys/opencrypto/cryptosoft_xform.c:1.14 Thu Feb 24 20:03:41 2011 +++ src/sys/opencrypto/cryptosoft_xform.c Thu May 5 17:44:39 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: cryptosoft_xform.c,v 1.14 2011/02/24 20:03:41 drochner Exp $ */ +/* $NetBSD: cryptosoft_xform.c,v 1.15 2011/05/05 17:44:39 drochner Exp $ */ /* $FreeBSD: src/sys/opencrypto/xform.c,v 1.1.2.1 2002/11/21 23:34:23 sam Exp $ */ /* $OpenBSD: xform.c,v 1.19 2002/08/16 22:47:25 dhartmei Exp $ */ @@ -40,13 +40,14 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(1, "$NetBSD: cryptosoft_xform.c,v 1.14 2011/02/24 20:03:41 drochner Exp $"); +__KERNEL_RCSID(1, "$NetBSD: cryptosoft_xform.c,v 1.15 2011/05/05 17:44:39 drochner Exp $"); #include <crypto/blowfish/blowfish.h> #include <crypto/cast128/cast128.h> #include <crypto/des/des.h> #include <crypto/rijndael/rijndael.h> #include <crypto/skipjack/skipjack.h> +#include <crypto/camellia/camellia.h> #include <opencrypto/deflate.h> @@ -86,24 +87,28 @@ static int cast5_setkey(u_int8_t **, const u_int8_t *, int); static int skipjack_setkey(u_int8_t **, const u_int8_t *, int); static int rijndael128_setkey(u_int8_t **, const u_int8_t *, int); +static int cml_setkey(u_int8_t **, const u_int8_t *, int); static void des1_encrypt(void *, u_int8_t *); static void des3_encrypt(void *, u_int8_t *); static void blf_encrypt(void *, u_int8_t *); static void cast5_encrypt(void *, u_int8_t *); static void skipjack_encrypt(void *, u_int8_t *); static void rijndael128_encrypt(void *, u_int8_t *); +static void cml_encrypt(void *, u_int8_t *); static void des1_decrypt(void *, u_int8_t *); static void des3_decrypt(void *, u_int8_t *); static void blf_decrypt(void *, u_int8_t *); static void cast5_decrypt(void *, u_int8_t *); static void skipjack_decrypt(void *, u_int8_t *); static void rijndael128_decrypt(void *, u_int8_t *); +static void cml_decrypt(void *, u_int8_t *); static void des1_zerokey(u_int8_t **); static void des3_zerokey(u_int8_t **); static void blf_zerokey(u_int8_t **); static void cast5_zerokey(u_int8_t **); static void skipjack_zerokey(u_int8_t **); static void rijndael128_zerokey(u_int8_t **); +static void cml_zerokey(u_int8_t **); static void null_init(void *); static int null_update(void *, const u_int8_t *, u_int16_t); @@ -193,6 +198,14 @@ NULL, }; +static const struct swcr_enc_xform swcr_enc_xform_camellia = { + &enc_xform_camellia, + cml_encrypt, + cml_decrypt, + cml_setkey, + cml_zerokey +}; + /* Authentication instances */ static const struct swcr_auth_hash swcr_auth_hash_null = { &auth_hash_null, @@ -560,6 +573,46 @@ *sched = NULL; } +static void +cml_encrypt(void *key, u_int8_t *blk) +{ + + camellia_encrypt(key, blk, blk); +} + +static void +cml_decrypt(void *key, u_int8_t *blk) +{ + + camellia_decrypt(key, blk, blk); +} + +static int +cml_setkey(u_int8_t **sched, const u_int8_t *key, int len) +{ + int err; + + if (len != 16 && len != 24 && len != 32) + return (EINVAL); + *sched = malloc(sizeof(camellia_ctx), M_CRYPTO_DATA, + M_NOWAIT|M_ZERO); + if (*sched != NULL) { + camellia_set_key((camellia_ctx *) *sched, key, len * 8); + err = 0; + } else + err = ENOMEM; + return err; +} + +static void +cml_zerokey(u_int8_t **sched) +{ + + memset(*sched, 0, sizeof(camellia_ctx)); + free(*sched, M_CRYPTO_DATA); + *sched = NULL; +} + /* * And now for auth. */ Index: src/sys/opencrypto/files.opencrypto diff -u src/sys/opencrypto/files.opencrypto:1.21 src/sys/opencrypto/files.opencrypto:1.22 --- src/sys/opencrypto/files.opencrypto:1.21 Sat Feb 19 16:26:34 2011 +++ src/sys/opencrypto/files.opencrypto Thu May 5 17:44:39 2011 @@ -1,4 +1,4 @@ -# $NetBSD: files.opencrypto,v 1.21 2011/02/19 16:26:34 drochner Exp $ +# $NetBSD: files.opencrypto,v 1.22 2011/05/05 17:44:39 drochner Exp $ # # @@ -15,7 +15,7 @@ # Pseudo-device that provides software implementations of various cryptographic # algorithms. defpseudo swcrypto: opencrypto, - blowfish, des, cast128, rijndael, skipjack + blowfish, des, cast128, rijndael, skipjack, camellia file opencrypto/cryptosoft.c swcrypto file opencrypto/deflate.c swcrypto # wrapper around zlib