mirror of
https://github.com/esiur/esiur-dotnet.git
synced 2026-04-04 04:18:22 +00:00
62 lines
2.5 KiB
C#
62 lines
2.5 KiB
C#
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());
|
|
|
|
}
|
|
}
|
|
}
|