46 lines
1.2 KiB
C#
46 lines
1.2 KiB
C#
|
using System;
|
||
|
using Sodium;
|
||
|
|
||
|
namespace TeleTok
|
||
|
{
|
||
|
public class CryptographyService
|
||
|
{
|
||
|
public string ToHexString(byte[] input)
|
||
|
{
|
||
|
var hexString = BitConverter.ToString(input);
|
||
|
|
||
|
string result = hexString.Replace("-", "");
|
||
|
|
||
|
return result.ToLower();
|
||
|
}
|
||
|
|
||
|
public byte[] GenerateLoginDigest()
|
||
|
{
|
||
|
long now = DateTimeOffset.UtcNow.ToUnixTimeSeconds() * 1000;
|
||
|
var message = $"login:{now / 1000 / (5 * 60)}";
|
||
|
|
||
|
return GenericHash.Hash(message, (byte[]?) null, 32);
|
||
|
}
|
||
|
|
||
|
public KeyPair GenerateEd25519KeyPair(string seed)
|
||
|
{
|
||
|
byte[] hash = GenericHash.Hash(seed, (byte[]?) null, 32);
|
||
|
|
||
|
return PublicKeyAuth.GenerateKeyPair(hash);
|
||
|
}
|
||
|
|
||
|
public string GenerateHexSignature(byte[] loginDigest, byte[] secretKey)
|
||
|
{
|
||
|
byte[] signature = PublicKeyAuth.SignDetached(loginDigest, secretKey);
|
||
|
|
||
|
return ToHexString(signature);
|
||
|
}
|
||
|
|
||
|
public string GenerateHexId(byte[] publicKey)
|
||
|
{
|
||
|
byte[] hash = GenericHash.Hash(publicKey, null, publicKey.Length);
|
||
|
|
||
|
return ToHexString(hash);
|
||
|
}
|
||
|
}
|
||
|
}
|