summaryrefslogtreecommitdiff
path: root/test/testcrypto.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/testcrypto.c')
-rw-r--r--test/testcrypto.c496
1 files changed, 343 insertions, 153 deletions
diff --git a/test/testcrypto.c b/test/testcrypto.c
index cc81b733..335c3ae6 100644
--- a/test/testcrypto.c
+++ b/test/testcrypto.c
@@ -29,16 +29,17 @@
#define ALIGNED_STRING "123456789012345"
static const apr_crypto_driver_t *get_driver(abts_case *tc, apr_pool_t *pool,
- const char *name, const apr_array_header_t *params) {
+ const char *name, const char *params)
+{
const apr_crypto_driver_t *driver = NULL;
const apu_err_t *err = NULL;
apr_status_t rv;
- rv = apr_crypto_init(pool, params);
+ rv = apr_crypto_init(pool);
ABTS_ASSERT(tc, "failed to init apr_crypto", rv == APR_SUCCESS);
- rv = apr_crypto_get_driver(pool, name, &driver, params, &err);
+ rv = apr_crypto_get_driver(&driver, name, params, &err, pool);
if (APR_SUCCESS != rv && err) {
ABTS_NOT_IMPL(tc, err->msg);
return NULL;
@@ -58,29 +59,25 @@ static const apr_crypto_driver_t *get_driver(abts_case *tc, apr_pool_t *pool,
}
static const apr_crypto_driver_t *get_nss_driver(abts_case *tc,
- apr_pool_t *pool) {
-
- apr_array_header_t *params;
- apr_crypto_param_t *param;
+ apr_pool_t *pool)
+{
/* initialise NSS */
- params = apr_array_make(pool, 10, sizeof(apr_crypto_param_t));
- param = apr_array_push(params);
- param->type = APR_CRYPTO_CA_TYPE_DIR;
- param->path = "data";
- return get_driver(tc, pool, "nss", params);
+ return get_driver(tc, pool, "nss", "dir=data");
}
static const apr_crypto_driver_t *get_openssl_driver(abts_case *tc,
- apr_pool_t *pool) {
+ apr_pool_t *pool)
+{
return get_driver(tc, pool, "openssl", NULL);
}
-static apr_crypto_t *factory(abts_case *tc, apr_pool_t *pool,
- const apr_crypto_driver_t *driver) {
+static apr_crypto_t *make(abts_case *tc, apr_pool_t *pool,
+ const apr_crypto_driver_t *driver)
+{
apr_crypto_t *f = NULL;
@@ -88,9 +85,9 @@ static apr_crypto_t *factory(abts_case *tc, apr_pool_t *pool,
return NULL;
}
- /* get the factory */
- apr_crypto_factory(driver, pool, NULL, &f);
- ABTS_ASSERT(tc, "apr_crypto_factory returned NULL", f != NULL);
+ /* get the context */
+ apr_crypto_make(&f, driver, "engine=openssl", pool);
+ ABTS_ASSERT(tc, "apr_crypto_make returned NULL", f != NULL);
return f;
@@ -99,30 +96,38 @@ static apr_crypto_t *factory(abts_case *tc, apr_pool_t *pool,
static const apr_crypto_key_t *passphrase(abts_case *tc, apr_pool_t *pool,
const apr_crypto_driver_t *driver, const apr_crypto_t *f,
apr_crypto_block_key_type_e type, apr_crypto_block_key_mode_e mode,
- int doPad, const char *description) {
+ int doPad, const char *description)
+{
apr_crypto_key_t *key = NULL;
+ const apu_err_t *result = NULL;
const char *pass = "secret";
const char *salt = "salt";
apr_status_t rv;
- if (!driver || !f) {
+ if (!f) {
return NULL;
}
/* init the passphrase */
- rv = apr_crypto_passphrase(driver, pool, f, pass, strlen(pass),
- (unsigned char *) salt, strlen(salt), type, mode, doPad, 4096,
- &key, NULL);
+ rv = apr_crypto_passphrase(&key, NULL, pass, strlen(pass),
+ (unsigned char *) salt, strlen(salt), type, mode, doPad, 4096, f,
+ pool);
if (APR_ENOCIPHER == rv) {
- ABTS_NOT_IMPL(tc, apr_psprintf(pool, "skipped: %s %s passphrase return APR_ENOCIPHER: error %d: %s (%s)\n", description, apr_crypto_driver_name(driver), f->result->rc, f->result->reason ? f->result->reason : "", f->result->msg ? f->result->msg : ""));
+ apr_crypto_error(&result, f);
+ ABTS_NOT_IMPL(tc, apr_psprintf(pool,
+ "skipped: %s %s passphrase return APR_ENOCIPHER: error %d: %s (%s)\n",
+ description, apr_crypto_driver_name(driver), result->rc,
+ result->reason ? result->reason : "", result->msg ? result->msg : ""));
return NULL;
- } else {
+ }
+ else {
if (APR_SUCCESS != rv) {
+ apr_crypto_error(&result, f);
fprintf(stderr, "passphrase: %s %s native error %d: %s (%s)\n",
- description, apr_crypto_driver_name(driver), f->result->rc,
- f->result->reason ? f->result->reason : "",
- f->result->msg ? f->result->msg : "");
+ description, apr_crypto_driver_name(driver), result->rc,
+ result->reason ? result->reason : "",
+ result->msg ? result->msg : "");
}
ABTS_ASSERT(tc, "apr_crypto_passphrase returned APR_ENOKEY", rv != APR_ENOKEY);
ABTS_ASSERT(tc, "apr_crypto_passphrase returned APR_EPADDING", rv != APR_EPADDING);
@@ -142,9 +147,11 @@ static unsigned char *encrypt_block(abts_case *tc, apr_pool_t *pool,
const apr_crypto_key_t *key, const unsigned char *in,
const apr_size_t inlen, unsigned char **cipherText,
apr_size_t *cipherTextLen, const unsigned char **iv,
- apr_size_t *blockSize, const char *description) {
+ apr_size_t *blockSize, const char *description)
+{
apr_crypto_block_t *block = NULL;
+ const apu_err_t *result = NULL;
apr_size_t len = 0;
apr_status_t rv;
@@ -153,16 +160,17 @@ static unsigned char *encrypt_block(abts_case *tc, apr_pool_t *pool,
}
/* init the encryption */
- rv = apr_crypto_block_encrypt_init(driver, pool, f, key, iv, &block,
- blockSize);
+ rv = apr_crypto_block_encrypt_init(&block, iv, key, blockSize, pool);
if (APR_ENOTIMPL == rv) {
ABTS_NOT_IMPL(tc, "apr_crypto_block_encrypt_init returned APR_ENOTIMPL");
- } else {
+ }
+ else {
if (APR_SUCCESS != rv) {
+ apr_crypto_error(&result, f);
fprintf(stderr, "encrypt_init: %s %s native error %d: %s (%s)\n",
- description, apr_crypto_driver_name(driver), f->result->rc,
- f->result->reason ? f->result->reason : "",
- f->result->msg ? f->result->msg : "");
+ description, apr_crypto_driver_name(driver), result->rc,
+ result->reason ? result->reason : "",
+ result->msg ? result->msg : "");
}
ABTS_ASSERT(tc, "apr_crypto_block_encrypt_init returned APR_ENOKEY", rv != APR_ENOKEY);
ABTS_ASSERT(tc, "apr_crypto_block_encrypt_init returned APR_ENOIV", rv != APR_ENOIV);
@@ -176,13 +184,13 @@ static unsigned char *encrypt_block(abts_case *tc, apr_pool_t *pool,
}
/* encrypt the block */
- rv = apr_crypto_block_encrypt(driver, block, cipherText,
- cipherTextLen, in, inlen);
+ rv = apr_crypto_block_encrypt(cipherText, cipherTextLen, in, inlen, block);
if (APR_SUCCESS != rv) {
+ apr_crypto_error(&result, f);
fprintf(stderr, "encrypt: %s %s native error %d: %s (%s)\n",
- description, apr_crypto_driver_name(driver), f->result->rc,
- f->result->reason ? f->result->reason : "",
- f->result->msg ? f->result->msg : "");
+ description, apr_crypto_driver_name(driver), result->rc,
+ result->reason ? result->reason : "", result->msg ? result->msg
+ : "");
}
ABTS_ASSERT(tc, "apr_crypto_block_encrypt returned APR_ECRYPT", rv != APR_ECRYPT);
ABTS_ASSERT(tc, "failed to apr_crypto_block_encrypt", rv == APR_SUCCESS);
@@ -192,19 +200,20 @@ static unsigned char *encrypt_block(abts_case *tc, apr_pool_t *pool,
}
/* finalise the encryption */
- rv = apr_crypto_block_encrypt_finish(driver, block, *cipherText
- + *cipherTextLen, &len);
+ rv = apr_crypto_block_encrypt_finish(*cipherText + *cipherTextLen, &len,
+ block);
if (APR_SUCCESS != rv) {
+ apr_crypto_error(&result, f);
fprintf(stderr, "encrypt_finish: %s %s native error %d: %s (%s)\n",
- description, apr_crypto_driver_name(driver), f->result->rc,
- f->result->reason ? f->result->reason : "",
- f->result->msg ? f->result->msg : "");
+ description, apr_crypto_driver_name(driver), result->rc,
+ result->reason ? result->reason : "", result->msg ? result->msg
+ : "");
}
ABTS_ASSERT(tc, "apr_crypto_block_encrypt_finish returned APR_ECRYPT", rv != APR_ECRYPT);
ABTS_ASSERT(tc, "apr_crypto_block_encrypt_finish returned APR_EPADDING", rv != APR_EPADDING);
ABTS_ASSERT(tc, "failed to apr_crypto_block_encrypt_finish", rv == APR_SUCCESS);
*cipherTextLen += len;
- apr_crypto_block_cleanup(driver, block);
+ apr_crypto_block_cleanup(block);
if (rv) {
return NULL;
}
@@ -218,9 +227,11 @@ static unsigned char *decrypt_block(abts_case *tc, apr_pool_t *pool,
const apr_crypto_key_t *key, unsigned char *cipherText,
apr_size_t cipherTextLen, unsigned char **plainText,
apr_size_t *plainTextLen, const unsigned char *iv,
- apr_size_t *blockSize, const char *description) {
+ apr_size_t *blockSize, const char *description)
+{
apr_crypto_block_t *block = NULL;
+ const apu_err_t *result = NULL;
apr_size_t len = 0;
apr_status_t rv;
@@ -229,16 +240,17 @@ static unsigned char *decrypt_block(abts_case *tc, apr_pool_t *pool,
}
/* init the decryption */
- rv = apr_crypto_block_decrypt_init(driver, pool, f, key, iv, &block,
- blockSize);
+ rv = apr_crypto_block_decrypt_init(&block, blockSize, iv, key, pool);
if (APR_ENOTIMPL == rv) {
ABTS_NOT_IMPL(tc, "apr_crypto_block_decrypt_init returned APR_ENOTIMPL");
- } else {
+ }
+ else {
if (APR_SUCCESS != rv) {
+ apr_crypto_error(&result, f);
fprintf(stderr, "decrypt_init: %s %s native error %d: %s (%s)\n",
- description, apr_crypto_driver_name(driver), f->result->rc,
- f->result->reason ? f->result->reason : "",
- f->result->msg ? f->result->msg : "");
+ description, apr_crypto_driver_name(driver), result->rc,
+ result->reason ? result->reason : "",
+ result->msg ? result->msg : "");
}
ABTS_ASSERT(tc, "apr_crypto_block_decrypt_init returned APR_ENOKEY", rv != APR_ENOKEY);
ABTS_ASSERT(tc, "apr_crypto_block_decrypt_init returned APR_ENOIV", rv != APR_ENOIV);
@@ -252,13 +264,14 @@ static unsigned char *decrypt_block(abts_case *tc, apr_pool_t *pool,
}
/* decrypt the block */
- rv = apr_crypto_block_decrypt(driver, block, plainText, plainTextLen,
- cipherText, cipherTextLen);
+ rv = apr_crypto_block_decrypt(plainText, plainTextLen, cipherText,
+ cipherTextLen, block);
if (APR_SUCCESS != rv) {
+ apr_crypto_error(&result, f);
fprintf(stderr, "decrypt: %s %s native error %d: %s (%s)\n",
- description, apr_crypto_driver_name(driver), f->result->rc,
- f->result->reason ? f->result->reason : "",
- f->result->msg ? f->result->msg : "");
+ description, apr_crypto_driver_name(driver), result->rc,
+ result->reason ? result->reason : "", result->msg ? result->msg
+ : "");
}
ABTS_ASSERT(tc, "apr_crypto_block_decrypt returned APR_ECRYPT", rv != APR_ECRYPT);
ABTS_ASSERT(tc, "failed to apr_crypto_block_decrypt", rv == APR_SUCCESS);
@@ -268,13 +281,14 @@ static unsigned char *decrypt_block(abts_case *tc, apr_pool_t *pool,
}
/* finalise the decryption */
- rv = apr_crypto_block_decrypt_finish(driver, block, *plainText
- + *plainTextLen, &len);
+ rv = apr_crypto_block_decrypt_finish(*plainText + *plainTextLen, &len,
+ block);
if (APR_SUCCESS != rv) {
+ apr_crypto_error(&result, f);
fprintf(stderr, "decrypt_finish: %s %s native error %d: %s (%s)\n",
- description, apr_crypto_driver_name(driver), f->result->rc,
- f->result->reason ? f->result->reason : "",
- f->result->msg ? f->result->msg : "");
+ description, apr_crypto_driver_name(driver), result->rc,
+ result->reason ? result->reason : "", result->msg ? result->msg
+ : "");
}
ABTS_ASSERT(tc, "apr_crypto_block_decrypt_finish returned APR_ECRYPT", rv != APR_ECRYPT);
ABTS_ASSERT(tc, "apr_crypto_block_decrypt_finish returned APR_EPADDING", rv != APR_EPADDING);
@@ -284,7 +298,7 @@ static unsigned char *decrypt_block(abts_case *tc, apr_pool_t *pool,
}
*plainTextLen += len;
- apr_crypto_block_cleanup(driver, block);
+ apr_crypto_block_cleanup(block);
return *plainText;
@@ -302,7 +316,8 @@ static void crypto_block_cross(abts_case *tc, apr_pool_t *pool,
const apr_crypto_driver_t **drivers,
const apr_crypto_block_key_type_e type,
const apr_crypto_block_key_mode_e mode, int doPad,
- const unsigned char *in, apr_size_t inlen, const char *description) {
+ const unsigned char *in, apr_size_t inlen, const char *description)
+{
const apr_crypto_driver_t *driver1 = drivers[0];
const apr_crypto_driver_t *driver2 = drivers[1];
apr_crypto_t *f1 = NULL;
@@ -317,8 +332,8 @@ static void crypto_block_cross(abts_case *tc, apr_pool_t *pool,
const unsigned char *iv = NULL;
apr_size_t blockSize = 0;
- f1 = factory(tc, pool, driver1);
- f2 = factory(tc, pool, driver2);
+ f1 = make(tc, pool, driver1);
+ f2 = make(tc, pool, driver2);
key1 = passphrase(tc, pool, driver1, f1, type, mode, doPad, description);
key2 = passphrase(tc, pool, driver2, f2, type, mode, doPad, description);
@@ -342,13 +357,14 @@ static void crypto_block_cross(abts_case *tc, apr_pool_t *pool,
/**
* Test initialisation.
*/
-static void test_crypto_init(abts_case *tc, void *data) {
+static void test_crypto_init(abts_case *tc, void *data)
+{
apr_pool_t *pool = NULL;
apr_status_t rv;
apr_pool_create(&pool, NULL);
- rv = apr_crypto_init(pool, NULL);
+ rv = apr_crypto_init(pool);
ABTS_ASSERT(tc, "failed to init apr_crypto", rv == APR_SUCCESS);
apr_pool_destroy(pool);
@@ -358,7 +374,8 @@ static void test_crypto_init(abts_case *tc, void *data) {
/**
* Simple test of OpenSSL block crypt.
*/
-static void test_crypto_block_openssl(abts_case *tc, void *data) {
+static void test_crypto_block_openssl(abts_case *tc, void *data)
+{
apr_pool_t *pool = NULL;
const apr_crypto_driver_t *drivers[] = { NULL, NULL };
@@ -368,22 +385,22 @@ static void test_crypto_block_openssl(abts_case *tc, void *data) {
apr_pool_create(&pool, NULL);
drivers[0] = get_openssl_driver(tc, pool);
drivers[1] = get_openssl_driver(tc, pool);
- crypto_block_cross(tc, pool, drivers, KEY_3DES_192, MODE_CBC, 0, in, inlen,
- "KEY_3DES_192/MODE_CBC");
- crypto_block_cross(tc, pool, drivers, KEY_3DES_192, MODE_ECB, 0, in, inlen,
- "KEY_3DES_192/MODE_ECB");
- crypto_block_cross(tc, pool, drivers, KEY_AES_256, MODE_CBC, 0, in, inlen,
- "KEY_AES_256/MODE_CBC");
- crypto_block_cross(tc, pool, drivers, KEY_AES_256, MODE_ECB, 0, in, inlen,
- "KEY_AES_256/MODE_ECB");
- crypto_block_cross(tc, pool, drivers, KEY_AES_192, MODE_CBC, 0, in, inlen,
- "KEY_AES_192/MODE_CBC");
- crypto_block_cross(tc, pool, drivers, KEY_AES_192, MODE_ECB, 0, in, inlen,
- "KEY_AES_192/MODE_ECB");
- crypto_block_cross(tc, pool, drivers, KEY_AES_128, MODE_CBC, 0, in, inlen,
- "KEY_AES_128/MODE_CBC");
- crypto_block_cross(tc, pool, drivers, KEY_AES_128, MODE_ECB, 0, in, inlen,
- "KEY_AES_128/MODE_ECB");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_3DES_192, APR_MODE_CBC, 0,
+ in, inlen, "KEY_3DES_192/MODE_CBC");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_3DES_192, APR_MODE_ECB, 0,
+ in, inlen, "KEY_3DES_192/MODE_ECB");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_AES_256, APR_MODE_CBC, 0, in,
+ inlen, "KEY_AES_256/MODE_CBC");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_AES_256, APR_MODE_ECB, 0, in,
+ inlen, "KEY_AES_256/MODE_ECB");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_AES_192, APR_MODE_CBC, 0, in,
+ inlen, "KEY_AES_192/MODE_CBC");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_AES_192, APR_MODE_ECB, 0, in,
+ inlen, "KEY_AES_192/MODE_ECB");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_AES_128, APR_MODE_CBC, 0, in,
+ inlen, "KEY_AES_128/MODE_CBC");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_AES_128, APR_MODE_ECB, 0, in,
+ inlen, "KEY_AES_128/MODE_ECB");
apr_pool_destroy(pool);
}
@@ -391,7 +408,8 @@ static void test_crypto_block_openssl(abts_case *tc, void *data) {
/**
* Simple test of NSS block crypt.
*/
-static void test_crypto_block_nss(abts_case *tc, void *data) {
+static void test_crypto_block_nss(abts_case *tc, void *data)
+{
apr_pool_t *pool = NULL;
const apr_crypto_driver_t *drivers[] = { NULL, NULL };
@@ -401,22 +419,22 @@ static void test_crypto_block_nss(abts_case *tc, void *data) {
apr_pool_create(&pool, NULL);
drivers[0] = get_nss_driver(tc, pool);
drivers[1] = get_nss_driver(tc, pool);
- crypto_block_cross(tc, pool, drivers, KEY_3DES_192, MODE_CBC, 0, in, inlen,
- "KEY_3DES_192/MODE_CBC");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_3DES_192, APR_MODE_CBC, 0,
+ in, inlen, "KEY_3DES_192/MODE_CBC");
/* KEY_3DES_192 / MODE_ECB doesn't work on NSS */
/* crypto_block_cross(tc, pool, drivers, KEY_3DES_192, MODE_ECB, 0, in, inlen, "KEY_3DES_192/MODE_ECB"); */
- crypto_block_cross(tc, pool, drivers, KEY_AES_256, MODE_CBC, 0, in, inlen,
- "KEY_AES_256/MODE_CBC");
- crypto_block_cross(tc, pool, drivers, KEY_AES_256, MODE_ECB, 0, in, inlen,
- "KEY_AES_256/MODE_ECB");
- crypto_block_cross(tc, pool, drivers, KEY_AES_192, MODE_CBC, 0, in, inlen,
- "KEY_AES_192/MODE_CBC");
- crypto_block_cross(tc, pool, drivers, KEY_AES_192, MODE_ECB, 0, in, inlen,
- "KEY_AES_192/MODE_ECB");
- crypto_block_cross(tc, pool, drivers, KEY_AES_128, MODE_CBC, 0, in, inlen,
- "KEY_AES_128/MODE_CBC");
- crypto_block_cross(tc, pool, drivers, KEY_AES_128, MODE_ECB, 0, in, inlen,
- "KEY_AES_128/MODE_ECB");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_AES_256, APR_MODE_CBC, 0, in,
+ inlen, "KEY_AES_256/MODE_CBC");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_AES_256, APR_MODE_ECB, 0, in,
+ inlen, "KEY_AES_256/MODE_ECB");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_AES_192, APR_MODE_CBC, 0, in,
+ inlen, "KEY_AES_192/MODE_CBC");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_AES_192, APR_MODE_ECB, 0, in,
+ inlen, "KEY_AES_192/MODE_ECB");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_AES_128, APR_MODE_CBC, 0, in,
+ inlen, "KEY_AES_128/MODE_CBC");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_AES_128, APR_MODE_ECB, 0, in,
+ inlen, "KEY_AES_128/MODE_ECB");
apr_pool_destroy(pool);
}
@@ -424,7 +442,8 @@ static void test_crypto_block_nss(abts_case *tc, void *data) {
/**
* Encrypt NSS, decrypt OpenSSL.
*/
-static void test_crypto_block_nss_openssl(abts_case *tc, void *data) {
+static void test_crypto_block_nss_openssl(abts_case *tc, void *data)
+{
apr_pool_t *pool = NULL;
const apr_crypto_driver_t *drivers[] = { NULL, NULL };
@@ -435,15 +454,15 @@ static void test_crypto_block_nss_openssl(abts_case *tc, void *data) {
drivers[0] = get_nss_driver(tc, pool);
drivers[1] = get_openssl_driver(tc, pool);
- crypto_block_cross(tc, pool, drivers, KEY_3DES_192, MODE_CBC, 0, in, inlen,
- "KEY_3DES_192/MODE_CBC");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_3DES_192, APR_MODE_CBC, 0,
+ in, inlen, "KEY_3DES_192/MODE_CBC");
/* KEY_3DES_192 / MODE_ECB doesn't work on NSS */
/* crypto_block_cross(tc, pool, drivers, KEY_3DES_192, MODE_ECB, 0, in, inlen, "KEY_3DES_192/MODE_ECB"); */
- crypto_block_cross(tc, pool, drivers, KEY_AES_256, MODE_CBC, 0, in, inlen,
- "KEY_AES_256/MODE_CBC");
- crypto_block_cross(tc, pool, drivers, KEY_AES_256, MODE_ECB, 0, in, inlen,
- "KEY_AES_256/MODE_ECB");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_AES_256, APR_MODE_CBC, 0, in,
+ inlen, "KEY_AES_256/MODE_CBC");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_AES_256, APR_MODE_ECB, 0, in,
+ inlen, "KEY_AES_256/MODE_ECB");
/* all 4 of these tests fail to interoperate - a clue from the xml-security code is that
* NSS cannot distinguish between the 128 and 192 bit versions of AES. Will need to be
@@ -462,7 +481,8 @@ static void test_crypto_block_nss_openssl(abts_case *tc, void *data) {
/**
* Encrypt OpenSSL, decrypt NSS.
*/
-static void test_crypto_block_openssl_nss(abts_case *tc, void *data) {
+static void test_crypto_block_openssl_nss(abts_case *tc, void *data)
+{
apr_pool_t *pool = NULL;
const apr_crypto_driver_t *drivers[] = { NULL, NULL };
@@ -472,16 +492,16 @@ static void test_crypto_block_openssl_nss(abts_case *tc, void *data) {
apr_pool_create(&pool, NULL);
drivers[0] = get_openssl_driver(tc, pool);
drivers[1] = get_nss_driver(tc, pool);
- crypto_block_cross(tc, pool, drivers, KEY_3DES_192, MODE_CBC, 0, in, inlen,
- "KEY_3DES_192/MODE_CBC");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_3DES_192, APR_MODE_CBC, 0,
+ in, inlen, "KEY_3DES_192/MODE_CBC");
/* KEY_3DES_192 / MODE_ECB doesn't work on NSS */
/* crypto_block_cross(tc, pool, drivers, KEY_3DES_192, MODE_ECB, 0, in, inlen, "KEY_3DES_192/MODE_ECB"); */
- crypto_block_cross(tc, pool, drivers, KEY_AES_256, MODE_CBC, 0, in, inlen,
- "KEY_AES_256/MODE_CBC");
- crypto_block_cross(tc, pool, drivers, KEY_AES_256, MODE_ECB, 0, in, inlen,
- "KEY_AES_256/MODE_ECB");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_AES_256, APR_MODE_CBC, 0, in,
+ inlen, "KEY_AES_256/MODE_CBC");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_AES_256, APR_MODE_ECB, 0, in,
+ inlen, "KEY_AES_256/MODE_ECB");
/* all 4 of these tests fail to interoperate - a clue from the xml-security code is that
* NSS cannot distinguish between the 128 and 192 bit versions of AES. Will need to be
@@ -500,7 +520,8 @@ static void test_crypto_block_openssl_nss(abts_case *tc, void *data) {
/**
* Simple test of OpenSSL block crypt.
*/
-static void test_crypto_block_openssl_pad(abts_case *tc, void *data) {
+static void test_crypto_block_openssl_pad(abts_case *tc, void *data)
+{
apr_pool_t *pool = NULL;
const apr_crypto_driver_t *drivers[] = { NULL, NULL };
@@ -511,22 +532,22 @@ static void test_crypto_block_openssl_pad(abts_case *tc, void *data) {
drivers[0] = get_openssl_driver(tc, pool);
drivers[1] = get_openssl_driver(tc, pool);
- crypto_block_cross(tc, pool, drivers, KEY_3DES_192, MODE_CBC, 1, in, inlen,
- "KEY_3DES_192/MODE_CBC");
- crypto_block_cross(tc, pool, drivers, KEY_3DES_192, MODE_ECB, 1, in, inlen,
- "KEY_3DES_192/MODE_ECB");
- crypto_block_cross(tc, pool, drivers, KEY_AES_256, MODE_CBC, 1, in, inlen,
- "KEY_AES_256/MODE_CBC");
- crypto_block_cross(tc, pool, drivers, KEY_AES_256, MODE_ECB, 1, in, inlen,
- "KEY_AES_256/MODE_ECB");
- crypto_block_cross(tc, pool, drivers, KEY_AES_192, MODE_CBC, 1, in, inlen,
- "KEY_AES_192/MODE_CBC");
- crypto_block_cross(tc, pool, drivers, KEY_AES_192, MODE_ECB, 1, in, inlen,
- "KEY_AES_192/MODE_ECB");
- crypto_block_cross(tc, pool, drivers, KEY_AES_128, MODE_CBC, 1, in, inlen,
- "KEY_AES_128/MODE_CBC");
- crypto_block_cross(tc, pool, drivers, KEY_AES_128, MODE_ECB, 1, in, inlen,
- "KEY_AES_128/MODE_ECB");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_3DES_192, APR_MODE_CBC, 1,
+ in, inlen, "KEY_3DES_192/MODE_CBC");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_3DES_192, APR_MODE_ECB, 1,
+ in, inlen, "KEY_3DES_192/MODE_ECB");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_AES_256, APR_MODE_CBC, 1, in,
+ inlen, "KEY_AES_256/MODE_CBC");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_AES_256, APR_MODE_ECB, 1, in,
+ inlen, "KEY_AES_256/MODE_ECB");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_AES_192, APR_MODE_CBC, 1, in,
+ inlen, "KEY_AES_192/MODE_CBC");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_AES_192, APR_MODE_ECB, 1, in,
+ inlen, "KEY_AES_192/MODE_ECB");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_AES_128, APR_MODE_CBC, 1, in,
+ inlen, "KEY_AES_128/MODE_CBC");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_AES_128, APR_MODE_ECB, 1, in,
+ inlen, "KEY_AES_128/MODE_ECB");
apr_pool_destroy(pool);
@@ -535,9 +556,11 @@ static void test_crypto_block_openssl_pad(abts_case *tc, void *data) {
/**
* Simple test of NSS block crypt.
*/
-static void test_crypto_block_nss_pad(abts_case *tc, void *data) {
+static void test_crypto_block_nss_pad(abts_case *tc, void *data)
+{
apr_pool_t *pool = NULL;
- const apr_crypto_driver_t *drivers[] = { NULL, NULL };
+ const apr_crypto_driver_t *drivers[] =
+ { NULL, NULL };
const unsigned char *in = (const unsigned char *) TEST_STRING;
apr_size_t inlen = sizeof(TEST_STRING);
@@ -546,25 +569,25 @@ static void test_crypto_block_nss_pad(abts_case *tc, void *data) {
drivers[0] = get_nss_driver(tc, pool);
drivers[1] = get_nss_driver(tc, pool);
- crypto_block_cross(tc, pool, drivers, KEY_3DES_192, MODE_CBC, 1, in, inlen,
- "KEY_3DES_192/MODE_CBC");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_3DES_192, APR_MODE_CBC, 1,
+ in, inlen, "KEY_3DES_192/MODE_CBC");
/* KEY_3DES_192 / MODE_ECB doesn't work on NSS */
/* crypto_block_cross(tc, pool, drivers, KEY_3DES_192, MODE_ECB, 1, in, inlen, "KEY_3DES_192/MODE_ECB"); */
- crypto_block_cross(tc, pool, drivers, KEY_AES_256, MODE_CBC, 1, in, inlen,
- "KEY_AES_256/MODE_CBC");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_AES_256, APR_MODE_CBC, 1, in,
+ inlen, "KEY_AES_256/MODE_CBC");
/* KEY_AES_256 / MODE_ECB doesn't support padding on NSS */
/*crypto_block_cross(tc, pool, drivers, KEY_AES_256, MODE_ECB, 1, in, inlen, "KEY_AES_256/MODE_ECB");*/
- crypto_block_cross(tc, pool, drivers, KEY_AES_192, MODE_CBC, 1, in, inlen,
- "KEY_AES_192/MODE_CBC");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_AES_192, APR_MODE_CBC, 1, in,
+ inlen, "KEY_AES_192/MODE_CBC");
/* KEY_AES_256 / MODE_ECB doesn't support padding on NSS */
/*crypto_block_cross(tc, pool, drivers, KEY_AES_192, MODE_ECB, 1, in, inlen, "KEY_AES_192/MODE_ECB");*/
- crypto_block_cross(tc, pool, drivers, KEY_AES_128, MODE_CBC, 1, in, inlen,
- "KEY_AES_128/MODE_CBC");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_AES_128, APR_MODE_CBC, 1, in,
+ inlen, "KEY_AES_128/MODE_CBC");
/* KEY_AES_256 / MODE_ECB doesn't support padding on NSS */
/*crypto_block_cross(tc, pool, drivers, KEY_AES_128, MODE_ECB, 1, in, inlen, "KEY_AES_128/MODE_ECB");*/
@@ -576,7 +599,8 @@ static void test_crypto_block_nss_pad(abts_case *tc, void *data) {
/**
* Encrypt NSS, decrypt OpenSSL.
*/
-static void test_crypto_block_nss_openssl_pad(abts_case *tc, void *data) {
+static void test_crypto_block_nss_openssl_pad(abts_case *tc, void *data)
+{
apr_pool_t *pool = NULL;
const apr_crypto_driver_t *drivers[] = { NULL, NULL };
@@ -587,14 +611,14 @@ static void test_crypto_block_nss_openssl_pad(abts_case *tc, void *data) {
drivers[0] = get_nss_driver(tc, pool);
drivers[1] = get_openssl_driver(tc, pool);
- crypto_block_cross(tc, pool, drivers, KEY_3DES_192, MODE_CBC, 1, in, inlen,
- "KEY_3DES_192/MODE_CBC");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_3DES_192, APR_MODE_CBC, 1,
+ in, inlen, "KEY_3DES_192/MODE_CBC");
/* KEY_3DES_192 / MODE_ECB doesn't work on NSS */
/* crypto_block_cross(tc, pool, drivers, KEY_3DES_192, MODE_ECB, 1, in, inlen, "KEY_3DES_192/MODE_ECB"); */
- crypto_block_cross(tc, pool, drivers, KEY_AES_256, MODE_CBC, 1, in, inlen,
- "KEY_AES_256/MODE_CBC");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_AES_256, APR_MODE_CBC, 1, in,
+ inlen, "KEY_AES_256/MODE_CBC");
/* KEY_AES_256 / MODE_ECB doesn't support padding on NSS */
/*crypto_block_cross(tc, pool, drivers, KEY_AES_256, MODE_ECB, 1, in, inlen, "KEY_AES_256/MODE_ECB");*/
@@ -616,7 +640,8 @@ static void test_crypto_block_nss_openssl_pad(abts_case *tc, void *data) {
/**
* Encrypt OpenSSL, decrypt NSS.
*/
-static void test_crypto_block_openssl_nss_pad(abts_case *tc, void *data) {
+static void test_crypto_block_openssl_nss_pad(abts_case *tc, void *data)
+{
apr_pool_t *pool = NULL;
const apr_crypto_driver_t *drivers[] = { NULL, NULL };
@@ -626,14 +651,14 @@ static void test_crypto_block_openssl_nss_pad(abts_case *tc, void *data) {
apr_pool_create(&pool, NULL);
drivers[0] = get_openssl_driver(tc, pool);
drivers[1] = get_nss_driver(tc, pool);
- crypto_block_cross(tc, pool, drivers, KEY_3DES_192, MODE_CBC, 1, in, inlen,
- "KEY_3DES_192/MODE_CBC");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_3DES_192, APR_MODE_CBC, 1,
+ in, inlen, "KEY_3DES_192/MODE_CBC");
/* KEY_3DES_192 / MODE_ECB doesn't work on NSS */
/* crypto_block_cross(tc, pool, drivers, KEY_3DES_192, MODE_ECB, 1, in, inlen, "KEY_3DES_192/MODE_ECB"); */
- crypto_block_cross(tc, pool, drivers, KEY_AES_256, MODE_CBC, 1, in, inlen,
- "KEY_AES_256/MODE_CBC");
+ crypto_block_cross(tc, pool, drivers, APR_KEY_AES_256, APR_MODE_CBC, 1, in,
+ inlen, "KEY_AES_256/MODE_CBC");
/* KEY_AES_256 / MODE_ECB doesn't support padding on NSS */
/*crypto_block_cross(tc, pool, drivers, KEY_AES_256, MODE_ECB, 1, in, inlen, "KEY_AES_256/MODE_ECB");*/
@@ -652,7 +677,160 @@ static void test_crypto_block_openssl_nss_pad(abts_case *tc, void *data) {
}
-abts_suite *testcrypto(abts_suite *suite) {
+/**
+ * Get Types, OpenSSL.
+ */
+static void test_crypto_get_block_key_types_openssl(abts_case *tc, void *data)
+{
+ apr_pool_t *pool = NULL;
+ const apr_crypto_driver_t *driver;
+ apr_crypto_t *f;
+ apr_hash_t *types;
+ int *key_3des_192;
+ int *key_aes_128;
+ int *key_aes_192;
+ int *key_aes_256;
+
+ apr_pool_create(&pool, NULL);
+ driver = get_openssl_driver(tc, pool);
+ if (driver) {
+
+ f = make(tc, pool, driver);
+ apr_crypto_get_block_key_types(&types, f);
+
+ key_3des_192 = apr_hash_get(types, "3des192", APR_HASH_KEY_STRING);
+ ABTS_PTR_NOTNULL(tc, key_3des_192);
+ ABTS_INT_EQUAL(tc, *key_3des_192, APR_KEY_3DES_192);
+
+ key_aes_128 = apr_hash_get(types, "aes128", APR_HASH_KEY_STRING);
+ ABTS_PTR_NOTNULL(tc, key_aes_128);
+ ABTS_INT_EQUAL(tc, *key_aes_128, APR_KEY_AES_128);
+
+ key_aes_192 = apr_hash_get(types, "aes192", APR_HASH_KEY_STRING);
+ ABTS_PTR_NOTNULL(tc, key_aes_192);
+ ABTS_INT_EQUAL(tc, *key_aes_192, APR_KEY_AES_192);
+
+ key_aes_256 = apr_hash_get(types, "aes256", APR_HASH_KEY_STRING);
+ ABTS_PTR_NOTNULL(tc, key_aes_256);
+ ABTS_INT_EQUAL(tc, *key_aes_256, APR_KEY_AES_256);
+
+ }
+
+ apr_pool_destroy(pool);
+
+}
+
+/**
+ * Get Types, NSS.
+ */
+static void test_crypto_get_block_key_types_nss(abts_case *tc, void *data)
+{
+ apr_pool_t *pool = NULL;
+ const apr_crypto_driver_t *driver;
+ apr_crypto_t *f;
+ apr_hash_t *types;
+ int *key_3des_192;
+ int *key_aes_128;
+ int *key_aes_192;
+ int *key_aes_256;
+
+ apr_pool_create(&pool, NULL);
+ driver = get_nss_driver(tc, pool);
+ if (driver) {
+
+ f = make(tc, pool, driver);
+ apr_crypto_get_block_key_types(&types, f);
+
+ key_3des_192 = apr_hash_get(types, "3des192", APR_HASH_KEY_STRING);
+ ABTS_PTR_NOTNULL(tc, key_3des_192);
+ ABTS_INT_EQUAL(tc, *key_3des_192, APR_KEY_3DES_192);
+
+ key_aes_128 = apr_hash_get(types, "aes128", APR_HASH_KEY_STRING);
+ ABTS_PTR_NOTNULL(tc, key_aes_128);
+ ABTS_INT_EQUAL(tc, *key_aes_128, APR_KEY_AES_128);
+
+ key_aes_192 = apr_hash_get(types, "aes192", APR_HASH_KEY_STRING);
+ ABTS_PTR_NOTNULL(tc, key_aes_192);
+ ABTS_INT_EQUAL(tc, *key_aes_192, APR_KEY_AES_192);
+
+ key_aes_256 = apr_hash_get(types, "aes256", APR_HASH_KEY_STRING);
+ ABTS_PTR_NOTNULL(tc, key_aes_256);
+ ABTS_INT_EQUAL(tc, *key_aes_256, APR_KEY_AES_256);
+
+ }
+
+ apr_pool_destroy(pool);
+
+}
+
+/**
+ * Get Modes, OpenSSL.
+ */
+static void test_crypto_get_block_key_modes_openssl(abts_case *tc, void *data)
+{
+ apr_pool_t *pool = NULL;
+ const apr_crypto_driver_t *driver;
+ apr_crypto_t *f;
+ apr_hash_t *modes;
+ int *mode_ecb;
+ int *mode_cbc;
+
+ apr_pool_create(&pool, NULL);
+ driver = get_openssl_driver(tc, pool);
+ if (driver) {
+
+ f = make(tc, pool, driver);
+ apr_crypto_get_block_key_modes(&modes, f);
+
+ mode_ecb = apr_hash_get(modes, "ecb", APR_HASH_KEY_STRING);
+ ABTS_PTR_NOTNULL(tc, mode_ecb);
+ ABTS_INT_EQUAL(tc, *mode_ecb, APR_MODE_ECB);
+
+ mode_cbc = apr_hash_get(modes, "cbc", APR_HASH_KEY_STRING);
+ ABTS_PTR_NOTNULL(tc, mode_cbc);
+ ABTS_INT_EQUAL(tc, *mode_cbc, APR_MODE_CBC);
+
+ }
+
+ apr_pool_destroy(pool);
+
+}
+
+/**
+ * Get Modes, NSS.
+ */
+static void test_crypto_get_block_key_modes_nss(abts_case *tc, void *data)
+{
+ apr_pool_t *pool = NULL;
+ const apr_crypto_driver_t *driver;
+ apr_crypto_t *f;
+ apr_hash_t *modes;
+ int *mode_ecb;
+ int *mode_cbc;
+
+ apr_pool_create(&pool, NULL);
+ driver = get_nss_driver(tc, pool);
+ if (driver) {
+
+ f = make(tc, pool, driver);
+ apr_crypto_get_block_key_modes(&modes, f);
+
+ mode_ecb = apr_hash_get(modes, "ecb", APR_HASH_KEY_STRING);
+ ABTS_PTR_NOTNULL(tc, mode_ecb);
+ ABTS_INT_EQUAL(tc, *mode_ecb, APR_MODE_ECB);
+
+ mode_cbc = apr_hash_get(modes, "cbc", APR_HASH_KEY_STRING);
+ ABTS_PTR_NOTNULL(tc, mode_cbc);
+ ABTS_INT_EQUAL(tc, *mode_cbc, APR_MODE_CBC);
+
+ }
+
+ apr_pool_destroy(pool);
+
+}
+
+abts_suite *testcrypto(abts_suite *suite)
+{
suite = ADD_SUITE(suite);
/* test simple init and shutdown */
@@ -682,6 +860,18 @@ abts_suite *testcrypto(abts_suite *suite) {
/* test padded encrypt openssl / decrypt nss */
abts_run_test(suite, test_crypto_block_openssl_nss_pad, NULL);
+ /* test block key types openssl */
+ abts_run_test(suite, test_crypto_get_block_key_types_openssl, NULL);
+
+ /* test block key types nss */
+ abts_run_test(suite, test_crypto_get_block_key_types_nss, NULL);
+
+ /* test block key modes openssl */
+ abts_run_test(suite, test_crypto_get_block_key_modes_openssl, NULL);
+
+ /* test block key modes nss */
+ abts_run_test(suite, test_crypto_get_block_key_modes_nss, NULL);
+
return suite;
}