/// <summary>
        /// Returns a new key ring with the secret key passed in either added or
        /// replacing an existing one with the same key ID.
        /// </summary>
        /// <param name="secRing">The secret key ring to be modified.</param>
        /// <param name="secKey">The secret key to be inserted.</param>
        /// <returns>A new <c>PgpSecretKeyRing</c></returns>
        public static PgpSecretKeyRing InsertSecretKey(IPgpSecretKeyRing secRing, IPgpSecretKey secKey)
        {
            var keys        = Platform.CreateArrayList(secRing.GetSecretKeys());
            var found       = false;
            var masterFound = false;

            for (var i = 0; i != keys.Count; i++)
            {
                var key = keys[i];

                if (key.KeyId == secKey.KeyId)
                {
                    found   = true;
                    keys[i] = secKey;
                }
                if (key.IsMasterKey)
                {
                    masterFound = true;
                }
            }

            if (!found)
            {
                if (secKey.IsMasterKey)
                {
                    if (masterFound)
                    {
                        throw new ArgumentException("cannot add a master key to a ring that already has one");
                    }

                    keys.Insert(0, secKey);
                }
                else
                {
                    keys.Add(secKey);
                }
            }

            return(new PgpSecretKeyRing(keys, secRing.GetExtraPublicKeys()));
        }
        /// <summary>
        /// Returns a new key ring with the secret key passed in either added or
        /// replacing an existing one with the same key ID.
        /// </summary>
        /// <param name="secRing">The secret key ring to be modified.</param>
        /// <param name="secKey">The secret key to be inserted.</param>
        /// <returns>A new <c>PgpSecretKeyRing</c></returns>
        public static PgpSecretKeyRing InsertSecretKey(IPgpSecretKeyRing secRing, IPgpSecretKey secKey)
        {
            var keys = Platform.CreateArrayList(secRing.GetSecretKeys());
            var found = false;
            var masterFound = false;

            for (var i = 0; i != keys.Count; i++)
            {
                var key = keys[i];

                if (key.KeyId == secKey.KeyId)
                {
                    found = true;
                    keys[i] = secKey;
                }
                if (key.IsMasterKey)
                {
                    masterFound = true;
                }
            }

            if (!found)
            {
                if (secKey.IsMasterKey)
                {
                    if (masterFound)
                        throw new ArgumentException("cannot add a master key to a ring that already has one");

                    keys.Insert(0, secKey);
                }
                else
                {
                    keys.Add(secKey);
                }
            }

            return new PgpSecretKeyRing(keys, secRing.GetExtraPublicKeys());
        }
        private void CheckEccKey(IPgpSecretKeyRing secretKeyRing)
        {
            var keyCount = 0;

            var bytes = secretKeyRing.GetEncoded();

            var pgpSec2 = new PgpSecretKeyRing(bytes);

            foreach (PgpSecretKey k in pgpSec2.GetSecretKeys())
            {
                keyCount++;
                var pk = k.PublicKey;

                pk.GetSignatures();

                var pkBytes = pk.GetEncoded();

                var pkR1 = new PgpPublicKeyRing(pkBytes);
                Assert.IsNotNull(pkR1);
                var pk1 = pkR1.GetPublicKey();

                AreEqual(pk1.GetFingerprint(), pk.GetFingerprint());

                var pkBytes1 = pkR1.GetEncoded();

                var pkR2 = new PgpPublicKeyRing(pkBytes1);
                Assert.IsNotNull(pkR2);

                var pkBytes2 = pkR2.GetEncoded();

                AreEqual(pkBytes1, pkBytes2);
            }

            if (keyCount != secretKeyRing.SecretKeyCount)
            {
                Fail("wrong number of secret keys");
            }
        }