guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

03/04: hash: Add 'sha1'.


From: Ludovic Courtès
Subject: 03/04: hash: Add 'sha1'.
Date: Thu, 8 Mar 2018 05:56:29 -0500 (EST)

civodul pushed a commit to branch master
in repository guix.

commit 33286075b9c2ecd27607b5674c68909dd528473a
Author: Ludovic Courtès <address@hidden>
Date:   Thu Mar 8 11:47:28 2018 +0100

    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.
---
 guix/hash.scm  | 23 +++++++++++++++++------
 tests/hash.scm |  8 ++++++++
 2 files changed, 25 insertions(+), 6 deletions(-)

diff --git a/guix/hash.scm b/guix/hash.scm
index 773b9d4..3983404 100644
--- a/guix/hash.scm
+++ b/guix/hash.scm
@@ -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")
diff --git a/tests/hash.scm b/tests/hash.scm
index b4cf2b6..da87616 100644
--- a/tests/hash.scm
+++ b/tests/hash.scm
@@ -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()))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]