summaryrefslogtreecommitdiff
path: root/gnu/packages/crates-io.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/crates-io.scm')
-rw-r--r--gnu/packages/crates-io.scm213
1 files changed, 178 insertions, 35 deletions
diff --git a/gnu/packages/crates-io.scm b/gnu/packages/crates-io.scm
index ba54d7c383..9ed7ddea97 100644
--- a/gnu/packages/crates-io.scm
+++ b/gnu/packages/crates-io.scm
@@ -64190,33 +64190,187 @@ Digital Signature Algorithm} (ECDSA).")
(description "This package provided safe, fast, small crypto using Rust.")
(license (list license:isc license:openssl))))
+(define rust-ring-0.16-sources
+ (let* ((version "0.16.20")
+ (upstream-source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/briansmith/ring")
+ (commit "9cc0d45f4d8521f467bb3a621e74b1535e118188")))
+ (file-name (git-file-name "rust-ring" version))
+ (sha256
+ (base32 "1aps05i5308ka03968glnnqr4kdkk2x4ghlg5vrqhl78jm6ivvby")))))
+ (origin
+ (method computed-origin-method)
+ (file-name (string-append "rust-ring-" version ".tar.gz"))
+ (sha256 #f)
+ (uri
+ (delay
+ (with-imported-modules '((guix build utils))
+ #~(begin
+ (use-modules (guix build utils))
+ (set-path-environment-variable
+ "PATH" '("bin")
+ (list #+(canonical-package gzip)
+ #+(canonical-package tar)
+ #+perl
+ #+nasm
+ #+go
+ #+clang ; clang-format
+ #+python2-minimal))
+ (setenv "HOME" (getcwd))
+ (copy-recursively #+upstream-source
+ (string-append "ring-" #$version))
+ (with-directory-excursion (string-append "ring-" #$version)
+ (begin
+ ;; It turns out Guix's nasm works just fine here.
+ (substitute* "build.rs"
+ (("./target/tools/nasm") "nasm"))
+ ;; Files which would be deleted in a snippet:
+ (delete-file "crypto/curve25519/curve25519_tables.h")
+ (delete-file "crypto/fipsmodule/ec/ecp_nistz256_table.inl")
+ ;; Files to be generated in the sources:
+ (format #t "Generating the missing files ...~%")
+ (force-output)
+ (with-directory-excursion "crypto/curve25519"
+ (with-output-to-file "curve25519_tables.h"
+ (lambda _ (invoke "python" "make_curve25519_tables.py"))))
+ (with-directory-excursion "crypto/fipsmodule/ec"
+ (with-output-to-file "ecp_nistz256_table.inl"
+ (lambda _ (invoke "go" "run" "make_p256-x86_64-table.go"))))
+ (format #t "Generating the pregenerated files ...~%")
+ (force-output)
+ (mkdir-p "pregenerated/tmp")
+
+ ;; We generate all the files which upstream would normally be
+ ;; generate by using '(cd pregenerate_asm && cargo clean &&
+ ;; cargo build) ./pregenerate_asm/target/debug/pregenerate_asm'
+ ;; in order to not include a dependency on cargo when
+ ;; generating the sources.
+ (define (prefix script)
+ (string-append
+ "pregenerated/"
+ (string-drop-right
+ (string-drop script
+ (string-index-right script #\/)) 3)))
+
+ (for-each
+ (lambda (script)
+ (invoke "perl" script "elf"
+ (string-append (prefix script) "-elf.S"))
+ (invoke "perl" script "macosx"
+ (string-append (prefix script) "-macosx.S"))
+ (invoke "perl" script "nasm"
+ (string-append
+ "pregenerated/tmp/"
+ (string-drop (prefix script) 13) "-nasm.asm")))
+ '("crypto/fipsmodule/aes/asm/aesni-x86_64.pl"
+ "crypto/fipsmodule/aes/asm/vpaes-x86_64.pl"
+ "crypto/fipsmodule/bn/asm/x86_64-mont.pl"
+ "crypto/fipsmodule/bn/asm/x86_64-mont5.pl"
+ "crypto/chacha/asm/chacha-x86_64.pl"
+ "crypto/fipsmodule/ec/asm/p256-x86_64-asm.pl"
+ "crypto/fipsmodule/modes/asm/aesni-gcm-x86_64.pl"
+ "crypto/fipsmodule/modes/asm/ghash-x86_64.pl"
+ "crypto/fipsmodule/sha/asm/sha512-x86_64.pl"
+ "crypto/cipher_extra/asm/chacha20_poly1305_x86_64.pl"))
+
+ (invoke "perl" "crypto/fipsmodule/sha/asm/sha512-x86_64.pl"
+ "elf" "pregenerated/sha256-x86_64-elf.S")
+
+ (invoke "perl" "crypto/fipsmodule/sha/asm/sha512-x86_64.pl"
+ "macosx" "pregenerated/sha256-x86_64-macosx.S")
+
+ (invoke "perl" "crypto/fipsmodule/sha/asm/sha512-x86_64.pl"
+ "nasm" "pregenerated/tmp/sha256-x86_64-nasm.asm")
+
+ (for-each
+ (lambda (script)
+ (invoke "nasm" "-o" (string-append (prefix script) "obj")
+ "-f" "win64" "-Xgnu" "-gcv8" script))
+ (find-files "pregenerated/tmp" "\\.asm"))
+
+ (for-each
+ (lambda (script)
+ (invoke "perl" script "ios64"
+ (string-append (prefix script) "-ios64.S"))
+ (invoke "perl" script "linux64"
+ (string-append (prefix script) "-linux64.S")))
+ '("crypto/fipsmodule/aes/asm/aesv8-armx.pl"
+ "crypto/fipsmodule/modes/asm/ghashv8-armx.pl"
+ "crypto/fipsmodule/aes/asm/vpaes-armv8.pl"
+ "crypto/fipsmodule/bn/asm/armv8-mont.pl"
+ "crypto/chacha/asm/chacha-armv8.pl"
+ "crypto/fipsmodule/ec/asm/ecp_nistz256-armv8.pl"
+ "crypto/fipsmodule/modes/asm/ghash-neon-armv8.pl"
+ "crypto/fipsmodule/sha/asm/sha512-armv8.pl"))
+
+ (invoke "perl" "crypto/fipsmodule/sha/asm/sha512-armv8.pl"
+ "ios64" "pregenerated/sha256-armv8-ios64.S")
+
+ (invoke "perl" "crypto/fipsmodule/sha/asm/sha512-armv8.pl"
+ "linux64" "pregenerated/sha256-armv8-linux64.S")
+
+ (for-each
+ (lambda (script)
+ (invoke "perl" script "elf"
+ "-fPIC" "-DOPENSSL_IA32_SSE2"
+ (string-append (prefix script) "-elf.S"))
+ (invoke "perl" script "macosx"
+ "-fPIC" "-DOPENSSL_IA32_SSE2"
+ (string-append (prefix script) "-macosx.S"))
+ (invoke "perl" script "win32n"
+ "-fPIC" "-DOPENSSL_IA32_SSE2"
+ (string-append
+ "pregenerated/tmp/"
+ (string-drop (prefix script) 13) "-win32n.asm")))
+ '("crypto/fipsmodule/aes/asm/aesni-x86.pl"
+ "crypto/fipsmodule/aes/asm/vpaes-x86.pl"
+ "crypto/fipsmodule/bn/asm/x86-mont.pl"
+ "crypto/chacha/asm/chacha-x86.pl"
+ "crypto/fipsmodule/ec/asm/ecp_nistz256-x86.pl"
+ "crypto/fipsmodule/modes/asm/ghash-x86.pl"))
+
+ (for-each
+ (lambda (script)
+ (invoke "nasm" "-o" (string-append (prefix script) "obj")
+ "-f" "win32" "-Xgnu" "-gcv8" script))
+ (find-files "pregenerated/tmp" "-win32n\\.asm"))
+
+ (for-each
+ (lambda (script)
+ (invoke "perl" script "ios32"
+ (string-append (prefix script) "-ios32.S"))
+ (invoke "perl" script "linux32"
+ (string-append (prefix script) "-linux32.S")))
+ '("crypto/fipsmodule/aes/asm/aesv8-armx.pl"
+ "crypto/fipsmodule/modes/asm/ghashv8-armx.pl"
+ "crypto/fipsmodule/aes/asm/bsaes-armv7.pl"
+ "crypto/fipsmodule/aes/asm/vpaes-armv7.pl"
+ "crypto/fipsmodule/bn/asm/armv4-mont.pl"
+ "crypto/chacha/asm/chacha-armv4.pl"
+ "crypto/fipsmodule/ec/asm/ecp_nistz256-armv4.pl"
+ "crypto/fipsmodule/modes/asm/ghash-armv4.pl"
+ "crypto/fipsmodule/sha/asm/sha256-armv4.pl"
+ "crypto/fipsmodule/sha/asm/sha512-armv4.pl"))
+
+ (format #t "Creating the tarball ...~%")
+ (force-output)
+ ;; The other option is to use cargo package --allow-dirty
+ (with-directory-excursion "../"
+ (invoke "tar" "czf" #$output
+ ;; avoid non-determinism in the archive
+ "--sort=name" "--mtime=@0"
+ "--owner=root:0" "--group=root:0"
+ (string-append "ring-" #$version))))))))))))
+
(define-public rust-ring-0.16
(package
(inherit rust-ring-0.17)
(name "rust-ring")
(version "0.16.20")
- (source
- (origin
- (method url-fetch)
- (uri (crate-uri "ring" version))
- (file-name (string-append name "-" version ".tar.gz"))
- (sha256
- (base32 "1z682xp7v38ayq9g9nkbhhfpj6ygralmlx7wdmsfv8rnw99cylrh"))
- (patches (search-patches "rust-ring-0.16-missing-files.patch"
- "rust-ring-0.16-test-files.patch"))
- (modules '((guix build utils)))
- (snippet
- '(begin
- (delete-file-recursively "pregenerated")
- ;; Regenerating the curve25519_tables requires python2 and clang-format.
- ;; Luckily we've added the script back in the patch.
- ;; Rust doesn't provide a clear way to regenerate files located in
- ;; source directories, so for now we don't remove the file here.
- ;(delete-file "crypto/curve25519/curve25519_tables.h")
- ;; Pretend this isn't a relase tarball.
- (with-output-to-file ".git"
- (lambda _
- (format #t "")))))))
+ (source rust-ring-0.16-sources)
(arguments
`(#:cargo-inputs
(("rust-libc" ,rust-libc-0.2)
@@ -64229,17 +64383,7 @@ Digital Signature Algorithm} (ECDSA).")
("rust-cc" ,rust-cc-1))
#:cargo-development-inputs
(("rust-libc" ,rust-libc-0.2)
- ("rust-wasm-bindgen-test" ,rust-wasm-bindgen-test-0.3))
- #:phases
- (modify-phases %standard-phases
- (add-after 'unpack 'generate-curve25519-tables
- (lambda _
- (with-directory-excursion "crypto/curve25519"
- (with-output-to-file "curve25519_tables.h"
- (lambda _
- (invoke "python" "make_curve25519_tables.py")))))))))
- (native-inputs
- (list clang perl python-2))
+ ("rust-wasm-bindgen-test" ,rust-wasm-bindgen-test-0.3))))
;; For a mostly complete list of supported systems see:
;; https://github.com/briansmith/ring/blob/main/.github/workflows/ci.yml#L170
(supported-systems (list "aarch64-linux" "armhf-linux"
@@ -67144,8 +67288,7 @@ rustc compiler.")
("rust-env-logger" ,rust-env-logger-0.9)
("rust-log" ,rust-log-0.4)
("rust-rustls-pemfile" ,rust-rustls-pemfile-1)
- ("rust-webpki-roots" ,rust-webpki-roots-0.22))))
- (native-inputs (list perl))))
+ ("rust-webpki-roots" ,rust-webpki-roots-0.22))))))
(define-public rust-rustls-0.19
(package