crypto-helpers-mac.mm 1016 B

1234567891011121314151617181920212223242526272829303132
  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,
  6. const uint8_t *buf, const size_t len, const uint8_t *sig,
  7. const size_t sigLen)
  8. {
  9. NSData *pubKeyData = [NSData dataWithBytes:pubKey length:pubKeyLen];
  10. CFArrayRef items = nullptr;
  11. OSStatus res = SecItemImport((CFDataRef)pubKeyData, nullptr, nullptr,
  12. nullptr, (SecItemImportExportFlags)0,
  13. nullptr, nullptr, &items);
  14. if (res != errSecSuccess)
  15. return false;
  16. SecKeyRef pubKeyRef = (SecKeyRef)CFArrayGetValueAtIndex(items, 0);
  17. NSData *signedData = [NSData dataWithBytes:buf length:len];
  18. NSData *signature = [NSData dataWithBytes:sig length:sigLen];
  19. CFErrorRef errRef;
  20. bool result = SecKeyVerifySignature(
  21. pubKeyRef, kSecKeyAlgorithmRSASignatureMessagePKCS1v15SHA512,
  22. (__bridge CFDataRef)signedData, (__bridge CFDataRef)signature,
  23. &errRef);
  24. CFRelease(items);
  25. return result;
  26. };