summaryrefslogtreecommitdiffstats
path: root/userspace/ncrypto_generate_params.c
diff options
context:
space:
mode:
authorMiloslav Trmač <mitr@redhat.com>2010-08-06 01:44:51 +0200
committerMiloslav Trmač <mitr@redhat.com>2010-08-23 20:01:59 +0200
commit3bbecb0f648f3f831523e23f02a81e3e2cd5feac (patch)
tree611a602525885b42cbfea7a63225add21871b529 /userspace/ncrypto_generate_params.c
parent1f6b4a82c825f253c94e74fe0969bf27c6598ac2 (diff)
downloadcryptodev-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.
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