internal PgpPublicKey(IPgpPublicKey key, ITrustPacket trust, IList <IPgpSignature> subSigs)
        {
            _publicPk = key.PublicKeyPacket;
            _trustPk  = trust;
            _subSigs  = subSigs;

            _fingerprint = key.GetFingerprint();
            KeyId        = key.KeyId;
            BitStrength  = key.BitStrength;
        }
        /// <summary>Copy constructor.</summary>
        /// <param name="pubKey">The public key to copy.</param>
        internal PgpPublicKey(IPgpPublicKey pubKey)
        {
            _publicPk = pubKey.PublicKeyPacket;

            _keySigs  = Platform.CreateArrayList(pubKey.KeySigs);
            _ids      = Platform.CreateArrayList(pubKey.Ids);
            _idTrusts = Platform.CreateArrayList(pubKey.IdTrusts);
            _idSigs   = Platform.CreateArrayList(pubKey.IdSigs);

            if (pubKey.SubSigs != null)
            {
                _subSigs = Platform.CreateArrayList(pubKey.SubSigs);
            }

            _fingerprint = pubKey.GetFingerprint();
            KeyId        = pubKey.KeyId;
            BitStrength  = pubKey.BitStrength;
        }
        /// <summary>Copy constructor.</summary>
        /// <param name="pubKey">The public key to copy.</param>
        internal PgpPublicKey(IPgpPublicKey pubKey)
        {
            _publicPk = pubKey.PublicKeyPacket;

            _keySigs = Platform.CreateArrayList(pubKey.KeySigs);
            _ids = Platform.CreateArrayList(pubKey.Ids);
            _idTrusts = Platform.CreateArrayList(pubKey.IdTrusts);
            _idSigs = Platform.CreateArrayList(pubKey.IdSigs);

            if (pubKey.SubSigs != null)
            {
                _subSigs = Platform.CreateArrayList(pubKey.SubSigs);
            }

            _fingerprint = pubKey.GetFingerprint();
            KeyId = pubKey.KeyId;
            BitStrength = pubKey.BitStrength;
        }
        internal PgpPublicKey(IPgpPublicKey key, ITrustPacket trust, IList<IPgpSignature> subSigs)
        {
            _publicPk = key.PublicKeyPacket;
            _trustPk = trust;
            _subSigs = subSigs;

            _fingerprint = key.GetFingerprint();
            KeyId = key.KeyId;
            BitStrength = key.BitStrength;
        }
            private void AddEdchSessionInfo(byte[] si, ISecureRandom random)
            {
                ECDHPublicKeyParameters ephemeralPublicKey;

                var engine = new RFC6637ECDHEngine();

                engine.InitForEncryption(random, (ECDHPublicKeyParameters)_pubKey.GetKey(), _pubKey.GetFingerprint(), out ephemeralPublicKey);
                var encSession = engine.ProcessBlock(si, 0, si.Length);

                _data = new[]
                {
                    new BigInteger(1, ephemeralPublicKey.Q.GetEncoded()),
                };
                _extraData = encSession;
            }