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 }
public static partial ECDiffieHellman Create(ECParameters parameters) { ECDiffieHellman ecdh = new ECDiffieHellmanCng(); try { ecdh.ImportParameters(parameters); return(new ECDiffieHellmanWrapper(ecdh)); } catch { ecdh.Dispose(); throw; } }
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)); } }