summaryrefslogtreecommitdiffstats
path: root/examples/pk.c
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2010-07-25 22:17:22 +0200
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2010-07-25 22:17:22 +0200
commit6a2560330da7bc05ccb9bc75e70ce745acba7d6c (patch)
tree2973ea99e08e08ff9119768ca40be21cfbbcd937 /examples/pk.c
parentc2dda95767e03af277f4d7dab1334aa10e3ee10f (diff)
downloadcryptodev-linux-6a2560330da7bc05ccb9bc75e70ce745acba7d6c.tar.gz
cryptodev-linux-6a2560330da7bc05ccb9bc75e70ce745acba7d6c.tar.xz
cryptodev-linux-6a2560330da7bc05ccb9bc75e70ce745acba7d6c.zip
No need for ncr-direct. All session operations are being done on keys or on userspace data.
Diffstat (limited to 'examples/pk.c')
-rw-r--r--examples/pk.c185
1 files changed, 50 insertions, 135 deletions
diff --git a/examples/pk.c b/examples/pk.c
index 287e9f3..a529e9a 100644
--- a/examples/pk.c
+++ b/examples/pk.c
@@ -297,35 +297,14 @@ int pubkey_info(void* data, int data_size, int verbose)
return 0;
}
-static int data_get(int cfd, ncr_data_t dd, void* data, size_t data_size)
-{
-struct ncr_data_st kdata;
-
- memset(&kdata, 0, sizeof(kdata));
- kdata.desc = dd;
- kdata.data = data;
- kdata.data_size = data_size;
-
- if (ioctl(cfd, NCRIO_DATA_GET, &kdata)) {
- fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
- perror("ioctl(NCRIO_DATA_GET)");
- return -1;
- }
-
- return 0;
-}
-
#define RSA_ENCRYPT_SIZE 32
static int rsa_key_encrypt(int cfd, ncr_key_t privkey, ncr_key_t pubkey, int oaep)
{
- struct ncr_data_init_st dinit;
- ncr_data_t datad;
- ncr_data_t encd;
struct ncr_session_once_op_st nop;
uint8_t data[DATA_SIZE];
uint8_t vdata[RSA_ENCRYPT_SIZE];
- int ret;
+ int enc_size;
fprintf(stdout, "Tests on RSA (%s) key encryption:", (oaep!=0)?"OAEP":"PKCS V1.5");
fflush(stdout);
@@ -333,33 +312,6 @@ static int rsa_key_encrypt(int cfd, ncr_key_t privkey, ncr_key_t pubkey, int oae
memset(data, 0x3, sizeof(data));
memset(vdata, 0x0, sizeof(vdata));
- /* data to sign */
- memset(&dinit, 0, sizeof(dinit));
- dinit.max_object_size = DATA_SIZE;
- dinit.flags = NCR_DATA_FLAG_EXPORTABLE;
- dinit.initial_data = data;
- dinit.initial_data_size = RSA_ENCRYPT_SIZE;
-
- if (ioctl(cfd, NCRIO_DATA_INIT, &dinit)) {
- fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
- perror("ioctl(NCRIO_DATA_INIT)");
- return 1;
- }
-
- datad = dinit.desc;
-
- memset(&dinit, 0, sizeof(dinit));
- dinit.max_object_size = DATA_SIZE;
- dinit.flags = NCR_DATA_FLAG_EXPORTABLE;
-
- if (ioctl(cfd, NCRIO_DATA_INIT, &dinit)) {
- fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
- perror("ioctl(NCRIO_DATA_INIT)");
- return 1;
- }
-
- encd = dinit.desc;
-
/* do encryption */
memset(&nop, 0, sizeof(nop));
nop.init.algorithm = NCR_ALG_RSA;
@@ -371,15 +323,19 @@ static int rsa_key_encrypt(int cfd, ncr_key_t privkey, ncr_key_t pubkey, int oae
nop.init.params.params.rsa.type = RSA_PKCS1_V1_5;
}
nop.init.op = NCR_OP_ENCRYPT;
- nop.op.data.ndata.input = datad;
- nop.op.data.ndata.output = encd;
- nop.op.type = NCR_DATA;
+ nop.op.data.udata.input = data;
+ nop.op.data.udata.input_size = RSA_ENCRYPT_SIZE;
+ nop.op.data.udata.output = vdata;
+ nop.op.data.udata.output_size = sizeof(vdata);
+ nop.op.type = NCR_DIRECT_DATA;
if (ioctl(cfd, NCRIO_SESSION_ONCE, &nop)) {
fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
perror("ioctl(NCRIO_SESSION_ONCE)");
return 1;
}
+
+ enc_size = nop.op.data.udata.output_size;
/* decrypt data */
memset(&nop, 0, sizeof(nop));
@@ -392,9 +348,12 @@ static int rsa_key_encrypt(int cfd, ncr_key_t privkey, ncr_key_t pubkey, int oae
} else {
nop.init.params.params.rsa.type = RSA_PKCS1_V1_5;
}
- nop.op.data.ndata.input = encd;
- nop.op.data.ndata.output = encd;
- nop.op.type = NCR_DATA;
+ nop.op.data.udata.input = vdata;
+ nop.op.data.udata.input_size = enc_size;
+ nop.op.data.udata.output = vdata;
+ nop.op.data.udata.output_size = sizeof(vdata);
+ nop.op.type = NCR_DIRECT_DATA;
+
if (ioctl(cfd, NCRIO_SESSION_ONCE, &nop)) {
fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
@@ -402,12 +361,6 @@ static int rsa_key_encrypt(int cfd, ncr_key_t privkey, ncr_key_t pubkey, int oae
return 1;
}
- ret = data_get(cfd, encd, vdata, sizeof(vdata));
- if (ret < 0) {
- fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
- return 1;
- }
-
if (memcmp(vdata, data, sizeof(vdata)) != 0) {
fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
fprintf(stderr, "Decrypted data do not match!\n");
@@ -422,44 +375,16 @@ static int rsa_key_encrypt(int cfd, ncr_key_t privkey, ncr_key_t pubkey, int oae
static int rsa_key_sign_verify(int cfd, ncr_key_t privkey, ncr_key_t pubkey, int pss)
{
- struct ncr_data_init_st dinit;
- ncr_data_t datad;
- ncr_data_t signd;
struct ncr_session_once_op_st nop;
uint8_t data[DATA_SIZE];
+ uint8_t sig[DATA_SIZE];
+ int sig_size;
fprintf(stdout, "Tests on RSA (%s) key signature:", (pss!=0)?"PSS":"PKCS V1.5");
fflush(stdout);
memset(data, 0x3, sizeof(data));
- /* data to sign */
- memset(&dinit, 0, sizeof(dinit));
- dinit.max_object_size = DATA_SIZE;
- dinit.flags = NCR_DATA_FLAG_EXPORTABLE;
- dinit.initial_data = data;
- dinit.initial_data_size = sizeof(data);
-
- if (ioctl(cfd, NCRIO_DATA_INIT, &dinit)) {
- fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
- perror("ioctl(NCRIO_DATA_INIT)");
- return 1;
- }
-
- datad = dinit.desc;
-
- memset(&dinit, 0, sizeof(dinit));
- dinit.max_object_size = DATA_SIZE;
- dinit.flags = NCR_DATA_FLAG_EXPORTABLE;
-
- if (ioctl(cfd, NCRIO_DATA_INIT, &dinit)) {
- fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
- perror("ioctl(NCRIO_DATA_INIT)");
- return 1;
- }
-
- signd = dinit.desc;
-
/* sign datad */
memset(&nop, 0, sizeof(nop));
nop.init.algorithm = NCR_ALG_RSA;
@@ -468,15 +393,19 @@ static int rsa_key_sign_verify(int cfd, ncr_key_t privkey, ncr_key_t pubkey, int
nop.init.params.params.rsa.sign_hash = NCR_ALG_SHA1;
nop.init.op = NCR_OP_SIGN;
- nop.op.data.ndata.input = datad;
- nop.op.data.ndata.output = signd;
- nop.op.type = NCR_DATA;
+ nop.op.data.udata.input = data;
+ nop.op.data.udata.input_size = sizeof(data);
+ nop.op.data.udata.output = sig;
+ nop.op.data.udata.output_size = sizeof(sig);
+ nop.op.type = NCR_DIRECT_DATA;
if (ioctl(cfd, NCRIO_SESSION_ONCE, &nop)) {
fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
perror("ioctl(NCRIO_SESSION_ONCE)");
return 1;
}
+
+ sig_size = nop.op.data.udata.output_size;
/* verify signature */
memset(&nop, 0, sizeof(nop));
@@ -486,9 +415,11 @@ static int rsa_key_sign_verify(int cfd, ncr_key_t privkey, ncr_key_t pubkey, int
nop.init.params.params.rsa.sign_hash = NCR_ALG_SHA1;
nop.init.op = NCR_OP_VERIFY;
- nop.op.data.ndata.input = datad;
- nop.op.data.ndata.output = signd;
- nop.op.type = NCR_DATA;
+ nop.op.data.udata.input = data;
+ nop.op.data.udata.input_size = sizeof(data);
+ nop.op.data.udata.output = sig;
+ nop.op.data.udata.output_size = sig_size;
+ nop.op.type = NCR_DIRECT_DATA;
if (ioctl(cfd, NCRIO_SESSION_ONCE, &nop)) {
fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
@@ -496,7 +427,10 @@ static int rsa_key_sign_verify(int cfd, ncr_key_t privkey, ncr_key_t pubkey, int
return 1;
}
- fprintf(stdout, " Success\n");
+ if (nop.op.err == NCR_SUCCESS)
+ fprintf(stdout, " Success\n");
+ else
+ fprintf(stdout, " Verification Failed!\n");
return 0;
@@ -504,44 +438,16 @@ static int rsa_key_sign_verify(int cfd, ncr_key_t privkey, ncr_key_t pubkey, int
static int dsa_key_sign_verify(int cfd, ncr_key_t privkey, ncr_key_t pubkey)
{
- struct ncr_data_init_st dinit;
- ncr_data_t datad;
- ncr_data_t signd;
struct ncr_session_once_op_st nop;
uint8_t data[DATA_SIZE];
+ uint8_t sig[DATA_SIZE];
+ int sig_size;
fprintf(stdout, "Tests on DSA key signature:");
fflush(stdout);
memset(data, 0x3, sizeof(data));
- /* data to sign */
- memset(&dinit, 0, sizeof(dinit));
- dinit.max_object_size = DATA_SIZE;
- dinit.flags = NCR_DATA_FLAG_EXPORTABLE;
- dinit.initial_data = data;
- dinit.initial_data_size = sizeof(data);
-
- if (ioctl(cfd, NCRIO_DATA_INIT, &dinit)) {
- fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
- perror("ioctl(NCRIO_DATA_INIT)");
- return 1;
- }
-
- datad = dinit.desc;
-
- memset(&dinit, 0, sizeof(dinit));
- dinit.max_object_size = DATA_SIZE;
- dinit.flags = NCR_DATA_FLAG_EXPORTABLE;
-
- if (ioctl(cfd, NCRIO_DATA_INIT, &dinit)) {
- fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
- perror("ioctl(NCRIO_DATA_INIT)");
- return 1;
- }
-
- signd = dinit.desc;
-
/* sign datad */
memset(&nop, 0, sizeof(nop));
nop.init.algorithm = NCR_ALG_DSA;
@@ -549,15 +455,19 @@ static int dsa_key_sign_verify(int cfd, ncr_key_t privkey, ncr_key_t pubkey)
nop.init.params.params.dsa.sign_hash = NCR_ALG_SHA1;
nop.init.op = NCR_OP_SIGN;
- nop.op.data.ndata.input = datad;
- nop.op.data.ndata.output = signd;
- nop.op.type = NCR_DATA;
+ nop.op.data.udata.input = data;
+ nop.op.data.udata.input_size = sizeof(data);
+ nop.op.data.udata.output = sig;
+ nop.op.data.udata.output_size = sizeof(sig);
+ nop.op.type = NCR_DIRECT_DATA;
if (ioctl(cfd, NCRIO_SESSION_ONCE, &nop)) {
fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
perror("ioctl(NCRIO_SESSION_ONCE)");
return 1;
}
+
+ sig_size = nop.op.data.udata.output_size;
/* verify signature */
memset(&nop, 0, sizeof(nop));
@@ -566,9 +476,11 @@ static int dsa_key_sign_verify(int cfd, ncr_key_t privkey, ncr_key_t pubkey)
nop.init.params.params.dsa.sign_hash = NCR_ALG_SHA1;
nop.init.op = NCR_OP_VERIFY;
- nop.op.data.ndata.input = datad;
- nop.op.data.ndata.output = signd;
- nop.op.type = NCR_DATA;
+ nop.op.data.udata.input = data;
+ nop.op.data.udata.input_size = sizeof(data);
+ nop.op.data.udata.output = sig;
+ nop.op.data.udata.output_size = sizeof(sig);
+ nop.op.type = NCR_DIRECT_DATA;
if (ioctl(cfd, NCRIO_SESSION_ONCE, &nop)) {
fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
@@ -576,7 +488,10 @@ static int dsa_key_sign_verify(int cfd, ncr_key_t privkey, ncr_key_t pubkey)
return 1;
}
- fprintf(stdout, " Success\n");
+ if (nop.op.err == NCR_SUCCESS)
+ fprintf(stdout, " Success\n");
+ else
+ fprintf(stdout, " Verification Failed!\n");
return 0;