Beispiel #1
0
        public static ByteString DecryptString(Hash em, ECKeyPair keyPair)
        {
#if NETCOREAPP
            throw new NotImplementedException();
#else
            ECParameters parameters = new ECParameters();
            byte[]       ems        = em;
            parameters.Q.X   = ems.Skip(1).Take(32).ToArray();
            parameters.Q.Y   = ems.Skip(33).Take(32).ToArray();
            parameters.D     = keyPair.D;
            parameters.Curve = keyPair.ECParameters.Curve;
            parameters.Validate();
            using (var ecDiffieHellmanCng = new ECDiffieHellmanCng())
            {
                ecDiffieHellmanCng.ImportParameters(parameters);
                var ek = ecDiffieHellmanCng.DeriveKeyFromHash(ecDiffieHellmanCng.PublicKey, HashAlgorithmName.SHA256, null, new byte[] { 0, 0, 0, 1 });
                using (RijndaelManaged aes = new RijndaelManaged())
                {
                    aes.Padding = PaddingMode.PKCS7;
                    var d  = aes.CreateDecryptor(ek, new byte[16]);
                    var bs = d.TransformFinalBlock(ems.Skip(65).Take(ems.Length - 65 - 32).ToArray(), 0,
                                                   ems.Length - 65 - 32);
                    return(bs);
                }
            }
#endif
        }
Beispiel #2
0
        public static partial ECDiffieHellman Create(ECParameters parameters)
        {
            ECDiffieHellman ecdh = new ECDiffieHellmanCng();

            try
            {
                ecdh.ImportParameters(parameters);
                return(new ECDiffieHellmanWrapper(ecdh));
            }
            catch
            {
                ecdh.Dispose();
                throw;
            }
        }
Beispiel #3
0
        public ICertificatePal CopyWithPrivateKey(ECDiffieHellman ecdh)
        {
            ECDiffieHellmanCng?ecdhCng = ecdh as ECDiffieHellmanCng;

            if (ecdhCng != null)
            {
                ICertificatePal?clone = CopyWithPersistedCngKey(ecdhCng.Key);

                if (clone != null)
                {
                    return(clone);
                }
            }

            ECParameters privateParameters = ecdh.ExportParameters(true);

            using (PinAndClear.Track(privateParameters.D !))
                using (ECDiffieHellmanCng clonedKey = new ECDiffieHellmanCng())
                {
                    clonedKey.ImportParameters(privateParameters);

                    return(CopyWithEphemeralKey(clonedKey.Key));
                }
        }