summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiloslav Trmač <mitr@redhat.com>2010-08-06 01:44:51 +0200
committerMiloslav Trmač <mitr@redhat.com>2010-08-24 20:58:31 +0200
commit046fd8306448d3362e8f6c2ecfa9f82f71aba0fc (patch)
tree3411c938babeb7a93188a0b3b0dbfd77516ed207
parentf51d3e8a57786198b301acbe02ca521e1fbb050c (diff)
downloadcryptodev-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.
-rw-r--r--examples/ncr_lib.c4
-rw-r--r--userspace/ncrypto.h5
-rw-r--r--userspace/ncrypto_generate_params.c62
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, &params);
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, &params);
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