diff options
| author | Miloslav Trmač <mitr@redhat.com> | 2010-11-26 02:00:31 +0100 |
|---|---|---|
| committer | Miloslav Trmač <mitr@redhat.com> | 2010-11-26 02:00:31 +0100 |
| commit | e7fa04556e265d65232d6ef2afc6c0c472198011 (patch) | |
| tree | 643f5a76d98b49b051ccc47575d5a72f6a763afe /tests | |
| parent | 21c90e0365ac50c57ad5a3493582e996a236d1a3 (diff) | |
| download | ncrypto-e7fa04556e265d65232d6ef2afc6c0c472198011.tar.gz ncrypto-e7fa04556e265d65232d6ef2afc6c0c472198011.tar.xz ncrypto-e7fa04556e265d65232d6ef2afc6c0c472198011.zip | |
Pass MPIs around in arrays, not named parameters
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/rsa.c | 120 |
1 files changed, 57 insertions, 63 deletions
diff --git a/tests/rsa.c b/tests/rsa.c index 85e1fe6..2eeaa47 100644 --- a/tests/rsa.c +++ b/tests/rsa.c @@ -34,57 +34,61 @@ Red Hat author: Miloslav Trmač <mitr@redhat.com> */ #include <glib.h> #include <ncrypto/ncrypto.h> -static const uint8_t modulus[64] = "\xB8\xC7\x54\x15\x90\xCF\x91\x7A\xF3\x4C\x45\x53\xC2\x0A\xDA\x84\x4C\x09\x48\x10\x06\x41\xC5\x97\x57\x02\xDA\x0E\x7E\x64\x46\xBD\xC6\x75\x42\xCD\x32\x23\x0C\xEC\x2B\x1C\x60\x03\x68\x1E\x4F\x28\x78\xD8\xB0\xC1\xAC\xA7\x21\xE4\x15\x74\x65\x16\x1C\x59\xC8\x85"; -static const uint8_t public_exponent[3] = "\x01\x00\x01"; -static const uint8_t private_exponent[64] = "\x7B\xD6\xC3\xC8\xEC\x53\xE1\x09\xC9\x13\xDE\x06\xE3\xAE\xC8\x83\x10\x3E\xCC\x38\x49\x29\x3D\x97\x4F\x6E\x8E\xDC\x55\xE3\x38\xF1\x03\xEB\xC1\x09\x80\x16\xB8\x9F\xE1\xC0\x21\x77\xD4\xEE\xF7\x30\xD1\x85\x2B\x1F\x4F\xFE\xD1\x01\xCD\x35\x78\x4A\x97\x6F\x38\x65"; -static const uint8_t prime_1[32] = "\xF5\x7E\xFA\xED\xE0\xEC\x9C\x4E\x6F\xDF\xED\x64\x58\xEC\x18\xA9\x8E\x60\x2E\x49\x7E\xDF\x8E\xCF\x9F\xA5\x4A\x32\xA3\x27\x7E\x1B"; -static const uint8_t prime_2[32] = "\xC0\xAF\x49\x15\x49\x8D\x88\xFB\x28\x7D\x33\x25\x07\x37\xE0\x99\x2C\xA8\x6D\x46\x4F\x7D\x7D\x6E\x01\x95\x6B\x2B\x18\x1B\xBD\xDF"; -static const uint8_t exponent_1[32] = "\xC3\x34\x0F\xB4\xBC\x87\x87\x95\xFA\xF1\x14\x63\x19\x2D\xCA\x42\x70\x5A\x5C\x13\xC6\x95\x5E\x8A\x0B\x08\x34\x22\x65\x87\x0E\x87"; -static const uint8_t exponent_2[32] = "\x27\x3B\x89\x85\xEC\x14\x05\x70\x1E\x2E\x5F\xDB\x8A\x3C\xB6\x5E\x79\xD9\x51\x66\x9F\x88\xCD\xA1\x38\x71\x54\x00\xD2\x47\xD3\xC1"; -static const uint8_t coefficient[32] = "\x39\x09\x3A\x43\xCF\xE3\x65\x63\x2F\x5F\x11\xED\x2C\x42\x88\xEF\xCA\x26\x1E\x08\x96\xCF\x0A\x8F\xCB\x88\x45\x50\xEF\x6A\x38\x07"; + +static const struct ncr_mpi import_mpis[NCR_RSA_PRIVATE_NUM_MPIS] = + { +#define INT(NAME, VAL) \ + [NCR_RSA_PRIVATE_MPI_##NAME] = { (void *)(VAL), sizeof (VAL) - 1 } + + INT (MODULUS, + "\xB8\xC7\x54\x15\x90\xCF\x91\x7A\xF3\x4C\x45\x53\xC2\x0A\xDA\x84\x4C\x09\x48\x10\x06\x41\xC5\x97\x57\x02\xDA\x0E\x7E\x64\x46\xBD\xC6\x75\x42\xCD\x32\x23\x0C\xEC\x2B\x1C\x60\x03\x68\x1E\x4F\x28\x78\xD8\xB0\xC1\xAC\xA7\x21\xE4\x15\x74\x65\x16\x1C\x59\xC8\x85"), + INT (PUBLIC_EXPONENT, "\x01\x00\x01"), + INT (PRIVATE_EXPONENT, "\x7B\xD6\xC3\xC8\xEC\x53\xE1\x09\xC9\x13\xDE\x06\xE3\xAE\xC8\x83\x10\x3E\xCC\x38\x49\x29\x3D\x97\x4F\x6E\x8E\xDC\x55\xE3\x38\xF1\x03\xEB\xC1\x09\x80\x16\xB8\x9F\xE1\xC0\x21\x77\xD4\xEE\xF7\x30\xD1\x85\x2B\x1F\x4F\xFE\xD1\x01\xCD\x35\x78\x4A\x97\x6F\x38\x65"), + INT (PRIME_1, "\xF5\x7E\xFA\xED\xE0\xEC\x9C\x4E\x6F\xDF\xED\x64\x58\xEC\x18\xA9\x8E\x60\x2E\x49\x7E\xDF\x8E\xCF\x9F\xA5\x4A\x32\xA3\x27\x7E\x1B"), + INT (PRIME_2, "\xC0\xAF\x49\x15\x49\x8D\x88\xFB\x28\x7D\x33\x25\x07\x37\xE0\x99\x2C\xA8\x6D\x46\x4F\x7D\x7D\x6E\x01\x95\x6B\x2B\x18\x1B\xBD\xDF"), + INT (EXPONENT_1, "\xC3\x34\x0F\xB4\xBC\x87\x87\x95\xFA\xF1\x14\x63\x19\x2D\xCA\x42\x70\x5A\x5C\x13\xC6\x95\x5E\x8A\x0B\x08\x34\x22\x65\x87\x0E\x87"), + INT (EXPONENT_2, "\x27\x3B\x89\x85\xEC\x14\x05\x70\x1E\x2E\x5F\xDB\x8A\x3C\xB6\x5E\x79\xD9\x51\x66\x9F\x88\xCD\xA1\x38\x71\x54\x00\xD2\x47\xD3\xC1"), + INT (COEFFICIENT, "\x39\x09\x3A\x43\xCF\xE3\x65\x63\x2F\x5F\x11\xED\x2C\x42\x88\xEF\xCA\x26\x1E\x08\x96\xCF\x0A\x8F\xCB\x88\x45\x50\xEF\x6A\x38\x07") +#undef INT + }; static const uint8_t input[] = "\x00\x01\x02\x03\x04\x05"; +static void +validate_mpis (const struct ncr_mpi *mpis, size_t num_mpis) +{ + size_t i; + + for (i = 0; i < num_mpis; i++) + assert (mpis[i].size == import_mpis[i].size); + for (i = 0; i < num_mpis; i++) + assert (memcmp (mpis[i].data, import_mpis[i].data, mpis[i].size) == 0); +} + int main (void) { - /* This works in C because "INT" is expanded only at the point where the other - macros are used. */ -#define PUBLIC_INTS_COMMAS INT (modulus), INT (public_exponent) -#define PUBLIC_INTS \ - INT (modulus); \ - INT (public_exponent); -#define ALL_INTS_COMMAS \ - INT (modulus), INT (public_exponent), INT (private_exponent), INT (prime_1), \ - INT (prime_2), INT (exponent_1), INT (exponent_2), INT (coefficient) -#define ALL_INTS \ - INT (modulus); \ - INT (public_exponent); \ - INT (private_exponent); \ - INT (prime_1); \ - INT (prime_2); \ - INT (exponent_1); \ - INT (exponent_2); \ - INT (coefficient); - struct ncr_public_key *public; struct ncr_private_key *private; - uint8_t dest[4096]; - size_t src_size, dest_size; -#define INT(X) uint8_t export_##X[256]; size_t export_##X##_size - ALL_INTS; -#undef INT + struct ncr_mpi dest_mpis[NCR_RSA_PRIVATE_NUM_MPIS]; + uint8_t dest[4096], mpi_dest[NCR_RSA_PRIVATE_NUM_MPIS][256]; + size_t src_size, dest_size, i; CK_RV res; + /* We took a few shortcuts... validate them now. Note that these are NOT + guaranteed by the API. */ + assert ((size_t)NCR_RSA_PUBLIC_NUM_MPIS <= (size_t)NCR_RSA_PRIVATE_NUM_MPIS); + assert ((size_t)NCR_RSA_PUBLIC_MPI_MODULUS + == (size_t)NCR_RSA_PRIVATE_MPI_MODULUS); + assert ((size_t)NCR_RSA_PUBLIC_MPI_PUBLIC_EXPONENT + == (size_t)NCR_RSA_PRIVATE_MPI_PUBLIC_EXPONENT); + + /* Test key loading. Should we test the generic version as well? */ -#define INT(X) X, sizeof (X) - res = ncr_public_key_create_rsa (&public, - PUBLIC_INTS_COMMAS); + res = ncr_public_key_create_rsa (&public, import_mpis); assert (res == CKR_OK); - res = ncr_private_key_create_rsa (&private, false, - ALL_INTS_COMMAS); + res = ncr_private_key_create_rsa (&private, false, import_mpis); assert (res == CKR_OK); -#undef INT /* Test encryption */ @@ -114,33 +118,23 @@ main (void) sizeof (input)); assert (res != CKR_OK); -#define INT(X) export_##X##_size = sizeof (export_##X); - PUBLIC_INTS; -#undef INT -#define INT(X) export_##X, &export_##X##_size - res = ncr_public_key_export_rsa (public, PUBLIC_INTS_COMMAS); -#undef INT + for (i = 0; i < NCR_RSA_PUBLIC_NUM_MPIS; i++) + { + dest_mpis[i].data = mpi_dest[i]; + dest_mpis[i].size = sizeof (mpi_dest[i]); + } + res = ncr_public_key_export_rsa (public, dest_mpis); assert (res == CKR_OK); -#define INT(X) assert (export_##X##_size == sizeof (X)) - PUBLIC_INTS; -#undef INT -#define INT(X) assert (memcmp (export_##X, (X), export_##X##_size) == 0); - PUBLIC_INTS; -#undef INT - -#define INT(X) export_##X##_size = sizeof (export_##X); - ALL_INTS; -#undef INT -#define INT(X) export_##X, &export_##X##_size - res = ncr_private_key_export_rsa (private, ALL_INTS_COMMAS); -#undef INT + validate_mpis (dest_mpis, NCR_RSA_PUBLIC_NUM_MPIS); + + for (i = 0; i < NCR_RSA_PRIVATE_NUM_MPIS; i++) + { + dest_mpis[i].data = mpi_dest[i]; + dest_mpis[i].size = sizeof (mpi_dest[i]); + } + res = ncr_private_key_export_rsa (private, dest_mpis); assert (res == CKR_OK); -#define INT(X) assert (export_##X##_size == sizeof (X)) - ALL_INTS; -#undef INT -#define INT(X) assert (memcmp (export_##X, (X), export_##X##_size) == 0); - ALL_INTS; -#undef INT + validate_mpis (dest_mpis, NCR_RSA_PRIVATE_NUM_MPIS); res = ncr_private_key_destroy (private); assert (res == CKR_OK); |
