mirror of
https://github.com/obsproject/obs-studio.git
synced 2024-09-20 13:08:50 +02:00
40 lines
808 B
C++
40 lines
808 B
C++
#include "crypto-helpers.hpp"
|
|
|
|
#include "mbedtls/md.h"
|
|
#include "mbedtls/pk.h"
|
|
|
|
bool VerifySignature(const uint8_t *pubKey, const size_t pubKeyLen,
|
|
const uint8_t *buf, const size_t len, const uint8_t *sig,
|
|
const size_t sigLen)
|
|
{
|
|
bool result = false;
|
|
int ret = 1;
|
|
unsigned char hash[64];
|
|
mbedtls_pk_context pk;
|
|
|
|
mbedtls_pk_init(&pk);
|
|
|
|
// Parse PEM key
|
|
if ((ret = mbedtls_pk_parse_public_key(&pk, pubKey, pubKeyLen + 1)) !=
|
|
0) {
|
|
goto exit;
|
|
}
|
|
// Hash input buffer
|
|
if ((ret = mbedtls_md(mbedtls_md_info_from_type(MBEDTLS_MD_SHA512), buf,
|
|
len, hash)) != 0) {
|
|
goto exit;
|
|
}
|
|
// Verify signautre
|
|
if ((ret = mbedtls_pk_verify(&pk, MBEDTLS_MD_SHA512, hash, 64, sig,
|
|
sigLen)) != 0) {
|
|
goto exit;
|
|
}
|
|
|
|
result = true;
|
|
|
|
exit:
|
|
mbedtls_pk_free(&pk);
|
|
|
|
return result;
|
|
}
|