Coverage report: /home/ellis/comp/ext/ironclad/src/digests/crc24.lisp

KindCoveredAll%
expression069 0.0
branch02 0.0
Key
Not instrumented
Conditionalized out
Executed
Not executed
 
Both branches taken
One branch taken
Neither branch taken
1
 ;;;; crc24.lisp
2
 (in-package :crypto)
3
 (in-ironclad-readtable)
4
 
5
 (declaim (type (simple-array (unsigned-byte 32) (256)) +crc24-table+))
6
 (defconst +crc24-table+
7
 #32@(#x00000000 #x00864CFB #x008AD50D #x000C99F6 #x0093E6E1 #x0015AA1A
8
 #x001933EC #x009F7F17 #x00A18139 #x0027CDC2 #x002B5434 #x00AD18CF
9
 #x003267D8 #x00B42B23 #x00B8B2D5 #x003EFE2E #x00C54E89 #x00430272
10
 #x004F9B84 #x00C9D77F #x0056A868 #x00D0E493 #x00DC7D65 #x005A319E
11
 #x0064CFB0 #x00E2834B #x00EE1ABD #x00685646 #x00F72951 #x007165AA
12
 #x007DFC5C #x00FBB0A7 #x000CD1E9 #x008A9D12 #x008604E4 #x0000481F
13
 #x009F3708 #x00197BF3 #x0015E205 #x0093AEFE #x00AD50D0 #x002B1C2B
14
 #x002785DD #x00A1C926 #x003EB631 #x00B8FACA #x00B4633C #x00322FC7
15
 #x00C99F60 #x004FD39B #x00434A6D #x00C50696 #x005A7981 #x00DC357A
16
 #x00D0AC8C #x0056E077 #x00681E59 #x00EE52A2 #x00E2CB54 #x006487AF
17
 #x00FBF8B8 #x007DB443 #x00712DB5 #x00F7614E #x0019A3D2 #x009FEF29
18
 #x009376DF #x00153A24 #x008A4533 #x000C09C8 #x0000903E #x0086DCC5
19
 #x00B822EB #x003E6E10 #x0032F7E6 #x00B4BB1D #x002BC40A #x00AD88F1
20
 #x00A11107 #x00275DFC #x00DCED5B #x005AA1A0 #x00563856 #x00D074AD
21
 #x004F0BBA #x00C94741 #x00C5DEB7 #x0043924C #x007D6C62 #x00FB2099
22
 #x00F7B96F #x0071F594 #x00EE8A83 #x0068C678 #x00645F8E #x00E21375
23
 #x0015723B #x00933EC0 #x009FA736 #x0019EBCD #x008694DA #x0000D821
24
 #x000C41D7 #x008A0D2C #x00B4F302 #x0032BFF9 #x003E260F #x00B86AF4
25
 #x002715E3 #x00A15918 #x00ADC0EE #x002B8C15 #x00D03CB2 #x00567049
26
 #x005AE9BF #x00DCA544 #x0043DA53 #x00C596A8 #x00C90F5E #x004F43A5
27
 #x0071BD8B #x00F7F170 #x00FB6886 #x007D247D #x00E25B6A #x00641791
28
 #x00688E67 #x00EEC29C #x003347A4 #x00B50B5F #x00B992A9 #x003FDE52
29
 #x00A0A145 #x0026EDBE #x002A7448 #x00AC38B3 #x0092C69D #x00148A66
30
 #x00181390 #x009E5F6B #x0001207C #x00876C87 #x008BF571 #x000DB98A
31
 #x00F6092D #x007045D6 #x007CDC20 #x00FA90DB #x0065EFCC #x00E3A337
32
 #x00EF3AC1 #x0069763A #x00578814 #x00D1C4EF #x00DD5D19 #x005B11E2
33
 #x00C46EF5 #x0042220E #x004EBBF8 #x00C8F703 #x003F964D #x00B9DAB6
34
 #x00B54340 #x00330FBB #x00AC70AC #x002A3C57 #x0026A5A1 #x00A0E95A
35
 #x009E1774 #x00185B8F #x0014C279 #x00928E82 #x000DF195 #x008BBD6E
36
 #x00872498 #x00016863 #x00FAD8C4 #x007C943F #x00700DC9 #x00F64132
37
 #x00693E25 #x00EF72DE #x00E3EB28 #x0065A7D3 #x005B59FD #x00DD1506
38
 #x00D18CF0 #x0057C00B #x00C8BF1C #x004EF3E7 #x00426A11 #x00C426EA
39
 #x002AE476 #x00ACA88D #x00A0317B #x00267D80 #x00B90297 #x003F4E6C
40
 #x0033D79A #x00B59B61 #x008B654F #x000D29B4 #x0001B042 #x0087FCB9
41
 #x001883AE #x009ECF55 #x009256A3 #x00141A58 #x00EFAAFF #x0069E604
42
 #x00657FF2 #x00E33309 #x007C4C1E #x00FA00E5 #x00F69913 #x0070D5E8
43
 #x004E2BC6 #x00C8673D #x00C4FECB #x0042B230 #x00DDCD27 #x005B81DC
44
 #x0057182A #x00D154D1 #x0026359F #x00A07964 #x00ACE092 #x002AAC69
45
 #x00B5D37E #x00339F85 #x003F0673 #x00B94A88 #x0087B4A6 #x0001F85D
46
 #x000D61AB #x008B2D50 #x00145247 #x00921EBC #x009E874A #x0018CBB1
47
 #x00E37B16 #x006537ED #x0069AE1B #x00EFE2E0 #x00709DF7 #x00F6D10C
48
 #x00FA48FA #x007C0401 #x0042FA2F #x00C4B6D4 #x00C82F22 #x004E63D9
49
 #x00D11CCE #x00575035 #x005BC9C3 #x00DD8538))
50
 
51
 (defstruct (crc24
52
              (:constructor %make-crc24-digest nil)
53
              (:constructor %make-crc24-state (crc))
54
              (:copier nil))
55
   (crc #xb704ce :type (unsigned-byte 32)))
56
 
57
 (defmethod reinitialize-instance ((state crc24) &rest initargs)
58
   (declare (ignore initargs))
59
   (setf (crc24-crc state) #xb704ce)
60
   state)
61
 
62
 (defmethod copy-digest ((state crc24) &optional copy)
63
   (check-type copy (or null crc24))
64
   (cond
65
     (copy
66
      (setf (crc24-crc copy) (crc24-crc state))
67
      copy)
68
     (t
69
      (%make-crc24-state (crc24-crc state)))))
70
 
71
 (define-digest-updater crc24
72
   (let ((crc (crc24-crc state)))
73
     (declare (type (unsigned-byte 32) crc))
74
     (do ((i start (1+ i))
75
          (table +crc24-table+))
76
         ((>= i end)
77
          (setf (crc24-crc state) (ldb (byte 24 0) crc))
78
          state)
79
       (setf crc (logxor (aref table
80
                               (logand (logxor (mod32ash crc -16)
81
                                               (aref sequence i))
82
                                       #xff))
83
                         (mod32ash crc 8))))))
84
 
85
 (define-digest-finalizer (crc24 3)
86
   (flet ((stuff-state (crc digest start)
87
            (declare (type (simple-array (unsigned-byte 8) (*)) digest))
88
            (declare (type (integer 0 #.(- array-dimension-limit 3)) start))
89
            (setf (aref digest (+ start 0)) (ldb (byte 8 16) crc)
90
                  (aref digest (+ start 1)) (ldb (byte 8 8) crc)
91
                  (aref digest (+ start 2)) (ldb (byte 8 0) crc))
92
            digest))
93
     (declare (inline stuff-state))
94
     (stuff-state (crc24-crc state) digest digest-start)))
95
 
96
 (defdigest crc24 :digest-length 3 :block-length 1)