Use libchop for cryptographic hashes and related.
* guix/derivations.scm (sha256): Rewrite using libchop's `bytevector-hash'. (derivation-hash): Add docstring.
This commit is contained in:
parent
341c6fdd82
commit
69f90f5c81
|
@ -24,6 +24,10 @@
|
||||||
#:use-module (rnrs bytevectors)
|
#:use-module (rnrs bytevectors)
|
||||||
#:use-module (ice-9 match)
|
#:use-module (ice-9 match)
|
||||||
#:use-module (ice-9 rdelim)
|
#:use-module (ice-9 rdelim)
|
||||||
|
#:use-module (guix store)
|
||||||
|
#:use-module ((chop hash)
|
||||||
|
#:select (bytevector-hash
|
||||||
|
hash-method/sha256))
|
||||||
#:export (derivation?
|
#:export (derivation?
|
||||||
derivation-outputs
|
derivation-outputs
|
||||||
derivation-inputs
|
derivation-inputs
|
||||||
|
@ -184,32 +188,11 @@ that form."
|
||||||
(display ")" port))))
|
(display ")" port))))
|
||||||
|
|
||||||
(define (sha256 bv)
|
(define (sha256 bv)
|
||||||
"Return the SHA256 of BV as an string of hexadecimal digits."
|
"Return the SHA256 of BV as a bytevector."
|
||||||
;; XXX: Poor programmer's implementation that uses Coreutils.
|
(bytevector-hash hash-method/sha256 bv))
|
||||||
(let ((in (pipe))
|
|
||||||
(out (pipe))
|
|
||||||
(pid (primitive-fork)))
|
|
||||||
(if (= 0 pid)
|
|
||||||
(begin ; child
|
|
||||||
(close (cdr in))
|
|
||||||
(close (car out))
|
|
||||||
(close 0)
|
|
||||||
(close 1)
|
|
||||||
(dup2 (fileno (car in)) 0)
|
|
||||||
(dup2 (fileno (cdr out)) 1)
|
|
||||||
(execlp "sha256sum" "sha256sum"))
|
|
||||||
(begin ; parent
|
|
||||||
(close (car in))
|
|
||||||
(close (cdr out))
|
|
||||||
(put-bytevector (cdr in) bv)
|
|
||||||
(close (cdr in)) ; EOF
|
|
||||||
(let ((line (car (string-tokenize (read-line (car out))))))
|
|
||||||
(close (car out))
|
|
||||||
(and (and=> (status:exit-val (cdr (waitpid pid)))
|
|
||||||
zero?)
|
|
||||||
line))))))
|
|
||||||
|
|
||||||
(define (derivation-hash drv) ; `hashDerivationModulo' in derivations.cc
|
(define (derivation-hash drv) ; `hashDerivationModulo' in derivations.cc
|
||||||
|
"Return the hash of DRV, modulo its fixed-output inputs, as a bytevector."
|
||||||
(match drv
|
(match drv
|
||||||
(($ <derivation> ((_ . ($ <derivation-output> path
|
(($ <derivation> ((_ . ($ <derivation-output> path
|
||||||
(? symbol? hash-algo) (? string? hash)))))
|
(? symbol? hash-algo) (? string? hash)))))
|
||||||
|
|
Loading…
Reference in New Issue