summaryrefslogtreecommitdiffstats
path: root/userspace/ncrypto_generate_params.c
diff options
context:
space:
mode:
Diffstat (limited to 'userspace/ncrypto_generate_params.c')
-rw-r--r--userspace/ncrypto_generate_params.c62
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