Coverage report: /home/ellis/comp/ext/ironclad/src/digests/adler32.lisp
Kind | Covered | All | % |
expression | 0 | 74 | 0.0 |
branch | 0 | 6 | 0.0 |
Key
Not instrumented
Conditionalized out
Executed
Not executed
Both branches taken
One branch taken
Neither branch taken
1
;;;; adler32.lisp - computing adler32 checksums (rfc1950) of a byte array
4
;;; smallest prime < 65536
5
(defconstant adler32-modulo 65521)
8
(:constructor %make-adler32-digest nil)
9
(:constructor %make-adler32-state (s1 s2))
14
(defmethod reinitialize-instance ((state adler32) &rest initargs)
15
(declare (ignore initargs))
16
(setf (adler32-s1 state) 1
20
(defmethod copy-digest ((state adler32) &optional copy)
21
(check-type copy (or null adler32))
24
(setf (adler32-s1 copy) (adler32-s1 state)
25
(adler32-s2 copy) (adler32-s2 copy))
28
(%make-adler32-state (adler32-s1 state) (adler32-s2 state)))))
30
(define-digest-updater adler32
31
;; many thanks to Xach for his code from Salza.
32
(let ((length (- end start))
35
(s1 (adler32-s1 state))
36
(s2 (adler32-s2 state)))
37
(declare (type index i k length)
39
(unless (zerop length)
42
(setf k (min 16 length))
45
(setf s1 (+ (aref sequence (+ start i)) s1))
51
(setf s1 (mod s1 adler32-modulo))
52
(setf s2 (mod s2 adler32-modulo))
53
(unless (zerop length)
55
(setf (adler32-s1 state) s1
56
(adler32-s2 state) s2)))
59
(define-digest-finalizer (adler32 4)
60
(flet ((stuff-state (state digest start)
61
(declare (type (simple-array (unsigned-byte 8) (*)) digest))
62
(declare (type (integer 0 #.(- array-dimension-limit 4)) start))
63
(setf (ub32ref/be digest start)
64
(logior (ash (adler32-s2 state) 16)
67
(declare (inline stuff-state))
68
(stuff-state state digest digest-start)))
70
(defdigest adler32 :digest-length 4 :block-length 1)