Skip to content

Commit 8ef55e8

Browse files
committed
test: add unit test for hash verify
1 parent 77a37b9 commit 8ef55e8

File tree

7 files changed

+92
-5
lines changed

7 files changed

+92
-5
lines changed

EccSDK.sln

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
Microsoft Visual Studio Solution File, Format Version 12.00
33
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EccSDK", "EccSDK\EccSDK.csproj", "{5EAC669B-2882-4A01-BC96-F39E04092834}"
44
EndProject
5+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EccSdkUnitTest", "EccSdkUnitTest\EccSdkUnitTest.csproj", "{09C5648F-11F0-446C-B0EC-835BD965CB6C}"
6+
EndProject
57
Global
68
GlobalSection(SolutionConfigurationPlatforms) = preSolution
79
Debug|Any CPU = Debug|Any CPU
@@ -12,5 +14,9 @@ Global
1214
{5EAC669B-2882-4A01-BC96-F39E04092834}.Debug|Any CPU.Build.0 = Debug|Any CPU
1315
{5EAC669B-2882-4A01-BC96-F39E04092834}.Release|Any CPU.ActiveCfg = Release|Any CPU
1416
{5EAC669B-2882-4A01-BC96-F39E04092834}.Release|Any CPU.Build.0 = Release|Any CPU
17+
{09C5648F-11F0-446C-B0EC-835BD965CB6C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
18+
{09C5648F-11F0-446C-B0EC-835BD965CB6C}.Debug|Any CPU.Build.0 = Debug|Any CPU
19+
{09C5648F-11F0-446C-B0EC-835BD965CB6C}.Release|Any CPU.ActiveCfg = Release|Any CPU
20+
{09C5648F-11F0-446C-B0EC-835BD965CB6C}.Release|Any CPU.Build.0 = Release|Any CPU
1521
EndGlobalSection
1622
EndGlobal

EccSDK/ChameleonHashHelper.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace EccGrpcSDK;
66

7-
public class ChameleonHashHelper
7+
public static class ChameleonHashHelper
88
{
99
// Kn = public key
1010
// kn = private key
@@ -23,12 +23,13 @@ public static bool Verify(ChameleonHashRequest request, ECPoint rightChameleonHa
2323
return GetChameleonHash(request).Equals(rightChameleonHash);
2424
}
2525

26-
private static ECPoint GetChameleonHash(ChameleonHashRequest request)
26+
public static ECPoint GetChameleonHash(ChameleonHashRequest request)
2727
{
2828
// chameleonHash = [Kn x H(m)] + [P x sessionKey]
2929
var msgHash = HashHelper.Sha256(request.Message);
3030
var rP = request.KeyPair.BasePoint.Multiply(request.Signature);
3131
var chameleonHash = request.KeyPair.PublicKey.Multiply(msgHash).Add(rP).Normalize();
3232
return chameleonHash;
3333
}
34+
3435
}

EccSDK/EccGenerator.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66

77
namespace EccGrpcSDK;
88

9-
public class EccGenerator : IEccGenerator
9+
public static class EccGenerator
1010
{
11-
public KeyPair GenerateKeyPair(int keySize)
11+
public static KeyPair GenerateKeyPair(int keySize)
1212
{
1313
var gen = new ECKeyPairGenerator("ECDSA");
1414
gen.Init(new KeyGenerationParameters(new SecureRandom(), keySize));
@@ -22,9 +22,11 @@ public KeyPair GenerateKeyPair(int keySize)
2222
{
2323
PublicKey = publicKey.Q,
2424
PrivateKey = privateKey.D,
25-
BasePoint = publicKey.Parameters.G
25+
BasePoint = publicKey.Parameters.G,
26+
KeySize = keySize
2627
};
2728

2829
return generateKeyPair;
2930
}
31+
3032
}

EccSDK/IEccGenerator.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using EccGrpcSDK.models;
22
using Org.BouncyCastle.Crypto;
3+
using Org.BouncyCastle.Math;
34

45
namespace EccGrpcSDK;
56

EccSDK/models/KeyPair.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ public class KeyPair
88
public BigInteger PrivateKey { get; set; }
99
public ECPoint PublicKey { get; set; }
1010
public ECPoint BasePoint { get; set; }
11+
public int KeySize { get; set; }
1112
}

EccSdkUnitTest/EccSdkTests.cs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
using EccGrpcSDK;
2+
using EccGrpcSDK.models;
3+
using Org.BouncyCastle.Math;
4+
5+
namespace EccSdkUnitTest;
6+
7+
[TestFixture]
8+
public class EccSdkTests
9+
{
10+
private KeyPair _keyPair;
11+
12+
[SetUp]
13+
public void SetUp()
14+
{
15+
_keyPair = EccGenerator.GenerateKeyPair(256);
16+
}
17+
18+
[Test]
19+
public void should_pass_verification()
20+
{
21+
var sign = ChameleonHashHelper.Sign(new ChameleonHashRequest
22+
{
23+
KeyPair = _keyPair,
24+
Message = "Hello World",
25+
Order = _keyPair.PublicKey.Curve.Order,
26+
SessionKey = new BigInteger("1234567890")
27+
});
28+
29+
var chameleonHash = ChameleonHashHelper.GetChameleonHash(new ChameleonHashRequest
30+
{
31+
KeyPair = _keyPair,
32+
Message = "Hello World",
33+
Order = _keyPair.PublicKey.Curve.Order,
34+
SessionKey = new BigInteger("1234567890"),
35+
Signature = sign
36+
});
37+
38+
var result = ChameleonHashHelper.Verify(new ChameleonHashRequest
39+
{
40+
KeyPair = _keyPair,
41+
Message = "Hello World",
42+
Order = _keyPair.PublicKey.Curve.Order,
43+
Signature = sign
44+
}, chameleonHash);
45+
46+
Assert.That(result, Is.True);
47+
}
48+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>net8.0</TargetFramework>
5+
<ImplicitUsings>enable</ImplicitUsings>
6+
<Nullable>enable</Nullable>
7+
8+
<IsPackable>false</IsPackable>
9+
<IsTestProject>true</IsTestProject>
10+
</PropertyGroup>
11+
12+
<ItemGroup>
13+
<PackageReference Include="coverlet.collector" Version="6.0.0"/>
14+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0"/>
15+
<PackageReference Include="NUnit" Version="3.14.0"/>
16+
<PackageReference Include="NUnit.Analyzers" Version="3.9.0"/>
17+
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0"/>
18+
</ItemGroup>
19+
20+
<ItemGroup>
21+
<Using Include="NUnit.Framework"/>
22+
</ItemGroup>
23+
24+
<ItemGroup>
25+
<ProjectReference Include="..\EccSDK\EccSDK.csproj" />
26+
</ItemGroup>
27+
28+
</Project>

0 commit comments

Comments
 (0)