cabal-version:      >=1.10
name:               tls
version:            2.1.7
license:            BSD3
license-file:       LICENSE
copyright:          Vincent Hanquez <vincent@snarc.org>
maintainer:         Kazu Yamamoto <kazu@iij.ad.jp>
author:             Vincent Hanquez <vincent@snarc.org>
homepage:           https://github.com/haskell-tls/hs-tls
synopsis:           TLS protocol native implementation
description:
    Native Haskell TLS 1.2/1.3 protocol implementation for servers and clients.

category:           Network
build-type:         Simple
extra-source-files:
    test/*.hs
    CHANGELOG.md

source-repository head
    type:     git
    location: https://github.com/haskell-tls/hs-tls
    subdir:   core

flag devel
    description: Development commands
    default:     False

library
    exposed-modules:
        Network.TLS
        Network.TLS.Cipher
        Network.TLS.Compression
        Network.TLS.Internal
        Network.TLS.Extra
        Network.TLS.Extra.Cipher
        Network.TLS.Extra.FFDHE
        Network.TLS.QUIC

    other-modules:
        Network.TLS.Struct
        Network.TLS.Struct13
        Network.TLS.Core
        Network.TLS.Context
        Network.TLS.Context.Internal
        Network.TLS.Credentials
        Network.TLS.Backend
        Network.TLS.Crypto
        Network.TLS.Crypto.DH
        Network.TLS.Crypto.IES
        Network.TLS.Crypto.Types
        Network.TLS.ErrT
        Network.TLS.Error
        Network.TLS.Extension
        Network.TLS.Handshake
        Network.TLS.Handshake.Certificate
        Network.TLS.Handshake.Client
        Network.TLS.Handshake.Client.ClientHello
        Network.TLS.Handshake.Client.Common
        Network.TLS.Handshake.Client.ServerHello
        Network.TLS.Handshake.Client.TLS12
        Network.TLS.Handshake.Client.TLS13
        Network.TLS.Handshake.Common
        Network.TLS.Handshake.Common13
        Network.TLS.Handshake.Control
        Network.TLS.Handshake.Key
        Network.TLS.Handshake.Process
        Network.TLS.Handshake.Random
        Network.TLS.Handshake.Server
        Network.TLS.Handshake.Server.ClientHello
        Network.TLS.Handshake.Server.ClientHello12
        Network.TLS.Handshake.Server.ClientHello13
        Network.TLS.Handshake.Server.Common
        Network.TLS.Handshake.Server.ServerHello12
        Network.TLS.Handshake.Server.ServerHello13
        Network.TLS.Handshake.Server.TLS12
        Network.TLS.Handshake.Server.TLS13
        Network.TLS.Handshake.Signature
        Network.TLS.Handshake.State
        Network.TLS.Handshake.State13
        Network.TLS.HashAndSignature
        Network.TLS.Hooks
        Network.TLS.IO
        Network.TLS.IO.Decode
        Network.TLS.IO.Encode
        Network.TLS.Imports
        Network.TLS.KeySchedule
        Network.TLS.MAC
        Network.TLS.Measurement
        Network.TLS.Packet
        Network.TLS.Packet13
        Network.TLS.Parameters
        Network.TLS.PostHandshake
        Network.TLS.RNG
        Network.TLS.Record
        Network.TLS.Record.Decrypt
        Network.TLS.Record.Encrypt
        Network.TLS.Record.Layer
        Network.TLS.Record.Recv
        Network.TLS.Record.Send
        Network.TLS.Record.State
        Network.TLS.Record.Types
        Network.TLS.Session
        Network.TLS.State
        Network.TLS.Types
        Network.TLS.Types.Cipher
        Network.TLS.Types.Secret
        Network.TLS.Types.Session
        Network.TLS.Types.Version
        Network.TLS.Util
        Network.TLS.Util.ASN1
        Network.TLS.Util.Serialization
        Network.TLS.Wire
        Network.TLS.X509

    default-extensions: Strict StrictData
    default-language: Haskell2010
    ghc-options:      -Wall
    build-depends:
        base >=4.9 && <5,
        asn1-encoding >= 0.9 && < 0.10,
        asn1-types >= 0.3 && < 0.4,
        base16-bytestring,
        bytestring >= 0.10 && < 0.13,
        cereal >= 0.5.3 && < 0.6,
        crypton >= 0.34,
        crypton-x509 >= 1.7 && < 1.8,
        crypton-x509-store >= 1.6 && < 1.7,
        crypton-x509-validation >= 1.6.13 && < 1.7,
        data-default,
        memory >= 0.18 && < 0.19,
        mtl >= 2.2 && < 2.4,
        network >= 3.1,
        serialise >= 0.2 && < 0.3,
        transformers >= 0.5 && < 0.7,
        unix-time >= 0.4.11 && < 0.5,
        zlib >= 0.7 && < 0.8

test-suite spec
    type:               exitcode-stdio-1.0
    main-is:            Spec.hs
    build-tool-depends: hspec-discover:hspec-discover
    hs-source-dirs:     test
    other-modules:
        API
        Arbitrary
        Certificate
        CiphersSpec
        EncodeSpec
        HandshakeSpec
        PipeChan
        PubKey
        Run
        Session
        ThreadSpec

    default-extensions: Strict StrictData
    default-language:   Haskell2010
    ghc-options:        -Wall -threaded -rtsopts
    build-depends:
        base >=4.9 && <5,
        QuickCheck,
        asn1-types,
        async,
        bytestring,
        crypton,
        crypton-x509,
        crypton-x509-validation,
        hourglass,
        hspec,
        serialise,
        tls

executable tls-server
    main-is:            tls-server.hs
    hs-source-dirs:     util
    other-modules:
        Common
        Server
        Imports

    default-language:   Haskell2010
    default-extensions: Strict StrictData
    ghc-options:        -Wall -threaded -rtsopts
    build-depends:
        base >=4.9 && <5,
        bytestring,
        base16-bytestring,
        containers,
        crypton,
        crypton-x509-store,
        crypton-x509-system,
        network,
        network-run,
        tls

    if flag(devel)

    else
        buildable: False

executable tls-client
    main-is:            tls-client.hs
    hs-source-dirs:     util
    other-modules:
        Client
        Common
        Imports

    default-language:   Haskell2010
    default-extensions: Strict StrictData
    ghc-options:        -Wall -threaded -rtsopts
    build-depends:
        base >=4.9 && <5,
        base16-bytestring,
        bytestring,
        crypton,
        crypton-x509-store,
        crypton-x509-system,
        network,
        network-run,
        tls

    if flag(devel)

    else
        buildable: False