diff options
author | Miloslav Trmač <mitr@redhat.com> | 2010-08-06 01:44:51 +0200 |
---|---|---|
committer | Miloslav Trmač <mitr@redhat.com> | 2010-08-23 20:01:59 +0200 |
commit | 3bbecb0f648f3f831523e23f02a81e3e2cd5feac (patch) | |
tree | 611a602525885b42cbfea7a63225add21871b529 | |
parent | 1f6b4a82c825f253c94e74fe0969bf27c6598ac2 (diff) | |
download | cryptodev-linux-3bbecb0f648f3f831523e23f02a81e3e2cd5feac.tar.gz cryptodev-linux-3bbecb0f648f3f831523e23f02a81e3e2cd5feac.tar.xz cryptodev-linux-3bbecb0f648f3f831523e23f02a81e3e2cd5feac.zip |
Implement missing algorithm-specific keygen params
Rename ncr_key_generate_params_set_bits to
ncr_key_generate_params_set_secret_bits in the process, an incompatible
change.
-rw-r--r-- | examples/ncr_lib.c | 4 | ||||
-rw-r--r-- | userspace/ncrypto.h | 5 | ||||
-rw-r--r-- | userspace/ncrypto_generate_params.c | 62 |
3 files changed, 64 insertions, 7 deletions
diff --git a/examples/ncr_lib.c b/examples/ncr_lib.c index e8d4a66..d0f435e 100644 --- a/examples/ncr_lib.c +++ b/examples/ncr_lib.c @@ -88,7 +88,7 @@ test_ncr_key(void) DIAGNOSTIC_CALL(ncr_key_generate_params_init, ¶ms); DIAGNOSTIC_CALL(ncr_key_generate_params_set_algorithm, params, NCR_ALG_AES_CBC); DIAGNOSTIC_CALL(ncr_key_generate_params_set_keyflags, params, NCR_KEY_FLAG_EXPORTABLE); - DIAGNOSTIC_CALL(ncr_key_generate_params_set_bits, params, 128); /* 16 bytes */ + DIAGNOSTIC_CALL(ncr_key_generate_params_set_secret_bits, params, 128); /* 16 bytes */ DIAGNOSTIC_CALL(ncr_key_init, &key); /* generate a key */ DIAGNOSTIC_CALL(ncr_key_generate, key, params); @@ -109,7 +109,7 @@ test_ncr_key(void) DIAGNOSTIC_CALL(ncr_key_generate_params_init, ¶ms); DIAGNOSTIC_CALL(ncr_key_generate_params_set_algorithm, params, NCR_ALG_AES_CBC); DIAGNOSTIC_CALL(ncr_key_generate_params_set_keyflags, params, 0); - DIAGNOSTIC_CALL(ncr_key_generate_params_set_bits, params, 128); /* 16 bytes */ + DIAGNOSTIC_CALL(ncr_key_generate_params_set_secret_bits, params, 128); /* 16 bytes */ DIAGNOSTIC_CALL(ncr_key_init, &key); DIAGNOSTIC_CALL(ncr_key_generate, key, params); DIAGNOSTIC_CALL(ncr_key_generate_params_deinit, params); diff --git a/userspace/ncrypto.h b/userspace/ncrypto.h index 777f426..09455d6 100644 --- a/userspace/ncrypto.h +++ b/userspace/ncrypto.h @@ -18,8 +18,11 @@ int ncr_key_generate_params_init(ncr_key_generate_params_t *params); int ncr_key_generate_params_deinit(ncr_key_generate_params_t params); int ncr_key_generate_params_set_algorithm(ncr_key_generate_params_t params, ncr_algorithm_t algorithm); int ncr_key_generate_params_set_keyflags(ncr_key_generate_params_t params, unsigned int keyflags); -int ncr_key_generate_params_set_bits(ncr_key_generate_params_t params, unsigned int bits); +int ncr_key_generate_params_set_secret_bits(ncr_key_generate_params_t params, unsigned int bits); +int ncr_key_generate_params_set_rsa_bits(ncr_key_generate_params_t params, unsigned int bits); int ncr_key_generate_params_set_rsa_e(ncr_key_generate_params_t params, void *e, size_t e_size); +int ncr_key_generate_params_set_dsa_p_bits(ncr_key_generate_params_t params, unsigned int p_bits); +int ncr_key_generate_params_set_dsa_q_bits(ncr_key_generate_params_t params, unsigned int q_bits); int ncr_key_generate_params_set_dh(ncr_key_generate_params_t params, void *p, size_t p_size, void *g, size_t g_size); int ncr_key_init(ncr_key_t *key); diff --git a/userspace/ncrypto_generate_params.c b/userspace/ncrypto_generate_params.c index 67171c3..5772aaf 100644 --- a/userspace/ncrypto_generate_params.c +++ b/userspace/ncrypto_generate_params.c @@ -1,4 +1,4 @@ - +#include <limits.h> #include <sys/types.h> #include <stdlib.h> #include <errno.h> @@ -62,7 +62,7 @@ ncr_key_generate_params_set_keyflags(ncr_key_generate_params_t params, unsigned } int -ncr_key_generate_params_set_bits(ncr_key_generate_params_t params, unsigned int bits) +ncr_key_generate_params_set_secret_bits(ncr_key_generate_params_t params, unsigned int bits) { if (!params) { errno = EINVAL; @@ -74,10 +74,64 @@ ncr_key_generate_params_set_bits(ncr_key_generate_params_t params, unsigned int } int +ncr_key_generate_params_set_rsa_bits(ncr_key_generate_params_t params, unsigned int bits) +{ + if (!params) { + errno = EINVAL; + return -1; + } + params->params.rsa.bits = bits; + + return 0; +} + +int ncr_key_generate_params_set_rsa_e(ncr_key_generate_params_t params, void *e, size_t e_size) { - errno = ENOTSUP; - return -1; + unsigned long value; + const uint8_t *p; + + if (!params || !e) { + errno = EINVAL; + return -1; + } + value = 0; + for (p = e; p < (const uint8_t *)e + e_size; p++) { + if (value > (ULONG_MAX - *p) / 256) { + errno = EOVERFLOW; + return -1; + } + value = value * 256 + *p; + } + + params->params.rsa.e = value; + return 0; +} + +int +ncr_key_generate_params_set_dsa_p_bits(ncr_key_generate_params_t params, + unsigned int p_bits) +{ + if (!params) { + errno = EINVAL; + return -1; + } + params->params.dsa.p_bits = p_bits; + + return 0; +} + +int +ncr_key_generate_params_set_dsa_q_bits(ncr_key_generate_params_t params, + unsigned int q_bits) +{ + if (!params) { + errno = EINVAL; + return -1; + } + params->params.dsa.q_bits = q_bits; + + return 0; } int |