ファイル、署名ファイル、X509証明書ファイル.cerの3つがあります。ファイルは、証明書の公開鍵と署名ファイルを使用して検証する必要があります。Security.h/CommonCryptoを使用して実行したいと思います。
私がこれまでに試したこと:
// load all the files
NSData* fileData = [NSData dataWithContentsOfFile:(...)];
NSData* signatureData = [NSData dataWithContentsOfFile:(...)];
NSData* certificateData = [NSData dataWithContentsOfFile:(...)];
SecCertificateRef certificate = SecCertificateCreateWithData(NULL, CFBridgingRetain(certificateData)); // load the certificate
証明書は問題なくロードされます。名前は以下を使って確認できます
CFStringRef certificateDescription = SecCertificateCopySubjectSummary(certificate);
動作します。iOSには公開鍵を直接コピーする方法がないように思われるので、最初に信頼を作成します。
SecTrustRef trust;
OSStatus statusTrust = SecTrustCreateWithCertificates( certificate, secPolicy, &trust);
SecTrustResultType resultType;
OSStatus statusTrustEval = SecTrustEvaluate(trust, &resultType);
これはすべて、errSecSuccessの結果で正常に機能します。
今、私は公開鍵を取得しようとしています。
SecKeyRef publicKey;
publicKey = SecTrustCopyPublicKey(trust);
size_t keysize = SecKeyGetBlockSize(publicKey);
しかし、publicKeyの内容
NSData* keyData = [NSData dataWithBytes:publicKey length:keysize];
.cerファイルを開いたときに表示される公開鍵と同じではありません。ですから、これが一番の問題です。
次に、公開鍵が間違っていることがわかっていても、署名を検証しようとします。パディングは正しいです。
OSStatus verficationResult = SecKeyRawVerify(publicKey, kSecPaddingPKCS1, [fileData bytes], [fileData length], [signatureData bytes], [signatureData length]);
これは、OSStatusが-9809の場合に失敗します(操作を完了できませんでした)。–25293errSecAuthFailedになると思います。
私は根本的に間違ったことをしていますか?