2017-07-18 56 views
1

自分の秘密鍵を使用して他のユーザの公開鍵に署名できるように、自分のアプリケーションで信頼できるWebを作成したいと思っています。C#のBouncy Castleで公開PGP鍵を署名する方法

私が持っているほとんどのものは、そのような(MimeKitを使用して)それらに署名、暗号、PGP鍵を作成するHTTP RESTを使用してキーのサーバーにそれらを提出、MIMEメッセージを暗号化して、考え出した - しかし、ハードルを残りの1つは、把握することですBouncy Castleを使用して、私の秘密鍵を使用して別の人の公開鍵に署名するためのコードの一部。

BCのドキュメントが恐ろしいですので、これらの部品を考え出す、以前には不可能に近いであることが証明された

...レコードの

、私はキーの私のストレージとしてのGnuPGを使用しています。

これまで行ってきたことについて、誰かが自分のコードを見たいと思っている人は、hereをチェックしてみてください。

私はおそらくここでこれを尋ねるはずではありませんが、そこにいるBCの看護師が私のコードを一般的に見ることができ、私が自分自身をばかにした私がこれまで行ってきたものを...

答えて

0

が試行錯誤の多くの後に答えを見つけることが、ここにある...

private static byte[] SignPublicKey(
    PgpSecretKey secretKey, 
    string password, 
    PgpPublicKey keyToBeSigned, 
    bool isCertain) 
{ 
    // Extracting private key, and getting ready to create a signature. 
    PgpPrivateKey pgpPrivKey = secretKey.ExtractPrivateKey (password.ToCharArray()); 
    PgpSignatureGenerator sGen = new PgpSignatureGenerator (secretKey.PublicKey.Algorithm, HashAlgorithmTag.Sha1); 
    sGen.InitSign (isCertain ? PgpSignature.PositiveCertification : PgpSignature.CasualCertification, pgpPrivKey); 

    // Creating a stream to wrap the results of operation. 
    Stream os = new MemoryStream(); 
    BcpgOutputStream bOut = new BcpgOutputStream (os); 
    sGen.GenerateOnePassVersion (false).Encode (bOut); 

    // Creating a generator. 
    PgpSignatureSubpacketGenerator spGen = new PgpSignatureSubpacketGenerator(); 
    PgpSignatureSubpacketVector packetVector = spGen.Generate(); 
    sGen.SetHashedSubpackets (packetVector); 
    bOut.Flush(); 

    // Returning the signed public key. 
    return PgpPublicKey.AddCertification (keyToBeSigned, sGen.Generate()).GetEncoded(); 
} 
+0

これはあなたの質問を解決する場合は、あなたが望むかもしれませんそれを受け入れられた答えとしてマークします。それは将来人々を助けることができ、彼らはここでそれを奨励します。 https://stackoverflow.com/help/self-answer – user8675309

関連する問題