Blob Blame History Raw
Name:                cryptonite
version:             0.24
Synopsis:            Cryptography Primitives sink
Description:
    A repository of cryptographic primitives.
    .
    * Symmetric ciphers: AES, DES, 3DES, Blowfish, Camellia, RC4, Salsa, XSalsa, ChaCha.
    .
    * Hash: SHA1, SHA2, SHA3, SHAKE, MD2, MD4, MD5, Keccak, Skein, Ripemd, Tiger, Whirlpool, Blake2
    .
    * MAC: HMAC, Poly1305
    .
    * Asymmetric crypto: DSA, RSA, DH, ECDH, ECDSA, ECC, Curve25519, Curve448, Ed25519, Ed448
    .
    * Key Derivation Function: PBKDF2, Scrypt, HKDF, Argon2
    .
    * 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.
    .
    Read "Crypto.Tutorial" for a quick start guide.
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.18
tested-with:         GHC==8.0.2, GHC==7.10.3, GHC==7.8.4
extra-doc-files:     README.md CHANGELOG.md
extra-source-files:  cbits/*.h
                     cbits/aes/*.h
                     cbits/ed25519/*.h
                     cbits/decaf/include/*.h
                     cbits/decaf/include/decaf/*.h
                     cbits/decaf/include/arch_32/*.h
                     cbits/decaf/include/arch_ref64/*.h
                     cbits/decaf/p448/arch_32/*.h
                     cbits/decaf/p448/arch_ref64/*.h
                     cbits/decaf/p448/*.h
                     cbits/p256/*.h
                     cbits/blake2/ref/*.h
                     cbits/blake2/sse/*.h
                     cbits/argon2/*.h
                     cbits/argon2/*.c
                     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 RDRAND 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 support_sse
  Description:       Use SSE optimized version of (BLAKE2, ARGON2)
  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

Flag old_toolchain_inliner
  Description:       use -fgnu89-inline to workaround an old compiler / linker / glibc issue.
  Default:           False
  Manual:            True

Flag check_alignment
  Description:       extra check on alignment in C layers, which cause lowlevel assert errors. for debugging only.
  Default:           False
  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.Twofish
                     Crypto.Cipher.Types
                     Crypto.Cipher.Utils
                     Crypto.Cipher.XSalsa
                     Crypto.ConstructHash.MiyaguchiPreneel
                     Crypto.Data.AFIS
                     Crypto.Data.Padding
                     Crypto.ECC
                     Crypto.Error
                     Crypto.MAC.CMAC
                     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.Argon2
                     Crypto.KDF.PBKDF2
                     Crypto.KDF.Scrypt
                     Crypto.KDF.BCrypt
                     Crypto.KDF.HKDF
                     Crypto.Hash
                     Crypto.Hash.IO
                     Crypto.Hash.Algorithms
                     Crypto.OTP
                     Crypto.PubKey.Curve25519
                     Crypto.PubKey.Curve448
                     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.ECIES
                     Crypto.PubKey.Ed25519
                     Crypto.PubKey.Ed448
                     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
                     Crypto.Tutorial
  Other-modules:     Crypto.Cipher.AES.Primitive
                     Crypto.Cipher.Blowfish.Box
                     Crypto.Cipher.Blowfish.Primitive
                     Crypto.Cipher.Camellia.Primitive
                     Crypto.Cipher.DES.Primitive
                     Crypto.Cipher.Twofish.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.Blake2s
                     Crypto.Hash.Blake2sp
                     Crypto.Hash.Blake2b
                     Crypto.Hash.Blake2bp
                     Crypto.Hash.SHA1
                     Crypto.Hash.SHA224
                     Crypto.Hash.SHA256
                     Crypto.Hash.SHA384
                     Crypto.Hash.SHA512
                     Crypto.Hash.SHA512t
                     Crypto.Hash.SHA3
                     Crypto.Hash.Keccak
                     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.ECC.Simple.Types
                     Crypto.ECC.Simple.Prim
                     Crypto.Internal.Proxy
                     Crypto.Internal.ByteArray
                     Crypto.Internal.Compat
                     Crypto.Internal.CompatPrim
                     Crypto.Internal.DeepSeq
                     Crypto.Internal.Imports
                     Crypto.Internal.Words
                     Crypto.Internal.WordArray
  if impl(ghc >= 7.8)
    Other-modules:   Crypto.Hash.SHAKE
                     Crypto.Hash.Blake2
                     Crypto.Internal.Nat
  Build-depends:     base >= 4.3 && < 5
                   , bytestring
                   , memory >= 0.14.5
                   , foundation >= 0.0.8
                   , ghc-prim
  ghc-options:       -Wall -fwarn-tabs -optc-O3 -fno-warn-unused-imports
  default-language:  Haskell2010
  cc-options:        -std=gnu99
  if flag(old_toolchain_inliner)
    cc-options:      -fgnu89-inline
  C-sources:         cbits/cryptonite_chacha.c
                   , cbits/cryptonite_salsa.c
                   , cbits/cryptonite_xsalsa.c
                   , cbits/cryptonite_rc4.c
                   , cbits/cryptonite_cpu.c
                   , cbits/ed25519/ed25519.c
                   , cbits/p256/p256.c
                   , cbits/p256/p256_ec.c
                   , cbits/cryptonite_blake2s.c
                   , cbits/cryptonite_blake2sp.c
                   , cbits/cryptonite_blake2b.c
                   , cbits/cryptonite_blake2bp.c
                   , cbits/cryptonite_poly1305.c
                   , cbits/cryptonite_sha1.c
                   , cbits/cryptonite_sha256.c
                   , cbits/cryptonite_sha512.c
                   , cbits/cryptonite_sha3.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_pbkdf2.c
  include-dirs:      cbits
                   , cbits/ed25519
                   , cbits/decaf/include
                   , cbits/decaf/p448

  if arch(x86_64)
    C-sources:         cbits/decaf/p448/arch_ref64/f_impl.c
                     , cbits/decaf/p448/f_generic.c
                     , cbits/decaf/p448/f_arithmetic.c
                     , cbits/decaf/utils.c
                     , cbits/decaf/ed448goldilocks/scalar.c
                     , cbits/decaf/ed448goldilocks/decaf_tables.c
                     , cbits/decaf/ed448goldilocks/decaf.c
                     , cbits/decaf/ed448goldilocks/eddsa.c

    include-dirs:      cbits/decaf/include/arch_ref64
                     , cbits/decaf/p448/arch_ref64
  else
    C-sources:         cbits/decaf/p448/arch_32/f_impl.c
                     , cbits/decaf/p448/f_generic.c
                     , cbits/decaf/p448/f_arithmetic.c
                     , cbits/decaf/utils.c
                     , cbits/decaf/ed448goldilocks/scalar.c
                     , cbits/decaf/ed448goldilocks/decaf_tables.c
                     , cbits/decaf/ed448goldilocks/decaf.c
                     , cbits/decaf/ed448goldilocks/eddsa.c

    include-dirs:      cbits/decaf/include/arch_32
                     , cbits/decaf/p448/arch_32

  if arch(x86_64)
    C-sources: cbits/curve25519/curve25519-donna-c64.c
  else
    C-sources: cbits/curve25519/curve25519-donna.c

  -- 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 arch(x86_64)
    CPP-options: -DARCH_X86_64

  if flag(support_rdrand) && (arch(i386) || arch(x86_64)) && !os(windows)
    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
                   , cbits/aes/generic.c
                   , cbits/aes/gf.c
                   , cbits/cryptonite_aes.c
  else
    C-sources:       cbits/aes/generic.c
                   , cbits/aes/gf.c
                   , cbits/cryptonite_aes.c

  if arch(x86_64) || flag(support_sse)
    C-sources:      cbits/blake2/sse/blake2s.c
                  , cbits/blake2/sse/blake2sp.c
                  , cbits/blake2/sse/blake2b.c
                  , cbits/blake2/sse/blake2bp.c
    include-dirs: cbits/blake2/sse
  else
    C-sources:      cbits/blake2/ref/blake2s-ref.c
                  , cbits/blake2/ref/blake2sp-ref.c
                  , cbits/blake2/ref/blake2b-ref.c
                  , cbits/blake2/ref/blake2bp-ref.c
    include-dirs: cbits/blake2/ref

  if arch(x86_64) || flag(support_sse)
    CPP-options:    -DSUPPORT_SSE

  C-sources:      cbits/argon2/argon2.c
  include-dirs:   cbits/argon2

  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
  if flag(check_alignment)
    cc-options:     -DWITH_ASSERT_ALIGNMENT

Test-Suite test-cryptonite
  type:              exitcode-stdio-1.0
  hs-source-dirs:    tests
  Main-is:           Tests.hs
  Other-modules:     BlockCipher
                     ChaCha
                     BCrypt
                     ECC
                     Hash
                     Imports
                     KAT_AES.KATCBC
                     KAT_AES.KATECB
                     KAT_AES.KATGCM
                     KAT_AES.KATOCB3
                     KAT_AES.KATXTS
                     KAT_AES
                     KAT_AFIS
                     KAT_Argon2
                     KAT_Blowfish
                     KAT_Camellia
                     KAT_Curve25519
                     KAT_Curve448
                     KAT_DES
                     KAT_Ed25519
                     KAT_Ed448
                     KAT_CMAC
                     KAT_HKDF
                     KAT_HMAC
                     KAT_MiyaguchiPreneel
                     KAT_PBKDF2
                     KAT_OTP
                     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
                     KAT_Twofish
                     ChaChaPoly1305
                     Number
                     Number.F2m
                     Padding
                     Poly1305
                     Salsa
                     Utils
                     XSalsa
  Build-Depends:     base >= 3 && < 5
                   , bytestring
                   , memory
                   , tasty
                   , tasty-quickcheck
                   , tasty-hunit
                   , tasty-kat
                   , cryptonite
  ghc-options:       -Wall -fno-warn-orphans -fno-warn-missing-signatures -fno-warn-unused-imports -rtsopts
  default-language:  Haskell2010

Benchmark bench-cryptonite
  type:              exitcode-stdio-1.0
  hs-source-dirs:    benchs
  Main-is:           Bench.hs
  Other-modules:     Number.F2m
  Build-Depends:     base >= 3 && < 5
                   , bytestring
                   , memory
                   , criterion
                   , random
                   , cryptonite
  ghc-options:       -Wall -fno-warn-missing-signatures
  default-language:  Haskell2010