Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class ECDHx : IDisposable
- {
- public enum ECDiffieHellmanModes
- {
- MD5,
- SHA1,
- SHA256,
- SHA384,
- SHA512
- }
- internal readonly ECDiffieHellmanCng ecdh;
- public byte[] PublicKey { get; }
- public ECDHx(ECDiffieHellmanModes Mode)
- {
- ecdh = new ECDiffieHellmanCng();
- ecdh.KeyDerivationFunction = ECDiffieHellmanKeyDerivationFunction.Hash;
- switch (Mode)
- {
- case ECDiffieHellmanModes.MD5:
- ecdh.HashAlgorithm = CngAlgorithm.MD5;
- break;
- case ECDiffieHellmanModes.SHA1:
- ecdh.HashAlgorithm = CngAlgorithm.Sha1;
- break;
- case ECDiffieHellmanModes.SHA256:
- ecdh.HashAlgorithm = CngAlgorithm.Sha256;
- break;
- case ECDiffieHellmanModes.SHA384:
- ecdh.HashAlgorithm = CngAlgorithm.Sha384;
- break;
- case ECDiffieHellmanModes.SHA512:
- ecdh.HashAlgorithm = CngAlgorithm.Sha512;
- break;
- }
- PublicKey = ecdh.PublicKey.ToByteArray();
- }
- public byte[] DeriveSharedKey(byte[] PublicKey)
- {
- byte[] SharedKey = ecdh.DeriveKeyMaterial(ECDiffieHellmanCngPublicKey.FromByteArray(PublicKey, CngKeyBlobFormat.EccPublicBlob));
- return SharedKey;
- }
- public void Dispose() => ecdh.Dispose();
- }
Advertisement
Add Comment
Please, Sign In to add comment