public unsafe KeyPair GenerateKeyPair(byte *privateKey) { var publicKey = new byte[DhLen]; Libsodium.crypto_scalarmult_curve25519_base(publicKey, privateKey); return(new KeyPair(privateKey, DhLen, publicKey)); }
internal static Signature64 Random() { var value = default(Signature64); var ptr = Unsafe.AsPointer(ref value); Libsodium.randombytes_buf(ptr, (UIntPtr)Size); return(value); }
public KeyPair GenerateKeyPair() { unsafe { var sk = (byte *)Libsodium.sodium_malloc((ulong)DhLen); for (var i = 0; i < DhLen; i++) { sk[i] = fixedPrivateKey[i]; } return(GenerateKeyPair(sk)); } }
public VerifyHashResult PasswordVerify(ReadOnlySpan <byte> password, ReadOnlySpan <byte> hash) { unsafe { fixed(byte *p = &password.GetPinnableReference()) { fixed(byte *h = &hash.GetPinnableReference()) { var result = Libsodium.crypto_pwhash_str_verify(h, p, password.Length); if (result != 0) { return(VerifyHashResult.Invalid); } return(VerifyHashResult.Valid); } } } }
public ReadOnlySpan <byte> Password(ReadOnlySpan <byte> password) { const int size = 128; const long opsLimit = 3; Span <byte> buffer = new byte[size]; var memLimit = (int)_options.CurrentValue.PasswordHashMaxBytes; unsafe { fixed(byte *b = buffer) { fixed(byte *p = password) { Libsodium.crypto_pwhash_str(b, p, password.Length, opsLimit, memLimit); } } } return(buffer); }