Name:                cryptonite
Version:             0.8
Synopsis:            Cryptography Primitives sink
Description:
    A repository of cryptographic primitives.
    .
    * Symmetric ciphers: AES, DES, 3DES, Blowfish, Camellia, RC4, Salsa, ChaCha.
    .
    * Hash: SHA1, SHA2, SHA3, MD2, MD4, MD5, Kekkak, Skein, Ripemd, Tiger, Whirlpool
    .
    * MAC: HMAC, Poly1305
    .
    * Assymmetric crypto: DSA, RSA, DH, ECDH, ECDSA, ECC, Curve25519, Ed25519
    .
    * Key Derivation Function: PBKDF2, Scrypt
    .
    * Cryptographic Random generation: System Entropy, Deterministic Random Generator
    .
    * Data related: Anti-Forensic Information Splitter (AFIS)
    .
    If anything cryptographic related is missing from here, submit
    a pull request to have it added. This package strive to be a
    cryptographic kitchen sink that provides cryptography for everyone.
    .
    Evaluate the security related to your requirements before using.
License:             BSD3
License-file:        LICENSE
Copyright:           Vincent Hanquez <vincent@snarc.org>
Author:              Vincent Hanquez <vincent@snarc.org>
Maintainer:          vincent@snarc.org
Category:            Cryptography
Stability:           experimental
Build-Type:          Simple
Homepage:            https://github.com/haskell-crypto/cryptonite
Bug-reports:         https://github.com/haskell-crypto/cryptonite/issues
Cabal-Version:       >=1.10
extra-doc-files:     README.md CHANGELOG.md
extra-source-files:  cbits/*.h
                     cbits/aes/*.h
                     cbits/ed25519/*.h
                     cbits/p256/*.h
                     cbits/aes/x86ni_impl.c
                     tests/*.hs

source-repository head
  type: git
  location: https://github.com/haskell-crypto/cryptonite

Flag support_aesni
  Description:       allow compilation with AESNI on system and architecture that supports it
  Default:           True
  Manual:            True

Flag support_rdrand
  Description:       allow compilation with AESNI on system and architecture that supports it
  Default:           True
  Manual:            True

Flag support_pclmuldq
  Description:       Allow compilation with pclmuldq on architecture that supports it
  Default:           False
  Manual:            True

Flag integer-gmp
  Description:       Whether or not to use GMP for some functions
  Default:           True
  Manual:            True

Flag support_deepseq
  Description:       add deepseq instances for cryptographic types
  Default:           True
  Manual:            True

Library
  Exposed-modules:   Crypto.Cipher.AES
                     Crypto.Cipher.Blowfish
                     Crypto.Cipher.Camellia
                     Crypto.Cipher.ChaCha
                     Crypto.Cipher.ChaChaPoly1305
                     Crypto.Cipher.DES
                     Crypto.Cipher.RC4
                     Crypto.Cipher.Salsa
                     Crypto.Cipher.TripleDES
                     Crypto.Cipher.Types
                     Crypto.Data.AFIS
                     Crypto.Data.Padding
                     Crypto.Error
                     Crypto.MAC.Poly1305
                     Crypto.MAC.HMAC
                     Crypto.Number.Basic
                     Crypto.Number.F2m
                     Crypto.Number.Generate
                     Crypto.Number.ModArithmetic
                     Crypto.Number.Prime
                     Crypto.Number.Serialize
                     Crypto.Number.Serialize.Internal
                     Crypto.KDF.PBKDF2
                     Crypto.KDF.Scrypt
                     Crypto.KDF.BCrypt
                     Crypto.Hash
                     Crypto.Hash.IO
                     Crypto.Hash.Algorithms
                     Crypto.PubKey.Curve25519
                     Crypto.PubKey.MaskGenFunction
                     Crypto.PubKey.DH
                     Crypto.PubKey.DSA
                     Crypto.PubKey.ECC.Generate
                     Crypto.PubKey.ECC.Prim
                     Crypto.PubKey.ECC.DH
                     Crypto.PubKey.ECC.ECDSA
                     Crypto.PubKey.ECC.P256
                     Crypto.PubKey.ECC.Types
                     Crypto.PubKey.Ed25519
                     Crypto.PubKey.RSA
                     Crypto.PubKey.RSA.PKCS15
                     Crypto.PubKey.RSA.Prim
                     Crypto.PubKey.RSA.PSS
                     Crypto.PubKey.RSA.OAEP
                     Crypto.PubKey.RSA.Types
                     Crypto.Random
                     Crypto.Random.Types
                     Crypto.Random.Entropy
                     Crypto.Random.EntropyPool
                     Crypto.Random.Entropy.Unsafe
  Other-modules:     Crypto.Cipher.AES.Primitive
                     Crypto.Cipher.Blowfish.Box
                     Crypto.Cipher.Blowfish.Primitive
                     Crypto.Cipher.Camellia.Primitive
                     Crypto.Cipher.DES.Primitive
                     Crypto.Cipher.Types.AEAD
                     Crypto.Cipher.Types.Base
                     Crypto.Cipher.Types.Block
                     Crypto.Cipher.Types.GF
                     Crypto.Cipher.Types.Stream
                     Crypto.Cipher.Types.Utils
                     Crypto.Error.Types
                     Crypto.Number.Compat
                     Crypto.Hash.Types
                     Crypto.Hash.SHA1
                     Crypto.Hash.SHA224
                     Crypto.Hash.SHA256
                     Crypto.Hash.SHA384
                     Crypto.Hash.SHA512
                     Crypto.Hash.SHA512t
                     Crypto.Hash.SHA3
                     Crypto.Hash.Kekkak
                     Crypto.Hash.MD2
                     Crypto.Hash.MD4
                     Crypto.Hash.MD5
                     Crypto.Hash.RIPEMD160
                     Crypto.Hash.Skein256
                     Crypto.Hash.Skein512
                     Crypto.Hash.Tiger
                     Crypto.Hash.Whirlpool
                     Crypto.Random.Entropy.Source
                     Crypto.Random.Entropy.Backend
                     Crypto.Random.ChaChaDRG
                     Crypto.Random.SystemDRG
                     Crypto.Random.Probabilistic
                     Crypto.PubKey.Internal
                     Crypto.PubKey.ElGamal
                     Crypto.Internal.ByteArray
                     Crypto.Internal.Compat
                     Crypto.Internal.CompatPrim
                     Crypto.Internal.DeepSeq
                     Crypto.Internal.Imports
                     Crypto.Internal.Words
                     Crypto.Internal.WordArray
  Build-depends:     base >= 4.3 && < 5
                   , bytestring
                   , memory >= 0.8
                   , ghc-prim
  ghc-options:       -Wall -fwarn-tabs -optc-O3
  default-language:  Haskell2010
  C-sources:         cbits/cryptonite_chacha.c
                   , cbits/cryptonite_salsa.c
                   , cbits/cryptonite_rc4.c
                   , cbits/cryptonite_cpu.c
                   , cbits/aes/generic.c
                   , cbits/aes/gf.c
                   , cbits/cryptonite_aes.c
                   , cbits/curve25519/curve25519-donna.c
                   , cbits/ed25519/ed25519.c
                   , cbits/p256/p256.c
                   , cbits/p256/p256_ec.c
                   , cbits/cryptonite_poly1305.c
                   , cbits/cryptonite_sha1.c
                   , cbits/cryptonite_sha256.c
                   , cbits/cryptonite_sha512.c
                   , cbits/cryptonite_sha3.c
                   , cbits/cryptonite_kekkak.c
                   , cbits/cryptonite_md2.c
                   , cbits/cryptonite_md4.c
                   , cbits/cryptonite_md5.c
                   , cbits/cryptonite_ripemd.c
                   , cbits/cryptonite_skein256.c
                   , cbits/cryptonite_skein512.c
                   , cbits/cryptonite_tiger.c
                   , cbits/cryptonite_whirlpool.c
                   , cbits/cryptonite_scrypt.c
                   , cbits/cryptonite_sysrand.c
  include-dirs:  cbits cbits/ed25519

  -- FIXME armel or mispel is also little endian.
  -- might be a good idea to also add a runtime autodetect mode.
  -- ARCH_ENDIAN_UNKNOWN
  if (arch(i386) || arch(x86_64))
    CPP-options: -DARCH_IS_LITTLE_ENDIAN

  if arch(i386)
    CPP-options: -DARCH_X86

  if flag(support_rdrand) && arch(x86_64)
    CPP-options:    -DARCH_X86_64
    CPP-options:    -DSUPPORT_RDRAND
    Other-modules:  Crypto.Random.Entropy.RDRand
    c-sources:      cbits/cryptonite_rdrand.c

  if flag(support_aesni) && (os(linux) || os(freebsd) || os(osx)) && (arch(i386) || arch(x86_64))
    CC-options:     -mssse3 -maes -DWITH_AESNI
    if flag(support_pclmuldq)
       CC-options:  -msse4.1 -mpclmul -DWITH_PCLMUL
    C-sources:      cbits/aes/x86ni.c

  if os(windows)
    cpp-options:    -DWINDOWS
    Build-Depends:  Win32
    Other-modules:  Crypto.Random.Entropy.Windows
    extra-libraries: advapi32
  else
    Other-modules:  Crypto.Random.Entropy.Unix

  if impl(ghc) && flag(integer-gmp)
    Build-depends:   integer-gmp

  if flag(support_deepseq)
    CPP-options:     -DWITH_DEEPSEQ_SUPPORT
    Build-depends:   deepseq

Test-Suite test-cryptonite
  type:              exitcode-stdio-1.0
  hs-source-dirs:    tests
  Main-is:           Tests.hs
  Other-modules:     BlockCipher
                     ChaCha
                     BCrypt
                     Hash
                     Imports
                     KAT_AES.KATCBC
                     KAT_AES.KATECB
                     KAT_AES.KATGCM
                     KAT_AES.KATOCB3
                     KAT_AES.KATXTS
                     KAT_AES
                     KAT_AFIS
                     KAT_Blowfish
                     KAT_Camellia
                     KAT_Curve25519
                     KAT_DES
                     KAT_Ed25519
                     KAT_HMAC
                     KAT_PBKDF2
                     KAT_PubKey.DSA
                     KAT_PubKey.ECC
                     KAT_PubKey.ECDSA
                     KAT_PubKey.OAEP
                     KAT_PubKey.PSS
                     KAT_PubKey.P256
                     KAT_PubKey
                     KAT_RC4
                     KAT_Scrypt
                     KAT_TripleDES
                     Poly1305
                     Salsa
                     Utils
  Build-Depends:     base >= 3 && < 5
                   , bytestring
                   , memory
                   , byteable
                   , tasty
                   , tasty-quickcheck
                   , tasty-hunit
                   , tasty-kat
                   , cryptonite
  ghc-options:       -Wall -fno-warn-orphans -fno-warn-missing-signatures -rtsopts
  default-language:  Haskell2010
