7

アプリのデータファイルに署名するためにデジタル証明書を使用しています。以下のコードフラグメントは、への呼び出しがSecKeyRawVerify-9809で戻ると失敗します。これはiPhoneで実行されています。このエラーコードの意味を正確に特定することすらできません

公開鍵を取得するSecTrustRefをロードして作成するための以前のセキュリティフレームワークの呼び出しは問題ないようです。エラーはありません。唯一のわずかな問題は、への呼び出しがをSecTrustEvaluate返すkSecTrustResultUnspecifiedことですが、それは私が使用しているポリシーがSecPolicyCreateBasicX509呼び出しによって返された定型文であるためだと思います。

任意の支援や洞察をいただければ幸いです。

ありがとう

SecKeyRef keyRef = SecTrustCopyPublicKey (trustRef);

fileURL = [[NSBundle mainBundle] URLForResource:@"data" withExtension:@"txt"];
NSData *data = [NSData dataWithContentsOfURL:fileURL];

fileURL = [[NSBundle mainBundle] URLForResource:@"data" withExtension:@"sgn"];
NSData *signature = [NSData dataWithContentsOfURL:fileURL];

NSLog(@"Hash block size = %zu",SecKeyGetBlockSize(keyRef));

status = SecKeyRawVerify (keyRef,
                          kSecPaddingPKCS1SHA1,
                          (const uint8_t *)[data bytes],
                          (size_t)[data length],
                          (const uint8_t *)[signature bytes],
                          (size_t)[signature length]
                          );
4

2 に答える 2

3

そのエラーは、(他の関連するエラーとともに)/System/Library/Frameworks/Security.framework/Headers/SecureTransport.hとして定義されerrSSLCryptoます。そこでのコメントは、それを「根本的な暗号化エラー」と呼んでいますが、これは特に説明的な説明ではありません。

1つの考え:kSecTrustResultUnspecified信頼レベルがデフォルトのシステムポリシーと等しいことを意味します。チェーン内のすべての証明書は信頼されていますか?

于 2012-05-26T01:58:36.987 に答える
2

私は何が起こっているのかを発見しました。呼び出しは、データ自体ではなく、データのSecKeyRawVerifyダイジェストを入力として受け取ります。以下のコードは機能します。ちなみに、基になるデータが変更されたために署名が検証されない場合、ステータスの戻り値は-9809になります。

ありがとう

CC_SHA1((const void *)[data bytes], [data length], (unsigned char *)hash);

status = SecKeyRawVerify (keyRef,
                          kSecPaddingPKCS1SHA1,
                          hash,
                          20,
                          (const uint8_t *)[signature bytes],
                          SecKeyGetBlockSize(keyRef)
                          );
于 2012-05-27T07:30:09.367 に答える