@@ -3233,10 +3233,14 @@ void Hmac::HmacInit(const char* hash_type, const char* key, int key_len) {
3233
3233
return env ()->ThrowError (" Unknown message digest" );
3234
3234
}
3235
3235
HMAC_CTX_init (&ctx_);
3236
+ int result = 0 ;
3236
3237
if (key_len == 0 ) {
3237
- HMAC_Init (&ctx_, " " , 0 , md_);
3238
+ result = HMAC_Init (&ctx_, " " , 0 , md_);
3238
3239
} else {
3239
- HMAC_Init (&ctx_, key, key_len, md_);
3240
+ result = HMAC_Init (&ctx_, key, key_len, md_);
3241
+ }
3242
+ if (!result) {
3243
+ return ThrowCryptoError (env (), ERR_get_error ());
3240
3244
}
3241
3245
initialised_ = true ;
3242
3246
}
@@ -3357,7 +3361,8 @@ void Hash::New(const FunctionCallbackInfo<Value>& args) {
3357
3361
3358
3362
Hash* hash = new Hash (env, args.This ());
3359
3363
if (!hash->HashInit (*hash_type)) {
3360
- return env->ThrowError (" Digest method not supported" );
3364
+ return ThrowCryptoError (env, ERR_get_error (),
3365
+ " Digest method not supported" );
3361
3366
}
3362
3367
}
3363
3368
@@ -3369,6 +3374,9 @@ bool Hash::HashInit(const char* hash_type) {
3369
3374
return false ;
3370
3375
EVP_MD_CTX_init (&mdctx_);
3371
3376
EVP_DigestInit_ex (&mdctx_, md_, nullptr );
3377
+ if (0 != ERR_peek_error ()) {
3378
+ return false ;
3379
+ }
3372
3380
initialised_ = true ;
3373
3381
return true ;
3374
3382
}
@@ -4050,7 +4058,8 @@ void DiffieHellman::Initialize(Environment* env, Local<Object> target) {
4050
4058
4051
4059
bool DiffieHellman::Init (int primeLength, int g) {
4052
4060
dh = DH_new ();
4053
- DH_generate_parameters_ex (dh, primeLength, g, 0 );
4061
+ if (!DH_generate_parameters_ex (dh, primeLength, g, 0 ))
4062
+ return false ;
4054
4063
bool result = VerifyContext ();
4055
4064
if (!result)
4056
4065
return false ;
@@ -4143,7 +4152,7 @@ void DiffieHellman::New(const FunctionCallbackInfo<Value>& args) {
4143
4152
}
4144
4153
4145
4154
if (!initialized) {
4146
- return env-> ThrowError ( " Initialization failed" );
4155
+ return ThrowCryptoError ( env, ERR_get_error (), " Initialization failed" );
4147
4156
}
4148
4157
}
4149
4158
@@ -4154,11 +4163,11 @@ void DiffieHellman::GenerateKeys(const FunctionCallbackInfo<Value>& args) {
4154
4163
DiffieHellman* diffieHellman = Unwrap<DiffieHellman>(args.Holder ());
4155
4164
4156
4165
if (!diffieHellman->initialised_ ) {
4157
- return env-> ThrowError ( " Not initialized" );
4166
+ return ThrowCryptoError ( env, ERR_get_error (), " Not initialized" );
4158
4167
}
4159
4168
4160
4169
if (!DH_generate_key (diffieHellman->dh )) {
4161
- return env-> ThrowError ( " Key generation failed" );
4170
+ return ThrowCryptoError ( env, ERR_get_error (), " Key generation failed" );
4162
4171
}
4163
4172
4164
4173
int dataSize = BN_num_bytes (diffieHellman->dh ->pub_key );
@@ -4177,7 +4186,7 @@ void DiffieHellman::GetPrime(const FunctionCallbackInfo<Value>& args) {
4177
4186
DiffieHellman* diffieHellman = Unwrap<DiffieHellman>(args.Holder ());
4178
4187
4179
4188
if (!diffieHellman->initialised_ ) {
4180
- return env-> ThrowError ( " Not initialized" );
4189
+ return ThrowCryptoError ( env, ERR_get_error (), " Not initialized" );
4181
4190
}
4182
4191
4183
4192
int dataSize = BN_num_bytes (diffieHellman->dh ->p );
@@ -4195,7 +4204,7 @@ void DiffieHellman::GetGenerator(const FunctionCallbackInfo<Value>& args) {
4195
4204
DiffieHellman* diffieHellman = Unwrap<DiffieHellman>(args.Holder ());
4196
4205
4197
4206
if (!diffieHellman->initialised_ ) {
4198
- return env-> ThrowError ( " Not initialized" );
4207
+ return ThrowCryptoError ( env, ERR_get_error (), " Not initialized" );
4199
4208
}
4200
4209
4201
4210
int dataSize = BN_num_bytes (diffieHellman->dh ->g );
@@ -4213,7 +4222,7 @@ void DiffieHellman::GetPublicKey(const FunctionCallbackInfo<Value>& args) {
4213
4222
DiffieHellman* diffieHellman = Unwrap<DiffieHellman>(args.Holder ());
4214
4223
4215
4224
if (!diffieHellman->initialised_ ) {
4216
- return env-> ThrowError ( " Not initialized" );
4225
+ return ThrowCryptoError ( env, ERR_get_error (), " Not initialized" );
4217
4226
}
4218
4227
4219
4228
if (diffieHellman->dh ->pub_key == nullptr ) {
@@ -4236,7 +4245,7 @@ void DiffieHellman::GetPrivateKey(const FunctionCallbackInfo<Value>& args) {
4236
4245
DiffieHellman* diffieHellman = Unwrap<DiffieHellman>(args.Holder ());
4237
4246
4238
4247
if (!diffieHellman->initialised_ ) {
4239
- return env-> ThrowError ( " Not initialized" );
4248
+ return ThrowCryptoError ( env, ERR_get_error (), " Not initialized" );
4240
4249
}
4241
4250
4242
4251
if (diffieHellman->dh ->priv_key == nullptr ) {
@@ -4259,7 +4268,7 @@ void DiffieHellman::ComputeSecret(const FunctionCallbackInfo<Value>& args) {
4259
4268
DiffieHellman* diffieHellman = Unwrap<DiffieHellman>(args.Holder ());
4260
4269
4261
4270
if (!diffieHellman->initialised_ ) {
4262
- return env-> ThrowError ( " Not initialized" );
4271
+ return ThrowCryptoError ( env, ERR_get_error (), " Not initialized" );
4263
4272
}
4264
4273
4265
4274
ClearErrorOnReturn clear_error_on_return;
@@ -4292,7 +4301,7 @@ void DiffieHellman::ComputeSecret(const FunctionCallbackInfo<Value>& args) {
4292
4301
delete[] data;
4293
4302
4294
4303
if (!checked) {
4295
- return env-> ThrowError ( " Invalid key " );
4304
+ return ThrowCryptoError ( env, ERR_get_error (), " Invalid Key " );
4296
4305
} else if (checkResult) {
4297
4306
if (checkResult & DH_CHECK_PUBKEY_TOO_SMALL) {
4298
4307
return env->ThrowError (" Supplied key is too small" );
@@ -4329,7 +4338,7 @@ void DiffieHellman::SetPublicKey(const FunctionCallbackInfo<Value>& args) {
4329
4338
Environment* env = diffieHellman->env ();
4330
4339
4331
4340
if (!diffieHellman->initialised_ ) {
4332
- return env-> ThrowError ( " Not initialized" );
4341
+ return ThrowCryptoError ( env, ERR_get_error (), " Not initialized" );
4333
4342
}
4334
4343
4335
4344
if (args.Length () == 0 ) {
@@ -4348,7 +4357,7 @@ void DiffieHellman::SetPrivateKey(const FunctionCallbackInfo<Value>& args) {
4348
4357
Environment* env = diffieHellman->env ();
4349
4358
4350
4359
if (!diffieHellman->initialised_ ) {
4351
- return env-> ThrowError ( " Not initialized" );
4360
+ return ThrowCryptoError ( env, ERR_get_error (), " Not initialized" );
4352
4361
}
4353
4362
4354
4363
if (args.Length () == 0 ) {
@@ -4370,7 +4379,8 @@ void DiffieHellman::VerifyErrorGetter(Local<String> property,
4370
4379
DiffieHellman* diffieHellman = Unwrap<DiffieHellman>(args.Holder ());
4371
4380
4372
4381
if (!diffieHellman->initialised_ )
4373
- return diffieHellman->env ()->ThrowError (" Not initialized" );
4382
+ return ThrowCryptoError (diffieHellman->env (), ERR_get_error (),
4383
+ " Not initialized" );
4374
4384
4375
4385
args.GetReturnValue ().Set (diffieHellman->verifyError_ );
4376
4386
}
0 commit comments