internal PgpKeyRingBundle(IEnumerable e) { this.secretRings = Platform.CreateHashtable(); this.pubRings = Platform.CreateHashtable(); this.order = Platform.CreateArrayList(); foreach (object obj in e) { if (obj is PgpSecretKeyRing) { PgpSecretKeyRing pgpSecret = obj as PgpSecretKeyRing; long key = pgpSecret.GetPublicKey().KeyId; secretRings.Add(key, pgpSecret); order.Add(key); } else if (obj is PgpPublicKeyRing) { PgpPublicKeyRing pgpPub = obj as PgpPublicKeyRing; long key = pgpPub.GetPublicKey().KeyId; pubRings.Add(key, pgpPub); order.Add(key); } } }
/// <summary> /// Implementation of your slot. /// </summary> /// <param name="signaler">Signaler that raised the signal.</param> /// <param name="input">Arguments to your slot.</param> public void Signal(ISignaler signaler, Node input) { // Sanity checking invocation. var keyPlainText = input.GetEx <string>() ?? throw new ArgumentException("No value provided to [pgp.keys.private.import]"); var lambda = input.Children.FirstOrDefault(x => x.Name == ".lambda") ?? throw new ArgumentException("No [.lambda] provided to [pgp.keys.private.import]"); // Unwrapping key(s) and iterating through them, importing them one at the time. using (var memStream = new MemoryStream(Encoding.UTF8.GetBytes(keyPlainText))) { using (var armored = new ArmoredInputStream(memStream)) { var key = new PgpSecretKeyRing(armored); foreach (PgpSecretKey idxKey in key.GetSecretKeys()) { InvokeLambda(signaler, lambda, idxKey); } // Then doing public key for master key in secret key chain. var publicKey = key.GetPublicKey(); if (publicKey != null) { PgpKeysPublicImport.InvokeLambda(signaler, lambda, publicKey); } } } }
public async Task TestSignAndEncrypt(IFile file) { var expectedSha256 = await file.GetSHA256Async(); var actualSha256 = await file .ToSignedAndEncrypted(_publicKey, _privateKey, "test") .ToVerifiedAndDecrypted(_privateKey.GetPublicKey(), _privateKey, "test") .GetSHA256Async(); Assert.Equal(expectedSha256, actualSha256); }
public static PgpSecretKeyRingBundle RemoveSecretKeyRing(PgpSecretKeyRingBundle bundle, PgpSecretKeyRing secretKeyRing) { long keyId = secretKeyRing.GetPublicKey().KeyId; if (!bundle.secretRings.Contains(keyId)) { throw new ArgumentException("Collection does not contain a key with a keyId for the passed in ring."); } IDictionary dictionary = Platform.CreateHashtable(bundle.secretRings); IList list = Platform.CreateArrayList(bundle.order); dictionary.Remove(keyId); list.Remove(keyId); return(new PgpSecretKeyRingBundle(dictionary, list)); }
public PgpSecretKeyRingBundle(IEnumerable e) { secretRings = Platform.CreateHashtable(); order = Platform.CreateArrayList(); foreach (object item in e) { PgpSecretKeyRing pgpSecretKeyRing = item as PgpSecretKeyRing; if (pgpSecretKeyRing == null) { throw new PgpException(Platform.GetTypeName(item) + " found where PgpSecretKeyRing expected"); } long keyId = pgpSecretKeyRing.GetPublicKey().KeyId; secretRings.Add(keyId, pgpSecretKeyRing); order.Add(keyId); } }
private static void p5_crypto_import_private_pgp_key(ApplicationContext context, ActiveEventArgs e) { // House cleaning using (new ArgsRemover(e.Args, true)) { // Creating new GnuPG context using (var ctx = new GnuPrivacyContext(true)) { // Looping through each public key (in ascii armored format) and importing into GnuPG database foreach (var idxKey in XUtil.Iterate <string> (context, e.Args)) { // Creating armored input stream to wrap key using (var memStream = new MemoryStream(Encoding.UTF8.GetBytes(idxKey.Replace("\r\n", "\n")))) { using (var armored = new ArmoredInputStream(memStream)) { var key = new PgpSecretKeyRing(armored); ctx.Import(key); e.Args.Add(BitConverter.ToString(key.GetPublicKey().GetFingerprint()).Replace("-", "")); } } } } } }
static void p5_crypto_pgp_keys_private_import(ApplicationContext context, ActiveEventArgs e) { // House cleaning. using (new ArgsRemover(e.Args, true)) { // Creating new PGP context. using (var ctx = context.RaiseEvent(".p5.crypto.pgp-keys.context.create", new Node("", true)).Get <OpenPgpContext> (context)) { // Looping through each private key (in ascii armored format) and importing into context. foreach (var idxKey in XUtil.Iterate <string> (context, e.Args)) { // Creating armored input stream to wrap key. using (var memStream = new MemoryStream(Encoding.UTF8.GetBytes(idxKey.Replace("\r\n", "\n")))) { using (var armored = new ArmoredInputStream(memStream)) { var key = new PgpSecretKeyRing(armored); ctx.Import(key); // Returning fingerprint of key that was successfully imported to caller. e.Args.Add(Fingerprint.FingerprintString(key.GetPublicKey().GetFingerprint())); } } } } } }
public void TestMethod1() { string secretKeyFile = @"-----BEGIN PGP PRIVATE KEY BLOCK----- Version: BCPG C# v1.7.4137.9688 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 BQ7R6w== =Z4JC -----END PGP PRIVATE KEY BLOCK-----"; File.WriteAllText(Path.Combine(@"C:\Users\John\BcPGP", "testuser1@example_com_secret.asc"), secretKeyFile); MemoryStream msSec = new MemoryStream(Encoding.UTF8.GetBytes(secretKeyFile)); PgpSecretKeyRing secRing = new PgpSecretKeyRing(PgpUtilities.GetDecoderStream(msSec)); char[] passPhrase = new char[] { 't', 'e', 's', 't', 'u', 's', 'e', 'r' }; PgpPublicKeyRing pubRing = new PgpPublicKeyRing(secRing.GetPublicKey().GetEncoded()); PgpPublicKeyRing newRing = new PgpPublicKeyRing( new MemoryStream(RevokePublicKey(secRing.GetSecretKey(), passPhrase, pubRing.GetPublicKey(), true))); msSec.Close(); Assert.IsTrue(newRing.GetPublicKey().IsRevoked()); Stream fos = File.Create(@"C:\Users\John\BcPGP\RevokedKey.asc"); ArmoredOutputStream aOut = new ArmoredOutputStream(fos); newRing.Encode(aOut); aOut.Close(); fos.Close(); PgpSecretKey newSecret = PgpSecretKey.ReplacePublicKey(secRing.GetSecretKey(), newRing.GetPublicKey()); Stream foSec = File.Create(@"C:\Users\John\BcPGP\SecretRevokedKey.asc"); ArmoredOutputStream sOut = new ArmoredOutputStream(foSec); newSecret.Encode(sOut); sOut.Close(); foSec.Close(); Assert.IsTrue(newSecret.PublicKey.IsRevoked()); }