-- Initial hwsl2.cabal generated by cabal init. For further documentation, -- see http://haskell.org/cabal/users-guide/ -- The name of the package. name: hwsl2 -- The package version. See the Haskell package versioning policy (PVP) -- for standards guiding when and how versions should be incremented. -- http://www.haskell.org/haskellwiki/Package_versioning_policy -- PVP summary: +-+------- breaking API changes -- | | +----- non-breaking API additions -- | | | +--- code changes with no API change version: 0.3.1.1 -- A short (one-line) description of the package. synopsis: Hashing with SL2 -- A longer description of the package. description: An algebraic hash function, inspired by the paper /Hashing with SL2/ by Tillich and Zemor. . The hash function is based on matrix multiplication in the special linear group of degree 2, over a Galois field of order 2^127, with all computations modulo the polynomial x^127 + x^63 + 1. . This construction gives some nice properties, which traditional bit-scambling hash functions don't possess, including it being composable. It holds: . > hash (m1 <> m2) == hash m1 <> hash m2 . Following that, the hash function is also parallelisable. If a message can be divided into a list of chunks, the hash of the message can be calculated in parallel: . > mconcat (parMap rpar hash chunks) . All operations in this package are implemented in a very efficient manner using SSE instructions. -- URL for the project homepage or repository. homepage: https://github.com/srijs/hwsl2 -- The license under which the package is released. license: MIT -- The file containing the license text. license-file: LICENSE -- The package author(s). author: Sam Rijs -- An email address to which users can send suggestions, bug reports, and -- patches. maintainer: srijs@airpost.net -- A copyright notice. -- copyright: category: Data build-type: Simple -- Extra files to be distributed with the package, such as examples or a -- README. extra-source-files: README.md src/core/sl2-inl.h src/core/gf2p127-inl.h -- Constraint on the version of Cabal needed to build this package. cabal-version: >=1.10 flag avx2 description: Enable AVX 2 optimisations. default: False library -- Modules exported by the library. exposed-modules: Data.Hash.SL2 Data.Hash.SL2.Mutable Data.Hash.SL2.Unsafe -- Modules included in this library but not exported. other-modules: Data.Hash.SL2.Internal -- LANGUAGE extensions used by modules in this package. other-extensions: ForeignFunctionInterface CApiFFI Safe Trustworthy Unsafe -- Other library packages from which modules are imported. build-depends: base >=4.7 && <4.8, bytestring >=0.10 && <0.11 -- Directories containing source files. hs-source-dirs: src ghc-options: -fwarn-unused-imports -- Options for foreign source files. include-dirs: src/core if flag(avx2) cc-options: -Wall -O3 -mavx2 -msse4.1 -msse2 -mpclmul ghc-options: -O3 -optc-mavx2 -optc-msse4.1 -msse2 -optc-mpclmul else cc-options: -Wall -O3 -msse4.1 -msse2 -mpclmul ghc-options: -O3 -optc-msse4.1 -msse2 -optc-mpclmul -- Base language which the package is written in. default-language: Haskell2010 test-suite test type: detailed-0.9 hs-source-dirs: src test-module: Data.Hash.SL2.Test other-modules: Data.Hash.SL2 Data.Hash.SL2.Mutable Data.Hash.SL2.Unsafe Data.Hash.SL2.Internal build-depends: base >=4.7 && <4.8, Cabal >=1.9.2, bytestring >=0.10 && <0.11, QuickCheck >=2.7 && <2.8, quickcheck-properties>=0.1 && <0.2, cabal-test-quickcheck>=0.1 && <0.2 include-dirs: src/core if flag(avx2) cc-options: -Wall -O3 -mavx2 -msse4.1 -msse2 -mpclmul ghc-options: -O3 -optc-mavx2 -optc-msse4.1 -msse2 -optc-mpclmul else cc-options: -Wall -O3 -msse4.1 -msse2 -mpclmul ghc-options: -O3 -optc-msse4.1 -msse2 -optc-mpclmul benchmark bench type: exitcode-stdio-1.0 hs-source-dirs: src main-is: Data/Hash/SL2/Benchmark.hs other-modules: Data.Hash.SL2 Data.Hash.SL2.Mutable Data.Hash.SL2.Unsafe Data.Hash.SL2.Internal build-depends: base >=4.7 && <4.8, Cabal >=1.9.2, bytestring >=0.10 && <0.11, criterion >=1.0 && <1.1, cryptohash >=0.11 && <0.12, parallel >=3.2 && <3.3 include-dirs: src/core if flag(avx2) cc-options: -Wall -O3 -mavx2 -msse4.1 -msse2 -mpclmul ghc-options: -rtsopts -threaded -O3 -optc-mavx2 -optc-msse4.1 -msse2 -optc-mpclmul else cc-options: -Wall -O3 -msse4.1 -msse2 -mpclmul ghc-options: -rtsopts -threaded -O3 -optc-msse4.1 -msse2 -optc-mpclmul