diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2010-07-21 14:03:58 +0200 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2010-07-21 16:40:01 +0200 |
commit | e7828004e40592c8cffc9235f72440c802905e16 (patch) | |
tree | c46f4aba9a4f1e8014492cd835fce81d7e07017e /examples | |
parent | 56eb45f752baa978a9ea3573faee44857678597d (diff) | |
download | cryptodev-linux-e7828004e40592c8cffc9235f72440c802905e16.tar.gz cryptodev-linux-e7828004e40592c8cffc9235f72440c802905e16.tar.xz cryptodev-linux-e7828004e40592c8cffc9235f72440c802905e16.zip |
initial support for userspace data.
Diffstat (limited to 'examples')
-rw-r--r-- | examples/ncr.c | 50 | ||||
-rw-r--r-- | examples/pk.c | 11 | ||||
-rw-r--r-- | examples/speed.c | 106 |
3 files changed, 132 insertions, 35 deletions
diff --git a/examples/ncr.c b/examples/ncr.c index 69e699a..d5d3e20 100644 --- a/examples/ncr.c +++ b/examples/ncr.c @@ -55,6 +55,7 @@ test_ncr_key(int cfd) dinit.flags = NCR_DATA_FLAG_EXPORTABLE; dinit.initial_data = data; dinit.initial_data_size = sizeof(data); + dinit.type = NCR_DATA_KERNEL; if (ioctl(cfd, NCRIO_DATA_INIT, &dinit)) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); @@ -96,6 +97,7 @@ test_ncr_key(int cfd) dinit.flags = NCR_DATA_FLAG_EXPORTABLE; dinit.initial_data = NULL; dinit.initial_data_size = 0; + dinit.type = NCR_DATA_KERNEL; if (ioctl(cfd, NCRIO_DATA_INIT, &dinit)) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); @@ -114,12 +116,10 @@ test_ncr_key(int cfd) } /* now read data */ - memset(data, 0, sizeof(data)); - + memset(&kdata, 0, sizeof(kdata)); kdata.desc = dinit.desc; kdata.data = data; kdata.data_size = sizeof(data); - kdata.append_flag = 0; if (ioctl(cfd, NCRIO_DATA_GET, &kdata)) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); @@ -129,7 +129,7 @@ test_ncr_key(int cfd) if (memcmp(data, data_bak, sizeof(data))!=0) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); - fprintf(stderr, "data returned but differ!\n"); + fprintf(stderr, "data returned but differ (%d, %d)!\n", (int)kdata.data_size, sizeof(data)); return 1; } @@ -179,7 +179,6 @@ test_ncr_key(int cfd) kdata.desc = dinit.desc; kdata.data = data; kdata.data_size = sizeof(data); - kdata.append_flag = 0; if (ioctl(cfd, NCRIO_DATA_GET, &kdata)) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); @@ -237,7 +236,6 @@ test_ncr_key(int cfd) kdata.desc = dinit.desc; kdata.data = data; kdata.data_size = sizeof(data); - kdata.append_flag = 0; if (ioctl(cfd, NCRIO_DATA_GET, &kdata)==0) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); @@ -272,6 +270,7 @@ static int test_ncr_data(int cfd) init.flags = NCR_DATA_FLAG_EXPORTABLE; init.initial_data = data; init.initial_data_size = sizeof(data); + init.type = NCR_DATA_KERNEL; if (ioctl(cfd, NCRIO_DATA_INIT, &init)) { perror("ioctl(NCRIO_DATA_INIT)"); @@ -285,7 +284,6 @@ static int test_ncr_data(int cfd) kdata.desc = init.desc; kdata.data = data; kdata.data_size = sizeof(data); - kdata.append_flag = 0; if (ioctl(cfd, NCRIO_DATA_GET, &kdata)) { perror("ioctl(NCRIO_DATA_GET)"); @@ -305,7 +303,6 @@ static int test_ncr_data(int cfd) kdata.desc = init.desc; kdata.data = data; kdata.data_size = sizeof(data); - kdata.append_flag = 0; if (ioctl(cfd, NCRIO_DATA_SET, &kdata)) { perror("ioctl(NCRIO_DATA_SET)"); @@ -318,7 +315,6 @@ static int test_ncr_data(int cfd) kdata.desc = init.desc; kdata.data = data; kdata.data_size = sizeof(data); - kdata.append_flag = 0; if (ioctl(cfd, NCRIO_DATA_GET, &kdata)) { perror("ioctl(NCRIO_DATA_GET)"); @@ -345,6 +341,7 @@ static int test_ncr_data(int cfd) init.flags = 0; init.initial_data = data; init.initial_data_size = sizeof(data); + init.type = NCR_DATA_KERNEL; if (ioctl(cfd, NCRIO_DATA_INIT, &init)) { perror("ioctl(NCRIO_DATA_INIT)"); @@ -354,7 +351,6 @@ static int test_ncr_data(int cfd) kdata.desc = init.desc; kdata.data = data; kdata.data_size = sizeof(data); - kdata.append_flag = 0; if (ioctl(cfd, NCRIO_DATA_GET, &kdata)==0) { fprintf(stderr, "Unexportable data were exported!?\n"); @@ -367,6 +363,7 @@ static int test_ncr_data(int cfd) init.flags = 0; init.initial_data = data; init.initial_data_size = sizeof(data); + init.type = NCR_DATA_KERNEL; if (ioctl(cfd, NCRIO_DATA_INIT, &init)) { //fprintf(stderr, "Reached maximum limit at: %d data items\n", i); @@ -404,6 +401,7 @@ test_ncr_wrap_key(int cfd) dinit.flags = NCR_DATA_FLAG_EXPORTABLE; dinit.initial_data = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F"; dinit.initial_data_size = 16; + dinit.type = NCR_DATA_KERNEL; if (ioctl(cfd, NCRIO_DATA_INIT, &dinit)) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); @@ -438,11 +436,10 @@ test_ncr_wrap_key(int cfd) kdata.data = DKEY; kdata.data_size = 16; kdata.desc = dinit.desc; - kdata.append_flag = 0; if (ioctl(cfd, NCRIO_DATA_SET, &kdata)) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); - perror("ioctl(NCRIO_DATA_INIT)"); + perror("ioctl(NCRIO_DATA_SET)"); return 1; } @@ -483,7 +480,6 @@ test_ncr_wrap_key(int cfd) kdata.data = data; kdata.data_size = sizeof(data); - kdata.append_flag = 0; if (ioctl(cfd, NCRIO_DATA_GET, &kdata)) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); @@ -589,6 +585,7 @@ test_ncr_store_wrap_key(int cfd) memset(&dinit, 0, sizeof(dinit)); dinit.max_object_size = DATA_SIZE; dinit.flags = NCR_DATA_FLAG_EXPORTABLE; + dinit.type = NCR_DATA_KERNEL; if (ioctl(cfd, NCRIO_DATA_INIT, &dinit)) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); @@ -603,11 +600,10 @@ test_ncr_store_wrap_key(int cfd) kdata.data = DKEY; kdata.data_size = 16; kdata.desc = dd; - kdata.append_flag = 0; if (ioctl(cfd, NCRIO_DATA_SET, &kdata)) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); - perror("ioctl(NCRIO_DATA_INIT)"); + perror("ioctl(NCRIO_DATA_SET)"); return 1; } @@ -750,6 +746,7 @@ test_ncr_aes(int cfd) dinit.flags = NCR_DATA_FLAG_EXPORTABLE; dinit.initial_data = NULL; dinit.initial_data_size = 0; + dinit.type = NCR_DATA_KERNEL; if (ioctl(cfd, NCRIO_DATA_INIT, &dinit)) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); @@ -788,11 +785,10 @@ test_ncr_aes(int cfd) kdata.data = (void*)aes_vectors[i].key; kdata.data_size = 16; kdata.desc = dd; - kdata.append_flag = 0; if (ioctl(cfd, NCRIO_DATA_SET, &kdata)) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); - perror("ioctl(NCRIO_DATA_INIT)"); + perror("ioctl(NCRIO_DATA_SET)"); return 1; } @@ -808,11 +804,10 @@ test_ncr_aes(int cfd) kdata.data = (void*)aes_vectors[i].plaintext; kdata.data_size = 16; kdata.desc = dd; - kdata.append_flag = 0; if (ioctl(cfd, NCRIO_DATA_SET, &kdata)) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); - perror("ioctl(NCRIO_DATA_INIT)"); + perror("ioctl(NCRIO_DATA_SET)"); return 1; } @@ -834,7 +829,6 @@ test_ncr_aes(int cfd) kdata.desc = dd2; kdata.data = data; kdata.data_size = sizeof(data); - kdata.append_flag = 0; if (ioctl(cfd, NCRIO_DATA_GET, &kdata)) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); @@ -865,11 +859,10 @@ test_ncr_aes(int cfd) kdata.data = (void*)aes_vectors[i].key; kdata.data_size = 16; kdata.desc = dd; - kdata.append_flag = 0; if (ioctl(cfd, NCRIO_DATA_SET, &kdata)) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); - perror("ioctl(NCRIO_DATA_INIT)"); + perror("ioctl(NCRIO_DATA_SET)"); return 1; } @@ -886,11 +879,10 @@ test_ncr_aes(int cfd) kdata.data = (void*)aes_vectors[i].ciphertext; kdata.data_size = 16; kdata.desc = dd; - kdata.append_flag = 0; if (ioctl(cfd, NCRIO_DATA_SET, &kdata)) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); - perror("ioctl(NCRIO_DATA_INIT)"); + perror("ioctl(NCRIO_DATA_SET)"); return 1; } @@ -912,7 +904,6 @@ test_ncr_aes(int cfd) kdata.desc = dd2; kdata.data = data; kdata.data_size = sizeof(data); - kdata.append_flag = 0; if (ioctl(cfd, NCRIO_DATA_GET, &kdata)) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); @@ -1041,6 +1032,7 @@ test_ncr_hash(int cfd) dinit.flags = NCR_DATA_FLAG_EXPORTABLE; dinit.initial_data = NULL; dinit.initial_data_size = 0; + dinit.type = NCR_DATA_KERNEL; if (ioctl(cfd, NCRIO_DATA_INIT, &dinit)) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); @@ -1081,11 +1073,10 @@ test_ncr_hash(int cfd) kdata.data = (void*)hash_vectors[i].key; kdata.data_size = hash_vectors[i].key_size; kdata.desc = dd; - kdata.append_flag = 0; if (ioctl(cfd, NCRIO_DATA_SET, &kdata)) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); - perror("ioctl(NCRIO_DATA_INIT)"); + perror("ioctl(NCRIO_DATA_SET)"); return 1; } @@ -1102,11 +1093,10 @@ test_ncr_hash(int cfd) kdata.data = (void*)hash_vectors[i].plaintext; kdata.data_size = hash_vectors[i].plaintext_size; kdata.desc = dd; - kdata.append_flag = 0; if (ioctl(cfd, NCRIO_DATA_SET, &kdata)) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); - perror("ioctl(NCRIO_DATA_INIT)"); + perror("ioctl(NCRIO_DATA_SET)"); return 1; } @@ -1126,10 +1116,10 @@ test_ncr_hash(int cfd) } /* verify */ + memset(&kdata, 0, sizeof(kdata)); kdata.desc = dd2; kdata.data = data; kdata.data_size = sizeof(data); - kdata.append_flag = 0; if (ioctl(cfd, NCRIO_DATA_GET, &kdata)) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); diff --git a/examples/pk.c b/examples/pk.c index 0765638..edae150 100644 --- a/examples/pk.c +++ b/examples/pk.c @@ -339,6 +339,7 @@ static int rsa_key_encrypt(int cfd, ncr_key_t privkey, ncr_key_t pubkey, int oae dinit.flags = NCR_DATA_FLAG_EXPORTABLE; dinit.initial_data = data; dinit.initial_data_size = RSA_ENCRYPT_SIZE; + dinit.type = NCR_DATA_KERNEL; if (ioctl(cfd, NCRIO_DATA_INIT, &dinit)) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); @@ -351,6 +352,7 @@ static int rsa_key_encrypt(int cfd, ncr_key_t privkey, ncr_key_t pubkey, int oae memset(&dinit, 0, sizeof(dinit)); dinit.max_object_size = DATA_SIZE; dinit.flags = NCR_DATA_FLAG_EXPORTABLE; + dinit.type = NCR_DATA_KERNEL; if (ioctl(cfd, NCRIO_DATA_INIT, &dinit)) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); @@ -437,6 +439,7 @@ static int rsa_key_sign_verify(int cfd, ncr_key_t privkey, ncr_key_t pubkey, int dinit.flags = NCR_DATA_FLAG_EXPORTABLE; dinit.initial_data = data; dinit.initial_data_size = sizeof(data); + dinit.type = NCR_DATA_KERNEL; if (ioctl(cfd, NCRIO_DATA_INIT, &dinit)) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); @@ -449,6 +452,7 @@ static int rsa_key_sign_verify(int cfd, ncr_key_t privkey, ncr_key_t pubkey, int memset(&dinit, 0, sizeof(dinit)); dinit.max_object_size = DATA_SIZE; dinit.flags = NCR_DATA_FLAG_EXPORTABLE; + dinit.type = NCR_DATA_KERNEL; if (ioctl(cfd, NCRIO_DATA_INIT, &dinit)) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); @@ -529,6 +533,7 @@ static int dsa_key_sign_verify(int cfd, ncr_key_t privkey, ncr_key_t pubkey) memset(&dinit, 0, sizeof(dinit)); dinit.max_object_size = DATA_SIZE; dinit.flags = NCR_DATA_FLAG_EXPORTABLE; + dinit.type = NCR_DATA_KERNEL; if (ioctl(cfd, NCRIO_DATA_INIT, &dinit)) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); @@ -621,6 +626,7 @@ static int test_ncr_rsa(int cfd) dinit.flags = NCR_DATA_FLAG_EXPORTABLE; dinit.initial_data = NULL; dinit.initial_data_size = 0; + dinit.type = NCR_DATA_KERNEL; if (ioctl(cfd, NCRIO_DATA_INIT, &dinit)) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); @@ -644,7 +650,6 @@ static int test_ncr_rsa(int cfd) kdata.desc = dinit.desc; kdata.data = data; kdata.data_size = sizeof(data); - kdata.append_flag = 0; if (ioctl(cfd, NCRIO_DATA_GET, &kdata)) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); @@ -676,7 +681,6 @@ static int test_ncr_rsa(int cfd) kdata.desc = dinit.desc; kdata.data = data; kdata.data_size = sizeof(data); - kdata.append_flag = 0; if (ioctl(cfd, NCRIO_DATA_GET, &kdata)) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); @@ -765,6 +769,7 @@ static int test_ncr_dsa(int cfd) dinit.flags = NCR_DATA_FLAG_EXPORTABLE; dinit.initial_data = NULL; dinit.initial_data_size = 0; + dinit.type = NCR_DATA_KERNEL; if (ioctl(cfd, NCRIO_DATA_INIT, &dinit)) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); @@ -788,7 +793,6 @@ static int test_ncr_dsa(int cfd) kdata.desc = dinit.desc; kdata.data = data; kdata.data_size = sizeof(data); - kdata.append_flag = 0; if (ioctl(cfd, NCRIO_DATA_GET, &kdata)) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); @@ -820,7 +824,6 @@ static int test_ncr_dsa(int cfd) kdata.desc = dinit.desc; kdata.data = data; kdata.data_size = sizeof(data); - kdata.append_flag = 0; if (ioctl(cfd, NCRIO_DATA_GET, &kdata)) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); diff --git a/examples/speed.c b/examples/speed.c index 99dc09e..25bf08b 100644 --- a/examples/speed.c +++ b/examples/speed.c @@ -152,10 +152,12 @@ int encrypt_data_ncr(int cfd, int algo, int chunksize) buffer = malloc(chunksize); memset(iv, 0x23, 32); + memset(&dinit, 0, sizeof(dinit)); dinit.max_object_size = chunksize; dinit.flags = NCR_DATA_FLAG_EXPORTABLE; dinit.initial_data = buffer; dinit.initial_data_size = chunksize; + dinit.type = NCR_DATA_KERNEL; if (ioctl(cfd, NCRIO_DATA_INIT, &dinit)) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); @@ -177,7 +179,6 @@ int encrypt_data_ncr(int cfd, int algo, int chunksize) kdata.data = buffer; kdata.data_size = chunksize; kdata.desc = dd; - kdata.append_flag = 0; if (ioctl(cfd, NCRIO_DATA_SET, &kdata)) { fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); @@ -217,6 +218,97 @@ int encrypt_data_ncr(int cfd, int algo, int chunksize) return 0; } +int encrypt_data_ncr_user(int cfd, int algo, int chunksize) +{ + char *buffer, iv[32]; + static int val = 23; + struct timeval start, end; + double total = 0; + double secs, ddata, dspeed; + char metric[16]; + ncr_key_t key; + struct ncr_key_generate_st kgen; + struct ncr_data_init_st dinit; + struct ncr_session_once_op_st nop; + ncr_data_t dd; + + if (ioctl(cfd, NCRIO_KEY_INIT, &key)) { + fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); + perror("ioctl(NCRIO_KEY_INIT)"); + return 1; + } + + kgen.desc = key; + kgen.params.algorithm = NCR_ALG_AES_CBC; + kgen.params.keyflags = NCR_KEY_FLAG_EXPORTABLE; + kgen.params.params.secret.bits = 128; /* 16 bytes */ + + if (ioctl(cfd, NCRIO_KEY_GENERATE, &kgen)) { + fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); + perror("ioctl(NCRIO_KEY_IMPORT)"); + return 1; + } + + + buffer = malloc(chunksize); + memset(iv, 0x23, 32); + + /* now data are just a mirror of userspace data */ + memset(&dinit, 0, sizeof(dinit)); + dinit.flags = NCR_DATA_FLAG_EXPORTABLE; + dinit.initial_data = buffer; + dinit.initial_data_size = chunksize; + dinit.type = NCR_DATA_USER; + + if (ioctl(cfd, NCRIO_DATA_INIT, &dinit)) { + fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); + perror("ioctl(NCRIO_DATA_INIT)"); + return 1; + } + dd = dinit.desc; + + printf("\tEncrypting in chunks of %d bytes: ", chunksize); + fflush(stdout); + + memset(buffer, val++, chunksize); + + must_finish = 0; + alarm(5); + + gettimeofday(&start, NULL); + do { + memset(&nop, 0, sizeof(nop)); + nop.init.algorithm = algo; + nop.init.params.key = key; + nop.init.op = NCR_OP_ENCRYPT; + nop.op.data.cipher.plaintext = dd; + nop.op.data.cipher.ciphertext = dd; + + if (ioctl(cfd, NCRIO_SESSION_ONCE, &nop)) { + fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); + perror("ioctl(NCRIO_SESSION_ONCE)"); + return 1; + } + + total+=chunksize; + } while(must_finish==0); + gettimeofday(&end, NULL); + + if (ioctl(cfd, NCRIO_DATA_DEINIT, &dd)) { + fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__); + perror("ioctl(NCRIO_DATA_INIT)"); + return 1; + } + + secs = udifftimeval(start, end)/ 1000000.0; + + value2human(total, secs, &ddata, &dspeed, metric); + printf ("done. %.2f %s in %.2f secs: ", ddata, metric, secs); + printf ("%.2f %s/sec\n", dspeed, metric); + + return 0; +} + int main(void) { int fd, i, fdc = -1; @@ -277,6 +369,18 @@ int main(void) break; } + fprintf(stderr, "\nTesting NCR-USER with NULL cipher: \n"); + for (i = 256; i <= (64 * 1024); i *= 2) { + if (encrypt_data_ncr_user(fdc, NCR_ALG_NULL, i)) + break; + } + + fprintf(stderr, "\nTesting NCR-USER with AES-128-CBC cipher: \n"); + for (i = 256; i <= (64 * 1024); i *= 2) { + if (encrypt_data_ncr_user(fdc, NCR_ALG_AES_CBC, i)) + break; + } + close(fdc); close(fd); |