diff options
Diffstat (limited to 'examples/speed.c')
-rw-r--r-- | examples/speed.c | 106 |
1 files changed, 105 insertions, 1 deletions
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); |