@@ -3461,7 +3461,7 @@ void CipherBase::Init(const char* cipher_type,
3461
3461
}
3462
3462
#endif // NODE_FIPS_MODE
3463
3463
3464
- CHECK_EQ (initialised_, false );
3464
+ CHECK_EQ (ctx_, nullptr );
3465
3465
const EVP_CIPHER* const cipher = EVP_get_cipherbyname (cipher_type);
3466
3466
if (cipher == nullptr ) {
3467
3467
return env ()->ThrowError (" Unknown cipher" );
@@ -3479,29 +3479,28 @@ void CipherBase::Init(const char* cipher_type,
3479
3479
key,
3480
3480
iv);
3481
3481
3482
- EVP_CIPHER_CTX_init (& ctx_);
3482
+ ctx_ = EVP_CIPHER_CTX_new ( );
3483
3483
const bool encrypt = (kind_ == kCipher );
3484
- EVP_CipherInit_ex (& ctx_, cipher, nullptr , nullptr , nullptr , encrypt );
3484
+ EVP_CipherInit_ex (ctx_, cipher, nullptr , nullptr , nullptr , encrypt );
3485
3485
3486
- int mode = EVP_CIPHER_CTX_mode (& ctx_);
3486
+ int mode = EVP_CIPHER_CTX_mode (ctx_);
3487
3487
if (encrypt && (mode == EVP_CIPH_CTR_MODE || mode == EVP_CIPH_GCM_MODE ||
3488
3488
mode == EVP_CIPH_CCM_MODE)) {
3489
3489
ProcessEmitWarning (env (), " Use Cipheriv for counter mode of %s" ,
3490
3490
cipher_type);
3491
3491
}
3492
3492
3493
3493
if (mode == EVP_CIPH_WRAP_MODE)
3494
- EVP_CIPHER_CTX_set_flags (& ctx_, EVP_CIPHER_CTX_FLAG_WRAP_ALLOW);
3494
+ EVP_CIPHER_CTX_set_flags (ctx_, EVP_CIPHER_CTX_FLAG_WRAP_ALLOW);
3495
3495
3496
- CHECK_EQ (1 , EVP_CIPHER_CTX_set_key_length (& ctx_, key_len));
3496
+ CHECK_EQ (1 , EVP_CIPHER_CTX_set_key_length (ctx_, key_len));
3497
3497
3498
- EVP_CipherInit_ex (& ctx_,
3498
+ EVP_CipherInit_ex (ctx_,
3499
3499
nullptr ,
3500
3500
nullptr ,
3501
3501
reinterpret_cast <unsigned char *>(key),
3502
3502
reinterpret_cast <unsigned char *>(iv),
3503
3503
kind_ == kCipher );
3504
- initialised_ = true ;
3505
3504
}
3506
3505
3507
3506
@@ -3544,32 +3543,33 @@ void CipherBase::InitIv(const char* cipher_type,
3544
3543
return env ()->ThrowError (" Invalid IV length" );
3545
3544
}
3546
3545
3547
- EVP_CIPHER_CTX_init (& ctx_);
3546
+ ctx_ = EVP_CIPHER_CTX_new ( );
3548
3547
3549
3548
if (mode == EVP_CIPH_WRAP_MODE)
3550
- EVP_CIPHER_CTX_set_flags (& ctx_, EVP_CIPHER_CTX_FLAG_WRAP_ALLOW);
3549
+ EVP_CIPHER_CTX_set_flags (ctx_, EVP_CIPHER_CTX_FLAG_WRAP_ALLOW);
3551
3550
3552
3551
const bool encrypt = (kind_ == kCipher );
3553
- EVP_CipherInit_ex (& ctx_, cipher, nullptr , nullptr , nullptr , encrypt );
3552
+ EVP_CipherInit_ex (ctx_, cipher, nullptr , nullptr , nullptr , encrypt );
3554
3553
3555
3554
if (is_gcm_mode &&
3556
- !EVP_CIPHER_CTX_ctrl (&ctx_, EVP_CTRL_GCM_SET_IVLEN, iv_len, nullptr )) {
3557
- EVP_CIPHER_CTX_cleanup (&ctx_);
3555
+ !EVP_CIPHER_CTX_ctrl (ctx_, EVP_CTRL_GCM_SET_IVLEN, iv_len, nullptr )) {
3556
+ EVP_CIPHER_CTX_free (ctx_);
3557
+ ctx_ = nullptr ;
3558
3558
return env ()->ThrowError (" Invalid IV length" );
3559
3559
}
3560
3560
3561
- if (!EVP_CIPHER_CTX_set_key_length (&ctx_, key_len)) {
3562
- EVP_CIPHER_CTX_cleanup (&ctx_);
3561
+ if (!EVP_CIPHER_CTX_set_key_length (ctx_, key_len)) {
3562
+ EVP_CIPHER_CTX_free (ctx_);
3563
+ ctx_ = nullptr ;
3563
3564
return env ()->ThrowError (" Invalid key length" );
3564
3565
}
3565
3566
3566
- EVP_CipherInit_ex (& ctx_,
3567
+ EVP_CipherInit_ex (ctx_,
3567
3568
nullptr ,
3568
3569
nullptr ,
3569
3570
reinterpret_cast <const unsigned char *>(key),
3570
3571
reinterpret_cast <const unsigned char *>(iv),
3571
3572
kind_ == kCipher );
3572
- initialised_ = true ;
3573
3573
}
3574
3574
3575
3575
@@ -3597,8 +3597,8 @@ void CipherBase::InitIv(const FunctionCallbackInfo<Value>& args) {
3597
3597
3598
3598
bool CipherBase::IsAuthenticatedMode () const {
3599
3599
// Check if this cipher operates in an AEAD mode that we support.
3600
- CHECK_EQ (initialised_, true );
3601
- const EVP_CIPHER* const cipher = EVP_CIPHER_CTX_cipher (& ctx_);
3600
+ CHECK_NE (ctx_, nullptr );
3601
+ const EVP_CIPHER* const cipher = EVP_CIPHER_CTX_cipher (ctx_);
3602
3602
int mode = EVP_CIPHER_mode (cipher);
3603
3603
return mode == EVP_CIPH_GCM_MODE;
3604
3604
}
@@ -3610,7 +3610,7 @@ void CipherBase::GetAuthTag(const FunctionCallbackInfo<Value>& args) {
3610
3610
ASSIGN_OR_RETURN_UNWRAP (&cipher, args.Holder ());
3611
3611
3612
3612
// Only callable after Final and if encrypting.
3613
- if (cipher->initialised_ ||
3613
+ if (cipher->ctx_ != nullptr ||
3614
3614
cipher->kind_ != kCipher ||
3615
3615
cipher->auth_tag_len_ == 0 ) {
3616
3616
return env->ThrowError (" Attempting to get auth tag in unsupported state" );
@@ -3631,7 +3631,7 @@ void CipherBase::SetAuthTag(const FunctionCallbackInfo<Value>& args) {
3631
3631
CipherBase* cipher;
3632
3632
ASSIGN_OR_RETURN_UNWRAP (&cipher, args.Holder ());
3633
3633
3634
- if (! cipher->initialised_ ||
3634
+ if (cipher->ctx_ == nullptr ||
3635
3635
!cipher->IsAuthenticatedMode () ||
3636
3636
cipher->kind_ != kDecipher ) {
3637
3637
return env->ThrowError (" Attempting to set auth tag in unsupported state" );
@@ -3649,10 +3649,10 @@ void CipherBase::SetAuthTag(const FunctionCallbackInfo<Value>& args) {
3649
3649
3650
3650
3651
3651
bool CipherBase::SetAAD (const char * data, unsigned int len) {
3652
- if (!initialised_ || !IsAuthenticatedMode ())
3652
+ if (ctx_ == nullptr || !IsAuthenticatedMode ())
3653
3653
return false ;
3654
3654
int outlen;
3655
- if (!EVP_CipherUpdate (& ctx_,
3655
+ if (!EVP_CipherUpdate (ctx_,
3656
3656
nullptr ,
3657
3657
&outlen,
3658
3658
reinterpret_cast <const unsigned char *>(data),
@@ -3680,21 +3680,21 @@ bool CipherBase::Update(const char* data,
3680
3680
int len,
3681
3681
unsigned char ** out,
3682
3682
int * out_len) {
3683
- if (!initialised_ )
3683
+ if (ctx_ == nullptr )
3684
3684
return 0 ;
3685
3685
3686
3686
// on first update:
3687
3687
if (kind_ == kDecipher && IsAuthenticatedMode () && auth_tag_len_ > 0 ) {
3688
- EVP_CIPHER_CTX_ctrl (& ctx_,
3688
+ EVP_CIPHER_CTX_ctrl (ctx_,
3689
3689
EVP_CTRL_GCM_SET_TAG,
3690
3690
auth_tag_len_,
3691
3691
reinterpret_cast <unsigned char *>(auth_tag_));
3692
3692
auth_tag_len_ = 0 ;
3693
3693
}
3694
3694
3695
- *out_len = len + EVP_CIPHER_CTX_block_size (& ctx_);
3695
+ *out_len = len + EVP_CIPHER_CTX_block_size (ctx_);
3696
3696
*out = Malloc<unsigned char >(static_cast <size_t >(*out_len));
3697
- return EVP_CipherUpdate (& ctx_,
3697
+ return EVP_CipherUpdate (ctx_,
3698
3698
*out,
3699
3699
out_len,
3700
3700
reinterpret_cast <const unsigned char *>(data),
@@ -3742,9 +3742,9 @@ void CipherBase::Update(const FunctionCallbackInfo<Value>& args) {
3742
3742
3743
3743
3744
3744
bool CipherBase::SetAutoPadding (bool auto_padding) {
3745
- if (!initialised_ )
3745
+ if (ctx_ == nullptr )
3746
3746
return false ;
3747
- return EVP_CIPHER_CTX_set_padding (& ctx_, auto_padding);
3747
+ return EVP_CIPHER_CTX_set_padding (ctx_, auto_padding);
3748
3748
}
3749
3749
3750
3750
@@ -3760,22 +3760,22 @@ void CipherBase::SetAutoPadding(const FunctionCallbackInfo<Value>& args) {
3760
3760
3761
3761
3762
3762
bool CipherBase::Final (unsigned char ** out, int *out_len) {
3763
- if (!initialised_ )
3763
+ if (ctx_ == nullptr )
3764
3764
return false ;
3765
3765
3766
3766
*out = Malloc<unsigned char >(
3767
- static_cast <size_t >(EVP_CIPHER_CTX_block_size (& ctx_)));
3768
- int r = EVP_CipherFinal_ex (& ctx_, *out, out_len);
3767
+ static_cast <size_t >(EVP_CIPHER_CTX_block_size (ctx_)));
3768
+ int r = EVP_CipherFinal_ex (ctx_, *out, out_len);
3769
3769
3770
3770
if (r == 1 && kind_ == kCipher && IsAuthenticatedMode ()) {
3771
3771
auth_tag_len_ = sizeof (auth_tag_);
3772
- r = EVP_CIPHER_CTX_ctrl (& ctx_, EVP_CTRL_GCM_GET_TAG, auth_tag_len_,
3772
+ r = EVP_CIPHER_CTX_ctrl (ctx_, EVP_CTRL_GCM_GET_TAG, auth_tag_len_,
3773
3773
reinterpret_cast <unsigned char *>(auth_tag_));
3774
3774
CHECK_EQ (r, 1 );
3775
3775
}
3776
3776
3777
- EVP_CIPHER_CTX_cleanup (& ctx_);
3778
- initialised_ = false ;
3777
+ EVP_CIPHER_CTX_free ( ctx_);
3778
+ ctx_ = nullptr ;
3779
3779
3780
3780
return r == 1 ;
3781
3781
}
@@ -3786,7 +3786,7 @@ void CipherBase::Final(const FunctionCallbackInfo<Value>& args) {
3786
3786
3787
3787
CipherBase* cipher;
3788
3788
ASSIGN_OR_RETURN_UNWRAP (&cipher, args.Holder ());
3789
- if (! cipher->initialised_ ) return env->ThrowError (" Unsupported state" );
3789
+ if (cipher->ctx_ == nullptr ) return env->ThrowError (" Unsupported state" );
3790
3790
3791
3791
unsigned char * out_value = nullptr ;
3792
3792
int out_len = -1 ;
0 commit comments