Beispiel #1
0
        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);
                    }
                }
            }
        }
Beispiel #3
0
        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()));
                            }
                        }
                    }
                }
            }
        }
Beispiel #8
0
        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());
        }