summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/evp/p_seal.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/evp/p_seal.c')
-rw-r--r--src/lib/libcrypto/evp/p_seal.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/lib/libcrypto/evp/p_seal.c b/src/lib/libcrypto/evp/p_seal.c
index d449e892bf..2fd1d7e0c2 100644
--- a/src/lib/libcrypto/evp/p_seal.c
+++ b/src/lib/libcrypto/evp/p_seal.c
@@ -72,18 +72,21 @@ int EVP_SealInit(EVP_CIPHER_CTX *ctx, EVP_CIPHER *type, unsigned char **ek,
72 unsigned char key[EVP_MAX_KEY_LENGTH]; 72 unsigned char key[EVP_MAX_KEY_LENGTH];
73 int i; 73 int i;
74 74
75 if(type) {
76 EVP_CIPHER_CTX_init(ctx);
77 if(!EVP_EncryptInit(ctx,type,NULL,NULL)) return 0;
78 }
75 if (npubk <= 0) return(0); 79 if (npubk <= 0) return(0);
76 if (RAND_bytes(key,EVP_MAX_KEY_LENGTH) <= 0) 80 if (RAND_bytes(key,EVP_MAX_KEY_LENGTH) <= 0)
77 return(0); 81 return(0);
78 if (type->iv_len > 0) 82 if (EVP_CIPHER_CTX_iv_length(ctx))
79 RAND_pseudo_bytes(iv,type->iv_len); 83 RAND_pseudo_bytes(iv,EVP_CIPHER_CTX_iv_length(ctx));
80 84
81 EVP_CIPHER_CTX_init(ctx); 85 if(!EVP_EncryptInit(ctx,NULL,key,iv)) return 0;
82 EVP_EncryptInit(ctx,type,key,iv);
83 86
84 for (i=0; i<npubk; i++) 87 for (i=0; i<npubk; i++)
85 { 88 {
86 ekl[i]=EVP_PKEY_encrypt(ek[i],key,EVP_CIPHER_key_length(type), 89 ekl[i]=EVP_PKEY_encrypt(ek[i],key,EVP_CIPHER_CTX_key_length(ctx),
87 pubk[i]); 90 pubk[i]);
88 if (ekl[i] <= 0) return(-1); 91 if (ekl[i] <= 0) return(-1);
89 } 92 }