-- |
--
-- Module: LibSodium.Bindings
-- Description: Index of the libsodium-bindings package
-- Copyright: (C) Hécate Moonlight 2023
-- License: BSD-3-Clause
-- Maintainer: The Haskell Cryptography Group
-- Stability: Stable
-- Portability: GHC only
--
-- You will find below a list of the cryptographic bindings exposed:
--
-- +--+-----------------------------+----------------------------------------------------------------------+---------------------------------------+---------------------------------------------------------+
-- | | Purpose | Description | Algorithms | Module |
-- +==+=============================+======================================================================+=======================================+=========================================================+
-- | | __Secret-key Cryptography__ | | | |
-- | +-----------------------------+----------------------------------------------------------------------+---------------------------------------+---------------------------------------------------------+
-- | | Authenticated Encryption | Encrypt a message and compute an authentication | Encryption: XSalsa20 stream cipher; | [SecretBox]("LibSodium.Bindings.Secretbox") |
-- | | | tag to make sure the message hasn't been tampered with. | Authentication: Poly1305 MAC | |
-- | +-----------------------------+----------------------------------------------------------------------+---------------------------------------+---------------------------------------------------------+
-- | | Encrypted Streams | Encrypt a sequence of messages, or a single message split | Initialisation: XChaCha20; | [SecretStream]("LibSodium.Bindings.SecretStream") |
-- | | | into an arbitrary number of chunks, using a secret key. | Encryption: ChaCha20Poly1305-IETF | |
-- | +-----------------------------+----------------------------------------------------------------------+---------------------------------------+---------------------------------------------------------+
-- | | Authentication | Compute an authentication tag for a message and a secret key, | Authentication: HMAC-SHA512-256 | [CryptoAuth]("LibSodium.Bindings.CryptoAuth") |
-- | | | and verify that a given tag is valid for a given message and a key. | | |
-- +--+-----------------------------+----------------------------------------------------------------------+---------------------------------------+---------------------------------------------------------+
-- | | __Public-key Cryptography__ | | | |
-- | +-----------------------------+----------------------------------------------------------------------+---------------------------------------+---------------------------------------------------------+
-- | | Authenticated Encryption | Encrypt a confidential message with the recipient's public key, | Key exchange: X25519; | [CryptoBox]("LibSodium.Bindings.CryptoBox") |
-- | | | who can then decrypt it with their secret key. | Encryption: XSalsa20; | |
-- | | | | Authentication: Poly1305 | |
-- | +-----------------------------+----------------------------------------------------------------------+---------------------------------------+---------------------------------------------------------+
-- | | Public-key Signatures | Sign messages with a secret key, and distribute a public key, | Single-part signature: Ed25519; | [CryptoSign]("LibSodium.Bindings.CryptoSign") |
-- | | | which anybody can use to verify that the signature appended | Multi-part signature: Ed25519ph | |
-- | | | to a message was issued by the creator of the public key. | | |
-- | +-----------------------------+----------------------------------------------------------------------+---------------------------------------+---------------------------------------------------------+
-- | | Sealed Boxes | Anonymously send messages to a recipient given their public key. | Key Exchange: X25519; | [SealedBoxes]("LibSodium.Bindings.SealedBoxes") |
-- | | | | Encryption: XSalsa20-Poly1305 | |
-- +--+-----------------------------+----------------------------------------------------------------------+---------------------------------------+---------------------------------------------------------+
-- | | __Hashing__ | | | |
-- | +-----------------------------+----------------------------------------------------------------------+---------------------------------------+---------------------------------------------------------+
-- | | Generic Hashing | Computes a fixed-length fingerprint for an arbitrarily long message. | Hashing: BLAKE2b | [GenericHashing]("LibSodium.Bindings.GenericHashing") |
-- | | | Use this for file integrity checking and create unique identifiers | | |
-- | | | to index arbitrarily long data. | | |
-- | | | Do not use this API to hash passwords! | | |
-- | +-----------------------------+----------------------------------------------------------------------+---------------------------------------+---------------------------------------------------------+
-- | | Password Hashing | Hash passwords with high control on the computation parameters. | Hashing: Argon2id v1.3 | [PasswordHashing]("LibSodium.Bindings.PasswordHashing") |
-- | +-----------------------------+----------------------------------------------------------------------+---------------------------------------+---------------------------------------------------------+
-- | | Short-input Hashing | Produce short hashes for your data, suitable to build Hash tables, | Hashing: SipHash-2-4 | [ShortHashing]("LibSodium.Bindings.ShortHashing") |
-- | | | probabilistic data structures or perform integrity checking in | | |
-- | | | interactive protocols. | | |
-- +--+-----------------------------+----------------------------------------------------------------------+---------------------------------------+---------------------------------------------------------+
-- | | __Cryptographic Keys__ | | | |
-- | +-----------------------------+----------------------------------------------------------------------+---------------------------------------+---------------------------------------------------------+
-- | | Key Derivation | Derive secret keys from a single high-entropy key. | Key derivation: BLAKE2B | [KeyDerivation]("LibSodium.Bindings.KeyDerivation") |
-- | +-----------------------------+----------------------------------------------------------------------+---------------------------------------+---------------------------------------------------------+
-- | | Key Exchange | Securely compute a set of shared keys using your | Key generation: BLAKE2B-512 | [KeyExchange]("LibSodium.Bindings.KeyExchange") |
-- | | | peer's public key and your own secret key. | | |
-- +--+-----------------------------+----------------------------------------------------------------------+---------------------------------------+---------------------------------------------------------+
-- | | __Other constructs__ | | | |
-- +--+-----------------------------+----------------------------------------------------------------------+---------------------------------------+---------------------------------------------------------+
-- | | SHA-2 | Provide compatibility with existing applications for | SHA-256 and SHA-512 | [SHA2]("LibSodium.Bindings.SHA2") |
-- | | | SHA-256 and SHA-512. You should prioritise GenericHashing | | |
-- | | | and PasswordHashing for new developmentinstead. | | |
-- +--+-----------------------------+----------------------------------------------------------------------+---------------------------------------+---------------------------------------------------------+
-- | | AEAD | Encrypt a message with a key and a nonce to keep it confidential, | Encryption: XChaCha20 stream cipher; | [AEAD]("LibSodium.Bindings.AEAD") |
-- | | | compute an authentication tag, and store optional, non-confidential | Authentication: Poly1305 MAC | |
-- | | | data. | | |
-- +--+-----------------------------+----------------------------------------------------------------------+---------------------------------------+---------------------------------------------------------+
-- | | XChaCha20 | Implementation of the XChaCha20 stream cipher | XChaCha20 stream cipher | [XChaCha20]("LibSodium.Bindings.XChaCha20") |
-- +--+-----------------------------+----------------------------------------------------------------------+---------------------------------------+---------------------------------------------------------+
-- | | Scrypt | Unless you have specific reasons to use scrypt, you | scrypt password hashing function | [Scrypt]("LibSodium.Bindings.Scrypt") |
-- | | | should instead consider the PasswordHashing module! | | |
-- +--+-----------------------------+----------------------------------------------------------------------+---------------------------------------+---------------------------------------------------------+
module LibSodium.Bindings where