diff --git a/src/Renci.SshNet/Security/Cryptography/ED25519DigitalSignature.cs b/src/Renci.SshNet/Security/Cryptography/ED25519DigitalSignature.cs
index 5b39b09ff..41cfe1f74 100644
--- a/src/Renci.SshNet/Security/Cryptography/ED25519DigitalSignature.cs
+++ b/src/Renci.SshNet/Security/Cryptography/ED25519DigitalSignature.cs
@@ -1,7 +1,8 @@
using System;
+using Org.BouncyCastle.Math.EC.Rfc8032;
+
using Renci.SshNet.Common;
-using Renci.SshNet.Security.Chaos.NaCl;
namespace Renci.SshNet.Security.Cryptography
{
@@ -39,7 +40,7 @@ public ED25519DigitalSignature(ED25519Key key)
/// Invalid signature.
public override bool Verify(byte[] input, byte[] signature)
{
- return Ed25519.Verify(signature, input, _key.PublicKey);
+ return Ed25519.Verify(signature, 0, _key.PublicKey, 0, input, 0, input.Length);
}
///
@@ -52,7 +53,9 @@ public override bool Verify(byte[] input, byte[] signature)
/// Invalid ED25519Key key.
public override byte[] Sign(byte[] input)
{
- return Ed25519.Sign(input, _key.PrivateKey);
+ var signature = new byte[Ed25519.SignatureSize];
+ Ed25519.Sign(_key.PrivateKey, 0, _key.PublicKey, 0, input, 0, input.Length, signature, 0);
+ return signature;
}
///
diff --git a/src/Renci.SshNet/Security/Cryptography/ED25519Key.cs b/src/Renci.SshNet/Security/Cryptography/ED25519Key.cs
index 5ee2332c0..705924635 100644
--- a/src/Renci.SshNet/Security/Cryptography/ED25519Key.cs
+++ b/src/Renci.SshNet/Security/Cryptography/ED25519Key.cs
@@ -1,7 +1,8 @@
using System;
+using Org.BouncyCastle.Math.EC.Rfc8032;
+
using Renci.SshNet.Common;
-using Renci.SshNet.Security.Chaos.NaCl;
using Renci.SshNet.Security.Cryptography;
namespace Renci.SshNet.Security
@@ -49,7 +50,7 @@ public override int KeyLength
{
get
{
- return PublicKey.Length * 8;
+ return Ed25519.PublicKeySize * 8;
}
}
@@ -91,8 +92,7 @@ public ED25519Key(SshKeyData publicKeyData)
throw new ArgumentException($"Invalid Ed25519 public key data ({publicKeyData.Name}, {publicKeyData.Keys.Length}).", nameof(publicKeyData));
}
- PublicKey = publicKeyData.Keys[0].ToByteArray().Reverse().TrimLeadingZeros().Pad(Ed25519.PublicKeySizeInBytes);
- PrivateKey = new byte[Ed25519.ExpandedPrivateKeySizeInBytes];
+ PublicKey = publicKeyData.Keys[0].ToByteArray().Reverse().TrimLeadingZeros().Pad(Ed25519.PublicKeySize);
}
///
@@ -103,11 +103,10 @@ public ED25519Key(SshKeyData publicKeyData)
///
public ED25519Key(byte[] privateKeyData)
{
- var seed = new byte[Ed25519.PrivateKeySeedSizeInBytes];
- Buffer.BlockCopy(privateKeyData, 0, seed, 0, seed.Length);
- Ed25519.KeyPairFromSeed(out var publicKey, out var privateKey, seed);
- PublicKey = publicKey;
- PrivateKey = privateKey;
+ PrivateKey = new byte[Ed25519.SecretKeySize];
+ PublicKey = new byte[Ed25519.PublicKeySize];
+ Buffer.BlockCopy(privateKeyData, 0, PrivateKey, 0, Ed25519.SecretKeySize);
+ Ed25519.GeneratePublicKey(privateKeyData, 0, PublicKey, 0);
}
///
diff --git a/src/Renci.SshNet/Security/SshKeyData.cs b/src/Renci.SshNet/Security/SshKeyData.cs
index 6a3af835a..fa0671459 100644
--- a/src/Renci.SshNet/Security/SshKeyData.cs
+++ b/src/Renci.SshNet/Security/SshKeyData.cs
@@ -1,8 +1,9 @@
using System.Collections.Generic;
using System.Text;
+using Org.BouncyCastle.Math.EC.Rfc8032;
+
using Renci.SshNet.Common;
-using Renci.SshNet.Security.Chaos.NaCl;
namespace Renci.SshNet.Security
{
@@ -88,7 +89,7 @@ protected override void SaveData()
var keyData = key.ToByteArray().Reverse();
if (Name == "ssh-ed25519")
{
- keyData = keyData.TrimLeadingZeros().Pad(Ed25519.PublicKeySizeInBytes);
+ keyData = keyData.TrimLeadingZeros().Pad(Ed25519.PublicKeySize);
}
WriteBinaryString(keyData);