35using SslErrorCode =
unsigned long;
37template <size_t Size = DefaultPbkdf2KeyLength>
38using key_material_t = std::array<byte_t, Size>;
39using key_view_t = byte_view_t<DefaultPbkdf2KeyLength>;
49using SslExpected = std::expected<T, SslErrorCode>;
56template <size_t N,
typename T = uint8_t> consteval std::array<T, N>
zeroes() {
return {}; }
59 QUOTIENT_API SslExpected<std::monostate> pbkdf2HmacSha512(
const QByteArray &passphrase,
60 const QByteArray &salt,
61 int iterations, byte_span_t<> output);
65template <size_t Size = DefaultPbkdf2KeyLength>
66QUOTIENT_API inline SslExpected<key_material_t<Size>> pbkdf2HmacSha512(
const QByteArray& passphrase,
67 const QByteArray& salt,
70 static_assert(Size > 0 && Size < std::numeric_limits<
int>::max());
71 key_material_t<Size> result;
72 return _impl::pbkdf2HmacSha512(passphrase, salt, iterations, result).transform([&result](
auto) {
80QUOTIENT_API SslExpected<HkdfKeys> hkdfSha256(key_view_t key, byte_view_t<32> salt,
85 byte_view_t<HmacKeySize> hmacKey,
86 const QByteArray& data);
91 QByteArray ciphertext,
const QByteArray& privateKey,
92 const QByteArray& ephemeral,
const QByteArray& mac);
96QUOTIENT_API QOlmExpected<Curve25519Encrypted> curve25519AesSha2Encrypt(
97 const QByteArray& plaintext,
const QByteArray& publicKey);
103 const QByteArray& plaintext, byte_view_t<Aes256KeySize> key,
104 byte_view_t<AesBlockSize> iv);
110 const QByteArray& ciphertext, byte_view_t<Aes256KeySize> key,
111 byte_view_t<AesBlockSize> iv);
113QUOTIENT_API std::vector<byte_t> base58Decode(
const QByteArray& encoded);
115QUOTIENT_API QByteArray sign(
const QByteArray &key,
const QByteArray &data);
consteval std::array< T, N > zeroes()
constexpr auto DefaultPbkdf2KeyLength
constexpr auto AesBlockSize
constexpr auto HmacKeySize
QByteArray zeroedByteArray(QByteArray::size_type n=32)
constexpr auto Aes256KeySize