encryption - Bouncy Castle C# PGP Decryption example -


i have been looking day yesterday, , can't seem find working example of pgp decryption using bouncy castle in c#

finally got work. main issue had other samples fact private key ring had included key signing coming first when trying load key decryption. why why had add check elgamalprivatekeyparameters type on key.

below code. not clean, works.

        private static pgpprivatekey getprivatekey(string privatekeypath)     {         using (stream keyin = file.openread(privatekeypath))         using (stream inputstream = pgputilities.getdecoderstream(keyin))         {             pgpsecretkeyringbundle secretkeyringbundle = new pgpsecretkeyringbundle(inputstream);              pgpsecretkey key = null;             foreach (pgpsecretkeyring kring in secretkeyringbundle.getkeyrings())             {                 foreach (pgpsecretkey secretkey in kring.getsecretkeys())                 {                     pgpprivatekey privkey = secretkey.extractprivatekey("1234567890".tochararray());                      if (privkey.key.gettype() ==                         typeof (org.bouncycastle.crypto.parameters.elgamalprivatekeyparameters))                         //org.bouncycastle.crypto.parameters.elgamalprivatekeyparameters                     {                         return privkey;                     }                 }              }         }          return null;     }          public static void decrypt(stream input, string outputpath, string privatekeypath)     {         input = pgputilities.getdecoderstream(input);         try         {             pgpobjectfactory pgpobjf = new pgpobjectfactory(input);             pgpencrypteddatalist enc;             pgpobject obj = pgpobjf.nextpgpobject();             if (obj pgpencrypteddatalist)             {                 enc = (pgpencrypteddatalist)obj;             }             else             {                 enc = (pgpencrypteddatalist)pgpobjf.nextpgpobject();             }              var akp = new asymmetrickeyparameter(true);                pgpprivatekey privkey = getprivatekey(privatekeypath);               pgppublickeyencrypteddata pbe = enc.getencrypteddataobjects().cast<pgppublickeyencrypteddata>().first();             stream clear;             clear = pbe.getdatastream(privkey);             pgpobjectfactory plainfact = new pgpobjectfactory(clear);             pgpobject message = plainfact.nextpgpobject();             if (message pgpcompresseddata)             {                 pgpcompresseddata cdata = (pgpcompresseddata)message;                 stream compdatain = cdata.getdatastream();                 pgpobjectfactory o = new pgpobjectfactory(compdatain);                 message = o.nextpgpobject();                 if (message pgponepasssignaturelist)                 {                     message = o.nextpgpobject();                     pgpliteraldata ld = null;                     ld = (pgpliteraldata)message;                     stream output = file.create(outputpath + "\\" + ld.filename);                     stream unc = ld.getinputstream();                     streams.pipeall(unc, output);                 }                 else                 {                     pgpliteraldata ld = null;                     ld = (pgpliteraldata)message;                     //stream output = file.create(outputpath + "\\" + ld.filename);                     stream output = file.create(outputpath);                     stream unc = ld.getinputstream();                     streams.pipeall(unc, output);                 }             }         }         catch (exception e)         {             throw new exception(e.message);         }     } 

Comments

Popular posts from this blog

django - How can I change user group without delete record -

java - Need to add SOAP security token -

java - EclipseLink JPA Object is not a known entity type -