Feature #8667 » 0001-Alternate-implementation-of-gcm-IV-length-support.patch
| ext/openssl/ossl_cipher.c | ||
|---|---|---|
|
return key;
|
||
|
}
|
||
|
#define ossl_is_gcm(nid) (nid) == NID_aes_128_gcm || \
|
||
|
(nid) == NID_aes_192_gcm || \
|
||
|
(nid) == NID_aes_256_gcm
|
||
|
/*
|
||
|
* call-seq:
|
||
|
* cipher.iv = string -> string
|
||
| ... | ... | |
|
static VALUE
|
||
|
ossl_cipher_set_iv(VALUE self, VALUE iv)
|
||
|
{
|
||
|
long ivlen;
|
||
|
int nid;
|
||
|
EVP_CIPHER_CTX *ctx;
|
||
|
StringValue(iv);
|
||
|
GetCipher(self, ctx);
|
||
|
if (RSTRING_LEN(iv) < EVP_CIPHER_CTX_iv_length(ctx))
|
||
|
ossl_raise(eCipherError, "iv length too short");
|
||
|
ivlen = RSTRING_LEN(iv);
|
||
|
nid = EVP_CIPHER_CTX_nid(ctx);
|
||
|
#ifdef HAVE_AUTHENTICATED_ENCRYPTION
|
||
|
if (ossl_is_gcm(nid)) {
|
||
|
EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_IVLEN, ivlen, NULL);
|
||
|
} else {
|
||
|
#endif
|
||
|
if (ivlen < EVP_CIPHER_CTX_iv_length(ctx))
|
||
|
ossl_raise(eCipherError, "iv length too short");
|
||
|
#ifdef HAVE_AUTHENTICATED_ENCRYPTION
|
||
|
}
|
||
|
#endif
|
||
|
if (EVP_CipherInit_ex(ctx, NULL, NULL, NULL, (unsigned char *)RSTRING_PTR(iv), -1) != 1)
|
||
|
ossl_raise(eCipherError, NULL);
|
||
|
ossl_raise(eCipherError, NULL);
|
||
|
return iv;
|
||
|
}
|
||
| ... | ... | |
|
return data;
|
||
|
}
|
||
|
#define ossl_is_gcm(nid) (nid) == NID_aes_128_gcm || \
|
||
|
(nid) == NID_aes_192_gcm || \
|
||
|
(nid) == NID_aes_256_gcm
|
||
|
static VALUE
|
||
|
ossl_get_gcm_auth_tag(EVP_CIPHER_CTX *ctx, int len)
|
||
|
{
|
||
- « Previous
- 1
- 2
- Next »