summaryrefslogtreecommitdiff
path: root/guix
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2017-03-15 21:54:34 +0100
committerLudovic Courtès <ludo@gnu.org>2017-03-16 22:50:14 +0100
commit4c0c4db0702048488a9712dbba7cad862c667d54 (patch)
tree5c809914cc75d5fc7a386f382db40253d71e959c /guix
parent2c715a922324e0cd1ab50c5ea0b70f12a33565d5 (diff)
utils: Move base16 procedures to (guix base16).
* guix/utils.scm (bytevector->base16-string, base16-string->bytevector): Move to... * guix/base16.scm: ... here. New file. * tests/utils.scm ("bytevector->base16-string->bytevector"): Move to... * tests/base16.scm: ... here. New file. * Makefile.am (MODULES): Add guix/base16.scm. (SCM_TESTS): Add tests/base16.scm. * build-aux/download.scm, guix/derivations.scm, guix/docker.scm, guix/import/snix.scm, guix/pk-crypto.scm, guix/scripts/authenticate.scm, guix/scripts/download.scm, guix/scripts/hash.scm, guix/store.scm, tests/hash.scm, tests/pk-crypto.scm: Adjust imports accordingly.
Diffstat (limited to 'guix')
-rw-r--r--guix/base16.scm83
-rw-r--r--guix/derivations.scm1
-rw-r--r--guix/docker.scm1
-rw-r--r--guix/import/snix.scm3
-rw-r--r--guix/pk-crypto.scm6
-rw-r--r--guix/scripts/authenticate.scm4
-rw-r--r--guix/scripts/download.scm4
-rw-r--r--guix/scripts/hash.scm2
-rw-r--r--guix/store.scm1
-rw-r--r--guix/utils.scm65
10 files changed, 96 insertions, 74 deletions
diff --git a/guix/base16.scm b/guix/base16.scm
new file mode 100644
index 0000000000..6c15a9f588
--- /dev/null
+++ b/guix/base16.scm
@@ -0,0 +1,83 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012, 2014, 2017 Ludovic Courtès <ludo@gnu.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (guix base16)
+ #:use-module (srfi srfi-1)
+ #:use-module (srfi srfi-26)
+ #:use-module (srfi srfi-60)
+ #:use-module (rnrs bytevectors)
+ #:use-module (ice-9 vlist)
+ #:use-module (ice-9 format)
+ #:export (bytevector->base16-string
+ base16-string->bytevector))
+
+;;;
+;;; Base 16.
+;;;
+
+(define (bytevector->base16-string bv)
+ "Return the hexadecimal representation of BV's contents."
+ (define len
+ (bytevector-length bv))
+
+ (let-syntax ((base16-chars (lambda (s)
+ (syntax-case s ()
+ (_
+ (let ((v (list->vector
+ (unfold (cut > <> 255)
+ (lambda (n)
+ (format #f "~2,'0x" n))
+ 1+
+ 0))))
+ v))))))
+ (define chars base16-chars)
+ (let loop ((i len)
+ (r '()))
+ (if (zero? i)
+ (string-concatenate r)
+ (let ((i (- i 1)))
+ (loop i
+ (cons (vector-ref chars (bytevector-u8-ref bv i)) r)))))))
+
+(define base16-string->bytevector
+ (let ((chars->value (fold (lambda (i r)
+ (vhash-consv (string-ref (number->string i 16)
+ 0)
+ i r))
+ vlist-null
+ (iota 16))))
+ (lambda (s)
+ "Return the bytevector whose hexadecimal representation is string S."
+ (define bv
+ (make-bytevector (quotient (string-length s) 2) 0))
+
+ (string-fold (lambda (chr i)
+ (let ((j (quotient i 2))
+ (v (and=> (vhash-assv chr chars->value) cdr)))
+ (if v
+ (if (zero? (logand i 1))
+ (bytevector-u8-set! bv j
+ (arithmetic-shift v 4))
+ (let ((w (bytevector-u8-ref bv j)))
+ (bytevector-u8-set! bv j (logior v w))))
+ (error "invalid hexadecimal character" chr)))
+ (+ i 1))
+ 0
+ s)
+ bv)))
+
diff --git a/guix/derivations.scm b/guix/derivations.scm
index 47a783f42f..e02d1ee036 100644
--- a/guix/derivations.scm
+++ b/guix/derivations.scm
@@ -31,6 +31,7 @@
#:use-module (ice-9 vlist)
#:use-module (guix store)
#:use-module (guix utils)
+ #:use-module (guix base16)
#:use-module (guix memoization)
#:use-module (guix combinators)
#:use-module (guix monads)
diff --git a/guix/docker.scm b/guix/docker.scm
index dbe1e5351c..6dabaf25b0 100644
--- a/guix/docker.scm
+++ b/guix/docker.scm
@@ -19,6 +19,7 @@
(define-module (guix docker)
#:use-module (guix hash)
#:use-module (guix store)
+ #:use-module (guix base16)
#:use-module (guix utils)
#:use-module ((guix build utils)
#:select (delete-file-recursively
diff --git a/guix/import/snix.scm b/guix/import/snix.scm
index bc75cbfda5..778768ff2d 100644
--- a/guix/import/snix.scm
+++ b/guix/import/snix.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -39,6 +39,7 @@
#:use-module ((guix build utils) #:select (package-name->name+version))
#:use-module (guix import utils)
+ #:use-module (guix base16)
#:use-module (guix base32)
#:use-module (guix config)
#:use-module (guix gnu-maintenance)
diff --git a/guix/pk-crypto.scm b/guix/pk-crypto.scm
index f90c2e61d5..7017006a71 100644
--- a/guix/pk-crypto.scm
+++ b/guix/pk-crypto.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2017 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -17,9 +17,7 @@
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (guix pk-crypto)
- #:use-module ((guix utils)
- #:select (bytevector->base16-string
- base16-string->bytevector))
+ #:use-module (guix base16)
#:use-module (guix gcrypt)
#:use-module (system foreign)
diff --git a/guix/scripts/authenticate.scm b/guix/scripts/authenticate.scm
index d9f799df26..d9a312f1da 100644
--- a/guix/scripts/authenticate.scm
+++ b/guix/scripts/authenticate.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -18,7 +18,7 @@
(define-module (guix scripts authenticate)
#:use-module (guix config)
- #:use-module (guix utils)
+ #:use-module (guix base16)
#:use-module (guix pk-crypto)
#:use-module (guix pki)
#:use-module (guix ui)
diff --git a/guix/scripts/download.scm b/guix/scripts/download.scm
index dffff79729..1ddfd648cd 100644
--- a/guix/scripts/download.scm
+++ b/guix/scripts/download.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -21,7 +21,7 @@
#:use-module (guix scripts)
#:use-module (guix store)
#:use-module (guix hash)
- #:use-module (guix utils)
+ #:use-module (guix base16)
#:use-module (guix base32)
#:use-module ((guix download) #:hide (url-fetch))
#:use-module ((guix build download)
diff --git a/guix/scripts/hash.scm b/guix/scripts/hash.scm
index 640b2417d2..a048b53461 100644
--- a/guix/scripts/hash.scm
+++ b/guix/scripts/hash.scm
@@ -24,7 +24,7 @@
#:use-module (guix serialization)
#:use-module (guix ui)
#:use-module (guix scripts)
- #:use-module (guix utils)
+ #:use-module (guix base16)
#:use-module (ice-9 binary-ports)
#:use-module (rnrs files)
#:use-module (ice-9 match)
diff --git a/guix/store.scm b/guix/store.scm
index cce460f3ce..2f05351767 100644
--- a/guix/store.scm
+++ b/guix/store.scm
@@ -22,6 +22,7 @@
#:use-module (guix memoization)
#:use-module (guix serialization)
#:use-module (guix monads)
+ #:use-module (guix base16)
#:autoload (guix base32) (bytevector->base32-string)
#:autoload (guix build syscalls) (terminal-columns)
#:use-module (rnrs bytevectors)
diff --git a/guix/utils.scm b/guix/utils.scm
index b72e3f233f..bc90686de0 100644
--- a/guix/utils.scm
+++ b/guix/utils.scm
@@ -28,15 +28,12 @@
#:use-module (srfi srfi-11)
#:use-module (srfi srfi-26)
#:use-module (srfi srfi-39)
- #:use-module (srfi srfi-60)
- #:use-module (rnrs bytevectors)
#:use-module (ice-9 binary-ports)
#:autoload (rnrs io ports) (make-custom-binary-input-port)
#:use-module ((rnrs bytevectors) #:select (bytevector-u8-set!))
#:use-module (guix memoization)
#:use-module ((guix build utils) #:select (dump-port))
#:use-module ((guix build syscalls) #:select (mkdtemp! fdatasync))
- #:use-module (ice-9 vlist)
#:use-module (ice-9 format)
#:autoload (ice-9 popen) (open-pipe*)
#:autoload (ice-9 rdelim) (read-line)
@@ -46,10 +43,7 @@
#:use-module ((ice-9 iconv) #:prefix iconv:)
#:use-module (system foreign)
#:re-export (memoize) ; for backwards compatibility
- #:export (bytevector->base16-string
- base16-string->bytevector
-
- strip-keyword-arguments
+ #:export (strip-keyword-arguments
default-keyword-arguments
substitute-keyword-arguments
ensure-keyword-arguments
@@ -100,63 +94,6 @@
;;;
-;;; Base 16.
-;;;
-
-(define (bytevector->base16-string bv)
- "Return the hexadecimal representation of BV's contents."
- (define len
- (bytevector-length bv))
-
- (let-syntax ((base16-chars (lambda (s)
- (syntax-case s ()
- (_
- (let ((v (list->vector
- (unfold (cut > <> 255)
- (lambda (n)
- (format #f "~2,'0x" n))
- 1+
- 0))))
- v))))))
- (define chars base16-chars)
- (let loop ((i len)
- (r '()))
- (if (zero? i)
- (string-concatenate r)
- (let ((i (- i 1)))
- (loop i
- (cons (vector-ref chars (bytevector-u8-ref bv i)) r)))))))
-
-(define base16-string->bytevector
- (let ((chars->value (fold (lambda (i r)
- (vhash-consv (string-ref (number->string i 16)
- 0)
- i r))
- vlist-null
- (iota 16))))
- (lambda (s)
- "Return the bytevector whose hexadecimal representation is string S."
- (define bv
- (make-bytevector (quotient (string-length s) 2) 0))
-
- (string-fold (lambda (chr i)
- (let ((j (quotient i 2))
- (v (and=> (vhash-assv chr chars->value) cdr)))
- (if v
- (if (zero? (logand i 1))
- (bytevector-u8-set! bv j
- (arithmetic-shift v 4))
- (let ((w (bytevector-u8-ref bv j)))
- (bytevector-u8-set! bv j (logior v w))))
- (error "invalid hexadecimal character" chr)))
- (+ i 1))
- 0
- s)
- bv)))
-
-
-
-;;;
;;; Filtering & pipes.
;;;