Add `bytevector->base16-string'.
* guix/utils.scm (bytevector->base16-string): New procedure.master
parent
f9c7080aa3
commit
38b3122afb
|
@ -17,16 +17,25 @@
|
||||||
;;; along with Guix. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (guix utils)
|
(define-module (guix utils)
|
||||||
|
#:use-module (srfi srfi-1)
|
||||||
|
#:use-module (srfi srfi-26)
|
||||||
#:use-module (srfi srfi-60)
|
#:use-module (srfi srfi-60)
|
||||||
#:use-module (rnrs bytevectors)
|
#:use-module (rnrs bytevectors)
|
||||||
|
#:use-module (ice-9 format)
|
||||||
#:use-module ((chop hash)
|
#:use-module ((chop hash)
|
||||||
#:select (bytevector-hash
|
#:select (bytevector-hash
|
||||||
hash-method/sha256))
|
hash-method/sha256))
|
||||||
#:export (bytevector-quintet-length
|
#:export (bytevector-quintet-length
|
||||||
bytevector->base32-string
|
bytevector->base32-string
|
||||||
bytevector->nix-base32-string
|
bytevector->nix-base32-string
|
||||||
|
bytevector->base16-string
|
||||||
sha256))
|
sha256))
|
||||||
|
|
||||||
|
|
||||||
|
;;;
|
||||||
|
;;; Base 32.
|
||||||
|
;;;
|
||||||
|
|
||||||
(define bytevector-quintet-ref
|
(define bytevector-quintet-ref
|
||||||
(let* ((ref bytevector-u8-ref)
|
(let* ((ref bytevector-u8-ref)
|
||||||
(ref+ (lambda (bv offset)
|
(ref+ (lambda (bv offset)
|
||||||
|
@ -151,6 +160,35 @@ the previous application or INIT."
|
||||||
(define bytevector->nix-base32-string
|
(define bytevector->nix-base32-string
|
||||||
(make-bytevector->base32-string bytevector-quintet-fold-right
|
(make-bytevector->base32-string bytevector-quintet-fold-right
|
||||||
%nix-base32-chars))
|
%nix-base32-chars))
|
||||||
|
|
||||||
|
|
||||||
|
;;;
|
||||||
|
;;; 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 0)
|
||||||
|
(r '()))
|
||||||
|
(if (= i len)
|
||||||
|
(string-concatenate-reverse r)
|
||||||
|
(loop (+ 1 i)
|
||||||
|
(cons (vector-ref chars (bytevector-u8-ref bv i)) r))))))
|
||||||
|
|
||||||
|
|
||||||
;;;
|
;;;
|
||||||
;;; Hash.
|
;;; Hash.
|
||||||
|
|
Reference in New Issue