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;
            }
 /// <summary>
 /// Inits the verification process.
 /// </summary>
 /// <param name="pubKey">The pub key.</param>
 /// <exception cref="PgpException">invalid key.</exception>
 public void InitVerify(IPgpPublicKey pubKey)
 {
     _lastb = 0;
     if (_sig == null)
     {
         _sig = SignerUtilities.GetSigner(PgpUtilities.GetSignatureName(_sigPck.KeyAlgorithm, _sigPck.HashAlgorithm));
     }
     try
     {
         _sig.Init(false, pubKey.GetKey());
     }
     catch (InvalidKeyException e)
     {
         throw new PgpException("invalid key.", e);
     }
 }
 /// <summary>
 /// Inits the verification process.
 /// </summary>
 /// <param name="pubKey">The pub key.</param>
 /// <exception cref="PgpException">invalid key.</exception>
 public void InitVerify(IPgpPublicKey pubKey)
 {
     _lastb = 0;
     if (_sig == null)
     {
         _sig = SignerUtilities.GetSigner(PgpUtilities.GetSignatureName(_sigPck.KeyAlgorithm, _sigPck.HashAlgorithm));
     }
     try
     {
         _sig.Init(false, pubKey.GetKey());
     }
     catch (InvalidKeyException e)
     {
         throw new PgpException("invalid key.", e);
     }
 }