@@ -3394,10 +3394,14 @@ void Hmac::HmacInit(const char* hash_type, const char* key, int key_len) {
3394
3394
return env ()->ThrowError (" Unknown message digest" );
3395
3395
}
3396
3396
HMAC_CTX_init (&ctx_);
3397
+ int result = 0 ;
3397
3398
if (key_len == 0 ) {
3398
- HMAC_Init (&ctx_, " " , 0 , md_);
3399
+ result = HMAC_Init (&ctx_, " " , 0 , md_);
3399
3400
} else {
3400
- HMAC_Init (&ctx_, key, key_len, md_);
3401
+ result = HMAC_Init (&ctx_, key, key_len, md_);
3402
+ }
3403
+ if (!result) {
3404
+ return ThrowCryptoError (env (), ERR_get_error ());
3401
3405
}
3402
3406
initialised_ = true ;
3403
3407
}
@@ -3518,7 +3522,8 @@ void Hash::New(const FunctionCallbackInfo<Value>& args) {
3518
3522
3519
3523
Hash* hash = new Hash (env, args.This ());
3520
3524
if (!hash->HashInit (*hash_type)) {
3521
- return env->ThrowError (" Digest method not supported" );
3525
+ return ThrowCryptoError (env, ERR_get_error (),
3526
+ " Digest method not supported" );
3522
3527
}
3523
3528
}
3524
3529
@@ -3530,6 +3535,9 @@ bool Hash::HashInit(const char* hash_type) {
3530
3535
return false ;
3531
3536
EVP_MD_CTX_init (&mdctx_);
3532
3537
EVP_DigestInit_ex (&mdctx_, md_, nullptr );
3538
+ if (0 != ERR_peek_error ()) {
3539
+ return false ;
3540
+ }
3533
3541
initialised_ = true ;
3534
3542
return true ;
3535
3543
}
@@ -4211,7 +4219,8 @@ void DiffieHellman::Initialize(Environment* env, Local<Object> target) {
4211
4219
4212
4220
bool DiffieHellman::Init (int primeLength, int g) {
4213
4221
dh = DH_new ();
4214
- DH_generate_parameters_ex (dh, primeLength, g, 0 );
4222
+ if (!DH_generate_parameters_ex (dh, primeLength, g, 0 ))
4223
+ return false ;
4215
4224
bool result = VerifyContext ();
4216
4225
if (!result)
4217
4226
return false ;
@@ -4304,7 +4313,7 @@ void DiffieHellman::New(const FunctionCallbackInfo<Value>& args) {
4304
4313
}
4305
4314
4306
4315
if (!initialized) {
4307
- return env-> ThrowError ( " Initialization failed" );
4316
+ return ThrowCryptoError ( env, ERR_get_error (), " Initialization failed" );
4308
4317
}
4309
4318
}
4310
4319
@@ -4315,11 +4324,11 @@ void DiffieHellman::GenerateKeys(const FunctionCallbackInfo<Value>& args) {
4315
4324
DiffieHellman* diffieHellman = Unwrap<DiffieHellman>(args.Holder ());
4316
4325
4317
4326
if (!diffieHellman->initialised_ ) {
4318
- return env-> ThrowError ( " Not initialized" );
4327
+ return ThrowCryptoError ( env, ERR_get_error (), " Not initialized" );
4319
4328
}
4320
4329
4321
4330
if (!DH_generate_key (diffieHellman->dh )) {
4322
- return env-> ThrowError ( " Key generation failed" );
4331
+ return ThrowCryptoError ( env, ERR_get_error (), " Key generation failed" );
4323
4332
}
4324
4333
4325
4334
int dataSize = BN_num_bytes (diffieHellman->dh ->pub_key );
@@ -4338,7 +4347,7 @@ void DiffieHellman::GetPrime(const FunctionCallbackInfo<Value>& args) {
4338
4347
DiffieHellman* diffieHellman = Unwrap<DiffieHellman>(args.Holder ());
4339
4348
4340
4349
if (!diffieHellman->initialised_ ) {
4341
- return env-> ThrowError ( " Not initialized" );
4350
+ return ThrowCryptoError ( env, ERR_get_error (), " Not initialized" );
4342
4351
}
4343
4352
4344
4353
int dataSize = BN_num_bytes (diffieHellman->dh ->p );
@@ -4356,7 +4365,7 @@ void DiffieHellman::GetGenerator(const FunctionCallbackInfo<Value>& args) {
4356
4365
DiffieHellman* diffieHellman = Unwrap<DiffieHellman>(args.Holder ());
4357
4366
4358
4367
if (!diffieHellman->initialised_ ) {
4359
- return env-> ThrowError ( " Not initialized" );
4368
+ return ThrowCryptoError ( env, ERR_get_error (), " Not initialized" );
4360
4369
}
4361
4370
4362
4371
int dataSize = BN_num_bytes (diffieHellman->dh ->g );
@@ -4374,7 +4383,7 @@ void DiffieHellman::GetPublicKey(const FunctionCallbackInfo<Value>& args) {
4374
4383
DiffieHellman* diffieHellman = Unwrap<DiffieHellman>(args.Holder ());
4375
4384
4376
4385
if (!diffieHellman->initialised_ ) {
4377
- return env-> ThrowError ( " Not initialized" );
4386
+ return ThrowCryptoError ( env, ERR_get_error (), " Not initialized" );
4378
4387
}
4379
4388
4380
4389
if (diffieHellman->dh ->pub_key == nullptr ) {
@@ -4397,7 +4406,7 @@ void DiffieHellman::GetPrivateKey(const FunctionCallbackInfo<Value>& args) {
4397
4406
DiffieHellman* diffieHellman = Unwrap<DiffieHellman>(args.Holder ());
4398
4407
4399
4408
if (!diffieHellman->initialised_ ) {
4400
- return env-> ThrowError ( " Not initialized" );
4409
+ return ThrowCryptoError ( env, ERR_get_error (), " Not initialized" );
4401
4410
}
4402
4411
4403
4412
if (diffieHellman->dh ->priv_key == nullptr ) {
@@ -4420,7 +4429,7 @@ void DiffieHellman::ComputeSecret(const FunctionCallbackInfo<Value>& args) {
4420
4429
DiffieHellman* diffieHellman = Unwrap<DiffieHellman>(args.Holder ());
4421
4430
4422
4431
if (!diffieHellman->initialised_ ) {
4423
- return env-> ThrowError ( " Not initialized" );
4432
+ return ThrowCryptoError ( env, ERR_get_error (), " Not initialized" );
4424
4433
}
4425
4434
4426
4435
ClearErrorOnReturn clear_error_on_return;
@@ -4453,7 +4462,7 @@ void DiffieHellman::ComputeSecret(const FunctionCallbackInfo<Value>& args) {
4453
4462
delete[] data;
4454
4463
4455
4464
if (!checked) {
4456
- return env-> ThrowError ( " Invalid key " );
4465
+ return ThrowCryptoError ( env, ERR_get_error (), " Invalid Key " );
4457
4466
} else if (checkResult) {
4458
4467
if (checkResult & DH_CHECK_PUBKEY_TOO_SMALL) {
4459
4468
return env->ThrowError (" Supplied key is too small" );
@@ -4490,7 +4499,7 @@ void DiffieHellman::SetPublicKey(const FunctionCallbackInfo<Value>& args) {
4490
4499
Environment* env = diffieHellman->env ();
4491
4500
4492
4501
if (!diffieHellman->initialised_ ) {
4493
- return env-> ThrowError ( " Not initialized" );
4502
+ return ThrowCryptoError ( env, ERR_get_error (), " Not initialized" );
4494
4503
}
4495
4504
4496
4505
if (args.Length () == 0 ) {
@@ -4509,7 +4518,7 @@ void DiffieHellman::SetPrivateKey(const FunctionCallbackInfo<Value>& args) {
4509
4518
Environment* env = diffieHellman->env ();
4510
4519
4511
4520
if (!diffieHellman->initialised_ ) {
4512
- return env-> ThrowError ( " Not initialized" );
4521
+ return ThrowCryptoError ( env, ERR_get_error (), " Not initialized" );
4513
4522
}
4514
4523
4515
4524
if (args.Length () == 0 ) {
@@ -4531,7 +4540,8 @@ void DiffieHellman::VerifyErrorGetter(Local<String> property,
4531
4540
DiffieHellman* diffieHellman = Unwrap<DiffieHellman>(args.Holder ());
4532
4541
4533
4542
if (!diffieHellman->initialised_ )
4534
- return diffieHellman->env ()->ThrowError (" Not initialized" );
4543
+ return ThrowCryptoError (diffieHellman->env (), ERR_get_error (),
4544
+ " Not initialized" );
4535
4545
4536
4546
args.GetReturnValue ().Set (diffieHellman->verifyError_ );
4537
4547
}
0 commit comments