aboutsummaryrefslogtreecommitdiff
path: root/module/crypto.scm
diff options
context:
space:
mode:
Diffstat (limited to 'module/crypto.scm')
-rw-r--r--module/crypto.scm15
1 files changed, 7 insertions, 8 deletions
diff --git a/module/crypto.scm b/module/crypto.scm
index 3e468018..477014e9 100644
--- a/module/crypto.scm
+++ b/module/crypto.scm
@@ -1,6 +1,7 @@
(define-module (crypto)
:use-module (rnrs bytevectors)
:use-module (system foreign)
+ :use-module (ice-9 format)
:export (sha256 checksum->string))
(define-once libcrypto (dynamic-link "libcrypto"))
@@ -21,17 +22,15 @@
(define bv
(cond ((bytevector? msg) msg)
((string? msg) (string->utf8 msg))
- (else (throw 'value-error "Invalid type"))))
+ (else (scm-error 'wrong-type-arg "sha256"
+ "Wrong type argument. Expected string or bytevector, got ~s"
+ (list msg) (list msg)))))
(SHA256 ((@ (system foreign) bytevector->pointer) bv)
(bytevector-length bv)
((@ (system foreign) bytevector->pointer) md))
md)
-(define (checksum->string md)
- (string-concatenate
- (map (lambda (byte)
- (format #f "~x~x"
- (logand #xF (ash byte -4))
- (logand #xF byte)))
- (bytevector->u8-list md))))
+(define* (checksum->string md #:optional port)
+ ((@ (ice-9 format) format) port
+ "~{~2'0x~}" (bytevector->u8-list md)))