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;
            }
        private byte[] ProcessSymmetricKeyDataForEcdh(IPgpPrivateKey privKey, IList<IBigInteger> symmetricKeyData)
        {
            var encSymKey = symmetricKeyData[1].ToByteArrayUnsigned();
            var privateKey = (ECDHPrivateKeyParameters)privKey.Key;
            var publicKey = privateKey.PublicKeyParameters;
            var ephemeralKey = ECDHPublicKeyParameters.Create(symmetricKeyData[0], publicKey.PublicKeyParamSet, publicKey.HashAlgorithm, publicKey.SymmetricKeyAlgorithm);

            var engine = new RFC6637ECDHEngine();
            engine.InitForDecryption(privateKey, ephemeralKey);
            return engine.ProcessBlock(encSymKey, 0, encSymKey.Length);
        }