cabal-version:      2.2
name:               zxcvbn-hs
version:            0.3.2
synopsis:           Password strength estimation based on zxcvbn.
license:            MIT
license-file:       LICENSE
author:             Peter Jones <pjones@devalot.com>
maintainer:         Peter Jones <pjones@devalot.com>
copyright:          Copyright (c) 2019-2020 Peter Jones
homepage:           https://github.com/sthenauth/zxcvbn-hs
bug-reports:        https://github.com/sthenauth/zxcvbn-hs/issues
category:           System
tested-with:        GHC ==8.10.7 || ==9.0.2 || ==9.2.2
description:
  This is a native Haskell implementation of the zxcvbn password
  strength estimation algorithm as it appears in the 2016 USENIX Security
  <https://www.usenix.org/conference/usenixsecurity16/technical-sessions/presentation/wheeler paper>
  and presentation (with some small modifications).

--------------------------------------------------------------------------------
extra-source-files:
  CHANGELOG.md
  README.md

--------------------------------------------------------------------------------
flag tools
  description: Build the data processing tools (i.e. dictionary compilers)
  default:     False
  manual:      True

--------------------------------------------------------------------------------
source-repository head
  type:     git
  location: https://github.com/sthenauth/zxcvbn-hs.git

--------------------------------------------------------------------------------
common options
  default-language: Haskell2010
  ghc-options:
    -Wall -Werror=incomplete-record-updates
    -Werror=incomplete-uni-patterns -Werror=missing-home-modules
    -Widentities -Wmissing-export-lists -Wredundant-constraints

--------------------------------------------------------------------------------
common dependencies
  build-depends:
    , aeson                 >=1.3  && <2.2
    , attoparsec            >=0.13 && <0.15
    , base                  >=4.9  && <5.0
    , base64-bytestring     >=1.0  && <1.3
    , binary                >=0.8  && <0.11
    , binary-instances      >=1    && <2.0
    , containers            ^>=0.6
    , fgl                   >=5.7  && <5.9
    , lens                  >=4.17 && <6
    , math-functions        ^>=0.3
    , text                  >=1.2  && <2.1
    , time                  >=1.8  && <2.0
    , unordered-containers  ^>=0.2
    , vector                >=0.12 && <0.14
    , zlib                  ^>=0.6

--------------------------------------------------------------------------------
common tool-dependencies
  build-depends:
    , filepath              ^>=1.4
    , mtl                   >=2.2 && <2.4.0
    , optparse-applicative  >=0.14 && <0.18
    , pipes                 ^>=4.3
    , pipes-safe            ^>=2.3
    , pipes-text            >=0.0  && <1.1

--------------------------------------------------------------------------------
library
  import:          options, dependencies

  -- ghc-prof-options: -fprof-auto -fprof-cafs
  hs-source-dirs:  src
  exposed-modules:
    Text.Password.Strength
    Text.Password.Strength.Config
    Text.Password.Strength.Internal
    Text.Password.Strength.Types

  other-modules:
    Text.Password.Strength.Generated.Adjacency
    Text.Password.Strength.Generated.Frequency
    Text.Password.Strength.Internal.Adjacency
    Text.Password.Strength.Internal.Config
    Text.Password.Strength.Internal.Date
    Text.Password.Strength.Internal.Dictionary
    Text.Password.Strength.Internal.Estimate
    Text.Password.Strength.Internal.Keyboard
    Text.Password.Strength.Internal.L33t
    Text.Password.Strength.Internal.Match
    Text.Password.Strength.Internal.Math
    Text.Password.Strength.Internal.Repeat
    Text.Password.Strength.Internal.Search
    Text.Password.Strength.Internal.Sequence
    Text.Password.Strength.Internal.Token

--------------------------------------------------------------------------------
executable zxcvbn-tools
  import:         options, dependencies, tool-dependencies
  main-is:        Main.hs
  hs-source-dirs: tools
  other-modules:
    Zxcvbn.Adjacency
    Zxcvbn.Encode
    Zxcvbn.Freq
    Zxcvbn.Global

  build-depends:  zxcvbn-hs

  if !flag(tools)
    buildable: False

--------------------------------------------------------------------------------
executable zxcvbn-example
  import:           options, dependencies
  main-is:          Main.hs
  hs-source-dirs:   example
  ghc-prof-options: -rtsopts
  build-depends:    zxcvbn-hs

--------------------------------------------------------------------------------
test-suite test
  import:         options, dependencies
  type:           exitcode-stdio-1.0
  hs-source-dirs: test
  main-is:        Main.hs
  build-depends:
    , hedgehog        >=0.6  && <1.3
    , tasty           >=1.1  && <1.5
    , tasty-hedgehog  >=0.2  && <2
    , tasty-hunit     ^>=0.10
    , zxcvbn-hs

  other-modules:
    Zxcvbn.Adjacency
    Zxcvbn.Date
    Zxcvbn.Estimate
    Zxcvbn.Match
    Zxcvbn.Repeat
    Zxcvbn.Search
    Zxcvbn.Sequence

--------------------------------------------------------------------------------
benchmark bench
  import:           options, dependencies
  type:             exitcode-stdio-1.0
  hs-source-dirs:   benchmark
  main-is:          Main.hs
  ghc-prof-options: -rtsopts
  build-depends:
    , criterion  >=1.5 && <1.7
    , zxcvbn-hs