diff options
Diffstat (limited to 'src/lib/libcrypto/evp/p_seal.c')
-rw-r--r-- | src/lib/libcrypto/evp/p_seal.c | 13 |
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 | } |