Skip to content

Commit ca40100

Browse files
authored
changes to ed25519 (#167)
* changes to ed25519 * version bump
1 parent 77a685a commit ca40100

13 files changed

Lines changed: 38 additions & 238 deletions

cas-dotnet-sdk-tests/DigitalSignatureTests.cs

Lines changed: 0 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -33,28 +33,6 @@ public void SHA512RSA2048DigitalSignatureVerify()
3333
Assert.True(result);
3434
}
3535

36-
[Fact]
37-
public void SHA512ED25519DigitalSignature()
38-
{
39-
byte[] dataToSign = Encoding.UTF8.GetBytes("ThisIsTheTestingDataToSign");
40-
IDigitalSignature wrapper = DigitalSignatureFactory.Get(DigitalSignatureRSAType.SHA512);
41-
SHAED25519DalekDigitialSignatureResult result = wrapper.CreateED25519(dataToSign);
42-
Assert.NotEmpty(result.PublicKey);
43-
Assert.NotEmpty(result.Signature);
44-
}
45-
46-
[Fact]
47-
public void SHA512ED25519DigitalSignatureVerify()
48-
{
49-
byte[] dataToSign = Encoding.UTF8.GetBytes("ThisIsTheTestingDataToSign");
50-
IDigitalSignature wrapper = DigitalSignatureFactory.Get(DigitalSignatureRSAType.SHA512);
51-
SHAED25519DalekDigitialSignatureResult result = wrapper.CreateED25519(dataToSign);
52-
bool result2 = wrapper.VerifyED25519(result.PublicKey, dataToSign, result.Signature);
53-
Assert.True(result2);
54-
}
55-
56-
57-
5836
[Fact]
5937
public void SHA256RSADigitalSignature()
6038
{
@@ -87,41 +65,5 @@ public void SHA256RSADigitalSignatureVerifyFail()
8765
bool result = wrapper.VerifyRsa(signature.PublicKey, dataToSign, signature.Signature);
8866
Assert.False(result);
8967
}
90-
91-
92-
93-
[Fact]
94-
public void SHA256ED25519DalekDigitalSiganture()
95-
{
96-
byte[] dataToSign = Encoding.UTF8.GetBytes("WatchMyStreamAndLearnWIthMe");
97-
IDigitalSignature wrapper = DigitalSignatureFactory.Get(DigitalSignatureRSAType.SHA256);
98-
SHAED25519DalekDigitialSignatureResult signature = wrapper.CreateED25519(dataToSign);
99-
Assert.NotEmpty(signature.PublicKey);
100-
Assert.NotEmpty(signature.Signature);
101-
}
102-
103-
104-
105-
106-
[Fact]
107-
public void SHA256ED25519DalekVerifyPass()
108-
{
109-
byte[] dataToSign = Encoding.UTF8.GetBytes("WatchMyStreamAndLearnWIthMe");
110-
IDigitalSignature wrapper = DigitalSignatureFactory.Get(DigitalSignatureRSAType.SHA256);
111-
SHAED25519DalekDigitialSignatureResult signature = wrapper.CreateED25519(dataToSign);
112-
bool result = wrapper.VerifyED25519(signature.PublicKey, dataToSign, signature.Signature);
113-
Assert.True(result);
114-
}
115-
116-
[Fact]
117-
public void SHA256ED25519DalekVerifyFail()
118-
{
119-
byte[] dataToSign = Encoding.UTF8.GetBytes("WatchMyStreamAndLearnWIthMe");
120-
IDigitalSignature wrapper = DigitalSignatureFactory.Get(DigitalSignatureRSAType.SHA256);
121-
SHAED25519DalekDigitialSignatureResult signature = wrapper.CreateED25519(dataToSign);
122-
dataToSign = Encoding.UTF8.GetBytes("NotTheSameStuff");
123-
bool result = wrapper.VerifyED25519(signature.PublicKey, dataToSign, signature.Signature);
124-
Assert.False(result);
125-
}
12668
}
12769
}

cas-dotnet-sdk-tests/ED25519WrapperTests.cs

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,19 @@ public ED25519WrapperTests()
1616
[Fact]
1717
public void GetKeyPairBytes()
1818
{
19-
byte[] keyPair = this._wrapper.GetKeyPairBytes();
20-
Assert.NotNull(keyPair);
21-
Assert.NotEmpty(keyPair);
19+
var keyPair = this._wrapper.GetKeyPair();
20+
Assert.NotNull(keyPair.SigningKey);
21+
Assert.NotEmpty(keyPair.SigningKey);
22+
Assert.NotNull(keyPair.VerifyingKey);
23+
Assert.NotEmpty(keyPair.VerifyingKey);
2224
}
2325

2426
[Fact]
2527
public void SignDataByes()
2628
{
27-
byte[] keyPair = this._wrapper.GetKeyPairBytes();
29+
var keyPair = this._wrapper.GetKeyPair();
2830
byte[] dataToSign = Encoding.UTF8.GetBytes("SignThisDataWithEd25519Dalek");
29-
Ed25519ByteSignatureResult result = this._wrapper.SignBytes(keyPair, dataToSign);
31+
Ed25519ByteSignatureResult result = this._wrapper.SignBytes(keyPair.SigningKey, dataToSign);
3032
Assert.NotNull(result.Signature);
3133
Assert.NotNull(result.PublicKey);
3234
Assert.NotEmpty(result.Signature);
@@ -36,20 +38,21 @@ public void SignDataByes()
3638
[Fact]
3739
public void VerifyBytes()
3840
{
39-
byte[] keyPair = this._wrapper.GetKeyPairBytes();
41+
var keyPair = this._wrapper.GetKeyPair();
4042
byte[] dataToSign = Encoding.UTF8.GetBytes("ThisIsGarbageDataThatShouldBeIncreased");
41-
Ed25519ByteSignatureResult signatureResult = this._wrapper.SignBytes(keyPair, dataToSign);
42-
bool isValid = this._wrapper.VerifyBytes(keyPair, signatureResult.Signature, dataToSign);
43+
Ed25519ByteSignatureResult signatureResult = this._wrapper.SignBytes(keyPair.SigningKey, dataToSign);
44+
bool isValid = this._wrapper.VerifyBytes(keyPair.SigningKey, signatureResult.Signature, dataToSign);
4345
Assert.True(isValid);
4446
}
4547

4648
[Fact]
4749
public void VerifyWithPublicKeyBytes()
4850
{
49-
byte[] keyPair = this._wrapper.GetKeyPairBytes();
51+
var keyPair = this._wrapper.GetKeyPair();
5052
byte[] dataToSign = Encoding.UTF8.GetBytes("ThisIsBadDataToVerifyWithEd25519-Dalek");
51-
Ed25519ByteSignatureResult result = this._wrapper.SignBytes(keyPair, dataToSign);
53+
Ed25519ByteSignatureResult result = this._wrapper.SignBytes(keyPair.SigningKey, dataToSign);
5254
bool isValid = this._wrapper.VerifyWithPublicKeyBytes(result.PublicKey, result.Signature, dataToSign);
55+
Assert.True(isValid);
5356
}
5457
}
5558
}

cas-dotnet-sdk/DigitalSignature/IDigitalSignature.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,5 @@ public interface IDigitalSignature
66
{
77
public SHARSADigitalSignatureResult CreateRsa(int rsaKeySize, byte[] dataToSign);
88
public bool VerifyRsa(string publicKey, byte[] dataToVerify, byte[] signature);
9-
public SHAED25519DalekDigitialSignatureResult CreateED25519(byte[] dataToSign);
10-
public bool VerifyED25519(byte[] publicKey, byte[] dataToVerify, byte[] signature);
119
}
1210
}

cas-dotnet-sdk/DigitalSignature/Linux/DigitalSignatureLinuxWrapper.cs

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,25 +12,11 @@ internal static class DigitalSignatureLinuxWrapper
1212
[return: MarshalAs(UnmanagedType.I1)]
1313
public static extern bool sha_512_rsa_digital_signature_verify(string publicKey, byte[] dataToVerify, int dataToVerifyLength, byte[] signature, int signatureLength);
1414

15-
[DllImport("libcas_core_lib.so")]
16-
public static extern SHAED25519DalekStructDigitalSignatureResult sha512_ed25519_digital_signature(byte[] dataToSign, int dataToSignLength);
17-
18-
[DllImport("libcas_core_lib.so")]
19-
[return: MarshalAs(UnmanagedType.I1)]
20-
public static extern bool sha512_ed25519_digital_signature_verify(byte[] publicKey, int publicKeyLength, byte[] dataToVerify, int dataToVerifyLength, byte[] signature, int signatureLength);
21-
2215
[DllImport("libcas_core_lib.so")]
2316
public static extern SHARSAStructDigitialSignatureResult sha_256_rsa_digital_signature(int rsaKeySize, byte[] dataToSign, int dataLength);
2417

2518
[DllImport("libcas_core_lib.so")]
2619
[return: MarshalAs(UnmanagedType.I1)]
2720
public static extern bool sha_256_rsa_digital_signature_verify(string publicKey, byte[] dataToVerify, int dataToVerifyLength, byte[] signature, int signatureLength);
28-
29-
[DllImport("libcas_core_lib.so")]
30-
public static extern SHAED25519DalekStructDigitalSignatureResult sha256_ed25519_digital_signature(byte[] dataToSign, int dataToSignLength);
31-
32-
[DllImport("libcas_core_lib.so")]
33-
[return: MarshalAs(UnmanagedType.I1)]
34-
public static extern bool sha256_ed25519_digital_signature_verify(byte[] publicKey, int publicKeyLength, byte[] dataToVerify, int dataToVerifyLength, byte[] signature, int signatureLength);
3521
}
3622
}

cas-dotnet-sdk/DigitalSignature/SHA256DigitalSignatureWrapper.cs

Lines changed: 0 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -19,40 +19,6 @@ public SHA256DigitalSignatureWrapper()
1919
{
2020
}
2121

22-
/// <summary>
23-
/// Creates a SHA256 ED25519 Digital Signature.
24-
/// </summary>
25-
/// <param name="dataToSign"></param>
26-
/// <returns></returns>
27-
/// <exception cref="Exception"></exception>
28-
public SHAED25519DalekDigitialSignatureResult CreateED25519(byte[] dataToSign)
29-
{
30-
if (dataToSign == null || dataToSign.Length == 0)
31-
{
32-
throw new Exception("You must provide an allocated array of data to sign to create a SHA256 Ed25519 Digital Signature");
33-
}
34-
35-
DateTime start = DateTime.UtcNow;
36-
SHAED25519DalekStructDigitalSignatureResult structResult =
37-
(this._platform == OSPlatform.Linux) ?
38-
DigitalSignatureLinuxWrapper.sha256_ed25519_digital_signature(dataToSign, dataToSign.Length) :
39-
DigitalSignatureWindowsWrapper.sha256_ed25519_digital_signature(dataToSign, dataToSign.Length);
40-
byte[] publicKey = new byte[structResult.public_key_length];
41-
byte[] signature = new byte[structResult.signature_length];
42-
Marshal.Copy(structResult.public_key, publicKey, 0, publicKey.Length);
43-
Marshal.Copy(structResult.signature_raw_ptr, signature, 0, signature.Length);
44-
FreeMemoryHelper.FreeBytesMemory(structResult.public_key);
45-
FreeMemoryHelper.FreeBytesMemory(structResult.signature_raw_ptr);
46-
SHAED25519DalekDigitialSignatureResult result = new SHAED25519DalekDigitialSignatureResult()
47-
{
48-
PublicKey = publicKey,
49-
Signature = signature
50-
};
51-
DateTime end = DateTime.UtcNow;
52-
this._sender.SendNewBenchmarkMethod(MethodBase.GetCurrentMethod().Name, start, end, BenchmarkMethodType.DigitalSignature, nameof(SHA256DigitalSignatureWrapper));
53-
return result;
54-
}
55-
5622
/// <summary>
5723
/// Creates a SHA256 RSA Digital Signature.
5824
/// </summary>
@@ -93,38 +59,6 @@ public SHARSADigitalSignatureResult CreateRsa(int rsaKeySize, byte[] dataToSign)
9359
return resultToReturn;
9460
}
9561

96-
/// <summary>
97-
/// Verifies a SHA256 ED25519 Digital Signature.
98-
/// </summary>
99-
/// <param name="publicKey"></param>
100-
/// <param name="dataToVerify"></param>
101-
/// <param name="signature"></param>
102-
/// <returns></returns>
103-
/// <exception cref="Exception"></exception>
104-
public bool VerifyED25519(byte[] publicKey, byte[] dataToVerify, byte[] signature)
105-
{
106-
if (publicKey == null || publicKey.Length == 0)
107-
{
108-
throw new Exception("You must provide an allocated public key");
109-
}
110-
if (dataToVerify == null || dataToVerify.Length == 0)
111-
{
112-
throw new Exception("You must provide an allocated data to verify");
113-
}
114-
if (signature == null || signature.Length == 0)
115-
{
116-
throw new Exception("You must provide an allocated signature ");
117-
}
118-
119-
DateTime start = DateTime.UtcNow;
120-
bool result = (this._platform == OSPlatform.Linux) ?
121-
DigitalSignatureLinuxWrapper.sha256_ed25519_digital_signature_verify(publicKey, publicKey.Length, dataToVerify, dataToVerify.Length, signature, signature.Length) :
122-
DigitalSignatureWindowsWrapper.sha256_ed25519_digital_signature_verify(publicKey, publicKey.Length, dataToVerify, dataToVerify.Length, signature, signature.Length);
123-
DateTime end = DateTime.UtcNow;
124-
this._sender.SendNewBenchmarkMethod(MethodBase.GetCurrentMethod().Name, start, end, BenchmarkMethodType.DigitalSignature, nameof(SHA256DigitalSignatureWrapper));
125-
return result;
126-
}
127-
12862
/// <summary>
12963
/// Verifies a SHA256 RSA Digital Signature.
13064
/// </summary>

cas-dotnet-sdk/DigitalSignature/SHA512DigitalSignatureWrapper.cs

Lines changed: 0 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -21,38 +21,6 @@ public SHA512DigitalSignatureWrapper()
2121

2222
}
2323

24-
/// <summary>
25-
/// Creates an ED25519 Digital Signature using SHA512
26-
/// </summary>
27-
/// <param name="dataToSign"></param>
28-
/// <returns></returns>
29-
/// <exception cref="Exception"></exception>
30-
public SHAED25519DalekDigitialSignatureResult CreateED25519(byte[] dataToSign)
31-
{
32-
if (dataToSign == null || dataToSign.Length == 0)
33-
{
34-
throw new Exception("You must provide an allocated data array to create a digital signature");
35-
}
36-
37-
DateTime start = DateTime.UtcNow;
38-
SHAED25519DalekStructDigitalSignatureResult signatureResult = (this._platform == OSPlatform.Linux) ?
39-
DigitalSignatureLinuxWrapper.sha512_ed25519_digital_signature(dataToSign, dataToSign.Length) :
40-
DigitalSignatureWindowsWrapper.sha512_ed25519_digital_signature(dataToSign, dataToSign.Length);
41-
byte[] publicKey = new byte[signatureResult.public_key_length];
42-
Marshal.Copy(signatureResult.public_key, publicKey, 0, signatureResult.public_key_length);
43-
byte[] signature = new byte[signatureResult.signature_length];
44-
Marshal.Copy(signatureResult.signature_raw_ptr, signature, 0, signatureResult.signature_length);
45-
FreeMemoryHelper.FreeBytesMemory(signatureResult.public_key);
46-
FreeMemoryHelper.FreeBytesMemory(signatureResult.signature_raw_ptr);
47-
DateTime end = DateTime.UtcNow;
48-
this._sender.SendNewBenchmarkMethod(MethodBase.GetCurrentMethod().Name, start, end, BenchmarkMethodType.DigitalSignature, nameof(SHA512DigitalSignatureWrapper));
49-
return new SHAED25519DalekDigitialSignatureResult()
50-
{
51-
PublicKey = publicKey,
52-
Signature = signature,
53-
};
54-
}
55-
5624
/// <summary>
5725
/// Creates a RSA Digital Signature using SHA512
5826
/// </summary>
@@ -92,40 +60,6 @@ public SHARSADigitalSignatureResult CreateRsa(int rsaKeySize, byte[] dataToSign)
9260
};
9361
}
9462

95-
96-
97-
/// <summary>
98-
/// Verifies a ED25519 Digital Signature using SHA512
99-
/// </summary>
100-
/// <param name="publicKey"></param>
101-
/// <param name="dataToVerify"></param>
102-
/// <param name="signature"></param>
103-
/// <returns></returns>
104-
/// <exception cref="Exception"></exception>
105-
public bool VerifyED25519(byte[] publicKey, byte[] dataToVerify, byte[] signature)
106-
{
107-
if (publicKey == null || publicKey.Length == 0)
108-
{
109-
throw new Exception("You must provide a allocated array for the public to verify a digital signature");
110-
}
111-
if (dataToVerify == null || dataToVerify.Length == 0)
112-
{
113-
throw new Exception("You must provde an allocated array for the data to verify to verify a digital signature");
114-
}
115-
if (signature == null || signature.Length == 0)
116-
{
117-
throw new Exception("You must provide an allocated array for the signature to verfiy a digital signature");
118-
}
119-
120-
DateTime start = DateTime.UtcNow;
121-
bool result = (this._platform == OSPlatform.Linux) ?
122-
DigitalSignatureLinuxWrapper.sha512_ed25519_digital_signature_verify(publicKey, publicKey.Length, dataToVerify, dataToVerify.Length, signature, signature.Length) :
123-
DigitalSignatureWindowsWrapper.sha512_ed25519_digital_signature_verify(publicKey, publicKey.Length, dataToVerify, dataToVerify.Length, signature, signature.Length);
124-
DateTime end = DateTime.UtcNow;
125-
this._sender.SendNewBenchmarkMethod(MethodBase.GetCurrentMethod().Name, start, end, BenchmarkMethodType.DigitalSignature, nameof(SHA512DigitalSignatureWrapper));
126-
return result;
127-
}
128-
12963
/// <summary>
13064
/// Verifies a RSA Digital Signature using SHA512
13165
/// </summary>

cas-dotnet-sdk/DigitalSignature/Windows/DigitalSignatureWindowsWrapper.cs

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,25 +12,11 @@ internal static class DigitalSignatureWindowsWrapper
1212
[return: MarshalAs(UnmanagedType.I1)]
1313
public static extern bool sha_512_rsa_digital_signature_verify(string publicKey, byte[] dataToVerify, int dataToVerifyLength, byte[] signature, int signatureLength);
1414

15-
[DllImport("cas_core_lib.dll")]
16-
public static extern SHAED25519DalekStructDigitalSignatureResult sha512_ed25519_digital_signature(byte[] dataToSign, int dataToSignLength);
17-
18-
[DllImport("cas_core_lib.dll")]
19-
[return: MarshalAs(UnmanagedType.I1)]
20-
public static extern bool sha512_ed25519_digital_signature_verify(byte[] publicKey, int publicKeyLength, byte[] dataToVerify, int dataToVerifyLength, byte[] signature, int signatureLength);
21-
2215
[DllImport("cas_core_lib.dll")]
2316
public static extern SHARSAStructDigitialSignatureResult sha_256_rsa_digital_signature(int rsaKeySize, byte[] dataToSign, int dataLength);
2417

2518
[DllImport("cas_core_lib.dll")]
2619
[return: MarshalAs(UnmanagedType.I1)]
2720
public static extern bool sha_256_rsa_digital_signature_verify(string publicKey, byte[] dataToVerify, int dataToVerifyLength, byte[] signature, int signatureLength);
28-
29-
[DllImport("cas_core_lib.dll")]
30-
public static extern SHAED25519DalekStructDigitalSignatureResult sha256_ed25519_digital_signature(byte[] dataToSign, int dataToSignLength);
31-
32-
[DllImport("cas_core_lib.dll")]
33-
[return: MarshalAs(UnmanagedType.I1)]
34-
public static extern bool sha256_ed25519_digital_signature_verify(byte[] publicKey, int publicKeyLength, byte[] dataToVerify, int dataToVerifyLength, byte[] signature, int signatureLength);
3521
}
3622
}

cas-dotnet-sdk/Signatures/ED25519Wrapper.cs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,25 @@ public ED25519Wrapper()
2020
/// Generates and public and private key pair non split in bytes for ED25519-Dalek.
2121
/// </summary>
2222
/// <returns></returns>
23-
public byte[] GetKeyPairBytes()
23+
public Ed25519KeyPairResult GetKeyPair()
2424
{
2525
DateTime start = DateTime.UtcNow;
2626
Ed25519KeyPairBytesResultStruct resultStruct = (this._platform == OSPlatform.Linux) ?
2727
ED25519LinuxWrapper.get_ed25519_key_pair_bytes() :
2828
ED25519WindowsWrapper.get_ed25519_key_pair_bytes();
29-
byte[] keyPairResult = new byte[resultStruct.length];
30-
Marshal.Copy(resultStruct.key_pair, keyPairResult, 0, resultStruct.length);
31-
FreeMemoryHelper.FreeBytesMemory(resultStruct.key_pair);
29+
byte[] signingKey = new byte[resultStruct.signing_key_length];
30+
Marshal.Copy(resultStruct.signing_key, signingKey, 0, resultStruct.signing_key_length);
31+
byte[] verifyingKey = new byte[resultStruct.verifying_key_length];
32+
Marshal.Copy(resultStruct.verifying_key, verifyingKey, 0, resultStruct.verifying_key_length);
33+
FreeMemoryHelper.FreeBytesMemory(resultStruct.verifying_key);
34+
FreeMemoryHelper.FreeBytesMemory(resultStruct.signing_key);
3235
DateTime end = DateTime.UtcNow;
3336
this._sender.SendNewBenchmarkMethod(MethodBase.GetCurrentMethod().Name, start, end, BenchmarkMethodType.Hash, nameof(ED25519Wrapper));
34-
return keyPairResult;
37+
return new Ed25519KeyPairResult()
38+
{
39+
SigningKey = signingKey,
40+
VerifyingKey = verifyingKey
41+
};
3542
}
3643

3744
/// <summary>

cas-dotnet-sdk/Signatures/Types/Ed25519KeyPairBytesResultStruct.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ namespace CasDotnetSdk.Signatures.Types
44
{
55
internal struct Ed25519KeyPairBytesResultStruct
66
{
7-
public IntPtr key_pair { get; set; }
8-
public int length { get; set; }
7+
public IntPtr signing_key { get; set; }
8+
public int signing_key_length { get; set; }
9+
public IntPtr verifying_key { get; set; }
10+
public int verifying_key_length { get; set; }
911
}
1012
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
namespace CasDotnetSdk.Signatures.Types
2+
{
3+
public class Ed25519KeyPairResult
4+
{
5+
public byte[] SigningKey { get;set; }
6+
public byte[] VerifyingKey { get; set; }
7+
}
8+
}

0 commit comments

Comments
 (0)