mirror of
https://github.com/esiur/esiur-dotnet.git
synced 2026-04-04 12:28:21 +00:00
Layout
This commit is contained in:
61
Libraries/Esiur/Net/Ppap/KeyGenerator.cs
Normal file
61
Libraries/Esiur/Net/Ppap/KeyGenerator.cs
Normal file
@@ -0,0 +1,61 @@
|
||||
using Org.BouncyCastle.Crypto.Generators;
|
||||
using Org.BouncyCastle.Crypto.Parameters;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace Esiur.Net.Ppap
|
||||
{
|
||||
internal class KeyGenerator
|
||||
{
|
||||
public static (byte[], byte[]) Gen(MLKemParameters parameters = null)
|
||||
{
|
||||
var random = new RandomGenerator();
|
||||
var keyGenParameters = new MLKemKeyGenerationParameters(random, parameters ?? MLKemParameters.ml_kem_768);
|
||||
|
||||
var kyberKeyPairGenerator = new MLKemKeyPairGenerator();
|
||||
kyberKeyPairGenerator.Init(keyGenParameters);
|
||||
|
||||
var keys = kyberKeyPairGenerator.GenerateKeyPair();
|
||||
return ((keys.Private as MLKemPrivateKeyParameters).GetEncoded(),
|
||||
(keys.Public as MLKemPublicKeyParameters).GetEncoded());
|
||||
}
|
||||
|
||||
|
||||
public static (byte[], byte[]) GenS(byte[] username, byte[] password, byte[] registrationNonce, Argon2Parameters argon2parameters = null, MLKemParameters mlkemParameters = null)
|
||||
{
|
||||
|
||||
var secret = new byte[username.Length + password.Length + registrationNonce.Length];
|
||||
Buffer.BlockCopy(username, 0, secret, 0, username.Length);
|
||||
Buffer.BlockCopy(password, 0, secret, username.Length, password.Length);
|
||||
Buffer.BlockCopy(registrationNonce, 0, secret, username.Length + password.Length, registrationNonce.Length);
|
||||
|
||||
var output = new byte[64];
|
||||
//Argon2id.DeriveKey(output, secret, registrationNonce, ArgonIterations, ArgonMemory * 1024);
|
||||
|
||||
var argon2 = new Argon2BytesGenerator();
|
||||
var argon2params = argon2parameters ?? new Argon2Parameters.Builder(Argon2Parameters.Argon2id)
|
||||
.WithSalt(registrationNonce)
|
||||
.WithMemoryAsKB(1024 * 10)
|
||||
.WithIterations(3)
|
||||
.WithParallelism(1)
|
||||
.Build();
|
||||
|
||||
argon2.Init(argon2params);
|
||||
var output2 = new byte[64];
|
||||
argon2.GenerateBytes(secret, output);
|
||||
|
||||
|
||||
var random = new DeterministicGenerator(output);
|
||||
var keyGenParameters = new MLKemKeyGenerationParameters(random, mlkemParameters ?? MLKemParameters.ml_kem_768);
|
||||
|
||||
var kyberKeyPairGenerator = new MLKemKeyPairGenerator();
|
||||
kyberKeyPairGenerator.Init(keyGenParameters);
|
||||
|
||||
var keys = kyberKeyPairGenerator.GenerateKeyPair();
|
||||
return ((keys.Private as MLKemPrivateKeyParameters).GetEncoded(),
|
||||
(keys.Public as MLKemPublicKeyParameters).GetEncoded());
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user