crypto-helper.scm - pee - Pee a password manager;Pee - because you have to... | |
git clone git://vernunftzentrum.de/pee.git | |
Log | |
Files | |
Refs | |
LICENSE | |
--- | |
crypto-helper.scm (1609B) | |
--- | |
1 (module crypto-helper (random-bytes hash-passphrase blake2s) | |
2 (import (chicken base) scheme (chicken foreign)) | |
3 (import (chicken blob) blob-hexadecimal srfi-4) | |
4 (foreign-declare "#include \"blake2.h\"") | |
5 (foreign-declare "#include \"blake2-impl.h\"") | |
6 (foreign-declare "#include \"blake2s-ref.c\"") | |
7 | |
8 (define-foreign-variable blake2s-outbytes integer "BLAKE2S_OUTBY… | |
9 | |
10 (define blake2s | |
11 (foreign-lambda* | |
12 int | |
13 ((c-string passphrase) | |
14 ((scheme-pointer unsigned-char) out)) | |
15 " | |
16 int res = 0; | |
17 res = blake2s(out, passphrase, NULL, BLAKE2S_OUTBYTES, strlen… | |
18 C_return(res); | |
19 ")) | |
20 | |
21 (define (hash-passphrase passphrase) | |
22 (let ((out (make-blob blake2s-outbytes))) | |
23 (if (not (zero? (blake2s passphrase out))) | |
24 (error "Unable to hash passphrase with blake2s") | |
25 out))) | |
26 | |
27 (define (random-bytes len) | |
28 (cond-expand (openbsd: | |
29 (arc4random len)) | |
30 (linux: | |
31 (with-input-from-file "/dev/urandom" (lambda () … | |
32 (else | |
33 (with-input-from-file "/dev/random" (lambda () (… | |
34 #+openbsd | |
35 (define (arc4random len) | |
36 (let ((buf (make-blob len))) | |
37 ((foreign-lambda | |
38 void | |
39 "arc4random_buf" | |
40 (scheme-pointer void) | |
41 size_t) buf len) | |
42 (blob->u8vector buf))) | |
43 ) |