diff --git a/CHANGELOG.md b/CHANGELOG.md index 7e85573097808b272aea5072a448281d4a08ae6b..5600cc9d19af375d545283a115a888c7162c3222 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Revision history for gbs-downloader -## 0.1.0.0 -- YYYY-mm-dd +## 0.1.0.0 -- 2023-08-17 * First version. Released on an unsuspecting world. +* Basic support for loading storage service announcements for server discovery. +* Basic support for downloading the contents associated with a CHK or SDMF read capability. + * CHK and SDMF directories are also supported. diff --git a/LICENSE b/LICENSE index 9a028081e58c3957bd860847a8888caefde80a3a..b743e063910093462813b4f354369cefccd16ad7 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,6 @@ -Copyright (c) 2023, Least Authority TFA GmbH +Copyright 2023 +Jean-Paul Calderone +Shae Erisson All rights reserved. diff --git a/README.md b/README.md index b125ead62c5b1422eea5065034692bb6f03377eb..56fb22350bd927d34024a37b78004851baa5ad4b 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ It aims for bit-for-bit compatibility with the original Python implementation. ### What is the current state? * It can download immutable and mutable shares from Great Black Swamp storage servers. + * It *does not* cryptographically verify the identity of servers it communicates with. * It can interpret, decode, and decrypt the data for CHK- and SDMF-encoded shares to recover the plaintext. ## Why does it exist? diff --git a/cabal.project.freeze b/cabal.project.freeze deleted file mode 100644 index 42ccbae539f77b5a5dae4f890576a5465e552e01..0000000000000000000000000000000000000000 --- a/cabal.project.freeze +++ /dev/null @@ -1,297 +0,0 @@ -active-repositories: hackage.haskell.org:merge -constraints: any.Cabal ==3.2.1.0, - any.HUnit ==1.6.2.0, - any.OneTuple ==0.3.1, - any.QuickCheck ==2.14.3, - QuickCheck -old-random +templatehaskell, - any.StateVar ==1.2.2, - any.adjunctions ==4.4.2, - any.aeson ==2.1.2.1, - aeson -cffi +ordered-keymap, - any.aeson-pretty ==0.8.9, - aeson-pretty -lib-only, - any.ansi-terminal ==0.11.5, - ansi-terminal -example +win32-2-13-1, - any.ansi-terminal-types ==0.11.5, - any.ansi-wl-pprint ==1.0.2, - ansi-wl-pprint -example, - any.appar ==0.1.8, - any.array ==0.5.4.0, - any.asn1-encoding ==0.9.6, - any.asn1-parse ==0.9.5, - any.asn1-types ==0.3.4, - any.assoc ==1.1, - assoc +tagged, - any.async ==2.2.4, - async -bench, - any.atomic-primops ==0.8.4, - atomic-primops -debug, - any.attoparsec ==0.14.4, - attoparsec -developer, - any.attoparsec-iso8601 ==1.1.0.0, - any.auto-update ==0.1.6, - any.barbies ==2.0.4.0, - any.base ==4.14.3.0, - any.base-compat ==0.12.2, - any.base-compat-batteries ==0.12.2, - any.base-orphans ==0.9.0, - any.base32 ==0.2.2.0, - any.base64-bytestring ==1.2.1.0, - any.basement ==0.0.15, - any.bifunctors ==5.5.15, - bifunctors +semigroups +tagged, - any.binary ==0.8.8.0, - any.bitvec ==1.1.4.0, - bitvec -libgmp, - any.blaze-builder ==0.4.2.2, - any.blaze-html ==0.9.1.2, - any.blaze-markup ==0.8.2.8, - any.boring ==0.2.1, - boring +tagged, - any.bsb-http-chunked ==0.0.0.4, - any.byteorder ==1.0.4, - any.bytestring ==0.10.12.0, - any.bytestring-builder ==0.10.8.2.0, - bytestring-builder +bytestring_has_builder, - any.cabal-doctest ==1.0.9, - any.call-stack ==0.4.0, - any.case-insensitive ==1.2.1.0, - any.cborg ==0.2.9.0, - cborg +optimize-gmp, - any.cborg-json ==0.2.5.0, - any.cereal ==0.5.8.3, - cereal -bytestring-builder, - any.charset ==0.3.9, - any.cipher-aes128 ==0.7.0.6, - cipher-aes128 -test, - any.clock ==0.8.3, - clock -llvm, - any.cmdargs ==0.10.22, - cmdargs +quotation -testprog, - any.colour ==2.3.6, - any.comonad ==5.0.8, - comonad +containers +distributive +indexed-traversable, - any.concurrency ==1.11.0.2, - any.concurrent-output ==1.10.18, - any.conduit ==1.3.5, - any.connection ==0.3.1, - any.constraints ==0.13.4, - any.containers ==0.6.5.1, - any.contravariant ==1.5.5, - contravariant +semigroups +statevar +tagged, - any.cookie ==0.4.6, - any.crypto-api ==0.13.3, - crypto-api -all_cpolys, - any.cryptonite ==0.30, - cryptonite -check_alignment +integer-gmp -old_toolchain_inliner +support_aesni +support_deepseq -support_pclmuldq +support_rdrand -support_sse +use_target_attributes, - any.data-array-byte ==0.1.0.1, - any.data-default-class ==0.1.2.0, - any.data-fix ==0.3.2, - any.dec ==0.0.5, - any.deepseq ==1.4.4.0, - any.deriving-aeson ==0.2.9, - any.directory ==1.3.6.0, - any.distributive ==0.6.2.1, - distributive +semigroups +tagged, - any.dlist ==1.0, - dlist -werror, - any.easy-file ==0.2.5, - any.entropy ==0.4.1.10, - entropy -donotgetentropy, - any.erf ==2.0.0.0, - any.exceptions ==0.10.4, - any.extra ==1.7.13, - any.fast-logger ==3.2.1, - any.fec ==0.1.1, - any.file-embed ==0.0.15.0, - any.filepath ==1.4.2.1, - any.foldable1-classes-compat ==0.1, - foldable1-classes-compat +tagged, - any.foldl ==1.4.14, - any.free ==5.1.10, - any.generically ==0.1.1, - any.ghc-boot-th ==8.10.7, - any.ghc-prim ==0.6.1, - any.half ==0.3.1, - any.happy ==1.20.1.1, - any.hashable ==1.4.2.0, - hashable +integer-gmp -random-initial-seed, - any.haskell-lexer ==1.1.1, - any.hedgehog ==1.2, - any.hourglass ==0.2.12, - any.hsc2hs ==0.68.9, - hsc2hs -in-ghc-tree, - any.http-api-data ==0.5, - http-api-data -use-text-show, - any.http-client ==0.7.13.1, - http-client +network-uri, - any.http-client-tls ==0.3.6.1, - any.http-date ==0.0.11, - any.http-media ==0.8.0.0, - any.http-types ==0.12.3, - any.http2 ==4.1.2, - http2 -devel -h2spec, - any.indexed-traversable ==0.1.2.1, - any.indexed-traversable-instances ==0.1.1.2, - any.integer-gmp ==1.0.3.0, - any.integer-logarithms ==1.0.3.1, - integer-logarithms -check-bounds +integer-gmp, - any.invariant ==0.6.1, - any.iproute ==1.7.12, - any.kan-extensions ==5.2.5, - any.lens ==5.2.2, - lens -benchmark-uniplate -dump-splices +inlining -j +test-hunit +test-properties +test-templates +trustworthy, - any.libyaml ==0.1.2, - libyaml -no-unicode -system-libyaml, - any.lifted-async ==0.10.2.4, - any.lifted-base ==0.2.3.12, - any.megaparsec ==9.2.1, - megaparsec -dev, - any.memory ==0.18.0, - memory +support_bytestring +support_deepseq, - any.mime-types ==0.1.1.0, - any.mmorph ==1.2.0, - any.monad-control ==1.0.3.1, - any.monad-loops ==0.4.3, - monad-loops +base4, - any.mono-traversable ==1.0.15.3, - any.mtl ==2.2.2, - any.network ==3.1.4.0, - network -devel, - any.network-byte-order ==0.1.6, - any.network-uri ==2.6.4.2, - any.old-locale ==1.0.0.7, - any.old-time ==1.1.0.3, - any.optparse-applicative ==0.18.1.0, - optparse-applicative +process, - any.parallel ==3.2.2.0, - any.parsec ==3.1.14.0, - any.parser-combinators ==1.3.0, - parser-combinators -dev, - any.parsers ==0.12.11, - parsers +attoparsec +binary +parsec, - any.pem ==0.2.4, - any.pretty ==1.1.3.6, - any.pretty-show ==1.10, - any.prettyprinter ==1.7.1, - prettyprinter -buildreadme +text, - any.prettyprinter-ansi-terminal ==1.1.3, - any.prettyprinter-compat-ansi-wl-pprint ==1.0.2, - any.primitive ==0.8.0.0, - any.process ==1.6.13.2, - any.profunctors ==5.6.2, - any.psqueues ==0.2.7.3, - any.random ==1.2.1.1, - any.recv ==0.1.0, - any.reflection ==2.1.7, - reflection -slow +template-haskell, - any.resourcet ==1.2.6, - any.rts ==1.0.1, - any.safe ==0.3.19, - any.safe-exceptions ==0.1.7.3, - any.scientific ==0.3.7.0, - scientific -bytestring-builder -integer-simple, - any.semialign ==1.3, - semialign +semigroupoids, - any.semigroupoids ==5.3.7, - semigroupoids +comonad +containers +contravariant +distributive +tagged +unordered-containers, - any.semigroups ==0.20, - semigroups +binary +bytestring -bytestring-builder +containers +deepseq +hashable +tagged +template-haskell +text +transformers +unordered-containers, - any.serialise ==0.2.6.0, - serialise +newtime15, - any.servant ==0.19.1, - any.servant-client ==0.19, - any.servant-client-core ==0.19, - any.servant-docs ==0.12, - any.servant-foreign ==0.15.4, - any.servant-js ==0.9.4.2, - servant-js -example, - any.servant-server ==0.19.2, - any.simple-sendfile ==0.2.31, - simple-sendfile +allow-bsd -fallback, - any.singleton-bool ==0.1.6, - any.socks ==0.6.1, - any.some ==1.0.5, - some +newtype-unsafe, - any.sop-core ==0.5.0.2, - any.split ==0.2.3.5, - any.splitmix ==0.1.0.4, - splitmix -optimised-mixer, - any.stm ==2.5.0.1, - any.streaming-commons ==0.2.2.6, - streaming-commons -use-bytestring-builder, - any.strict ==0.5, - any.string-conversions ==0.4.0.1, - any.tagged ==0.8.7, - tagged +deepseq +transformers, - any.tahoe-chk ==0.1.0.1, - any.tahoe-great-black-swamp ==0.3.0.0, - any.tahoe-ssk ==0.2.0.0, - any.tasty ==1.4.3, - tasty +unix, - any.tasty-hedgehog ==1.4.0.1, - any.tasty-hunit ==0.10.0.3, - any.template-haskell ==2.16.0.0, - any.terminal-size ==0.3.4, - any.text ==1.2.4.1, - any.text-short ==0.1.5, - text-short -asserts, - any.th-abstraction ==0.5.0.0, - any.th-compat ==0.1.4, - any.these ==1.2, - any.time ==1.9.3, - any.time-compat ==1.9.6.1, - time-compat -old-locale, - any.time-manager ==0.0.0, - any.tls ==1.6.0, - tls +compat -hans +network, - any.tls-session-manager ==0.0.4, - any.transformers ==0.5.6.2, - any.transformers-base ==0.4.6, - transformers-base +orphaninstances, - any.transformers-compat ==0.7.2, - transformers-compat -five +five-three -four +generic-deriving +mtl -three -two, - any.tree-diff ==0.3.0.1, - any.type-equality ==1, - any.universe-base ==1.1.3.1, - any.unix ==2.7.2.2, - any.unix-compat ==0.7, - unix-compat -old-time, - any.unix-time ==0.4.9, - any.unliftio ==0.2.24.0, - any.unliftio-core ==0.2.1.0, - any.unordered-containers ==0.2.19.1, - unordered-containers -debug, - any.utf8-string ==1.0.2, - any.utility-ht ==0.0.17, - any.uuid-types ==1.0.5, - any.vault ==0.3.1.5, - vault +useghc, - any.vector ==0.13.0.0, - vector +boundschecks -internalchecks -unsafechecks -wall, - any.vector-algorithms ==0.9.0.1, - vector-algorithms +bench +boundschecks -internalchecks -llvm +properties -unsafechecks, - any.vector-stream ==0.1.0.0, - any.void ==0.7.3, - void -safe, - any.wai ==3.2.3, - any.wai-app-static ==3.1.7.4, - wai-app-static +cryptonite -print, - any.wai-extra ==3.1.13.0, - wai-extra -build-example, - any.wai-logger ==2.4.0, - any.warp ==3.3.25, - warp +allow-sendfilefd -network-bytestring -warp-debug +x509, - any.warp-tls ==3.3.6, - any.witherable ==0.4.2, - any.wl-pprint-annotated ==0.1.0.1, - any.word8 ==0.1.3, - any.x509 ==1.7.7, - any.x509-store ==1.6.9, - any.x509-system ==1.6.7, - any.x509-validation ==1.6.12, - any.yaml ==0.11.11.0, - yaml +no-examples +no-exe, - any.zlib ==0.6.3.0, - zlib -bundled-c-zlib -non-blocking-ffi +pkg-config -index-state: hackage.haskell.org 2023-06-02T14:54:08Z diff --git a/flake.lock b/flake.lock index fd61df1d75d973817a19262dd262a546159899f1..39fc93c0c8f78ccc7a8f949aca810a342d90b372 100644 --- a/flake.lock +++ b/flake.lock @@ -500,11 +500,11 @@ "pre-commit-hooks": "pre-commit-hooks" }, "locked": { - "lastModified": 1686149618, - "narHash": "sha256-/IHWacNutk3tklouWOgClp7FnOH+Yk6If13kKJMSEi8=", + "lastModified": 1692187439, + "narHash": "sha256-m7c4EPFWmB1OmV3dSYQk2qtXR53xOjZdLCjMtzHSK34=", "ref": "main", - "rev": "49696f704eb965f57d729871c6d450ac0aff2b68", - "revCount": 12, + "rev": "408f3deab2e2f6ae60349776dde02c44f71fb386", + "revCount": 16, "type": "git", "url": "https://whetstone.private.storage/jcalderone/hs-flake-utils.git" }, @@ -1147,15 +1147,16 @@ ] }, "locked": { - "lastModified": 1686164259, - "narHash": "sha256-T0U5B/DH+XDEXfBG7cHlTcMec4aUTDd+HH8Bsv0C71Y=", - "ref": "refs/heads/main", - "rev": "f0a11218007f6c2fe0f6b5e09e0993fe253f6e23", - "revCount": 9, + "lastModified": 1692123220, + "narHash": "sha256-XRR4oGgBc6O4DMM0DyS5STMYZPR6xjEBKAQ+N+0DzZ4=", + "ref": "refs/tags/0.1.0.0", + "rev": "21c23b269e88fe77c116451167b0d2027fdca4b3", + "revCount": 22, "type": "git", "url": "https://whetstone.private.storage/PrivateStorage/tahoe-capabilities" }, "original": { + "ref": "refs/tags/0.1.0.0", "type": "git", "url": "https://whetstone.private.storage/PrivateStorage/tahoe-capabilities" } @@ -1223,15 +1224,16 @@ "tahoe-ssk": "tahoe-ssk" }, "locked": { - "lastModified": 1686169487, - "narHash": "sha256-dXtryScMhtz9N3hu0U+kCIGtRo58BHdP2F8PFqHjmao=", - "ref": "refs/heads/main", - "rev": "87c750f2c16a290c0fcedef65d2dbebf6a877965", - "revCount": 14, + "lastModified": 1692283409, + "narHash": "sha256-bEWf+jzyF7FOG1W8INiIzWIyS86ywaYGFFoCoh+1qWI=", + "ref": "refs/tags/0.1.0.0", + "rev": "f57d71df59d9d7fa4f72dfecd3ce39631a05c905", + "revCount": 26, "type": "git", "url": "https://whetstone.private.storage/PrivateStorage/tahoe-directory.git" }, "original": { + "ref": "refs/tags/0.1.0.0", "type": "git", "url": "https://whetstone.private.storage/PrivateStorage/tahoe-directory.git" } @@ -1279,17 +1281,18 @@ ] }, "locked": { - "lastModified": 1686166709, - "narHash": "sha256-z+QzmnfmLuqqNFWvlYAVZoS7jBHEj54OZest/sKgDqk=", - "ref": "refs/heads/main", - "rev": "8f73a87054546c875c3b0284ee4d2f3e0483d963", - "revCount": 93, + "lastModified": 1692193506, + "narHash": "sha256-0UDrh4ZcBHU+4yrLfVe+9wkYF4K1QJoecdOI083Gu5w=", + "ref": "refs/tags/0.2.1.0", + "rev": "96941786b56e9fb949d62a14bacd5ed2c81cd7ab", + "revCount": 112, "type": "git", - "url": "https://whetstone.private.storage/PrivateStorage/tahoe-ssk.git" + "url": "https://whetstone.private.storage/PrivateStorage/tahoe-ssk" }, "original": { + "ref": "refs/tags/0.2.1.0", "type": "git", - "url": "https://whetstone.private.storage/PrivateStorage/tahoe-ssk.git" + "url": "https://whetstone.private.storage/PrivateStorage/tahoe-ssk" } } }, diff --git a/flake.nix b/flake.nix index 794d0ed80816433cedeb9d0b4034541352fcf06b..906f465e385912d2d41b42dcd25839467c1e02d3 100644 --- a/flake.nix +++ b/flake.nix @@ -8,7 +8,7 @@ hs-flake-utils.url = "git+https://whetstone.private.storage/jcalderone/hs-flake-utils.git?ref=main"; tahoe-directory = { - url = "git+https://whetstone.private.storage/PrivateStorage/tahoe-directory.git"; + url = "git+https://whetstone.private.storage/PrivateStorage/tahoe-directory.git?ref=refs/tags/0.1.0.0"; inputs.nixpkgs.follows = "hs-flake-utils/nixpkgs"; }; @@ -87,19 +87,12 @@ cat >cabal.project.local <<EOF -- This file is auto-generated by the flake devShell's shellHook. Do -- not edit this file. Make changes in flake.nix. - packages: - -- These aren't released on hackage yet so we have to get them - -- another way. Here, we get them from the Nix store. - -- tahoe-chk - ${tahoe-chk} - -- tahoe-ssk - ${tahoe-ssk} - -- tahoe-capabilities - ${tahoe-capabilities} - -- tahoe-directory - ${tahoe-directory} - -- tahoe-great-black-swamp - ${tahoe-great-black-swamp} + package zlib + -- by default the cabal build won't use pkg-config to find the + -- underlying zlib c library. this will most likely cause + -- "cabal build" to fail (unless other steps are taken). turn + -- on pkg-config so that the cabal-test app below can succeed. + flags: -bundled-c-zlib -non-blocking-ffi +pkg-config EOF ''; } @@ -124,40 +117,20 @@ }/bin/entr-test"; }; + apps.release = hslib.apps.release {}; + # Using the working directory of `nix run`, do a build with cabal and # then run the test suite. - apps.cabal-test = { - type = "app"; - program = "${ - pkgs.writeShellApplication { - name = "cabal-build-and-test"; - # Only put packages with things that need to be on PATH here - # because that's all that runtimeInputs buys us. Packages with - # different requirements need to be handled differently. - runtimeInputs = with pkgs; [ - pkg-config - haskell.compiler.${ghcVersion} - cabal-install - ]; - - text = '' - nix run .#generate-cabal-project - - # Here we make zlib discoverable by pkg-config so cabal can find - # headers and stuff. - export PKG_CONFIG_PATH=${pkgs.lib.makeSearchPath "lib/pkgconfig" [pkgs.zlib.dev]} - - # Get (or update if we have one) a package database so cabal can - # solve our dependencies. - cabal update hackage.haskell.org + apps.cabal-test = hslib.apps.cabal-test { + preBuild = '' + # Refresh the cabal.project.local file to point to the correct + # dependencies, if necessary. + nix run .#generate-cabal-project - # Run the default test suite. The local cabal project file - # written above should have enabled tests so the build plan will - # support them. - cabal run tests - ''; - } - }/bin/cabal-build-and-test"; + # Here we make zlib discoverable by pkg-config so cabal can find + # headers and stuff. + export PKG_CONFIG_PATH=${pkgs.lib.makeSearchPath "lib/pkgconfig" [pkgs.zlib.dev]} + ''; }; }); } diff --git a/gbs-downloader.cabal b/gbs-downloader.cabal index 558340f6028dbd9519f9afddb04fae604c2ef7a8..46c02301ab586cc73ff769a434a9d3f73789ebb1 100644 --- a/gbs-downloader.cabal +++ b/gbs-downloader.cabal @@ -28,7 +28,9 @@ synopsis: A library for downloading data from a Great Black Swamp server -- A longer description of the package. --- description: +description: + Integrate tahoe-ssk, tahoe-chk, and tahoe-directory to provide a high-level + API for downloading immutable and mutable files and directories. -- URL for the project homepage or repository. homepage: @@ -41,24 +43,31 @@ license: BSD-3-Clause license-file: LICENSE -- The package author(s). -author: Least Authority TFA GmbH +author: Jean-Paul Calderone and others -- An email address to which users can send suggestions, bug reports, and patches. -maintainer: jean-paul@leastauthority.com +maintainer: exarkun@twistedmatrix.com -- A copyright notice. --- copyright: +copyright: 2023 The Authors category: Network build-type: Simple -- Extra doc files to be distributed with the package, such as a CHANGELOG or a README. -extra-doc-files: CHANGELOG.md +extra-doc-files: + CHANGELOG.md + README.md -- Extra source files to be distributed with the package, such as examples, or a tutorial module. -- extra-source-files: +source-repository head + type: git + location: + https://whetstone.private.storage/PrivateStorage/gbs-downloader.git + common warnings - ghc-options: -Wall -Werror + ghc-options: -Wall common language -- LANGUAGE extensions used by modules in all targets. @@ -94,29 +103,29 @@ library -- Other library packages from which modules are imported. build-depends: - , aeson - , async - , base - , base32 - , base64-bytestring - , binary - , bytestring - , connection - , containers - , data-default-class - , exceptions - , http-client - , http-client-tls - , http-types - , network-uri - , servant-client - , servant-client-core - , tahoe-chk - , tahoe-directory - , tahoe-great-black-swamp >=0.3 && <0.4 - , tahoe-ssk >=0.2 && <0.3 - , text - , yaml + , aeson >=1.4.7 && <2.2 + , async >=2.2.2 && <2.3 + , base >=4.7 && <5 + , base32 >=0.2.1 && <0.3 + , base64-bytestring >=1.0.0.3 && <1.3 + , binary >=0.8.6 && <0.9 + , bytestring >=0.10.8.2 && <0.11 + , connection >=0.3.1 && <0.4 + , containers >=0.6.0.1 && <0.7 + , data-default-class >=0.1.2 && <0.2 + , exceptions >=0.10.4 && <0.11 + , http-client >=0.6.4.1 && <0.8 + , http-client-tls >=0.3.5.3 && <0.4 + , http-types >=0.12.3 && <0.13 + , network-uri >=2.6.3 && <2.7 + , servant-client >=0.16.0.1 && <0.21 + , servant-client-core >=0.16 && <0.21 + , tahoe-chk >=0.1 && <0.2 + , tahoe-directory >=0.1 && <0.2 + , tahoe-great-black-swamp >=0.3 && <0.4 + , tahoe-ssk >=0.2 && <0.3 + , text >=1.2.3.1 && <1.3 + , yaml >=0.11.5.0 && <0.11.9.0 || >=0.11.9.0.0 && <0.12 -- Directories containing source files. hs-source-dirs: src @@ -141,15 +150,15 @@ executable download-chk -- Other library packages from which modules are imported. build-depends: - , aeson - , base - , bytestring - , containers + , aeson >=1.4.7 && <2.2 + , base >=4.7 && <5 + , bytestring >=0.10.8.2 && <0.11 + , containers >=0.6.0.1 && <0.7 , gbs-downloader - , megaparsec - , tahoe-chk - , text - , yaml + , megaparsec >=8.0 && <9.3 + , tahoe-chk >=0.1 && <0.2 + , text >=1.2.3.1 && <1.3 + , yaml >=0.11.5.0 && <0.11.9.0 || >=0.11.9.0.0 && <0.12 -- Directories containing source files. hs-source-dirs: app @@ -164,15 +173,15 @@ executable download-sdmf main-is: Main.hs build-depends: - , aeson - , base - , bytestring - , containers + , aeson >=1.4.7 && <2.2 + , base >=4.7 && <5 + , bytestring >=0.10.8.2 && <0.11 + , containers >=0.6.0.1 && <0.7 , gbs-downloader - , megaparsec - , tahoe-ssk >=0.2 && <0.3 - , text - , yaml + , megaparsec >=8.0 && <9.3 + , tahoe-ssk >=0.2 && <0.3 + , text >=1.2.3.1 && <1.3 + , yaml >=0.11.5.0 && <0.11.9.0 || >=0.11.9.0.0 && <0.12 hs-source-dirs: download-sdmf default-language: Haskell2010 @@ -184,17 +193,17 @@ executable list-dircap main-is: Main.hs build-depends: - , aeson - , base - , bytestring - , containers + , aeson >=1.4.7 && <2.2 + , base >=4.7 && <5 + , bytestring >=0.10.8.2 && <0.11 + , containers >=0.6.0.1 && <0.7 , gbs-downloader - , megaparsec - , tahoe-chk - , tahoe-directory - , tahoe-ssk >=0.2 && <0.3 - , text - , yaml + , megaparsec >=8.0 && <9.3 + , tahoe-chk >=0.1 && <0.2 + , tahoe-directory >=0.1 && <0.2 + , tahoe-ssk >=0.2 && <0.3 + , text >=1.2.3.1 && <1.3 + , yaml >=0.11.5.0 && <0.11.9.0 || >=0.11.9.0.0 && <0.12 hs-source-dirs: list-dircap default-language: Haskell2010 @@ -223,28 +232,28 @@ test-suite gbs-downloader-test -- Test dependencies. build-depends: - , asn1-encoding - , asn1-types - , base - , base32 - , binary - , bytestring - , containers - , crypto-api - , cryptonite - , data-default-class + , asn1-encoding >=0.9.6 && <0.10 + , asn1-types >=0.3.4 && <0.4 + , base >=4.7 && <5 + , base32 >=0.2.1 && <0.3 + , binary >=0.8.6 && <0.9 + , bytestring >=0.10.8.2 && <0.11 + , containers >=0.6.0.1 && <0.7 + , crypto-api >=0.13.3 && <0.14 + , cryptonite >=0.27 && <0.31 + , data-default-class >=0.1.2 && <0.2 , gbs-downloader - , hedgehog - , http-client - , http-types - , memory - , servant-client - , servant-client-core - , tahoe-chk - , tahoe-ssk >=0.2 && <0.3 - , tasty - , tasty-hedgehog - , tasty-hunit - , text - , x509 - , yaml + , hedgehog >=1.0.3 && <1.1 + , http-client >=0.6.4.1 && <0.8 + , http-types >=0.12.3 && <0.13 + , memory >=0.15 && <0.17 + , servant-client >=0.16.0.1 && <0.21 + , servant-client-core >=0.16 && <0.21 + , tahoe-chk >=0.1 && <0.2 + , tahoe-ssk >=0.2 && <0.3 + , tasty >=1.2.3 && <1.5 + , tasty-hedgehog >=1.0.0.2 && <1.2 + , tasty-hunit >=0.10.0.2 && <0.11 + , text >=1.2.3.1 && <1.3 + , x509 >=1.7.5 && <1.8 + , yaml >=0.11.5.0 && <0.11.9.0 || >=0.11.9.0.0 && <0.12