hash: Initialize libgcrypt before use.
Fixes <http://bugs.gnu.org/19677>. Reported by Mark H Weaver <mhw@netris.org>. * guix/hash.scm: Use (guix gcrypt). (sha256, open-sha256-md, md-write, md-close): Use 'libgcrypt-func' instead of 'dynamic-func'.
This commit is contained in:
		
							parent
							
								
									4862bc4a1a
								
							
						
					
					
						commit
						19a454448b
					
				
					 1 changed files with 7 additions and 12 deletions
				
			
		| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
;;; GNU Guix --- Functional package management for GNU
 | 
			
		||||
;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
 | 
			
		||||
;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
 | 
			
		||||
;;;
 | 
			
		||||
;;; This file is part of GNU Guix.
 | 
			
		||||
;;;
 | 
			
		||||
| 
						 | 
				
			
			@ -17,7 +17,7 @@
 | 
			
		|||
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
(define-module (guix hash)
 | 
			
		||||
  #:use-module (guix config)
 | 
			
		||||
  #:use-module (guix gcrypt)
 | 
			
		||||
  #:use-module (rnrs bytevectors)
 | 
			
		||||
  #:use-module (rnrs io ports)
 | 
			
		||||
  #:use-module (system foreign)
 | 
			
		||||
| 
						 | 
				
			
			@ -46,8 +46,7 @@
 | 
			
		|||
 | 
			
		||||
(define sha256
 | 
			
		||||
  (let ((hash (pointer->procedure void
 | 
			
		||||
                                  (dynamic-func "gcry_md_hash_buffer"
 | 
			
		||||
                                                (dynamic-link %libgcrypt))
 | 
			
		||||
                                  (libgcrypt-func "gcry_md_hash_buffer")
 | 
			
		||||
                                  `(,int * * ,size_t))))
 | 
			
		||||
    (lambda (bv)
 | 
			
		||||
      "Return the SHA256 of BV as a bytevector."
 | 
			
		||||
| 
						 | 
				
			
			@ -58,8 +57,7 @@
 | 
			
		|||
 | 
			
		||||
(define open-sha256-md
 | 
			
		||||
  (let ((open (pointer->procedure int
 | 
			
		||||
                                  (dynamic-func "gcry_md_open"
 | 
			
		||||
                                                (dynamic-link %libgcrypt))
 | 
			
		||||
                                  (libgcrypt-func "gcry_md_open")
 | 
			
		||||
                                  `(* ,int ,unsigned-int))))
 | 
			
		||||
    (lambda ()
 | 
			
		||||
      (let* ((md  (bytevector->pointer (make-bytevector (sizeof '*))))
 | 
			
		||||
| 
						 | 
				
			
			@ -70,20 +68,17 @@
 | 
			
		|||
 | 
			
		||||
(define md-write
 | 
			
		||||
  (pointer->procedure void
 | 
			
		||||
                      (dynamic-func "gcry_md_write"
 | 
			
		||||
                                    (dynamic-link %libgcrypt))
 | 
			
		||||
                      (libgcrypt-func "gcry_md_write")
 | 
			
		||||
                      `(* * ,size_t)))
 | 
			
		||||
 | 
			
		||||
(define md-read
 | 
			
		||||
  (pointer->procedure '*
 | 
			
		||||
                      (dynamic-func "gcry_md_read"
 | 
			
		||||
                                    (dynamic-link %libgcrypt))
 | 
			
		||||
                      (libgcrypt-func "gcry_md_read")
 | 
			
		||||
                      `(* ,int)))
 | 
			
		||||
 | 
			
		||||
(define md-close
 | 
			
		||||
  (pointer->procedure void
 | 
			
		||||
                      (dynamic-func "gcry_md_close"
 | 
			
		||||
                                    (dynamic-link %libgcrypt))
 | 
			
		||||
                      (libgcrypt-func "gcry_md_close")
 | 
			
		||||
                      '(*)))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Reference in a new issue