Created
February 28, 2024 18:27
-
-
Save Janiczek/fa91fadd53d29ef0e1bbcf8e034a519b to your computer and use it in GitHub Desktop.
CRC32 in HVM
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
CRC32 in HVM | |
A port of https://github.com/openbsd/src/blob/d4c9bc7e07bcf455e26a4d261eb43cf80a9b7fe1/bin/md5/crc.c | |
*/ | |
testString = "foo bar baz" // --> CRC: 2461288740 | |
main = (CRC.run testString) | |
CRC.initCrc = 0 | |
CRC.run string = | |
let hashedString = (String.foldl CRC.update CRC.initCrc string); | |
let clampedLength = (& (String.len string) 0xFF); | |
let hashedWithLength = (CRC.update hashedString clampedLength); | |
(clamp (~ hashedWithLength 0)) // second argument to ~ is ignored | |
CRC.update crc byte = (clamp (^ (<< crc 8) | |
(Table.at (^ (>> crc 24) byte)))) | |
clamp n = (& n 0xFFFFFFFF) | |
String.foldl * init String.nil = init | |
String.foldl fn init (String.cons x xs) = (String.foldl fn (fn init x) xs) | |
String.len list = (String.len.go list 0) | |
String.len.go (String.nil) count = count | |
String.len.go (String.cons x xs) count = (String.len.go xs (+ count 1)) | |
data NotFound.T = NotFound | |
Table.at n = match n { | |
0: 0x00000000 | |
1: 0x04C11DB7 | |
2: 0x09823B6E | |
3: 0x0D4326D9 | |
4: 0x130476DC | |
5: 0x17C56B6B | |
6: 0x1A864DB2 | |
7: 0x1E475005 | |
8: 0x2608EDB8 | |
9: 0x22C9F00F | |
10: 0x2F8AD6D6 | |
11: 0x2B4BCB61 | |
12: 0x350C9B64 | |
13: 0x31CD86D3 | |
14: 0x3C8EA00A | |
15: 0x384FBDBD | |
16: 0x4C11DB70 | |
17: 0x48D0C6C7 | |
18: 0x4593E01E | |
19: 0x4152FDA9 | |
20: 0x5F15ADAC | |
21: 0x5BD4B01B | |
22: 0x569796C2 | |
23: 0x52568B75 | |
24: 0x6A1936C8 | |
25: 0x6ED82B7F | |
26: 0x639B0DA6 | |
27: 0x675A1011 | |
28: 0x791D4014 | |
29: 0x7DDC5DA3 | |
30: 0x709F7B7A | |
31: 0x745E66CD | |
32: 0x9823B6E0 | |
33: 0x9CE2AB57 | |
34: 0x91A18D8E | |
35: 0x95609039 | |
36: 0x8B27C03C | |
37: 0x8FE6DD8B | |
38: 0x82A5FB52 | |
39: 0x8664E6E5 | |
40: 0xBE2B5B58 | |
41: 0xBAEA46EF | |
42: 0xB7A96036 | |
43: 0xB3687D81 | |
44: 0xAD2F2D84 | |
45: 0xA9EE3033 | |
46: 0xA4AD16EA | |
47: 0xA06C0B5D | |
48: 0xD4326D90 | |
49: 0xD0F37027 | |
50: 0xDDB056FE | |
51: 0xD9714B49 | |
52: 0xC7361B4C | |
53: 0xC3F706FB | |
54: 0xCEB42022 | |
55: 0xCA753D95 | |
56: 0xF23A8028 | |
57: 0xF6FB9D9F | |
58: 0xFBB8BB46 | |
59: 0xFF79A6F1 | |
60: 0xE13EF6F4 | |
61: 0xE5FFEB43 | |
62: 0xE8BCCD9A | |
63: 0xEC7DD02D | |
64: 0x34867077 | |
65: 0x30476DC0 | |
66: 0x3D044B19 | |
67: 0x39C556AE | |
68: 0x278206AB | |
69: 0x23431B1C | |
70: 0x2E003DC5 | |
71: 0x2AC12072 | |
72: 0x128E9DCF | |
73: 0x164F8078 | |
74: 0x1B0CA6A1 | |
75: 0x1FCDBB16 | |
76: 0x018AEB13 | |
77: 0x054BF6A4 | |
78: 0x0808D07D | |
79: 0x0CC9CDCA | |
80: 0x7897AB07 | |
81: 0x7C56B6B0 | |
82: 0x71159069 | |
83: 0x75D48DDE | |
84: 0x6B93DDDB | |
85: 0x6F52C06C | |
86: 0x6211E6B5 | |
87: 0x66D0FB02 | |
88: 0x5E9F46BF | |
89: 0x5A5E5B08 | |
90: 0x571D7DD1 | |
91: 0x53DC6066 | |
92: 0x4D9B3063 | |
93: 0x495A2DD4 | |
94: 0x44190B0D | |
95: 0x40D816BA | |
96: 0xACA5C697 | |
97: 0xA864DB20 | |
98: 0xA527FDF9 | |
99: 0xA1E6E04E | |
100: 0xBFA1B04B | |
101: 0xBB60ADFC | |
102: 0xB6238B25 | |
103: 0xB2E29692 | |
104: 0x8AAD2B2F | |
105: 0x8E6C3698 | |
106: 0x832F1041 | |
107: 0x87EE0DF6 | |
108: 0x99A95DF3 | |
109: 0x9D684044 | |
110: 0x902B669D | |
111: 0x94EA7B2A | |
112: 0xE0B41DE7 | |
113: 0xE4750050 | |
114: 0xE9362689 | |
115: 0xEDF73B3E | |
116: 0xF3B06B3B | |
117: 0xF771768C | |
118: 0xFA325055 | |
119: 0xFEF34DE2 | |
120: 0xC6BCF05F | |
121: 0xC27DEDE8 | |
122: 0xCF3ECB31 | |
123: 0xCBFFD686 | |
124: 0xD5B88683 | |
125: 0xD1799B34 | |
126: 0xDC3ABDED | |
127: 0xD8FBA05A | |
128: 0x690CE0EE | |
129: 0x6DCDFD59 | |
130: 0x608EDB80 | |
131: 0x644FC637 | |
132: 0x7A089632 | |
133: 0x7EC98B85 | |
134: 0x738AAD5C | |
135: 0x774BB0EB | |
136: 0x4F040D56 | |
137: 0x4BC510E1 | |
138: 0x46863638 | |
139: 0x42472B8F | |
140: 0x5C007B8A | |
141: 0x58C1663D | |
142: 0x558240E4 | |
143: 0x51435D53 | |
144: 0x251D3B9E | |
145: 0x21DC2629 | |
146: 0x2C9F00F0 | |
147: 0x285E1D47 | |
148: 0x36194D42 | |
149: 0x32D850F5 | |
150: 0x3F9B762C | |
151: 0x3B5A6B9B | |
152: 0x0315D626 | |
153: 0x07D4CB91 | |
154: 0x0A97ED48 | |
155: 0x0E56F0FF | |
156: 0x1011A0FA | |
157: 0x14D0BD4D | |
158: 0x19939B94 | |
159: 0x1D528623 | |
160: 0xF12F560E | |
161: 0xF5EE4BB9 | |
162: 0xF8AD6D60 | |
163: 0xFC6C70D7 | |
164: 0xE22B20D2 | |
165: 0xE6EA3D65 | |
166: 0xEBA91BBC | |
167: 0xEF68060B | |
168: 0xD727BBB6 | |
169: 0xD3E6A601 | |
170: 0xDEA580D8 | |
171: 0xDA649D6F | |
172: 0xC423CD6A | |
173: 0xC0E2D0DD | |
174: 0xCDA1F604 | |
175: 0xC960EBB3 | |
176: 0xBD3E8D7E | |
177: 0xB9FF90C9 | |
178: 0xB4BCB610 | |
179: 0xB07DABA7 | |
180: 0xAE3AFBA2 | |
181: 0xAAFBE615 | |
182: 0xA7B8C0CC | |
183: 0xA379DD7B | |
184: 0x9B3660C6 | |
185: 0x9FF77D71 | |
186: 0x92B45BA8 | |
187: 0x9675461F | |
188: 0x8832161A | |
189: 0x8CF30BAD | |
190: 0x81B02D74 | |
191: 0x857130C3 | |
192: 0x5D8A9099 | |
193: 0x594B8D2E | |
194: 0x5408ABF7 | |
195: 0x50C9B640 | |
196: 0x4E8EE645 | |
197: 0x4A4FFBF2 | |
198: 0x470CDD2B | |
199: 0x43CDC09C | |
200: 0x7B827D21 | |
201: 0x7F436096 | |
202: 0x7200464F | |
203: 0x76C15BF8 | |
204: 0x68860BFD | |
205: 0x6C47164A | |
206: 0x61043093 | |
207: 0x65C52D24 | |
208: 0x119B4BE9 | |
209: 0x155A565E | |
210: 0x18197087 | |
211: 0x1CD86D30 | |
212: 0x029F3D35 | |
213: 0x065E2082 | |
214: 0x0B1D065B | |
215: 0x0FDC1BEC | |
216: 0x3793A651 | |
217: 0x3352BBE6 | |
218: 0x3E119D3F | |
219: 0x3AD08088 | |
220: 0x2497D08D | |
221: 0x2056CD3A | |
222: 0x2D15EBE3 | |
223: 0x29D4F654 | |
224: 0xC5A92679 | |
225: 0xC1683BCE | |
226: 0xCC2B1D17 | |
227: 0xC8EA00A0 | |
228: 0xD6AD50A5 | |
229: 0xD26C4D12 | |
230: 0xDF2F6BCB | |
231: 0xDBEE767C | |
232: 0xE3A1CBC1 | |
233: 0xE760D676 | |
234: 0xEA23F0AF | |
235: 0xEEE2ED18 | |
236: 0xF0A5BD1D | |
237: 0xF464A0AA | |
238: 0xF9278673 | |
239: 0xFDE69BC4 | |
240: 0x89B8FD09 | |
241: 0x8D79E0BE | |
242: 0x803AC667 | |
243: 0x84FBDBD0 | |
244: 0x9ABC8BD5 | |
245: 0x9E7D9662 | |
246: 0x933EB0BB | |
247: 0x97FFAD0C | |
248: 0xAFB010B1 | |
249: 0xAB710D06 | |
250: 0xA6322BDF | |
251: 0xA2F33668 | |
252: 0xBCB4666D | |
253: 0xB8757BDA | |
254: 0xB5365D03 | |
255: 0xB1F740B4 | |
*: NotFound | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment