AquaticPrimeフレームワークをMacに移植しようとしています。CryptoAPI:公開鍵を使用してCryptVerifySignatureを使用してopensslから署名を検証する
Macでは、opensllライブラリを使用しています。これをWindowsに移植する方法を理解しようとしています.CryptoAPIを使用する必要があります。
私は主に、生成された署名を特定の公開鍵で検証するコードが必要です。
はここで検証はopensslので行われている方法は次のとおりです。
- 入力:ライセンスデータ、公開鍵と署名、両方の128バイト長。
- SHA1ダイジェストは、ライセンスデータから計算されます。
- RSAコンテキストが公開鍵データで設定されている
- RSA鍵と20バイトの長さのSHA1ダイジェストを返す署名を指定すると、RSA_public_decrypt()が呼び出されます。このダイジェストはステップ2のものと等しく、署名は有効です。
CryptoAPIでこれを行うにはどうすればよいですか?私はこれまでのところ得ている:
- スタートをCryptAcquireContext(CTX、0、0、PROV_RSA_FULL、CRYPT_VERIFYCONTEXT)this投稿の助けを借りて
- 使用CryptImportKeyで、pubexp = 3とbitlen = 1024で。それはすべて動作します。つまり、エラーは発生しません。バイナリデータを参照して、MSDN記事の内容と一致することを確認します。
- ライセンスデータからSHA1ダイジェストを作成します。結果の20バイトのハッシュ値を取得し、Mac上のopensslと一致することを確認しました。この時点で
、私が呼ん:
CryptVerifySignature (hashHdl, sig, sigLen, keyHdl, 0, 0)
これは、エラーコードERROR_INVALID_PARAMETERで失敗します。
奇妙なことは、私が誤ってPUBLICKEYBLOB構造体に2倍の大きさの公開鍵を格納してしまったときに、代わりにNTE_BAD_SIGNATUREエラーが発生したことです。これは、私が渡している公開鍵が正しいことを示唆するかもしれません。
なぜERROR_INVALID_PARAMETERエラーが発生しましたか?私は、ハッシュ値が正しいことを確認し、鍵も受け入れられるように見えます。 "sig"パラメータは128バイトの署名のポインタにすぎず、sigLenは128です。
ここで私は何が分かりませんか?
質問:あなたはいくつかの[Windows移植](http://www.slproweb.com/products/Win32OpenSSL.html)バージョンのOpenSSLを使用してみませんか?私はCryptoAPIの使用に間違いはないが、openSSLは既に存在しているため、作業が少なくて済むことを意味する。 – erloewe
私は新しいシステムコンポーネントをインストールするだけでインストーラを必要としないアプリケーションを実行する必要はない。 –