Browse Source

Use secure_compare

pull/1656/head
Wessel Nieboer 4 months ago
parent
commit
49801cda65
No known key found for this signature in database GPG Key ID: 929C8E45E33B5FD2
  1. 6
      src/Utils.cpp

6
src/Utils.cpp

@ -1,5 +1,6 @@
#include "Utils.h"
#include <AES.h>
#include <Crypto.h>
#include <SHA256.h>
#ifdef ARDUINO
@ -81,10 +82,7 @@ int Utils::MACThenDecrypt(const uint8_t* shared_secret, uint8_t* dest, const uin
sha.update(src + CIPHER_MAC_SIZE, src_len - CIPHER_MAC_SIZE);
sha.finalizeHMAC(shared_secret, PUB_KEY_SIZE, hmac, CIPHER_MAC_SIZE);
}
// constant-time comparison to prevent timing side-channel attacks
uint8_t diff = 0;
for (int i = 0; i < CIPHER_MAC_SIZE; i++) diff |= hmac[i] ^ src[i];
if (diff == 0) {
if (secure_compare(hmac, src, CIPHER_MAC_SIZE)) {
return decrypt(shared_secret, dest, src + CIPHER_MAC_SIZE, src_len - CIPHER_MAC_SIZE);
}
return 0; // invalid HMAC

Loading…
Cancel
Save