-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathCRC64_ms.pas
83 lines (72 loc) · 5.74 KB
/
CRC64_ms.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
unit CRC64_ms;
//CRC-64 MS
//Author: domasz
//Version: 0.1 (2022-11-17)
//Licence: MIT
interface
uses SysUtils, HasherBase;
type THasherCRC64_ms = class(THasherBase)
private
FHash: QWord;
public
constructor Create; override;
procedure Update(Msg: PByte; Length: Integer); override;
function Final: String; override;
end;
implementation
var Table: array[0..255] of QWord = (
$0000000000000000, $0809E8A2969451E9, $1013D1452D28A3D2, $181A39E7BBBCF23B, $2027A28A5A5147A4, $282E4A28CCC5164D, $303473CF7779E476, $383D9B6DE1EDB59F,
$404F4514B4A28F48, $4846ADB62236DEA1, $505C9451998A2C9A, $58557CF30F1E7D73, $6068E79EEEF3C8EC, $68610F3C78679905, $707B36DBC3DB6B3E, $7872DE79554F3AD7,
$809E8A2969451E90, $8897628BFFD14F79, $908D5B6C446DBD42, $9884B3CED2F9ECAB, $A0B928A333145934, $A8B0C001A58008DD, $B0AAF9E61E3CFAE6, $B8A3114488A8AB0F,
$C0D1CF3DDDE791D8, $C8D8279F4B73C031, $D0C21E78F0CF320A, $D8CBF6DA665B63E3, $E0F66DB787B6D67C, $E8FF851511228795, $F0E5BCF2AA9E75AE, $F8EC54503C0A2447,
$24B1909974C84E69, $2CB8783BE25C1F80, $34A241DC59E0EDBB, $3CABA97ECF74BC52, $049632132E9909CD, $0C9FDAB1B80D5824, $1485E35603B1AA1F, $1C8C0BF49525FBF6,
$64FED58DC06AC121, $6CF73D2F56FE90C8, $74ED04C8ED4262F3, $7CE4EC6A7BD6331A, $44D977079A3B8685, $4CD09FA50CAFD76C, $54CAA642B7132557, $5CC34EE0218774BE,
$A42F1AB01D8D50F9, $AC26F2128B190110, $B43CCBF530A5F32B, $BC352357A631A2C2, $8408B83A47DC175D, $8C015098D14846B4, $941B697F6AF4B48F, $9C1281DDFC60E566,
$E4605FA4A92FDFB1, $EC69B7063FBB8E58, $F4738EE184077C63, $FC7A664312932D8A, $C447FD2EF37E9815, $CC4E158C65EAC9FC, $D4542C6BDE563BC7, $DC5DC4C948C26A2E,
$49632132E9909CD2, $416AC9907F04CD3B, $5970F077C4B83F00, $517918D5522C6EE9, $694483B8B3C1DB76, $614D6B1A25558A9F, $795752FD9EE978A4, $715EBA5F087D294D,
$092C64265D32139A, $01258C84CBA64273, $193FB563701AB048, $11365DC1E68EE1A1, $290BC6AC0763543E, $21022E0E91F705D7, $391817E92A4BF7EC, $3111FF4BBCDFA605,
$C9FDAB1B80D58242, $C1F443B91641D3AB, $D9EE7A5EADFD2190, $D1E792FC3B697079, $E9DA0991DA84C5E6, $E1D3E1334C10940F, $F9C9D8D4F7AC6634, $F1C03076613837DD,
$89B2EE0F34770D0A, $81BB06ADA2E35CE3, $99A13F4A195FAED8, $91A8D7E88FCBFF31, $A9954C856E264AAE, $A19CA427F8B21B47, $B9869DC0430EE97C, $B18F7562D59AB895,
$6DD2B1AB9D58D2BB, $65DB59090BCC8352, $7DC160EEB0707169, $75C8884C26E42080, $4DF51321C709951F, $45FCFB83519DC4F6, $5DE6C264EA2136CD, $55EF2AC67CB56724,
$2D9DF4BF29FA5DF3, $25941C1DBF6E0C1A, $3D8E25FA04D2FE21, $3587CD589246AFC8, $0DBA563573AB1A57, $05B3BE97E53F4BBE, $1DA987705E83B985, $15A06FD2C817E86C,
$ED4C3B82F41DCC2B, $E545D32062899DC2, $FD5FEAC7D9356FF9, $F55602654FA13E10, $CD6B9908AE4C8B8F, $C56271AA38D8DA66, $DD78484D8364285D, $D571A0EF15F079B4,
$AD037E9640BF4363, $A50A9634D62B128A, $BD10AFD36D97E0B1, $B5194771FB03B158, $8D24DC1C1AEE04C7, $852D34BE8C7A552E, $9D370D5937C6A715, $953EE5FBA152F6FC,
$92C64265D32139A4, $9ACFAAC745B5684D, $82D59320FE099A76, $8ADC7B82689DCB9F, $B2E1E0EF89707E00, $BAE8084D1FE42FE9, $A2F231AAA458DDD2, $AAFBD90832CC8C3B,
$D28907716783B6EC, $DA80EFD3F117E705, $C29AD6344AAB153E, $CA933E96DC3F44D7, $F2AEA5FB3DD2F148, $FAA74D59AB46A0A1, $E2BD74BE10FA529A, $EAB49C1C866E0373,
$1258C84CBA642734, $1A5120EE2CF076DD, $024B1909974C84E6, $0A42F1AB01D8D50F, $327F6AC6E0356090, $3A76826476A13179, $226CBB83CD1DC342, $2A6553215B8992AB,
$52178D580EC6A87C, $5A1E65FA9852F995, $42045C1D23EE0BAE, $4A0DB4BFB57A5A47, $72302FD25497EFD8, $7A39C770C203BE31, $6223FE9779BF4C0A, $6A2A1635EF2B1DE3,
$B677D2FCA7E977CD, $BE7E3A5E317D2624, $A66403B98AC1D41F, $AE6DEB1B1C5585F6, $96507076FDB83069, $9E5998D46B2C6180, $8643A133D09093BB, $8E4A49914604C252,
$F63897E8134BF885, $FE317F4A85DFA96C, $E62B46AD3E635B57, $EE22AE0FA8F70ABE, $D61F3562491ABF21, $DE16DDC0DF8EEEC8, $C60CE42764321CF3, $CE050C85F2A64D1A,
$36E958D5CEAC695D, $3EE0B077583838B4, $26FA8990E384CA8F, $2EF3613275109B66, $16CEFA5F94FD2EF9, $1EC712FD02697F10, $06DD2B1AB9D58D2B, $0ED4C3B82F41DCC2,
$76A61DC17A0EE615, $7EAFF563EC9AB7FC, $66B5CC84572645C7, $6EBC2426C1B2142E, $5681BF4B205FA1B1, $5E8857E9B6CBF058, $46926E0E0D770263, $4E9B86AC9BE3538A,
$DBA563573AB1A576, $D3AC8BF5AC25F49F, $CBB6B212179906A4, $C3BF5AB0810D574D, $FB82C1DD60E0E2D2, $F38B297FF674B33B, $EB9110984DC84100, $E398F83ADB5C10E9,
$9BEA26438E132A3E, $93E3CEE118877BD7, $8BF9F706A33B89EC, $83F01FA435AFD805, $BBCD84C9D4426D9A, $B3C46C6B42D63C73, $ABDE558CF96ACE48, $A3D7BD2E6FFE9FA1,
$5B3BE97E53F4BBE6, $533201DCC560EA0F, $4B28383B7EDC1834, $4321D099E84849DD, $7B1C4BF409A5FC42, $7315A3569F31ADAB, $6B0F9AB1248D5F90, $63067213B2190E79,
$1B74AC6AE75634AE, $137D44C871C26547, $0B677D2FCA7E977C, $036E958D5CEAC695, $3B530EE0BD07730A, $335AE6422B9322E3, $2B40DFA5902FD0D8, $2349370706BB8131,
$FF14F3CE4E79EB1F, $F71D1B6CD8EDBAF6, $EF07228B635148CD, $E70ECA29F5C51924, $DF3351441428ACBB, $D73AB9E682BCFD52, $CF20800139000F69, $C72968A3AF945E80,
$BF5BB6DAFADB6457, $B7525E786C4F35BE, $AF48679FD7F3C785, $A7418F3D4167966C, $9F7C1450A08A23F3, $9775FCF2361E721A, $8F6FC5158DA28021, $87662DB71B36D1C8,
$7F8A79E7273CF58F, $77839145B1A8A466, $6F99A8A20A14565D, $679040009C8007B4, $5FADDB6D7D6DB22B, $57A433CFEBF9E3C2, $4FBE0A28504511F9, $47B7E28AC6D14010,
$3FC53CF3939E7AC7, $37CCD451050A2B2E, $2FD6EDB6BEB6D915, $27DF0514282288FC, $1FE29E79C9CF3D63, $17EB76DB5F5B6C8A, $0FF14F3CE4E79EB1, $07F8A79E7273CF58
);
constructor THasherCRC64_ms.Create;
begin
inherited Create;
FHash := $FFFFFFFFFFFFFFFF;
Check := '75D4B74F024ECEEA';
end;
procedure THasherCRC64_ms.Update(Msg: PByte; Length: Integer);
var i: Integer;
Index: Cardinal;
begin
for i:=0 to Length-1 do begin
FHash := (FHash shr 8) xor Table[Byte(FHash) xor Msg^];
Inc(Msg);
end;
end;
function THasherCRC64_ms.Final: String;
begin
Result := IntToHex(FHash, 16);
end;
initialization
HasherList.RegisterHasher('CRC-64 MS', THasherCRC64_ms);
end.