Coverage report: /home/ellis/comp/ext/ironclad/src/macs/blake2-mac.lisp
Kind | Covered | All | % |
expression | 0 | 81 | 0.0 |
branch | 0 | 2 | 0.0 |
Key
Not instrumented
Conditionalized out
Executed
Not executed
Both branches taken
One branch taken
Neither branch taken
1
;;;; blake2-mac.lisp -- implementation of the Blake2b MAC
4
(defclass blake2-mac (mac)
5
((digest :accessor blake2-digest :initarg :digest)
6
(digest-length :accessor digest-length :initarg :digest-length)))
8
(defun make-blake2-mac (key &key (digest-length 64))
9
(make-instance 'blake2-mac
11
:digest-length digest-length))
13
(defmethod copy-blake2-mac ((mac blake2-mac) &optional copy)
14
(declare (type (or null blake2-mac) copy))
17
(make-instance 'blake2-mac
18
:key (make-array 1 :element-type '(unsigned-byte 8))
20
(declare (type blake2-mac copy))
21
(setf (blake2-digest copy) (copy-digest (blake2-digest mac)))
22
(setf (digest-length copy) (digest-length mac))
25
(defmethod shared-initialize :after ((mac blake2-mac) slot-names
27
&key key &allow-other-keys)
28
(declare (ignore slot-names initargs)
29
(type (simple-array (unsigned-byte 8) (*)) key))
30
(let ((digest-length (digest-length mac))
31
(digest (make-digest :blake2)))
32
(setf (blake2-state digest) (blake2-make-initial-state digest-length (length key)))
33
(when (plusp (length key))
34
(let ((first-block (make-array +blake2-block-size+
35
:element-type '(unsigned-byte 8)
37
;; Process the key block
38
(replace first-block key)
39
(blake2-update digest first-block 0 +blake2-block-size+ nil)))
40
(setf (blake2-digest mac) digest)))
42
(defun update-blake2-mac (mac sequence &key (start 0) end)
43
(blake2-update (blake2-digest mac) sequence start (or end (length sequence)) nil)
46
(defun blake2-mac-digest (mac)
47
(let ((digest (make-array (digest-length mac)
48
:element-type '(unsigned-byte 8)))
49
(mac-copy (copy-blake2-mac mac)))
50
(blake2-finalize (blake2-digest mac-copy) digest 0)