diff options
Diffstat (limited to 'userspace/ncrypto_generate_params.c')
-rw-r--r-- | userspace/ncrypto_generate_params.c | 62 |
1 files changed, 58 insertions, 4 deletions
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 |