mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2024-12-14 12:10:34 +00:00
Add work on crypto functions
This commit is contained in:
parent
37fe8eb523
commit
3902b6154d
@ -51,6 +51,7 @@ namespace wht = std;
|
|||||||
#include <openssl/evp.h>
|
#include <openssl/evp.h>
|
||||||
#define OPENSSL_ENGINE NULL
|
#define OPENSSL_ENGINE NULL
|
||||||
#else
|
#else
|
||||||
|
#include <openssl/cmac.h>
|
||||||
#include <openssl/sha.h>
|
#include <openssl/sha.h>
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
@ -665,30 +666,27 @@ std::vector<uint8_t> osnma_msg_receiver::computeHMAC_SHA_256(const std::vector<u
|
|||||||
std::vector<uint8_t> output(32);
|
std::vector<uint8_t> output(32);
|
||||||
#if USE_OPENSSL_FALLBACK
|
#if USE_OPENSSL_FALLBACK
|
||||||
#if USE_OPENSSL_3
|
#if USE_OPENSSL_3
|
||||||
std::vector<uint8_t> hmac(SHA256_DIGEST_LENGTH); // HMAC-SHA256 output size
|
std::vector<uint8_t> hmac(EVP_MAX_MD_SIZE);
|
||||||
|
|
||||||
// Create HMAC context
|
// Create HMAC-SHA256 context
|
||||||
EVP_MD_CTX* ctx = EVP_MD_CTX_new();
|
EVP_MD_CTX* ctx = EVP_MD_CTX_new();
|
||||||
HMAC_CTX_reset(ctx);
|
EVP_PKEY* pkey = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, nullptr, key.data(), key.size());
|
||||||
|
|
||||||
// Initialize HMAC context with the key and HMAC algorithm
|
// Initialize HMAC-SHA256 context
|
||||||
HMAC_Init_ex(ctx, key.data(), key.size(), EVP_sha256(), nullptr);
|
EVP_DigestSignInit(ctx, nullptr, EVP_sha256(), nullptr, pkey);
|
||||||
|
|
||||||
// Update HMAC context with the message
|
// Compute HMAC-SHA256
|
||||||
HMAC_Update(ctx, input.data(), input.size());
|
EVP_DigestSignUpdate(ctx, input.data(), input.size());
|
||||||
|
size_t macLength;
|
||||||
|
EVP_DigestSignFinal(ctx, hmac.data(), &macLength);
|
||||||
|
|
||||||
// Finalize HMAC computation and obtain the result
|
EVP_PKEY_free(pkey);
|
||||||
unsigned int hmacLen;
|
|
||||||
HMAC_Final(ctx, hmac.data(), &hmacLen);
|
|
||||||
|
|
||||||
// Clean up HMAC context
|
|
||||||
EVP_MD_CTX_free(ctx);
|
EVP_MD_CTX_free(ctx);
|
||||||
|
|
||||||
// Resize the HMAC vector to the actual length
|
mac.resize(macLength);
|
||||||
hmac.resize(hmacLen);
|
|
||||||
output = hmac;
|
output = hmac;
|
||||||
#else
|
#else
|
||||||
std::vector<uint8_t> hmac(SHA256_DIGEST_LENGTH);
|
std::vector<uint8_t> hmac(32);
|
||||||
// Create HMAC context
|
// Create HMAC context
|
||||||
HMAC_CTX* ctx = HMAC_CTX_new();
|
HMAC_CTX* ctx = HMAC_CTX_new();
|
||||||
HMAC_Init_ex(ctx, key.data(), key.size(), EVP_sha256(), nullptr);
|
HMAC_Init_ex(ctx, key.data(), key.size(), EVP_sha256(), nullptr);
|
||||||
@ -727,7 +725,45 @@ std::vector<uint8_t> osnma_msg_receiver::computeCMAC_AES(const std::vector<uint8
|
|||||||
std::vector<uint8_t> output(16);
|
std::vector<uint8_t> output(16);
|
||||||
#if USE_OPENSSL_FALLBACK
|
#if USE_OPENSSL_FALLBACK
|
||||||
#if USE_OPENSSL_3
|
#if USE_OPENSSL_3
|
||||||
|
std::vector<uint8_t> mac(EVP_MAX_MD_SIZE); // CMAC-AES output size
|
||||||
|
|
||||||
|
EVP_CIPHER_CTX* ctx = EVP_CIPHER_CTX_new();
|
||||||
|
|
||||||
|
// Initialize CMAC-AES context
|
||||||
|
EVP_CIPHER_CTX* cmacCtx = EVP_CIPHER_CTX_new();
|
||||||
|
EVP_CMAC_CTX* cmac = EVP_CMAC_CTX_new();
|
||||||
|
|
||||||
|
EVP_CIPHER_CTX_reset(ctx);
|
||||||
|
EVP_CMAC_CTX_reset(cmac);
|
||||||
|
|
||||||
|
// Set AES-128 CMAC cipher and key
|
||||||
|
EVP_CMAC_init(cmac, key.data(), key.size(), EVP_aes_128_cbc(), nullptr);
|
||||||
|
|
||||||
|
// Compute CMAC-AES
|
||||||
|
EVP_CMAC_update(cmac, input.data(), input.size());
|
||||||
|
size_t macLength;
|
||||||
|
EVP_CMAC_final(cmac, mac.data(), &macLength);
|
||||||
|
|
||||||
|
EVP_CIPHER_CTX_free(ctx);
|
||||||
|
EVP_CMAC_CTX_free(cmac);
|
||||||
|
|
||||||
|
mac.resize(macLength);
|
||||||
|
output = mac;
|
||||||
#else
|
#else
|
||||||
|
std::vector<uint8_t> mac(CMAC_DIGEST_LENGTH); // CMAC-AES output size
|
||||||
|
|
||||||
|
// Create CMAC context
|
||||||
|
CMAC_CTX* cmacCtx = CMAC_CTX_new();
|
||||||
|
CMAC_Init(cmacCtx, key.data(), key.size(), EVP_aes_128_cbc(), nullptr);
|
||||||
|
|
||||||
|
// Compute CMAC-AES
|
||||||
|
CMAC_Update(cmacCtx, input.data(), input.size());
|
||||||
|
CMAC_Final(cmacCtx, mac.data(), nullptr);
|
||||||
|
|
||||||
|
// Clean up CMAC context
|
||||||
|
CMAC_CTX_free(cmacCtx);
|
||||||
|
|
||||||
|
output = mac;
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
gnutls_cipher_hd_t cipher;
|
gnutls_cipher_hd_t cipher;
|
||||||
|
Loading…
Reference in New Issue
Block a user