diff options
author | Matt Caswell <matt@openssl.org> | 2014-12-06 20:55:36 +0000 |
---|---|---|
committer | Matt Caswell <matt@openssl.org> | 2014-12-08 10:28:47 +0000 |
commit | d827c5edb54263f81cc46899080e2ad7b70ca9f5 (patch) | |
tree | 0411dee88f9e31abd685ec47c1a9ddcf91a3eddd /crypto/evp/evp_test.c | |
parent | e6b336efa31c9916bd64504a478d56532f86d6aa (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.c | 35 |
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); |