Coverage report: /home/ellis/comp/ext/ironclad/src/kdf/kdf.lisp
Kind | Covered | All | % |
expression | 0 | 98 | 0.0 |
branch | 0 | 16 | 0.0 |
Key
Not instrumented
Conditionalized out
Executed
Not executed
Both branches taken
One branch taken
Neither branch taken
1
;;;; -*- mode: lisp; indent-tabs-mode: nil -*-
4
(defun list-all-kdfs ()
5
(copy-list '(:argon2i :argon2d :bcrypt :bcrypt-pbkdf
6
:hmac-kdf :pbkdf1 :pbkdf2 :scrypt-kdf)))
8
(defun make-kdf (kind &key digest
10
(block-count 10000) additional-key additional-data)
11
;; PBKDF1, at least, will do stricter checking; this is good enough for now.
12
"digest is used for pbkdf1 and pbkdf2.
13
N, p, and r are cost factors for scrypt.
14
block-count, additional-key and additional-data are parameters for
16
(case (massage-symbol kind)
18
(let ((digest-name (massage-symbol digest)))
19
(unless (digestp digest-name)
20
(error 'unsupported-digest :name digest))
21
(make-instance 'pbkdf1 :digest digest-name)))
23
(let ((digest-name (massage-symbol digest)))
24
(unless (digestp digest-name)
25
(error 'unsupported-digest :name digest))
26
(make-instance 'pbkdf2 :digest digest-name)))
28
(let ((digest-name (massage-symbol digest)))
29
(unless (digestp digest-name)
30
(error 'unsupported-digest :name digest))
31
(make-instance 'hmac-kdf :digest digest-name :info additional-data)))
34
(not (zerop (logand n (1- n))))
35
(>= (* r p) (expt 2 30)))
36
(error 'unsupported-scrypt-cost-factors :n n :r r :p p))
37
(make-instance 'scrypt-kdf :n n :r r :p p))
39
(when (< block-count 8)
40
(error 'unsupported-argon2-parameters))
41
(make-instance 'argon2i
42
:block-count block-count
43
:additional-key additional-key
44
:additional-data additional-data))
46
(when (< block-count 8)
47
(error 'unsupported-argon2-parameters))
48
(make-instance 'argon2d
49
:block-count block-count
50
:additional-key additional-key
51
:additional-data additional-data))
53
(when (< block-count 8)
54
(error 'unsupported-argon2-parameters))
55
(make-instance 'argon2id
56
:block-count block-count
57
:additional-key additional-key
58
:additional-data additional-data))
60
(make-instance 'bcrypt))
62
(make-instance 'bcrypt-pbkdf))
64
(error 'unsupported-kdf :kdf kind))))