Skip to content

Commit 0594188

Browse files
committed
feat: add key generator
1 parent d6bf5b4 commit 0594188

File tree

6 files changed

+88
-0
lines changed

6 files changed

+88
-0
lines changed

.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
.idea/
2+
bin/
3+
obj/
4+
/packages/
5+
riderModule.iml
6+
/_ReSharper.Caches/

EccSDK.sln

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
2+
Microsoft Visual Studio Solution File, Format Version 12.00
3+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EccSDK", "EccSDK\EccSDK.csproj", "{5EAC669B-2882-4A01-BC96-F39E04092834}"
4+
EndProject
5+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EccSdkUnitTests", "EccSdkUnitTests\EccSdkUnitTests.csproj", "{CEF5979A-D5C2-47B4-B9EE-80C1F9AF1838}"
6+
EndProject
7+
Global
8+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
9+
Debug|Any CPU = Debug|Any CPU
10+
Release|Any CPU = Release|Any CPU
11+
EndGlobalSection
12+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
13+
{5EAC669B-2882-4A01-BC96-F39E04092834}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
14+
{5EAC669B-2882-4A01-BC96-F39E04092834}.Debug|Any CPU.Build.0 = Debug|Any CPU
15+
{5EAC669B-2882-4A01-BC96-F39E04092834}.Release|Any CPU.ActiveCfg = Release|Any CPU
16+
{5EAC669B-2882-4A01-BC96-F39E04092834}.Release|Any CPU.Build.0 = Release|Any CPU
17+
{CEF5979A-D5C2-47B4-B9EE-80C1F9AF1838}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
18+
{CEF5979A-D5C2-47B4-B9EE-80C1F9AF1838}.Debug|Any CPU.Build.0 = Debug|Any CPU
19+
{CEF5979A-D5C2-47B4-B9EE-80C1F9AF1838}.Release|Any CPU.ActiveCfg = Release|Any CPU
20+
{CEF5979A-D5C2-47B4-B9EE-80C1F9AF1838}.Release|Any CPU.Build.0 = Release|Any CPU
21+
EndGlobalSection
22+
EndGlobal

EccSDK/EccGenerator.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using EccGrpcSDK.models;
2+
using Org.BouncyCastle.Crypto;
3+
using Org.BouncyCastle.Crypto.Generators;
4+
using Org.BouncyCastle.Crypto.Parameters;
5+
using Org.BouncyCastle.Security;
6+
7+
namespace EccGrpcSDK;
8+
9+
public class EccGenerator : IEccGenerator
10+
{
11+
public KeyPair GenerateKeyPair(int keySize)
12+
{
13+
var gen = new ECKeyPairGenerator("ECDSA");
14+
gen.Init(new KeyGenerationParameters(new SecureRandom(), keySize));
15+
16+
var keyGen = gen.GenerateKeyPair();
17+
18+
var privateKey = (ECPrivateKeyParameters) keyGen.Private;
19+
var publicKey = (ECPublicKeyParameters) keyGen.Public;
20+
21+
return new KeyPair()
22+
{
23+
PublicKey = publicKey.Q,
24+
PrivateKey = privateKey.D,
25+
};
26+
}
27+
}

EccSDK/EccSDK.csproj

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>net8.0</TargetFramework>
5+
<ImplicitUsings>enable</ImplicitUsings>
6+
<Nullable>enable</Nullable>
7+
<RootNamespace>EccGrpcSDK</RootNamespace>
8+
</PropertyGroup>
9+
10+
<ItemGroup>
11+
<PackageReference Include="BouncyCastle.NetCore" Version="2.2.1" />
12+
</ItemGroup>
13+
14+
</Project>

EccSDK/IEccGenerator.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
using EccGrpcSDK.models;
2+
using Org.BouncyCastle.Crypto;
3+
4+
namespace EccGrpcSDK;
5+
6+
public interface IEccGenerator
7+
{
8+
KeyPair GenerateKeyPair(int keySize);
9+
}

EccSDK/models/KeyPair.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using Org.BouncyCastle.Math;
2+
using Org.BouncyCastle.Math.EC;
3+
4+
namespace EccGrpcSDK.models;
5+
6+
public class KeyPair
7+
{
8+
public BigInteger PrivateKey { get; set; }
9+
public ECPoint PublicKey { get; set; }
10+
}

0 commit comments

Comments
 (0)