- int outl,outl2;
-
- printf("Testing cipher %s\n",EVP_CIPHER_name(c));
- hexdump(stdout,"Key",key,kn);
- if(in)
- hexdump(stdout,"IV",iv,in);
- hexdump(stdout,"Plaintext",plaintext,pn);
- hexdump(stdout,"Ciphertext",ciphertext,cn);
-
- if(kn != c->key_len)
- {
- fprintf(stderr,"Key length doesn't match, got %d expected %d\n",kn,
- c->key_len);
- exit(5);
- }
-
- if(!EVP_EncryptInit(&ctx,c,key,iv))
- {
- fprintf(stderr,"EncryptInit failed\n");
- exit(10);
- }
- EVP_CIPHER_CTX_set_padding(&ctx,0);
-
- if(!EVP_EncryptUpdate(&ctx,out,&outl,plaintext,pn))
- {
- fprintf(stderr,"Encrypt failed\n");
- exit(6);
- }
- if(!EVP_EncryptFinal(&ctx,out+outl,&outl2))
- {
- fprintf(stderr,"EncryptFinal failed\n");
- exit(7);
- }
-
- if(outl+outl2 != cn)
- {
- fprintf(stderr,"Ciphertext length mismatch got %d expected %d\n",
- outl+outl2,cn);
- exit(8);
- }
-
- if(memcmp(out,ciphertext,cn))
- {
- fprintf(stderr,"Ciphertext mismatch\n");
- hexdump(stderr,"Got",out,cn);
- hexdump(stderr,"Expected",ciphertext,cn);
- exit(9);
- }
-
- if(!EVP_DecryptInit(&ctx,c,key,iv))
- {
- fprintf(stderr,"DecryptInit failed\n");
- exit(11);
- }
- EVP_CIPHER_CTX_set_padding(&ctx,0);
-
- if(!EVP_DecryptUpdate(&ctx,out,&outl,ciphertext,pn))
- {
- fprintf(stderr,"Decrypt failed\n");
- exit(6);
- }
- if(!EVP_DecryptFinal(&ctx,out+outl,&outl2))
- {
- fprintf(stderr,"DecryptFinal failed\n");
- exit(7);
- }
-
- if(outl+outl2 != cn)
- {
- fprintf(stderr,"Plaintext length mismatch got %d expected %d\n",
- outl+outl2,cn);
- exit(8);
- }
-
- if(memcmp(out,plaintext,cn))
- {
- fprintf(stderr,"Plaintext mismatch\n");
- hexdump(stderr,"Got",out,cn);
- hexdump(stderr,"Expected",plaintext,cn);
- exit(9);
- }
+ int outl, outl2;
+
+ printf("Testing cipher %s%s\n", EVP_CIPHER_name(c),
+ (encdec ==
+ 1 ? "(encrypt)" : (encdec ==
+ 0 ? "(decrypt)" : "(encrypt/decrypt)")));
+ hexdump(stdout, "Key", key, kn);
+ if (in)
+ hexdump(stdout, "IV", iv, in);
+ hexdump(stdout, "Plaintext", plaintext, pn);
+ hexdump(stdout, "Ciphertext", ciphertext, cn);
+
+ if (kn != c->key_len) {
+ fprintf(stderr, "Key length doesn't match, got %d expected %lu\n", kn,
+ (unsigned long)c->key_len);
+ test1_exit(5);
+ }
+ EVP_CIPHER_CTX_init(&ctx);
+ if (encdec != 0) {
+ if (!EVP_EncryptInit_ex(&ctx, c, NULL, key, iv)) {
+ fprintf(stderr, "EncryptInit failed\n");
+ ERR_print_errors_fp(stderr);
+ test1_exit(10);
+ }
+ EVP_CIPHER_CTX_set_padding(&ctx, 0);
+
+ if (!EVP_EncryptUpdate(&ctx, out, &outl, plaintext, pn)) {
+ fprintf(stderr, "Encrypt failed\n");
+ ERR_print_errors_fp(stderr);
+ test1_exit(6);
+ }
+ if (!EVP_EncryptFinal_ex(&ctx, out + outl, &outl2)) {
+ fprintf(stderr, "EncryptFinal failed\n");
+ ERR_print_errors_fp(stderr);
+ test1_exit(7);
+ }
+
+ if (outl + outl2 != cn) {
+ fprintf(stderr, "Ciphertext length mismatch got %d expected %d\n",
+ outl + outl2, cn);
+ test1_exit(8);
+ }
+
+ if (memcmp(out, ciphertext, cn)) {
+ fprintf(stderr, "Ciphertext mismatch\n");
+ hexdump(stderr, "Got", out, cn);
+ hexdump(stderr, "Expected", ciphertext, cn);
+ test1_exit(9);
+ }
+ }