hash: Add 'sha1'.
* guix/hash.scm (GCRY_MD_SHA1): New macro. (bytevector-hash): New procedure. (sha256): Express in terms of 'bytevector-hash'. (sha1): New procedure. * tests/hash.scm ("sha1, empty", "sha1, hello"): New tests.
This commit is contained in:
parent
3aab885144
commit
33286075b9
|
@ -23,7 +23,9 @@
|
|||
#:use-module (system foreign)
|
||||
#:use-module ((guix build utils) #:select (dump-port))
|
||||
#:use-module (srfi srfi-11)
|
||||
#:export (sha256
|
||||
#:use-module (srfi srfi-26)
|
||||
#:export (sha1
|
||||
sha256
|
||||
open-sha256-port
|
||||
port-sha256
|
||||
file-sha256
|
||||
|
@ -44,17 +46,26 @@
|
|||
;; Value as of Libgcrypt 1.5.2.
|
||||
(identifier-syntax 8))
|
||||
|
||||
(define sha256
|
||||
(define-syntax GCRY_MD_SHA1
|
||||
(identifier-syntax 2))
|
||||
|
||||
(define bytevector-hash
|
||||
(let ((hash (pointer->procedure void
|
||||
(libgcrypt-func "gcry_md_hash_buffer")
|
||||
`(,int * * ,size_t))))
|
||||
(lambda (bv)
|
||||
"Return the SHA256 of BV as a bytevector."
|
||||
(let ((digest (make-bytevector (/ 256 8))))
|
||||
(hash GCRY_MD_SHA256 (bytevector->pointer digest)
|
||||
(lambda (bv type size)
|
||||
"Return the hash TYPE, of SIZE bytes, of BV as a bytevector."
|
||||
(let ((digest (make-bytevector size)))
|
||||
(hash type (bytevector->pointer digest)
|
||||
(bytevector->pointer bv) (bytevector-length bv))
|
||||
digest))))
|
||||
|
||||
(define sha1
|
||||
(cut bytevector-hash <> GCRY_MD_SHA1 20))
|
||||
|
||||
(define sha256
|
||||
(cut bytevector-hash <> GCRY_MD_SHA256 (/ 256 8)))
|
||||
|
||||
(define open-sha256-md
|
||||
(let ((open (pointer->procedure int
|
||||
(libgcrypt-func "gcry_md_open")
|
||||
|
|
|
@ -40,6 +40,14 @@
|
|||
|
||||
(test-begin "hash")
|
||||
|
||||
(test-equal "sha1, empty"
|
||||
(base16-string->bytevector "da39a3ee5e6b4b0d3255bfef95601890afd80709")
|
||||
(sha1 #vu8()))
|
||||
|
||||
(test-equal "sha1, hello"
|
||||
(base16-string->bytevector "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed")
|
||||
(sha1 (string->utf8 "hello world")))
|
||||
|
||||
(test-equal "sha256, empty"
|
||||
%empty-sha256
|
||||
(sha256 #vu8()))
|
||||
|
|
Loading…
Reference in New Issue