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 +27/−1
- LICENSE +29/−0
- README.md +1/−1
- bench/Bcrypt.hs +7/−3
- botan-low.cabal +912/−849
- src/Botan/Low/Bcrypt.hs +7/−6
- src/Botan/Low/BlockCipher.hs +4/−5
- src/Botan/Low/Cipher.hs +10/−9
- src/Botan/Low/Error.hs +4/−3
- src/Botan/Low/FPE.hs +5/−4
- src/Botan/Low/HOTP.hs +7/−6
- src/Botan/Low/Hash.hs +8/−7
- src/Botan/Low/KDF.hs +3/−2
- src/Botan/Low/KeyWrap.hs +3/−2
- src/Botan/Low/MAC.hs +3/−2
- src/Botan/Low/MPI.hs +5/−4
- src/Botan/Low/Make.hs +9/−9
- src/Botan/Low/Prelude.hs +4/−4
- src/Botan/Low/PubKey.hs +11/−10
- src/Botan/Low/PubKey/DH.hs +3/−2
- src/Botan/Low/PubKey/DSA.hs +5/−4
- src/Botan/Low/PubKey/Decrypt.hs +4/−3
- src/Botan/Low/PubKey/Ed25519.hs +3/−2
- src/Botan/Low/PubKey/ElGamal.hs +3/−2
- src/Botan/Low/PubKey/Encrypt.hs +4/−3
- src/Botan/Low/PubKey/KeyAgreement.hs +8/−6
- src/Botan/Low/PubKey/KeyEncapsulation.hs +4/−3
- src/Botan/Low/PubKey/RSA.hs +3/−2
- src/Botan/Low/PubKey/SM2.hs +1/−1
- src/Botan/Low/PubKey/Sign.hs +9/−5
- src/Botan/Low/PubKey/Verify.hs +3/−2
- src/Botan/Low/PubKey/X25519.hs +3/−2
- src/Botan/Low/PwdHash.hs +13/−7
- src/Botan/Low/RNG.hs +4/−3
- src/Botan/Low/Remake.hs +10/−8
- src/Botan/Low/SRP6.hs +6/−5
- src/Botan/Low/TOTP.hs +6/−5
- src/Botan/Low/Utility.hs +3/−2
- src/Botan/Low/Version.hs +3/−2
- src/Botan/Low/View.hs +3/−2
- src/Botan/Low/X509.hs +14/−9
- src/Botan/Low/X509/Path.hs +1/−1
- src/Botan/Low/ZFEC.hs +5/−4
- test/Botan/Low/BcryptSpec.hs +0/−0
- test/Botan/Low/BlockCipherSpec.hs +1/−1
- test/Botan/Low/CipherSpec.hs +2/−0
- test/Botan/Low/KDFSpec.hs +1/−1
- test/Botan/Low/MACSpec.hs +5/−5
- test/Botan/Low/MPISpec.hs +9/−7
- test/Botan/Low/PubKey/DHSpec.hs +1/−1
- test/Botan/Low/PubKey/DSASpec.hs +2/−2
- test/Botan/Low/PubKey/DecryptSpec.hs +1/−1
- test/Botan/Low/PubKey/ECDHSpec.hs +1/−1
- test/Botan/Low/PubKey/ECDSASpec.hs +1/−1
- test/Botan/Low/PubKey/ElGamalSpec.hs +1/−1
- test/Botan/Low/PubKey/EncryptSpec.hs +1/−1
- test/Botan/Low/PubKey/RSASpec.hs +1/−1
- test/Botan/Low/PubKey/SM2Spec.hs +1/−1
- test/Botan/Low/PwdHashSpec.hs +3/−3
- test/Botan/Low/RNGSpec.hs +1/−1
- test/Botan/Low/SRP6Spec.hs +8/−0
- test/Botan/Low/UtilitySpec.hs +0/−0
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