packages feed

botan-low 0.0.1.0 → 0.0.2.0

raw patch · 62 files changed

+1220/−1040 lines, 62 filesdep ~basedep ~botan-bindingsdep ~deepseqnew-uploaderPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: base, botan-bindings, deepseq

API changes (from Hackage documentation)

Files

CHANGELOG.md view
@@ -1,5 +1,31 @@ # Changelog -## 0.0.1 - 2024/02/05+## 0.0.2.0 -- 2025-09-17++* PATCH: update the changelog to change the release date of version 0.0.1.0 from+  2024-02-05 to 2024-02-13.+* PATCH: transfer ownership to the Haskell Foundation.+* NON-BREAKING: remove a bunch of `WARNING` pragmas in favour of textual+  reminders in haddock comments. The `WARNING` pragmas are somewhat inconvenient+  in conjunction with `-Werror`. What would help is that since `ghc-9.12`,+  warnings can be assigned to categories, and those categories can be ignored+  more granularly. However, we support `ghc` versions down to and including+  `ghc-9.2`, so warning categories are not an option for now. The affected+  functions are:++  - `blockCipherEncryptBlocks`+  - `blockCipherDecryptBlocks`+  - `pwdhash`+  - `pwdhashTimed`+  - `mkCreateObjectCBytes`+  - `x509CertAllowedUsage`+  - `x509CertHostnameMatch`+  - `keyAgreement`+  - `signFinish`+* PATCH: include a license file (with copyright info)+* PATCH: make dependency bounds on `base` tighter. Now they coincide with the+  `tested-with` versions of GHC.++## 0.0.1.0 - 2024-02-13  Initial release.
+ LICENSE view
@@ -0,0 +1,29 @@+BSD 3-Clause License++Copyright (c) 2023-2024, Apotheca Labs+Copyright (c) 2024-2025, Haskell Foundation++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++1. Redistributions of source code must retain the above copyright notice, this+   list of conditions and the following disclaimer.++2. Redistributions in binary form must reproduce the above copyright notice,+   this list of conditions and the following disclaimer in the documentation+   and/or other materials provided with the distribution.++3. Neither the name of the copyright holder nor the names of its+   contributors may be used to endorse or promote products derived from+   this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
README.md view
@@ -4,4 +4,4 @@  > Botan's goal is to be the best option for cryptography in C++ by offering the tools necessary to implement a range of practical systems, such as TLS protocol, X.509 certificates, modern AEAD ciphers, PKCS#11 and TPM hardware support, password hashing, and post quantum crypto schemes. -For more information, see the [README on Github](https://github.com/apotheca/botan)+For more information, see the [README on Github](https://github.com/haskellfoundation/botan)
bench/Bcrypt.hs view
@@ -37,8 +37,10 @@ cryptonHash :: ByteString -> Crypton.Digest Crypton.SHA3_512 cryptonHash = Crypton.hash -botanHash :: ByteString -> IO Botan.HashDigest-botanHash = Botan.hashWithName "SHA-3(512)"+-- TODO: hashWithName is not exposed from Botan.Low.Hash. See issue #34.+{- botanHash :: ByteString -> IO Botan.HashDigest+   botanHash = Botan.hashWithName "SHA-3(512)"+-}  main :: IO () main = defaultMain@@ -60,11 +62,13 @@             , bench "plaintext" $ nf cryptonHash plaintext             , bench "longtext" $ nf cryptonHash longtext             ]-        , bgroup "Botan"+        -- TODO: hashWithName is not exposed from Botan.Low.Hash. See issue #34.+        {- , bgroup "Botan"             [ bench "password"  $ nfIO $ botanHash password             , bench "plaintext" $ nfIO $ botanHash plaintext             , bench "longtext" $ nfIO $ botanHash longtext             ]+        -}         ]     ] 
botan-low.cabal view
@@ -1,849 +1,912 @@-cabal-version:  3.0-name:           botan-low-version:        0.0.1.0-license:        BSD-3-Clause-author:         Leo D.-maintainer:     leo@apotheca.io-build-type:     Simple-category:       Cryptography-synopsis:       Low-level Botan bindings-description:--    Welcome to botan-low--    Low-level bindings to the [Botan](https://botan.randombit.net/) cryptography library.--    > Botan's goal is to be the best option for cryptography in C++ by offering the-    > tools necessary to implement a range of practical systems, such as TLS protocol,-    > X.509 certificates, modern AEAD ciphers, PKCS#11 and TPM hardware support,-    > password hashing, and post quantum crypto schemes.--    For more information, see the [README on Github](https://github.com/apotheca/botan)---- NOTE: Use data-files instead, if this is inappropriate--- NOTE: This causes a soft error:---      Ignoring trailing fields after sections: "extra-source-files"--- unless placed here above source-repository and flag.--- We can still use `extra-source-files` under `if flag(XFFI)` later without--- causing problems-extra-source-files:-    test-data/*.der-    test-data/*.pem--extra-doc-files:-    README.md-    CHANGELOG.md--source-repository head-  type:     git-  location: https://github.com/apotheca/botan.git--flag XFFI-    description: Enable experimental / upstream ffi support-    manual: True-    default: False--library-    hs-source-dirs:   src-    default-language: Haskell2010-    default-extensions:-        ExistentialQuantification-        NoImplicitPrelude-        OverloadedStrings-        PatternSynonyms-        RankNTypes-        ScopedTypeVariables-        TupleSections-        TypeApplications-    exposed-modules:-        Botan.Low.Bcrypt-        Botan.Low.BlockCipher-        Botan.Low.Cipher-        Botan.Low.Error-        Botan.Low.FPE-        Botan.Low.Hash-        Botan.Low.HOTP-        Botan.Low.KDF-        Botan.Low.KeyWrap-        Botan.Low.MAC-        Botan.Low.MPI-        Botan.Low.PubKey-        Botan.Low.PubKey.Decrypt-        Botan.Low.PubKey.DH-        Botan.Low.PubKey.DSA-        Botan.Low.PubKey.ECDH-        Botan.Low.PubKey.ECDSA-        Botan.Low.PubKey.Ed25519-        Botan.Low.PubKey.ElGamal-        Botan.Low.PubKey.Encrypt-        Botan.Low.PubKey.KeyAgreement-        Botan.Low.PubKey.KeyEncapsulation-        Botan.Low.PubKey.RSA-        Botan.Low.PubKey.Sign-        Botan.Low.PubKey.SM2-        Botan.Low.PubKey.Verify-        Botan.Low.PubKey.X25519-        Botan.Low.PwdHash-        Botan.Low.RNG-        Botan.Low.SRP6-        Botan.Low.TOTP-        Botan.Low.Utility-        Botan.Low.Version-        Botan.Low.View-        Botan.Low.X509-        Botan.Low.ZFEC-    other-modules:-        Botan.Low.Prelude-        Botan.Low.Make-        Botan.Low.Remake-        Paths_botan_low-    autogen-modules:-        Paths_botan_low-    build-depends:-        base            >= 4 && < 5,-        botan-bindings  == 0.0.1.0,-        bytestring      >= 0.11 && < 0.13,-        deepseq         >= 1.4  && < 1.6,-        text            >= 1.2  && < 1.3 || >= 2.0 && < 2.2-    -- cc-options:     -Wall-    -- ghc-options:    -Wall -funbox-strict-fields    -    if flag(XFFI)-        exposed-modules:-            Botan.Low.X509.CA-            Botan.Low.X509.CSR-            Botan.Low.X509.CRL-            Botan.Low.X509.DN-            Botan.Low.X509.Extensions-            -- Botan.Low.X509.OCSP-            Botan.Low.X509.Options-            Botan.Low.X509.Path-            Botan.Low.X509.Store-        cpp-options: -DXFFI ---- test-suite botan-low-tests---     type:             exitcode-stdio-1.0---     main-is:          Spec.hs---     hs-source-dirs:   test/---     build-depends:---         base,---         botan-bindings,---         botan-low,---         bytestring,---         directory,---         hspec,---         QuickCheck,---         text---     other-modules:---         -- Botan.Low.BcryptSpec---         Botan.Low.BlockCipherSpec---         Botan.Low.CipherSpec---         Botan.Low.FPESpec---         Botan.Low.HashSpec---         Botan.Low.HOTPSpec---         Botan.Low.KDFSpec---         Botan.Low.KeyWrapSpec---         Botan.Low.MACSpec---         Botan.Low.MPISpec---         -- Botan.Low.PBKDFSpec---         Botan.Low.PubKeySpec---         Botan.Low.PubKey.DecryptSpec---         Botan.Low.PubKey.DHSpec---         Botan.Low.PubKey.DSASpec---         Botan.Low.PubKey.ECDHSpec---         Botan.Low.PubKey.ECDSASpec---         Botan.Low.PubKey.Ed25519Spec---         Botan.Low.PubKey.ElGamalSpec---         Botan.Low.PubKey.EncryptSpec---         Botan.Low.PubKey.KeyAgreementSpec---         Botan.Low.PubKey.KeyEncapsulationSpec---         Botan.Low.PubKey.RSASpec---         Botan.Low.PubKey.SignSpec---         Botan.Low.PubKey.SM2Spec---         Botan.Low.PubKey.VerifySpec---         Botan.Low.PubKey.X25519Spec---         Botan.Low.PwdHashSpec---         Botan.Low.RNGSpec---         -- Botan.Low.ScryptSpec---         Botan.Low.SRP6Spec---         Botan.Low.TOTPSpec---         Botan.Low.UtilitySpec---         Botan.Low.X509Spec---         Botan.Low.ZFECSpec---         Test.Prelude---         Paths_botan_low---     --   ghc-options: ---     default-language: Haskell2010---     default-extensions:---         NoImplicitPrelude---         OverloadedStrings---     -- NOTE: hspec-discover fails to respect the XFFI flag, and it tries---     --  to begin loading modules that should not be built. Eg:---     --      Could not find module ‘Botan.Low.X509.Store’---     -- if flag(XFFI)---     --     other-modules:---     --         Botan.Low.X509.CASpec---     --         Botan.Low.X509.CSRSpec---     --         Botan.Low.X509.CRLSpec---     --         Botan.Low.X509.DNSpec---     --         Botan.Low.X509.ExtensionsSpec---     --         -- Botan.Low.X509.OCSPSpec---     --         Botan.Low.X509.OptionsSpec---     --         Botan.Low.X509.PathSpec---     --         Botan.Low.X509.StoreSpec---     --     cpp-options: -DXFFI ------- Unit tests-----test-suite botan-low-bcrypt-tests-    type:             exitcode-stdio-1.0-    main-is:          Botan/Low/BcryptSpec.hs-    hs-source-dirs:   test/-    build-depends:-        base,-        botan-bindings,-        botan-low,-        bytestring,-        hspec,-        QuickCheck-    other-modules:-        Test.Prelude-        Paths_botan_low-    default-language: Haskell2010-    default-extensions:-        NoImplicitPrelude-        OverloadedStrings--test-suite botan-low-block-cipher-tests-    type:             exitcode-stdio-1.0-    main-is:          Botan/Low/BlockCipherSpec.hs-    hs-source-dirs:   test/-    build-depends:-        base,-        botan-bindings,-        botan-low,-        bytestring,-        hspec,-        QuickCheck-    other-modules:-        Test.Prelude-        Paths_botan_low-    default-language: Haskell2010-    default-extensions:-        NoImplicitPrelude-        OverloadedStrings--test-suite botan-low-cipher-tests-    type:             exitcode-stdio-1.0-    main-is:          Botan/Low/CipherSpec.hs-    hs-source-dirs:   test/-    build-depends:-        base,-        botan-bindings,-        botan-low,-        bytestring,-        hspec,-        QuickCheck-    other-modules:-        Test.Prelude-        Paths_botan_low-    default-language: Haskell2010-    default-extensions:-        NoImplicitPrelude-        OverloadedStrings--test-suite botan-low-fpe-tests-    type:             exitcode-stdio-1.0-    main-is:          Botan/Low/FPESpec.hs-    hs-source-dirs:   test/-    build-depends:-        base,-        botan-bindings,-        botan-low,-        bytestring,-        hspec,-        QuickCheck-    other-modules:-        Test.Prelude-        Paths_botan_low-    default-language: Haskell2010-    default-extensions:-        NoImplicitPrelude-        OverloadedStrings--test-suite botan-low-hash-tests-    type:             exitcode-stdio-1.0-    main-is:          Botan/Low/HashSpec.hs-    hs-source-dirs:   test/-    build-depends:-        base,-        botan-bindings,-        botan-low,-        bytestring,-        hspec,-        QuickCheck-    other-modules:-        Test.Prelude-        Paths_botan_low-    default-language: Haskell2010-    default-extensions:-        NoImplicitPrelude-        OverloadedStrings--test-suite botan-low-hotp-tests-    type:             exitcode-stdio-1.0-    main-is:          Botan/Low/HOTPSpec.hs-    hs-source-dirs:   test/-    build-depends:-        base,-        botan-bindings,-        botan-low,-        bytestring,-        hspec,-        QuickCheck-    other-modules:-        Test.Prelude-        Paths_botan_low-    default-language: Haskell2010-    default-extensions:-        NoImplicitPrelude-        OverloadedStrings--test-suite botan-low-kdf-tests-    type:             exitcode-stdio-1.0-    main-is:          Botan/Low/KDFSpec.hs-    hs-source-dirs:   test/-    build-depends:-        base,-        botan-bindings,-        botan-low,-        bytestring,-        hspec,-        QuickCheck-    other-modules:-        Test.Prelude-        Paths_botan_low-    default-language: Haskell2010-    default-extensions:-        NoImplicitPrelude-        OverloadedStrings--test-suite botan-low-keywrap-tests-    type:             exitcode-stdio-1.0-    main-is:          Botan/Low/KeyWrapSpec.hs-    hs-source-dirs:   test/-    build-depends:-        base,-        botan-bindings,-        botan-low,-        bytestring,-        hspec,-        QuickCheck-    other-modules:-        Test.Prelude-        Paths_botan_low-    default-language: Haskell2010-    default-extensions:-        NoImplicitPrelude-        OverloadedStrings--test-suite botan-low-mac-tests-    type:             exitcode-stdio-1.0-    main-is:          Botan/Low/MACSpec.hs-    hs-source-dirs:   test/-    build-depends:-        base,-        botan-bindings,-        botan-low,-        bytestring,-        hspec,-        QuickCheck-    other-modules:-        Test.Prelude-        Paths_botan_low-    default-language: Haskell2010-    default-extensions:-        NoImplicitPrelude-        OverloadedStrings--test-suite botan-low-mpi-tests-    type:             exitcode-stdio-1.0-    main-is:          Botan/Low/MPISpec.hs-    hs-source-dirs:   test/-    build-depends:-        base,-        botan-bindings,-        botan-low,-        bytestring,-        hspec,-        QuickCheck-    other-modules:-        Test.Prelude-        Paths_botan_low-    default-language: Haskell2010-    default-extensions:-        NoImplicitPrelude-        OverloadedStrings--test-suite botan-low-pubkey-tests-    type:             exitcode-stdio-1.0-    main-is:          Botan/Low/PubKeySpec.hs-    hs-source-dirs:   test/-    build-depends:-        base,-        botan-bindings,-        botan-low,-        bytestring,-        hspec,-        QuickCheck-    other-modules:-        Test.Prelude-        Paths_botan_low-    default-language: Haskell2010-    default-extensions:-        NoImplicitPrelude-        OverloadedStrings--test-suite botan-low-pubkey-decrypt-tests-    type:             exitcode-stdio-1.0-    main-is:          Botan/Low/PubKey/DecryptSpec.hs-    hs-source-dirs:   test/-    build-depends:-        base,-        botan-bindings,-        botan-low,-        bytestring,-        hspec,-        QuickCheck-    other-modules:-        Test.Prelude-        Paths_botan_low-    default-language: Haskell2010-    default-extensions:-        NoImplicitPrelude-        OverloadedStrings--test-suite botan-low-pubkey-dh-tests-    type:             exitcode-stdio-1.0-    main-is:          Botan/Low/PubKey/DHSpec.hs-    hs-source-dirs:   test/-    build-depends:-        base,-        botan-bindings,-        botan-low,-        bytestring,-        hspec,-        QuickCheck-    other-modules:-        Test.Prelude-        Paths_botan_low-    default-language: Haskell2010-    default-extensions:-        NoImplicitPrelude-        OverloadedStrings--test-suite botan-low-pubkey-dsa-tests-    type:             exitcode-stdio-1.0-    main-is:          Botan/Low/PubKey/DSASpec.hs-    hs-source-dirs:   test/-    build-depends:-        base,-        botan-bindings,-        botan-low,-        bytestring,-        hspec,-        QuickCheck-    other-modules:-        Test.Prelude-        Paths_botan_low-    default-language: Haskell2010-    default-extensions:-        NoImplicitPrelude-        OverloadedStrings--test-suite botan-low-pubkey-ecdh-tests-    type:             exitcode-stdio-1.0-    main-is:          Botan/Low/PubKey/ECDHSpec.hs-    hs-source-dirs:   test/-    build-depends:-        base,-        botan-bindings,-        botan-low,-        bytestring,-        hspec,-        QuickCheck-    other-modules:-        Test.Prelude-        Paths_botan_low-    default-language: Haskell2010-    default-extensions:-        NoImplicitPrelude-        OverloadedStrings--test-suite botan-low-pubkey-ecdsa-tests-    type:             exitcode-stdio-1.0-    main-is:          Botan/Low/PubKey/ECDSASpec.hs-    hs-source-dirs:   test/-    build-depends:-        base,-        botan-bindings,-        botan-low,-        bytestring,-        hspec,-        QuickCheck-    other-modules:-        Test.Prelude-        Paths_botan_low-    default-language: Haskell2010-    default-extensions:-        NoImplicitPrelude-        OverloadedStrings--test-suite botan-low-pubkey-ed25519-tests-    type:             exitcode-stdio-1.0-    main-is:          Botan/Low/PubKey/Ed25519Spec.hs-    hs-source-dirs:   test/-    build-depends:-        base,-        botan-bindings,-        botan-low,-        bytestring,-        hspec,-        QuickCheck-    other-modules:-        Test.Prelude-        Paths_botan_low-    default-language: Haskell2010-    default-extensions:-        NoImplicitPrelude-        OverloadedStrings--test-suite botan-low-pubkey-elgamal-tests-    type:             exitcode-stdio-1.0-    main-is:          Botan/Low/PubKey/ElGamalSpec.hs-    hs-source-dirs:   test/-    build-depends:-        base,-        botan-bindings,-        botan-low,-        bytestring,-        hspec,-        QuickCheck-    other-modules:-        Test.Prelude-        Paths_botan_low-    default-language: Haskell2010-    default-extensions:-        NoImplicitPrelude-        OverloadedStrings--test-suite botan-low-pubkey-encrypt-tests-    type:             exitcode-stdio-1.0-    main-is:          Botan/Low/PubKey/EncryptSpec.hs-    hs-source-dirs:   test/-    build-depends:-        base,-        botan-bindings,-        botan-low,-        bytestring,-        hspec,-        QuickCheck-    other-modules:-        Test.Prelude-        Paths_botan_low-    default-language: Haskell2010-    default-extensions:-        NoImplicitPrelude-        OverloadedStrings--test-suite botan-low-pubkey-keyagreement-tests-    type:             exitcode-stdio-1.0-    main-is:          Botan/Low/PubKey/KeyAgreementSpec.hs-    hs-source-dirs:   test/-    build-depends:-        base,-        botan-bindings,-        botan-low,-        bytestring,-        hspec,-        QuickCheck-    other-modules:-        Test.Prelude-        Paths_botan_low-    default-language: Haskell2010-    default-extensions:-        NoImplicitPrelude-        OverloadedStrings--test-suite botan-low-pubkey-keyencapsulation-tests-    type:             exitcode-stdio-1.0-    main-is:          Botan/Low/PubKey/KeyEncapsulationSpec.hs-    hs-source-dirs:   test/-    build-depends:-        base,-        botan-bindings,-        botan-low,-        bytestring,-        hspec,-        QuickCheck-    other-modules:-        Test.Prelude-        Paths_botan_low-    default-language: Haskell2010-    default-extensions:-        NoImplicitPrelude-        OverloadedStrings--test-suite botan-low-pubkey-rsa-tests-    type:             exitcode-stdio-1.0-    main-is:          Botan/Low/PubKey/RSASpec.hs-    hs-source-dirs:   test/-    build-depends:-        base,-        botan-bindings,-        botan-low,-        bytestring,-        hspec,-        QuickCheck-    other-modules:-        Test.Prelude-        Paths_botan_low-    default-language: Haskell2010-    default-extensions:-        NoImplicitPrelude-        OverloadedStrings--test-suite botan-low-pubkey-sign-tests-    type:             exitcode-stdio-1.0-    main-is:          Botan/Low/PubKey/SignSpec.hs-    hs-source-dirs:   test/-    build-depends:-        base,-        botan-bindings,-        botan-low,-        bytestring,-        hspec,-        QuickCheck-    other-modules:-        Test.Prelude-        Paths_botan_low-    default-language: Haskell2010-    default-extensions:-        NoImplicitPrelude-        OverloadedStrings--test-suite botan-low-pubkey-sm2-tests-    type:             exitcode-stdio-1.0-    main-is:          Botan/Low/PubKey/SM2Spec.hs-    hs-source-dirs:   test/-    build-depends:-        base,-        botan-bindings,-        botan-low,-        bytestring,-        hspec,-        QuickCheck-    other-modules:-        Test.Prelude-        Paths_botan_low-    default-language: Haskell2010-    default-extensions:-        NoImplicitPrelude-        OverloadedStrings--test-suite botan-low-pubkey-verify-tests-    type:             exitcode-stdio-1.0-    main-is:          Botan/Low/PubKey/VerifySpec.hs-    hs-source-dirs:   test/-    build-depends:-        base,-        botan-bindings,-        botan-low,-        bytestring,-        hspec,-        QuickCheck-    other-modules:-        Test.Prelude-        Paths_botan_low-    default-language: Haskell2010-    default-extensions:-        NoImplicitPrelude-        OverloadedStrings--test-suite botan-low-pubkey-x25519-tests-    type:             exitcode-stdio-1.0-    main-is:          Botan/Low/PubKey/X25519Spec.hs-    hs-source-dirs:   test/-    build-depends:-        base,-        botan-bindings,-        botan-low,-        bytestring,-        hspec,-        QuickCheck-    other-modules:-        Test.Prelude-        Paths_botan_low-    default-language: Haskell2010-    default-extensions:-        NoImplicitPrelude-        OverloadedStrings---- TODO: Pubkey folder tests--test-suite botan-low-pwdhash-tests-    type:             exitcode-stdio-1.0-    main-is:          Botan/Low/PwdHashSpec.hs-    hs-source-dirs:   test/-    build-depends:-        base,-        botan-bindings,-        botan-low,-        bytestring,-        hspec,-        QuickCheck-    other-modules:-        Test.Prelude-        Paths_botan_low-    default-language: Haskell2010-    default-extensions:-        NoImplicitPrelude-        OverloadedStrings--test-suite botan-low-rng-tests-    type:             exitcode-stdio-1.0-    main-is:          Botan/Low/RNGSpec.hs-    hs-source-dirs:   test/-    build-depends:-        base,-        botan-bindings,-        botan-low,-        bytestring,-        hspec,-        QuickCheck-    other-modules:-        Test.Prelude-        Paths_botan_low-    default-language: Haskell2010-    default-extensions:-        NoImplicitPrelude-        OverloadedStrings--test-suite botan-low-srp6-tests-    type:             exitcode-stdio-1.0-    main-is:          Botan/Low/SRP6Spec.hs-    hs-source-dirs:   test/-    build-depends:-        base,-        botan-bindings,-        botan-low,-        bytestring,-        hspec,-        QuickCheck-    other-modules:-        Test.Prelude-        Paths_botan_low-    default-language: Haskell2010-    default-extensions:-        NoImplicitPrelude-        OverloadedStrings--test-suite botan-low-totp-tests-    type:             exitcode-stdio-1.0-    main-is:          Botan/Low/TOTPSpec.hs-    hs-source-dirs:   test/-    build-depends:-        base,-        botan-bindings,-        botan-low,-        bytestring,-        hspec,-        QuickCheck-    other-modules:-        Test.Prelude-        Paths_botan_low-    default-language: Haskell2010-    default-extensions:-        NoImplicitPrelude-        OverloadedStrings--test-suite botan-low-utility-tests-    type:             exitcode-stdio-1.0-    main-is:          Botan/Low/UtilitySpec.hs-    hs-source-dirs:   test/-    build-depends:-        base,-        botan-bindings,-        botan-low,-        bytestring,-        hspec,-        QuickCheck-    other-modules:-        Test.Prelude-        Paths_botan_low-    default-language: Haskell2010-    default-extensions:-        NoImplicitPrelude-        OverloadedStrings--test-suite botan-low-x509-tests-    type:             exitcode-stdio-1.0-    main-is:          Botan/Low/X509Spec.hs-    hs-source-dirs:   test/-    build-depends:-        base,-        botan-bindings,-        botan-low,-        bytestring,-        hspec,-        QuickCheck-    other-modules:-        Test.Prelude-        Paths_botan_low-    default-language: Haskell2010-    default-extensions:-        NoImplicitPrelude-        OverloadedStrings--test-suite botan-low-zfec-tests-    type:             exitcode-stdio-1.0-    main-is:          Botan/Low/ZFECSpec.hs-    hs-source-dirs:   test/-    build-depends:-        base,-        botan-bindings,-        botan-low,-        bytestring,-        hspec,-        QuickCheck-    other-modules:-        Test.Prelude-        Paths_botan_low-    default-language: Haskell2010-    default-extensions:-        NoImplicitPrelude-        OverloadedStrings------- Benchmarks-----benchmark botan-low-bench-    hs-source-dirs: bench-    main-is:        Bcrypt.hs-    type:           exitcode-stdio-1.0-    build-depends:-        base,-        botan-bindings,-        botan-low,-        bytestring,-        crypton,-        tasty-bench-    default-language: Haskell2010-    default-extensions:-        NoImplicitPrelude-        OverloadedStrings-    ghc-options:    "-with-rtsopts=-A32m"-    if impl(ghc >= 8.6)-        ghc-options: -fproc-alignment=64+cabal-version:      3.0+name:               botan-low+version:            0.0.2.0+synopsis:           Low-level Botan bindings+description:+  Welcome to botan-low++  Low-level bindings to the [Botan](https://botan.randombit.net/) cryptography library.++  > Botan's goal is to be the best option for cryptography in C++ by offering the+  > tools necessary to implement a range of practical systems, such as TLS protocol,+  > X.509 certificates, modern AEAD ciphers, PKCS#11 and TPM hardware support,+  > password hashing, and post quantum crypto schemes.++  For more information, see the [README on Github](https://github.com/haskellfoundation/botan)++author:             Leo D.+maintainer:         joris@well-typed.com, leo@apotheca.io+license:            BSD-3-Clause+license-file:       LICENSE+copyright:+  Copyright (c) 2023-2024, Apotheca Labs+  Copyright (c) 2024-2025, Haskell Foundation++build-type:         Simple+category:           Cryptography++-- NOTE: Use data-files instead, if this is inappropriate+-- NOTE: This causes a soft error:+--      Ignoring trailing fields after sections: "extra-source-files"+-- unless placed here above source-repository and flag.+-- We can still use `extra-source-files` under `if flag(XFFI)` later without+-- causing problems+extra-source-files:+  test-data/*.der+  test-data/*.pem++extra-doc-files:+  CHANGELOG.md+  README.md++tested-with:+  GHC ==9.2 || ==9.4 || ==9.6 || ==9.8 || ==9.10 || ==9.12++source-repository head+  type:     git+  location: https://github.com/haskellfoundation/botan+  subdir:   botan-low++source-repository this+  type:     git+  location: https://github.com/haskellfoundation/botan+  subdir:   botan-low+  tag:      botan-low-0.0.2.0++flag XFFI+  description: Enable experimental / upstream ffi support+  manual:      True+  default:     False++library+  hs-source-dirs:     src+  default-language:   Haskell2010+  default-extensions:+    ExistentialQuantification+    NoImplicitPrelude+    OverloadedStrings+    PatternSynonyms+    RankNTypes+    ScopedTypeVariables+    TupleSections+    TypeApplications++  exposed-modules:+    Botan.Low.Bcrypt+    Botan.Low.BlockCipher+    Botan.Low.Cipher+    Botan.Low.Error+    Botan.Low.FPE+    Botan.Low.Hash+    Botan.Low.HOTP+    Botan.Low.KDF+    Botan.Low.KeyWrap+    Botan.Low.MAC+    Botan.Low.MPI+    Botan.Low.PubKey+    Botan.Low.PubKey.Decrypt+    Botan.Low.PubKey.DH+    Botan.Low.PubKey.DSA+    Botan.Low.PubKey.ECDH+    Botan.Low.PubKey.ECDSA+    Botan.Low.PubKey.Ed25519+    Botan.Low.PubKey.ElGamal+    Botan.Low.PubKey.Encrypt+    Botan.Low.PubKey.KeyAgreement+    Botan.Low.PubKey.KeyEncapsulation+    Botan.Low.PubKey.RSA+    Botan.Low.PubKey.Sign+    Botan.Low.PubKey.SM2+    Botan.Low.PubKey.Verify+    Botan.Low.PubKey.X25519+    Botan.Low.PwdHash+    Botan.Low.RNG+    Botan.Low.SRP6+    Botan.Low.TOTP+    Botan.Low.Utility+    Botan.Low.Version+    Botan.Low.View+    Botan.Low.X509+    Botan.Low.ZFEC++  other-modules:+    Botan.Low.Make+    Botan.Low.Prelude+    Botan.Low.Remake+    Paths_botan_low++  autogen-modules:    Paths_botan_low+  build-depends:+    , base            >=4.16 && <4.22+    , botan-bindings  ^>=0.0 || ^>=0.1+    , bytestring      >=0.11 && <0.13+    , deepseq         >=1.1  && <2+    , text            >=1.2  && <1.3   || >=2.0 && <2.2++  if flag(xffi)+    -- Botan.Low.X509.OCSP+    exposed-modules:+      Botan.Low.X509.CA+      Botan.Low.X509.CRL+      Botan.Low.X509.CSR+      Botan.Low.X509.DN+      Botan.Low.X509.Extensions+      Botan.Low.X509.Options+      Botan.Low.X509.Path+      Botan.Low.X509.Store++    cpp-options:     -DXFFI++--+-- Unit tests+--++test-suite botan-low-bcrypt-tests+  type:               exitcode-stdio-1.0+  main-is:            Botan/Low/BcryptSpec.hs+  hs-source-dirs:     test/+  build-depends:+    , base+    , botan-bindings+    , botan-low+    , bytestring+    , hspec+    , QuickCheck++  other-modules:+    Paths_botan_low+    Test.Prelude++  autogen-modules:    Paths_botan_low+  default-language:   Haskell2010+  default-extensions:+    NoImplicitPrelude+    OverloadedStrings++test-suite botan-low-block-cipher-tests+  type:               exitcode-stdio-1.0+  main-is:            Botan/Low/BlockCipherSpec.hs+  hs-source-dirs:     test/+  build-depends:+    , base+    , botan-bindings+    , botan-low+    , bytestring+    , hspec+    , QuickCheck++  other-modules:+    Paths_botan_low+    Test.Prelude++  autogen-modules:    Paths_botan_low+  default-language:   Haskell2010+  default-extensions:+    NoImplicitPrelude+    OverloadedStrings++test-suite botan-low-cipher-tests+  -- TODO: temporarily disabled because the test suite fails. See issue #33.+  buildable:          False+  type:               exitcode-stdio-1.0+  main-is:            Botan/Low/CipherSpec.hs+  hs-source-dirs:     test/+  build-depends:+    , base+    , botan-bindings+    , botan-low+    , bytestring+    , hspec+    , QuickCheck++  other-modules:+    Paths_botan_low+    Test.Prelude++  autogen-modules:    Paths_botan_low+  default-language:   Haskell2010+  default-extensions:+    NoImplicitPrelude+    OverloadedStrings++test-suite botan-low-fpe-tests+  type:               exitcode-stdio-1.0+  main-is:            Botan/Low/FPESpec.hs+  hs-source-dirs:     test/+  build-depends:+    , base+    , botan-bindings+    , botan-low+    , bytestring+    , hspec+    , QuickCheck++  other-modules:+    Paths_botan_low+    Test.Prelude++  autogen-modules:    Paths_botan_low+  default-language:   Haskell2010+  default-extensions:+    NoImplicitPrelude+    OverloadedStrings++test-suite botan-low-hash-tests+  type:               exitcode-stdio-1.0+  main-is:            Botan/Low/HashSpec.hs+  hs-source-dirs:     test/+  build-depends:+    , base+    , botan-bindings+    , botan-low+    , bytestring+    , hspec+    , QuickCheck++  other-modules:+    Paths_botan_low+    Test.Prelude++  autogen-modules:    Paths_botan_low+  default-language:   Haskell2010+  default-extensions:+    NoImplicitPrelude+    OverloadedStrings++test-suite botan-low-hotp-tests+  type:               exitcode-stdio-1.0+  main-is:            Botan/Low/HOTPSpec.hs+  hs-source-dirs:     test/+  build-depends:+    , base+    , botan-bindings+    , botan-low+    , bytestring+    , hspec+    , QuickCheck++  other-modules:+    Paths_botan_low+    Test.Prelude++  autogen-modules:    Paths_botan_low+  default-language:   Haskell2010+  default-extensions:+    NoImplicitPrelude+    OverloadedStrings++test-suite botan-low-kdf-tests+  type:               exitcode-stdio-1.0+  main-is:            Botan/Low/KDFSpec.hs+  hs-source-dirs:     test/+  build-depends:+    , base+    , botan-bindings+    , botan-low+    , bytestring+    , hspec+    , QuickCheck++  other-modules:+    Paths_botan_low+    Test.Prelude++  autogen-modules:    Paths_botan_low+  default-language:   Haskell2010+  default-extensions:+    NoImplicitPrelude+    OverloadedStrings++test-suite botan-low-keywrap-tests+  type:               exitcode-stdio-1.0+  main-is:            Botan/Low/KeyWrapSpec.hs+  hs-source-dirs:     test/+  build-depends:+    , base+    , botan-bindings+    , botan-low+    , bytestring+    , hspec+    , QuickCheck++  other-modules:+    Paths_botan_low+    Test.Prelude++  autogen-modules:    Paths_botan_low+  default-language:   Haskell2010+  default-extensions:+    NoImplicitPrelude+    OverloadedStrings++test-suite botan-low-mac-tests+  type:               exitcode-stdio-1.0+  main-is:            Botan/Low/MACSpec.hs+  hs-source-dirs:     test/+  build-depends:+    , base+    , botan-bindings+    , botan-low+    , bytestring+    , hspec+    , QuickCheck++  other-modules:+    Paths_botan_low+    Test.Prelude++  autogen-modules:    Paths_botan_low+  default-language:   Haskell2010+  default-extensions:+    NoImplicitPrelude+    OverloadedStrings++test-suite botan-low-mpi-tests+  type:               exitcode-stdio-1.0+  main-is:            Botan/Low/MPISpec.hs+  hs-source-dirs:     test/+  build-depends:+    , base+    , botan-bindings+    , botan-low+    , bytestring+    , hspec+    , QuickCheck++  other-modules:+    Paths_botan_low+    Test.Prelude++  autogen-modules:    Paths_botan_low+  default-language:   Haskell2010+  default-extensions:+    NoImplicitPrelude+    OverloadedStrings++test-suite botan-low-pubkey-tests+  type:               exitcode-stdio-1.0+  main-is:            Botan/Low/PubKeySpec.hs+  hs-source-dirs:     test/+  build-depends:+    , base+    , botan-bindings+    , botan-low+    , bytestring+    , hspec+    , QuickCheck++  other-modules:+    Paths_botan_low+    Test.Prelude++  autogen-modules:    Paths_botan_low+  default-language:   Haskell2010+  default-extensions:+    NoImplicitPrelude+    OverloadedStrings++test-suite botan-low-pubkey-decrypt-tests+  -- TODO: temporarily disabled because the test suite fails. See issue #33.+  buildable:          False+  type:               exitcode-stdio-1.0+  main-is:            Botan/Low/PubKey/DecryptSpec.hs+  hs-source-dirs:     test/+  build-depends:+    , base+    , botan-bindings+    , botan-low+    , bytestring+    , hspec+    , QuickCheck++  other-modules:+    Paths_botan_low+    Test.Prelude++  autogen-modules:    Paths_botan_low+  default-language:   Haskell2010+  default-extensions:+    NoImplicitPrelude+    OverloadedStrings++test-suite botan-low-pubkey-dh-tests+  type:               exitcode-stdio-1.0+  main-is:            Botan/Low/PubKey/DHSpec.hs+  hs-source-dirs:     test/+  build-depends:+    , base+    , botan-bindings+    , botan-low+    , bytestring+    , hspec+    , QuickCheck++  other-modules:+    Paths_botan_low+    Test.Prelude++  autogen-modules:    Paths_botan_low+  default-language:   Haskell2010+  default-extensions:+    NoImplicitPrelude+    OverloadedStrings++test-suite botan-low-pubkey-dsa-tests+  -- TODO: temporarily disabled because the test suite fails. See issue #33.+  buildable:          False+  type:               exitcode-stdio-1.0+  main-is:            Botan/Low/PubKey/DSASpec.hs+  hs-source-dirs:     test/+  build-depends:+    , base+    , botan-bindings+    , botan-low+    , bytestring+    , hspec+    , QuickCheck++  other-modules:+    Paths_botan_low+    Test.Prelude++  autogen-modules:    Paths_botan_low+  default-language:   Haskell2010+  default-extensions:+    NoImplicitPrelude+    OverloadedStrings++test-suite botan-low-pubkey-ecdh-tests+  type:               exitcode-stdio-1.0+  main-is:            Botan/Low/PubKey/ECDHSpec.hs+  hs-source-dirs:     test/+  build-depends:+    , base+    , botan-bindings+    , botan-low+    , bytestring+    , hspec+    , QuickCheck++  other-modules:+    Paths_botan_low+    Test.Prelude++  autogen-modules:    Paths_botan_low+  default-language:   Haskell2010+  default-extensions:+    NoImplicitPrelude+    OverloadedStrings++test-suite botan-low-pubkey-ecdsa-tests+  type:               exitcode-stdio-1.0+  main-is:            Botan/Low/PubKey/ECDSASpec.hs+  hs-source-dirs:     test/+  build-depends:+    , base+    , botan-bindings+    , botan-low+    , bytestring+    , hspec+    , QuickCheck++  other-modules:+    Paths_botan_low+    Test.Prelude++  autogen-modules:    Paths_botan_low+  default-language:   Haskell2010+  default-extensions:+    NoImplicitPrelude+    OverloadedStrings++test-suite botan-low-pubkey-ed25519-tests+  type:               exitcode-stdio-1.0+  main-is:            Botan/Low/PubKey/Ed25519Spec.hs+  hs-source-dirs:     test/+  build-depends:+    , base+    , botan-bindings+    , botan-low+    , bytestring+    , hspec+    , QuickCheck++  other-modules:+    Paths_botan_low+    Test.Prelude++  autogen-modules:    Paths_botan_low+  default-language:   Haskell2010+  default-extensions:+    NoImplicitPrelude+    OverloadedStrings++test-suite botan-low-pubkey-elgamal-tests+  type:               exitcode-stdio-1.0+  main-is:            Botan/Low/PubKey/ElGamalSpec.hs+  hs-source-dirs:     test/+  build-depends:+    , base+    , botan-bindings+    , botan-low+    , bytestring+    , hspec+    , QuickCheck++  other-modules:+    Paths_botan_low+    Test.Prelude++  autogen-modules:    Paths_botan_low+  default-language:   Haskell2010+  default-extensions:+    NoImplicitPrelude+    OverloadedStrings++test-suite botan-low-pubkey-encrypt-tests+  -- TODO: temporarily disabled because the test suite fails. See issue #33.+  buildable:          False+  type:               exitcode-stdio-1.0+  main-is:            Botan/Low/PubKey/EncryptSpec.hs+  hs-source-dirs:     test/+  build-depends:+    , base+    , botan-bindings+    , botan-low+    , bytestring+    , hspec+    , QuickCheck++  other-modules:+    Paths_botan_low+    Test.Prelude++  autogen-modules:    Paths_botan_low+  default-language:   Haskell2010+  default-extensions:+    NoImplicitPrelude+    OverloadedStrings++test-suite botan-low-pubkey-keyagreement-tests+  type:               exitcode-stdio-1.0+  main-is:            Botan/Low/PubKey/KeyAgreementSpec.hs+  hs-source-dirs:     test/+  build-depends:+    , base+    , botan-bindings+    , botan-low+    , bytestring+    , hspec+    , QuickCheck++  other-modules:+    Paths_botan_low+    Test.Prelude++  autogen-modules:    Paths_botan_low+  default-language:   Haskell2010+  default-extensions:+    NoImplicitPrelude+    OverloadedStrings++test-suite botan-low-pubkey-keyencapsulation-tests+  type:               exitcode-stdio-1.0+  main-is:            Botan/Low/PubKey/KeyEncapsulationSpec.hs+  hs-source-dirs:     test/+  build-depends:+    , base+    , botan-bindings+    , botan-low+    , bytestring+    , hspec+    , QuickCheck++  other-modules:+    Paths_botan_low+    Test.Prelude++  autogen-modules:    Paths_botan_low+  default-language:   Haskell2010+  default-extensions:+    NoImplicitPrelude+    OverloadedStrings++test-suite botan-low-pubkey-rsa-tests+  type:               exitcode-stdio-1.0+  main-is:            Botan/Low/PubKey/RSASpec.hs+  hs-source-dirs:     test/+  build-depends:+    , base+    , botan-bindings+    , botan-low+    , bytestring+    , hspec+    , QuickCheck++  other-modules:+    Paths_botan_low+    Test.Prelude++  autogen-modules:    Paths_botan_low+  default-language:   Haskell2010+  default-extensions:+    NoImplicitPrelude+    OverloadedStrings++test-suite botan-low-pubkey-sign-tests+  type:               exitcode-stdio-1.0+  main-is:            Botan/Low/PubKey/SignSpec.hs+  hs-source-dirs:     test/+  build-depends:+    , base+    , botan-bindings+    , botan-low+    , bytestring+    , hspec+    , QuickCheck++  other-modules:+    Paths_botan_low+    Test.Prelude++  autogen-modules:    Paths_botan_low+  default-language:   Haskell2010+  default-extensions:+    NoImplicitPrelude+    OverloadedStrings++test-suite botan-low-pubkey-sm2-tests+  type:               exitcode-stdio-1.0+  main-is:            Botan/Low/PubKey/SM2Spec.hs+  hs-source-dirs:     test/+  build-depends:+    , base+    , botan-bindings+    , botan-low+    , bytestring+    , hspec+    , QuickCheck++  other-modules:+    Paths_botan_low+    Test.Prelude++  autogen-modules:    Paths_botan_low+  default-language:   Haskell2010+  default-extensions:+    NoImplicitPrelude+    OverloadedStrings++test-suite botan-low-pubkey-verify-tests+  type:               exitcode-stdio-1.0+  main-is:            Botan/Low/PubKey/VerifySpec.hs+  hs-source-dirs:     test/+  build-depends:+    , base+    , botan-bindings+    , botan-low+    , bytestring+    , hspec+    , QuickCheck++  other-modules:+    Paths_botan_low+    Test.Prelude++  autogen-modules:    Paths_botan_low+  default-language:   Haskell2010+  default-extensions:+    NoImplicitPrelude+    OverloadedStrings++test-suite botan-low-pubkey-x25519-tests+  type:               exitcode-stdio-1.0+  main-is:            Botan/Low/PubKey/X25519Spec.hs+  hs-source-dirs:     test/+  build-depends:+    , base+    , botan-bindings+    , botan-low+    , bytestring+    , hspec+    , QuickCheck++  other-modules:+    Paths_botan_low+    Test.Prelude++  autogen-modules:    Paths_botan_low+  default-language:   Haskell2010+  default-extensions:+    NoImplicitPrelude+    OverloadedStrings++-- TODO: Pubkey folder tests++test-suite botan-low-pwdhash-tests+  -- TODO: temporarily disabled because the test suite fails. See issue #33.+  buildable:          False+  type:               exitcode-stdio-1.0+  main-is:            Botan/Low/PwdHashSpec.hs+  hs-source-dirs:     test/+  build-depends:+    , base+    , botan-bindings+    , botan-low+    , bytestring+    , hspec+    , QuickCheck++  other-modules:+    Paths_botan_low+    Test.Prelude++  autogen-modules:    Paths_botan_low+  default-language:   Haskell2010+  default-extensions:+    NoImplicitPrelude+    OverloadedStrings++test-suite botan-low-rng-tests+  if os(osx)+    -- TODO: temporarily disabled because the test suite fails. See issue #33.+    buildable: False++  type:               exitcode-stdio-1.0+  main-is:            Botan/Low/RNGSpec.hs+  hs-source-dirs:     test/+  build-depends:+    , base+    , botan-bindings+    , botan-low+    , bytestring+    , hspec+    , QuickCheck++  other-modules:+    Paths_botan_low+    Test.Prelude++  autogen-modules:    Paths_botan_low+  default-language:   Haskell2010+  default-extensions:+    NoImplicitPrelude+    OverloadedStrings++test-suite botan-low-srp6-tests+  -- TODO: temporarily disabled because the test suite fails. See issue #33.+  buildable:          False+  type:               exitcode-stdio-1.0+  main-is:            Botan/Low/SRP6Spec.hs+  hs-source-dirs:     test/+  build-depends:+    , base+    , botan-bindings+    , botan-low+    , bytestring+    , hspec+    , QuickCheck++  other-modules:+    Paths_botan_low+    Test.Prelude++  autogen-modules:    Paths_botan_low+  default-language:   Haskell2010+  default-extensions:+    NoImplicitPrelude+    OverloadedStrings++test-suite botan-low-totp-tests+  type:               exitcode-stdio-1.0+  main-is:            Botan/Low/TOTPSpec.hs+  hs-source-dirs:     test/+  build-depends:+    , base+    , botan-bindings+    , botan-low+    , bytestring+    , hspec+    , QuickCheck++  other-modules:+    Paths_botan_low+    Test.Prelude++  autogen-modules:    Paths_botan_low+  default-language:   Haskell2010+  default-extensions:+    NoImplicitPrelude+    OverloadedStrings++test-suite botan-low-utility-tests+  type:               exitcode-stdio-1.0+  main-is:            Botan/Low/UtilitySpec.hs+  hs-source-dirs:     test/+  build-depends:+    , base+    , botan-bindings+    , botan-low+    , bytestring+    , hspec+    , QuickCheck++  other-modules:+    Paths_botan_low+    Test.Prelude++  autogen-modules:    Paths_botan_low+  default-language:   Haskell2010+  default-extensions:+    NoImplicitPrelude+    OverloadedStrings++test-suite botan-low-x509-tests+  type:               exitcode-stdio-1.0+  main-is:            Botan/Low/X509Spec.hs+  hs-source-dirs:     test/+  build-depends:+    , base+    , botan-bindings+    , botan-low+    , bytestring+    , hspec+    , QuickCheck++  other-modules:+    Paths_botan_low+    Test.Prelude++  autogen-modules:    Paths_botan_low+  default-language:   Haskell2010+  default-extensions:+    NoImplicitPrelude+    OverloadedStrings++test-suite botan-low-zfec-tests+  type:               exitcode-stdio-1.0+  main-is:            Botan/Low/ZFECSpec.hs+  hs-source-dirs:     test/+  build-depends:+    , base+    , botan-bindings+    , botan-low+    , bytestring+    , hspec+    , QuickCheck++  other-modules:+    Paths_botan_low+    Test.Prelude++  autogen-modules:    Paths_botan_low+  default-language:   Haskell2010+  default-extensions:+    NoImplicitPrelude+    OverloadedStrings++--+-- Benchmarks+--++benchmark botan-low-bench+  hs-source-dirs:     bench+  main-is:            Bcrypt.hs+  type:               exitcode-stdio-1.0+  build-depends:+    , base+    , botan-bindings+    , botan-low+    , bytestring+    , crypton+    , tasty-bench++  default-language:   Haskell2010+  default-extensions:+    NoImplicitPrelude+    OverloadedStrings++  ghc-options:        -with-rtsopts=-A32m++  if impl(ghc >=8.6)+    ghc-options: -fproc-alignment=64
src/Botan/Low/Bcrypt.hs view
@@ -1,9 +1,10 @@ {-| Module      : Botan.Low.Bcrypt Description : Bcrypt password hashing-Copyright   : (c) Leo D, 2023+Copyright   : (c) 2023-2024, Apotheca Labs+              (c) 2024-2025, Haskell Foundation License     : BSD-3-Clause-Maintainer  : leo@apotheca.io+Maintainer  : joris@well-typed.com, leo@apotheca.io Stability   : experimental Portability : POSIX @@ -51,7 +52,7 @@ `bcrypt` is a password-hashing algorithm designed to protect your passwords against hackers using an expensive key setup phase. Instead of storing a user's password in plaintext in the database, the server may instead generate a salted-bcrypt digest upon signup, and verify it upon login. +bcrypt digest upon signup, and verify it upon login.  The `bcrypt` implementation provided by `botan` generates a random salt for you automatically. A work factor of 12 or greater is recommended.@@ -64,8 +65,8 @@  > import Botan.Low.RNG > import Botan.Low.Bcrypt-> -> -- The user has sent us a username and password in order to sign up +>+> -- The user has sent us a username and password in order to sign up > onUserSignup :: ByteString -> ByteString -> IO () > onUserSignup username password = do >     rng <- rngInit "user"@@ -76,7 +77,7 @@  > import Botan.Low.RNG > import Botan.Low.Bcrypt-> +> > -- The user has sent us a username and password in order to log in > onUserLogin :: ByteString -> ByteString -> IO Bool > onUserLogin username password = do
src/Botan/Low/BlockCipher.hs view
@@ -1,9 +1,10 @@ {-| Module      : Botan.Low.BlockCipher Description : Raw Block Cipher (PRP) interface-Copyright   : (c) Leo D, 2023+Copyright   : (c) 2023-2024, Apotheca Labs+              (c) 2024-2025, Haskell Foundation License     : BSD-3-Clause-Maintainer  : leo@apotheca.io+Maintainer  : joris@well-typed.com, leo@apotheca.io Stability   : experimental Portability : POSIX @@ -238,7 +239,7 @@  -- | A block cipher ciphertext type BlockCipherCiphertext = ByteString-    + -- | Initialize a block cipher object blockCipherInit     :: BlockCipherName  -- ^ __cipher_name__@@ -293,7 +294,6 @@                 (ConstPtr bytesPtr)                 destPtr                 bytesLen-{-# WARNING blockCipherEncryptBlocks "The plaintext length should be a multiple of the block size." #-}  {- | Decrypt one or more blocks with a block cipher.@@ -314,7 +314,6 @@                 (ConstPtr bytesPtr)                 destPtr                 bytesLen-{-# WARNING blockCipherDecryptBlocks "The ciphertext length should be a multiple of the block size." #-}  {- | Get the name of a block cipher.
src/Botan/Low/Cipher.hs view
@@ -1,9 +1,10 @@ {-| Module      : Botan.Low.Cipher Description : Symmetric cipher modes-Copyright   : (c) Leo D, 2023+Copyright   : (c) 2023-2024, Apotheca Labs+              (c) 2024-2025, Haskell Foundation License     : BSD-3-Clause-Maintainer  : leo@apotheca.io+Maintainer  : joris@well-typed.com, leo@apotheca.io Stability   : experimental Portability : POSIX @@ -15,7 +16,7 @@  module Botan.Low.Cipher (- + -- * Cipher -- $introduction @@ -152,7 +153,7 @@ To encrypt a message, it must be a multiple of the block size. If the cipher was an aead, the authentication tag will automatically be included in the ciphertext  > -- Rarely, some cipher modes require that the message size be aligned to the block size-> -- Consult algorithm-specific documentation if this occurs. +> -- Consult algorithm-specific documentation if this occurs. > message = "I smell the blood of an Englishman!" > cipherStart encrypter nonce > ciphertext <- cipherEncrypt encrypter message@@ -229,13 +230,13 @@ pattern CTS         = BOTAN_CBC_PADDING_CTS pattern NoPadding   = BOTAN_CBC_PADDING_NO_PADDING -cbcMode :: BlockCipherName -> CBCPaddingName -> CipherName +cbcMode :: BlockCipherName -> CBCPaddingName -> CipherName cbcMode bc padding = bc // BOTAN_CIPHER_MODE_CBC // padding -cfbMode :: BlockCipherName -> CipherName +cfbMode :: BlockCipherName -> CipherName cfbMode bc = bc // BOTAN_CIPHER_MODE_CFB -cfbModeWith :: BlockCipherName -> Int -> CipherName +cfbModeWith :: BlockCipherName -> Int -> CipherName cfbModeWith bc feedbackSz = cfbMode bc /$ showBytes feedbackSz  xtsMode :: BlockCipherName -> CipherName@@ -415,7 +416,7 @@ -- |Reset the message specific state for this cipher. --  Without resetting the keys, this resets the nonce, and any state --  associated with any message bits that have been processed so far.---  +-- --  It is conceptually equivalent to calling botan_cipher_clear followed --  by botan_cipher_set_key with the original key. cipherReset@@ -505,7 +506,7 @@     t <- cipherGetTagLength ctx     if flags == BOTAN_CIPHER_INIT_FLAG_ENCRYPT         then return (o + u + t)-        else return (o + u - t) -- TODO: Maybe just 'o'... +        else return (o + u - t) -- TODO: Maybe just 'o'...  -- NOTE: Offset must be a valid length of the input so far processed -- NOTE: If (estimated) outputLength input + offset == outputLength (input + offset) then
src/Botan/Low/Error.hs view
@@ -1,9 +1,10 @@ {-| Module      : Botan.Low.Error Description : Error codes and exception handling-Copyright   : (c) Leo D, 2023+Copyright   : (c) 2023-2024, Apotheca Labs+              (c) 2024-2025, Haskell Foundation License     : BSD-3-Clause-Maintainer  : leo@apotheca.io+Maintainer  : joris@well-typed.com, leo@apotheca.io Stability   : experimental Portability : POSIX -}@@ -304,7 +305,7 @@ instance Exception InvalidObjectException where     toException = toBotanException     fromException = fromBotanException-    + data UnknownException     = UnknownException BotanErrorCode ErrorMessage CallStack     deriving (Show)
src/Botan/Low/FPE.hs view
@@ -1,9 +1,10 @@ {-| Module      : Botan.Low.FPE Description : Format Preserving Encryption-Copyright   : (c) Leo D, 2023+Copyright   : (c) 2023-2024, Apotheca Labs+              (c) 2024-2025, Haskell Foundation License     : BSD-3-Clause-Maintainer  : leo@apotheca.io+Maintainer  : joris@well-typed.com, leo@apotheca.io Stability   : experimental Portability : POSIX @@ -118,7 +119,7 @@ -- fpeEncrypt fpe mp tweak = do --     mp' <- mpCopy mp --     fpeEncrypt fpe mp' tweak---     return mp +--     return mp  -- | Encrypt the 'x' value in-place --@@ -139,7 +140,7 @@ -- fpeDecrypt fpe mp tweak = do --     mp' <- mpCopy mp --     fpeDecrypt fpe mp' tweak---     return mp +--     return mp  -- | Decrypt the 'x' value in-place --
src/Botan/Low/HOTP.hs view
@@ -1,9 +1,10 @@ {-| Module      : Botan.Low.HOTP Description : Hash-based one-time passwords-Copyright   : (c) Leo D, 2023+Copyright   : (c) 2023-2024, Apotheca Labs+              (c) 2024-2025, Haskell Foundation License     : BSD-3-Clause-Maintainer  : leo@apotheca.io+Maintainer  : joris@well-typed.com, leo@apotheca.io Stability   : experimental Portability : POSIX @@ -67,7 +68,7 @@ Botan implements the HOTP and TOTP schemes from RFC 4226 and 6238.  Since the range of possible OTPs is quite small, applications must-rate limit OTP authentication attempts to some small number per +rate limit OTP authentication attempts to some small number per second. Otherwise an attacker could quickly try all 1000000 6-digit OTPs in a brief amount of time. @@ -107,7 +108,7 @@ > -- TODO: Use random:System.Random.Stateful.Uniform instead of MPI in `botan` > (hi :: Word32) <- mpInit >>= \ w -> mpRandBits w rng 32 >> mpToWord32 w > (lo :: Word32) <- mpInit >>= \ w -> mpRandBits w rng 32 >> mpToWord32 w-> (counter :: Word64) = shiftL (fromIntegral hi) 32 `xor` fromIntegral lo +> (counter :: Word64) = shiftL (fromIntegral hi) 32 `xor` fromIntegral lo  The client and server authenticators are now in a shared state, and any login attempts from a new device may be authenticated using HOTP as MFA.@@ -175,7 +176,7 @@  type HOTPHashName = HashName -pattern HOTP_SHA1 +pattern HOTP_SHA1     ,   HOTP_SHA256     ,   HOTP_SHA512     ::  HOTPHashName@@ -202,7 +203,7 @@     -> IO HOTP      -- ^ __hotp__ hotpInit key algo digits = asBytesLen key $ \ keyPtr keyLen -> do     asCString algo $ \ algoPtr -> do-        createHOTP $ \ out -> botan_hotp_init +        createHOTP $ \ out -> botan_hotp_init             out             (ConstPtr keyPtr)             keyLen
src/Botan/Low/Hash.hs view
@@ -1,9 +1,10 @@ {-| Module      : Botan.Low.Hash Description : Hash Functions and Checksums-Copyright   : (c) Leo D, 2023+Copyright   : (c) 2023-2024, Apotheca Labs+              (c) 2024-2025, Haskell Foundation License     : BSD-3-Clause-Maintainer  : leo@apotheca.io+Maintainer  : joris@well-typed.com, leo@apotheca.io Stability   : experimental Portability : POSIX @@ -26,14 +27,14 @@ -}  module Botan.Low.Hash-( -    +(+ -- * Hashing -- $introduction  -- * Usage -- $usage- +   Hash(..) , HashName(..) , HashDigest(..)@@ -233,7 +234,7 @@ pattern CRC32           = BOTAN_CHECKSUM_CRC32  cryptohashes :: [HashName]-cryptohashes = +cryptohashes =     [ BLAKE2b     -- , "BLAKE2b(128)"     -- , "BLAKE2b(256)"@@ -282,7 +283,7 @@ -- hashStrategies :: [HashName] -- hashStrategies = undefined -checksums = +checksums =     [ Adler32     , CRC24     , CRC32
src/Botan/Low/KDF.hs view
@@ -1,9 +1,10 @@ {-| Module      : Botan.Low.KDF Description : Key Derivation Functions (KDF)-Copyright   : (c) Leo D, 2023+Copyright   : (c) 2023-2024, Apotheca Labs+              (c) 2024-2025, Haskell Foundation License     : BSD-3-Clause-Maintainer  : leo@apotheca.io+Maintainer  : joris@well-typed.com, leo@apotheca.io Stability   : experimental Portability : POSIX 
src/Botan/Low/KeyWrap.hs view
@@ -1,9 +1,10 @@ {-| Module      : Botan.Low.KeyWrap Description : Bcrypt password hashing-Copyright   : (c) Leo D, 2023+Copyright   : (c) 2023-2024, Apotheca Labs+              (c) 2024-2025, Haskell Foundation License     : BSD-3-Clause-Maintainer  : leo@apotheca.io+Maintainer  : joris@well-typed.com, leo@apotheca.io Stability   : experimental Portability : POSIX 
src/Botan/Low/MAC.hs view
@@ -1,9 +1,10 @@ {-| Module      : Botan.Low.MAC Description : Message Authentication Codes (MAC)-Copyright   : (c) Leo D, 2023+Copyright   : (c) 2023-2024, Apotheca Labs+              (c) 2024-2025, Haskell Foundation License     : BSD-3-Clause-Maintainer  : leo@apotheca.io+Maintainer  : joris@well-typed.com, leo@apotheca.io Stability   : experimental Portability : POSIX 
src/Botan/Low/MPI.hs view
@@ -1,9 +1,10 @@ {-| Module      : Botan.Low.MPI Description : Multiple Precision Integers-Copyright   : (c) Leo D, 2023+Copyright   : (c) 2023-2024, Apotheca Labs+              (c) 2024-2025, Haskell Foundation License     : BSD-3-Clause-Maintainer  : leo@apotheca.io+Maintainer  : joris@well-typed.com, leo@apotheca.io Stability   : experimental Portability : POSIX -}@@ -52,7 +53,7 @@ , mpIsPrime , mpGetBit , mpSetBit-, mpClearBit  +, mpClearBit  ) where @@ -107,7 +108,7 @@  mpToStr :: MP -> Int -> IO ByteString mpToStr mp base = withMP mp $ \ mpPtr -> do-    allocBytesQueryingCString $ \ bytesPtr szPtr -> +    allocBytesQueryingCString $ \ bytesPtr szPtr ->         botan_mp_to_str mpPtr (fromIntegral base) bytesPtr szPtr  mpClear :: MP -> IO ()
src/Botan/Low/Make.hs view
@@ -30,7 +30,7 @@ -}  type WithPtr typ ptr = (forall a . typ -> (ptr -> IO a) -> IO a)--- NOTE: WithPtr typ ptr ~ typ -> Codensity IO ptr +-- NOTE: WithPtr typ ptr ~ typ -> Codensity IO ptr --  where: type Codensity m a = forall b . (a -> m b) -> m b -- TODO: Refine further per: --  https://discourse.haskell.org/t/questions-about-ffi-foreignptr-and-opaque-types/6914/21?u=apothecalabs@@ -120,7 +120,7 @@     -> ByteString -> IO typ mkInit_name constr init destroy name = do     alloca $ \ outPtr -> do-        asCString name $ \ namePtr -> do +        asCString name $ \ namePtr -> do             throwBotanIfNegative_ $ init outPtr namePtr         out <- peek outPtr         foreignPtr <- newForeignPtr destroy out@@ -133,7 +133,7 @@     -> ByteString -> Word32 -> IO typ mkInit_name_flags constr init destroy name flags = do     alloca $ \ outPtr -> do-        asCString name $ \ namePtr -> do +        asCString name $ \ namePtr -> do             throwBotanIfNegative_ $ init outPtr namePtr flags         out <- peek outPtr         foreignPtr <- newForeignPtr destroy out@@ -146,7 +146,7 @@     -> Destructor struct     -> ByteString -> IO typ mkInit_bytes constr init destroy bytes = do-    asBytes bytes $ \ bytesPtr -> do +    asBytes bytes $ \ bytesPtr -> do         alloca $ \ outPtr -> do             throwBotanIfNegative_ $ init outPtr bytesPtr             out <- peek outPtr@@ -159,7 +159,7 @@     -> Destructor struct     -> ByteString -> IO typ mkInit_bytes_len constr init destroy bytes = do-    asBytesLen bytes $ \ bytesPtr bytesLen -> do +    asBytesLen bytes $ \ bytesPtr bytesLen -> do         alloca $ \ outPtr -> do             throwBotanIfNegative_ $ init outPtr bytesPtr bytesLen             out <- peek outPtr@@ -289,7 +289,7 @@  -- NOTE: Get...Code nomenclature signifies that we get the desired return value --  from the error code error code, eg they use something other than throwBotanIfNegative_---      +--   type GetSuccessCode ptr = ptr -> IO BotanErrorCode@@ -396,7 +396,7 @@     -> SetCString ptr     -> typ -> ByteString -> IO () mkSetCString withPtr set typ cstring = withPtr typ $ \ typPtr -> do-    asCString cstring $ \ cstringPtr -> do +    asCString cstring $ \ cstringPtr -> do         throwBotanIfNegative_ $ set typPtr cstringPtr  mkSetCString_csize@@ -404,7 +404,7 @@     -> SetCString_csize ptr     -> typ -> ByteString -> Int -> IO () mkSetCString_csize withPtr set typ cstring sz = withPtr typ $ \ typPtr -> do-    asCString cstring $ \ cstringPtr -> do +    asCString cstring $ \ cstringPtr -> do         throwBotanIfNegative_ $ set typPtr cstringPtr (fromIntegral sz)  type SetBytesLen ptr = ptr -> Ptr Word8 -> CSize -> IO BotanErrorCode@@ -414,7 +414,7 @@     -> SetBytesLen ptr     -> typ -> ByteString -> IO () mkSetBytesLen withPtr set typ bytes = withPtr typ $ \ typPtr -> do-    asBytesLen bytes $ \ bytesPtr bytesLen -> do +    asBytesLen bytes $ \ bytesPtr bytesLen -> do         throwBotanIfNegative_ $ set typPtr bytesPtr bytesLen  -- EXPERIMENTAL
src/Botan/Low/Prelude.hs view
@@ -86,11 +86,11 @@ - Different names for different types (peek vs pack, useAs vs with)     - Data.ByteString         - packCString :: CString -> IO ByteString-        - useAsCString :: ByteString -> (CString -> IO a) -> IO a +        - useAsCString :: ByteString -> (CString -> IO a) -> IO a     - Text     - Foreign.C.String         - peekCString :: CString -> IO String-        - withCString :: String -> (CString -> IO a) -> IO a +        - withCString :: String -> (CString -> IO a) -> IO a -}  {-@@ -125,7 +125,7 @@ -- peekCBytes :: CBytes -> Int -> IO ByteString -- peekCBytes = undefined -withCBytes :: ByteString -> (CBytes -> IO a) -> IO a +withCBytes :: ByteString -> (CBytes -> IO a) -> IO a withCBytes bs act = ByteString.useAsCStringLen bs (\ (ptr,_) -> act (castPtr ptr))  type CBytesLen = (Ptr Word8, Int)@@ -141,7 +141,7 @@  {- type ConstCString       = ConstPtr CChar-type ConstCStringLen    = (ConstPtr CChar, Int) +type ConstCStringLen    = (ConstPtr CChar, Int)  type ConstCBytes    = ConstPtr Word8 type ConstCBytesLen = (ConstPtr Word8, Int)
src/Botan/Low/PubKey.hs view
@@ -1,9 +1,10 @@ {-| Module      : Botan.Low.PubKey Description : Public key cryptography-Copyright   : (c) Leo D, 2023+Copyright   : (c) 2023-2024, Apotheca Labs+              (c) 2024-2025, Haskell Foundation License     : BSD-3-Clause-Maintainer  : leo@apotheca.io+Maintainer  : joris@well-typed.com, leo@apotheca.io Stability   : experimental Portability : POSIX @@ -174,7 +175,7 @@ , mkPubKeyLoad2_name , mkPubKeyLoad3 , mkPubKeyLoad4-    + ) where  import qualified Data.ByteString as ByteString@@ -272,7 +273,7 @@ -- Associated types  type PKPaddingName = ByteString-    + -- /* -- * Public/private key creation, import, ... -- */@@ -519,7 +520,7 @@ -} type EMSAName = ByteString --- emsa_rsa :: +-- emsa_rsa ::  emsa_emsa4 :: HashName -> EMSAName emsa_emsa4 h = "EMSA4(" <> h <> ")"@@ -543,7 +544,7 @@ -- emsa_dilithium  emsa_none :: EMSAName-emsa_none = ""        +emsa_none = ""  -- | Create a new private key privKeyCreate@@ -626,7 +627,7 @@ If out is not big enough no output is written, *out_len is set and 1 is returned Returns 0 on success and sets If some other error occurs a negative integer is returned.--}      +-} privKeyExport     :: PrivKey              -- ^ __key__     -> PrivKeyExportFlags   -- ^ __flags__@@ -670,7 +671,7 @@ --     -> ByteString   -- Cipher algo --     -> ByteString   -- PBKDF algo --     -> Word32       -- Flags---     -> IO ByteString +--     -> IO ByteString -- privKeyExportEncryptedPBKDFMsec = undefined  -- TODO:@@ -682,7 +683,7 @@ --     -> ByteString   -- Cipher algo --     -> ByteString   -- PBKDF algo --     -> Word32       -- Flags---     -> IO ByteString +--     -> IO ByteString -- privKeyExportEncryptedPBKDFIter = undefined  newtype PubKey = MkPubKey { getPubKeyForeignPtr :: ForeignPtr BotanPubKeyStruct }@@ -722,7 +723,7 @@ pattern PubKeyExportDER = PrivKeyExportDER pattern PubKeyExportPEM = PrivKeyExportPEM --- NOTE: Different from allocBytesQuerying / INSUFFICIENT_BUFFER_SPACE     +-- NOTE: Different from allocBytesQuerying / INSUFFICIENT_BUFFER_SPACE pubKeyExport     :: PubKey               -- ^ __key__     -> PubKeyExportFlags    -- ^ __flags__
src/Botan/Low/PubKey/DH.hs view
@@ -1,9 +1,10 @@ {-| Module      : Botan.Low.DSA Description : Algorithm specific key operations: Diffie Hellman-Copyright   : (c) Leo D, 2023+Copyright   : (c) 2023-2024, Apotheca Labs+              (c) 2024-2025, Haskell Foundation License     : BSD-3-Clause-Maintainer  : leo@apotheca.io+Maintainer  : joris@well-typed.com, leo@apotheca.io Stability   : experimental Portability : POSIX -}
src/Botan/Low/PubKey/DSA.hs view
@@ -1,9 +1,10 @@ {-| Module      : Botan.Low.DSA Description : Algorithm specific key operations: DSA-Copyright   : (c) Leo D, 2023+Copyright   : (c) 2023-2024, Apotheca Labs+              (c) 2024-2025, Haskell Foundation License     : BSD-3-Clause-Maintainer  : leo@apotheca.io+Maintainer  : joris@well-typed.com, leo@apotheca.io Stability   : experimental Portability : POSIX -}@@ -35,8 +36,8 @@         botanRNG         (fromIntegral pbits)         (fromIntegral qbits)-        -privKeyLoadDSA ++privKeyLoadDSA     :: MP           -- ^ __p__     -> MP           -- ^ __q__     -> MP           -- ^ __g__
src/Botan/Low/PubKey/Decrypt.hs view
@@ -1,9 +1,10 @@ {-| Module      : Botan.Low.PubKey.Decrypt Description : Public Key Decryption-Copyright   : (c) Leo D, 2023+Copyright   : (c) 2023-2024, Apotheca Labs+              (c) 2024-2025, Haskell Foundation License     : BSD-3-Clause-Maintainer  : leo@apotheca.io+Maintainer  : joris@well-typed.com, leo@apotheca.io Stability   : experimental Portability : POSIX -}@@ -17,7 +18,7 @@ , decryptCreate , decryptDestroy , decryptOutputLength-, decrypt  +, decrypt  ) where 
src/Botan/Low/PubKey/Ed25519.hs view
@@ -1,9 +1,10 @@ {-| Module      : Botan.Low.Ed25519 Description : Algorithm specific key operations: Ed25519-Copyright   : (c) Leo D, 2023+Copyright   : (c) 2023-2024, Apotheca Labs+              (c) 2024-2025, Haskell Foundation License     : BSD-3-Clause-Maintainer  : leo@apotheca.io+Maintainer  : joris@well-typed.com, leo@apotheca.io Stability   : experimental Portability : POSIX -}
src/Botan/Low/PubKey/ElGamal.hs view
@@ -1,9 +1,10 @@ {-| Module      : Botan.Low.ElGamal Description : Algorithm specific key operations: ElGamal-Copyright   : (c) Leo D, 2023+Copyright   : (c) 2023-2024, Apotheca Labs+              (c) 2024-2025, Haskell Foundation License     : BSD-3-Clause-Maintainer  : leo@apotheca.io+Maintainer  : joris@well-typed.com, leo@apotheca.io Stability   : experimental Portability : POSIX -}
src/Botan/Low/PubKey/Encrypt.hs view
@@ -1,9 +1,10 @@ {-| Module      : Botan.Low.Encrypt Description : Public Key Encryption-Copyright   : (c) Leo D, 2023+Copyright   : (c) 2023-2024, Apotheca Labs+              (c) 2024-2025, Haskell Foundation License     : BSD-3-Clause-Maintainer  : leo@apotheca.io+Maintainer  : joris@well-typed.com, leo@apotheca.io Stability   : experimental Portability : POSIX -}@@ -59,7 +60,7 @@             pkPtr             (ConstPtr paddingPtr)             0-            + -- WARNING: withFooInit-style limited lifetime functions moved to high-level botan withEncryptCreate :: PubKey -> EMEName -> (Encrypt -> IO a) -> IO a withEncryptCreate = mkWithTemp2 encryptCreate encryptDestroy
src/Botan/Low/PubKey/KeyAgreement.hs view
@@ -1,9 +1,10 @@ {-| Module      : Botan.Low.KeyAgreement Description : Key Agreement-Copyright   : (c) Leo D, 2023+Copyright   : (c) 2023-2024, Apotheca Labs+              (c) 2024-2025, Haskell Foundation License     : BSD-3-Clause-Maintainer  : leo@apotheca.io+Maintainer  : joris@well-typed.com, leo@apotheca.io Stability   : experimental Portability : POSIX -}@@ -23,7 +24,7 @@ , keyAgreementDestroy , keyAgreementExportPublic , keyAgreementSize-, keyAgreement +, keyAgreement  ) where @@ -80,9 +81,9 @@ > import Botan.Low.KDF > rng <- rngInit "system" > -- Alice creates her private key-> alicePrivKey <- privKeyCreate ECDH Secp521r1 rng +> alicePrivKey <- privKeyCreate ECDH Secp521r1 rng > -- Bob creates his private key-> bobPrivKey <-  privKeyCreate ECDH Secp521r1 rng +> bobPrivKey <-  privKeyCreate ECDH Secp521r1 rng  Then, they exchange their public keys using any channel, private or public: @@ -171,7 +172,8 @@     -> IO Int       -- ^ __out_len__ keyAgreementSize = mkGetSize withKeyAgreement botan_pk_op_key_agreement_size -{-# WARNING keyAgreement "This function was leaking memory and causing crashes. Please observe carefully and report any future leaks." #-}+-- | TODO: This function was leaking memory and causing crashes. Please observe+-- carefully and report any future leaks. See issue #35. keyAgreement     :: KeyAgreement     -- ^ __op__     -> ByteString       -- ^ __out[]__
src/Botan/Low/PubKey/KeyEncapsulation.hs view
@@ -1,9 +1,10 @@ {-| Module      : Botan.Low.KeyEncapsulation Description : Key Encapsulation-Copyright   : (c) Leo D, 2023+Copyright   : (c) 2023-2024, Apotheca Labs+              (c) 2024-2025, Haskell Foundation License     : BSD-3-Clause-Maintainer  : leo@apotheca.io+Maintainer  : joris@well-typed.com, leo@apotheca.io Stability   : experimental Portability : POSIX -}@@ -171,7 +172,7 @@ kemEncryptCreateSharedKey ke rng salt desiredLen = withKEMEncrypt ke $ \ kePtr -> do     withRNG rng $ \ botanRNG -> do         asBytesLen salt $ \ saltPtr saltLen -> do-            alloca $ \ sharedSzPtr -> do +            alloca $ \ sharedSzPtr -> do                 alloca $ \ encapSzPtr -> do                     sharedSz <- kemEncryptSharedKeyLength ke desiredLen                     encapSz <-  kemEncryptEncapsulatedKeyLength ke
src/Botan/Low/PubKey/RSA.hs view
@@ -1,9 +1,10 @@ {-| Module      : Botan.Low.RSA Description : Algorithm specific key operations: RSA-Copyright   : (c) Leo D, 2023+Copyright   : (c) 2023-2024, Apotheca Labs+              (c) 2024-2025, Haskell Foundation License     : BSD-3-Clause-Maintainer  : leo@apotheca.io+Maintainer  : joris@well-typed.com, leo@apotheca.io Stability   : experimental Portability : POSIX -}
src/Botan/Low/PubKey/SM2.hs view
@@ -12,7 +12,7 @@     -> ByteString   -- ^ __curve_name__     -> IO PrivKey   -- ^ __key__ privKeyLoadSM2 = mkPrivKeyLoad1_name botan_privkey_load_sm2- + pubKeyLoadSM2     :: MP           -- ^ __public_x__     -> MP           -- ^ __public_y__
src/Botan/Low/PubKey/Sign.hs view
@@ -1,9 +1,10 @@ {-| Module      : Botan.Low.PubKey.Sign Description : Signature Generation-Copyright   : (c) Leo D, 2023+Copyright   : (c) 2023-2024, Apotheca Labs+              (c) 2024-2025, Haskell Foundation License     : BSD-3-Clause-Maintainer  : leo@apotheca.io+Maintainer  : joris@well-typed.com, leo@apotheca.io Stability   : experimental Portability : POSIX -}@@ -92,12 +93,16 @@ -- signUpdate = mkSetBytesLen withSign botan_pk_op_sign_update signUpdate = mkWithObjectSetterCBytesLen withSign botan_pk_op_sign_update --- TODO: Signature type--- NOTE: This function is still highly suspect+-- | Finish signing+--+-- Depending on the algorithm, signatures produced using StandardFormatSignature+-- may have trailing null bytes. signFinish     :: Sign             -- ^ __op__     -> RNG              -- ^ __rng__     -> IO ByteString    -- ^ __sig[]__+-- TODO: Signature type+-- NOTE: This function is still highly suspect signFinish sign rng = withSign sign $ \ signPtr -> do     withRNG rng $ \ botanRNG -> do         -- NOTE: Investigation into DER format shows lots of trailing nulls that may need to be trimmed@@ -120,7 +125,6 @@                 throwBotanIfNegative_ $ botan_pk_op_sign_finish signPtr botanRNG sigPtr szPtr                 peek szPtr         return $!! ByteString.take (fromIntegral sz') bytes-{-# WARNING signFinish "Depending on the algorithm, signatures produced using StandardFormatSignature may have trailing null bytes." #-}  -- /** -- * Signature Scheme Utility Functions
src/Botan/Low/PubKey/Verify.hs view
@@ -1,9 +1,10 @@ {-| Module      : Botan.Low.Verify Description : Signature Verification-Copyright   : (c) Leo D, 2023+Copyright   : (c) 2023-2024, Apotheca Labs+              (c) 2024-2025, Haskell Foundation License     : BSD-3-Clause-Maintainer  : leo@apotheca.io+Maintainer  : joris@well-typed.com, leo@apotheca.io Stability   : experimental Portability : POSIX -}
src/Botan/Low/PubKey/X25519.hs view
@@ -1,9 +1,10 @@ {-| Module      : Botan.Low.X25519 Description : Algorithm specific key operations: X25519-Copyright   : (c) Leo D, 2023+Copyright   : (c) 2023-2024, Apotheca Labs+              (c) 2024-2025, Haskell Foundation License     : BSD-3-Clause-Maintainer  : leo@apotheca.io+Maintainer  : joris@well-typed.com, leo@apotheca.io Stability   : experimental Portability : POSIX -}
src/Botan/Low/PwdHash.hs view
@@ -1,9 +1,10 @@ {-| Module      : Botan.Low.PwdHash Description : Password hashing-Copyright   : (c) Leo D, 2023+Copyright   : (c) 2023-2024, Apotheca Labs+              (c) 2024-2025, Haskell Foundation License     : BSD-3-Clause-Maintainer  : leo@apotheca.io+Maintainer  : joris@well-typed.com, leo@apotheca.io Stability   : experimental Portability : POSIX @@ -30,7 +31,7 @@ , pattern Bcrypt_PBKDF , pattern OpenPGP_S2K , openPGP_S2K-    + ) where  import qualified Data.ByteString as ByteString@@ -71,6 +72,11 @@  -- NOTE: Should passphrase be Text or ByteString? Text is implied by use of const char* --  as well as the non-null context implied by passphrase_len == 0. ByteString for now.++-- | Password hash+--+-- 'pwdhash' and 'pwdhashTimed'\'s parameter order may be inconsistent.  See+-- botan-low\/test\/Botan\/Low\/PwdHashSpec.hs for more information. pwdhash     :: PBKDFName        -- ^ __algo__: PBKDF algorithm, e.g., "Scrypt" or "PBKDF2(SHA-256)"     -> Int              -- ^ __param1__: the first PBKDF algorithm parameter@@ -95,10 +101,11 @@                     passphraseLen                     (ConstPtr saltPtr)                     saltLen-{-# WARNING pwdhash "pwdhash and pwdhashTimed's parameter order may be inconsistent. See botan-low/test/Botan/Low/PwdHashSpec.hs for more information." #-} --+-- | Timed password hash+--+-- 'pwdhash' and 'pwdhashTimed'\'s parameter order may be inconsistent. See+-- botan-low\/test\/Botan\/Low\/PwdHashSpec.hs for more information. pwdhashTimed     :: PBKDFName                    -- ^ __algo__: PBKDF algorithm, e.g., "Scrypt" or "PBKDF2(SHA-256)"     -> Int                          -- ^ __msec__: the desired runtime in milliseconds@@ -127,4 +134,3 @@     p2 <- fromIntegral <$> peek p2Ptr     p3 <- fromIntegral <$> peek p3Ptr     return (p1,p2,p3,out)-{-# WARNING pwdhashTimed "pwdhash and pwdhashTimed's parameter order may be inconsistent. See botan-low/test/Botan/Low/PwdHashSpec.hs for more information." #-}
src/Botan/Low/RNG.hs view
@@ -1,9 +1,10 @@ {-| Module      : Botan.Low.RNG Description : Random number generators-Copyright   : (c) Leo D, 2023+Copyright   : (c) 2023-2024, Apotheca Labs+              (c) 2024-2025, Haskell Foundation License     : BSD-3-Clause-Maintainer  : leo@apotheca.io+Maintainer  : joris@well-typed.com, leo@apotheca.io Stability   : experimental Portability : POSIX @@ -11,7 +12,7 @@ -}  module Botan.Low.RNG-( +(  -- * Random number generators -- $introduction
src/Botan/Low/Remake.hs view
@@ -1,9 +1,10 @@ {-| Module      : Botan.Low.Remake Description : Low-level binding generators-Copyright   : (c) Leo D, 2023+Copyright   : (c) 2023-2024, Apotheca Labs+              (c) 2024-2025, Haskell Foundation License     : BSD-3-Clause-Maintainer  : leo@apotheca.io+Maintainer  : joris@well-typed.com, leo@apotheca.io Stability   : experimental Portability : POSIX @@ -65,7 +66,7 @@  -- --- type NewObject      object botan = botan -> IO object +-- type NewObject      object botan = botan -> IO object -- type WithObject     object botan = (forall a . object -> (botan -> IO a) -> IO a) -- type DestroyObject  object botan = object -> IO () -- type CreateObject   object botan = (Ptr botan -> IO CInt) -> IO object@@ -81,7 +82,7 @@ createRNG   :: (Ptr BotanRNG -> IO CInt) -> IO RNG (newRNG, withRNG, rngDestroy, createRNG, _)     = mkBindings MkBotanRNG runBotanRNG MkRNG getRNGForeignPtr botan_rng_destroy-    + rngInit :: RNGType -> IO RNG rngInit name = asCString name $ \ namePtr -> do     createRNG $ \ outPtr -> botan_rng_init outPtr (ConstPtr namePtr)@@ -174,15 +175,16 @@ mkCreateObjectCString1 createObject init str a = withCString str $ \ cstr -> do     createObject $ \ outPtr -> init outPtr (ConstPtr cstr) a --- TODO: Rename mkCreateCBytes+-- | You probably want mkCreateObjectCBytesLen; this is for functions that+-- expect a bytestring of known exact length. mkCreateObjectCBytes     :: ((Ptr botan -> IO CInt) -> IO object)     -> (Ptr botan -> ConstPtr Word8 -> IO CInt)     -> ByteString     -> IO object+-- TODO: Rename mkCreateCBytes mkCreateObjectCBytes createObject init bytes = withCBytes bytes $ \ cbytes -> do     createObject $ \ out -> init out (ConstPtr cbytes)-{-# WARNING mkCreateObjectCBytes "You probably want mkCreateObjectCBytesLen; this is for functions that expect a bytestring of known exact length." #-}  -- TODO: Rename mkCreateCBytesLen mkCreateObjectCBytesLen@@ -205,7 +207,7 @@ {- Action -}- + -- TODO: Rename mkAction mkWithObjectAction     :: (forall a . object -> (botan -> IO a) -> IO a)@@ -250,7 +252,7 @@ -}  -- TODO: Rename mkSetterCString-mkWithObjectSetterCString +mkWithObjectSetterCString     :: (forall a . object -> (botan -> IO a) -> IO a)     -> (botan -> ConstPtr CChar -> IO BotanErrorCode)     -> object
src/Botan/Low/SRP6.hs view
@@ -1,9 +1,10 @@ {-| Module      : Botan.Low.SRP6 Description : Secure remote password-Copyright   : (c) Leo D, 2023+Copyright   : (c) 2023-2024, Apotheca Labs+              (c) 2024-2025, Haskell Foundation License     : BSD-3-Clause-Maintainer  : leo@apotheca.io+Maintainer  : joris@well-typed.com, leo@apotheca.io Stability   : experimental Portability : POSIX @@ -108,7 +109,7 @@ it back to the client:  > -- rng <- rngInit UserRNG-> session <- srp6ServerSessionInit +> session <- srp6ServerSessionInit > -- (verifier, salt, group, hash) <- lookupUser identifier > serverKey <- srp6ServerSessionStep1 session verifier group hash rng @@ -241,7 +242,7 @@             outPtr             outLen --- | SRP-6 Client side step 1:  Generate a new SRP-6 verifier  +-- | SRP-6 Client side step 1:  Generate a new SRP-6 verifier srp6GenerateVerifier     :: Identifier       -- ^ __identifier__: a username or other client identifier     -> Password         -- ^ __password__: the secret used to authenticate user@@ -283,7 +284,7 @@                     asBytesLen salt $ \ saltPtr saltLen -> do                         asBytesLen b $ \ bPtr bLen -> do                             withRNG rng $ \ botanRNG -> do-                                alloca $ \ aSzPtr -> do +                                alloca $ \ aSzPtr -> do                                     alloca $ \ kSzPtr -> do                                         -- Query sizes                                         -- TODO: Actually ensure expected error (insufficient buffer space)
src/Botan/Low/TOTP.hs view
@@ -1,9 +1,10 @@ {-| Module      : Botan.Low.TOTP Description : Time-based one time passwords-Copyright   : (c) Leo D, 2023+Copyright   : (c) 2023-2024, Apotheca Labs+              (c) 2024-2025, Haskell Foundation License     : BSD-3-Clause-Maintainer  : leo@apotheca.io+Maintainer  : joris@well-typed.com, leo@apotheca.io Stability   : experimental Portability : POSIX @@ -67,7 +68,7 @@ Botan implements the HOTP and TOTP schemes from RFC 4226 and 6238.  Since the range of possible OTPs is quite small, applications must-rate limit OTP authentication attempts to some small number per +rate limit OTP authentication attempts to some small number per second. Otherwise an attacker could quickly try all 1000000 6-digit OTPs in a brief amount of time. @@ -137,7 +138,7 @@  The server authenticator receives the authentication response, and performs a check of the key, with an acceptable clock drift in steps, in case the client-and server are slightly desynchronized. +and server are slightly desynchronized.  > -- serverClientCode <- didreceiveMFAAuthenticationResponse > (serverTimestamp :: TOTPTimestamp) <- round <$> getPOSIXTime@@ -169,7 +170,7 @@  type TOTPHashName = HashName -pattern TOTP_SHA1 +pattern TOTP_SHA1     ,   TOTP_SHA256     ,   TOTP_SHA512     ::  TOTPHashName
src/Botan/Low/Utility.hs view
@@ -1,9 +1,10 @@ {-| Module      : Botan.Low.Utility Description : Utility functions-Copyright   : (c) Leo D, 2023+Copyright   : (c) 2023-2024, Apotheca Labs+              (c) 2024-2025, Haskell Foundation License     : BSD-3-Clause-Maintainer  : leo@apotheca.io+Maintainer  : joris@well-typed.com, leo@apotheca.io Stability   : experimental Portability : POSIX -}
src/Botan/Low/Version.hs view
@@ -1,9 +1,10 @@ {-| Module      : Botan.Low.Version Description : Botan version info-Copyright   : (c) Leo D, 2023+Copyright   : (c) 2023-2024, Apotheca Labs+              (c) 2024-2025, Haskell Foundation License     : BSD-3-Clause-Maintainer  : leo@apotheca.io+Maintainer  : joris@well-typed.com, leo@apotheca.io Stability   : experimental Portability : POSIX -}
src/Botan/Low/View.hs view
@@ -1,9 +1,10 @@ {-| Module      : Botan.Low.View Description : View functions-Copyright   : (c) Leo D, 2023+Copyright   : (c) 2023-2024, Apotheca Labs+              (c) 2024-2025, Haskell Foundation License     : BSD-3-Clause-Maintainer  : leo@apotheca.io+Maintainer  : joris@well-typed.com, leo@apotheca.io Stability   : experimental Portability : POSIX -}
src/Botan/Low/X509.hs view
@@ -1,9 +1,10 @@ {-| Module      : Botan.Low.X509 Description : X.509 Certificates and CRLs-Copyright   : (c) Leo D, 2023+Copyright   : (c) 2023-2024, Apotheca Labs+              (c) 2024-2025, Haskell Foundation License     : BSD-3-Clause-Maintainer  : leo@apotheca.io+Maintainer  : joris@well-typed.com, leo@apotheca.io Stability   : experimental Portability : POSIX @@ -183,7 +184,7 @@     -> IO ByteString    -- ^ __out[]__ x509CertGetAuthorityKeyId = mkGetBytes withX509Cert botan_x509_cert_get_authority_key_id -x509CertGetSubjectKeyId +x509CertGetSubjectKeyId     :: X509Cert         -- ^ __cert__     -> IO ByteString    -- ^ __out[]__ x509CertGetSubjectKeyId = mkGetBytes withX509Cert botan_x509_cert_get_subject_key_id@@ -275,10 +276,13 @@ pattern EncipherOnly = ENCIPHER_ONLY pattern DecipherOnly = DECIPHER_ONLY -{-# WARNING x509CertAllowedUsage "Unexplained function, best-guess implementation" #-}+-- |+-- -- NOTE: This function lacks documentation, and it is unknown whether this is---  setting a value (as implied by Z-botan), or whether it is using either---  a negative error or INVALID_IDENTIFIER to return a bool+-- setting a value (as implied by Z-botan), or whether it is using either+-- a negative error or INVALID_IDENTIFIER to return a bool.+--+-- Note: unexplained function, best-guess implementation x509CertAllowedUsage     :: X509Cert             -- ^ __cert__     -> X509KeyConstraints   -- ^ __key_usage__@@ -286,10 +290,11 @@ x509CertAllowedUsage cert usage = withX509Cert cert $ \ certPtr -> do     throwBotanCatchingSuccess $ botan_x509_cert_allowed_usage certPtr usage -{-# WARNING x509CertHostnameMatch "Unexplained function, best-guess implementation" #-} {- | Check if the certificate matches the specified hostname via alternative name or CN match. RFC 5280 wildcards also supported.++Note: unexplained function, best-guess implementation -} x509CertHostnameMatch     :: X509Cert     -- ^ __cert__@@ -369,8 +374,8 @@     = mkBindings MkBotanX509CRL runBotanX509CRL MkX509CRL getX509CRLForeignPtr botan_x509_crl_destroy  x509CRLLoad-    :: ByteString   -- ^ __crl_bits[]__        -    -> IO X509CRL   -- ^ __crl_obj__        +    :: ByteString   -- ^ __crl_bits[]__+    -> IO X509CRL   -- ^ __crl_obj__ x509CRLLoad = mkCreateObjectCBytesLen createX509CRL botan_x509_crl_load  x509CRLLoadFile
src/Botan/Low/X509/Path.hs view
@@ -30,7 +30,7 @@                 (fromIntegral minimum_key_strength)                 (fromBool ocsp_all_intermediates)                 max_ocsp_age-                trustedStorePtr    +                trustedStorePtr             )             botan_x509_path_restrictions_destroy 
src/Botan/Low/ZFEC.hs view
@@ -1,9 +1,10 @@ {-| Module      : Botan.Low.ZFEC Description : ZFEC Forward Error Correction-Copyright   : (c) Leo D, 2023+Copyright   : (c) 2023-2024, Apotheca Labs+              (c) 2024-2025, Haskell Foundation License     : BSD-3-Clause-Maintainer  : leo@apotheca.io+Maintainer  : joris@well-typed.com, leo@apotheca.io Stability   : experimental Portability : POSIX @@ -117,7 +118,7 @@     :: Int              -- ^ __K__: the number of shares needed for recovery     -> Int              -- ^ __N__: the number of shares generated     -> ByteString       -- ^ __input__: the data to FEC-    -> IO [ZFECShare]   +    -> IO [ZFECShare] zfecEncode k n input = asBytesLen input $ \ inputPtr inputLen -> do     let shareSize = div (fromIntegral inputLen) k     allocaBytes (n * shareSize) $ \ outPtr -> do@@ -134,7 +135,7 @@             return $!! zip [0..(n-1)] shares  -- TODO: Throw a fit if shares are not equal length, not k shares-    + -- | Decode some previously encoded shares using certain ZFEC parameters. -- -- NOTE: There must be at least K shares of equal length
test/Botan/Low/BcryptSpec.hs view
test/Botan/Low/BlockCipherSpec.hs view
@@ -64,5 +64,5 @@         msg <- systemRNGGet $ bsz * 10         encmsg <- blockCipherEncryptBlocks ctx msg         decmsg <- blockCipherDecryptBlocks ctx encmsg-        decmsg `shouldBe` msg +        decmsg `shouldBe` msg         pass
test/Botan/Low/CipherSpec.hs view
@@ -1,3 +1,5 @@+{-# OPTIONS_GHC -Wno-deprecations #-}+ module Main where  import Test.Prelude
test/Botan/Low/KDFSpec.hs view
@@ -21,7 +21,7 @@ --  Many do accept HMAC(hash) as an argument instead of just hash --  It is not yet known which if any MACs work aside from HMAC (eg whether anything with CMAC, GMAC does) due to non-exhaustive --  enumeration of MACs in their own tests.---  SP800 KDFs fail with InvalidKeyLengthException for X9.19-MAC, Poly1305, SipHash(2,4) +--  SP800 KDFs fail with InvalidKeyLengthException for X9.19-MAC, Poly1305, SipHash(2,4) --  except for SP800-56A which fails with NotImplementedException --  TODO: Exhaustive algorithm testing (see Botan.KDF notes) 
test/Botan/Low/MACSpec.hs view
@@ -71,7 +71,7 @@         pass     -- it "has a nonce spec" $ do     it "can set the nonce" $ do-        if nonceSz > 0 +        if nonceSz > 0             then do                 ctx <- macInit h                 (_,mx,_) <- macGetKeyspec ctx@@ -85,7 +85,7 @@         (_,mx,_) <- macGetKeyspec ctx         k <- systemRNGGet mx         macSetKey ctx k-        if nonceSz > 0 +        if nonceSz > 0             then do                 n <- systemRNGGet nonceSz                 macSetNonce ctx n@@ -98,7 +98,7 @@         (_,mx,_) <- macGetKeyspec ctx         k <- systemRNGGet mx         macSetKey ctx k-        if nonceSz > 0 +        if nonceSz > 0             then do                 n <- systemRNGGet nonceSz                 macSetNonce ctx n@@ -110,7 +110,7 @@         (_,mx,_) <- macGetKeyspec ctx         k <- systemRNGGet mx         macSetKey ctx k-        if nonceSz > 0 +        if nonceSz > 0             then do                 n <- systemRNGGet nonceSz                 macSetNonce ctx n@@ -122,7 +122,7 @@         (_,mx,_) <- macGetKeyspec ctx         k <- systemRNGGet mx         macSetKey ctx k-        if nonceSz > 0 +        if nonceSz > 0             then do                 n <- systemRNGGet nonceSz                 macSetNonce ctx n
test/Botan/Low/MPISpec.hs view
@@ -17,7 +17,7 @@     it "can set the value from an int" $ do         mp <- mpInit         mpSetFromInt mp 512-        pass +        pass     it "can set the value from another reference" $ do         mp <- mpInit         mpSetFromInt mp 512@@ -46,7 +46,7 @@         mpClear mp         zero <- mpInit         mpSetFromInt zero 0-        isClear <- mpEqual mp zero +        isClear <- mpEqual mp zero         isClear `shouldBe` True         pass     it "can copy the value to a new reference" $ do@@ -308,13 +308,15 @@         r `shouldBe` 64         pass     it "can compute the modular inverse" $ do-        r <- mpInit+        result <- mpInit         x <- mpInit-        mpSetFromInt x 512+        mpSetFromInt x 29         mod <- mpInit-        mpSetFromInt mod 29-        mpModInverse r x mod-        -- TODO: Actually check more than just being bound+        mpSetFromInt mod 65535+        -- x needs to be smaller than mod+        mpModInverse result x mod+        r <- mpToWord32 result+        r `shouldBe` 13559         pass     it "can generate a number of random bits" $ do         mp <- mpInit
test/Botan/Low/PubKey/DHSpec.hs view
@@ -2,7 +2,7 @@  import Test.Prelude -import Botan.Low.MPI +import Botan.Low.MPI import Botan.Low.RNG import Botan.Low.PubKey import Botan.Low.PubKey.DH
test/Botan/Low/PubKey/DSASpec.hs view
@@ -2,7 +2,7 @@  import Test.Prelude -import Botan.Low.MPI +import Botan.Low.MPI import Botan.Low.RNG import Botan.Low.PubKey import Botan.Low.PubKey.DSA@@ -47,7 +47,7 @@     mp <- mpInit     pubKeyGetField mp pubKey field     return mp-    + -- NOTE: Fields are --  DLGroup PubKey: p, q, g, y --  DLGroup PrivKey: p, q, g, x, y
test/Botan/Low/PubKey/DecryptSpec.hs view
@@ -29,7 +29,7 @@         privKey <- privKeyCreate pk param rng         pubKey <- privKeyExportPubKey privKey         ctx <- decryptCreate privKey padding-        _ <- decryptOutputLength ctx 128 +        _ <- decryptOutputLength ctx 128         pass     it "decrypt" $ do         rng <- rngInit "system"
test/Botan/Low/PubKey/ECDHSpec.hs view
@@ -2,7 +2,7 @@  import Test.Prelude -import Botan.Low.MPI +import Botan.Low.MPI import Botan.Low.RNG import Botan.Low.PubKey import Botan.Low.PubKey.ECDH
test/Botan/Low/PubKey/ECDSASpec.hs view
@@ -2,7 +2,7 @@  import Test.Prelude -import Botan.Low.MPI +import Botan.Low.MPI import Botan.Low.RNG import Botan.Low.PubKey import Botan.Low.PubKey.ECDSA
test/Botan/Low/PubKey/ElGamalSpec.hs view
@@ -2,7 +2,7 @@  import Test.Prelude -import Botan.Low.MPI +import Botan.Low.MPI import Botan.Low.RNG import Botan.Low.PubKey import Botan.Low.PubKey.ElGamal
test/Botan/Low/PubKey/EncryptSpec.hs view
@@ -31,7 +31,7 @@         privKey <- privKeyCreate pk param rng         pubKey <- privKeyExportPubKey privKey         ctx <- encryptCreate pubKey padding-        _ <- encryptOutputLength ctx 128 +        _ <- encryptOutputLength ctx 128         pass     it "encrypt" $ do         rng <- rngInit "system"
test/Botan/Low/PubKey/RSASpec.hs view
@@ -2,7 +2,7 @@  import Test.Prelude -import Botan.Low.MPI +import Botan.Low.MPI import Botan.Low.RNG import Botan.Low.PubKey import Botan.Low.PubKey.RSA
test/Botan/Low/PubKey/SM2Spec.hs view
@@ -2,7 +2,7 @@  import Test.Prelude -import Botan.Low.MPI +import Botan.Low.MPI import Botan.Low.RNG import Botan.Low.PubKey import Botan.Low.PubKey.SM2
test/Botan/Low/PwdHashSpec.hs view
@@ -14,7 +14,7 @@  -- NOTE: Values generated by "pwdhashTimed pbkdf 200 64 passphrase salt" pbkdfs :: [(PBKDFName, Int, Int, Int)]-pbkdfs = +pbkdfs =     [ ("PBKDF2(HMAC(SHA-512))",138000,0,0)     -- NOTE: These results indicate that the parameter result order is inconsistent     --  for pwdhashTimed compared to pwdhash@@ -26,9 +26,9 @@     -- , ("Argon2i",1,1,262144)     -- , ("Argon2id",1,1,262144)     -- Note that this still causes four pwdhashTimed tests to still fail because-    --  the pwdhashTimed function itself needs to be fixed for these algorithms +    --  the pwdhashTimed function itself needs to be fixed for these algorithms     --  Fixed values, assuming only x/z are flipped a la (x,y,z) -> (z,y,x)-    --  But +    --  But     , ("Scrypt",8192,81,1)     , ("Argon2d",262144,1,1)     , ("Argon2i",262144,1,1)
test/Botan/Low/RNGSpec.hs view
@@ -13,7 +13,7 @@     , UserThreadsafeRNG     , RDRandRNG -- NOTES: Not available on all processors     ]-    + main :: IO () main = hspec $ do     it "systemRNGGet" $ do
test/Botan/Low/SRP6Spec.hs view
@@ -1,3 +1,11 @@+{-# LANGUAGE CPP #-}++#if defined(MIN_VERSION_GLASGOW_HASKELL)+#if MIN_VERSION_GLASGOW_HASKELL(9,8,0,0)+{-# OPTIONS_GHC -Wwarn=x-partial #-}+#endif+#endif+ module Main where  import Test.Prelude
test/Botan/Low/UtilitySpec.hs view