diff options
| author | Miloslav Trmač <mitr@redhat.com> | 2010-08-06 01:44:51 +0200 |
|---|---|---|
| committer | Miloslav Trmač <mitr@redhat.com> | 2010-08-24 20:58:31 +0200 |
| commit | 046fd8306448d3362e8f6c2ecfa9f82f71aba0fc (patch) | |
| tree | 3411c938babeb7a93188a0b3b0dbfd77516ed207 /userspace | |
| parent | f51d3e8a57786198b301acbe02ca521e1fbb050c (diff) | |
| download | cryptodev-linux-046fd8306448d3362e8f6c2ecfa9f82f71aba0fc.tar.gz cryptodev-linux-046fd8306448d3362e8f6c2ecfa9f82f71aba0fc.tar.xz cryptodev-linux-046fd8306448d3362e8f6c2ecfa9f82f71aba0fc.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.
Diffstat (limited to 'userspace')
| -rw-r--r-- | userspace/ncrypto.h | 5 | ||||
| -rw-r--r-- | userspace/ncrypto_generate_params.c | 62 |
2 files changed, 62 insertions, 5 deletions
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 |
