diff options
Diffstat (limited to 'module/crypto.scm')
-rw-r--r-- | module/crypto.scm | 15 |
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))) |