summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2010-07-27 13:47:06 +0200
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2010-07-27 13:47:06 +0200
commitc0c14cb837e6ea4a1c4ec0f8888f500c78ccdbf6 (patch)
tree82f4a723fe8c0f1e4c02e044012d4fcb1a945dee /examples
parent81633c5ffee3806a7195258122fe8e7e337c8c54 (diff)
downloadcryptodev-linux-c0c14cb837e6ea4a1c4ec0f8888f500c78ccdbf6.tar.gz
cryptodev-linux-c0c14cb837e6ea4a1c4ec0f8888f500c78ccdbf6.tar.xz
cryptodev-linux-c0c14cb837e6ea4a1c4ec0f8888f500c78ccdbf6.zip
Added Diffie Hellman key generation.
Diffstat (limited to 'examples')
-rw-r--r--examples/pk.c79
1 files changed, 79 insertions, 0 deletions
diff --git a/examples/pk.c b/examples/pk.c
index 1aa4c5a..1385a0e 100644
--- a/examples/pk.c
+++ b/examples/pk.c
@@ -297,6 +297,82 @@ int pubkey_info(void* data, int data_size, int verbose)
return 0;
}
+/* Diffie Hellman */
+const char dh_params_txt[] = "-----BEGIN DH PARAMETERS-----\n"\
+"MIGHAoGBAKMox0/IjuGqSaGMJESYMhdmXiTe1pY8gkSzWZ/ktWaUdaYAzgAZp7r3\n"\
+"OCh68YslS9Oi7/UQjmBbgGuOucMKgq3tYeYzY8G2epIuIzM4TAogaEqwkdSrXlth\n"\
+"MMsP2FhLhHg8m6V6iItitnMOz9r8t3BEf04GRlfzgZraM0gUUwTjAgEF\n"\
+"-----END DH PARAMETERS-----\n";
+
+static int test_ncr_dh(int cfd)
+{
+struct ncr_key_generate_st kgen;
+ncr_key_t private1, public1;
+int ret;
+gnutls_datum g, p, params;
+gnutls_dh_params_t dhp;
+
+ fprintf(stdout, "Tests on DH key exchange:");
+ fflush(stdout);
+
+ params.data = (void*)dh_params_txt;
+ params.size = sizeof(dh_params_txt)-1;
+
+ ret = gnutls_dh_params_init(&dhp);
+ if (ret < 0) {
+ fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
+ fprintf(stderr, "gnutls: %s\n", gnutls_strerror(ret));
+ return 1;
+ }
+
+ ret = gnutls_dh_params_import_pkcs3(dhp, &params, GNUTLS_X509_FMT_PEM);
+ if (ret < 0) {
+ fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
+ fprintf(stderr, "gnutls: %s\n", gnutls_strerror(ret));
+ return 1;
+ }
+
+ ret = gnutls_dh_params_export_raw(dhp, &p, &g, NULL);
+ if (ret < 0) {
+ fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
+ fprintf(stderr, "gnutls: %s\n", gnutls_strerror(ret));
+ return 1;
+ }
+
+ /* generate a DH key */
+ if (ioctl(cfd, NCRIO_KEY_INIT, &private1)) {
+ fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
+ perror("ioctl(NCRIO_KEY_INIT)");
+ return 1;
+ }
+
+ if (ioctl(cfd, NCRIO_KEY_INIT, &public1)) {
+ fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
+ perror("ioctl(NCRIO_KEY_INIT)");
+ return 1;
+ }
+
+ memset(&kgen, 0, sizeof(kgen));
+ kgen.desc = private1;
+ kgen.desc2 = public1;
+ kgen.params.algorithm = NCR_ALG_DH;
+ kgen.params.keyflags = NCR_KEY_FLAG_EXPORTABLE;
+ kgen.params.params.dh.p = p.data;
+ kgen.params.params.dh.p_size = p.size;
+ kgen.params.params.dh.g = g.data;
+ kgen.params.params.dh.g_size = g.size;
+
+ if (ioctl(cfd, NCRIO_KEY_GENERATE_PAIR, &kgen)) {
+ fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
+ perror("ioctl(NCRIO_KEY_GENERATE)");
+ return 1;
+ }
+
+ fprintf(stdout, " Success\n");
+
+ return 0;
+}
+
#define RSA_ENCRYPT_SIZE 32
static int rsa_key_encrypt(int cfd, ncr_key_t privkey, ncr_key_t pubkey, int oaep)
@@ -726,6 +802,9 @@ main()
return 1;
}
+ if (test_ncr_dh(fd))
+ return 1;
+
if (test_ncr_rsa(fd))
return 1;