Changeset View
Changeset View
Standalone View
Standalone View
head/sys/opencrypto/xform_cml.c
Show First 20 Lines • Show All 47 Lines • ▼ Show 20 Lines | |||||
*/ | */ | ||||
#include <sys/cdefs.h> | #include <sys/cdefs.h> | ||||
__FBSDID("$FreeBSD$"); | __FBSDID("$FreeBSD$"); | ||||
#include <crypto/camellia/camellia.h> | #include <crypto/camellia/camellia.h> | ||||
#include <opencrypto/xform_enc.h> | #include <opencrypto/xform_enc.h> | ||||
static int cml_setkey(u_int8_t **, u_int8_t *, int); | static int cml_setkey(u_int8_t **, const u_int8_t *, int); | ||||
static void cml_encrypt(caddr_t, u_int8_t *); | static void cml_encrypt(caddr_t, u_int8_t *); | ||||
static void cml_decrypt(caddr_t, u_int8_t *); | static void cml_decrypt(caddr_t, u_int8_t *); | ||||
static void cml_zerokey(u_int8_t **); | static void cml_zerokey(u_int8_t **); | ||||
/* Encryption instances */ | /* Encryption instances */ | ||||
struct enc_xform enc_xform_camellia = { | struct enc_xform enc_xform_camellia = { | ||||
CRYPTO_CAMELLIA_CBC, "Camellia", | CRYPTO_CAMELLIA_CBC, "Camellia", | ||||
CAMELLIA_BLOCK_LEN, CAMELLIA_BLOCK_LEN, CAMELLIA_MIN_KEY, | CAMELLIA_BLOCK_LEN, CAMELLIA_BLOCK_LEN, CAMELLIA_MIN_KEY, | ||||
Show All 17 Lines | |||||
static void | static void | ||||
cml_decrypt(caddr_t key, u_int8_t *blk) | cml_decrypt(caddr_t key, u_int8_t *blk) | ||||
{ | { | ||||
camellia_decrypt(((camellia_ctx *) key), (u_char *) blk, | camellia_decrypt(((camellia_ctx *) key), (u_char *) blk, | ||||
(u_char *) blk); | (u_char *) blk); | ||||
} | } | ||||
static int | static int | ||||
cml_setkey(u_int8_t **sched, u_int8_t *key, int len) | cml_setkey(u_int8_t **sched, const u_int8_t *key, int len) | ||||
{ | { | ||||
int err; | int err; | ||||
if (len != 16 && len != 24 && len != 32) | if (len != 16 && len != 24 && len != 32) | ||||
return (EINVAL); | return (EINVAL); | ||||
*sched = KMALLOC(sizeof(camellia_ctx), M_CRYPTO_DATA, | *sched = KMALLOC(sizeof(camellia_ctx), M_CRYPTO_DATA, | ||||
M_NOWAIT|M_ZERO); | M_NOWAIT|M_ZERO); | ||||
if (*sched != NULL) { | if (*sched != NULL) { | ||||
camellia_set_key((camellia_ctx *) *sched, (u_char *) key, | camellia_set_key((camellia_ctx *) *sched, key, | ||||
len * 8); | len * 8); | ||||
err = 0; | err = 0; | ||||
} else | } else | ||||
err = ENOMEM; | err = ENOMEM; | ||||
return err; | return err; | ||||
} | } | ||||
static void | static void | ||||
cml_zerokey(u_int8_t **sched) | cml_zerokey(u_int8_t **sched) | ||||
{ | { | ||||
bzero(*sched, sizeof(camellia_ctx)); | bzero(*sched, sizeof(camellia_ctx)); | ||||
KFREE(*sched, M_CRYPTO_DATA); | KFREE(*sched, M_CRYPTO_DATA); | ||||
*sched = NULL; | *sched = NULL; | ||||
} | } |