summaryrefslogtreecommitdiffstats
path: root/crypto/evp/evp_test.c
diff options
context:
space:
mode:
authorMatt Caswell <matt@openssl.org>2014-12-06 20:55:36 +0000
committerMatt Caswell <matt@openssl.org>2014-12-08 10:28:47 +0000
commitd827c5edb54263f81cc46899080e2ad7b70ca9f5 (patch)
tree0411dee88f9e31abd685ec47c1a9ddcf91a3eddd /crypto/evp/evp_test.c
parente6b336efa31c9916bd64504a478d56532f86d6aa (diff)
Add tests for OCB mode
Reviewed-by: Tim Hudson <tjh@openssl.org>
Diffstat (limited to 'crypto/evp/evp_test.c')
-rw-r--r--crypto/evp/evp_test.c35
1 files changed, 24 insertions, 11 deletions
diff --git a/crypto/evp/evp_test.c b/crypto/evp/evp_test.c
index 63d7095394..a12f912470 100644
--- a/crypto/evp/evp_test.c
+++ b/crypto/evp/evp_test.c
@@ -178,7 +178,7 @@ static void test1(const EVP_CIPHER *c,const unsigned char *key,int kn,
EVP_CIPHER_CTX_set_flags(ctx,EVP_CIPHER_CTX_FLAG_WRAP_ALLOW);
if (encdec != 0)
{
- if (mode == EVP_CIPH_GCM_MODE)
+ if ((mode == EVP_CIPH_GCM_MODE) || (mode == EVP_CIPH_OCB_MODE))
{
if(!EVP_EncryptInit_ex(ctx,c,NULL,NULL,NULL))
{
@@ -186,12 +186,19 @@ static void test1(const EVP_CIPHER *c,const unsigned char *key,int kn,
ERR_print_errors_fp(stderr);
test1_exit(10);
}
- if(!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_IVLEN, in, NULL))
+ if(!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_SET_IVLEN, in, NULL))
{
fprintf(stderr,"IV length set failed\n");
ERR_print_errors_fp(stderr);
test1_exit(11);
}
+ if((mode == EVP_CIPH_OCB_MODE) &&
+ !EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_OCB_SET_TAGLEN, tn, NULL))
+ {
+ fprintf(stderr,"Tag length set failed\n");
+ ERR_print_errors_fp(stderr);
+ test1_exit(15);
+ }
if(!EVP_EncryptInit_ex(ctx,NULL,NULL,key,iv))
{
fprintf(stderr,"Key/IV set failed\n");
@@ -290,13 +297,12 @@ static void test1(const EVP_CIPHER *c,const unsigned char *key,int kn,
hexdump(stderr,"Expected",ciphertext,cn);
test1_exit(9);
}
- if (mode == EVP_CIPH_GCM_MODE || mode == EVP_CIPH_CCM_MODE)
+ if ((mode == EVP_CIPH_GCM_MODE) || (mode == EVP_CIPH_OCB_MODE)
+ || (mode == EVP_CIPH_CCM_MODE))
{
unsigned char rtag[16];
- /* Note: EVP_CTRL_CCM_GET_TAG has same value as
- * EVP_CTRL_GCM_GET_TAG
- */
- if (!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_GET_TAG, tn, rtag))
+
+ if (!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GET_TAG, tn, rtag))
{
fprintf(stderr,"Get tag failed\n");
ERR_print_errors_fp(stderr);
@@ -314,27 +320,34 @@ static void test1(const EVP_CIPHER *c,const unsigned char *key,int kn,
if (encdec <= 0)
{
- if (mode == EVP_CIPH_GCM_MODE)
+ if ((mode == EVP_CIPH_GCM_MODE) || (mode == EVP_CIPH_OCB_MODE))
{
if(!EVP_DecryptInit_ex(ctx,c,NULL,NULL,NULL))
{
- fprintf(stderr,"EncryptInit failed\n");
+ fprintf(stderr,"DecryptInit failed\n");
ERR_print_errors_fp(stderr);
test1_exit(10);
}
- if(!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_IVLEN, in, NULL))
+ if(!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_SET_IVLEN, in, NULL))
{
fprintf(stderr,"IV length set failed\n");
ERR_print_errors_fp(stderr);
test1_exit(11);
}
+ if((mode == EVP_CIPH_OCB_MODE) &&
+ !EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_OCB_SET_TAGLEN, tn, NULL))
+ {
+ fprintf(stderr,"Tag length set failed\n");
+ ERR_print_errors_fp(stderr);
+ test1_exit(15);
+ }
if(!EVP_DecryptInit_ex(ctx,NULL,NULL,key,iv))
{
fprintf(stderr,"Key/IV set failed\n");
ERR_print_errors_fp(stderr);
test1_exit(12);
}
- if (!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_TAG, tn, (void *)tag))
+ if (!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_SET_TAG, tn, (void *)tag))
{
fprintf(stderr,"Set tag failed\n");
ERR_print_errors_fp(stderr);