return env()->ThrowError("Unknown message digest");
}
HMAC_CTX_init(&ctx_);
+ int result = 0;
if (key_len == 0) {
- HMAC_Init(&ctx_, "", 0, md_);
+ result = HMAC_Init(&ctx_, "", 0, md_);
} else {
- HMAC_Init(&ctx_, key, key_len, md_);
+ result = HMAC_Init(&ctx_, key, key_len, md_);
+ }
+ if (!result) {
+ return ThrowCryptoError(env(), ERR_get_error());
}
initialised_ = true;
}
Hash* hash = new Hash(env, args.This());
if (!hash->HashInit(*hash_type)) {
- return env->ThrowError("Digest method not supported");
+ return ThrowCryptoError(env, ERR_get_error(),
+ "Digest method not supported");
}
}
return false;
EVP_MD_CTX_init(&mdctx_);
EVP_DigestInit_ex(&mdctx_, md_, nullptr);
+ if (0 != ERR_peek_error()) {
+ return false;
+ }
initialised_ = true;
return true;
}
bool DiffieHellman::Init(int primeLength, int g) {
dh = DH_new();
- DH_generate_parameters_ex(dh, primeLength, g, 0);
+ if (!DH_generate_parameters_ex(dh, primeLength, g, 0))
+ return false;
bool result = VerifyContext();
if (!result)
return false;
}
if (!initialized) {
- return env->ThrowError("Initialization failed");
+ return ThrowCryptoError(env, ERR_get_error(), "Initialization failed");
}
}
DiffieHellman* diffieHellman = Unwrap<DiffieHellman>(args.Holder());
if (!diffieHellman->initialised_) {
- return env->ThrowError("Not initialized");
+ return ThrowCryptoError(env, ERR_get_error(), "Not initialized");
}
if (!DH_generate_key(diffieHellman->dh)) {
- return env->ThrowError("Key generation failed");
+ return ThrowCryptoError(env, ERR_get_error(), "Key generation failed");
}
int dataSize = BN_num_bytes(diffieHellman->dh->pub_key);
DiffieHellman* diffieHellman = Unwrap<DiffieHellman>(args.Holder());
if (!diffieHellman->initialised_) {
- return env->ThrowError("Not initialized");
+ return ThrowCryptoError(env, ERR_get_error(), "Not initialized");
}
int dataSize = BN_num_bytes(diffieHellman->dh->p);
DiffieHellman* diffieHellman = Unwrap<DiffieHellman>(args.Holder());
if (!diffieHellman->initialised_) {
- return env->ThrowError("Not initialized");
+ return ThrowCryptoError(env, ERR_get_error(), "Not initialized");
}
int dataSize = BN_num_bytes(diffieHellman->dh->g);
DiffieHellman* diffieHellman = Unwrap<DiffieHellman>(args.Holder());
if (!diffieHellman->initialised_) {
- return env->ThrowError("Not initialized");
+ return ThrowCryptoError(env, ERR_get_error(), "Not initialized");
}
if (diffieHellman->dh->pub_key == nullptr) {
DiffieHellman* diffieHellman = Unwrap<DiffieHellman>(args.Holder());
if (!diffieHellman->initialised_) {
- return env->ThrowError("Not initialized");
+ return ThrowCryptoError(env, ERR_get_error(), "Not initialized");
}
if (diffieHellman->dh->priv_key == nullptr) {
DiffieHellman* diffieHellman = Unwrap<DiffieHellman>(args.Holder());
if (!diffieHellman->initialised_) {
- return env->ThrowError("Not initialized");
+ return ThrowCryptoError(env, ERR_get_error(), "Not initialized");
}
ClearErrorOnReturn clear_error_on_return;
delete[] data;
if (!checked) {
- return env->ThrowError("Invalid key");
+ return ThrowCryptoError(env, ERR_get_error(), "Invalid Key");
} else if (checkResult) {
if (checkResult & DH_CHECK_PUBKEY_TOO_SMALL) {
return env->ThrowError("Supplied key is too small");
Environment* env = diffieHellman->env();
if (!diffieHellman->initialised_) {
- return env->ThrowError("Not initialized");
+ return ThrowCryptoError(env, ERR_get_error(), "Not initialized");
}
if (args.Length() == 0) {
Environment* env = diffieHellman->env();
if (!diffieHellman->initialised_) {
- return env->ThrowError("Not initialized");
+ return ThrowCryptoError(env, ERR_get_error(), "Not initialized");
}
if (args.Length() == 0) {
DiffieHellman* diffieHellman = Unwrap<DiffieHellman>(args.Holder());
if (!diffieHellman->initialised_)
- return diffieHellman->env()->ThrowError("Not initialized");
+ return ThrowCryptoError(diffieHellman->env(), ERR_get_error(),
+ "Not initialized");
args.GetReturnValue().Set(diffieHellman->verifyError_);
}