summaryrefslogtreecommitdiffstats
path: root/examples/ncr.c
diff options
context:
space:
mode:
Diffstat (limited to 'examples/ncr.c')
-rw-r--r--examples/ncr.c399
1 files changed, 43 insertions, 356 deletions
diff --git a/examples/ncr.c b/examples/ncr.c
index f2c4b72..4ff59fd 100644
--- a/examples/ncr.c
+++ b/examples/ncr.c
@@ -32,11 +32,9 @@ int i;
static int
test_ncr_key(int cfd)
{
- struct ncr_data_init_st dinit;
struct ncr_key_generate_st kgen;
ncr_key_t key;
struct ncr_key_data_st keydata;
- struct ncr_data_st kdata;
uint8_t data[KEY_DATA_SIZE];
uint8_t data_bak[KEY_DATA_SIZE];
@@ -51,17 +49,6 @@ test_ncr_key(int cfd)
randomize_data(data, sizeof(data));
memcpy(data_bak, data, sizeof(data));
- dinit.max_object_size = KEY_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;
- }
-
/* convert it to key */
if (ioctl(cfd, NCRIO_KEY_INIT, &key)) {
perror("ioctl(NCRIO_KEY_INIT)");
@@ -76,7 +63,8 @@ test_ncr_key(int cfd)
keydata.flags = NCR_KEY_FLAG_EXPORTABLE;
keydata.key = key;
- keydata.data = dinit.desc;
+ keydata.idata = data;
+ keydata.idata_size = sizeof(data);
if (ioctl(cfd, NCRIO_KEY_IMPORT, &keydata)) {
fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
@@ -86,43 +74,21 @@ test_ncr_key(int cfd)
/* now try to read it */
fprintf(stdout, "\tKey export...\n");
- if (ioctl(cfd, NCRIO_DATA_DEINIT, &dinit.desc)) {
- fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
- perror("ioctl(NCRIO_DATA_DEINIT)");
- return 1;
- }
-
- dinit.max_object_size = DATA_SIZE;
- dinit.flags = NCR_DATA_FLAG_EXPORTABLE;
- dinit.initial_data = NULL;
- dinit.initial_data_size = 0;
-
- if (ioctl(cfd, NCRIO_DATA_INIT, &dinit)) {
- fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
- perror("ioctl(NCRIO_DATA_INIT)");
- return 1;
- }
memset(&keydata, 0, sizeof(keydata));
keydata.key = key;
- keydata.data = dinit.desc;
+ keydata.idata = data;
+ keydata.idata_size = sizeof(data);
if (ioctl(cfd, NCRIO_KEY_EXPORT, &keydata)) {
fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
perror("ioctl(NCRIO_KEY_IMPORT)");
return 1;
}
-
- /* now read data */
- memset(&kdata, 0, sizeof(kdata));
-
- kdata.desc = dinit.desc;
- kdata.data = data;
- kdata.data_size = sizeof(data);
-
- if (ioctl(cfd, NCRIO_DATA_GET, &kdata)) {
+
+ if (keydata.idata_size != sizeof(data)) {
fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
- perror("ioctl(NCRIO_DATA_GET)");
+ fprintf(stderr, "data returned but differ!\n");
return 1;
}
@@ -162,9 +128,12 @@ test_ncr_key(int cfd)
return 1;
}
+ memset(data, 0, sizeof(data));
+
memset(&keydata, 0, sizeof(keydata));
keydata.key = key;
- keydata.data = dinit.desc;
+ keydata.idata = data;
+ keydata.idata_size = sizeof(data);
if (ioctl(cfd, NCRIO_KEY_EXPORT, &keydata)) {
fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
@@ -172,27 +141,16 @@ test_ncr_key(int cfd)
return 1;
}
- /* now read data */
- memset(data, 0, sizeof(data));
-
- kdata.desc = dinit.desc;
- kdata.data = data;
- kdata.data_size = sizeof(data);
-
- if (ioctl(cfd, NCRIO_DATA_GET, &kdata)) {
+ if (keydata.idata_size == 0 || (data[0] == 0 && data[1] == 0 && data[2] == 0 && data[4] == 0)) {
fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
- perror("ioctl(NCRIO_DATA_GET)");
+ fprintf(stderr, "Generated key: %.2x.%.2x.%.2x.%.2x.%.2x.%.2x.%.2x.%.2x."
+ "%.2x.%.2x.%.2x.%.2x.%.2x.%.2x.%.2x.%.2x\n", data[0], data[1],
+ data[2], data[3], data[4], data[5], data[6], data[7], data[8],
+ data[9], data[10], data[11], data[12], data[13], data[14],
+ data[15]);
return 1;
}
-#if 0
- fprintf(stderr, "Generated key: %.2x.%.2x.%.2x.%.2x.%.2x.%.2x.%.2x.%.2x."
- "%.2x.%.2x.%.2x.%.2x.%.2x.%.2x.%.2x.%.2x\n", data[0], data[1],
- data[2], data[3], data[4], data[5], data[6], data[7], data[8],
- data[9], data[10], data[11], data[12], data[13], data[14],
- data[15]);
-#endif
-
if (ioctl(cfd, NCRIO_KEY_DEINIT, &key)) {
fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
perror("ioctl(NCRIO_KEY_DEINIT)");
@@ -219,24 +177,16 @@ test_ncr_key(int cfd)
return 1;
}
+ memset(data, 0, sizeof(data));
+
memset(&keydata, 0, sizeof(keydata));
keydata.key = key;
- keydata.data = dinit.desc;
-
- if (ioctl(cfd, NCRIO_KEY_EXPORT, &keydata)) {
- fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
- perror("ioctl(NCRIO_KEY_EXPORT)");
- return 1;
- }
+ keydata.idata = data;
+ keydata.idata_size = sizeof(data);
/* try to get the output data - should fail */
- memset(data, 0, sizeof(data));
-
- kdata.desc = dinit.desc;
- kdata.data = data;
- kdata.data_size = sizeof(data);
- if (ioctl(cfd, NCRIO_DATA_GET, &kdata)==0) {
+ if (ioctl(cfd, NCRIO_KEY_EXPORT, &keydata)==0) {
fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
fprintf(stderr, "Data were exported, but shouldn't be!\n");
return 1;
@@ -252,135 +202,14 @@ test_ncr_key(int cfd)
}
-static int test_ncr_data(int cfd)
-{
- struct ncr_data_init_st init;
- struct ncr_data_st kdata;
- uint8_t data[DATA_SIZE];
- uint8_t data_bak[DATA_SIZE];
- int i;
-
- fprintf(stdout, "Tests on Data:\n");
-
- randomize_data(data, sizeof(data));
- memcpy(data_bak, data, sizeof(data));
-
- init.max_object_size = DATA_SIZE;
- init.flags = NCR_DATA_FLAG_EXPORTABLE;
- init.initial_data = data;
- init.initial_data_size = sizeof(data);
-
- if (ioctl(cfd, NCRIO_DATA_INIT, &init)) {
- perror("ioctl(NCRIO_DATA_INIT)");
- return 1;
- }
-
- fprintf(stdout, "\tData Import...\n");
-
- memset(data, 0, sizeof(data));
-
- kdata.desc = init.desc;
- kdata.data = data;
- kdata.data_size = sizeof(data);
-
- if (ioctl(cfd, NCRIO_DATA_GET, &kdata)) {
- perror("ioctl(NCRIO_DATA_GET)");
- return 1;
- }
-
- if (memcmp(data, data_bak, sizeof(data))!=0) {
- fprintf(stderr, "data returned but differ!\n");
- return 1;
- }
-
- fprintf(stdout, "\tData Export...\n");
-
- /* test set */
- memset(data, 0xf1, sizeof(data));
-
- kdata.desc = init.desc;
- kdata.data = data;
- kdata.data_size = sizeof(data);
-
- if (ioctl(cfd, NCRIO_DATA_SET, &kdata)) {
- perror("ioctl(NCRIO_DATA_SET)");
- return 1;
- }
-
- /* test get after set */
- memset(data, 0, sizeof(data));
-
- kdata.desc = init.desc;
- kdata.data = data;
- kdata.data_size = sizeof(data);
-
- if (ioctl(cfd, NCRIO_DATA_GET, &kdata)) {
- perror("ioctl(NCRIO_DATA_GET)");
- return 1;
- }
-
- for(i=0;i<kdata.data_size;i++) {
- if (((uint8_t*)kdata.data)[i] != 0xf1) {
- fprintf(stderr, "data returned but differ!\n");
- return 1;
- }
- }
- fprintf(stdout, "\t2nd Data Import/Export...\n");
-
- if (ioctl(cfd, NCRIO_DATA_DEINIT, &kdata.desc)) {
- perror("ioctl(NCRIO_DATA_DEINIT)");
- return 1;
- }
-
- fprintf(stdout, "\tProtection of non-exportable data...\n");
- randomize_data(data, sizeof(data));
-
- init.max_object_size = DATA_SIZE;
- init.flags = 0;
- init.initial_data = data;
- init.initial_data_size = sizeof(data);
-
- if (ioctl(cfd, NCRIO_DATA_INIT, &init)) {
- perror("ioctl(NCRIO_DATA_INIT)");
- return 1;
- }
-
- kdata.desc = init.desc;
- kdata.data = data;
- kdata.data_size = sizeof(data);
-
- if (ioctl(cfd, NCRIO_DATA_GET, &kdata)==0) {
- fprintf(stderr, "Unexportable data were exported!?\n");
- return 1;
- }
-
- fprintf(stdout, "\tLimits on maximum allowed data...\n");
- for (i=0;i<256;i++ ) {
- init.max_object_size = DATA_SIZE;
- init.flags = 0;
- init.initial_data = data;
- init.initial_data_size = sizeof(data);
-
- if (ioctl(cfd, NCRIO_DATA_INIT, &init)) {
- //fprintf(stderr, "Reached maximum limit at: %d data items\n", i);
- break;
- }
- }
-
- /* shouldn't run any other tests after that */
-
- return 0;
-}
/* Key wrapping */
static int
test_ncr_wrap_key(int cfd)
{
int i;
- struct ncr_data_init_st dinit;
ncr_key_t key, key2;
struct ncr_key_data_st keydata;
- struct ncr_data_st kdata;
struct ncr_key_wrap_st kwrap;
uint8_t data[WRAPPED_KEY_DATA_SIZE];
int data_size;
@@ -393,17 +222,6 @@ test_ncr_wrap_key(int cfd)
fprintf(stdout, "\tKey Wrap test...\n");
- dinit.max_object_size = WRAPPED_KEY_DATA_SIZE;
- 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;
-
- if (ioctl(cfd, NCRIO_DATA_INIT, &dinit)) {
- fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
- perror("ioctl(NCRIO_DATA_INIT)");
- return 1;
- }
-
/* convert it to key */
if (ioctl(cfd, NCRIO_KEY_INIT, &key)) {
perror("ioctl(NCRIO_KEY_INIT)");
@@ -418,7 +236,8 @@ test_ncr_wrap_key(int cfd)
keydata.flags = NCR_KEY_FLAG_EXPORTABLE|NCR_KEY_FLAG_WRAPPABLE;
keydata.key = key;
- keydata.data = dinit.desc;
+ keydata.idata = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F";
+ keydata.idata_size = 16;
if (ioctl(cfd, NCRIO_KEY_IMPORT, &keydata)) {
fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
@@ -426,17 +245,6 @@ test_ncr_wrap_key(int cfd)
return 1;
}
-#define DKEY "\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xAA\xBB\xCC\xDD\xEE\xFF"
- /* now key data */
- kdata.data = DKEY;
- kdata.data_size = 16;
- kdata.desc = dinit.desc;
-
- if (ioctl(cfd, NCRIO_DATA_SET, &kdata)) {
- fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
- perror("ioctl(NCRIO_DATA_SET)");
- return 1;
- }
/* convert it to key */
if (ioctl(cfd, NCRIO_KEY_INIT, &key2)) {
@@ -452,7 +260,9 @@ test_ncr_wrap_key(int cfd)
keydata.flags = NCR_KEY_FLAG_EXPORTABLE|NCR_KEY_FLAG_WRAPPABLE;
keydata.key = key2;
- keydata.data = kdata.desc;
+#define DKEY "\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xAA\xBB\xCC\xDD\xEE\xFF"
+ keydata.idata = DKEY;
+ keydata.idata_size = 16;
if (ioctl(cfd, NCRIO_KEY_IMPORT, &keydata)) {
fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
@@ -556,13 +366,10 @@ static int
test_ncr_store_wrap_key(int cfd)
{
int i;
- struct ncr_data_init_st dinit;
ncr_key_t key2;
struct ncr_key_data_st keydata;
- struct ncr_data_st kdata;
struct ncr_key_storage_wrap_st kwrap;
uint8_t data[DATA_SIZE];
- int dd;
int data_size;
fprintf(stdout, "Tests on Key storage:\n");
@@ -573,30 +380,6 @@ test_ncr_store_wrap_key(int cfd)
fprintf(stdout, "\tKey Storage wrap test...\n");
- 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;
- }
-
- dd = dinit.desc;
-
-#define DKEY "\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xAA\xBB\xCC\xDD\xEE\xFF"
- /* now key data */
- kdata.data = DKEY;
- kdata.data_size = 16;
- kdata.desc = dd;
-
- if (ioctl(cfd, NCRIO_DATA_SET, &kdata)) {
- fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
- perror("ioctl(NCRIO_DATA_SET)");
- return 1;
- }
-
/* convert it to key */
if (ioctl(cfd, NCRIO_KEY_INIT, &key2)) {
perror("ioctl(NCRIO_KEY_INIT)");
@@ -611,7 +394,9 @@ test_ncr_store_wrap_key(int cfd)
keydata.flags = NCR_KEY_FLAG_EXPORTABLE|NCR_KEY_FLAG_WRAPPABLE;
keydata.key = key2;
- keydata.data = dd;
+#define DKEY "\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xAA\xBB\xCC\xDD\xEE\xFF"
+ keydata.idata = DKEY;
+ keydata.idata_size = 16;
if (ioctl(cfd, NCRIO_KEY_IMPORT, &keydata)) {
fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
@@ -662,25 +447,21 @@ test_ncr_store_wrap_key(int cfd)
/* now export the unwrapped */
memset(&keydata, 0, sizeof(keydata));
keydata.key = key2;
- keydata.data = dd;
+ keydata.idata = data;
+ keydata.idata_size = sizeof(data);
if (ioctl(cfd, NCRIO_KEY_EXPORT, &keydata)) {
fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
perror("ioctl(NCRIO_KEY_IMPORT)");
return 1;
}
+
+ data_size = keydata.idata_size;
- kdata.data = data;
- if (ioctl(cfd, NCRIO_DATA_GET, &kdata)) {
- fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
- perror("ioctl(NCRIO_DATA_GET)");
- return 1;
- }
-
- if (kdata.data_size != 16 || memcmp(kdata.data, DKEY, 16) != 0) {
+ if (data_size != 16 || memcmp(data, DKEY, 16) != 0) {
fprintf(stderr, "Unwrapped data do not match.\n");
- fprintf(stderr, "Data[%d]: ", (int) kdata.data_size);
- for(i=0;i<kdata.data_size;i++)
+ fprintf(stderr, "Data[%d]: ", (int) data_size);
+ for(i=0;i<data_size;i++)
fprintf(stderr, "%.2x:", data[i]);
fprintf(stderr, "\n");
return 1;
@@ -726,37 +507,13 @@ struct aes_vectors_st {
static int
test_ncr_aes(int cfd)
{
- struct ncr_data_init_st dinit;
ncr_key_t key;
struct ncr_key_data_st keydata;
- struct ncr_data_st kdata;
- ncr_data_t dd, dd2;
uint8_t data[KEY_DATA_SIZE];
int i, j;
struct ncr_session_once_op_st nop;
int data_size;
- dinit.max_object_size = KEY_DATA_SIZE;
- dinit.flags = NCR_DATA_FLAG_EXPORTABLE;
- dinit.initial_data = NULL;
- dinit.initial_data_size = 0;
-
- 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;
-
- if (ioctl(cfd, NCRIO_DATA_INIT, &dinit)) {
- fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
- perror("ioctl(NCRIO_DATA_INIT)");
- return 1;
- }
-
- dd2 = dinit.desc;
-
/* convert it to key */
if (ioctl(cfd, NCRIO_KEY_INIT, &key)) {
perror("ioctl(NCRIO_KEY_INIT)");
@@ -774,19 +531,9 @@ test_ncr_aes(int cfd)
fprintf(stdout, "Tests on AES Encryption\n");
for (i=0;i<sizeof(aes_vectors)/sizeof(aes_vectors[0]);i++) {
- /* import key */
- kdata.data = (void*)aes_vectors[i].key;
- kdata.data_size = 16;
- kdata.desc = dd;
-
- if (ioctl(cfd, NCRIO_DATA_SET, &kdata)) {
- fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
- perror("ioctl(NCRIO_DATA_SET)");
- return 1;
- }
-
keydata.key = key;
- keydata.data = dd;
+ keydata.idata = (void*)aes_vectors[i].key;
+ keydata.idata_size = 16;
if (ioctl(cfd, NCRIO_KEY_IMPORT, &keydata)) {
fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
perror("ioctl(NCRIO_KEY_IMPORT)");
@@ -832,19 +579,9 @@ test_ncr_aes(int cfd)
fprintf(stdout, "Tests on AES Decryption\n");
for (i=0;i<sizeof(aes_vectors)/sizeof(aes_vectors[0]);i++) {
- /* import key */
- kdata.data = (void*)aes_vectors[i].key;
- kdata.data_size = 16;
- kdata.desc = dd;
-
- if (ioctl(cfd, NCRIO_DATA_SET, &kdata)) {
- fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
- perror("ioctl(NCRIO_DATA_SET)");
- return 1;
- }
-
keydata.key = key;
- keydata.data = dd;
+ keydata.idata = (void*)aes_vectors[i].key;
+ keydata.idata_size = 16;
if (ioctl(cfd, NCRIO_KEY_IMPORT, &keydata)) {
fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
perror("ioctl(NCRIO_KEY_IMPORT)");
@@ -979,36 +716,12 @@ struct hash_vectors_st {
static int
test_ncr_hash(int cfd)
{
- struct ncr_data_init_st dinit;
ncr_key_t key;
struct ncr_key_data_st keydata;
- struct ncr_data_st kdata;
- ncr_data_t dd, dd2;
uint8_t data[HASH_DATA_SIZE];
int i, j, data_size;
struct ncr_session_once_op_st nop;
- dinit.max_object_size = HASH_DATA_SIZE;
- dinit.flags = NCR_DATA_FLAG_EXPORTABLE;
- dinit.initial_data = NULL;
- dinit.initial_data_size = 0;
-
- 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;
-
- if (ioctl(cfd, NCRIO_DATA_INIT, &dinit)) {
- fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
- perror("ioctl(NCRIO_DATA_INIT)");
- return 1;
- }
-
- dd2 = dinit.desc;
-
/* convert it to key */
if (ioctl(cfd, NCRIO_KEY_INIT, &key)) {
perror("ioctl(NCRIO_KEY_INIT)");
@@ -1029,18 +742,10 @@ test_ncr_hash(int cfd)
fprintf(stdout, "\t%s:\n", hash_vectors[i].name);
/* import key */
if (hash_vectors[i].key != NULL) {
- kdata.data = (void*)hash_vectors[i].key;
- kdata.data_size = hash_vectors[i].key_size;
- kdata.desc = dd;
-
- if (ioctl(cfd, NCRIO_DATA_SET, &kdata)) {
- fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
- perror("ioctl(NCRIO_DATA_SET)");
- return 1;
- }
keydata.key = key;
- keydata.data = dd;
+ keydata.idata = (void*)hash_vectors[i].key;
+ keydata.idata_size = hash_vectors[i].key_size;
if (ioctl(cfd, NCRIO_KEY_IMPORT, &keydata)) {
fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
perror("ioctl(NCRIO_KEY_IMPORT)");
@@ -1105,24 +810,6 @@ main()
return 1;
}
- /* Run the test itself */
- if (test_ncr_data(fd))
- return 1;
-
- /* Close the original descriptor */
- if (close(fd)) {
- perror("close(fd)");
- return 1;
- }
-
- /* actually test if the initial close
- * will really delete all used lists */
-
- fd = open("/dev/crypto", O_RDWR, 0);
- if (fd < 0) {
- perror("open(/dev/crypto)");
- return 1;
- }
if (test_ncr_key(fd))
return 1;