int len;
ctx = EVP_CIPHER_CTX_new();
- if (!ctx)
+ if (!ctx) {
+ TRY_LOG_ERROR("EVP_CIPHER_CTX_new() error");
goto opensslError;
- if (EVP_CipherInit_ex(ctx, EVP_aes_256_ecb(), nullptr, key.data(), nullptr, encrypt) != 1)
+ }
+ if (EVP_CipherInit_ex(ctx, EVP_aes_256_ecb(), nullptr, key.data(), nullptr, encrypt) != 1) {
+ TRY_LOG_ERROR("EVP_CipherInit_ex() error");
goto opensslError;
- if (EVP_CIPHER_CTX_set_padding(ctx, 0) != 1)
+ }
+ if (EVP_CIPHER_CTX_set_padding(ctx, 0) != 1) {
+ TRY_LOG_ERROR("EVP_CIPHER_CTX_set_padding() error");
goto opensslError;
- if (EVP_CipherUpdate(ctx, output.data(), &len, input.data(), input.size()) != 1)
+ }
+ if (EVP_CipherUpdate(ctx, output.data(), &len, input.data(), input.size()) != 1) {
+ TRY_LOG_ERROR("EVP_CipherUpdate() error");
goto opensslError;
- if (EVP_CipherFinal_ex(ctx, output.data() + len, &len) != 1)
+ }
+ if (EVP_CipherFinal_ex(ctx, output.data() + len, &len) != 1) {
+ TRY_LOG_ERROR("EVP_CipherFinal_ex() error");
goto opensslError;
+ }
EVP_CIPHER_CTX_free(ctx);
return output;
#include "crypto/common.h"
#include "crypto/hkdf.h"
#include "crypto/openssl_error.h"
+#include "log/log.h"
#include <openssl/evp.h>
#include <openssl/hmac.h>
size_t outLen = derivedKeySize;
ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_HKDF, nullptr);
- if (!ctx)
+ if (!ctx) {
+ TRY_LOG_ERROR("EVP_PKEY_CTX_new_id() error");
goto opensslError;
- if (EVP_PKEY_derive_init(ctx) <= 0)
+ }
+ if (EVP_PKEY_derive_init(ctx) <= 0) {
+ TRY_LOG_ERROR("EVP_PKEY_derive_init() error");
goto opensslError;
- if (EVP_PKEY_CTX_set_hkdf_md(ctx, EVP_sha256()) <= 0)
+ }
+ if (EVP_PKEY_CTX_set_hkdf_md(ctx, EVP_sha256()) <= 0) {
+ TRY_LOG_ERROR("EVP_PKEY_CTX_set_hkdf_md() error");
goto opensslError;
+ }
if (secret.empty()) {
uint8_t key[EVP_MAX_MD_SIZE];
unsigned int len;
// TODO: before openssl 3.0 EVP_PKEY_CTX_set1_hkdf_key() does not allow zero-length argument
// See issue: https://github.com/openssl/openssl/issues/8531
- if (EVP_PKEY_CTX_hkdf_mode(ctx, EVP_PKEY_HKDEF_MODE_EXPAND_ONLY) != 1)
+ if (EVP_PKEY_CTX_hkdf_mode(ctx, EVP_PKEY_HKDEF_MODE_EXPAND_ONLY) != 1) {
+ TRY_LOG_ERROR("EVP_PKEY_CTX_hkdf_mode() error");
goto opensslError;
- if (!HMAC(EVP_sha256(), salt.data(), salt.size(), nullptr, 0, key, &len))
+ }
+ if (!HMAC(EVP_sha256(), salt.data(), salt.size(), nullptr, 0, key, &len)) {
+ TRY_LOG_ERROR("HMAC() error");
goto opensslError;
- if (EVP_PKEY_CTX_set1_hkdf_key(ctx, key, len) != 1)
+ }
+ if (EVP_PKEY_CTX_set1_hkdf_key(ctx, key, len) != 1) {
+ TRY_LOG_ERROR("EVP_PKEY_CTX_set1_hkdf_key() error");
goto opensslError;
+ }
} else {
- if (EVP_PKEY_CTX_set1_hkdf_salt(ctx, salt.data(), salt.size()) <= 0)
+ if (EVP_PKEY_CTX_set1_hkdf_salt(ctx, salt.data(), salt.size()) <= 0) {
+ TRY_LOG_ERROR("EVP_PKEY_CTX_set1_hkdf_salt() error");
goto opensslError;
- if (EVP_PKEY_CTX_set1_hkdf_key(ctx, secret.data(), secret.size()) <= 0)
+ }
+ if (EVP_PKEY_CTX_set1_hkdf_key(ctx, secret.data(), secret.size()) <= 0) {
+ TRY_LOG_ERROR("EVP_PKEY_CTX_set1_hkdf_key() error");
goto opensslError;
+ }
}
- if (EVP_PKEY_CTX_add1_hkdf_info(ctx, info.data(), info.size()) <= 0)
+ if (EVP_PKEY_CTX_add1_hkdf_info(ctx, info.data(), info.size()) <= 0) {
+ TRY_LOG_ERROR("EVP_PKEY_CTX_add1_hkdf_info() error");
goto opensslError;
- if (EVP_PKEY_derive(ctx, derivedKey.data(), &outLen) <= 0)
+ }
+ if (EVP_PKEY_derive(ctx, derivedKey.data(), &outLen) <= 0) {
+ TRY_LOG_ERROR("EVP_PKEY_derive() error");
goto opensslError;
+ }
EVP_PKEY_CTX_free(ctx);
return derivedKey;