crypto-helpers-mac.mm 1.1 KB

12345678910111213141516171819202122232425262728
  1. #include "crypto-helpers.hpp"
  2. #import <Foundation/Foundation.h>
  3. #import <Security/Security.h>
  4. #import <Security/SecKey.h>
  5. bool VerifySignature(const uint8_t *pubKey, const size_t pubKeyLen, const uint8_t *buf, const size_t len,
  6. const uint8_t *sig, const size_t sigLen)
  7. {
  8. NSData *pubKeyData = [NSData dataWithBytes:pubKey length:pubKeyLen];
  9. CFArrayRef items = nullptr;
  10. OSStatus res = SecItemImport((CFDataRef) pubKeyData, nullptr, nullptr, nullptr, (SecItemImportExportFlags) 0,
  11. nullptr, nullptr, &items);
  12. if (res != errSecSuccess)
  13. return false;
  14. SecKeyRef pubKeyRef = (SecKeyRef) CFArrayGetValueAtIndex(items, 0);
  15. NSData *signedData = [NSData dataWithBytes:buf length:len];
  16. NSData *signature = [NSData dataWithBytes:sig length:sigLen];
  17. CFErrorRef errRef;
  18. bool result = SecKeyVerifySignature(pubKeyRef, kSecKeyAlgorithmRSASignatureMessagePKCS1v15SHA512,
  19. (__bridge CFDataRef) signedData, (__bridge CFDataRef) signature, &errRef);
  20. CFRelease(items);
  21. return result;
  22. };