mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-24 05:18:07 -05:00
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.
This commit is contained in:
parent
2c715a9223
commit
4c0c4db070
16 changed files with 138 additions and 86 deletions
|
@ -30,6 +30,7 @@ nodist_noinst_SCRIPTS = \
|
|||
include gnu/local.mk
|
||||
|
||||
MODULES = \
|
||||
guix/base16.scm \
|
||||
guix/base32.scm \
|
||||
guix/base64.scm \
|
||||
guix/cpio.scm \
|
||||
|
@ -251,6 +252,7 @@ TEST_EXTENSIONS = .scm .sh
|
|||
if CAN_RUN_TESTS
|
||||
|
||||
SCM_TESTS = \
|
||||
tests/base16.scm \
|
||||
tests/base32.scm \
|
||||
tests/base64.scm \
|
||||
tests/cpio.scm \
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2012, 2013, 2017 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
|
@ -26,7 +26,7 @@
|
|||
(web client)
|
||||
(rnrs io ports)
|
||||
(srfi srfi-11)
|
||||
(guix utils)
|
||||
(guix base16)
|
||||
(guix hash))
|
||||
|
||||
(define %url-base
|
||||
|
|
83
guix/base16.scm
Normal file
83
guix/base16.scm
Normal file
|
@ -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)))
|
||||
|
|
@ -31,6 +31,7 @@ (define-module (guix derivations)
|
|||
#: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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 @@ (define-module (guix import snix)
|
|||
#: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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 @@ (define-module (guix scripts download)
|
|||
#: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)
|
||||
|
|
|
@ -24,7 +24,7 @@ (define-module (guix scripts hash)
|
|||
#: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)
|
||||
|
|
|
@ -22,6 +22,7 @@ (define-module (guix store)
|
|||
#: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)
|
||||
|
|
|
@ -28,15 +28,12 @@ (define-module (guix utils)
|
|||
#: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 @@ (define-module (guix utils)
|
|||
#: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
|
||||
|
@ -98,63 +92,6 @@ (define-module (guix utils)
|
|||
call-with-compressed-output-port
|
||||
canonical-newline-port))
|
||||
|
||||
|
||||
;;;
|
||||
;;; 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.
|
||||
|
|
34
tests/base16.scm
Normal file
34
tests/base16.scm
Normal file
|
@ -0,0 +1,34 @@
|
|||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2012, 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 (test-base16)
|
||||
#:use-module (guix base16)
|
||||
#:use-module (srfi srfi-1)
|
||||
#:use-module (srfi srfi-64)
|
||||
#:use-module (rnrs bytevectors))
|
||||
|
||||
(test-begin "base16")
|
||||
|
||||
(test-assert "bytevector->base16-string->bytevector"
|
||||
(every (lambda (bv)
|
||||
(equal? (base16-string->bytevector
|
||||
(bytevector->base16-string bv))
|
||||
bv))
|
||||
(map string->utf8 '("" "f" "fo" "foo" "foob" "fooba" "foobar"))))
|
||||
|
||||
(test-end "base16")
|
|
@ -18,7 +18,7 @@
|
|||
|
||||
(define-module (test-hash)
|
||||
#:use-module (guix hash)
|
||||
#:use-module (guix utils)
|
||||
#:use-module (guix base16)
|
||||
#:use-module (srfi srfi-1)
|
||||
#:use-module (srfi srfi-11)
|
||||
#:use-module (srfi srfi-64)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2013, 2014, 2017 Ludovic Courtès <ludo@gnu.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
|
@ -19,6 +19,7 @@
|
|||
(define-module (test-pk-crypto)
|
||||
#:use-module (guix pk-crypto)
|
||||
#:use-module (guix utils)
|
||||
#:use-module (guix base16)
|
||||
#:use-module (guix hash)
|
||||
#:use-module (srfi srfi-1)
|
||||
#:use-module (srfi srfi-11)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2012, 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
|
||||
;;; Copyright © 2016 Mathieu Lirzin <mthl@gnu.org>
|
||||
;;;
|
||||
|
@ -36,13 +36,6 @@ (define temp-file
|
|||
|
||||
(test-begin "utils")
|
||||
|
||||
(test-assert "bytevector->base16-string->bytevector"
|
||||
(every (lambda (bv)
|
||||
(equal? (base16-string->bytevector
|
||||
(bytevector->base16-string bv))
|
||||
bv))
|
||||
(map string->utf8 '("" "f" "fo" "foo" "foob" "fooba" "foobar"))))
|
||||
|
||||
(test-assert "gnu-triplet->nix-system"
|
||||
(let ((samples '(("i586-gnu0.3" "i686-gnu")
|
||||
("x86_64-unknown-linux-gnu" "x86_64-linux")
|
||||
|
|
Loading…
Reference in a new issue