2017-07-18 120 views
1

我想在我的應用程序中創建信任支持Web,以允許我的用戶使用其私鑰簽署其他用戶的公鑰 - 使用C#和Bouncy Castle。如何在C中使用Bouncy Castle簽署公共PGP密鑰#

我已經弄清了大部分東西,例如創建PGP密鑰,使用HTTP REST將密鑰服務器提交給密鑰服務器,加密MIME消息並對密碼簽名(使用MimeKit) - 但剩下的一個障礙是弄清楚一些可以使用我的私鑰的代碼,使用Bouncy Castle來簽署另一個人的公鑰。

由於對BC的文檔是可怕的,找出這些部分,先前已經被證明幾乎是不可能的......

爲了記錄在案,我使用GnuPG的作爲我的存儲鑰匙。

如果有人想看我的代碼到目前爲止我所做的事情,請隨時查看here

我可能不應該問這裏,但我也很喜歡它,如果一些卑詩大師在那裏可以有一個普遍看我的代碼到目前爲止,並檢查我是否做了一個愚蠢的我自己東西我到目前爲止已經完成了...

回答

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

相關問題