From bf3d67684d0cba656b05ff3a102e9217dbf78934 Mon Sep 17 00:00:00 2001 From: Felix Lechner Date: Sat, 22 Oct 2022 23:39:52 -0700 Subject: [PATCH] gnu: Add gocryptfs. * gnu/packages/gocryptfs.scm: New file. * gnu/packages/gocryptfs.scm (go-github-com-hanwen-go-fuse-v2): New variable. * gnu/packages/gocryptfs.scm (go-github-com-jacobsa-crypto): New variable. * gnu/packages/gocryptfs.scm (go-github-com-jacobsa-oglematchers): New variable. * gnu/packages/gocryptfs.scm (go-github-com-jacobsa-oglemock): New variable. * gnu/packages/gocryptfs.scm (go-github-com-jacobsa-ogletest): New variable. * gnu/packages/gocryptfs.scm (go-github-com-jacobsa-reqtrace): New variable. * gnu/packages/gocryptfs.scm (go-github-com-pkg-xattr): New variable. * gnu/packages/gocryptfs.scm (go-github-com-rfjakob-eme): New variable. * gnu/packages/gocryptfs.scm (gocryptfs): New variable. --- gnu/packages/gocryptfs.scm | 314 +++++++++++++++++++++++++++++++++++++ 1 file changed, 314 insertions(+) create mode 100644 gnu/packages/gocryptfs.scm diff --git a/gnu/packages/gocryptfs.scm b/gnu/packages/gocryptfs.scm new file mode 100644 index 0000000000..7893a3b4ca --- /dev/null +++ b/gnu/packages/gocryptfs.scm @@ -0,0 +1,314 @@ +(define-module (gnu packages gocryptfs)) + +(use-modules (gnu packages golang) + (gnu packages pkg-config) + (gnu packages tls) + (guix build-system go) + (guix gexp) + (guix git-download) + ((guix licenses) #:prefix license:) + (guix packages)) + +(define-public go-github-com-hanwen-go-fuse-v2 + (let ((commit "4c25c9c1eecefb8beeea3daddf3486eb1dd48b89") + (revision "0")) + (package + (name "go-github-com-hanwen-go-fuse-v2") + (version (git-version "2.1.0" revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/hanwen/go-fuse") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0hi3x963bj9hcngyy2ba3mipcqx5gwqvcj7vg1r4vlal2qbsqcmf")))) + (build-system go-build-system) + (arguments + '(#:import-path "github.com/hanwen/go-fuse/v2")) + (native-inputs (list + go-golang-org-x-sys + go-golang-org-x-sync + go-github-com-kylelemons-godebug)) + (home-page "https://github.com/hanwen/go-fuse") + (synopsis "Go bindings for FUSE filesystems") + (description + "This is a repository containing Go bindings for writing FUSE file systems.") + (license license:bsd-3)))) + +(define-public go-github-com-jacobsa-crypto + (let ((commit "9f44e2d11115452dad8f404f029574422855f46a") + (revision "0")) + (package + (name "go-github-com-jacobsa-crypto") + (version (git-version "0.0.0" revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/jacobsa/crypto") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "18c3cx8izxdajq22zdq0n19j9d2l6iickd3mz39j5h96kw7l5qmy")))) + (build-system go-build-system) + (arguments + (list #:import-path "github.com/jacobsa/crypto" + ;; Source-only package. + #:tests? #f + #:phases + #~(modify-phases %standard-phases + ;; Source-only package. + (delete 'build)))) + (home-page "https://github.com/jacobsa/crypto") + (synopsis "Cryptography missing from the Go standard library") + (description + "This repository contains Go packages related to cryptographic standards that are +not included in the Go standard library.") + (license license:asl2.0)))) + +(define-public go-github-com-jacobsa-oglematchers + (let ((commit "141901ea67cd4769c6800aa7bfdfc558fa22bda5") + (revision "0")) + (package + (name "go-github-com-jacobsa-oglematchers") + (version (git-version "0.0.0" revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/jacobsa/oglematchers") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "09ff5x6vbhd9zl1z4yzyk573ifh16rry38q1rx986kbz4hqkmniq")))) + (build-system go-build-system) + (arguments + '(#:import-path "github.com/jacobsa/oglematchers" + ;; break loop with with go-github-com-jacobsa-ogletest + #:tests? #f)) + (home-page "https://github.com/jacobsa/oglematchers") + (synopsis "Matchers for Go testing framework") + (description + "Package oglematchers provides a set of matchers useful in a testing or mocking +framework. These matchers are inspired by and mostly compatible with Google +Test for C++ and Google JS Test.") + (license license:asl2.0)))) + +(define-public go-github-com-jacobsa-oglemock + (let ((commit "e94d794d06ffc6de42cb19d0dab3c219efdd6dcf") + (revision "0")) + (package + (name "go-github-com-jacobsa-oglemock") + (version (git-version "0.0.0" revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/jacobsa/oglemock") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "14yxf8ykwdwkcccksl6741xgzcf8qykyi58kp4maxpgscqhdl8rq")))) + (build-system go-build-system) + (arguments + (list + #:import-path "github.com/jacobsa/oglemock" + ;; break loop with with go-github-com-jacobsa-ogletest + #:tests? #f)) + (native-inputs (list + go-github-com-jacobsa-oglematchers)) + (home-page "https://github.com/jacobsa/oglemock") + (synopsis "Mocking framework for unit tests") + (description + "Package oglemock provides a mocking framework for unit tests.") + (license license:asl2.0)))) + +(define-public go-github-com-jacobsa-ogletest + (let ((commit "80d50a735a1108a2aeb7abc4a988d183f20c5292") + (revision "0")) + (package + (name "go-github-com-jacobsa-ogletest") + (version (git-version "0.0.0" revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/jacobsa/ogletest") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1lbwbxzr75g65q07ry5k4kglxqs3ym7xkvqznzm55rm3qk76v83r")))) + (build-system go-build-system) + (arguments + '(#:import-path "github.com/jacobsa/ogletest" + ;; These tests should be made working + #:tests? #f)) + (native-inputs (list + go-github-com-jacobsa-oglematchers + go-github-com-jacobsa-oglemock + go-github-com-jacobsa-reqtrace + go-golang-org-x-net)) + (home-page "https://github.com/jacobsa/ogletest") + (synopsis "Expressive unit tests") + (description + "Package ogletest provides a framework for writing expressive unit tests. It +integrates with the builtin testing package, so it works with the gotest +command. Unlike the testing package which offers only basic capabilities for +signalling failures, it offers ways to express expectations and get nice failure +messages automatically.") + (license license:asl2.0)))) + +(define-public go-github-com-jacobsa-reqtrace + (let ((commit "245c9e0234cb2ad542483a336324e982f1a22934") + (revision "0")) + (package + (name "go-github-com-jacobsa-reqtrace") + (version (git-version "0.0.0" revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/jacobsa/reqtrace") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0zfyijig10896v42rvxka1n4wn6lijqz40y2281187l7mq8vv5jn")))) + (build-system go-build-system) + (arguments + '(#:import-path "github.com/jacobsa/reqtrace")) + (inputs (list + go-golang-org-x-net)) + (home-page "https://github.com/jacobsa/reqtrace") + (synopsis "Simple request tracing framework") + (description + "Package reqtrace contains a very simple request tracing framework.") + (license license:asl2.0)))) + +(define-public go-github-com-pkg-xattr + (package + (name "go-github-com-pkg-xattr") + (version "0.4.9") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/pkg/xattr") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0qg4zh0d8m4adaiicsd0cpw0w6g8sk01f4jz7jyxgirh1wfcsqyz")))) + (build-system go-build-system) + (arguments + '(#:import-path "github.com/pkg/xattr")) + (native-inputs (list go-golang-org-x-sys)) + (home-page "https://github.com/pkg/xattr") + (synopsis "Support for extended file system attributes") + (description + "Package xattr provides support for extended attributes on Linux, Darwin and +FreeBSD. Extended attributes are name:value pairs permanently associated with +files or directories. They are similar to the environment strings associated with +a process. An attribute may be defined or undefined. If defined, its value may +be empty or non-empty. You can find more details here: +@@url{https://en.wikipedia.org/wiki/Extended_file_attributes, +https://en.wikipedia.org/wiki/Extended_file_attributes} +.") + (license license:bsd-2))) + +(define-public go-github-com-rfjakob-eme + (package + (name "go-github-com-rfjakob-eme") + (version "1.1.2") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/rfjakob/eme") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1yrbhvy0337mf12fp8p4sy8ry8r3w2qfdf8val5hj07p2lri0cqk")))) + (build-system go-build-system) + (arguments + '(#:import-path "github.com/rfjakob/eme")) + (home-page "https://github.com/rfjakob/eme") + (synopsis "EME for Go") + (description + "EME (ECB-Mix-ECB or, clearer, Encrypt-Mix-Encrypt) is a wide-block encryption +mode developed by Halevi and Rogaway.") + (license license:expat))) + +(define-public gocryptfs + (package + (name "gocryptfs") + (version "2.3.0") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/rfjakob/gocryptfs") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1lkcx61r93xq21scg98hrvclwwxbli93pqnnck0d08isvhgjd590")))) + (build-system go-build-system) + (arguments + (list + #:import-path "github.com/rfjakob/gocryptfs" + #:build-flags + #~(list + "-ldflags" (string-append + "-X main.GitVersion=" #$version + " -X main.GitVersionFuse=" #$(package-version + go-github-com-hanwen-go-fuse-v2) + " -X main.BuildDate=" "[reproducible]")) + #:phases + #~(modify-phases %standard-phases + ;; after 'check phase, should maybe unmount leftover mounts as in + ;; https://github.com/rfjakob/gocryptfs/blob/a55b3cc15a6d9bce116a90f33df4bc99d9dd6a10/test.bash#L28 + (replace 'build + (lambda arguments + (for-each + (lambda (directory) + (apply (assoc-ref %standard-phases 'build) + (append arguments (list #:import-path directory)))) + (list + "github.com/rfjakob/gocryptfs" + "github.com/rfjakob/gocryptfs/gocryptfs-xray" + "github.com/rfjakob/gocryptfs/contrib/statfs" + "github.com/rfjakob/gocryptfs/contrib/findholes" + "github.com/rfjakob/gocryptfs/contrib/atomicrename"))))))) + (native-inputs (list + go-github-com-hanwen-go-fuse-v2 + go-github-com-jacobsa-crypto + go-github-com-jacobsa-oglematchers + go-github-com-jacobsa-oglemock + go-github-com-jacobsa-ogletest + go-github-com-jacobsa-reqtrace + go-github-com-pkg-xattr + go-github-com-rfjakob-eme + go-github-com-sabhiram-go-gitignore + go-github-com-spf13-pflag + go-golang-org-x-crypto + go-golang-org-x-net + go-golang-org-x-sys + go-golang-org-x-term + openssl + pkg-config)) + (home-page "https://github.com/rfjakob/gocryptfs") + (synopsis "Encrypted overlay filesystem") + (description + "Gocryptfs is an encrypted overlay filesystem written in Go. It +features a file-based encryption that is implemented as a mountable +FUSE filesystem. + +Gocryptfs was inspired by EncFS and strives to fix its security issues +while providing good performance. Gocryptfs is as fast as EncFS in the +default mode and significantly faster than paranoia mode in EncFS, +which provides a security level comparable to Gocryptfs. + +On CPUs without AES-NI, gocryptfs uses OpenSSL through a thin wrapper +called stupidgcm. This provides a 4x speedup compared to Go's builtin +AES-GCM implementation.") + (license license:expat))) base-commit: bb2701b9111a3d82a82ceaaf2b22b51ecd8ac21f prerequisite-patch-id: 26ec5a03b0ac6b2d5b9df1a82b699a3701e62f91 prerequisite-patch-id: 11b4410d3ba809f1cf31d46f3f7fec85d8eab5c0 -- 2.38.0