├── BKDRHash.pas ├── C,PHP,JavaScript,Python └── README.md ├── CRC16_ARC.pas ├── CRC16_CDMA2000.pas ├── CRC16_CMS.pas ├── CRC16_DDS110.pas ├── CRC16_DECTR.pas ├── CRC16_DECTX.pas ├── CRC16_DNP.pas ├── CRC16_EN13757.pas ├── CRC16_GENIBUS.pas ├── CRC16_GSM.pas ├── CRC16_IBM3740.pas ├── CRC16_IBMSDLC.pas ├── CRC16_ISOIEC1444.pas ├── CRC16_KERMIT.pas ├── CRC16_LJ1200.pas ├── CRC16_M17.pas ├── CRC16_MAXIMDOW.pas ├── CRC16_MCRF4XX.pas ├── CRC16_MODBUS.pas ├── CRC16_NRSC5.pas ├── CRC16_OPENSAFETYA.pas ├── CRC16_OPENSAFETYB.pas ├── CRC16_PROFIBUS.pas ├── CRC16_RIELLO.pas ├── CRC16_SPIFUJITSU.pas ├── CRC16_T10DIF.pas ├── CRC16_TELEDISK.pas ├── CRC16_TMS37157.pas ├── CRC16_UMTS.pas ├── CRC16_USB.pas ├── CRC16_XMODEM.pas ├── CRC24_BLE.pas ├── CRC24_FLEXRAYA.pas ├── CRC24_FLEXRAYB.pas ├── CRC24_INTERLAKEN.pas ├── CRC24_LTEA.pas ├── CRC24_LTEB.pas ├── CRC24_OPENPGP.pas ├── CRC24_OS9.pas ├── CRC32_AIXM.pas ├── CRC32_AUTOSAR.pas ├── CRC32_BASE91D.pas ├── CRC32_BZIP2.pas ├── CRC32_CDROMEDC.pas ├── CRC32_CKSUM.pas ├── CRC32_ISCSI.pas ├── CRC32_ISOHDLC.pas ├── CRC32_JAMCRC.pas ├── CRC32_MEF.pas ├── CRC32_MPEG2.pas ├── CRC32_XFER.pas ├── CRC3_ROHC.pas ├── CRC40_gsm.pas ├── CRC4_G704.pas ├── CRC4_interlaken.pas ├── CRC5_EPCC1G2.pas ├── CRC5_G704.pas ├── CRC5_USB.pas ├── CRC64_ecma.pas ├── CRC64_ecma_182.pas ├── CRC64_go.pas ├── CRC64_ms.pas ├── CRC64_xz.pas ├── CRC6_CDMA2000A.pas ├── CRC6_CDMA2000B.pas ├── CRC6_DARC.pas ├── CRC6_G704.pas ├── CRC6_GSM.pas ├── CRC82_darc.pas ├── CRC8_AUTOSAR.pas ├── CRC8_BLUETOOTH.pas ├── CRC8_CDMA2000.pas ├── CRC8_DARC.pas ├── CRC8_DVBS2.pas ├── CRC8_GSMA.pas ├── CRC8_GSMB.pas ├── CRC8_HITAG.pas ├── CRC8_I4321.pas ├── CRC8_ICODE.pas ├── CRC8_LTE.pas ├── CRC8_MAXIMDOW.pas ├── CRC8_MIFAREMAD.pas ├── CRC8_NRSC5.pas ├── CRC8_OPENSAFETY.pas ├── CRC8_ROHC.pas ├── CRC8_SAEJ1850.pas ├── CRC8_SMBUS.pas ├── CRC8_TECH3250.pas ├── CRC8_WCDMA.pas ├── DEKHash.pas ├── DJBHash.pas ├── FNV0_16.pas ├── FNV0_24.pas ├── FNV0_32.pas ├── FNV0_56.pas ├── FNV0_64.pas ├── FNV0_8.pas ├── FNV1A_56.pas ├── FNV1A_64.pas ├── FNV1_16.pas ├── FNV1_32.pas ├── FNV1_56.pas ├── FNV1_64.pas ├── FNV1_8.pas ├── FNV1a_16.pas ├── FNV1a_32.pas ├── FNV1a_8.pas ├── GHash3.pas ├── GHash5.pas ├── Hasher.pas ├── HasherBase.pas ├── LICENSE.txt ├── MD2.pas ├── MD4.pas ├── MD5.pas ├── MurmurHash.pas ├── MurmurHash2.pas ├── MurmurHash2a.pas ├── MurmurHash3.pas ├── MySQL3.pas ├── One_at_a_time.pas ├── PJW32.pas ├── README.md ├── SDBMHash.pas ├── SHA0.pas ├── SHA1.pas ├── SHA224.pas ├── SHA256.pas ├── SHA384.pas ├── SHA512.pas ├── adler16.pas ├── adler32.pas ├── adler64.pas ├── adler8.pas ├── aphash.pas ├── cksum_mpeg2.pas ├── crc10_atm.pas ├── crc10_cdma2000.pas ├── crc10_gsm.pas ├── crc11_flexray.pas ├── crc11_umts.pas ├── crc12_cdma2000.pas ├── crc12_dect.pas ├── crc12_gsm.pas ├── crc13_bbc.pas ├── crc14_gsm.pas ├── crc15_MPT1327.pas ├── crc15_can.pas ├── crc17_canfd.pas ├── crc21_canfd.pas ├── crc30_cdma.pas ├── crc31_philips.pas ├── crc64.pas ├── crc7_mmc.pas ├── crc7_umts.pas ├── elfHash.pas ├── fletcher16.pas ├── fletcher32.pas ├── fletcher64.pas ├── fletcher8.pas ├── jshash.pas ├── pjwhash.pas ├── rshash.pas ├── size64.pas ├── sum16.pas ├── sum24.pas ├── sum32.pas ├── sum64.pas ├── sum8.pas ├── sum_bsd.pas ├── sum_sysv.pas ├── xor16.pas ├── xor32.pas ├── xor8.pas └── xxHash32.pas /BKDRHash.pas: -------------------------------------------------------------------------------- 1 | unit BKDRHash; 2 | //BKDR Hash 3 | //Author: domasz 4 | //Last Update: 2022-11-26 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | 12 | type THasherBKDRHash = class(THasherbase) 13 | private 14 | FHash: Cardinal; 15 | Seed: Cardinal; 16 | public 17 | constructor Create; override; 18 | procedure Update(Msg: PByte; Length: Integer); override; 19 | function Final: String; override; 20 | end; 21 | 22 | implementation 23 | 24 | constructor THasherBKDRHash.Create; 25 | begin 26 | inherited Create; 27 | Seed := 131; 28 | Check := 'DE43D6D5'; 29 | FHash := 0; 30 | end; 31 | 32 | procedure THasherBKDRHash.Update(Msg: PByte; Length: Integer); 33 | var i: Integer; 34 | begin 35 | for i:=0 to Length-1 do begin 36 | FHash := (FHash * seed) + Msg^; 37 | 38 | Inc(Msg); 39 | end; 40 | end; 41 | 42 | function THasherBKDRHash.Final: String; 43 | begin 44 | Result := IntToHex(FHash, 8); 45 | end; 46 | 47 | 48 | initialization 49 | HasherList.RegisterHasher('BKDR Hash', THasherBKDRHash); 50 | 51 | end. 52 | -------------------------------------------------------------------------------- /C,PHP,JavaScript,Python/README.md: -------------------------------------------------------------------------------- 1 | # How to translate this Pascal code to C, C++, Python, Java, JavaScript etc. 2 | 3 | ## Data types 4 | 5 | Byte = UInt8 6 | 7 | Word = UInt16 8 | 9 | Cardinal = UInt32 10 | 11 | QWord = UInt64 12 | 13 | LongInt = Int32 14 | 15 | Integer = platform specific Int 16 | 17 | ## Bitwise operators 18 | 19 | xor = ^ 20 | 21 | and = & 22 | 23 | shl = << 24 | 25 | shr = >> 26 | 27 | not = ! 28 | 29 | mod = % 30 | 31 | ## Function parameters 32 | 33 | In every class there is a function like this: 34 | 35 | procedure THasher[...].Update(Msg: PByte; Length: Integer); 36 | 37 | you can replace "Msg: PByte" in your translation with something like "Msg: String" 38 | 39 | and then replace all "Msg^" with "Msg[i]" 40 | 41 | 42 | ## PHP port 43 | 44 | A PHP port is available in "PHP" subrdirectory- but not all algorithms have been ported yet. 45 | -------------------------------------------------------------------------------- /CRC16_ARC.pas: -------------------------------------------------------------------------------- 1 | unit CRC16_ARC; 2 | //CRC-16 ARC 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC16_ARC = class(THasherBase) 12 | private 13 | FHash: Word; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Word = ( 23 | $0000, $C0C1, $C181, $0140, $C301, $03C0, $0280, $C241, 24 | $C601, $06C0, $0780, $C741, $0500, $C5C1, $C481, $0440, 25 | $CC01, $0CC0, $0D80, $CD41, $0F00, $CFC1, $CE81, $0E40, 26 | $0A00, $CAC1, $CB81, $0B40, $C901, $09C0, $0880, $C841, 27 | $D801, $18C0, $1980, $D941, $1B00, $DBC1, $DA81, $1A40, 28 | $1E00, $DEC1, $DF81, $1F40, $DD01, $1DC0, $1C80, $DC41, 29 | $1400, $D4C1, $D581, $1540, $D701, $17C0, $1680, $D641, 30 | $D201, $12C0, $1380, $D341, $1100, $D1C1, $D081, $1040, 31 | $F001, $30C0, $3180, $F141, $3300, $F3C1, $F281, $3240, 32 | $3600, $F6C1, $F781, $3740, $F501, $35C0, $3480, $F441, 33 | $3C00, $FCC1, $FD81, $3D40, $FF01, $3FC0, $3E80, $FE41, 34 | $FA01, $3AC0, $3B80, $FB41, $3900, $F9C1, $F881, $3840, 35 | $2800, $E8C1, $E981, $2940, $EB01, $2BC0, $2A80, $EA41, 36 | $EE01, $2EC0, $2F80, $EF41, $2D00, $EDC1, $EC81, $2C40, 37 | $E401, $24C0, $2580, $E541, $2700, $E7C1, $E681, $2640, 38 | $2200, $E2C1, $E381, $2340, $E101, $21C0, $2080, $E041, 39 | $A001, $60C0, $6180, $A141, $6300, $A3C1, $A281, $6240, 40 | $6600, $A6C1, $A781, $6740, $A501, $65C0, $6480, $A441, 41 | $6C00, $ACC1, $AD81, $6D40, $AF01, $6FC0, $6E80, $AE41, 42 | $AA01, $6AC0, $6B80, $AB41, $6900, $A9C1, $A881, $6840, 43 | $7800, $B8C1, $B981, $7940, $BB01, $7BC0, $7A80, $BA41, 44 | $BE01, $7EC0, $7F80, $BF41, $7D00, $BDC1, $BC81, $7C40, 45 | $B401, $74C0, $7580, $B541, $7700, $B7C1, $B681, $7640, 46 | $7200, $B2C1, $B381, $7340, $B101, $71C0, $7080, $B041, 47 | $5000, $90C1, $9181, $5140, $9301, $53C0, $5280, $9241, 48 | $9601, $56C0, $5780, $9741, $5500, $95C1, $9481, $5440, 49 | $9C01, $5CC0, $5D80, $9D41, $5F00, $9FC1, $9E81, $5E40, 50 | $5A00, $9AC1, $9B81, $5B40, $9901, $59C0, $5880, $9841, 51 | $8801, $48C0, $4980, $8941, $4B00, $8BC1, $8A81, $4A40, 52 | $4E00, $8EC1, $8F81, $4F40, $8D01, $4DC0, $4C80, $8C41, 53 | $4400, $84C1, $8581, $4540, $8701, $47C0, $4680, $8641, 54 | $8201, $42C0, $4380, $8341, $4100, $81C1, $8081, $4040 55 | ); 56 | 57 | constructor THasherCRC16_ARC.Create; 58 | begin 59 | inherited Create; 60 | FHash := $0000; 61 | Check := 'BB3D'; 62 | end; 63 | 64 | procedure THasherCRC16_ARC.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := (FHash shr 8) xor Table[(FHash xor Msg^) and $FF]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC16_ARC.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 4); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-16 ARC', THasherCRC16_ARC); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC16_CMS.pas: -------------------------------------------------------------------------------- 1 | unit CRC16_CMS; 2 | //CRC-16 CMS 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC16_CMS = class(THasherBase) 12 | private 13 | FHash: Word; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Word = ( 23 | $0000, $8005, $800F, $000A, $801B, $001E, $0014, $8011, 24 | $8033, $0036, $003C, $8039, $0028, $802D, $8027, $0022, 25 | $8063, $0066, $006C, $8069, $0078, $807D, $8077, $0072, 26 | $0050, $8055, $805F, $005A, $804B, $004E, $0044, $8041, 27 | $80C3, $00C6, $00CC, $80C9, $00D8, $80DD, $80D7, $00D2, 28 | $00F0, $80F5, $80FF, $00FA, $80EB, $00EE, $00E4, $80E1, 29 | $00A0, $80A5, $80AF, $00AA, $80BB, $00BE, $00B4, $80B1, 30 | $8093, $0096, $009C, $8099, $0088, $808D, $8087, $0082, 31 | $8183, $0186, $018C, $8189, $0198, $819D, $8197, $0192, 32 | $01B0, $81B5, $81BF, $01BA, $81AB, $01AE, $01A4, $81A1, 33 | $01E0, $81E5, $81EF, $01EA, $81FB, $01FE, $01F4, $81F1, 34 | $81D3, $01D6, $01DC, $81D9, $01C8, $81CD, $81C7, $01C2, 35 | $0140, $8145, $814F, $014A, $815B, $015E, $0154, $8151, 36 | $8173, $0176, $017C, $8179, $0168, $816D, $8167, $0162, 37 | $8123, $0126, $012C, $8129, $0138, $813D, $8137, $0132, 38 | $0110, $8115, $811F, $011A, $810B, $010E, $0104, $8101, 39 | $8303, $0306, $030C, $8309, $0318, $831D, $8317, $0312, 40 | $0330, $8335, $833F, $033A, $832B, $032E, $0324, $8321, 41 | $0360, $8365, $836F, $036A, $837B, $037E, $0374, $8371, 42 | $8353, $0356, $035C, $8359, $0348, $834D, $8347, $0342, 43 | $03C0, $83C5, $83CF, $03CA, $83DB, $03DE, $03D4, $83D1, 44 | $83F3, $03F6, $03FC, $83F9, $03E8, $83ED, $83E7, $03E2, 45 | $83A3, $03A6, $03AC, $83A9, $03B8, $83BD, $83B7, $03B2, 46 | $0390, $8395, $839F, $039A, $838B, $038E, $0384, $8381, 47 | $0280, $8285, $828F, $028A, $829B, $029E, $0294, $8291, 48 | $82B3, $02B6, $02BC, $82B9, $02A8, $82AD, $82A7, $02A2, 49 | $82E3, $02E6, $02EC, $82E9, $02F8, $82FD, $82F7, $02F2, 50 | $02D0, $82D5, $82DF, $02DA, $82CB, $02CE, $02C4, $82C1, 51 | $8243, $0246, $024C, $8249, $0258, $825D, $8257, $0252, 52 | $0270, $8275, $827F, $027A, $826B, $026E, $0264, $8261, 53 | $0220, $8225, $822F, $022A, $823B, $023E, $0234, $8231, 54 | $8213, $0216, $021C, $8219, $0208, $820D, $8207, $0202 55 | ); 56 | 57 | constructor THasherCRC16_CMS.Create; 58 | begin 59 | inherited Create; 60 | FHash := $FFFF; 61 | Check := 'AEE7'; 62 | end; 63 | 64 | procedure THasherCRC16_CMS.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := (FHash shl 8) xor Table[(Msg^ xor (FHash shr 8)) and $FF]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC16_CMS.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 4); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-16 CMS', THasherCRC16_CMS); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC16_DDS110.pas: -------------------------------------------------------------------------------- 1 | unit CRC16_DDS110; 2 | //CRC-16 DDS-110 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC16_DDS110 = class(THasherBase) 12 | private 13 | FHash: Word; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Word = ( 23 | $0000, $8005, $800F, $000A, $801B, $001E, $0014, $8011, 24 | $8033, $0036, $003C, $8039, $0028, $802D, $8027, $0022, 25 | $8063, $0066, $006C, $8069, $0078, $807D, $8077, $0072, 26 | $0050, $8055, $805F, $005A, $804B, $004E, $0044, $8041, 27 | $80C3, $00C6, $00CC, $80C9, $00D8, $80DD, $80D7, $00D2, 28 | $00F0, $80F5, $80FF, $00FA, $80EB, $00EE, $00E4, $80E1, 29 | $00A0, $80A5, $80AF, $00AA, $80BB, $00BE, $00B4, $80B1, 30 | $8093, $0096, $009C, $8099, $0088, $808D, $8087, $0082, 31 | $8183, $0186, $018C, $8189, $0198, $819D, $8197, $0192, 32 | $01B0, $81B5, $81BF, $01BA, $81AB, $01AE, $01A4, $81A1, 33 | $01E0, $81E5, $81EF, $01EA, $81FB, $01FE, $01F4, $81F1, 34 | $81D3, $01D6, $01DC, $81D9, $01C8, $81CD, $81C7, $01C2, 35 | $0140, $8145, $814F, $014A, $815B, $015E, $0154, $8151, 36 | $8173, $0176, $017C, $8179, $0168, $816D, $8167, $0162, 37 | $8123, $0126, $012C, $8129, $0138, $813D, $8137, $0132, 38 | $0110, $8115, $811F, $011A, $810B, $010E, $0104, $8101, 39 | $8303, $0306, $030C, $8309, $0318, $831D, $8317, $0312, 40 | $0330, $8335, $833F, $033A, $832B, $032E, $0324, $8321, 41 | $0360, $8365, $836F, $036A, $837B, $037E, $0374, $8371, 42 | $8353, $0356, $035C, $8359, $0348, $834D, $8347, $0342, 43 | $03C0, $83C5, $83CF, $03CA, $83DB, $03DE, $03D4, $83D1, 44 | $83F3, $03F6, $03FC, $83F9, $03E8, $83ED, $83E7, $03E2, 45 | $83A3, $03A6, $03AC, $83A9, $03B8, $83BD, $83B7, $03B2, 46 | $0390, $8395, $839F, $039A, $838B, $038E, $0384, $8381, 47 | $0280, $8285, $828F, $028A, $829B, $029E, $0294, $8291, 48 | $82B3, $02B6, $02BC, $82B9, $02A8, $82AD, $82A7, $02A2, 49 | $82E3, $02E6, $02EC, $82E9, $02F8, $82FD, $82F7, $02F2, 50 | $02D0, $82D5, $82DF, $02DA, $82CB, $02CE, $02C4, $82C1, 51 | $8243, $0246, $024C, $8249, $0258, $825D, $8257, $0252, 52 | $0270, $8275, $827F, $027A, $826B, $026E, $0264, $8261, 53 | $0220, $8225, $822F, $022A, $823B, $023E, $0234, $8231, 54 | $8213, $0216, $021C, $8219, $0208, $820D, $8207, $0202 55 | ); 56 | 57 | constructor THasherCRC16_DDS110.Create; 58 | begin 59 | inherited Create; 60 | FHash := $800D; 61 | Check := '9ECF'; 62 | end; 63 | 64 | procedure THasherCRC16_DDS110.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := (FHash shl 8) xor Table[(Msg^ xor (FHash shr 8)) and $FF]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC16_DDS110.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 4); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-16 DDS-110', THasherCRC16_DDS110); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC16_DECTX.pas: -------------------------------------------------------------------------------- 1 | unit CRC16_DECTX; 2 | //CRC-16 DECT-X 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC16_DECTX = class(THasherBase) 12 | private 13 | FHash: Word; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Word = ( 23 | $0000, $0589, $0B12, $0E9B, $1624, $13AD, $1D36, $18BF, 24 | $2C48, $29C1, $275A, $22D3, $3A6C, $3FE5, $317E, $34F7, 25 | $5890, $5D19, $5382, $560B, $4EB4, $4B3D, $45A6, $402F, 26 | $74D8, $7151, $7FCA, $7A43, $62FC, $6775, $69EE, $6C67, 27 | $B120, $B4A9, $BA32, $BFBB, $A704, $A28D, $AC16, $A99F, 28 | $9D68, $98E1, $967A, $93F3, $8B4C, $8EC5, $805E, $85D7, 29 | $E9B0, $EC39, $E2A2, $E72B, $FF94, $FA1D, $F486, $F10F, 30 | $C5F8, $C071, $CEEA, $CB63, $D3DC, $D655, $D8CE, $DD47, 31 | $67C9, $6240, $6CDB, $6952, $71ED, $7464, $7AFF, $7F76, 32 | $4B81, $4E08, $4093, $451A, $5DA5, $582C, $56B7, $533E, 33 | $3F59, $3AD0, $344B, $31C2, $297D, $2CF4, $226F, $27E6, 34 | $1311, $1698, $1803, $1D8A, $0535, $00BC, $0E27, $0BAE, 35 | $D6E9, $D360, $DDFB, $D872, $C0CD, $C544, $CBDF, $CE56, 36 | $FAA1, $FF28, $F1B3, $F43A, $EC85, $E90C, $E797, $E21E, 37 | $8E79, $8BF0, $856B, $80E2, $985D, $9DD4, $934F, $96C6, 38 | $A231, $A7B8, $A923, $ACAA, $B415, $B19C, $BF07, $BA8E, 39 | $CF92, $CA1B, $C480, $C109, $D9B6, $DC3F, $D2A4, $D72D, 40 | $E3DA, $E653, $E8C8, $ED41, $F5FE, $F077, $FEEC, $FB65, 41 | $9702, $928B, $9C10, $9999, $8126, $84AF, $8A34, $8FBD, 42 | $BB4A, $BEC3, $B058, $B5D1, $AD6E, $A8E7, $A67C, $A3F5, 43 | $7EB2, $7B3B, $75A0, $7029, $6896, $6D1F, $6384, $660D, 44 | $52FA, $5773, $59E8, $5C61, $44DE, $4157, $4FCC, $4A45, 45 | $2622, $23AB, $2D30, $28B9, $3006, $358F, $3B14, $3E9D, 46 | $0A6A, $0FE3, $0178, $04F1, $1C4E, $19C7, $175C, $12D5, 47 | $A85B, $ADD2, $A349, $A6C0, $BE7F, $BBF6, $B56D, $B0E4, 48 | $8413, $819A, $8F01, $8A88, $9237, $97BE, $9925, $9CAC, 49 | $F0CB, $F542, $FBD9, $FE50, $E6EF, $E366, $EDFD, $E874, 50 | $DC83, $D90A, $D791, $D218, $CAA7, $CF2E, $C1B5, $C43C, 51 | $197B, $1CF2, $1269, $17E0, $0F5F, $0AD6, $044D, $01C4, 52 | $3533, $30BA, $3E21, $3BA8, $2317, $269E, $2805, $2D8C, 53 | $41EB, $4462, $4AF9, $4F70, $57CF, $5246, $5CDD, $5954, 54 | $6DA3, $682A, $66B1, $6338, $7B87, $7E0E, $7095, $751C 55 | ); 56 | 57 | constructor THasherCRC16_DECTX.Create; 58 | begin 59 | inherited Create; 60 | FHash := $0000; 61 | Check := '007F'; 62 | end; 63 | 64 | procedure THasherCRC16_DECTX.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := (FHash shl 8) xor Table[(Msg^ xor (FHash shr 8)) and $FF]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC16_DECTX.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 4); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-16 DECT-X', THasherCRC16_DECTX); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC16_DNP.pas: -------------------------------------------------------------------------------- 1 | unit CRC16_DNP; 2 | //CRC-16 DNP 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC16_DNP = class(THasherBase) 12 | private 13 | FHash: Word; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Word = ( 23 | $0000, $365E, $6CBC, $5AE2, $D978, $EF26, $B5C4, $839A, 24 | $FF89, $C9D7, $9335, $A56B, $26F1, $10AF, $4A4D, $7C13, 25 | $B26B, $8435, $DED7, $E889, $6B13, $5D4D, $07AF, $31F1, 26 | $4DE2, $7BBC, $215E, $1700, $949A, $A2C4, $F826, $CE78, 27 | $29AF, $1FF1, $4513, $734D, $F0D7, $C689, $9C6B, $AA35, 28 | $D626, $E078, $BA9A, $8CC4, $0F5E, $3900, $63E2, $55BC, 29 | $9BC4, $AD9A, $F778, $C126, $42BC, $74E2, $2E00, $185E, 30 | $644D, $5213, $08F1, $3EAF, $BD35, $8B6B, $D189, $E7D7, 31 | $535E, $6500, $3FE2, $09BC, $8A26, $BC78, $E69A, $D0C4, 32 | $ACD7, $9A89, $C06B, $F635, $75AF, $43F1, $1913, $2F4D, 33 | $E135, $D76B, $8D89, $BBD7, $384D, $0E13, $54F1, $62AF, 34 | $1EBC, $28E2, $7200, $445E, $C7C4, $F19A, $AB78, $9D26, 35 | $7AF1, $4CAF, $164D, $2013, $A389, $95D7, $CF35, $F96B, 36 | $8578, $B326, $E9C4, $DF9A, $5C00, $6A5E, $30BC, $06E2, 37 | $C89A, $FEC4, $A426, $9278, $11E2, $27BC, $7D5E, $4B00, 38 | $3713, $014D, $5BAF, $6DF1, $EE6B, $D835, $82D7, $B489, 39 | $A6BC, $90E2, $CA00, $FC5E, $7FC4, $499A, $1378, $2526, 40 | $5935, $6F6B, $3589, $03D7, $804D, $B613, $ECF1, $DAAF, 41 | $14D7, $2289, $786B, $4E35, $CDAF, $FBF1, $A113, $974D, 42 | $EB5E, $DD00, $87E2, $B1BC, $3226, $0478, $5E9A, $68C4, 43 | $8F13, $B94D, $E3AF, $D5F1, $566B, $6035, $3AD7, $0C89, 44 | $709A, $46C4, $1C26, $2A78, $A9E2, $9FBC, $C55E, $F300, 45 | $3D78, $0B26, $51C4, $679A, $E400, $D25E, $88BC, $BEE2, 46 | $C2F1, $F4AF, $AE4D, $9813, $1B89, $2DD7, $7735, $416B, 47 | $F5E2, $C3BC, $995E, $AF00, $2C9A, $1AC4, $4026, $7678, 48 | $0A6B, $3C35, $66D7, $5089, $D313, $E54D, $BFAF, $89F1, 49 | $4789, $71D7, $2B35, $1D6B, $9EF1, $A8AF, $F24D, $C413, 50 | $B800, $8E5E, $D4BC, $E2E2, $6178, $5726, $0DC4, $3B9A, 51 | $DC4D, $EA13, $B0F1, $86AF, $0535, $336B, $6989, $5FD7, 52 | $23C4, $159A, $4F78, $7926, $FABC, $CCE2, $9600, $A05E, 53 | $6E26, $5878, $029A, $34C4, $B75E, $8100, $DBE2, $EDBC, 54 | $91AF, $A7F1, $FD13, $CB4D, $48D7, $7E89, $246B, $1235 55 | ); 56 | 57 | constructor THasherCRC16_DNP.Create; 58 | begin 59 | inherited Create; 60 | FHash := $0000; 61 | Check := 'EA82'; 62 | end; 63 | 64 | procedure THasherCRC16_DNP.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := (FHash shr 8) xor Table[(FHash xor Msg^) and $FF]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC16_DNP.Final: String; 74 | begin 75 | FHash := FHash xor $FFFF; 76 | Result := IntToHex(FHash, 4); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-16 DNP', THasherCRC16_DNP); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC16_GSM.pas: -------------------------------------------------------------------------------- 1 | unit CRC16_GSM; 2 | //CRC-16 GSM 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC16_GSM = class(THasherBase) 12 | private 13 | FHash: Word; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Word = ( 23 | $0000, $1021, $2042, $3063, $4084, $50A5, $60C6, $70E7, 24 | $8108, $9129, $A14A, $B16B, $C18C, $D1AD, $E1CE, $F1EF, 25 | $1231, $0210, $3273, $2252, $52B5, $4294, $72F7, $62D6, 26 | $9339, $8318, $B37B, $A35A, $D3BD, $C39C, $F3FF, $E3DE, 27 | $2462, $3443, $0420, $1401, $64E6, $74C7, $44A4, $5485, 28 | $A56A, $B54B, $8528, $9509, $E5EE, $F5CF, $C5AC, $D58D, 29 | $3653, $2672, $1611, $0630, $76D7, $66F6, $5695, $46B4, 30 | $B75B, $A77A, $9719, $8738, $F7DF, $E7FE, $D79D, $C7BC, 31 | $48C4, $58E5, $6886, $78A7, $0840, $1861, $2802, $3823, 32 | $C9CC, $D9ED, $E98E, $F9AF, $8948, $9969, $A90A, $B92B, 33 | $5AF5, $4AD4, $7AB7, $6A96, $1A71, $0A50, $3A33, $2A12, 34 | $DBFD, $CBDC, $FBBF, $EB9E, $9B79, $8B58, $BB3B, $AB1A, 35 | $6CA6, $7C87, $4CE4, $5CC5, $2C22, $3C03, $0C60, $1C41, 36 | $EDAE, $FD8F, $CDEC, $DDCD, $AD2A, $BD0B, $8D68, $9D49, 37 | $7E97, $6EB6, $5ED5, $4EF4, $3E13, $2E32, $1E51, $0E70, 38 | $FF9F, $EFBE, $DFDD, $CFFC, $BF1B, $AF3A, $9F59, $8F78, 39 | $9188, $81A9, $B1CA, $A1EB, $D10C, $C12D, $F14E, $E16F, 40 | $1080, $00A1, $30C2, $20E3, $5004, $4025, $7046, $6067, 41 | $83B9, $9398, $A3FB, $B3DA, $C33D, $D31C, $E37F, $F35E, 42 | $02B1, $1290, $22F3, $32D2, $4235, $5214, $6277, $7256, 43 | $B5EA, $A5CB, $95A8, $8589, $F56E, $E54F, $D52C, $C50D, 44 | $34E2, $24C3, $14A0, $0481, $7466, $6447, $5424, $4405, 45 | $A7DB, $B7FA, $8799, $97B8, $E75F, $F77E, $C71D, $D73C, 46 | $26D3, $36F2, $0691, $16B0, $6657, $7676, $4615, $5634, 47 | $D94C, $C96D, $F90E, $E92F, $99C8, $89E9, $B98A, $A9AB, 48 | $5844, $4865, $7806, $6827, $18C0, $08E1, $3882, $28A3, 49 | $CB7D, $DB5C, $EB3F, $FB1E, $8BF9, $9BD8, $ABBB, $BB9A, 50 | $4A75, $5A54, $6A37, $7A16, $0AF1, $1AD0, $2AB3, $3A92, 51 | $FD2E, $ED0F, $DD6C, $CD4D, $BDAA, $AD8B, $9DE8, $8DC9, 52 | $7C26, $6C07, $5C64, $4C45, $3CA2, $2C83, $1CE0, $0CC1, 53 | $EF1F, $FF3E, $CF5D, $DF7C, $AF9B, $BFBA, $8FD9, $9FF8, 54 | $6E17, $7E36, $4E55, $5E74, $2E93, $3EB2, $0ED1, $1EF0 55 | ); 56 | 57 | constructor THasherCRC16_GSM.Create; 58 | begin 59 | inherited Create; 60 | FHash := $0000; 61 | Check := 'CE3C'; 62 | end; 63 | 64 | procedure THasherCRC16_GSM.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := (FHash shl 8) xor Table[(Msg^ xor (FHash shr 8)) and $FF]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC16_GSM.Final: String; 74 | begin 75 | FHash := FHash xor $FFFF; 76 | Result := IntToHex(FHash, 4); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-16 GSM', THasherCRC16_GSM); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC16_KERMIT.pas: -------------------------------------------------------------------------------- 1 | unit CRC16_KERMIT; 2 | //CRC-16 KERMIT 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC16_KERMIT = class(THasherBase) 12 | private 13 | FHash: Word; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Word = ( 23 | $0000, $1189, $2312, $329B, $4624, $57AD, $6536, $74BF, 24 | $8C48, $9DC1, $AF5A, $BED3, $CA6C, $DBE5, $E97E, $F8F7, 25 | $1081, $0108, $3393, $221A, $56A5, $472C, $75B7, $643E, 26 | $9CC9, $8D40, $BFDB, $AE52, $DAED, $CB64, $F9FF, $E876, 27 | $2102, $308B, $0210, $1399, $6726, $76AF, $4434, $55BD, 28 | $AD4A, $BCC3, $8E58, $9FD1, $EB6E, $FAE7, $C87C, $D9F5, 29 | $3183, $200A, $1291, $0318, $77A7, $662E, $54B5, $453C, 30 | $BDCB, $AC42, $9ED9, $8F50, $FBEF, $EA66, $D8FD, $C974, 31 | $4204, $538D, $6116, $709F, $0420, $15A9, $2732, $36BB, 32 | $CE4C, $DFC5, $ED5E, $FCD7, $8868, $99E1, $AB7A, $BAF3, 33 | $5285, $430C, $7197, $601E, $14A1, $0528, $37B3, $263A, 34 | $DECD, $CF44, $FDDF, $EC56, $98E9, $8960, $BBFB, $AA72, 35 | $6306, $728F, $4014, $519D, $2522, $34AB, $0630, $17B9, 36 | $EF4E, $FEC7, $CC5C, $DDD5, $A96A, $B8E3, $8A78, $9BF1, 37 | $7387, $620E, $5095, $411C, $35A3, $242A, $16B1, $0738, 38 | $FFCF, $EE46, $DCDD, $CD54, $B9EB, $A862, $9AF9, $8B70, 39 | $8408, $9581, $A71A, $B693, $C22C, $D3A5, $E13E, $F0B7, 40 | $0840, $19C9, $2B52, $3ADB, $4E64, $5FED, $6D76, $7CFF, 41 | $9489, $8500, $B79B, $A612, $D2AD, $C324, $F1BF, $E036, 42 | $18C1, $0948, $3BD3, $2A5A, $5EE5, $4F6C, $7DF7, $6C7E, 43 | $A50A, $B483, $8618, $9791, $E32E, $F2A7, $C03C, $D1B5, 44 | $2942, $38CB, $0A50, $1BD9, $6F66, $7EEF, $4C74, $5DFD, 45 | $B58B, $A402, $9699, $8710, $F3AF, $E226, $D0BD, $C134, 46 | $39C3, $284A, $1AD1, $0B58, $7FE7, $6E6E, $5CF5, $4D7C, 47 | $C60C, $D785, $E51E, $F497, $8028, $91A1, $A33A, $B2B3, 48 | $4A44, $5BCD, $6956, $78DF, $0C60, $1DE9, $2F72, $3EFB, 49 | $D68D, $C704, $F59F, $E416, $90A9, $8120, $B3BB, $A232, 50 | $5AC5, $4B4C, $79D7, $685E, $1CE1, $0D68, $3FF3, $2E7A, 51 | $E70E, $F687, $C41C, $D595, $A12A, $B0A3, $8238, $93B1, 52 | $6B46, $7ACF, $4854, $59DD, $2D62, $3CEB, $0E70, $1FF9, 53 | $F78F, $E606, $D49D, $C514, $B1AB, $A022, $92B9, $8330, 54 | $7BC7, $6A4E, $58D5, $495C, $3DE3, $2C6A, $1EF1, $0F78 55 | ); 56 | 57 | constructor THasherCRC16_KERMIT.Create; 58 | begin 59 | inherited Create; 60 | FHash := $0000; 61 | Check := '2189'; 62 | end; 63 | 64 | procedure THasherCRC16_KERMIT.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := (FHash shr 8) xor Table[(FHash xor Msg^) and $FF]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC16_KERMIT.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 4); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-16 KERMIT', THasherCRC16_KERMIT); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC16_LJ1200.pas: -------------------------------------------------------------------------------- 1 | unit CRC16_LJ1200; 2 | //CRC-16 LJ1200 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC16_LJ1200 = class(THasherBase) 12 | private 13 | FHash: Word; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Word = ( 23 | $0000, $6F63, $DEC6, $B1A5, $D2EF, $BD8C, $0C29, $634A, 24 | $CABD, $A5DE, $147B, $7B18, $1852, $7731, $C694, $A9F7, 25 | $FA19, $957A, $24DF, $4BBC, $28F6, $4795, $F630, $9953, 26 | $30A4, $5FC7, $EE62, $8101, $E24B, $8D28, $3C8D, $53EE, 27 | $9B51, $F432, $4597, $2AF4, $49BE, $26DD, $9778, $F81B, 28 | $51EC, $3E8F, $8F2A, $E049, $8303, $EC60, $5DC5, $32A6, 29 | $6148, $0E2B, $BF8E, $D0ED, $B3A7, $DCC4, $6D61, $0202, 30 | $ABF5, $C496, $7533, $1A50, $791A, $1679, $A7DC, $C8BF, 31 | $59C1, $36A2, $8707, $E864, $8B2E, $E44D, $55E8, $3A8B, 32 | $937C, $FC1F, $4DBA, $22D9, $4193, $2EF0, $9F55, $F036, 33 | $A3D8, $CCBB, $7D1E, $127D, $7137, $1E54, $AFF1, $C092, 34 | $6965, $0606, $B7A3, $D8C0, $BB8A, $D4E9, $654C, $0A2F, 35 | $C290, $ADF3, $1C56, $7335, $107F, $7F1C, $CEB9, $A1DA, 36 | $082D, $674E, $D6EB, $B988, $DAC2, $B5A1, $0404, $6B67, 37 | $3889, $57EA, $E64F, $892C, $EA66, $8505, $34A0, $5BC3, 38 | $F234, $9D57, $2CF2, $4391, $20DB, $4FB8, $FE1D, $917E, 39 | $B382, $DCE1, $6D44, $0227, $616D, $0E0E, $BFAB, $D0C8, 40 | $793F, $165C, $A7F9, $C89A, $ABD0, $C4B3, $7516, $1A75, 41 | $499B, $26F8, $975D, $F83E, $9B74, $F417, $45B2, $2AD1, 42 | $8326, $EC45, $5DE0, $3283, $51C9, $3EAA, $8F0F, $E06C, 43 | $28D3, $47B0, $F615, $9976, $FA3C, $955F, $24FA, $4B99, 44 | $E26E, $8D0D, $3CA8, $53CB, $3081, $5FE2, $EE47, $8124, 45 | $D2CA, $BDA9, $0C0C, $636F, $0025, $6F46, $DEE3, $B180, 46 | $1877, $7714, $C6B1, $A9D2, $CA98, $A5FB, $145E, $7B3D, 47 | $EA43, $8520, $3485, $5BE6, $38AC, $57CF, $E66A, $8909, 48 | $20FE, $4F9D, $FE38, $915B, $F211, $9D72, $2CD7, $43B4, 49 | $105A, $7F39, $CE9C, $A1FF, $C2B5, $ADD6, $1C73, $7310, 50 | $DAE7, $B584, $0421, $6B42, $0808, $676B, $D6CE, $B9AD, 51 | $7112, $1E71, $AFD4, $C0B7, $A3FD, $CC9E, $7D3B, $1258, 52 | $BBAF, $D4CC, $6569, $0A0A, $6940, $0623, $B786, $D8E5, 53 | $8B0B, $E468, $55CD, $3AAE, $59E4, $3687, $8722, $E841, 54 | $41B6, $2ED5, $9F70, $F013, $9359, $FC3A, $4D9F, $22FC 55 | ); 56 | 57 | constructor THasherCRC16_LJ1200.Create; 58 | begin 59 | inherited Create; 60 | FHash := $0000; 61 | Check := 'BDF4'; 62 | end; 63 | 64 | procedure THasherCRC16_LJ1200.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := (FHash shl 8) xor Table[(Msg^ xor (FHash shr 8)) and $FF]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC16_LJ1200.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 4); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-16 LJ1200', THasherCRC16_LJ1200); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC16_M17.pas: -------------------------------------------------------------------------------- 1 | unit CRC16_M17; 2 | //CRC-16 M17 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC16_M17 = class(THasherBase) 12 | private 13 | FHash: Word; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Word = ( 23 | $0000, $5935, $B26A, $EB5F, $3DE1, $64D4, $8F8B, $D6BE, 24 | $7BC2, $22F7, $C9A8, $909D, $4623, $1F16, $F449, $AD7C, 25 | $F784, $AEB1, $45EE, $1CDB, $CA65, $9350, $780F, $213A, 26 | $8C46, $D573, $3E2C, $6719, $B1A7, $E892, $03CD, $5AF8, 27 | $B63D, $EF08, $0457, $5D62, $8BDC, $D2E9, $39B6, $6083, 28 | $CDFF, $94CA, $7F95, $26A0, $F01E, $A92B, $4274, $1B41, 29 | $41B9, $188C, $F3D3, $AAE6, $7C58, $256D, $CE32, $9707, 30 | $3A7B, $634E, $8811, $D124, $079A, $5EAF, $B5F0, $ECC5, 31 | $354F, $6C7A, $8725, $DE10, $08AE, $519B, $BAC4, $E3F1, 32 | $4E8D, $17B8, $FCE7, $A5D2, $736C, $2A59, $C106, $9833, 33 | $C2CB, $9BFE, $70A1, $2994, $FF2A, $A61F, $4D40, $1475, 34 | $B909, $E03C, $0B63, $5256, $84E8, $DDDD, $3682, $6FB7, 35 | $8372, $DA47, $3118, $682D, $BE93, $E7A6, $0CF9, $55CC, 36 | $F8B0, $A185, $4ADA, $13EF, $C551, $9C64, $773B, $2E0E, 37 | $74F6, $2DC3, $C69C, $9FA9, $4917, $1022, $FB7D, $A248, 38 | $0F34, $5601, $BD5E, $E46B, $32D5, $6BE0, $80BF, $D98A, 39 | $6A9E, $33AB, $D8F4, $81C1, $577F, $0E4A, $E515, $BC20, 40 | $115C, $4869, $A336, $FA03, $2CBD, $7588, $9ED7, $C7E2, 41 | $9D1A, $C42F, $2F70, $7645, $A0FB, $F9CE, $1291, $4BA4, 42 | $E6D8, $BFED, $54B2, $0D87, $DB39, $820C, $6953, $3066, 43 | $DCA3, $8596, $6EC9, $37FC, $E142, $B877, $5328, $0A1D, 44 | $A761, $FE54, $150B, $4C3E, $9A80, $C3B5, $28EA, $71DF, 45 | $2B27, $7212, $994D, $C078, $16C6, $4FF3, $A4AC, $FD99, 46 | $50E5, $09D0, $E28F, $BBBA, $6D04, $3431, $DF6E, $865B, 47 | $5FD1, $06E4, $EDBB, $B48E, $6230, $3B05, $D05A, $896F, 48 | $2413, $7D26, $9679, $CF4C, $19F2, $40C7, $AB98, $F2AD, 49 | $A855, $F160, $1A3F, $430A, $95B4, $CC81, $27DE, $7EEB, 50 | $D397, $8AA2, $61FD, $38C8, $EE76, $B743, $5C1C, $0529, 51 | $E9EC, $B0D9, $5B86, $02B3, $D40D, $8D38, $6667, $3F52, 52 | $922E, $CB1B, $2044, $7971, $AFCF, $F6FA, $1DA5, $4490, 53 | $1E68, $475D, $AC02, $F537, $2389, $7ABC, $91E3, $C8D6, 54 | $65AA, $3C9F, $D7C0, $8EF5, $584B, $017E, $EA21, $B314 55 | ); 56 | 57 | constructor THasherCRC16_M17.Create; 58 | begin 59 | inherited Create; 60 | FHash := $FFFF; 61 | Check := '772B'; 62 | end; 63 | 64 | procedure THasherCRC16_M17.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := (FHash shl 8) xor Table[(Msg^ xor (FHash shr 8)) and $FF]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC16_M17.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 4); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-16 M17', THasherCRC16_M17); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC16_MCRF4XX.pas: -------------------------------------------------------------------------------- 1 | unit CRC16_MCRF4XX; 2 | //CRC-16 MCRF4XX 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC16_MCRF4XX = class(THasherBase) 12 | private 13 | FHash: Word; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Word = ( 23 | $0000, $1189, $2312, $329B, $4624, $57AD, $6536, $74BF, 24 | $8C48, $9DC1, $AF5A, $BED3, $CA6C, $DBE5, $E97E, $F8F7, 25 | $1081, $0108, $3393, $221A, $56A5, $472C, $75B7, $643E, 26 | $9CC9, $8D40, $BFDB, $AE52, $DAED, $CB64, $F9FF, $E876, 27 | $2102, $308B, $0210, $1399, $6726, $76AF, $4434, $55BD, 28 | $AD4A, $BCC3, $8E58, $9FD1, $EB6E, $FAE7, $C87C, $D9F5, 29 | $3183, $200A, $1291, $0318, $77A7, $662E, $54B5, $453C, 30 | $BDCB, $AC42, $9ED9, $8F50, $FBEF, $EA66, $D8FD, $C974, 31 | $4204, $538D, $6116, $709F, $0420, $15A9, $2732, $36BB, 32 | $CE4C, $DFC5, $ED5E, $FCD7, $8868, $99E1, $AB7A, $BAF3, 33 | $5285, $430C, $7197, $601E, $14A1, $0528, $37B3, $263A, 34 | $DECD, $CF44, $FDDF, $EC56, $98E9, $8960, $BBFB, $AA72, 35 | $6306, $728F, $4014, $519D, $2522, $34AB, $0630, $17B9, 36 | $EF4E, $FEC7, $CC5C, $DDD5, $A96A, $B8E3, $8A78, $9BF1, 37 | $7387, $620E, $5095, $411C, $35A3, $242A, $16B1, $0738, 38 | $FFCF, $EE46, $DCDD, $CD54, $B9EB, $A862, $9AF9, $8B70, 39 | $8408, $9581, $A71A, $B693, $C22C, $D3A5, $E13E, $F0B7, 40 | $0840, $19C9, $2B52, $3ADB, $4E64, $5FED, $6D76, $7CFF, 41 | $9489, $8500, $B79B, $A612, $D2AD, $C324, $F1BF, $E036, 42 | $18C1, $0948, $3BD3, $2A5A, $5EE5, $4F6C, $7DF7, $6C7E, 43 | $A50A, $B483, $8618, $9791, $E32E, $F2A7, $C03C, $D1B5, 44 | $2942, $38CB, $0A50, $1BD9, $6F66, $7EEF, $4C74, $5DFD, 45 | $B58B, $A402, $9699, $8710, $F3AF, $E226, $D0BD, $C134, 46 | $39C3, $284A, $1AD1, $0B58, $7FE7, $6E6E, $5CF5, $4D7C, 47 | $C60C, $D785, $E51E, $F497, $8028, $91A1, $A33A, $B2B3, 48 | $4A44, $5BCD, $6956, $78DF, $0C60, $1DE9, $2F72, $3EFB, 49 | $D68D, $C704, $F59F, $E416, $90A9, $8120, $B3BB, $A232, 50 | $5AC5, $4B4C, $79D7, $685E, $1CE1, $0D68, $3FF3, $2E7A, 51 | $E70E, $F687, $C41C, $D595, $A12A, $B0A3, $8238, $93B1, 52 | $6B46, $7ACF, $4854, $59DD, $2D62, $3CEB, $0E70, $1FF9, 53 | $F78F, $E606, $D49D, $C514, $B1AB, $A022, $92B9, $8330, 54 | $7BC7, $6A4E, $58D5, $495C, $3DE3, $2C6A, $1EF1, $0F78 55 | ); 56 | 57 | constructor THasherCRC16_MCRF4XX.Create; 58 | begin 59 | inherited Create; 60 | FHash := $FFFF; 61 | Check := '6F91'; 62 | end; 63 | 64 | procedure THasherCRC16_MCRF4XX.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := (FHash shr 8) xor Table[(FHash xor Msg^) and $FF]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC16_MCRF4XX.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 4); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-16 MCRF4XX', THasherCRC16_MCRF4XX); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC16_MODBUS.pas: -------------------------------------------------------------------------------- 1 | unit CRC16_MODBUS; 2 | //CRC-16 MODBUS 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC16_MODBUS = class(THasherBase) 12 | private 13 | FHash: Word; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Word = ( 23 | $0000, $C0C1, $C181, $0140, $C301, $03C0, $0280, $C241, 24 | $C601, $06C0, $0780, $C741, $0500, $C5C1, $C481, $0440, 25 | $CC01, $0CC0, $0D80, $CD41, $0F00, $CFC1, $CE81, $0E40, 26 | $0A00, $CAC1, $CB81, $0B40, $C901, $09C0, $0880, $C841, 27 | $D801, $18C0, $1980, $D941, $1B00, $DBC1, $DA81, $1A40, 28 | $1E00, $DEC1, $DF81, $1F40, $DD01, $1DC0, $1C80, $DC41, 29 | $1400, $D4C1, $D581, $1540, $D701, $17C0, $1680, $D641, 30 | $D201, $12C0, $1380, $D341, $1100, $D1C1, $D081, $1040, 31 | $F001, $30C0, $3180, $F141, $3300, $F3C1, $F281, $3240, 32 | $3600, $F6C1, $F781, $3740, $F501, $35C0, $3480, $F441, 33 | $3C00, $FCC1, $FD81, $3D40, $FF01, $3FC0, $3E80, $FE41, 34 | $FA01, $3AC0, $3B80, $FB41, $3900, $F9C1, $F881, $3840, 35 | $2800, $E8C1, $E981, $2940, $EB01, $2BC0, $2A80, $EA41, 36 | $EE01, $2EC0, $2F80, $EF41, $2D00, $EDC1, $EC81, $2C40, 37 | $E401, $24C0, $2580, $E541, $2700, $E7C1, $E681, $2640, 38 | $2200, $E2C1, $E381, $2340, $E101, $21C0, $2080, $E041, 39 | $A001, $60C0, $6180, $A141, $6300, $A3C1, $A281, $6240, 40 | $6600, $A6C1, $A781, $6740, $A501, $65C0, $6480, $A441, 41 | $6C00, $ACC1, $AD81, $6D40, $AF01, $6FC0, $6E80, $AE41, 42 | $AA01, $6AC0, $6B80, $AB41, $6900, $A9C1, $A881, $6840, 43 | $7800, $B8C1, $B981, $7940, $BB01, $7BC0, $7A80, $BA41, 44 | $BE01, $7EC0, $7F80, $BF41, $7D00, $BDC1, $BC81, $7C40, 45 | $B401, $74C0, $7580, $B541, $7700, $B7C1, $B681, $7640, 46 | $7200, $B2C1, $B381, $7340, $B101, $71C0, $7080, $B041, 47 | $5000, $90C1, $9181, $5140, $9301, $53C0, $5280, $9241, 48 | $9601, $56C0, $5780, $9741, $5500, $95C1, $9481, $5440, 49 | $9C01, $5CC0, $5D80, $9D41, $5F00, $9FC1, $9E81, $5E40, 50 | $5A00, $9AC1, $9B81, $5B40, $9901, $59C0, $5880, $9841, 51 | $8801, $48C0, $4980, $8941, $4B00, $8BC1, $8A81, $4A40, 52 | $4E00, $8EC1, $8F81, $4F40, $8D01, $4DC0, $4C80, $8C41, 53 | $4400, $84C1, $8581, $4540, $8701, $47C0, $4680, $8641, 54 | $8201, $42C0, $4380, $8341, $4100, $81C1, $8081, $4040 55 | ); 56 | 57 | constructor THasherCRC16_MODBUS.Create; 58 | begin 59 | inherited Create; 60 | FHash := $FFFF; 61 | Check := '4B37'; 62 | end; 63 | 64 | procedure THasherCRC16_MODBUS.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := (FHash shr 8) xor Table[(FHash xor Msg^) and $FF]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC16_MODBUS.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 4); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-16 MODBUS', THasherCRC16_MODBUS); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC16_NRSC5.pas: -------------------------------------------------------------------------------- 1 | unit CRC16_NRSC5; 2 | //CRC-16 NRSC-5 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC16_NRSC5 = class(THasherBase) 12 | private 13 | FHash: Word; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Word = ( 23 | $0000, $35A4, $6B48, $5EEC, $D690, $E334, $BDD8, $887C, 24 | $0D01, $38A5, $6649, $53ED, $DB91, $EE35, $B0D9, $857D, 25 | $1A02, $2FA6, $714A, $44EE, $CC92, $F936, $A7DA, $927E, 26 | $1703, $22A7, $7C4B, $49EF, $C193, $F437, $AADB, $9F7F, 27 | $3404, $01A0, $5F4C, $6AE8, $E294, $D730, $89DC, $BC78, 28 | $3905, $0CA1, $524D, $67E9, $EF95, $DA31, $84DD, $B179, 29 | $2E06, $1BA2, $454E, $70EA, $F896, $CD32, $93DE, $A67A, 30 | $2307, $16A3, $484F, $7DEB, $F597, $C033, $9EDF, $AB7B, 31 | $6808, $5DAC, $0340, $36E4, $BE98, $8B3C, $D5D0, $E074, 32 | $6509, $50AD, $0E41, $3BE5, $B399, $863D, $D8D1, $ED75, 33 | $720A, $47AE, $1942, $2CE6, $A49A, $913E, $CFD2, $FA76, 34 | $7F0B, $4AAF, $1443, $21E7, $A99B, $9C3F, $C2D3, $F777, 35 | $5C0C, $69A8, $3744, $02E0, $8A9C, $BF38, $E1D4, $D470, 36 | $510D, $64A9, $3A45, $0FE1, $879D, $B239, $ECD5, $D971, 37 | $460E, $73AA, $2D46, $18E2, $909E, $A53A, $FBD6, $CE72, 38 | $4B0F, $7EAB, $2047, $15E3, $9D9F, $A83B, $F6D7, $C373, 39 | $D010, $E5B4, $BB58, $8EFC, $0680, $3324, $6DC8, $586C, 40 | $DD11, $E8B5, $B659, $83FD, $0B81, $3E25, $60C9, $556D, 41 | $CA12, $FFB6, $A15A, $94FE, $1C82, $2926, $77CA, $426E, 42 | $C713, $F2B7, $AC5B, $99FF, $1183, $2427, $7ACB, $4F6F, 43 | $E414, $D1B0, $8F5C, $BAF8, $3284, $0720, $59CC, $6C68, 44 | $E915, $DCB1, $825D, $B7F9, $3F85, $0A21, $54CD, $6169, 45 | $FE16, $CBB2, $955E, $A0FA, $2886, $1D22, $43CE, $766A, 46 | $F317, $C6B3, $985F, $ADFB, $2587, $1023, $4ECF, $7B6B, 47 | $B818, $8DBC, $D350, $E6F4, $6E88, $5B2C, $05C0, $3064, 48 | $B519, $80BD, $DE51, $EBF5, $6389, $562D, $08C1, $3D65, 49 | $A21A, $97BE, $C952, $FCF6, $748A, $412E, $1FC2, $2A66, 50 | $AF1B, $9ABF, $C453, $F1F7, $798B, $4C2F, $12C3, $2767, 51 | $8C1C, $B9B8, $E754, $D2F0, $5A8C, $6F28, $31C4, $0460, 52 | $811D, $B4B9, $EA55, $DFF1, $578D, $6229, $3CC5, $0961, 53 | $961E, $A3BA, $FD56, $C8F2, $408E, $752A, $2BC6, $1E62, 54 | $9B1F, $AEBB, $F057, $C5F3, $4D8F, $782B, $26C7, $1363 55 | ); 56 | 57 | constructor THasherCRC16_NRSC5.Create; 58 | begin 59 | inherited Create; 60 | FHash := $FFFF; 61 | Check := 'A066'; 62 | end; 63 | 64 | procedure THasherCRC16_NRSC5.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := (FHash shr 8) xor Table[(FHash xor Msg^) and $FF]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC16_NRSC5.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 4); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-16 NRSC-5', THasherCRC16_NRSC5); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC16_RIELLO.pas: -------------------------------------------------------------------------------- 1 | unit CRC16_RIELLO; 2 | //CRC-16 RIELLO 3 | //Author: domasz 4 | //Last Update: 2022-11-22 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC16_RIELLO = class(THasherBase) 12 | private 13 | FHash: Word; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Word = ( 23 | $0000, $1189, $2312, $329B, $4624, $57AD, $6536, $74BF, 24 | $8C48, $9DC1, $AF5A, $BED3, $CA6C, $DBE5, $E97E, $F8F7, 25 | $1081, $0108, $3393, $221A, $56A5, $472C, $75B7, $643E, 26 | $9CC9, $8D40, $BFDB, $AE52, $DAED, $CB64, $F9FF, $E876, 27 | $2102, $308B, $0210, $1399, $6726, $76AF, $4434, $55BD, 28 | $AD4A, $BCC3, $8E58, $9FD1, $EB6E, $FAE7, $C87C, $D9F5, 29 | $3183, $200A, $1291, $0318, $77A7, $662E, $54B5, $453C, 30 | $BDCB, $AC42, $9ED9, $8F50, $FBEF, $EA66, $D8FD, $C974, 31 | $4204, $538D, $6116, $709F, $0420, $15A9, $2732, $36BB, 32 | $CE4C, $DFC5, $ED5E, $FCD7, $8868, $99E1, $AB7A, $BAF3, 33 | $5285, $430C, $7197, $601E, $14A1, $0528, $37B3, $263A, 34 | $DECD, $CF44, $FDDF, $EC56, $98E9, $8960, $BBFB, $AA72, 35 | $6306, $728F, $4014, $519D, $2522, $34AB, $0630, $17B9, 36 | $EF4E, $FEC7, $CC5C, $DDD5, $A96A, $B8E3, $8A78, $9BF1, 37 | $7387, $620E, $5095, $411C, $35A3, $242A, $16B1, $0738, 38 | $FFCF, $EE46, $DCDD, $CD54, $B9EB, $A862, $9AF9, $8B70, 39 | $8408, $9581, $A71A, $B693, $C22C, $D3A5, $E13E, $F0B7, 40 | $0840, $19C9, $2B52, $3ADB, $4E64, $5FED, $6D76, $7CFF, 41 | $9489, $8500, $B79B, $A612, $D2AD, $C324, $F1BF, $E036, 42 | $18C1, $0948, $3BD3, $2A5A, $5EE5, $4F6C, $7DF7, $6C7E, 43 | $A50A, $B483, $8618, $9791, $E32E, $F2A7, $C03C, $D1B5, 44 | $2942, $38CB, $0A50, $1BD9, $6F66, $7EEF, $4C74, $5DFD, 45 | $B58B, $A402, $9699, $8710, $F3AF, $E226, $D0BD, $C134, 46 | $39C3, $284A, $1AD1, $0B58, $7FE7, $6E6E, $5CF5, $4D7C, 47 | $C60C, $D785, $E51E, $F497, $8028, $91A1, $A33A, $B2B3, 48 | $4A44, $5BCD, $6956, $78DF, $0C60, $1DE9, $2F72, $3EFB, 49 | $D68D, $C704, $F59F, $E416, $90A9, $8120, $B3BB, $A232, 50 | $5AC5, $4B4C, $79D7, $685E, $1CE1, $0D68, $3FF3, $2E7A, 51 | $E70E, $F687, $C41C, $D595, $A12A, $B0A3, $8238, $93B1, 52 | $6B46, $7ACF, $4854, $59DD, $2D62, $3CEB, $0E70, $1FF9, 53 | $F78F, $E606, $D49D, $C514, $B1AB, $A022, $92B9, $8330, 54 | $7BC7, $6A4E, $58D5, $495C, $3DE3, $2C6A, $1EF1, $0F78 55 | ); 56 | 57 | constructor THasherCRC16_RIELLO.Create; 58 | begin 59 | inherited Create; 60 | Check := '63D0'; 61 | FHash := $554D; 62 | end; 63 | 64 | procedure THasherCRC16_RIELLO.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := (FHash shr 8) xor Table[(FHash xor Msg^) and $FF]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC16_RIELLO.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 4); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-16 RIELLO', THasherCRC16_RIELLO); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC16_T10DIF.pas: -------------------------------------------------------------------------------- 1 | unit CRC16_T10DIF; 2 | //CRC-16 T10-DIF 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC16_T10DIF = class(THasherBase) 12 | private 13 | FHash: Word; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Word = ( 23 | $0000, $8BB7, $9CD9, $176E, $B205, $39B2, $2EDC, $A56B, 24 | $EFBD, $640A, $7364, $F8D3, $5DB8, $D60F, $C161, $4AD6, 25 | $54CD, $DF7A, $C814, $43A3, $E6C8, $6D7F, $7A11, $F1A6, 26 | $BB70, $30C7, $27A9, $AC1E, $0975, $82C2, $95AC, $1E1B, 27 | $A99A, $222D, $3543, $BEF4, $1B9F, $9028, $8746, $0CF1, 28 | $4627, $CD90, $DAFE, $5149, $F422, $7F95, $68FB, $E34C, 29 | $FD57, $76E0, $618E, $EA39, $4F52, $C4E5, $D38B, $583C, 30 | $12EA, $995D, $8E33, $0584, $A0EF, $2B58, $3C36, $B781, 31 | $D883, $5334, $445A, $CFED, $6A86, $E131, $F65F, $7DE8, 32 | $373E, $BC89, $ABE7, $2050, $853B, $0E8C, $19E2, $9255, 33 | $8C4E, $07F9, $1097, $9B20, $3E4B, $B5FC, $A292, $2925, 34 | $63F3, $E844, $FF2A, $749D, $D1F6, $5A41, $4D2F, $C698, 35 | $7119, $FAAE, $EDC0, $6677, $C31C, $48AB, $5FC5, $D472, 36 | $9EA4, $1513, $027D, $89CA, $2CA1, $A716, $B078, $3BCF, 37 | $25D4, $AE63, $B90D, $32BA, $97D1, $1C66, $0B08, $80BF, 38 | $CA69, $41DE, $56B0, $DD07, $786C, $F3DB, $E4B5, $6F02, 39 | $3AB1, $B106, $A668, $2DDF, $88B4, $0303, $146D, $9FDA, 40 | $D50C, $5EBB, $49D5, $C262, $6709, $ECBE, $FBD0, $7067, 41 | $6E7C, $E5CB, $F2A5, $7912, $DC79, $57CE, $40A0, $CB17, 42 | $81C1, $0A76, $1D18, $96AF, $33C4, $B873, $AF1D, $24AA, 43 | $932B, $189C, $0FF2, $8445, $212E, $AA99, $BDF7, $3640, 44 | $7C96, $F721, $E04F, $6BF8, $CE93, $4524, $524A, $D9FD, 45 | $C7E6, $4C51, $5B3F, $D088, $75E3, $FE54, $E93A, $628D, 46 | $285B, $A3EC, $B482, $3F35, $9A5E, $11E9, $0687, $8D30, 47 | $E232, $6985, $7EEB, $F55C, $5037, $DB80, $CCEE, $4759, 48 | $0D8F, $8638, $9156, $1AE1, $BF8A, $343D, $2353, $A8E4, 49 | $B6FF, $3D48, $2A26, $A191, $04FA, $8F4D, $9823, $1394, 50 | $5942, $D2F5, $C59B, $4E2C, $EB47, $60F0, $779E, $FC29, 51 | $4BA8, $C01F, $D771, $5CC6, $F9AD, $721A, $6574, $EEC3, 52 | $A415, $2FA2, $38CC, $B37B, $1610, $9DA7, $8AC9, $017E, 53 | $1F65, $94D2, $83BC, $080B, $AD60, $26D7, $31B9, $BA0E, 54 | $F0D8, $7B6F, $6C01, $E7B6, $42DD, $C96A, $DE04, $55B3 55 | ); 56 | 57 | constructor THasherCRC16_T10DIF.Create; 58 | begin 59 | inherited Create; 60 | FHash := $0000; 61 | Check := 'D0DB'; 62 | end; 63 | 64 | procedure THasherCRC16_T10DIF.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := (FHash shl 8) xor Table[(Msg^ xor (FHash shr 8)) and $FF]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC16_T10DIF.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 4); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-16 T10-DIF', THasherCRC16_T10DIF); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC16_TMS37157.pas: -------------------------------------------------------------------------------- 1 | unit CRC16_TMS37157; 2 | //CRC-16 TMS37157 3 | //Author: domasz 4 | //Last Update: 2022-11-22 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC16_TMS37157 = class(THasherBase) 12 | private 13 | FHash: Word; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Word = ( 23 | $0000, $1189, $2312, $329B, $4624, $57AD, $6536, $74BF, 24 | $8C48, $9DC1, $AF5A, $BED3, $CA6C, $DBE5, $E97E, $F8F7, 25 | $1081, $0108, $3393, $221A, $56A5, $472C, $75B7, $643E, 26 | $9CC9, $8D40, $BFDB, $AE52, $DAED, $CB64, $F9FF, $E876, 27 | $2102, $308B, $0210, $1399, $6726, $76AF, $4434, $55BD, 28 | $AD4A, $BCC3, $8E58, $9FD1, $EB6E, $FAE7, $C87C, $D9F5, 29 | $3183, $200A, $1291, $0318, $77A7, $662E, $54B5, $453C, 30 | $BDCB, $AC42, $9ED9, $8F50, $FBEF, $EA66, $D8FD, $C974, 31 | $4204, $538D, $6116, $709F, $0420, $15A9, $2732, $36BB, 32 | $CE4C, $DFC5, $ED5E, $FCD7, $8868, $99E1, $AB7A, $BAF3, 33 | $5285, $430C, $7197, $601E, $14A1, $0528, $37B3, $263A, 34 | $DECD, $CF44, $FDDF, $EC56, $98E9, $8960, $BBFB, $AA72, 35 | $6306, $728F, $4014, $519D, $2522, $34AB, $0630, $17B9, 36 | $EF4E, $FEC7, $CC5C, $DDD5, $A96A, $B8E3, $8A78, $9BF1, 37 | $7387, $620E, $5095, $411C, $35A3, $242A, $16B1, $0738, 38 | $FFCF, $EE46, $DCDD, $CD54, $B9EB, $A862, $9AF9, $8B70, 39 | $8408, $9581, $A71A, $B693, $C22C, $D3A5, $E13E, $F0B7, 40 | $0840, $19C9, $2B52, $3ADB, $4E64, $5FED, $6D76, $7CFF, 41 | $9489, $8500, $B79B, $A612, $D2AD, $C324, $F1BF, $E036, 42 | $18C1, $0948, $3BD3, $2A5A, $5EE5, $4F6C, $7DF7, $6C7E, 43 | $A50A, $B483, $8618, $9791, $E32E, $F2A7, $C03C, $D1B5, 44 | $2942, $38CB, $0A50, $1BD9, $6F66, $7EEF, $4C74, $5DFD, 45 | $B58B, $A402, $9699, $8710, $F3AF, $E226, $D0BD, $C134, 46 | $39C3, $284A, $1AD1, $0B58, $7FE7, $6E6E, $5CF5, $4D7C, 47 | $C60C, $D785, $E51E, $F497, $8028, $91A1, $A33A, $B2B3, 48 | $4A44, $5BCD, $6956, $78DF, $0C60, $1DE9, $2F72, $3EFB, 49 | $D68D, $C704, $F59F, $E416, $90A9, $8120, $B3BB, $A232, 50 | $5AC5, $4B4C, $79D7, $685E, $1CE1, $0D68, $3FF3, $2E7A, 51 | $E70E, $F687, $C41C, $D595, $A12A, $B0A3, $8238, $93B1, 52 | $6B46, $7ACF, $4854, $59DD, $2D62, $3CEB, $0E70, $1FF9, 53 | $F78F, $E606, $D49D, $C514, $B1AB, $A022, $92B9, $8330, 54 | $7BC7, $6A4E, $58D5, $495C, $3DE3, $2C6A, $1EF1, $0F78 55 | ); 56 | 57 | constructor THasherCRC16_TMS37157.Create; 58 | begin 59 | inherited Create; 60 | Check := '26B1'; 61 | FHash := $3791; 62 | end; 63 | 64 | procedure THasherCRC16_TMS37157.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := (FHash shr 8) xor Table[(FHash xor Msg^) and $FF]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC16_TMS37157.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 4); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-16 TMS37157', THasherCRC16_TMS37157); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC16_UMTS.pas: -------------------------------------------------------------------------------- 1 | unit CRC16_UMTS; 2 | //CRC-16 UMTS 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC16_UMTS = class(THasherBase) 12 | private 13 | FHash: Word; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Word = ( 23 | $0000, $8005, $800F, $000A, $801B, $001E, $0014, $8011, 24 | $8033, $0036, $003C, $8039, $0028, $802D, $8027, $0022, 25 | $8063, $0066, $006C, $8069, $0078, $807D, $8077, $0072, 26 | $0050, $8055, $805F, $005A, $804B, $004E, $0044, $8041, 27 | $80C3, $00C6, $00CC, $80C9, $00D8, $80DD, $80D7, $00D2, 28 | $00F0, $80F5, $80FF, $00FA, $80EB, $00EE, $00E4, $80E1, 29 | $00A0, $80A5, $80AF, $00AA, $80BB, $00BE, $00B4, $80B1, 30 | $8093, $0096, $009C, $8099, $0088, $808D, $8087, $0082, 31 | $8183, $0186, $018C, $8189, $0198, $819D, $8197, $0192, 32 | $01B0, $81B5, $81BF, $01BA, $81AB, $01AE, $01A4, $81A1, 33 | $01E0, $81E5, $81EF, $01EA, $81FB, $01FE, $01F4, $81F1, 34 | $81D3, $01D6, $01DC, $81D9, $01C8, $81CD, $81C7, $01C2, 35 | $0140, $8145, $814F, $014A, $815B, $015E, $0154, $8151, 36 | $8173, $0176, $017C, $8179, $0168, $816D, $8167, $0162, 37 | $8123, $0126, $012C, $8129, $0138, $813D, $8137, $0132, 38 | $0110, $8115, $811F, $011A, $810B, $010E, $0104, $8101, 39 | $8303, $0306, $030C, $8309, $0318, $831D, $8317, $0312, 40 | $0330, $8335, $833F, $033A, $832B, $032E, $0324, $8321, 41 | $0360, $8365, $836F, $036A, $837B, $037E, $0374, $8371, 42 | $8353, $0356, $035C, $8359, $0348, $834D, $8347, $0342, 43 | $03C0, $83C5, $83CF, $03CA, $83DB, $03DE, $03D4, $83D1, 44 | $83F3, $03F6, $03FC, $83F9, $03E8, $83ED, $83E7, $03E2, 45 | $83A3, $03A6, $03AC, $83A9, $03B8, $83BD, $83B7, $03B2, 46 | $0390, $8395, $839F, $039A, $838B, $038E, $0384, $8381, 47 | $0280, $8285, $828F, $028A, $829B, $029E, $0294, $8291, 48 | $82B3, $02B6, $02BC, $82B9, $02A8, $82AD, $82A7, $02A2, 49 | $82E3, $02E6, $02EC, $82E9, $02F8, $82FD, $82F7, $02F2, 50 | $02D0, $82D5, $82DF, $02DA, $82CB, $02CE, $02C4, $82C1, 51 | $8243, $0246, $024C, $8249, $0258, $825D, $8257, $0252, 52 | $0270, $8275, $827F, $027A, $826B, $026E, $0264, $8261, 53 | $0220, $8225, $822F, $022A, $823B, $023E, $0234, $8231, 54 | $8213, $0216, $021C, $8219, $0208, $820D, $8207, $0202 55 | ); 56 | 57 | constructor THasherCRC16_UMTS.Create; 58 | begin 59 | inherited Create; 60 | FHash := $0000; 61 | Check := 'FEE8'; 62 | end; 63 | 64 | procedure THasherCRC16_UMTS.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := (FHash shl 8) xor Table[(Msg^ xor (FHash shr 8)) and $FF]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC16_UMTS.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 4); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-16 UMTS', THasherCRC16_UMTS); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC16_USB.pas: -------------------------------------------------------------------------------- 1 | unit CRC16_USB; 2 | //CRC-16 USB 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC16_USB = class(THasherBase) 12 | private 13 | FHash: Word; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Word = ( 23 | $0000, $C0C1, $C181, $0140, $C301, $03C0, $0280, $C241, 24 | $C601, $06C0, $0780, $C741, $0500, $C5C1, $C481, $0440, 25 | $CC01, $0CC0, $0D80, $CD41, $0F00, $CFC1, $CE81, $0E40, 26 | $0A00, $CAC1, $CB81, $0B40, $C901, $09C0, $0880, $C841, 27 | $D801, $18C0, $1980, $D941, $1B00, $DBC1, $DA81, $1A40, 28 | $1E00, $DEC1, $DF81, $1F40, $DD01, $1DC0, $1C80, $DC41, 29 | $1400, $D4C1, $D581, $1540, $D701, $17C0, $1680, $D641, 30 | $D201, $12C0, $1380, $D341, $1100, $D1C1, $D081, $1040, 31 | $F001, $30C0, $3180, $F141, $3300, $F3C1, $F281, $3240, 32 | $3600, $F6C1, $F781, $3740, $F501, $35C0, $3480, $F441, 33 | $3C00, $FCC1, $FD81, $3D40, $FF01, $3FC0, $3E80, $FE41, 34 | $FA01, $3AC0, $3B80, $FB41, $3900, $F9C1, $F881, $3840, 35 | $2800, $E8C1, $E981, $2940, $EB01, $2BC0, $2A80, $EA41, 36 | $EE01, $2EC0, $2F80, $EF41, $2D00, $EDC1, $EC81, $2C40, 37 | $E401, $24C0, $2580, $E541, $2700, $E7C1, $E681, $2640, 38 | $2200, $E2C1, $E381, $2340, $E101, $21C0, $2080, $E041, 39 | $A001, $60C0, $6180, $A141, $6300, $A3C1, $A281, $6240, 40 | $6600, $A6C1, $A781, $6740, $A501, $65C0, $6480, $A441, 41 | $6C00, $ACC1, $AD81, $6D40, $AF01, $6FC0, $6E80, $AE41, 42 | $AA01, $6AC0, $6B80, $AB41, $6900, $A9C1, $A881, $6840, 43 | $7800, $B8C1, $B981, $7940, $BB01, $7BC0, $7A80, $BA41, 44 | $BE01, $7EC0, $7F80, $BF41, $7D00, $BDC1, $BC81, $7C40, 45 | $B401, $74C0, $7580, $B541, $7700, $B7C1, $B681, $7640, 46 | $7200, $B2C1, $B381, $7340, $B101, $71C0, $7080, $B041, 47 | $5000, $90C1, $9181, $5140, $9301, $53C0, $5280, $9241, 48 | $9601, $56C0, $5780, $9741, $5500, $95C1, $9481, $5440, 49 | $9C01, $5CC0, $5D80, $9D41, $5F00, $9FC1, $9E81, $5E40, 50 | $5A00, $9AC1, $9B81, $5B40, $9901, $59C0, $5880, $9841, 51 | $8801, $48C0, $4980, $8941, $4B00, $8BC1, $8A81, $4A40, 52 | $4E00, $8EC1, $8F81, $4F40, $8D01, $4DC0, $4C80, $8C41, 53 | $4400, $84C1, $8581, $4540, $8701, $47C0, $4680, $8641, 54 | $8201, $42C0, $4380, $8341, $4100, $81C1, $8081, $4040 55 | ); 56 | 57 | constructor THasherCRC16_USB.Create; 58 | begin 59 | inherited Create; 60 | FHash := $FFFF; 61 | Check := 'B4C8'; 62 | end; 63 | 64 | procedure THasherCRC16_USB.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := (FHash shr 8) xor Table[(FHash xor Msg^) and $FF]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC16_USB.Final: String; 74 | begin 75 | FHash := FHash xor $FFFF; 76 | Result := IntToHex(FHash, 4); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-16 USB', THasherCRC16_USB); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC16_XMODEM.pas: -------------------------------------------------------------------------------- 1 | unit CRC16_XMODEM; 2 | //CRC-16 XMODEM 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC16_XMODEM = class(THasherBase) 12 | private 13 | FHash: Word; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Word = ( 23 | $0000, $1021, $2042, $3063, $4084, $50A5, $60C6, $70E7, 24 | $8108, $9129, $A14A, $B16B, $C18C, $D1AD, $E1CE, $F1EF, 25 | $1231, $0210, $3273, $2252, $52B5, $4294, $72F7, $62D6, 26 | $9339, $8318, $B37B, $A35A, $D3BD, $C39C, $F3FF, $E3DE, 27 | $2462, $3443, $0420, $1401, $64E6, $74C7, $44A4, $5485, 28 | $A56A, $B54B, $8528, $9509, $E5EE, $F5CF, $C5AC, $D58D, 29 | $3653, $2672, $1611, $0630, $76D7, $66F6, $5695, $46B4, 30 | $B75B, $A77A, $9719, $8738, $F7DF, $E7FE, $D79D, $C7BC, 31 | $48C4, $58E5, $6886, $78A7, $0840, $1861, $2802, $3823, 32 | $C9CC, $D9ED, $E98E, $F9AF, $8948, $9969, $A90A, $B92B, 33 | $5AF5, $4AD4, $7AB7, $6A96, $1A71, $0A50, $3A33, $2A12, 34 | $DBFD, $CBDC, $FBBF, $EB9E, $9B79, $8B58, $BB3B, $AB1A, 35 | $6CA6, $7C87, $4CE4, $5CC5, $2C22, $3C03, $0C60, $1C41, 36 | $EDAE, $FD8F, $CDEC, $DDCD, $AD2A, $BD0B, $8D68, $9D49, 37 | $7E97, $6EB6, $5ED5, $4EF4, $3E13, $2E32, $1E51, $0E70, 38 | $FF9F, $EFBE, $DFDD, $CFFC, $BF1B, $AF3A, $9F59, $8F78, 39 | $9188, $81A9, $B1CA, $A1EB, $D10C, $C12D, $F14E, $E16F, 40 | $1080, $00A1, $30C2, $20E3, $5004, $4025, $7046, $6067, 41 | $83B9, $9398, $A3FB, $B3DA, $C33D, $D31C, $E37F, $F35E, 42 | $02B1, $1290, $22F3, $32D2, $4235, $5214, $6277, $7256, 43 | $B5EA, $A5CB, $95A8, $8589, $F56E, $E54F, $D52C, $C50D, 44 | $34E2, $24C3, $14A0, $0481, $7466, $6447, $5424, $4405, 45 | $A7DB, $B7FA, $8799, $97B8, $E75F, $F77E, $C71D, $D73C, 46 | $26D3, $36F2, $0691, $16B0, $6657, $7676, $4615, $5634, 47 | $D94C, $C96D, $F90E, $E92F, $99C8, $89E9, $B98A, $A9AB, 48 | $5844, $4865, $7806, $6827, $18C0, $08E1, $3882, $28A3, 49 | $CB7D, $DB5C, $EB3F, $FB1E, $8BF9, $9BD8, $ABBB, $BB9A, 50 | $4A75, $5A54, $6A37, $7A16, $0AF1, $1AD0, $2AB3, $3A92, 51 | $FD2E, $ED0F, $DD6C, $CD4D, $BDAA, $AD8B, $9DE8, $8DC9, 52 | $7C26, $6C07, $5C64, $4C45, $3CA2, $2C83, $1CE0, $0CC1, 53 | $EF1F, $FF3E, $CF5D, $DF7C, $AF9B, $BFBA, $8FD9, $9FF8, 54 | $6E17, $7E36, $4E55, $5E74, $2E93, $3EB2, $0ED1, $1EF0 55 | ); 56 | 57 | constructor THasherCRC16_XMODEM.Create; 58 | begin 59 | inherited Create; 60 | FHash := $0000; 61 | Check := '31C3'; 62 | end; 63 | 64 | procedure THasherCRC16_XMODEM.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := (FHash shl 8) xor Table[(Msg^ xor (FHash shr 8)) and $FF]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC16_XMODEM.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 4); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-16 XMODEM', THasherCRC16_XMODEM); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC3_ROHC.pas: -------------------------------------------------------------------------------- 1 | unit CRC3_ROHC; 2 | //CRC-3 ROHC 3 | //Author: domasz 4 | //Last Update: 2022-11-21 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC3_ROHC = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Byte = ( 23 | $05, $03, $04, $02, $07, $01, $06, $00, 24 | $01, $07, $00, $06, $03, $05, $02, $04, 25 | $00, $06, $01, $07, $02, $04, $03, $05, 26 | $04, $02, $05, $03, $06, $00, $07, $01, 27 | $02, $04, $03, $05, $00, $06, $01, $07, 28 | $06, $00, $07, $01, $04, $02, $05, $03, 29 | $07, $01, $06, $00, $05, $03, $04, $02, 30 | $03, $05, $02, $04, $01, $07, $00, $06, 31 | $06, $00, $07, $01, $04, $02, $05, $03, 32 | $02, $04, $03, $05, $00, $06, $01, $07, 33 | $03, $05, $02, $04, $01, $07, $00, $06, 34 | $07, $01, $06, $00, $05, $03, $04, $02, 35 | $01, $07, $00, $06, $03, $05, $02, $04, 36 | $05, $03, $04, $02, $07, $01, $06, $00, 37 | $04, $02, $05, $03, $06, $00, $07, $01, 38 | $00, $06, $01, $07, $02, $04, $03, $05, 39 | $03, $05, $02, $04, $01, $07, $00, $06, 40 | $07, $01, $06, $00, $05, $03, $04, $02, 41 | $06, $00, $07, $01, $04, $02, $05, $03, 42 | $02, $04, $03, $05, $00, $06, $01, $07, 43 | $04, $02, $05, $03, $06, $00, $07, $01, 44 | $00, $06, $01, $07, $02, $04, $03, $05, 45 | $01, $07, $00, $06, $03, $05, $02, $04, 46 | $05, $03, $04, $02, $07, $01, $06, $00, 47 | $00, $06, $01, $07, $02, $04, $03, $05, 48 | $04, $02, $05, $03, $06, $00, $07, $01, 49 | $05, $03, $04, $02, $07, $01, $06, $00, 50 | $01, $07, $00, $06, $03, $05, $02, $04, 51 | $07, $01, $06, $00, $05, $03, $04, $02, 52 | $03, $05, $02, $04, $01, $07, $00, $06, 53 | $02, $04, $03, $05, $00, $06, $01, $07, 54 | $06, $00, $07, $01, $04, $02, $05, $03 55 | ); 56 | 57 | constructor THasherCRC3_ROHC.Create; 58 | begin 59 | inherited Create; 60 | FHash := 7; 61 | Check := '7'; 62 | end; 63 | 64 | procedure THasherCRC3_ROHC.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := Table[($FF and (FHash xor Msg^))]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC3_ROHC.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 1); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-3 ROHC', THasherCRC3_ROHC); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC4_G704.pas: -------------------------------------------------------------------------------- 1 | unit CRC4_G704; 2 | //CRC-4 G-704 3 | //Author: domasz 4 | //Last Update: 2022-11-21 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC4_G704 = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Byte = ( 23 | $00, $07, $0E, $09, $05, $02, $0B, $0C, 24 | $0A, $0D, $04, $03, $0F, $08, $01, $06, 25 | $0D, $0A, $03, $04, $08, $0F, $06, $01, 26 | $07, $00, $09, $0E, $02, $05, $0C, $0B, 27 | $03, $04, $0D, $0A, $06, $01, $08, $0F, 28 | $09, $0E, $07, $00, $0C, $0B, $02, $05, 29 | $0E, $09, $00, $07, $0B, $0C, $05, $02, 30 | $04, $03, $0A, $0D, $01, $06, $0F, $08, 31 | $06, $01, $08, $0F, $03, $04, $0D, $0A, 32 | $0C, $0B, $02, $05, $09, $0E, $07, $00, 33 | $0B, $0C, $05, $02, $0E, $09, $00, $07, 34 | $01, $06, $0F, $08, $04, $03, $0A, $0D, 35 | $05, $02, $0B, $0C, $00, $07, $0E, $09, 36 | $0F, $08, $01, $06, $0A, $0D, $04, $03, 37 | $08, $0F, $06, $01, $0D, $0A, $03, $04, 38 | $02, $05, $0C, $0B, $07, $00, $09, $0E, 39 | $0C, $0B, $02, $05, $09, $0E, $07, $00, 40 | $06, $01, $08, $0F, $03, $04, $0D, $0A, 41 | $01, $06, $0F, $08, $04, $03, $0A, $0D, 42 | $0B, $0C, $05, $02, $0E, $09, $00, $07, 43 | $0F, $08, $01, $06, $0A, $0D, $04, $03, 44 | $05, $02, $0B, $0C, $00, $07, $0E, $09, 45 | $02, $05, $0C, $0B, $07, $00, $09, $0E, 46 | $08, $0F, $06, $01, $0D, $0A, $03, $04, 47 | $0A, $0D, $04, $03, $0F, $08, $01, $06, 48 | $00, $07, $0E, $09, $05, $02, $0B, $0C, 49 | $07, $00, $09, $0E, $02, $05, $0C, $0B, 50 | $0D, $0A, $03, $04, $08, $0F, $06, $01, 51 | $09, $0E, $07, $00, $0C, $0B, $02, $05, 52 | $03, $04, $0D, $0A, $06, $01, $08, $0F, 53 | $04, $03, $0A, $0D, $01, $06, $0F, $08, 54 | $0E, $09, $00, $07, $0B, $0C, $05, $02 55 | ); 56 | 57 | constructor THasherCRC4_G704.Create; 58 | begin 59 | inherited Create; 60 | FHash := $00; 61 | Check := '7'; 62 | end; 63 | 64 | procedure THasherCRC4_G704.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := Table[($FF and (FHash xor Msg^))]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC4_G704.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 1); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-4 G-704', THasherCRC4_G704); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC4_interlaken.pas: -------------------------------------------------------------------------------- 1 | unit CRC4_interlaken; 2 | //CRC-4 interlaken 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC4_interlaken = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Byte = ( 23 | $60, $50, $00, $30, $A0, $90, $C0, $F0, $D0, $E0, $B0, $80, $10, $20, $70, $40, 24 | $30, $00, $50, $60, $F0, $C0, $90, $A0, $80, $B0, $E0, $D0, $40, $70, $20, $10, 25 | $C0, $F0, $A0, $90, $00, $30, $60, $50, $70, $40, $10, $20, $B0, $80, $D0, $E0, 26 | $90, $A0, $F0, $C0, $50, $60, $30, $00, $20, $10, $40, $70, $E0, $D0, $80, $B0, 27 | $10, $20, $70, $40, $D0, $E0, $B0, $80, $A0, $90, $C0, $F0, $60, $50, $00, $30, 28 | $40, $70, $20, $10, $80, $B0, $E0, $D0, $F0, $C0, $90, $A0, $30, $00, $50, $60, 29 | $B0, $80, $D0, $E0, $70, $40, $10, $20, $00, $30, $60, $50, $C0, $F0, $A0, $90, 30 | $E0, $D0, $80, $B0, $20, $10, $40, $70, $50, $60, $30, $00, $90, $A0, $F0, $C0, 31 | $80, $B0, $E0, $D0, $40, $70, $20, $10, $30, $00, $50, $60, $F0, $C0, $90, $A0, 32 | $D0, $E0, $B0, $80, $10, $20, $70, $40, $60, $50, $00, $30, $A0, $90, $C0, $F0, 33 | $20, $10, $40, $70, $E0, $D0, $80, $B0, $90, $A0, $F0, $C0, $50, $60, $30, $00, 34 | $70, $40, $10, $20, $B0, $80, $D0, $E0, $C0, $F0, $A0, $90, $00, $30, $60, $50, 35 | $F0, $C0, $90, $A0, $30, $00, $50, $60, $40, $70, $20, $10, $80, $B0, $E0, $D0, 36 | $A0, $90, $C0, $F0, $60, $50, $00, $30, $10, $20, $70, $40, $D0, $E0, $B0, $80, 37 | $50, $60, $30, $00, $90, $A0, $F0, $C0, $E0, $D0, $80, $B0, $20, $10, $40, $70, 38 | $00, $30, $60, $50, $C0, $F0, $A0, $90, $B0, $80, $D0, $E0, $70, $40, $10, $20 39 | ); 40 | 41 | constructor THasherCRC4_interlaken.Create; 42 | var i: Integer; 43 | begin 44 | inherited Create; 45 | FHash := $00; 46 | Check := '7'; 47 | end; 48 | 49 | procedure THasherCRC4_interlaken.Update(Msg: PByte; Length: Integer); 50 | var i: Integer; 51 | begin 52 | for i:=0 to Length-1 do begin 53 | FHash := Table[FHash xor Msg^]; 54 | 55 | Inc(Msg); 56 | end; 57 | end; 58 | 59 | function THasherCRC4_interlaken.Final: String; 60 | begin 61 | FHash := (FHash shr 4) ; 62 | 63 | Result := IntToHex(FHash, 1); 64 | end; 65 | 66 | initialization 67 | HasherList.RegisterHasher('CRC-4 Interlaken', THasherCRC4_interlaken); 68 | 69 | 70 | end. 71 | -------------------------------------------------------------------------------- /CRC5_EPCC1G2.pas: -------------------------------------------------------------------------------- 1 | unit CRC5_EPCC1G2; 2 | //CRC-5 EPC-C1G2 3 | //Author: domasz 4 | //Last Update: 2022-11-22 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC5_EPCC1G2 = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Byte = ( 23 | $15, $1C, $07, $0E, $18, $11, $0A, $03, 24 | $0F, $06, $1D, $14, $02, $0B, $10, $19, 25 | $08, $01, $1A, $13, $05, $0C, $17, $1E, 26 | $12, $1B, $00, $09, $1F, $16, $0D, $04, 27 | $06, $0F, $14, $1D, $0B, $02, $19, $10, 28 | $1C, $15, $0E, $07, $11, $18, $03, $0A, 29 | $1B, $12, $09, $00, $16, $1F, $04, $0D, 30 | $01, $08, $13, $1A, $0C, $05, $1E, $17, 31 | $1A, $13, $08, $01, $17, $1E, $05, $0C, 32 | $00, $09, $12, $1B, $0D, $04, $1F, $16, 33 | $07, $0E, $15, $1C, $0A, $03, $18, $11, 34 | $1D, $14, $0F, $06, $10, $19, $02, $0B, 35 | $09, $00, $1B, $12, $04, $0D, $16, $1F, 36 | $13, $1A, $01, $08, $1E, $17, $0C, $05, 37 | $14, $1D, $06, $0F, $19, $10, $0B, $02, 38 | $0E, $07, $1C, $15, $03, $0A, $11, $18, 39 | $0B, $02, $19, $10, $06, $0F, $14, $1D, 40 | $11, $18, $03, $0A, $1C, $15, $0E, $07, 41 | $16, $1F, $04, $0D, $1B, $12, $09, $00, 42 | $0C, $05, $1E, $17, $01, $08, $13, $1A, 43 | $18, $11, $0A, $03, $15, $1C, $07, $0E, 44 | $02, $0B, $10, $19, $0F, $06, $1D, $14, 45 | $05, $0C, $17, $1E, $08, $01, $1A, $13, 46 | $1F, $16, $0D, $04, $12, $1B, $00, $09, 47 | $04, $0D, $16, $1F, $09, $00, $1B, $12, 48 | $1E, $17, $0C, $05, $13, $1A, $01, $08, 49 | $19, $10, $0B, $02, $14, $1D, $06, $0F, 50 | $03, $0A, $11, $18, $0E, $07, $1C, $15, 51 | $17, $1E, $05, $0C, $1A, $13, $08, $01, 52 | $0D, $04, $1F, $16, $00, $09, $12, $1B, 53 | $0A, $03, $18, $11, $07, $0E, $15, $1C, 54 | $10, $19, $02, $0B, $1D, $14, $0F, $06 55 | ); 56 | 57 | constructor THasherCRC5_EPCC1G2.Create; 58 | var i: Integer; 59 | begin 60 | inherited Create; 61 | FHash := $09; 62 | Check := '00'; 63 | end; 64 | 65 | procedure THasherCRC5_EPCC1G2.Update(Msg: PByte; Length: Integer); 66 | var i: Integer; 67 | begin 68 | for i:=0 to Length-1 do begin 69 | FHash := Table[(FHash shl 3) xor Msg^ ] ; 70 | 71 | Inc(Msg); 72 | end; 73 | end; 74 | 75 | function THasherCRC5_EPCC1G2.Final: String; 76 | begin 77 | FHash := (FHash shr 3) ; 78 | Result := IntToHex(FHash, 2); 79 | end; 80 | 81 | initialization 82 | HasherList.RegisterHasher('CRC-5 EPC-C1G2', THasherCRC5_EPCC1G2); 83 | 84 | end. 85 | -------------------------------------------------------------------------------- /CRC5_G704.pas: -------------------------------------------------------------------------------- 1 | unit CRC5_G704; 2 | //CRC-5 G-704 3 | //Author: domasz 4 | //Last Update: 2022-11-21 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC5_G704 = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Byte = ( 23 | $00, $07, $0E, $09, $1C, $1B, $12, $15, 24 | $13, $14, $1D, $1A, $0F, $08, $01, $06, 25 | $0D, $0A, $03, $04, $11, $16, $1F, $18, 26 | $1E, $19, $10, $17, $02, $05, $0C, $0B, 27 | $1A, $1D, $14, $13, $06, $01, $08, $0F, 28 | $09, $0E, $07, $00, $15, $12, $1B, $1C, 29 | $17, $10, $19, $1E, $0B, $0C, $05, $02, 30 | $04, $03, $0A, $0D, $18, $1F, $16, $11, 31 | $1F, $18, $11, $16, $03, $04, $0D, $0A, 32 | $0C, $0B, $02, $05, $10, $17, $1E, $19, 33 | $12, $15, $1C, $1B, $0E, $09, $00, $07, 34 | $01, $06, $0F, $08, $1D, $1A, $13, $14, 35 | $05, $02, $0B, $0C, $19, $1E, $17, $10, 36 | $16, $11, $18, $1F, $0A, $0D, $04, $03, 37 | $08, $0F, $06, $01, $14, $13, $1A, $1D, 38 | $1B, $1C, $15, $12, $07, $00, $09, $0E, 39 | $15, $12, $1B, $1C, $09, $0E, $07, $00, 40 | $06, $01, $08, $0F, $1A, $1D, $14, $13, 41 | $18, $1F, $16, $11, $04, $03, $0A, $0D, 42 | $0B, $0C, $05, $02, $17, $10, $19, $1E, 43 | $0F, $08, $01, $06, $13, $14, $1D, $1A, 44 | $1C, $1B, $12, $15, $00, $07, $0E, $09, 45 | $02, $05, $0C, $0B, $1E, $19, $10, $17, 46 | $11, $16, $1F, $18, $0D, $0A, $03, $04, 47 | $0A, $0D, $04, $03, $16, $11, $18, $1F, 48 | $19, $1E, $17, $10, $05, $02, $0B, $0C, 49 | $07, $00, $09, $0E, $1B, $1C, $15, $12, 50 | $14, $13, $1A, $1D, $08, $0F, $06, $01, 51 | $10, $17, $1E, $19, $0C, $0B, $02, $05, 52 | $03, $04, $0D, $0A, $1F, $18, $11, $16, 53 | $1D, $1A, $13, $14, $01, $06, $0F, $08, 54 | $0E, $09, $00, $07, $12, $15, $1C, $1B 55 | ); 56 | 57 | constructor THasherCRC5_G704.Create; 58 | begin 59 | inherited Create; 60 | FHash := $00; 61 | Check := '07'; 62 | end; 63 | 64 | procedure THasherCRC5_G704.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := Table[($FF and (FHash xor Msg^))]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC5_G704.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 2); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-5 G-704', THasherCRC5_G704); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC5_USB.pas: -------------------------------------------------------------------------------- 1 | unit CRC5_USB; 2 | //CRC-5 USB 3 | //Author: domasz 4 | //Last Update: 2022-11-21 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC5_USB = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Byte = ( 23 | $01, $0F, $1D, $13, $10, $1E, $0C, $02, 24 | $0A, $04, $16, $18, $1B, $15, $07, $09, 25 | $17, $19, $0B, $05, $06, $08, $1A, $14, 26 | $1C, $12, $00, $0E, $0D, $03, $11, $1F, 27 | $04, $0A, $18, $16, $15, $1B, $09, $07, 28 | $0F, $01, $13, $1D, $1E, $10, $02, $0C, 29 | $12, $1C, $0E, $00, $03, $0D, $1F, $11, 30 | $19, $17, $05, $0B, $08, $06, $14, $1A, 31 | $0B, $05, $17, $19, $1A, $14, $06, $08, 32 | $00, $0E, $1C, $12, $11, $1F, $0D, $03, 33 | $1D, $13, $01, $0F, $0C, $02, $10, $1E, 34 | $16, $18, $0A, $04, $07, $09, $1B, $15, 35 | $0E, $00, $12, $1C, $1F, $11, $03, $0D, 36 | $05, $0B, $19, $17, $14, $1A, $08, $06, 37 | $18, $16, $04, $0A, $09, $07, $15, $1B, 38 | $13, $1D, $0F, $01, $02, $0C, $1E, $10, 39 | $15, $1B, $09, $07, $04, $0A, $18, $16, 40 | $1E, $10, $02, $0C, $0F, $01, $13, $1D, 41 | $03, $0D, $1F, $11, $12, $1C, $0E, $00, 42 | $08, $06, $14, $1A, $19, $17, $05, $0B, 43 | $10, $1E, $0C, $02, $01, $0F, $1D, $13, 44 | $1B, $15, $07, $09, $0A, $04, $16, $18, 45 | $06, $08, $1A, $14, $17, $19, $0B, $05, 46 | $0D, $03, $11, $1F, $1C, $12, $00, $0E, 47 | $1F, $11, $03, $0D, $0E, $00, $12, $1C, 48 | $14, $1A, $08, $06, $05, $0B, $19, $17, 49 | $09, $07, $15, $1B, $18, $16, $04, $0A, 50 | $02, $0C, $1E, $10, $13, $1D, $0F, $01, 51 | $1A, $14, $06, $08, $0B, $05, $17, $19, 52 | $11, $1F, $0D, $03, $00, $0E, $1C, $12, 53 | $0C, $02, $10, $1E, $1D, $13, $01, $0F, 54 | $07, $09, $1B, $15, $16, $18, $0A, $04 55 | ); 56 | 57 | constructor THasherCRC5_USB.Create; 58 | begin 59 | inherited Create; 60 | FHash := $00; 61 | Check := '19'; 62 | end; 63 | 64 | procedure THasherCRC5_USB.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := Table[($FF and (FHash xor Msg^))]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC5_USB.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 2); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-5 USB', THasherCRC5_USB); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC6_CDMA2000A.pas: -------------------------------------------------------------------------------- 1 | unit CRC6_CDMA2000A; 2 | //CRC-6/CDMA2000-A 3 | //Author: domasz 4 | //Last Update: 2022-11-29 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC6_CDMA2000A = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Byte = ( 23 | $00, $9C, $A4, $38, $D4, $48, $70, $EC, $34, $A8, $90, $0C, $E0, $7C, $44, $D8, 24 | $68, $F4, $CC, $50, $BC, $20, $18, $84, $5C, $C0, $F8, $64, $88, $14, $2C, $B0, 25 | $D0, $4C, $74, $E8, $04, $98, $A0, $3C, $E4, $78, $40, $DC, $30, $AC, $94, $08, 26 | $B8, $24, $1C, $80, $6C, $F0, $C8, $54, $8C, $10, $28, $B4, $58, $C4, $FC, $60, 27 | $3C, $A0, $98, $04, $E8, $74, $4C, $D0, $08, $94, $AC, $30, $DC, $40, $78, $E4, 28 | $54, $C8, $F0, $6C, $80, $1C, $24, $B8, $60, $FC, $C4, $58, $B4, $28, $10, $8C, 29 | $EC, $70, $48, $D4, $38, $A4, $9C, $00, $D8, $44, $7C, $E0, $0C, $90, $A8, $34, 30 | $84, $18, $20, $BC, $50, $CC, $F4, $68, $B0, $2C, $14, $88, $64, $F8, $C0, $5C, 31 | $78, $E4, $DC, $40, $AC, $30, $08, $94, $4C, $D0, $E8, $74, $98, $04, $3C, $A0, 32 | $10, $8C, $B4, $28, $C4, $58, $60, $FC, $24, $B8, $80, $1C, $F0, $6C, $54, $C8, 33 | $A8, $34, $0C, $90, $7C, $E0, $D8, $44, $9C, $00, $38, $A4, $48, $D4, $EC, $70, 34 | $C0, $5C, $64, $F8, $14, $88, $B0, $2C, $F4, $68, $50, $CC, $20, $BC, $84, $18, 35 | $44, $D8, $E0, $7C, $90, $0C, $34, $A8, $70, $EC, $D4, $48, $A4, $38, $00, $9C, 36 | $2C, $B0, $88, $14, $F8, $64, $5C, $C0, $18, $84, $BC, $20, $CC, $50, $68, $F4, 37 | $94, $08, $30, $AC, $40, $DC, $E4, $78, $A0, $3C, $04, $98, $74, $E8, $D0, $4C, 38 | $FC, $60, $58, $C4, $28, $B4, $8C, $10, $C8, $54, $6C, $F0, $1C, $80, $B8, $24 39 | ); 40 | 41 | constructor THasherCRC6_CDMA2000A.Create; 42 | begin 43 | inherited Create; 44 | FHash := $3F; 45 | Check := '0D'; 46 | 47 | FHash := FHash shl 2; 48 | end; 49 | 50 | procedure THasherCRC6_CDMA2000A.Update(Msg: PByte; Length: Integer); 51 | var i: Integer; 52 | begin 53 | for i:=0 to Length-1 do begin 54 | FHash := Table[FHash xor Msg^] ; 55 | 56 | Inc(Msg); 57 | end; 58 | end; 59 | 60 | function THasherCRC6_CDMA2000A.Final: String; 61 | begin 62 | FHash := FHash shr 2; 63 | 64 | Result := IntToHex(FHash, 2); 65 | end; 66 | 67 | initialization 68 | HasherList.RegisterHasher('CRC-6/CDMA2000-A', THasherCRC6_CDMA2000A); 69 | 70 | end. 71 | -------------------------------------------------------------------------------- /CRC6_CDMA2000B.pas: -------------------------------------------------------------------------------- 1 | unit CRC6_CDMA2000B; 2 | //CRC-6/CDMA2000-B 3 | //Author: domasz 4 | //Last Update: 2022-11-29 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC6_CDMA2000B = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Byte = ( 23 | $00, $1C, $38, $24, $70, $6C, $48, $54, $E0, $FC, $D8, $C4, $90, $8C, $A8, $B4, 24 | $DC, $C0, $E4, $F8, $AC, $B0, $94, $88, $3C, $20, $04, $18, $4C, $50, $74, $68, 25 | $A4, $B8, $9C, $80, $D4, $C8, $EC, $F0, $44, $58, $7C, $60, $34, $28, $0C, $10, 26 | $78, $64, $40, $5C, $08, $14, $30, $2C, $98, $84, $A0, $BC, $E8, $F4, $D0, $CC, 27 | $54, $48, $6C, $70, $24, $38, $1C, $00, $B4, $A8, $8C, $90, $C4, $D8, $FC, $E0, 28 | $88, $94, $B0, $AC, $F8, $E4, $C0, $DC, $68, $74, $50, $4C, $18, $04, $20, $3C, 29 | $F0, $EC, $C8, $D4, $80, $9C, $B8, $A4, $10, $0C, $28, $34, $60, $7C, $58, $44, 30 | $2C, $30, $14, $08, $5C, $40, $64, $78, $CC, $D0, $F4, $E8, $BC, $A0, $84, $98, 31 | $A8, $B4, $90, $8C, $D8, $C4, $E0, $FC, $48, $54, $70, $6C, $38, $24, $00, $1C, 32 | $74, $68, $4C, $50, $04, $18, $3C, $20, $94, $88, $AC, $B0, $E4, $F8, $DC, $C0, 33 | $0C, $10, $34, $28, $7C, $60, $44, $58, $EC, $F0, $D4, $C8, $9C, $80, $A4, $B8, 34 | $D0, $CC, $E8, $F4, $A0, $BC, $98, $84, $30, $2C, $08, $14, $40, $5C, $78, $64, 35 | $FC, $E0, $C4, $D8, $8C, $90, $B4, $A8, $1C, $00, $24, $38, $6C, $70, $54, $48, 36 | $20, $3C, $18, $04, $50, $4C, $68, $74, $C0, $DC, $F8, $E4, $B0, $AC, $88, $94, 37 | $58, $44, $60, $7C, $28, $34, $10, $0C, $B8, $A4, $80, $9C, $C8, $D4, $F0, $EC, 38 | $84, $98, $BC, $A0, $F4, $E8, $CC, $D0, $64, $78, $5C, $40, $14, $08, $2C, $30 39 | ); 40 | 41 | constructor THasherCRC6_CDMA2000B.Create; 42 | begin 43 | inherited Create; 44 | FHash := $3F; 45 | Check := '3B'; 46 | 47 | FHash := FHash shl 2; 48 | end; 49 | 50 | procedure THasherCRC6_CDMA2000B.Update(Msg: PByte; Length: Integer); 51 | var i: Integer; 52 | begin 53 | for i:=0 to Length-1 do begin 54 | FHash := Table[FHash xor Msg^] ; 55 | 56 | Inc(Msg); 57 | end; 58 | end; 59 | 60 | function THasherCRC6_CDMA2000B.Final: String; 61 | begin 62 | FHash := FHash shr 2; 63 | 64 | Result := IntToHex(FHash, 2); 65 | end; 66 | 67 | initialization 68 | HasherList.RegisterHasher('CRC-6/CDMA2000-B', THasherCRC6_CDMA2000B); 69 | 70 | end. 71 | -------------------------------------------------------------------------------- /CRC6_DARC.pas: -------------------------------------------------------------------------------- 1 | unit CRC6_DARC; 2 | //CRC-6 DARC 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC6_DARC = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Byte = ( 23 | $00, $32, $29, $1B, $1F, $2D, $36, $04, 24 | $3E, $0C, $17, $25, $21, $13, $08, $3A, 25 | $31, $03, $18, $2A, $2E, $1C, $07, $35, 26 | $0F, $3D, $26, $14, $10, $22, $39, $0B, 27 | $2F, $1D, $06, $34, $30, $02, $19, $2B, 28 | $11, $23, $38, $0A, $0E, $3C, $27, $15, 29 | $1E, $2C, $37, $05, $01, $33, $28, $1A, 30 | $20, $12, $09, $3B, $3F, $0D, $16, $24, 31 | $13, $21, $3A, $08, $0C, $3E, $25, $17, 32 | $2D, $1F, $04, $36, $32, $00, $1B, $29, 33 | $22, $10, $0B, $39, $3D, $0F, $14, $26, 34 | $1C, $2E, $35, $07, $03, $31, $2A, $18, 35 | $3C, $0E, $15, $27, $23, $11, $0A, $38, 36 | $02, $30, $2B, $19, $1D, $2F, $34, $06, 37 | $0D, $3F, $24, $16, $12, $20, $3B, $09, 38 | $33, $01, $1A, $28, $2C, $1E, $05, $37, 39 | $26, $14, $0F, $3D, $39, $0B, $10, $22, 40 | $18, $2A, $31, $03, $07, $35, $2E, $1C, 41 | $17, $25, $3E, $0C, $08, $3A, $21, $13, 42 | $29, $1B, $00, $32, $36, $04, $1F, $2D, 43 | $09, $3B, $20, $12, $16, $24, $3F, $0D, 44 | $37, $05, $1E, $2C, $28, $1A, $01, $33, 45 | $38, $0A, $11, $23, $27, $15, $0E, $3C, 46 | $06, $34, $2F, $1D, $19, $2B, $30, $02, 47 | $35, $07, $1C, $2E, $2A, $18, $03, $31, 48 | $0B, $39, $22, $10, $14, $26, $3D, $0F, 49 | $04, $36, $2D, $1F, $1B, $29, $32, $00, 50 | $3A, $08, $13, $21, $25, $17, $0C, $3E, 51 | $1A, $28, $33, $01, $05, $37, $2C, $1E, 52 | $24, $16, $0D, $3F, $3B, $09, $12, $20, 53 | $2B, $19, $02, $30, $34, $06, $1D, $2F, 54 | $15, $27, $3C, $0E, $0A, $38, $23, $11 55 | ); 56 | 57 | constructor THasherCRC6_DARC.Create; 58 | begin 59 | inherited Create; 60 | FHash := $00; 61 | Check := '26'; 62 | end; 63 | 64 | procedure THasherCRC6_DARC.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := Table[($FF and (FHash xor Msg^))]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC6_DARC.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 2); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-6 DARC', THasherCRC6_DARC); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC6_G704.pas: -------------------------------------------------------------------------------- 1 | unit CRC6_G704; 2 | //CRC-6 G-704 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC6_G704 = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Byte = ( 23 | $00, $14, $28, $3C, $31, $25, $19, $0D, 24 | $03, $17, $2B, $3F, $32, $26, $1A, $0E, 25 | $06, $12, $2E, $3A, $37, $23, $1F, $0B, 26 | $05, $11, $2D, $39, $34, $20, $1C, $08, 27 | $0C, $18, $24, $30, $3D, $29, $15, $01, 28 | $0F, $1B, $27, $33, $3E, $2A, $16, $02, 29 | $0A, $1E, $22, $36, $3B, $2F, $13, $07, 30 | $09, $1D, $21, $35, $38, $2C, $10, $04, 31 | $18, $0C, $30, $24, $29, $3D, $01, $15, 32 | $1B, $0F, $33, $27, $2A, $3E, $02, $16, 33 | $1E, $0A, $36, $22, $2F, $3B, $07, $13, 34 | $1D, $09, $35, $21, $2C, $38, $04, $10, 35 | $14, $00, $3C, $28, $25, $31, $0D, $19, 36 | $17, $03, $3F, $2B, $26, $32, $0E, $1A, 37 | $12, $06, $3A, $2E, $23, $37, $0B, $1F, 38 | $11, $05, $39, $2D, $20, $34, $08, $1C, 39 | $30, $24, $18, $0C, $01, $15, $29, $3D, 40 | $33, $27, $1B, $0F, $02, $16, $2A, $3E, 41 | $36, $22, $1E, $0A, $07, $13, $2F, $3B, 42 | $35, $21, $1D, $09, $04, $10, $2C, $38, 43 | $3C, $28, $14, $00, $0D, $19, $25, $31, 44 | $3F, $2B, $17, $03, $0E, $1A, $26, $32, 45 | $3A, $2E, $12, $06, $0B, $1F, $23, $37, 46 | $39, $2D, $11, $05, $08, $1C, $20, $34, 47 | $28, $3C, $00, $14, $19, $0D, $31, $25, 48 | $2B, $3F, $03, $17, $1A, $0E, $32, $26, 49 | $2E, $3A, $06, $12, $1F, $0B, $37, $23, 50 | $2D, $39, $05, $11, $1C, $08, $34, $20, 51 | $24, $30, $0C, $18, $15, $01, $3D, $29, 52 | $27, $33, $0F, $1B, $16, $02, $3E, $2A, 53 | $22, $36, $0A, $1E, $13, $07, $3B, $2F, 54 | $21, $35, $09, $1D, $10, $04, $38, $2C 55 | ); 56 | 57 | constructor THasherCRC6_G704.Create; 58 | begin 59 | inherited Create; 60 | FHash := $00; 61 | Check := '06'; 62 | end; 63 | 64 | procedure THasherCRC6_G704.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := Table[($FF and (FHash xor Msg^))]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC6_G704.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 2); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-6 G-704', THasherCRC6_G704); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC6_GSM.pas: -------------------------------------------------------------------------------- 1 | unit CRC6_GSM; 2 | //CRC-6/GSM 3 | //Author: domasz 4 | //Last Update: 2022-11-29 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC6_GSM = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Byte = ( 23 | $00, $BC, $C4, $78, $34, $88, $F0, $4C, $68, $D4, $AC, $10, $5C, $E0, $98, $24, 24 | $D0, $6C, $14, $A8, $E4, $58, $20, $9C, $B8, $04, $7C, $C0, $8C, $30, $48, $F4, 25 | $1C, $A0, $D8, $64, $28, $94, $EC, $50, $74, $C8, $B0, $0C, $40, $FC, $84, $38, 26 | $CC, $70, $08, $B4, $F8, $44, $3C, $80, $A4, $18, $60, $DC, $90, $2C, $54, $E8, 27 | $38, $84, $FC, $40, $0C, $B0, $C8, $74, $50, $EC, $94, $28, $64, $D8, $A0, $1C, 28 | $E8, $54, $2C, $90, $DC, $60, $18, $A4, $80, $3C, $44, $F8, $B4, $08, $70, $CC, 29 | $24, $98, $E0, $5C, $10, $AC, $D4, $68, $4C, $F0, $88, $34, $78, $C4, $BC, $00, 30 | $F4, $48, $30, $8C, $C0, $7C, $04, $B8, $9C, $20, $58, $E4, $A8, $14, $6C, $D0, 31 | $70, $CC, $B4, $08, $44, $F8, $80, $3C, $18, $A4, $DC, $60, $2C, $90, $E8, $54, 32 | $A0, $1C, $64, $D8, $94, $28, $50, $EC, $C8, $74, $0C, $B0, $FC, $40, $38, $84, 33 | $6C, $D0, $A8, $14, $58, $E4, $9C, $20, $04, $B8, $C0, $7C, $30, $8C, $F4, $48, 34 | $BC, $00, $78, $C4, $88, $34, $4C, $F0, $D4, $68, $10, $AC, $E0, $5C, $24, $98, 35 | $48, $F4, $8C, $30, $7C, $C0, $B8, $04, $20, $9C, $E4, $58, $14, $A8, $D0, $6C, 36 | $98, $24, $5C, $E0, $AC, $10, $68, $D4, $F0, $4C, $34, $88, $C4, $78, $00, $BC, 37 | $54, $E8, $90, $2C, $60, $DC, $A4, $18, $3C, $80, $F8, $44, $08, $B4, $CC, $70, 38 | $84, $38, $40, $FC, $B0, $0C, $74, $C8, $EC, $50, $28, $94, $D8, $64, $1C, $A0 39 | ); 40 | 41 | constructor THasherCRC6_GSM.Create; 42 | begin 43 | inherited Create; 44 | FHash := $00; 45 | Check := '13'; 46 | 47 | FHash := FHash shl 2; 48 | end; 49 | 50 | procedure THasherCRC6_GSM.Update(Msg: PByte; Length: Integer); 51 | var i: Integer; 52 | begin 53 | for i:=0 to Length-1 do begin 54 | FHash := Table[FHash xor Msg^] ; 55 | 56 | Inc(Msg); 57 | end; 58 | end; 59 | 60 | function THasherCRC6_GSM.Final: String; 61 | begin 62 | FHash := FHash shr 2; 63 | FHash := FHash xor $3F; 64 | 65 | Result := IntToHex(FHash, 2); 66 | end; 67 | 68 | initialization 69 | HasherList.RegisterHasher('CRC-6/GSM', THasherCRC6_GSM); 70 | 71 | end. 72 | -------------------------------------------------------------------------------- /CRC82_darc.pas: -------------------------------------------------------------------------------- 1 | unit CRC82_darc; 2 | //CRC-82 DARC 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | //CRC82-DARC algorithm by Mark Adler, published on 17 June 2017, public domain. 8 | 9 | interface 10 | 11 | uses SysUtils, HasherBase; 12 | 13 | type THasherCRC82_darc = class(THasherBase) 14 | private 15 | FHash, FHash2: QWord; 16 | public 17 | constructor Create; override; 18 | procedure Update(Msg: PByte; Length: Integer); override; 19 | function Final: String; override; 20 | end; 21 | 22 | implementation 23 | 24 | constructor THasherCRC82_darc.Create; 25 | begin 26 | inherited Create; 27 | FHash := 0; 28 | FHash2 := 0; 29 | Check := '09EA83F625023801FD612'; 30 | end; 31 | 32 | procedure THasherCRC82_darc.Update(Msg: PByte; Length: Integer); 33 | const POLYHIGH = $22080; 34 | const POLYLOW = $8a00a2022200c430; 35 | var i,k: Integer; 36 | Index: Cardinal; 37 | CLow, CHigh, Low: QWord; 38 | begin 39 | CLow := FHash; 40 | CHigh := FHash2 and $3FFFF; 41 | 42 | for i:=0 to Length-1 do begin 43 | CLow := CLow xor Msg^; 44 | 45 | for k:=0 to 7 do begin 46 | Low := CLow and 1; 47 | CLow := (CLow shr 1) or (CHigh shl 63); 48 | CHigh := CHigh shr 1; 49 | 50 | if (low <> 0) then begin 51 | CLow := CLow xor POLYLOW; 52 | CHigh := CHigh xor POLYHIGH; 53 | end; 54 | end; 55 | Inc(Msg); 56 | end; 57 | 58 | FHash := CLow; 59 | FHash2 := CHigh; 60 | end; 61 | 62 | function THasherCRC82_darc.Final: String; 63 | begin 64 | 65 | Result := IntToHex(FHash2, 5) + IntToHex(FHash, 16); 66 | end; 67 | 68 | initialization 69 | HasherList.RegisterHasher('CRC-82 DARC', THasherCRC82_darc); 70 | 71 | end. 72 | -------------------------------------------------------------------------------- /CRC8_AUTOSAR.pas: -------------------------------------------------------------------------------- 1 | unit CRC8_AUTOSAR; 2 | //CRC-8 AUTOSAR 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC8_AUTOSAR = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Byte = ( 23 | $00, $2F, $5E, $71, $BC, $93, $E2, $CD, 24 | $57, $78, $09, $26, $EB, $C4, $B5, $9A, 25 | $AE, $81, $F0, $DF, $12, $3D, $4C, $63, 26 | $F9, $D6, $A7, $88, $45, $6A, $1B, $34, 27 | $73, $5C, $2D, $02, $CF, $E0, $91, $BE, 28 | $24, $0B, $7A, $55, $98, $B7, $C6, $E9, 29 | $DD, $F2, $83, $AC, $61, $4E, $3F, $10, 30 | $8A, $A5, $D4, $FB, $36, $19, $68, $47, 31 | $E6, $C9, $B8, $97, $5A, $75, $04, $2B, 32 | $B1, $9E, $EF, $C0, $0D, $22, $53, $7C, 33 | $48, $67, $16, $39, $F4, $DB, $AA, $85, 34 | $1F, $30, $41, $6E, $A3, $8C, $FD, $D2, 35 | $95, $BA, $CB, $E4, $29, $06, $77, $58, 36 | $C2, $ED, $9C, $B3, $7E, $51, $20, $0F, 37 | $3B, $14, $65, $4A, $87, $A8, $D9, $F6, 38 | $6C, $43, $32, $1D, $D0, $FF, $8E, $A1, 39 | $E3, $CC, $BD, $92, $5F, $70, $01, $2E, 40 | $B4, $9B, $EA, $C5, $08, $27, $56, $79, 41 | $4D, $62, $13, $3C, $F1, $DE, $AF, $80, 42 | $1A, $35, $44, $6B, $A6, $89, $F8, $D7, 43 | $90, $BF, $CE, $E1, $2C, $03, $72, $5D, 44 | $C7, $E8, $99, $B6, $7B, $54, $25, $0A, 45 | $3E, $11, $60, $4F, $82, $AD, $DC, $F3, 46 | $69, $46, $37, $18, $D5, $FA, $8B, $A4, 47 | $05, $2A, $5B, $74, $B9, $96, $E7, $C8, 48 | $52, $7D, $0C, $23, $EE, $C1, $B0, $9F, 49 | $AB, $84, $F5, $DA, $17, $38, $49, $66, 50 | $FC, $D3, $A2, $8D, $40, $6F, $1E, $31, 51 | $76, $59, $28, $07, $CA, $E5, $94, $BB, 52 | $21, $0E, $7F, $50, $9D, $B2, $C3, $EC, 53 | $D8, $F7, $86, $A9, $64, $4B, $3A, $15, 54 | $8F, $A0, $D1, $FE, $33, $1C, $6D, $42 55 | ); 56 | 57 | constructor THasherCRC8_AUTOSAR.Create; 58 | begin 59 | inherited Create; 60 | FHash := $FF; 61 | Check := 'DF'; 62 | end; 63 | 64 | procedure THasherCRC8_AUTOSAR.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := (FHash shl 8) xor Table[(Msg^ xor FHash) and $FF]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC8_AUTOSAR.Final: String; 74 | begin 75 | FHash := FHash xor $FF; 76 | Result := IntToHex(FHash, 2); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-8 AUTOSAR', THasherCRC8_AUTOSAR); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC8_BLUETOOTH.pas: -------------------------------------------------------------------------------- 1 | unit CRC8_BLUETOOTH; 2 | //CRC-8 BLUETOOTH 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC8_BLUETOOTH = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Byte = ( 23 | $00, $6B, $D6, $BD, $67, $0C, $B1, $DA, 24 | $CE, $A5, $18, $73, $A9, $C2, $7F, $14, 25 | $57, $3C, $81, $EA, $30, $5B, $E6, $8D, 26 | $99, $F2, $4F, $24, $FE, $95, $28, $43, 27 | $AE, $C5, $78, $13, $C9, $A2, $1F, $74, 28 | $60, $0B, $B6, $DD, $07, $6C, $D1, $BA, 29 | $F9, $92, $2F, $44, $9E, $F5, $48, $23, 30 | $37, $5C, $E1, $8A, $50, $3B, $86, $ED, 31 | $97, $FC, $41, $2A, $F0, $9B, $26, $4D, 32 | $59, $32, $8F, $E4, $3E, $55, $E8, $83, 33 | $C0, $AB, $16, $7D, $A7, $CC, $71, $1A, 34 | $0E, $65, $D8, $B3, $69, $02, $BF, $D4, 35 | $39, $52, $EF, $84, $5E, $35, $88, $E3, 36 | $F7, $9C, $21, $4A, $90, $FB, $46, $2D, 37 | $6E, $05, $B8, $D3, $09, $62, $DF, $B4, 38 | $A0, $CB, $76, $1D, $C7, $AC, $11, $7A, 39 | $E5, $8E, $33, $58, $82, $E9, $54, $3F, 40 | $2B, $40, $FD, $96, $4C, $27, $9A, $F1, 41 | $B2, $D9, $64, $0F, $D5, $BE, $03, $68, 42 | $7C, $17, $AA, $C1, $1B, $70, $CD, $A6, 43 | $4B, $20, $9D, $F6, $2C, $47, $FA, $91, 44 | $85, $EE, $53, $38, $E2, $89, $34, $5F, 45 | $1C, $77, $CA, $A1, $7B, $10, $AD, $C6, 46 | $D2, $B9, $04, $6F, $B5, $DE, $63, $08, 47 | $72, $19, $A4, $CF, $15, $7E, $C3, $A8, 48 | $BC, $D7, $6A, $01, $DB, $B0, $0D, $66, 49 | $25, $4E, $F3, $98, $42, $29, $94, $FF, 50 | $EB, $80, $3D, $56, $8C, $E7, $5A, $31, 51 | $DC, $B7, $0A, $61, $BB, $D0, $6D, $06, 52 | $12, $79, $C4, $AF, $75, $1E, $A3, $C8, 53 | $8B, $E0, $5D, $36, $EC, $87, $3A, $51, 54 | $45, $2E, $93, $F8, $22, $49, $F4, $9F 55 | ); 56 | 57 | constructor THasherCRC8_BLUETOOTH.Create; 58 | begin 59 | inherited Create; 60 | FHash := $00; 61 | Check := '26'; 62 | end; 63 | 64 | procedure THasherCRC8_BLUETOOTH.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := Table[($FF and (FHash xor Msg^))]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC8_BLUETOOTH.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 2); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-8 BLUETOOTH', THasherCRC8_BLUETOOTH); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC8_CDMA2000.pas: -------------------------------------------------------------------------------- 1 | unit CRC8_CDMA2000; 2 | //CRC-8 CDMA2000 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC8_CDMA2000 = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Byte = ( 23 | $00, $9B, $AD, $36, $C1, $5A, $6C, $F7, 24 | $19, $82, $B4, $2F, $D8, $43, $75, $EE, 25 | $32, $A9, $9F, $04, $F3, $68, $5E, $C5, 26 | $2B, $B0, $86, $1D, $EA, $71, $47, $DC, 27 | $64, $FF, $C9, $52, $A5, $3E, $08, $93, 28 | $7D, $E6, $D0, $4B, $BC, $27, $11, $8A, 29 | $56, $CD, $FB, $60, $97, $0C, $3A, $A1, 30 | $4F, $D4, $E2, $79, $8E, $15, $23, $B8, 31 | $C8, $53, $65, $FE, $09, $92, $A4, $3F, 32 | $D1, $4A, $7C, $E7, $10, $8B, $BD, $26, 33 | $FA, $61, $57, $CC, $3B, $A0, $96, $0D, 34 | $E3, $78, $4E, $D5, $22, $B9, $8F, $14, 35 | $AC, $37, $01, $9A, $6D, $F6, $C0, $5B, 36 | $B5, $2E, $18, $83, $74, $EF, $D9, $42, 37 | $9E, $05, $33, $A8, $5F, $C4, $F2, $69, 38 | $87, $1C, $2A, $B1, $46, $DD, $EB, $70, 39 | $0B, $90, $A6, $3D, $CA, $51, $67, $FC, 40 | $12, $89, $BF, $24, $D3, $48, $7E, $E5, 41 | $39, $A2, $94, $0F, $F8, $63, $55, $CE, 42 | $20, $BB, $8D, $16, $E1, $7A, $4C, $D7, 43 | $6F, $F4, $C2, $59, $AE, $35, $03, $98, 44 | $76, $ED, $DB, $40, $B7, $2C, $1A, $81, 45 | $5D, $C6, $F0, $6B, $9C, $07, $31, $AA, 46 | $44, $DF, $E9, $72, $85, $1E, $28, $B3, 47 | $C3, $58, $6E, $F5, $02, $99, $AF, $34, 48 | $DA, $41, $77, $EC, $1B, $80, $B6, $2D, 49 | $F1, $6A, $5C, $C7, $30, $AB, $9D, $06, 50 | $E8, $73, $45, $DE, $29, $B2, $84, $1F, 51 | $A7, $3C, $0A, $91, $66, $FD, $CB, $50, 52 | $BE, $25, $13, $88, $7F, $E4, $D2, $49, 53 | $95, $0E, $38, $A3, $54, $CF, $F9, $62, 54 | $8C, $17, $21, $BA, $4D, $D6, $E0, $7B 55 | ); 56 | 57 | constructor THasherCRC8_CDMA2000.Create; 58 | begin 59 | inherited Create; 60 | FHash := $FF; 61 | Check := 'DA'; 62 | end; 63 | 64 | procedure THasherCRC8_CDMA2000.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := (FHash shl 8) xor Table[(Msg^ xor FHash) and $FF]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC8_CDMA2000.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 2); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-8 CDMA2000', THasherCRC8_CDMA2000); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC8_DARC.pas: -------------------------------------------------------------------------------- 1 | unit CRC8_DARC; 2 | //CRC-8 DARC 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC8_DARC = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Byte = ( 23 | $00, $72, $E4, $96, $F1, $83, $15, $67, 24 | $DB, $A9, $3F, $4D, $2A, $58, $CE, $BC, 25 | $8F, $FD, $6B, $19, $7E, $0C, $9A, $E8, 26 | $54, $26, $B0, $C2, $A5, $D7, $41, $33, 27 | $27, $55, $C3, $B1, $D6, $A4, $32, $40, 28 | $FC, $8E, $18, $6A, $0D, $7F, $E9, $9B, 29 | $A8, $DA, $4C, $3E, $59, $2B, $BD, $CF, 30 | $73, $01, $97, $E5, $82, $F0, $66, $14, 31 | $4E, $3C, $AA, $D8, $BF, $CD, $5B, $29, 32 | $95, $E7, $71, $03, $64, $16, $80, $F2, 33 | $C1, $B3, $25, $57, $30, $42, $D4, $A6, 34 | $1A, $68, $FE, $8C, $EB, $99, $0F, $7D, 35 | $69, $1B, $8D, $FF, $98, $EA, $7C, $0E, 36 | $B2, $C0, $56, $24, $43, $31, $A7, $D5, 37 | $E6, $94, $02, $70, $17, $65, $F3, $81, 38 | $3D, $4F, $D9, $AB, $CC, $BE, $28, $5A, 39 | $9C, $EE, $78, $0A, $6D, $1F, $89, $FB, 40 | $47, $35, $A3, $D1, $B6, $C4, $52, $20, 41 | $13, $61, $F7, $85, $E2, $90, $06, $74, 42 | $C8, $BA, $2C, $5E, $39, $4B, $DD, $AF, 43 | $BB, $C9, $5F, $2D, $4A, $38, $AE, $DC, 44 | $60, $12, $84, $F6, $91, $E3, $75, $07, 45 | $34, $46, $D0, $A2, $C5, $B7, $21, $53, 46 | $EF, $9D, $0B, $79, $1E, $6C, $FA, $88, 47 | $D2, $A0, $36, $44, $23, $51, $C7, $B5, 48 | $09, $7B, $ED, $9F, $F8, $8A, $1C, $6E, 49 | $5D, $2F, $B9, $CB, $AC, $DE, $48, $3A, 50 | $86, $F4, $62, $10, $77, $05, $93, $E1, 51 | $F5, $87, $11, $63, $04, $76, $E0, $92, 52 | $2E, $5C, $CA, $B8, $DF, $AD, $3B, $49, 53 | $7A, $08, $9E, $EC, $8B, $F9, $6F, $1D, 54 | $A1, $D3, $45, $37, $50, $22, $B4, $C6 55 | ); 56 | 57 | constructor THasherCRC8_DARC.Create; 58 | begin 59 | inherited Create; 60 | FHash := $00; 61 | Check := '15'; 62 | end; 63 | 64 | procedure THasherCRC8_DARC.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := Table[($FF and (FHash xor Msg^))]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC8_DARC.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 2); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-8 DARC', THasherCRC8_DARC); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC8_DVBS2.pas: -------------------------------------------------------------------------------- 1 | unit CRC8_DVBS2; 2 | //CRC-8 DVB-S2 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC8_DVBS2 = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Byte = ( 23 | $00, $D5, $7F, $AA, $FE, $2B, $81, $54, 24 | $29, $FC, $56, $83, $D7, $02, $A8, $7D, 25 | $52, $87, $2D, $F8, $AC, $79, $D3, $06, 26 | $7B, $AE, $04, $D1, $85, $50, $FA, $2F, 27 | $A4, $71, $DB, $0E, $5A, $8F, $25, $F0, 28 | $8D, $58, $F2, $27, $73, $A6, $0C, $D9, 29 | $F6, $23, $89, $5C, $08, $DD, $77, $A2, 30 | $DF, $0A, $A0, $75, $21, $F4, $5E, $8B, 31 | $9D, $48, $E2, $37, $63, $B6, $1C, $C9, 32 | $B4, $61, $CB, $1E, $4A, $9F, $35, $E0, 33 | $CF, $1A, $B0, $65, $31, $E4, $4E, $9B, 34 | $E6, $33, $99, $4C, $18, $CD, $67, $B2, 35 | $39, $EC, $46, $93, $C7, $12, $B8, $6D, 36 | $10, $C5, $6F, $BA, $EE, $3B, $91, $44, 37 | $6B, $BE, $14, $C1, $95, $40, $EA, $3F, 38 | $42, $97, $3D, $E8, $BC, $69, $C3, $16, 39 | $EF, $3A, $90, $45, $11, $C4, $6E, $BB, 40 | $C6, $13, $B9, $6C, $38, $ED, $47, $92, 41 | $BD, $68, $C2, $17, $43, $96, $3C, $E9, 42 | $94, $41, $EB, $3E, $6A, $BF, $15, $C0, 43 | $4B, $9E, $34, $E1, $B5, $60, $CA, $1F, 44 | $62, $B7, $1D, $C8, $9C, $49, $E3, $36, 45 | $19, $CC, $66, $B3, $E7, $32, $98, $4D, 46 | $30, $E5, $4F, $9A, $CE, $1B, $B1, $64, 47 | $72, $A7, $0D, $D8, $8C, $59, $F3, $26, 48 | $5B, $8E, $24, $F1, $A5, $70, $DA, $0F, 49 | $20, $F5, $5F, $8A, $DE, $0B, $A1, $74, 50 | $09, $DC, $76, $A3, $F7, $22, $88, $5D, 51 | $D6, $03, $A9, $7C, $28, $FD, $57, $82, 52 | $FF, $2A, $80, $55, $01, $D4, $7E, $AB, 53 | $84, $51, $FB, $2E, $7A, $AF, $05, $D0, 54 | $AD, $78, $D2, $07, $53, $86, $2C, $F9 55 | ); 56 | 57 | constructor THasherCRC8_DVBS2.Create; 58 | begin 59 | inherited Create; 60 | FHash := $00; 61 | Check := 'BC'; 62 | end; 63 | 64 | procedure THasherCRC8_DVBS2.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := (FHash shl 8) xor Table[(Msg^ xor FHash) and $FF]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC8_DVBS2.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 2); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-8 DVB-S2', THasherCRC8_DVBS2); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC8_GSMA.pas: -------------------------------------------------------------------------------- 1 | unit CRC8_GSMA; 2 | //CRC-8 GSM-A 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC8_GSMA = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Byte = ( 23 | $00, $1D, $3A, $27, $74, $69, $4E, $53, 24 | $E8, $F5, $D2, $CF, $9C, $81, $A6, $BB, 25 | $CD, $D0, $F7, $EA, $B9, $A4, $83, $9E, 26 | $25, $38, $1F, $02, $51, $4C, $6B, $76, 27 | $87, $9A, $BD, $A0, $F3, $EE, $C9, $D4, 28 | $6F, $72, $55, $48, $1B, $06, $21, $3C, 29 | $4A, $57, $70, $6D, $3E, $23, $04, $19, 30 | $A2, $BF, $98, $85, $D6, $CB, $EC, $F1, 31 | $13, $0E, $29, $34, $67, $7A, $5D, $40, 32 | $FB, $E6, $C1, $DC, $8F, $92, $B5, $A8, 33 | $DE, $C3, $E4, $F9, $AA, $B7, $90, $8D, 34 | $36, $2B, $0C, $11, $42, $5F, $78, $65, 35 | $94, $89, $AE, $B3, $E0, $FD, $DA, $C7, 36 | $7C, $61, $46, $5B, $08, $15, $32, $2F, 37 | $59, $44, $63, $7E, $2D, $30, $17, $0A, 38 | $B1, $AC, $8B, $96, $C5, $D8, $FF, $E2, 39 | $26, $3B, $1C, $01, $52, $4F, $68, $75, 40 | $CE, $D3, $F4, $E9, $BA, $A7, $80, $9D, 41 | $EB, $F6, $D1, $CC, $9F, $82, $A5, $B8, 42 | $03, $1E, $39, $24, $77, $6A, $4D, $50, 43 | $A1, $BC, $9B, $86, $D5, $C8, $EF, $F2, 44 | $49, $54, $73, $6E, $3D, $20, $07, $1A, 45 | $6C, $71, $56, $4B, $18, $05, $22, $3F, 46 | $84, $99, $BE, $A3, $F0, $ED, $CA, $D7, 47 | $35, $28, $0F, $12, $41, $5C, $7B, $66, 48 | $DD, $C0, $E7, $FA, $A9, $B4, $93, $8E, 49 | $F8, $E5, $C2, $DF, $8C, $91, $B6, $AB, 50 | $10, $0D, $2A, $37, $64, $79, $5E, $43, 51 | $B2, $AF, $88, $95, $C6, $DB, $FC, $E1, 52 | $5A, $47, $60, $7D, $2E, $33, $14, $09, 53 | $7F, $62, $45, $58, $0B, $16, $31, $2C, 54 | $97, $8A, $AD, $B0, $E3, $FE, $D9, $C4 55 | ); 56 | 57 | constructor THasherCRC8_GSMA.Create; 58 | begin 59 | inherited Create; 60 | FHash := $00; 61 | Check := '37'; 62 | end; 63 | 64 | procedure THasherCRC8_GSMA.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := (FHash shl 8) xor Table[(Msg^ xor FHash) and $FF]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC8_GSMA.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 2); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-8 GSM-A', THasherCRC8_GSMA); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC8_GSMB.pas: -------------------------------------------------------------------------------- 1 | unit CRC8_GSMB; 2 | //CRC-8 GSM-B 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC8_GSMB = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Byte = ( 23 | $00, $49, $92, $DB, $6D, $24, $FF, $B6, 24 | $DA, $93, $48, $01, $B7, $FE, $25, $6C, 25 | $FD, $B4, $6F, $26, $90, $D9, $02, $4B, 26 | $27, $6E, $B5, $FC, $4A, $03, $D8, $91, 27 | $B3, $FA, $21, $68, $DE, $97, $4C, $05, 28 | $69, $20, $FB, $B2, $04, $4D, $96, $DF, 29 | $4E, $07, $DC, $95, $23, $6A, $B1, $F8, 30 | $94, $DD, $06, $4F, $F9, $B0, $6B, $22, 31 | $2F, $66, $BD, $F4, $42, $0B, $D0, $99, 32 | $F5, $BC, $67, $2E, $98, $D1, $0A, $43, 33 | $D2, $9B, $40, $09, $BF, $F6, $2D, $64, 34 | $08, $41, $9A, $D3, $65, $2C, $F7, $BE, 35 | $9C, $D5, $0E, $47, $F1, $B8, $63, $2A, 36 | $46, $0F, $D4, $9D, $2B, $62, $B9, $F0, 37 | $61, $28, $F3, $BA, $0C, $45, $9E, $D7, 38 | $BB, $F2, $29, $60, $D6, $9F, $44, $0D, 39 | $5E, $17, $CC, $85, $33, $7A, $A1, $E8, 40 | $84, $CD, $16, $5F, $E9, $A0, $7B, $32, 41 | $A3, $EA, $31, $78, $CE, $87, $5C, $15, 42 | $79, $30, $EB, $A2, $14, $5D, $86, $CF, 43 | $ED, $A4, $7F, $36, $80, $C9, $12, $5B, 44 | $37, $7E, $A5, $EC, $5A, $13, $C8, $81, 45 | $10, $59, $82, $CB, $7D, $34, $EF, $A6, 46 | $CA, $83, $58, $11, $A7, $EE, $35, $7C, 47 | $71, $38, $E3, $AA, $1C, $55, $8E, $C7, 48 | $AB, $E2, $39, $70, $C6, $8F, $54, $1D, 49 | $8C, $C5, $1E, $57, $E1, $A8, $73, $3A, 50 | $56, $1F, $C4, $8D, $3B, $72, $A9, $E0, 51 | $C2, $8B, $50, $19, $AF, $E6, $3D, $74, 52 | $18, $51, $8A, $C3, $75, $3C, $E7, $AE, 53 | $3F, $76, $AD, $E4, $52, $1B, $C0, $89, 54 | $E5, $AC, $77, $3E, $88, $C1, $1A, $53 55 | ); 56 | 57 | constructor THasherCRC8_GSMB.Create; 58 | begin 59 | inherited Create; 60 | FHash := $00; 61 | Check := '94'; 62 | end; 63 | 64 | procedure THasherCRC8_GSMB.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := (FHash shl 8) xor Table[(Msg^ xor FHash) and $FF]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC8_GSMB.Final: String; 74 | begin 75 | FHash := FHash xor $FF; 76 | Result := IntToHex(FHash, 2); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-8 GSM-B', THasherCRC8_GSMB); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC8_HITAG.pas: -------------------------------------------------------------------------------- 1 | unit CRC8_HITAG; 2 | //CRC-8 HITAG 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC8_HITAG = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Byte = ( 23 | $00, $1D, $3A, $27, $74, $69, $4E, $53, 24 | $E8, $F5, $D2, $CF, $9C, $81, $A6, $BB, 25 | $CD, $D0, $F7, $EA, $B9, $A4, $83, $9E, 26 | $25, $38, $1F, $02, $51, $4C, $6B, $76, 27 | $87, $9A, $BD, $A0, $F3, $EE, $C9, $D4, 28 | $6F, $72, $55, $48, $1B, $06, $21, $3C, 29 | $4A, $57, $70, $6D, $3E, $23, $04, $19, 30 | $A2, $BF, $98, $85, $D6, $CB, $EC, $F1, 31 | $13, $0E, $29, $34, $67, $7A, $5D, $40, 32 | $FB, $E6, $C1, $DC, $8F, $92, $B5, $A8, 33 | $DE, $C3, $E4, $F9, $AA, $B7, $90, $8D, 34 | $36, $2B, $0C, $11, $42, $5F, $78, $65, 35 | $94, $89, $AE, $B3, $E0, $FD, $DA, $C7, 36 | $7C, $61, $46, $5B, $08, $15, $32, $2F, 37 | $59, $44, $63, $7E, $2D, $30, $17, $0A, 38 | $B1, $AC, $8B, $96, $C5, $D8, $FF, $E2, 39 | $26, $3B, $1C, $01, $52, $4F, $68, $75, 40 | $CE, $D3, $F4, $E9, $BA, $A7, $80, $9D, 41 | $EB, $F6, $D1, $CC, $9F, $82, $A5, $B8, 42 | $03, $1E, $39, $24, $77, $6A, $4D, $50, 43 | $A1, $BC, $9B, $86, $D5, $C8, $EF, $F2, 44 | $49, $54, $73, $6E, $3D, $20, $07, $1A, 45 | $6C, $71, $56, $4B, $18, $05, $22, $3F, 46 | $84, $99, $BE, $A3, $F0, $ED, $CA, $D7, 47 | $35, $28, $0F, $12, $41, $5C, $7B, $66, 48 | $DD, $C0, $E7, $FA, $A9, $B4, $93, $8E, 49 | $F8, $E5, $C2, $DF, $8C, $91, $B6, $AB, 50 | $10, $0D, $2A, $37, $64, $79, $5E, $43, 51 | $B2, $AF, $88, $95, $C6, $DB, $FC, $E1, 52 | $5A, $47, $60, $7D, $2E, $33, $14, $09, 53 | $7F, $62, $45, $58, $0B, $16, $31, $2C, 54 | $97, $8A, $AD, $B0, $E3, $FE, $D9, $C4 55 | ); 56 | 57 | constructor THasherCRC8_HITAG.Create; 58 | begin 59 | inherited Create; 60 | FHash := $FF; 61 | Check := 'B4'; 62 | end; 63 | 64 | procedure THasherCRC8_HITAG.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := (FHash shl 8) xor Table[(Msg^ xor FHash) and $FF]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC8_HITAG.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 2); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-8 HITAG', THasherCRC8_HITAG); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC8_I4321.pas: -------------------------------------------------------------------------------- 1 | unit CRC8_I4321; 2 | //CRC-8 I-432-1 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC8_I4321 = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Byte = ( 23 | $00, $07, $0E, $09, $1C, $1B, $12, $15, 24 | $38, $3F, $36, $31, $24, $23, $2A, $2D, 25 | $70, $77, $7E, $79, $6C, $6B, $62, $65, 26 | $48, $4F, $46, $41, $54, $53, $5A, $5D, 27 | $E0, $E7, $EE, $E9, $FC, $FB, $F2, $F5, 28 | $D8, $DF, $D6, $D1, $C4, $C3, $CA, $CD, 29 | $90, $97, $9E, $99, $8C, $8B, $82, $85, 30 | $A8, $AF, $A6, $A1, $B4, $B3, $BA, $BD, 31 | $C7, $C0, $C9, $CE, $DB, $DC, $D5, $D2, 32 | $FF, $F8, $F1, $F6, $E3, $E4, $ED, $EA, 33 | $B7, $B0, $B9, $BE, $AB, $AC, $A5, $A2, 34 | $8F, $88, $81, $86, $93, $94, $9D, $9A, 35 | $27, $20, $29, $2E, $3B, $3C, $35, $32, 36 | $1F, $18, $11, $16, $03, $04, $0D, $0A, 37 | $57, $50, $59, $5E, $4B, $4C, $45, $42, 38 | $6F, $68, $61, $66, $73, $74, $7D, $7A, 39 | $89, $8E, $87, $80, $95, $92, $9B, $9C, 40 | $B1, $B6, $BF, $B8, $AD, $AA, $A3, $A4, 41 | $F9, $FE, $F7, $F0, $E5, $E2, $EB, $EC, 42 | $C1, $C6, $CF, $C8, $DD, $DA, $D3, $D4, 43 | $69, $6E, $67, $60, $75, $72, $7B, $7C, 44 | $51, $56, $5F, $58, $4D, $4A, $43, $44, 45 | $19, $1E, $17, $10, $05, $02, $0B, $0C, 46 | $21, $26, $2F, $28, $3D, $3A, $33, $34, 47 | $4E, $49, $40, $47, $52, $55, $5C, $5B, 48 | $76, $71, $78, $7F, $6A, $6D, $64, $63, 49 | $3E, $39, $30, $37, $22, $25, $2C, $2B, 50 | $06, $01, $08, $0F, $1A, $1D, $14, $13, 51 | $AE, $A9, $A0, $A7, $B2, $B5, $BC, $BB, 52 | $96, $91, $98, $9F, $8A, $8D, $84, $83, 53 | $DE, $D9, $D0, $D7, $C2, $C5, $CC, $CB, 54 | $E6, $E1, $E8, $EF, $FA, $FD, $F4, $F3 55 | ); 56 | 57 | constructor THasherCRC8_I4321.Create; 58 | begin 59 | inherited Create; 60 | FHash := $00; 61 | Check := 'A1'; 62 | end; 63 | 64 | procedure THasherCRC8_I4321.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := (FHash shl 8) xor Table[(Msg^ xor FHash) and $FF]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC8_I4321.Final: String; 74 | begin 75 | FHash := FHash xor $55; 76 | Result := IntToHex(FHash, 2); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-8 I-432-1', THasherCRC8_I4321); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC8_ICODE.pas: -------------------------------------------------------------------------------- 1 | unit CRC8_ICODE; 2 | //CRC-8 I-CODE 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC8_ICODE = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Byte = ( 23 | $00, $1D, $3A, $27, $74, $69, $4E, $53, 24 | $E8, $F5, $D2, $CF, $9C, $81, $A6, $BB, 25 | $CD, $D0, $F7, $EA, $B9, $A4, $83, $9E, 26 | $25, $38, $1F, $02, $51, $4C, $6B, $76, 27 | $87, $9A, $BD, $A0, $F3, $EE, $C9, $D4, 28 | $6F, $72, $55, $48, $1B, $06, $21, $3C, 29 | $4A, $57, $70, $6D, $3E, $23, $04, $19, 30 | $A2, $BF, $98, $85, $D6, $CB, $EC, $F1, 31 | $13, $0E, $29, $34, $67, $7A, $5D, $40, 32 | $FB, $E6, $C1, $DC, $8F, $92, $B5, $A8, 33 | $DE, $C3, $E4, $F9, $AA, $B7, $90, $8D, 34 | $36, $2B, $0C, $11, $42, $5F, $78, $65, 35 | $94, $89, $AE, $B3, $E0, $FD, $DA, $C7, 36 | $7C, $61, $46, $5B, $08, $15, $32, $2F, 37 | $59, $44, $63, $7E, $2D, $30, $17, $0A, 38 | $B1, $AC, $8B, $96, $C5, $D8, $FF, $E2, 39 | $26, $3B, $1C, $01, $52, $4F, $68, $75, 40 | $CE, $D3, $F4, $E9, $BA, $A7, $80, $9D, 41 | $EB, $F6, $D1, $CC, $9F, $82, $A5, $B8, 42 | $03, $1E, $39, $24, $77, $6A, $4D, $50, 43 | $A1, $BC, $9B, $86, $D5, $C8, $EF, $F2, 44 | $49, $54, $73, $6E, $3D, $20, $07, $1A, 45 | $6C, $71, $56, $4B, $18, $05, $22, $3F, 46 | $84, $99, $BE, $A3, $F0, $ED, $CA, $D7, 47 | $35, $28, $0F, $12, $41, $5C, $7B, $66, 48 | $DD, $C0, $E7, $FA, $A9, $B4, $93, $8E, 49 | $F8, $E5, $C2, $DF, $8C, $91, $B6, $AB, 50 | $10, $0D, $2A, $37, $64, $79, $5E, $43, 51 | $B2, $AF, $88, $95, $C6, $DB, $FC, $E1, 52 | $5A, $47, $60, $7D, $2E, $33, $14, $09, 53 | $7F, $62, $45, $58, $0B, $16, $31, $2C, 54 | $97, $8A, $AD, $B0, $E3, $FE, $D9, $C4 55 | ); 56 | 57 | constructor THasherCRC8_ICODE.Create; 58 | begin 59 | inherited Create; 60 | FHash := $FD; 61 | Check := '7E'; 62 | end; 63 | 64 | procedure THasherCRC8_ICODE.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := (FHash shl 8) xor Table[(Msg^ xor FHash) and $FF]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC8_ICODE.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 2); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-8 I-CODE', THasherCRC8_ICODE); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC8_LTE.pas: -------------------------------------------------------------------------------- 1 | unit CRC8_LTE; 2 | //CRC-8 LTE 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC8_LTE = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Byte = ( 23 | $00, $9B, $AD, $36, $C1, $5A, $6C, $F7, 24 | $19, $82, $B4, $2F, $D8, $43, $75, $EE, 25 | $32, $A9, $9F, $04, $F3, $68, $5E, $C5, 26 | $2B, $B0, $86, $1D, $EA, $71, $47, $DC, 27 | $64, $FF, $C9, $52, $A5, $3E, $08, $93, 28 | $7D, $E6, $D0, $4B, $BC, $27, $11, $8A, 29 | $56, $CD, $FB, $60, $97, $0C, $3A, $A1, 30 | $4F, $D4, $E2, $79, $8E, $15, $23, $B8, 31 | $C8, $53, $65, $FE, $09, $92, $A4, $3F, 32 | $D1, $4A, $7C, $E7, $10, $8B, $BD, $26, 33 | $FA, $61, $57, $CC, $3B, $A0, $96, $0D, 34 | $E3, $78, $4E, $D5, $22, $B9, $8F, $14, 35 | $AC, $37, $01, $9A, $6D, $F6, $C0, $5B, 36 | $B5, $2E, $18, $83, $74, $EF, $D9, $42, 37 | $9E, $05, $33, $A8, $5F, $C4, $F2, $69, 38 | $87, $1C, $2A, $B1, $46, $DD, $EB, $70, 39 | $0B, $90, $A6, $3D, $CA, $51, $67, $FC, 40 | $12, $89, $BF, $24, $D3, $48, $7E, $E5, 41 | $39, $A2, $94, $0F, $F8, $63, $55, $CE, 42 | $20, $BB, $8D, $16, $E1, $7A, $4C, $D7, 43 | $6F, $F4, $C2, $59, $AE, $35, $03, $98, 44 | $76, $ED, $DB, $40, $B7, $2C, $1A, $81, 45 | $5D, $C6, $F0, $6B, $9C, $07, $31, $AA, 46 | $44, $DF, $E9, $72, $85, $1E, $28, $B3, 47 | $C3, $58, $6E, $F5, $02, $99, $AF, $34, 48 | $DA, $41, $77, $EC, $1B, $80, $B6, $2D, 49 | $F1, $6A, $5C, $C7, $30, $AB, $9D, $06, 50 | $E8, $73, $45, $DE, $29, $B2, $84, $1F, 51 | $A7, $3C, $0A, $91, $66, $FD, $CB, $50, 52 | $BE, $25, $13, $88, $7F, $E4, $D2, $49, 53 | $95, $0E, $38, $A3, $54, $CF, $F9, $62, 54 | $8C, $17, $21, $BA, $4D, $D6, $E0, $7B 55 | ); 56 | 57 | constructor THasherCRC8_LTE.Create; 58 | begin 59 | inherited Create; 60 | FHash := $00; 61 | Check := 'EA'; 62 | end; 63 | 64 | procedure THasherCRC8_LTE.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := (FHash shl 8) xor Table[(Msg^ xor FHash) and $FF]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC8_LTE.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 2); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-8 LTE', THasherCRC8_LTE); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC8_MAXIMDOW.pas: -------------------------------------------------------------------------------- 1 | unit CRC8_MAXIMDOW; 2 | //CRC-8 MAXIM-DOW 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC8_MAXIMDOW = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Byte = ( 23 | $00, $5E, $BC, $E2, $61, $3F, $DD, $83, 24 | $C2, $9C, $7E, $20, $A3, $FD, $1F, $41, 25 | $9D, $C3, $21, $7F, $FC, $A2, $40, $1E, 26 | $5F, $01, $E3, $BD, $3E, $60, $82, $DC, 27 | $23, $7D, $9F, $C1, $42, $1C, $FE, $A0, 28 | $E1, $BF, $5D, $03, $80, $DE, $3C, $62, 29 | $BE, $E0, $02, $5C, $DF, $81, $63, $3D, 30 | $7C, $22, $C0, $9E, $1D, $43, $A1, $FF, 31 | $46, $18, $FA, $A4, $27, $79, $9B, $C5, 32 | $84, $DA, $38, $66, $E5, $BB, $59, $07, 33 | $DB, $85, $67, $39, $BA, $E4, $06, $58, 34 | $19, $47, $A5, $FB, $78, $26, $C4, $9A, 35 | $65, $3B, $D9, $87, $04, $5A, $B8, $E6, 36 | $A7, $F9, $1B, $45, $C6, $98, $7A, $24, 37 | $F8, $A6, $44, $1A, $99, $C7, $25, $7B, 38 | $3A, $64, $86, $D8, $5B, $05, $E7, $B9, 39 | $8C, $D2, $30, $6E, $ED, $B3, $51, $0F, 40 | $4E, $10, $F2, $AC, $2F, $71, $93, $CD, 41 | $11, $4F, $AD, $F3, $70, $2E, $CC, $92, 42 | $D3, $8D, $6F, $31, $B2, $EC, $0E, $50, 43 | $AF, $F1, $13, $4D, $CE, $90, $72, $2C, 44 | $6D, $33, $D1, $8F, $0C, $52, $B0, $EE, 45 | $32, $6C, $8E, $D0, $53, $0D, $EF, $B1, 46 | $F0, $AE, $4C, $12, $91, $CF, $2D, $73, 47 | $CA, $94, $76, $28, $AB, $F5, $17, $49, 48 | $08, $56, $B4, $EA, $69, $37, $D5, $8B, 49 | $57, $09, $EB, $B5, $36, $68, $8A, $D4, 50 | $95, $CB, $29, $77, $F4, $AA, $48, $16, 51 | $E9, $B7, $55, $0B, $88, $D6, $34, $6A, 52 | $2B, $75, $97, $C9, $4A, $14, $F6, $A8, 53 | $74, $2A, $C8, $96, $15, $4B, $A9, $F7, 54 | $B6, $E8, $0A, $54, $D7, $89, $6B, $35 55 | ); 56 | 57 | constructor THasherCRC8_MAXIMDOW.Create; 58 | begin 59 | inherited Create; 60 | FHash := $00; 61 | Check := 'A1'; 62 | end; 63 | 64 | procedure THasherCRC8_MAXIMDOW.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := Table[($FF and (FHash xor Msg^))]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC8_MAXIMDOW.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 2); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-8 MAXIM-DOW', THasherCRC8_MAXIMDOW); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC8_MIFAREMAD.pas: -------------------------------------------------------------------------------- 1 | unit CRC8_MIFAREMAD; 2 | //CRC-8 MIFARE-MAD 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC8_MIFAREMAD = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Byte = ( 23 | $00, $1D, $3A, $27, $74, $69, $4E, $53, 24 | $E8, $F5, $D2, $CF, $9C, $81, $A6, $BB, 25 | $CD, $D0, $F7, $EA, $B9, $A4, $83, $9E, 26 | $25, $38, $1F, $02, $51, $4C, $6B, $76, 27 | $87, $9A, $BD, $A0, $F3, $EE, $C9, $D4, 28 | $6F, $72, $55, $48, $1B, $06, $21, $3C, 29 | $4A, $57, $70, $6D, $3E, $23, $04, $19, 30 | $A2, $BF, $98, $85, $D6, $CB, $EC, $F1, 31 | $13, $0E, $29, $34, $67, $7A, $5D, $40, 32 | $FB, $E6, $C1, $DC, $8F, $92, $B5, $A8, 33 | $DE, $C3, $E4, $F9, $AA, $B7, $90, $8D, 34 | $36, $2B, $0C, $11, $42, $5F, $78, $65, 35 | $94, $89, $AE, $B3, $E0, $FD, $DA, $C7, 36 | $7C, $61, $46, $5B, $08, $15, $32, $2F, 37 | $59, $44, $63, $7E, $2D, $30, $17, $0A, 38 | $B1, $AC, $8B, $96, $C5, $D8, $FF, $E2, 39 | $26, $3B, $1C, $01, $52, $4F, $68, $75, 40 | $CE, $D3, $F4, $E9, $BA, $A7, $80, $9D, 41 | $EB, $F6, $D1, $CC, $9F, $82, $A5, $B8, 42 | $03, $1E, $39, $24, $77, $6A, $4D, $50, 43 | $A1, $BC, $9B, $86, $D5, $C8, $EF, $F2, 44 | $49, $54, $73, $6E, $3D, $20, $07, $1A, 45 | $6C, $71, $56, $4B, $18, $05, $22, $3F, 46 | $84, $99, $BE, $A3, $F0, $ED, $CA, $D7, 47 | $35, $28, $0F, $12, $41, $5C, $7B, $66, 48 | $DD, $C0, $E7, $FA, $A9, $B4, $93, $8E, 49 | $F8, $E5, $C2, $DF, $8C, $91, $B6, $AB, 50 | $10, $0D, $2A, $37, $64, $79, $5E, $43, 51 | $B2, $AF, $88, $95, $C6, $DB, $FC, $E1, 52 | $5A, $47, $60, $7D, $2E, $33, $14, $09, 53 | $7F, $62, $45, $58, $0B, $16, $31, $2C, 54 | $97, $8A, $AD, $B0, $E3, $FE, $D9, $C4 55 | ); 56 | 57 | constructor THasherCRC8_MIFAREMAD.Create; 58 | begin 59 | inherited Create; 60 | FHash := $C7; 61 | Check := '99'; 62 | end; 63 | 64 | procedure THasherCRC8_MIFAREMAD.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := (FHash shl 8) xor Table[(Msg^ xor FHash) and $FF]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC8_MIFAREMAD.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 2); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-8 MIFARE-MAD', THasherCRC8_MIFAREMAD); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC8_NRSC5.pas: -------------------------------------------------------------------------------- 1 | unit CRC8_NRSC5; 2 | //CRC-8 NRSC-5 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC8_NRSC5 = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Byte = ( 23 | $00, $31, $62, $53, $C4, $F5, $A6, $97, 24 | $B9, $88, $DB, $EA, $7D, $4C, $1F, $2E, 25 | $43, $72, $21, $10, $87, $B6, $E5, $D4, 26 | $FA, $CB, $98, $A9, $3E, $0F, $5C, $6D, 27 | $86, $B7, $E4, $D5, $42, $73, $20, $11, 28 | $3F, $0E, $5D, $6C, $FB, $CA, $99, $A8, 29 | $C5, $F4, $A7, $96, $01, $30, $63, $52, 30 | $7C, $4D, $1E, $2F, $B8, $89, $DA, $EB, 31 | $3D, $0C, $5F, $6E, $F9, $C8, $9B, $AA, 32 | $84, $B5, $E6, $D7, $40, $71, $22, $13, 33 | $7E, $4F, $1C, $2D, $BA, $8B, $D8, $E9, 34 | $C7, $F6, $A5, $94, $03, $32, $61, $50, 35 | $BB, $8A, $D9, $E8, $7F, $4E, $1D, $2C, 36 | $02, $33, $60, $51, $C6, $F7, $A4, $95, 37 | $F8, $C9, $9A, $AB, $3C, $0D, $5E, $6F, 38 | $41, $70, $23, $12, $85, $B4, $E7, $D6, 39 | $7A, $4B, $18, $29, $BE, $8F, $DC, $ED, 40 | $C3, $F2, $A1, $90, $07, $36, $65, $54, 41 | $39, $08, $5B, $6A, $FD, $CC, $9F, $AE, 42 | $80, $B1, $E2, $D3, $44, $75, $26, $17, 43 | $FC, $CD, $9E, $AF, $38, $09, $5A, $6B, 44 | $45, $74, $27, $16, $81, $B0, $E3, $D2, 45 | $BF, $8E, $DD, $EC, $7B, $4A, $19, $28, 46 | $06, $37, $64, $55, $C2, $F3, $A0, $91, 47 | $47, $76, $25, $14, $83, $B2, $E1, $D0, 48 | $FE, $CF, $9C, $AD, $3A, $0B, $58, $69, 49 | $04, $35, $66, $57, $C0, $F1, $A2, $93, 50 | $BD, $8C, $DF, $EE, $79, $48, $1B, $2A, 51 | $C1, $F0, $A3, $92, $05, $34, $67, $56, 52 | $78, $49, $1A, $2B, $BC, $8D, $DE, $EF, 53 | $82, $B3, $E0, $D1, $46, $77, $24, $15, 54 | $3B, $0A, $59, $68, $FF, $CE, $9D, $AC 55 | ); 56 | 57 | constructor THasherCRC8_NRSC5.Create; 58 | begin 59 | inherited Create; 60 | FHash := $FF; 61 | Check := 'F7'; 62 | end; 63 | 64 | procedure THasherCRC8_NRSC5.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := (FHash shl 8) xor Table[(Msg^ xor FHash) and $FF]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC8_NRSC5.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 2); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-8 NRSC-5', THasherCRC8_NRSC5); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC8_OPENSAFETY.pas: -------------------------------------------------------------------------------- 1 | unit CRC8_OPENSAFETY; 2 | //CRC-8 OPENSAFETY 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC8_OPENSAFETY = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Byte = ( 23 | $00, $2F, $5E, $71, $BC, $93, $E2, $CD, 24 | $57, $78, $09, $26, $EB, $C4, $B5, $9A, 25 | $AE, $81, $F0, $DF, $12, $3D, $4C, $63, 26 | $F9, $D6, $A7, $88, $45, $6A, $1B, $34, 27 | $73, $5C, $2D, $02, $CF, $E0, $91, $BE, 28 | $24, $0B, $7A, $55, $98, $B7, $C6, $E9, 29 | $DD, $F2, $83, $AC, $61, $4E, $3F, $10, 30 | $8A, $A5, $D4, $FB, $36, $19, $68, $47, 31 | $E6, $C9, $B8, $97, $5A, $75, $04, $2B, 32 | $B1, $9E, $EF, $C0, $0D, $22, $53, $7C, 33 | $48, $67, $16, $39, $F4, $DB, $AA, $85, 34 | $1F, $30, $41, $6E, $A3, $8C, $FD, $D2, 35 | $95, $BA, $CB, $E4, $29, $06, $77, $58, 36 | $C2, $ED, $9C, $B3, $7E, $51, $20, $0F, 37 | $3B, $14, $65, $4A, $87, $A8, $D9, $F6, 38 | $6C, $43, $32, $1D, $D0, $FF, $8E, $A1, 39 | $E3, $CC, $BD, $92, $5F, $70, $01, $2E, 40 | $B4, $9B, $EA, $C5, $08, $27, $56, $79, 41 | $4D, $62, $13, $3C, $F1, $DE, $AF, $80, 42 | $1A, $35, $44, $6B, $A6, $89, $F8, $D7, 43 | $90, $BF, $CE, $E1, $2C, $03, $72, $5D, 44 | $C7, $E8, $99, $B6, $7B, $54, $25, $0A, 45 | $3E, $11, $60, $4F, $82, $AD, $DC, $F3, 46 | $69, $46, $37, $18, $D5, $FA, $8B, $A4, 47 | $05, $2A, $5B, $74, $B9, $96, $E7, $C8, 48 | $52, $7D, $0C, $23, $EE, $C1, $B0, $9F, 49 | $AB, $84, $F5, $DA, $17, $38, $49, $66, 50 | $FC, $D3, $A2, $8D, $40, $6F, $1E, $31, 51 | $76, $59, $28, $07, $CA, $E5, $94, $BB, 52 | $21, $0E, $7F, $50, $9D, $B2, $C3, $EC, 53 | $D8, $F7, $86, $A9, $64, $4B, $3A, $15, 54 | $8F, $A0, $D1, $FE, $33, $1C, $6D, $42 55 | ); 56 | 57 | constructor THasherCRC8_OPENSAFETY.Create; 58 | begin 59 | inherited Create; 60 | FHash := $00; 61 | Check := '3E'; 62 | end; 63 | 64 | procedure THasherCRC8_OPENSAFETY.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := (FHash shl 8) xor Table[(Msg^ xor FHash) and $FF]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC8_OPENSAFETY.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 2); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-8 OPENSAFETY', THasherCRC8_OPENSAFETY); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC8_ROHC.pas: -------------------------------------------------------------------------------- 1 | unit CRC8_ROHC; 2 | //CRC-8 ROHC 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC8_ROHC = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Byte = ( 23 | $00, $91, $E3, $72, $07, $96, $E4, $75, 24 | $0E, $9F, $ED, $7C, $09, $98, $EA, $7B, 25 | $1C, $8D, $FF, $6E, $1B, $8A, $F8, $69, 26 | $12, $83, $F1, $60, $15, $84, $F6, $67, 27 | $38, $A9, $DB, $4A, $3F, $AE, $DC, $4D, 28 | $36, $A7, $D5, $44, $31, $A0, $D2, $43, 29 | $24, $B5, $C7, $56, $23, $B2, $C0, $51, 30 | $2A, $BB, $C9, $58, $2D, $BC, $CE, $5F, 31 | $70, $E1, $93, $02, $77, $E6, $94, $05, 32 | $7E, $EF, $9D, $0C, $79, $E8, $9A, $0B, 33 | $6C, $FD, $8F, $1E, $6B, $FA, $88, $19, 34 | $62, $F3, $81, $10, $65, $F4, $86, $17, 35 | $48, $D9, $AB, $3A, $4F, $DE, $AC, $3D, 36 | $46, $D7, $A5, $34, $41, $D0, $A2, $33, 37 | $54, $C5, $B7, $26, $53, $C2, $B0, $21, 38 | $5A, $CB, $B9, $28, $5D, $CC, $BE, $2F, 39 | $E0, $71, $03, $92, $E7, $76, $04, $95, 40 | $EE, $7F, $0D, $9C, $E9, $78, $0A, $9B, 41 | $FC, $6D, $1F, $8E, $FB, $6A, $18, $89, 42 | $F2, $63, $11, $80, $F5, $64, $16, $87, 43 | $D8, $49, $3B, $AA, $DF, $4E, $3C, $AD, 44 | $D6, $47, $35, $A4, $D1, $40, $32, $A3, 45 | $C4, $55, $27, $B6, $C3, $52, $20, $B1, 46 | $CA, $5B, $29, $B8, $CD, $5C, $2E, $BF, 47 | $90, $01, $73, $E2, $97, $06, $74, $E5, 48 | $9E, $0F, $7D, $EC, $99, $08, $7A, $EB, 49 | $8C, $1D, $6F, $FE, $8B, $1A, $68, $F9, 50 | $82, $13, $61, $F0, $85, $14, $66, $F7, 51 | $A8, $39, $4B, $DA, $AF, $3E, $4C, $DD, 52 | $A6, $37, $45, $D4, $A1, $30, $42, $D3, 53 | $B4, $25, $57, $C6, $B3, $22, $50, $C1, 54 | $BA, $2B, $59, $C8, $BD, $2C, $5E, $CF 55 | ); 56 | 57 | constructor THasherCRC8_ROHC.Create; 58 | begin 59 | inherited Create; 60 | FHash := $FF; 61 | Check := 'D0'; 62 | end; 63 | 64 | procedure THasherCRC8_ROHC.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := Table[($FF and (FHash xor Msg^))]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC8_ROHC.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 2); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-8 ROHC', THasherCRC8_ROHC); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC8_SAEJ1850.pas: -------------------------------------------------------------------------------- 1 | unit CRC8_SAEJ1850; 2 | //CRC-8 SAE-J1850 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC8_SAEJ1850 = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Byte = ( 23 | $00, $1D, $3A, $27, $74, $69, $4E, $53, 24 | $E8, $F5, $D2, $CF, $9C, $81, $A6, $BB, 25 | $CD, $D0, $F7, $EA, $B9, $A4, $83, $9E, 26 | $25, $38, $1F, $02, $51, $4C, $6B, $76, 27 | $87, $9A, $BD, $A0, $F3, $EE, $C9, $D4, 28 | $6F, $72, $55, $48, $1B, $06, $21, $3C, 29 | $4A, $57, $70, $6D, $3E, $23, $04, $19, 30 | $A2, $BF, $98, $85, $D6, $CB, $EC, $F1, 31 | $13, $0E, $29, $34, $67, $7A, $5D, $40, 32 | $FB, $E6, $C1, $DC, $8F, $92, $B5, $A8, 33 | $DE, $C3, $E4, $F9, $AA, $B7, $90, $8D, 34 | $36, $2B, $0C, $11, $42, $5F, $78, $65, 35 | $94, $89, $AE, $B3, $E0, $FD, $DA, $C7, 36 | $7C, $61, $46, $5B, $08, $15, $32, $2F, 37 | $59, $44, $63, $7E, $2D, $30, $17, $0A, 38 | $B1, $AC, $8B, $96, $C5, $D8, $FF, $E2, 39 | $26, $3B, $1C, $01, $52, $4F, $68, $75, 40 | $CE, $D3, $F4, $E9, $BA, $A7, $80, $9D, 41 | $EB, $F6, $D1, $CC, $9F, $82, $A5, $B8, 42 | $03, $1E, $39, $24, $77, $6A, $4D, $50, 43 | $A1, $BC, $9B, $86, $D5, $C8, $EF, $F2, 44 | $49, $54, $73, $6E, $3D, $20, $07, $1A, 45 | $6C, $71, $56, $4B, $18, $05, $22, $3F, 46 | $84, $99, $BE, $A3, $F0, $ED, $CA, $D7, 47 | $35, $28, $0F, $12, $41, $5C, $7B, $66, 48 | $DD, $C0, $E7, $FA, $A9, $B4, $93, $8E, 49 | $F8, $E5, $C2, $DF, $8C, $91, $B6, $AB, 50 | $10, $0D, $2A, $37, $64, $79, $5E, $43, 51 | $B2, $AF, $88, $95, $C6, $DB, $FC, $E1, 52 | $5A, $47, $60, $7D, $2E, $33, $14, $09, 53 | $7F, $62, $45, $58, $0B, $16, $31, $2C, 54 | $97, $8A, $AD, $B0, $E3, $FE, $D9, $C4 55 | ); 56 | 57 | constructor THasherCRC8_SAEJ1850.Create; 58 | begin 59 | inherited Create; 60 | FHash := $FF; 61 | Check := '4B'; 62 | end; 63 | 64 | procedure THasherCRC8_SAEJ1850.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := (FHash shl 8) xor Table[(Msg^ xor FHash) and $FF]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC8_SAEJ1850.Final: String; 74 | begin 75 | FHash := FHash xor $FF; 76 | Result := IntToHex(FHash, 2); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-8 SAE-J1850', THasherCRC8_SAEJ1850); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC8_SMBUS.pas: -------------------------------------------------------------------------------- 1 | unit CRC8_SMBUS; 2 | //CRC-8 SMBUS 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC8_SMBUS = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Byte = ( 23 | $00, $07, $0E, $09, $1C, $1B, $12, $15, 24 | $38, $3F, $36, $31, $24, $23, $2A, $2D, 25 | $70, $77, $7E, $79, $6C, $6B, $62, $65, 26 | $48, $4F, $46, $41, $54, $53, $5A, $5D, 27 | $E0, $E7, $EE, $E9, $FC, $FB, $F2, $F5, 28 | $D8, $DF, $D6, $D1, $C4, $C3, $CA, $CD, 29 | $90, $97, $9E, $99, $8C, $8B, $82, $85, 30 | $A8, $AF, $A6, $A1, $B4, $B3, $BA, $BD, 31 | $C7, $C0, $C9, $CE, $DB, $DC, $D5, $D2, 32 | $FF, $F8, $F1, $F6, $E3, $E4, $ED, $EA, 33 | $B7, $B0, $B9, $BE, $AB, $AC, $A5, $A2, 34 | $8F, $88, $81, $86, $93, $94, $9D, $9A, 35 | $27, $20, $29, $2E, $3B, $3C, $35, $32, 36 | $1F, $18, $11, $16, $03, $04, $0D, $0A, 37 | $57, $50, $59, $5E, $4B, $4C, $45, $42, 38 | $6F, $68, $61, $66, $73, $74, $7D, $7A, 39 | $89, $8E, $87, $80, $95, $92, $9B, $9C, 40 | $B1, $B6, $BF, $B8, $AD, $AA, $A3, $A4, 41 | $F9, $FE, $F7, $F0, $E5, $E2, $EB, $EC, 42 | $C1, $C6, $CF, $C8, $DD, $DA, $D3, $D4, 43 | $69, $6E, $67, $60, $75, $72, $7B, $7C, 44 | $51, $56, $5F, $58, $4D, $4A, $43, $44, 45 | $19, $1E, $17, $10, $05, $02, $0B, $0C, 46 | $21, $26, $2F, $28, $3D, $3A, $33, $34, 47 | $4E, $49, $40, $47, $52, $55, $5C, $5B, 48 | $76, $71, $78, $7F, $6A, $6D, $64, $63, 49 | $3E, $39, $30, $37, $22, $25, $2C, $2B, 50 | $06, $01, $08, $0F, $1A, $1D, $14, $13, 51 | $AE, $A9, $A0, $A7, $B2, $B5, $BC, $BB, 52 | $96, $91, $98, $9F, $8A, $8D, $84, $83, 53 | $DE, $D9, $D0, $D7, $C2, $C5, $CC, $CB, 54 | $E6, $E1, $E8, $EF, $FA, $FD, $F4, $F3 55 | ); 56 | 57 | constructor THasherCRC8_SMBUS.Create; 58 | begin 59 | inherited Create; 60 | FHash := $00; 61 | Check := 'F4'; 62 | end; 63 | 64 | procedure THasherCRC8_SMBUS.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := (FHash shl 8) xor Table[(Msg^ xor FHash) and $FF]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC8_SMBUS.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 2); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-8 SMBUS', THasherCRC8_SMBUS); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC8_TECH3250.pas: -------------------------------------------------------------------------------- 1 | unit CRC8_TECH3250; 2 | //CRC-8 TECH-3250 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC8_TECH3250 = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Byte = ( 23 | $00, $64, $C8, $AC, $E1, $85, $29, $4D, 24 | $B3, $D7, $7B, $1F, $52, $36, $9A, $FE, 25 | $17, $73, $DF, $BB, $F6, $92, $3E, $5A, 26 | $A4, $C0, $6C, $08, $45, $21, $8D, $E9, 27 | $2E, $4A, $E6, $82, $CF, $AB, $07, $63, 28 | $9D, $F9, $55, $31, $7C, $18, $B4, $D0, 29 | $39, $5D, $F1, $95, $D8, $BC, $10, $74, 30 | $8A, $EE, $42, $26, $6B, $0F, $A3, $C7, 31 | $5C, $38, $94, $F0, $BD, $D9, $75, $11, 32 | $EF, $8B, $27, $43, $0E, $6A, $C6, $A2, 33 | $4B, $2F, $83, $E7, $AA, $CE, $62, $06, 34 | $F8, $9C, $30, $54, $19, $7D, $D1, $B5, 35 | $72, $16, $BA, $DE, $93, $F7, $5B, $3F, 36 | $C1, $A5, $09, $6D, $20, $44, $E8, $8C, 37 | $65, $01, $AD, $C9, $84, $E0, $4C, $28, 38 | $D6, $B2, $1E, $7A, $37, $53, $FF, $9B, 39 | $B8, $DC, $70, $14, $59, $3D, $91, $F5, 40 | $0B, $6F, $C3, $A7, $EA, $8E, $22, $46, 41 | $AF, $CB, $67, $03, $4E, $2A, $86, $E2, 42 | $1C, $78, $D4, $B0, $FD, $99, $35, $51, 43 | $96, $F2, $5E, $3A, $77, $13, $BF, $DB, 44 | $25, $41, $ED, $89, $C4, $A0, $0C, $68, 45 | $81, $E5, $49, $2D, $60, $04, $A8, $CC, 46 | $32, $56, $FA, $9E, $D3, $B7, $1B, $7F, 47 | $E4, $80, $2C, $48, $05, $61, $CD, $A9, 48 | $57, $33, $9F, $FB, $B6, $D2, $7E, $1A, 49 | $F3, $97, $3B, $5F, $12, $76, $DA, $BE, 50 | $40, $24, $88, $EC, $A1, $C5, $69, $0D, 51 | $CA, $AE, $02, $66, $2B, $4F, $E3, $87, 52 | $79, $1D, $B1, $D5, $98, $FC, $50, $34, 53 | $DD, $B9, $15, $71, $3C, $58, $F4, $90, 54 | $6E, $0A, $A6, $C2, $8F, $EB, $47, $23 55 | ); 56 | 57 | constructor THasherCRC8_TECH3250.Create; 58 | begin 59 | inherited Create; 60 | FHash := $FF; 61 | Check := '97'; 62 | end; 63 | 64 | procedure THasherCRC8_TECH3250.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := Table[($FF and (FHash xor Msg^))]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC8_TECH3250.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 2); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-8 TECH-3250', THasherCRC8_TECH3250); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /CRC8_WCDMA.pas: -------------------------------------------------------------------------------- 1 | unit CRC8_WCDMA; 2 | //CRC-8 WCDMA 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC8_WCDMA = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table: array[0..255] of Byte = ( 23 | $00, $D0, $13, $C3, $26, $F6, $35, $E5, 24 | $4C, $9C, $5F, $8F, $6A, $BA, $79, $A9, 25 | $98, $48, $8B, $5B, $BE, $6E, $AD, $7D, 26 | $D4, $04, $C7, $17, $F2, $22, $E1, $31, 27 | $83, $53, $90, $40, $A5, $75, $B6, $66, 28 | $CF, $1F, $DC, $0C, $E9, $39, $FA, $2A, 29 | $1B, $CB, $08, $D8, $3D, $ED, $2E, $FE, 30 | $57, $87, $44, $94, $71, $A1, $62, $B2, 31 | $B5, $65, $A6, $76, $93, $43, $80, $50, 32 | $F9, $29, $EA, $3A, $DF, $0F, $CC, $1C, 33 | $2D, $FD, $3E, $EE, $0B, $DB, $18, $C8, 34 | $61, $B1, $72, $A2, $47, $97, $54, $84, 35 | $36, $E6, $25, $F5, $10, $C0, $03, $D3, 36 | $7A, $AA, $69, $B9, $5C, $8C, $4F, $9F, 37 | $AE, $7E, $BD, $6D, $88, $58, $9B, $4B, 38 | $E2, $32, $F1, $21, $C4, $14, $D7, $07, 39 | $D9, $09, $CA, $1A, $FF, $2F, $EC, $3C, 40 | $95, $45, $86, $56, $B3, $63, $A0, $70, 41 | $41, $91, $52, $82, $67, $B7, $74, $A4, 42 | $0D, $DD, $1E, $CE, $2B, $FB, $38, $E8, 43 | $5A, $8A, $49, $99, $7C, $AC, $6F, $BF, 44 | $16, $C6, $05, $D5, $30, $E0, $23, $F3, 45 | $C2, $12, $D1, $01, $E4, $34, $F7, $27, 46 | $8E, $5E, $9D, $4D, $A8, $78, $BB, $6B, 47 | $6C, $BC, $7F, $AF, $4A, $9A, $59, $89, 48 | $20, $F0, $33, $E3, $06, $D6, $15, $C5, 49 | $F4, $24, $E7, $37, $D2, $02, $C1, $11, 50 | $B8, $68, $AB, $7B, $9E, $4E, $8D, $5D, 51 | $EF, $3F, $FC, $2C, $C9, $19, $DA, $0A, 52 | $A3, $73, $B0, $60, $85, $55, $96, $46, 53 | $77, $A7, $64, $B4, $51, $81, $42, $92, 54 | $3B, $EB, $28, $F8, $1D, $CD, $0E, $DE 55 | ); 56 | 57 | constructor THasherCRC8_WCDMA.Create; 58 | begin 59 | inherited Create; 60 | FHash := $00; 61 | Check := '25'; 62 | end; 63 | 64 | procedure THasherCRC8_WCDMA.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := Table[($FF and (FHash xor Msg^))]; 69 | Inc(Msg); 70 | end; 71 | end; 72 | 73 | function THasherCRC8_WCDMA.Final: String; 74 | begin 75 | 76 | Result := IntToHex(FHash, 2); 77 | end; 78 | 79 | initialization 80 | HasherList.RegisterHasher('CRC-8 WCDMA', THasherCRC8_WCDMA); 81 | 82 | end. 83 | -------------------------------------------------------------------------------- /DEKHash.pas: -------------------------------------------------------------------------------- 1 | unit DEKHash; 2 | //DEK Hash 3 | 4 | interface 5 | 6 | uses SysUtils, HasherBase; 7 | 8 | 9 | type THasherDEKHash = class(THasherbase) 10 | private 11 | FHash: Cardinal; 12 | public 13 | constructor Create; override; 14 | procedure Update(Msg: PByte; Length: Integer); override; 15 | function Final: String; override; 16 | end; 17 | 18 | implementation 19 | 20 | constructor THasherDEKHash.Create; 21 | begin 22 | inherited Create; 23 | Check := 'AB4ACBA5'; 24 | FHash := 0; 25 | end; 26 | 27 | procedure THasherDEKHash.Update(Msg: PByte; Length: Integer); 28 | var i: Integer; 29 | Val: Cardinal; 30 | begin 31 | FHash := Length; 32 | 33 | for i:=0 to Length-1 do begin 34 | FHash := ((FHash shl 5) xor (FHash shr 27)) xor Msg^; 35 | 36 | Inc(Msg); 37 | end; 38 | end; 39 | 40 | function THasherDEKHash.Final: String; 41 | begin 42 | Result := IntToHex(FHash, 8); 43 | end; 44 | 45 | 46 | initialization 47 | HasherList.RegisterHasher('DEK Hash', THasherDEKHash); 48 | 49 | end. 50 | -------------------------------------------------------------------------------- /DJBHash.pas: -------------------------------------------------------------------------------- 1 | unit DJBHash; 2 | //DJB Hash 3 | //Author: domasz 4 | //Last Update: 2022-11-26 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | 12 | type THasherDJBHash = class(THasherbase) 13 | private 14 | FHash: Cardinal; 15 | public 16 | constructor Create; override; 17 | procedure Update(Msg: PByte; Length: Integer); override; 18 | function Final: String; override; 19 | end; 20 | 21 | implementation 22 | 23 | constructor THasherDJBHash.Create; 24 | begin 25 | inherited Create; 26 | Check := '35CDBB82'; 27 | FHash := 5381; 28 | end; 29 | 30 | procedure THasherDJBHash.Update(Msg: PByte; Length: Integer); 31 | var i: Integer; 32 | Val: Cardinal; 33 | begin 34 | for i:=0 to Length-1 do begin 35 | 36 | FHash := ((FHash shl 5) + FHash) + Msg^; 37 | 38 | Inc(Msg); 39 | end; 40 | end; 41 | 42 | function THasherDJBHash.Final: String; 43 | begin 44 | Result := IntToHex(FHash, 8); 45 | end; 46 | 47 | 48 | initialization 49 | HasherList.RegisterHasher('DJB Hash', THasherDJBHash); 50 | 51 | end. 52 | -------------------------------------------------------------------------------- /FNV0_16.pas: -------------------------------------------------------------------------------- 1 | unit FNV0_16; 2 | //FNV0_16 3 | //Author: domasz 4 | //Last Update: 2022-11-20 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherFNV0_16 = class(THasherbase) 12 | private 13 | FHash: Cardinal; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherFNV0_16.Create; 23 | begin 24 | inherited Create; 25 | Check := 'D326'; 26 | FHash := 0; 27 | end; 28 | 29 | procedure THasherFNV0_16.Update(Msg: PByte; Length: Integer); 30 | var i: Integer; 31 | begin 32 | for i:=0 to Length-1 do begin 33 | FHash := FHash * $01000193; 34 | FHash := FHash xor Msg^; 35 | 36 | Inc(Msg); 37 | end; 38 | end; 39 | 40 | function THasherFNV0_16.Final: String; 41 | begin 42 | FHash := (FHash shr 16) xor (FHash and $ffff); 43 | Result := IntToHex(FHash, 4); 44 | end; 45 | 46 | initialization 47 | HasherList.RegisterHasher('FNV0-16', THasherFNV0_16); 48 | 49 | end. 50 | -------------------------------------------------------------------------------- /FNV0_24.pas: -------------------------------------------------------------------------------- 1 | unit FNV0_24; 2 | //FNV0_24 3 | //Author: domasz 4 | //Last Update: 2022-11-20 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherFNV0_24 = class(THasherbase) 12 | private 13 | FHash: Cardinal; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherFNV0_24.Create; 23 | begin 24 | inherited Create; 25 | Check := 'D70B29'; 26 | FHash := 0; 27 | end; 28 | 29 | procedure THasherFNV0_24.Update(Msg: PByte; Length: Integer); 30 | var i: Integer; 31 | begin 32 | for i:=0 to Length-1 do begin 33 | FHash := FHash * $01000193; 34 | FHash := FHash xor Msg^; 35 | 36 | Inc(Msg); 37 | end; 38 | end; 39 | 40 | function THasherFNV0_24.Final: String; 41 | begin 42 | FHash := (FHash shr 24) xor (FHash and $FFFFFF); 43 | Result := IntToHex(FHash, 6); 44 | end; 45 | 46 | initialization 47 | HasherList.RegisterHasher('FNV0-24', THasherFNV0_24); 48 | 49 | end. 50 | -------------------------------------------------------------------------------- /FNV0_32.pas: -------------------------------------------------------------------------------- 1 | unit FNV0_32; 2 | //FNV0_32 3 | //Author: domasz 4 | //Last Update: 2022-11-20 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherFNV0_32 = class(THasherbase) 12 | private 13 | FHash: Cardinal; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherFNV0_32.Create; 23 | begin 24 | inherited Create; 25 | Check := 'D8D70BF1'; 26 | FHash := 0; 27 | end; 28 | 29 | procedure THasherFNV0_32.Update(Msg: PByte; Length: Integer); 30 | var i: Integer; 31 | begin 32 | for i:=0 to Length-1 do begin 33 | FHash := FHash * $01000193; 34 | FHash := FHash xor Msg^; 35 | 36 | Inc(Msg); 37 | end; 38 | end; 39 | 40 | function THasherFNV0_32.Final: String; 41 | begin 42 | 43 | Result := IntToHex(FHash, 8); 44 | end; 45 | 46 | initialization 47 | HasherList.RegisterHasher('FNV0-32', THasherFNV0_32); 48 | 49 | end. 50 | -------------------------------------------------------------------------------- /FNV0_56.pas: -------------------------------------------------------------------------------- 1 | unit FNV0_56; 2 | //FNV0_56 3 | //Author: domasz 4 | //Last Update: 2022-11-20 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherFNV0_56 = class(THasherbase) 12 | private 13 | FHash: QWord; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherFNV0_56.Create; 23 | begin 24 | inherited Create; 25 | Check := 'FB573C21FE6849'; 26 | FHash := 0; 27 | end; 28 | 29 | procedure THasherFNV0_56.Update(Msg: PByte; Length: Integer); 30 | var i: Integer; 31 | begin 32 | for i:=0 to Length-1 do begin 33 | FHash := FHash * $0100000001B3; 34 | FHash := FHash xor Msg^; 35 | 36 | Inc(Msg); 37 | end; 38 | end; 39 | 40 | function THasherFNV0_56.Final: String; 41 | begin 42 | FHash := (FHash shr 56) xor (FHash and $ffffffffffffff); 43 | Result := IntToHex(FHash, 14); 44 | end; 45 | 46 | initialization 47 | HasherList.RegisterHasher('FNV0-56', THasherFNV0_56); 48 | 49 | end. 50 | -------------------------------------------------------------------------------- /FNV0_64.pas: -------------------------------------------------------------------------------- 1 | unit FNV0_64; 2 | //FNV0_64 3 | //Author: domasz 4 | //Last Update: 2022-11-20 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherFNV0_64 = class(THasherbase) 12 | private 13 | FHash: QWord; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherFNV0_64.Create; 23 | begin 24 | inherited Create; 25 | Check := 'B8FB573C21FE68F1'; 26 | FHash := 0; 27 | end; 28 | 29 | procedure THasherFNV0_64.Update(Msg: PByte; Length: Integer); 30 | var i: Integer; 31 | begin 32 | for i:=0 to Length-1 do begin 33 | FHash := FHash * $0100000001B3; 34 | FHash := FHash xor Msg^; 35 | 36 | Inc(Msg); 37 | end; 38 | end; 39 | 40 | function THasherFNV0_64.Final: String; 41 | begin 42 | 43 | Result := IntToHex(FHash, 16); 44 | end; 45 | 46 | initialization 47 | HasherList.RegisterHasher('FNV0-64', THasherFNV0_64); 48 | 49 | end. 50 | -------------------------------------------------------------------------------- /FNV0_8.pas: -------------------------------------------------------------------------------- 1 | unit FNV0_8; 2 | //FNV0_8 3 | //Author: domasz 4 | //Last Update: 2022-11-20 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherFNV0_8 = class(THasherbase) 12 | private 13 | FHash: Cardinal; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherFNV0_8.Create; 23 | begin 24 | inherited Create; 25 | Check := 'FA'; 26 | FHash := 0; 27 | end; 28 | 29 | procedure THasherFNV0_8.Update(Msg: PByte; Length: Integer); 30 | var i: Integer; 31 | begin 32 | for i:=0 to Length-1 do begin 33 | FHash := FHash * $01000193; 34 | FHash := FHash xor Msg^; 35 | 36 | Inc(Msg); 37 | end; 38 | end; 39 | 40 | function THasherFNV0_8.Final: String; 41 | begin 42 | FHash := ((FHash shr 8) xor FHash) and $ff; 43 | Result := IntToHex(FHash, 2); 44 | end; 45 | 46 | initialization 47 | HasherList.RegisterHasher('FNV0-8', THasherFNV0_8); 48 | 49 | end. 50 | -------------------------------------------------------------------------------- /FNV1A_56.pas: -------------------------------------------------------------------------------- 1 | unit FNV1A_56; 2 | //FNV1A_56 3 | //Author: domasz 4 | //Last Update: 2022-11-20 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherFNV1A_56 = class(THasherbase) 12 | private 13 | FHash: QWord; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherFNV1A_56.Create; 23 | begin 24 | inherited Create; 25 | Check := 'D5573923C6CDFA'; 26 | FHash := $CBF29CE484222325; 27 | end; 28 | 29 | procedure THasherFNV1A_56.Update(Msg: PByte; Length: Integer); 30 | var i: Integer; 31 | begin 32 | for i:=0 to Length-1 do begin 33 | FHash := FHash xor Msg^; 34 | FHash := FHash * $0100000001B3; 35 | 36 | Inc(Msg); 37 | end; 38 | end; 39 | 40 | function THasherFNV1A_56.Final: String; 41 | begin 42 | FHash := (FHash shr 56) xor (FHash and $ffffffffffffff); 43 | Result := IntToHex(FHash, 14); 44 | end; 45 | 46 | initialization 47 | HasherList.RegisterHasher('FNV1a-56', THasherFNV1A_56); 48 | 49 | end. 50 | -------------------------------------------------------------------------------- /FNV1A_64.pas: -------------------------------------------------------------------------------- 1 | unit FNV1A_64; 2 | //FNV1A_64 3 | //Author: domasz 4 | //Last Update: 2022-11-20 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherFNV1A_64 = class(THasherbase) 12 | private 13 | FHash: QWord; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherFNV1A_64.Create; 23 | begin 24 | inherited Create; 25 | Check := '06D5573923C6CDFC'; 26 | FHash := $CBF29CE484222325; 27 | end; 28 | 29 | procedure THasherFNV1A_64.Update(Msg: PByte; Length: Integer); 30 | var i: Integer; 31 | begin 32 | for i:=0 to Length-1 do begin 33 | FHash := FHash xor Msg^; 34 | FHash := FHash * $0100000001B3; 35 | 36 | Inc(Msg); 37 | end; 38 | end; 39 | 40 | function THasherFNV1A_64.Final: String; 41 | begin 42 | 43 | Result := IntToHex(FHash, 16); 44 | end; 45 | 46 | initialization 47 | HasherList.RegisterHasher('FNV1a-64', THasherFNV1A_64); 48 | 49 | end. 50 | -------------------------------------------------------------------------------- /FNV1_16.pas: -------------------------------------------------------------------------------- 1 | unit FNV1_16; 2 | //FNV1_16 3 | //Author: domasz 4 | //Last Update: 2022-11-20 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherFNV1_16 = class(THasherbase) 12 | private 13 | FHash: Cardinal; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherFNV1_16.Create; 23 | begin 24 | inherited Create; 25 | Check := 'AC02'; 26 | FHash := $811C9DC5; 27 | end; 28 | 29 | procedure THasherFNV1_16.Update(Msg: PByte; Length: Integer); 30 | var i: Integer; 31 | begin 32 | for i:=0 to Length-1 do begin 33 | FHash := FHash * $01000193; 34 | FHash := FHash xor Msg^; 35 | 36 | Inc(Msg); 37 | end; 38 | end; 39 | 40 | function THasherFNV1_16.Final: String; 41 | begin 42 | FHash := (FHash shr 16) xor (FHash and $ffff); 43 | Result := IntToHex(FHash, 4); 44 | end; 45 | 46 | initialization 47 | HasherList.RegisterHasher('FNV1-16', THasherFNV1_16); 48 | 49 | end. 50 | -------------------------------------------------------------------------------- /FNV1_32.pas: -------------------------------------------------------------------------------- 1 | unit FNV1_32; 2 | //FNV1_32 3 | //Author: domasz 4 | //Last Update: 2022-11-20 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherFNV1_32 = class(THasherbase) 12 | private 13 | FHash: Cardinal; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherFNV1_32.Create; 23 | begin 24 | inherited Create; 25 | Check := '24148816'; 26 | FHash := $811C9DC5; 27 | end; 28 | 29 | procedure THasherFNV1_32.Update(Msg: PByte; Length: Integer); 30 | var i: Integer; 31 | begin 32 | for i:=0 to Length-1 do begin 33 | FHash := FHash * $01000193; 34 | FHash := FHash xor Msg^; 35 | 36 | Inc(Msg); 37 | end; 38 | end; 39 | 40 | function THasherFNV1_32.Final: String; 41 | begin 42 | 43 | Result := IntToHex(FHash, 8); 44 | end; 45 | 46 | initialization 47 | HasherList.RegisterHasher('FNV1-32', THasherFNV1_32); 48 | 49 | end. 50 | -------------------------------------------------------------------------------- /FNV1_56.pas: -------------------------------------------------------------------------------- 1 | unit FNV1_56; 2 | //FNV1_56 3 | //Author: domasz 4 | //Last Update: 2022-11-20 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherFNV1_56 = class(THasherbase) 12 | private 13 | FHash: QWord; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherFNV1_56.Create; 23 | begin 24 | inherited Create; 25 | Check := '2FFC362BF91671'; 26 | FHash := $CBF29CE484222325; 27 | end; 28 | 29 | procedure THasherFNV1_56.Update(Msg: PByte; Length: Integer); 30 | var i: Integer; 31 | begin 32 | for i:=0 to Length-1 do begin 33 | FHash := FHash * $0100000001B3; 34 | FHash := FHash xor Msg^; 35 | 36 | Inc(Msg); 37 | end; 38 | end; 39 | 40 | function THasherFNV1_56.Final: String; 41 | begin 42 | FHash := (FHash shr 56) xor (FHash and $ffffffffffffff); 43 | Result := IntToHex(FHash, 14); 44 | end; 45 | 46 | initialization 47 | HasherList.RegisterHasher('FNV1-56', THasherFNV1_56); 48 | 49 | end. 50 | -------------------------------------------------------------------------------- /FNV1_64.pas: -------------------------------------------------------------------------------- 1 | unit FNV1_64; 2 | //FNV1_64 3 | //Author: domasz 4 | //Last Update: 2022-11-20 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherFNV1_64 = class(THasherbase) 12 | private 13 | FHash: QWord; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherFNV1_64.Create; 23 | begin 24 | inherited Create; 25 | Check := 'A72FFC362BF916D6'; 26 | FHash := $CBF29CE484222325; 27 | end; 28 | 29 | procedure THasherFNV1_64.Update(Msg: PByte; Length: Integer); 30 | var i: Integer; 31 | begin 32 | for i:=0 to Length-1 do begin 33 | FHash := FHash * $0100000001B3; 34 | FHash := FHash xor Msg^; 35 | 36 | Inc(Msg); 37 | end; 38 | end; 39 | 40 | function THasherFNV1_64.Final: String; 41 | begin 42 | 43 | Result := IntToHex(FHash, 16); 44 | end; 45 | 46 | initialization 47 | HasherList.RegisterHasher('FNV1-64', THasherFNV1_64); 48 | 49 | end. 50 | -------------------------------------------------------------------------------- /FNV1_8.pas: -------------------------------------------------------------------------------- 1 | unit FNV1_8; 2 | //FNV1_8 3 | //Author: domasz 4 | //Last Update: 2022-11-20 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherFNV1_8 = class(THasherbase) 12 | private 13 | FHash: Cardinal; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherFNV1_8.Create; 23 | begin 24 | inherited Create; 25 | Check := '9E'; 26 | FHash := $811C9DC5; 27 | end; 28 | 29 | procedure THasherFNV1_8.Update(Msg: PByte; Length: Integer); 30 | var i: Integer; 31 | begin 32 | for i:=0 to Length-1 do begin 33 | FHash := FHash * $01000193; 34 | FHash := FHash xor Msg^; 35 | 36 | Inc(Msg); 37 | end; 38 | end; 39 | 40 | function THasherFNV1_8.Final: String; 41 | begin 42 | FHash := ((FHash shr 8) xor FHash) and $ff; 43 | Result := IntToHex(FHash, 2); 44 | end; 45 | 46 | initialization 47 | HasherList.RegisterHasher('FNV1-8', THasherFNV1_8); 48 | 49 | end. 50 | -------------------------------------------------------------------------------- /FNV1a_16.pas: -------------------------------------------------------------------------------- 1 | unit FNV1a_16; 2 | //FNV1a_16 3 | //Author: domasz 4 | //Last Update: 2022-11-20 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherFNV1a_16 = class(THasherbase) 12 | private 13 | FHash: Cardinal; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherFNV1a_16.Create; 23 | begin 24 | inherited Create; 25 | Check := '0A9A'; 26 | FHash := $811C9DC5; 27 | end; 28 | 29 | procedure THasherFNV1a_16.Update(Msg: PByte; Length: Integer); 30 | var i: Integer; 31 | begin 32 | for i:=0 to Length-1 do begin 33 | FHash := FHash xor Msg^; 34 | FHash := FHash * $01000193; 35 | 36 | Inc(Msg); 37 | end; 38 | end; 39 | 40 | function THasherFNV1a_16.Final: String; 41 | begin 42 | FHash := (FHash shr 16) xor (FHash and $ffff); 43 | Result := IntToHex(FHash, 4); 44 | end; 45 | 46 | initialization 47 | HasherList.RegisterHasher('FNV1a-16', THasherFNV1a_16); 48 | 49 | end. 50 | -------------------------------------------------------------------------------- /FNV1a_32.pas: -------------------------------------------------------------------------------- 1 | unit FNV1a_32; 2 | //FNV1a_32 3 | //Author: domasz 4 | //Last Update: 2022-11-20 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherFNV1a_32 = class(THasherbase) 12 | private 13 | FHash: Cardinal; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherFNV1a_32.Create; 23 | begin 24 | inherited Create; 25 | Check := 'BB86B11C'; 26 | FHash := $811C9DC5; 27 | end; 28 | 29 | procedure THasherFNV1a_32.Update(Msg: PByte; Length: Integer); 30 | var i: Integer; 31 | begin 32 | for i:=0 to Length-1 do begin 33 | FHash := FHash xor Msg^; 34 | FHash := FHash * $01000193; 35 | 36 | Inc(Msg); 37 | end; 38 | end; 39 | 40 | function THasherFNV1a_32.Final: String; 41 | begin 42 | 43 | Result := IntToHex(FHash, 8); 44 | end; 45 | 46 | initialization 47 | HasherList.RegisterHasher('FNV1a-32', THasherFNV1a_32); 48 | 49 | end. 50 | -------------------------------------------------------------------------------- /FNV1a_8.pas: -------------------------------------------------------------------------------- 1 | unit FNV1a_8; 2 | //FNV1a_8 3 | //Author: domasz 4 | //Last Update: 2022-11-20 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherFNV1a_8 = class(THasherbase) 12 | private 13 | FHash: Cardinal; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherFNV1a_8.Create; 23 | begin 24 | inherited Create; 25 | Check := 'AD'; 26 | FHash := $811C9DC5; 27 | end; 28 | 29 | procedure THasherFNV1a_8.Update(Msg: PByte; Length: Integer); 30 | var i: Integer; 31 | begin 32 | for i:=0 to Length-1 do begin 33 | FHash := FHash xor Msg^; 34 | FHash := FHash * $01000193; 35 | 36 | Inc(Msg); 37 | end; 38 | end; 39 | 40 | function THasherFNV1a_8.Final: String; 41 | begin 42 | FHash := ((FHash shr 8) xor FHash) and $ff; 43 | Result := IntToHex(FHash, 2); 44 | end; 45 | 46 | initialization 47 | HasherList.RegisterHasher('FNV1a-8', THasherFNV1a_8); 48 | 49 | end. 50 | -------------------------------------------------------------------------------- /GHash3.pas: -------------------------------------------------------------------------------- 1 | unit GHash3; 2 | //GHash3 3 | //Author: domasz 4 | //Last Update: 2022-11-20 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherGHash3 = class(THasherbase) 12 | private 13 | FHash: Cardinal; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherGHash3.Create; 23 | begin 24 | inherited Create; 25 | Check := '8DCCB81D'; 26 | FHash := 0; 27 | end; 28 | 29 | procedure THasherGHash3.Update(Msg: PByte; Length: Integer); 30 | var i: Integer; 31 | begin 32 | for i:=0 to Length-1 do begin 33 | FHash := (FHash shl 3) + FHash + Msg^; 34 | 35 | Inc(Msg); 36 | end; 37 | end; 38 | 39 | function THasherGHash3.Final: String; 40 | begin 41 | 42 | Result := IntToHex(FHash, 8); 43 | end; 44 | 45 | initialization 46 | HasherList.RegisterHasher('GHash3', THasherGHash3); 47 | 48 | end. 49 | -------------------------------------------------------------------------------- /GHash5.pas: -------------------------------------------------------------------------------- 1 | unit GHash5; 2 | //GHash5 3 | //Author: domasz 4 | //Last Update: 2022-11-20 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherGHash5 = class(THasherbase) 12 | private 13 | FHash: Cardinal; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherGHash5.Create; 23 | begin 24 | inherited Create; 25 | Check := '43B130DD'; 26 | FHash := 0; 27 | end; 28 | 29 | procedure THasherGHash5.Update(Msg: PByte; Length: Integer); 30 | var i: Integer; 31 | begin 32 | for i:=0 to Length-1 do begin 33 | FHash := (FHash shl 5) + FHash + Msg^; 34 | 35 | Inc(Msg); 36 | end; 37 | end; 38 | 39 | function THasherGHash5.Final: String; 40 | begin 41 | 42 | Result := IntToHex(FHash, 8); 43 | end; 44 | 45 | initialization 46 | HasherList.RegisterHasher('GHash5', THasherGHash5); 47 | 48 | end. 49 | -------------------------------------------------------------------------------- /HasherBase.pas: -------------------------------------------------------------------------------- 1 | unit HasherBase; 2 | //Author: domasz 3 | //Version: 0.1 (2022-11-17) 4 | //Licence: MIT 5 | 6 | interface 7 | 8 | uses SysUtils, Classes, FGL; 9 | 10 | type 11 | 12 | { THasherBase } 13 | 14 | THasherBase = class 15 | public 16 | Check: String; //hash of '123456789' 17 | constructor Create; virtual; 18 | procedure Update(Msg: PByte; Length: Integer); virtual; abstract; 19 | function Final: String; virtual; abstract; 20 | end; 21 | 22 | { THasherList } 23 | 24 | THasherClass = class of THasherBase; 25 | THasherMap = specialize TFPGmap; 26 | 27 | THasherList = class 28 | private 29 | FList: THasherMap; 30 | public 31 | constructor Create; 32 | destructor Destroy; override; 33 | function Count: Integer; 34 | function GetName(Index: Integer): String; 35 | function FindClass(Name: String; out AClass: THasherClass): Boolean; 36 | procedure RegisterHasher(Name: String; AClass: THasherClass); 37 | end; 38 | 39 | var HasherList: THasherList; 40 | 41 | implementation 42 | 43 | { THasherBase } 44 | 45 | constructor THasherBase.Create; 46 | begin 47 | inherited Create; 48 | end; 49 | 50 | { THasherList } 51 | 52 | constructor THasherList.Create; 53 | begin 54 | inherited Create; 55 | FList := THasherMap.Create; 56 | end; 57 | 58 | destructor THasherList.Destroy; 59 | begin 60 | FList.Free; 61 | inherited; 62 | end; 63 | 64 | function THasherList.Count: Integer; 65 | begin 66 | Result := FList.Count; 67 | end; 68 | 69 | function THasherList.GetName(Index: Integer): String; 70 | begin 71 | if (Index > FList.Count-1) or (Index < 0) then Result := '' 72 | else Result := FList.Keys[Index]; 73 | end; 74 | 75 | function THasherList.FindClass(Name: String; out AClass: THasherClass): Boolean; 76 | var Index: Integer; 77 | begin 78 | Name := LowerCase(Name); 79 | Index := FList.IndexOf(Name); 80 | 81 | if Index < 0 then begin 82 | Result := False; 83 | Exit; 84 | end; 85 | 86 | AClass := FList.Data[Index]; 87 | Result := True; 88 | end; 89 | 90 | procedure THasherList.RegisterHasher(Name: String; AClass: THasherClass); 91 | begin 92 | FList.Add(LowerCase(Name), AClass); 93 | end; 94 | 95 | initialization 96 | HasherList := THasherList.Create; 97 | 98 | finalization 99 | HasherList.Free; 100 | 101 | end. 102 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 domasz/PascalVault 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /MurmurHash.pas: -------------------------------------------------------------------------------- 1 | unit MurmurHash; 2 | //MurmurHash 3 | //Author: domasz 4 | //Last Update: 2022-11-26 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherMurmurHash = class(THasherbase) 12 | private 13 | FHash: Cardinal; 14 | M: Cardinal; 15 | R: Cardinal; 16 | public 17 | constructor Create; override; 18 | procedure Update(Msg: PByte; Length: Integer); override; 19 | function Final: String; override; 20 | end; 21 | 22 | implementation 23 | 24 | constructor THasherMurmurHash.Create; 25 | begin 26 | inherited Create; 27 | Check := 'E9B7BC47'; 28 | FHash := 0; 29 | 30 | M := $c6a4a793; 31 | R := 16; 32 | end; 33 | 34 | procedure THasherMurmurHash.Update(Msg: PByte; Length: Integer); 35 | const Seed = 0; 36 | var i: Integer; 37 | Tmp: Cardinal; 38 | Tmp2: array[0..3] of Byte; 39 | begin 40 | FHash := seed xor (Length * M); 41 | 42 | while Length >= 4 do begin 43 | //Move(Msg^, Tmp, 4); 44 | Tmp := PCardinal(Msg)^; 45 | 46 | FHash := FHash + Tmp; 47 | FHash := FHash * M; 48 | FHash := FHash xor (FHash shr R); 49 | 50 | Inc(Msg, 4); 51 | Dec(Length, 4); 52 | end; 53 | 54 | Move(Msg^, Tmp2[0], Length); 55 | 56 | case Length of 57 | 3: FHash := FHash + (Tmp2[2] shl 16); 58 | 2: FHash := FHash + (Tmp2[1] shl 8); 59 | 1: begin 60 | FHash := FHash + Tmp2[0]; 61 | FHash := FHash * M; 62 | FHash := FHash xor (FHash shr R); 63 | end; 64 | end; 65 | 66 | FHash := FHash * M; 67 | FHash := FHash xor (FHash shr 10); 68 | FHash := FHash * M; 69 | FHash := FHash xor (FHash shr 17); 70 | end; 71 | 72 | function THasherMurmurHash.Final: String; 73 | begin 74 | Result := IntToHex(FHash, 8); 75 | end; 76 | 77 | 78 | initialization 79 | HasherList.RegisterHasher('MurmurHash', THasherMurmurHash); 80 | 81 | end. 82 | -------------------------------------------------------------------------------- /MurmurHash2.pas: -------------------------------------------------------------------------------- 1 | unit MurmurHash2; 2 | //MurmurHash2 3 | //Author: domasz 4 | //Last Update: 2022-11-26 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | 12 | type THasherMurmurHash2 = class(THasherbase) 13 | private 14 | FHash: Cardinal; 15 | M: Cardinal; 16 | R: Cardinal; 17 | public 18 | constructor Create; override; 19 | procedure Update(Msg: PByte; Length: Integer); override; 20 | function Final: String; override; 21 | end; 22 | 23 | implementation 24 | 25 | constructor THasherMurmurHash2.Create; 26 | begin 27 | inherited Create; 28 | Check := 'DCCB0167'; 29 | FHash := 0; 30 | M := $5bd1e995; 31 | R := 24; 32 | end; 33 | 34 | procedure THasherMurmurHash2.Update(Msg: PByte; Length: Integer); 35 | const Seed = 0; 36 | var i: Integer; 37 | K: Cardinal; 38 | Tmp: array[0..3] of Byte; 39 | begin 40 | FHash := Seed xor Length; 41 | K := 0; 42 | 43 | while Length >= 4 do begin 44 | Move(Msg^, Tmp[0], 4); 45 | 46 | K := Tmp[0]; 47 | K := K or (Tmp[1] shl 8); 48 | K := K or (Tmp[2] shl 16); 49 | K := K or (Tmp[3] shl 24); 50 | 51 | K := K * m; 52 | K := K xor (k shr r); 53 | K := K * m; 54 | 55 | FHash := FHash * M; 56 | FHash := FHash xor K; 57 | 58 | Inc(Msg, 4); 59 | Dec(Length, 4); 60 | end; 61 | 62 | Move(Msg^, Tmp[0], Length); 63 | 64 | case Length of 65 | 3: FHash := FHash xor (Tmp[2] shl 16); 66 | 2: FHash := FHash xor (Tmp[1] shl 8); 67 | 1: begin 68 | FHash := FHash xor Tmp[0]; 69 | FHash := FHash * M; 70 | end; 71 | end; 72 | 73 | FHash := FHash xor (FHash shr 13); 74 | FHash := FHash * M; 75 | FHash := FHash xor (FHash shr 15); 76 | end; 77 | 78 | function THasherMurmurHash2.Final: String; 79 | begin 80 | Result := IntToHex(FHash, 8); 81 | end; 82 | 83 | initialization 84 | HasherList.RegisterHasher('MurmurHash2', THasherMurmurHash2); 85 | 86 | end. 87 | -------------------------------------------------------------------------------- /MurmurHash2a.pas: -------------------------------------------------------------------------------- 1 | unit MurmurHash2a; 2 | //MurmurHash2a 3 | //Author: domasz 4 | //Last Update: 2022-11-26 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherMurmurHash2a = class(THasherbase) 12 | private 13 | FHash: Cardinal; 14 | M: Cardinal; 15 | R: Cardinal; 16 | public 17 | constructor Create; override; 18 | procedure Update(Msg: PByte; Length: Integer); override; 19 | function Final: String; override; 20 | end; 21 | 22 | implementation 23 | 24 | constructor THasherMurmurHash2a.Create; 25 | begin 26 | inherited Create; 27 | Check := '72D40B4C'; 28 | FHash := 0; 29 | M := $5bd1e995; 30 | R := 24; 31 | end; 32 | 33 | procedure THasherMurmurHash2a.Update(Msg: PByte; Length: Integer); 34 | procedure mmix(var h,k: Cardinal); 35 | begin 36 | k := k * m; 37 | k := k xor (k shr r); 38 | k := k * m; 39 | h := h * m; 40 | h := h xor k; 41 | end; 42 | 43 | const Seed = 0; 44 | var i: Integer; 45 | T,K,L: Cardinal; 46 | Tmp: array[0..3] of Byte; 47 | Tmp2: Cardinal; 48 | begin 49 | L := Length; 50 | 51 | FHash := Seed; 52 | K := 0; 53 | 54 | while Length >= 4 do begin 55 | //Move(Msg^, Tmp2, 4); 56 | Tmp2 := PCardinal(Msg)^; 57 | 58 | mmix(FHash, Tmp2); 59 | 60 | Inc(Msg, 4); 61 | Dec(Length, 4); 62 | end; 63 | 64 | Move(Msg^, Tmp[0], Length); 65 | 66 | T := 0; 67 | 68 | case Length of 69 | 3: T := T xor (Tmp[2] shl 16); 70 | 2: T := T xor (Tmp[1] shl 8); 71 | 1: T := T xor (Tmp[0]); 72 | end; 73 | 74 | mmix(FHash, T); 75 | mmix(FHash, L); 76 | 77 | FHash := FHash xor (FHash shr 13); 78 | FHash := FHash * M; 79 | FHash := FHash xor (FHash shr 15); 80 | end; 81 | 82 | function THasherMurmurHash2a.Final: String; 83 | begin 84 | Result := IntToHex(FHash, 8); 85 | end; 86 | 87 | initialization 88 | HasherList.RegisterHasher('MurmurHash2a', THasherMurmurHash2a); 89 | 90 | end. 91 | -------------------------------------------------------------------------------- /MurmurHash3.pas: -------------------------------------------------------------------------------- 1 | unit MurmurHash3; 2 | //MurmurHash3, based on public domain code by Austin Appleby 3 | //MurmurHash3_x86_32 variant 4 | //Author: domasz 5 | //Last Update: 2022-11-26 6 | //Licence: MIT 7 | 8 | interface 9 | 10 | uses SysUtils, HasherBase; 11 | 12 | type THasherMurmurHash3 = class(THasherbase) 13 | private 14 | FHash: Cardinal; 15 | public 16 | constructor Create; override; 17 | procedure Update(Msg: PByte; Length: Integer); override; 18 | function Final: String; override; 19 | end; 20 | 21 | implementation 22 | 23 | constructor THasherMurmurHash3.Create; 24 | begin 25 | inherited Create; 26 | Check := 'B4FEF382'; 27 | FHash := 0; 28 | end; 29 | 30 | procedure THasherMurmurHash3.Update(Msg: PByte; Length: Integer); 31 | function fmix32(h: Cardinal): Cardinal; inline; 32 | begin 33 | h := h xor (h shr 16); 34 | h := h * $85ebca6b; 35 | h := h xor (h shr 13); 36 | h := h * $c2b2ae35; 37 | h := h xor (h shr 16); 38 | 39 | Result := h; 40 | end; 41 | 42 | const Seed = 0; 43 | c1: Cardinal = $cc9e2d51; 44 | c2: Cardinal = $1b873593; 45 | var BlockCount: Integer; 46 | Hash: Cardinal; 47 | Data: Cardinal; 48 | blocks: PCardinal; 49 | FinalBytes: array[0..3] of Byte; 50 | BytesLeft: Integer; 51 | i: Integer; 52 | begin 53 | BlockCount := Length div 4; 54 | Hash := seed; 55 | 56 | blocks := PCardinal(Msg); 57 | 58 | for i:=0 to BlockCount-1 do begin 59 | Data := blocks^; 60 | Inc(blocks); 61 | 62 | Data := Data * c1; 63 | Data := RolDWord(Data,15); 64 | Data := Data * c2; 65 | 66 | Hash := Hash xor Data; 67 | Hash := RolDWord(Hash,13); 68 | Hash := Hash*5 + $e6546b64; 69 | end; 70 | 71 | //final bytes 72 | BytesLeft := Length - (BlockCount*4); 73 | 74 | Inc(Msg, BlockCount*4); 75 | FillChar(FinalBytes, 4, 0); 76 | Move(Msg^, FinalBytes[0], BytesLeft); 77 | 78 | Data := 0; 79 | 80 | if BytesLeft = 3 then Data := Data xor (FinalBytes[2] shl 16); 81 | 82 | if BytesLeft >=2 then Data := Data xor (FinalBytes[1] shl 8); 83 | 84 | if BytesLeft >=1 then Data := Data xor (FinalBytes[0] ); 85 | 86 | if BytesLeft > 0 then begin 87 | Data := Data * c1; 88 | Data := RolDWord(Data,15); 89 | Data := Data * c2; 90 | Hash := Hash xor Data; 91 | end; 92 | 93 | Hash := Hash xor Length; 94 | Hash := fmix32(Hash); 95 | 96 | FHash := Hash; 97 | end; 98 | 99 | function THasherMurmurHash3.Final: String; 100 | begin 101 | Result := IntToHex(FHash, 8); 102 | end; 103 | 104 | initialization 105 | HasherList.RegisterHasher('MurmurHash3', THasherMurmurHash3); 106 | 107 | end. 108 | -------------------------------------------------------------------------------- /MySQL3.pas: -------------------------------------------------------------------------------- 1 | unit MySQL3; 2 | //MySQL 3 password() 3 | //Author: domasz 4 | //Last Update: 2022-11-22 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherMySQL3 = class(THasherbase) 12 | private 13 | FHash, FHash2: Cardinal; 14 | Add: Cardinal; 15 | public 16 | constructor Create; override; 17 | procedure Update(Msg: PByte; Length: Integer); override; 18 | function Final: String; override; 19 | end; 20 | 21 | implementation 22 | 23 | constructor THasherMySQL3.Create; 24 | begin 25 | inherited Create; 26 | Check := '0C95234760AE5A28'; 27 | 28 | FHash := 1345345333; 29 | FHash2 := $12345671; 30 | Add := 7; 31 | end; 32 | 33 | procedure THasherMySQL3.Update(Msg: PByte; Length: Integer); 34 | var i: Integer; 35 | begin 36 | for i:=0 to Length-1 do begin 37 | if Msg^ in [32, 09] then continue; 38 | 39 | FHash := FHash xor ( (((FHash and 63) + Add) * Msg^) + (FHash shl 8) and $FFFFFFFF); 40 | FHash2 := (FHash2 + ((FHash2 shl 8) xor FHash)) and $FFFFFFFF; 41 | Add := (Add + Msg^) and $FFFFFFFF; 42 | 43 | Inc(Msg); 44 | end; 45 | end; 46 | 47 | function THasherMySQL3.Final: String; 48 | begin 49 | FHash := FHash and $7FFFFFFF; 50 | FHash2 := FHash2 and $7FFFFFFF; 51 | 52 | Result := IntToHex(FHash, 8) + IntToHex(FHash2, 8); 53 | end; 54 | 55 | initialization 56 | HasherList.RegisterHasher('MySQL 3', THasherMySQL3); 57 | 58 | end. 59 | -------------------------------------------------------------------------------- /One_at_a_time.pas: -------------------------------------------------------------------------------- 1 | unit One_at_a_time; 2 | //One at a time 3 | //Author: domasz 4 | //Last Update: 2022-11-26 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | 12 | type THasherOneAt = class(THasherbase) 13 | private 14 | FHash: Cardinal; 15 | public 16 | constructor Create; override; 17 | procedure Update(Msg: PByte; Length: Integer); override; 18 | function Final: String; override; 19 | end; 20 | 21 | implementation 22 | 23 | constructor THasherOneAt.Create; 24 | begin 25 | inherited Create; 26 | Check := 'C66B58C5'; 27 | FHash := 0; 28 | end; 29 | 30 | procedure THasherOneAt.Update(Msg: PByte; Length: Integer); 31 | var i: Integer; 32 | Val: Cardinal; 33 | begin 34 | for i:=0 to Length-1 do begin 35 | FHash := FHash + Msg^; 36 | FHash := FHash + (FHash shl 10); 37 | FHash := FHash xor (FHash shr 6); 38 | 39 | Inc(Msg); 40 | end; 41 | end; 42 | 43 | function THasherOneAt.Final: String; 44 | begin 45 | FHash := FHash + (FHash shl 3); 46 | FHash := FHash xor (FHash shr 11); 47 | FHash := FHash + (FHash shl 15); 48 | Result := IntToHex(FHash, 8); 49 | end; 50 | 51 | 52 | initialization 53 | HasherList.RegisterHasher('One at a time', THasherOneAt); 54 | 55 | end. 56 | -------------------------------------------------------------------------------- /PJW32.pas: -------------------------------------------------------------------------------- 1 | unit PJW32; 2 | //PJW-32, invented by Peter J. Weinberger 3 | //Author: domasz 4 | //Last Update: 2022-11-22 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherPJW32 = class(THasherbase) 12 | private 13 | FHash: Cardinal; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherPJW32.Create; 23 | begin 24 | inherited Create; 25 | FHash := 0; 26 | Check := '067897FC'; 27 | end; 28 | 29 | procedure THasherPJW32.Update(Msg: PByte; Length: Integer); 30 | var i: Integer; 31 | Test: Cardinal; 32 | begin 33 | for i:=0 to Length-1 do begin 34 | FHash := (FHash shl 4) + Msg^; 35 | Test := FHash and $F0000000; 36 | 37 | if (Test <> 0) then FHash := ((FHash xor (Test shr 28)) and $0FFFFFFF); 38 | 39 | Inc(Msg); 40 | end; 41 | end; 42 | 43 | function THasherPJW32.Final: String; 44 | begin 45 | Result := IntToHex(FHash, 8); 46 | end; 47 | 48 | initialization 49 | HasherList.RegisterHasher('PJW-32', THasherPJW32); 50 | 51 | end. 52 | -------------------------------------------------------------------------------- /SDBMHash.pas: -------------------------------------------------------------------------------- 1 | unit SDBMHash; 2 | //SDBM Hash 3 | //Author: domasz 4 | //Last Update: 2022-11-26 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | 12 | type THasherSDBMHash = class(THasherbase) 13 | private 14 | FHash: Cardinal; 15 | public 16 | constructor Create; override; 17 | procedure Update(Msg: PByte; Length: Integer); override; 18 | function Final: String; override; 19 | end; 20 | 21 | implementation 22 | 23 | constructor THasherSDBMHash.Create; 24 | begin 25 | inherited Create; 26 | Check := '68A07035'; 27 | FHash := 0; 28 | end; 29 | 30 | procedure THasherSDBMHash.Update(Msg: PByte; Length: Integer); 31 | var i: Integer; 32 | begin 33 | for i:=0 to Length-1 do begin 34 | FHash := Msg^ + (FHash shl 6) + (FHash shl 16) - FHash; 35 | 36 | Inc(Msg); 37 | end; 38 | end; 39 | 40 | function THasherSDBMHash.Final: String; 41 | begin 42 | Result := IntToHex(FHash, 8); 43 | end; 44 | 45 | 46 | initialization 47 | HasherList.RegisterHasher('SDBM Hash', THasherSDBMHash); 48 | 49 | end. 50 | -------------------------------------------------------------------------------- /adler16.pas: -------------------------------------------------------------------------------- 1 | unit adler16; 2 | //Adler-16 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherAdler16 = class(THasherbase) 12 | private 13 | FHash, FHash2: Word; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherAdler16.Create; 23 | begin 24 | inherited Create; 25 | Check := '4BE3'; 26 | FHash := 1; 27 | FHash2 := 0; 28 | end; 29 | 30 | procedure THasherAdler16.Update(Msg: PByte; Length: Integer); 31 | const MOD_ADLER = 251; 32 | var i: Integer; 33 | begin 34 | for i:=0 to Length-1 do begin 35 | FHash := (FHash + Msg^) mod MOD_ADLER; 36 | FHash2 := (FHash2 + FHash) mod MOD_ADLER; 37 | Inc(Msg); 38 | end; 39 | end; 40 | 41 | function THasherAdler16.Final: String; 42 | begin 43 | FHash := (FHash2 shl 8) or FHash; 44 | Result := IntToHex(FHash, 4); 45 | end; 46 | 47 | initialization 48 | HasherList.RegisterHasher('Adler-16', THasherAdler16); 49 | 50 | end. 51 | -------------------------------------------------------------------------------- /adler32.pas: -------------------------------------------------------------------------------- 1 | unit adler32; 2 | //Adler-32 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherAdler32 = class(THasherbase) 12 | private 13 | FHash, FHash2: Cardinal; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherAdler32.Create; 23 | begin 24 | inherited Create; 25 | Check := '091E01DE'; 26 | FHash := 1; 27 | FHash2 := 0; 28 | end; 29 | 30 | procedure THasherAdler32.Update(Msg: PByte; Length: Integer); 31 | const MOD_ADLER = 65521; 32 | var i: Integer; 33 | begin 34 | for i:=0 to Length-1 do begin 35 | FHash := (FHash + Msg^) mod MOD_ADLER; 36 | FHash2 := (FHash2 + FHash) mod MOD_ADLER; 37 | Inc(Msg); 38 | end; 39 | end; 40 | 41 | function THasherAdler32.Final: String; 42 | begin 43 | FHash := (FHash2 shl 16) or FHash; 44 | Result := IntToHex(FHash, 8); 45 | end; 46 | 47 | initialization 48 | HasherList.RegisterHasher('Adler-32', THasherAdler32); 49 | 50 | end. 51 | -------------------------------------------------------------------------------- /adler64.pas: -------------------------------------------------------------------------------- 1 | unit adler64; 2 | //Adler-64 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherAdler64 = class(THasherbase) 12 | private 13 | FHash, FHash2: QWord; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherAdler64.Create; 23 | begin 24 | inherited Create; 25 | Check := '0000091E000001DE'; 26 | FHash := 1; 27 | FHash2 := 0; 28 | end; 29 | 30 | procedure THasherAdler64.Update(Msg: PByte; Length: Integer); 31 | const MOD_ADLER = 4294967291; 32 | var i: Integer; 33 | begin 34 | for i:=0 to Length-1 do begin 35 | FHash := (FHash + Msg^) mod MOD_ADLER; 36 | FHash2 := (FHash2 + FHash) mod MOD_ADLER; 37 | Inc(Msg); 38 | end; 39 | end; 40 | 41 | function THasherAdler64.Final: String; 42 | begin 43 | FHash := (FHash2 shl 32) or FHash; 44 | Result := IntToHex(FHash, 16); 45 | end; 46 | 47 | initialization 48 | HasherList.RegisterHasher('Adler-64', THasherAdler64); 49 | 50 | end. 51 | -------------------------------------------------------------------------------- /adler8.pas: -------------------------------------------------------------------------------- 1 | unit adler8; 2 | //Adler-8 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherAdler8 = class(THasherbase) 12 | private 13 | FHash, FHash2: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherAdler8.Create; 23 | begin 24 | inherited Create; 25 | Check := '7A'; 26 | FHash := 1; 27 | FHash2 := 0; 28 | end; 29 | 30 | procedure THasherAdler8.Update(Msg: PByte; Length: Integer); 31 | const MOD_ADLER = 13; 32 | var i: Integer; 33 | begin 34 | for i:=0 to Length-1 do begin 35 | FHash := (FHash + Msg^) mod MOD_ADLER; 36 | FHash2 := (FHash2 + FHash) mod MOD_ADLER; 37 | Inc(Msg); 38 | end; 39 | end; 40 | 41 | function THasherAdler8.Final: String; 42 | begin 43 | FHash := (FHash2 shl 4) or FHash; 44 | Result := IntToHex(FHash, 2); 45 | end; 46 | 47 | initialization 48 | HasherList.RegisterHasher('Adler-8', THasherAdler8); 49 | 50 | end. 51 | -------------------------------------------------------------------------------- /aphash.pas: -------------------------------------------------------------------------------- 1 | unit ApHash; 2 | //Ap Hash 3 | //Author: domasz 4 | //Last Update: 2022-11-26 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | 12 | type THasherApHash = class(THasherbase) 13 | private 14 | FHash: Cardinal; 15 | public 16 | constructor Create; override; 17 | procedure Update(Msg: PByte; Length: Integer); override; 18 | function Final: String; override; 19 | end; 20 | 21 | implementation 22 | 23 | constructor THasherApHash.Create; 24 | begin 25 | inherited Create; 26 | Check := 'C0E86BE5'; 27 | FHash := $AAAAAAAA; 28 | end; 29 | 30 | procedure THasherApHash.Update(Msg: PByte; Length: Integer); 31 | var i: Integer; 32 | Val: Cardinal; 33 | begin 34 | for i:=0 to Length-1 do begin 35 | 36 | if (i and 1) = 0 then Val := ((FHash shl 7) xor (Msg^) * (FHash shr 3)) 37 | else Val := (not((FHash shl 11) + (Msg^) xor (FHash shr 5))); 38 | 39 | FHash := FHash xor Val; 40 | 41 | Inc(Msg); 42 | end; 43 | end; 44 | 45 | function THasherApHash.Final: String; 46 | begin 47 | Result := IntToHex(FHash, 8); 48 | end; 49 | 50 | 51 | initialization 52 | HasherList.RegisterHasher('Ap Hash', THasherApHash); 53 | 54 | end. 55 | -------------------------------------------------------------------------------- /crc12_dect.pas: -------------------------------------------------------------------------------- 1 | unit CRC12_dect; 2 | //CRC-12 dect 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC12_dect = class(THasherbase) 12 | private 13 | FHash: Cardinal; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | 21 | implementation 22 | 23 | var Table: array[0..255] of Word = ( 24 | $0000, $080F, $0811, $001E, $082D, $0022, $003C, $0833, 25 | $0855, $005A, $0044, $084B, $0078, $0877, $0869, $0066, 26 | $08A5, $00AA, $00B4, $08BB, $0088, $0887, $0899, $0096, 27 | $00F0, $08FF, $08E1, $00EE, $08DD, $00D2, $00CC, $08C3, 28 | $0945, $014A, $0154, $095B, $0168, $0967, $0979, $0176, 29 | $0110, $091F, $0901, $010E, $093D, $0132, $012C, $0923, 30 | $01E0, $09EF, $09F1, $01FE, $09CD, $01C2, $01DC, $09D3, 31 | $09B5, $01BA, $01A4, $09AB, $0198, $0997, $0989, $0186, 32 | $0A85, $028A, $0294, $0A9B, $02A8, $0AA7, $0AB9, $02B6, 33 | $02D0, $0ADF, $0AC1, $02CE, $0AFD, $02F2, $02EC, $0AE3, 34 | $0220, $0A2F, $0A31, $023E, $0A0D, $0202, $021C, $0A13, 35 | $0A75, $027A, $0264, $0A6B, $0258, $0A57, $0A49, $0246, 36 | $03C0, $0BCF, $0BD1, $03DE, $0BED, $03E2, $03FC, $0BF3, 37 | $0B95, $039A, $0384, $0B8B, $03B8, $0BB7, $0BA9, $03A6, 38 | $0B65, $036A, $0374, $0B7B, $0348, $0B47, $0B59, $0356, 39 | $0330, $0B3F, $0B21, $032E, $0B1D, $0312, $030C, $0B03, 40 | $0D05, $050A, $0514, $0D1B, $0528, $0D27, $0D39, $0536, 41 | $0550, $0D5F, $0D41, $054E, $0D7D, $0572, $056C, $0D63, 42 | $05A0, $0DAF, $0DB1, $05BE, $0D8D, $0582, $059C, $0D93, 43 | $0DF5, $05FA, $05E4, $0DEB, $05D8, $0DD7, $0DC9, $05C6, 44 | $0440, $0C4F, $0C51, $045E, $0C6D, $0462, $047C, $0C73, 45 | $0C15, $041A, $0404, $0C0B, $0438, $0C37, $0C29, $0426, 46 | $0CE5, $04EA, $04F4, $0CFB, $04C8, $0CC7, $0CD9, $04D6, 47 | $04B0, $0CBF, $0CA1, $04AE, $0C9D, $0492, $048C, $0C83, 48 | $0780, $0F8F, $0F91, $079E, $0FAD, $07A2, $07BC, $0FB3, 49 | $0FD5, $07DA, $07C4, $0FCB, $07F8, $0FF7, $0FE9, $07E6, 50 | $0F25, $072A, $0734, $0F3B, $0708, $0F07, $0F19, $0716, 51 | $0770, $0F7F, $0F61, $076E, $0F5D, $0752, $074C, $0F43, 52 | $0EC5, $06CA, $06D4, $0EDB, $06E8, $0EE7, $0EF9, $06F6, 53 | $0690, $0E9F, $0E81, $068E, $0EBD, $06B2, $06AC, $0EA3, 54 | $0660, $0E6F, $0E71, $067E, $0E4D, $0642, $065C, $0E53, 55 | $0E35, $063A, $0624, $0E2B, $0618, $0E17, $0E09, $0606 56 | ); 57 | 58 | constructor THasherCRC12_dect.Create; 59 | begin 60 | inherited Create; 61 | FHash := 0; 62 | Check := 'F5B'; 63 | end; 64 | 65 | procedure THasherCRC12_dect.Update(Msg: PByte; Length: Integer); 66 | var i: Integer; 67 | begin 68 | for i:=0 to Length-1 do begin 69 | FHash := (FHash shl 8) xor Table[(Msg^ xor (FHash shr 4)) and $FF]; 70 | Inc(Msg); 71 | end; 72 | end; 73 | 74 | function THasherCRC12_dect.Final: String; 75 | begin 76 | FHash := FHash and $FFF; 77 | 78 | Result := IntToHex(FHash, 3); 79 | end; 80 | 81 | initialization 82 | HasherList.RegisterHasher('CRC-12 dect', THasherCRC12_dect); 83 | 84 | end. 85 | -------------------------------------------------------------------------------- /crc15_can.pas: -------------------------------------------------------------------------------- 1 | unit crc15_can; 2 | //CRC-15 CAN 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THashercrc15_can = class(THasherbase) 12 | private 13 | FHash: Cardinal; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | 21 | implementation 22 | 23 | var Table: array[0..255] of Word = ( 24 | $0000, $4599, $4EAB, $0B32, $58CF, $1D56, $1664, $53FD, 25 | $7407, $319E, $3AAC, $7F35, $2CC8, $6951, $6263, $27FA, 26 | $2D97, $680E, $633C, $26A5, $7558, $30C1, $3BF3, $7E6A, 27 | $5990, $1C09, $173B, $52A2, $015F, $44C6, $4FF4, $0A6D, 28 | $5B2E, $1EB7, $1585, $501C, $03E1, $4678, $4D4A, $08D3, 29 | $2F29, $6AB0, $6182, $241B, $77E6, $327F, $394D, $7CD4, 30 | $76B9, $3320, $3812, $7D8B, $2E76, $6BEF, $60DD, $2544, 31 | $02BE, $4727, $4C15, $098C, $5A71, $1FE8, $14DA, $5143, 32 | $73C5, $365C, $3D6E, $78F7, $2B0A, $6E93, $65A1, $2038, 33 | $07C2, $425B, $4969, $0CF0, $5F0D, $1A94, $11A6, $543F, 34 | $5E52, $1BCB, $10F9, $5560, $069D, $4304, $4836, $0DAF, 35 | $2A55, $6FCC, $64FE, $2167, $729A, $3703, $3C31, $79A8, 36 | $28EB, $6D72, $6640, $23D9, $7024, $35BD, $3E8F, $7B16, 37 | $5CEC, $1975, $1247, $57DE, $0423, $41BA, $4A88, $0F11, 38 | $057C, $40E5, $4BD7, $0E4E, $5DB3, $182A, $1318, $5681, 39 | $717B, $34E2, $3FD0, $7A49, $29B4, $6C2D, $671F, $2286, 40 | $2213, $678A, $6CB8, $2921, $7ADC, $3F45, $3477, $71EE, 41 | $5614, $138D, $18BF, $5D26, $0EDB, $4B42, $4070, $05E9, 42 | $0F84, $4A1D, $412F, $04B6, $574B, $12D2, $19E0, $5C79, 43 | $7B83, $3E1A, $3528, $70B1, $234C, $66D5, $6DE7, $287E, 44 | $793D, $3CA4, $3796, $720F, $21F2, $646B, $6F59, $2AC0, 45 | $0D3A, $48A3, $4391, $0608, $55F5, $106C, $1B5E, $5EC7, 46 | $54AA, $1133, $1A01, $5F98, $0C65, $49FC, $42CE, $0757, 47 | $20AD, $6534, $6E06, $2B9F, $7862, $3DFB, $36C9, $7350, 48 | $51D6, $144F, $1F7D, $5AE4, $0919, $4C80, $47B2, $022B, 49 | $25D1, $6048, $6B7A, $2EE3, $7D1E, $3887, $33B5, $762C, 50 | $7C41, $39D8, $32EA, $7773, $248E, $6117, $6A25, $2FBC, 51 | $0846, $4DDF, $46ED, $0374, $5089, $1510, $1E22, $5BBB, 52 | $0AF8, $4F61, $4453, $01CA, $5237, $17AE, $1C9C, $5905, 53 | $7EFF, $3B66, $3054, $75CD, $2630, $63A9, $689B, $2D02, 54 | $276F, $62F6, $69C4, $2C5D, $7FA0, $3A39, $310B, $7492, 55 | $5368, $16F1, $1DC3, $585A, $0BA7, $4E3E, $450C, $0095 56 | ); 57 | 58 | constructor THashercrc15_can.Create; 59 | begin 60 | inherited Create; 61 | FHash := 0; 62 | Check := '059E'; 63 | end; 64 | 65 | procedure THashercrc15_can.Update(Msg: PByte; Length: Integer); 66 | var i: Integer; 67 | begin 68 | for i:=0 to Length-1 do begin 69 | FHash := (FHash shl 8) xor Table[(Msg^ xor (FHash shr 7)) and $FF]; 70 | Inc(Msg); 71 | end; 72 | end; 73 | 74 | function THashercrc15_can.Final: String; 75 | begin 76 | FHash := FHash and $7FFF; 77 | 78 | Result := IntToHex(FHash, 4); 79 | end; 80 | 81 | initialization 82 | HasherList.RegisterHasher('CRC-15 CAN', THashercrc15_can); 83 | 84 | end. 85 | -------------------------------------------------------------------------------- /crc7_mmc.pas: -------------------------------------------------------------------------------- 1 | unit crc7_mmc; 2 | //CRC-7 MMC 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC7_MMC = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table : array[0..255] of Byte = ( 23 | $00, $09, $12, $1b, $24, $2d, $36, $3f, 24 | $48, $41, $5a, $53, $6c, $65, $7e, $77, 25 | $19, $10, $0b, $02, $3d, $34, $2f, $26, 26 | $51, $58, $43, $4a, $75, $7c, $67, $6e, 27 | $32, $3b, $20, $29, $16, $1f, $04, $0d, 28 | $7a, $73, $68, $61, $5e, $57, $4c, $45, 29 | $2b, $22, $39, $30, $0f, $06, $1d, $14, 30 | $63, $6a, $71, $78, $47, $4e, $55, $5c, 31 | $64, $6d, $76, $7f, $40, $49, $52, $5b, 32 | $2c, $25, $3e, $37, $08, $01, $1a, $13, 33 | $7d, $74, $6f, $66, $59, $50, $4b, $42, 34 | $35, $3c, $27, $2e, $11, $18, $03, $0a, 35 | $56, $5f, $44, $4d, $72, $7b, $60, $69, 36 | $1e, $17, $0c, $05, $3a, $33, $28, $21, 37 | $4f, $46, $5d, $54, $6b, $62, $79, $70, 38 | $07, $0e, $15, $1c, $23, $2a, $31, $38, 39 | $41, $48, $53, $5a, $65, $6c, $77, $7e, 40 | $09, $00, $1b, $12, $2d, $24, $3f, $36, 41 | $58, $51, $4a, $43, $7c, $75, $6e, $67, 42 | $10, $19, $02, $0b, $34, $3d, $26, $2f, 43 | $73, $7a, $61, $68, $57, $5e, $45, $4c, 44 | $3b, $32, $29, $20, $1f, $16, $0d, $04, 45 | $6a, $63, $78, $71, $4e, $47, $5c, $55, 46 | $22, $2b, $30, $39, $06, $0f, $14, $1d, 47 | $25, $2c, $37, $3e, $01, $08, $13, $1a, 48 | $6d, $64, $7f, $76, $49, $40, $5b, $52, 49 | $3c, $35, $2e, $27, $18, $11, $0a, $03, 50 | $74, $7d, $66, $6f, $50, $59, $42, $4b, 51 | $17, $1e, $05, $0c, $33, $3a, $21, $28, 52 | $5f, $56, $4d, $44, $7b, $72, $69, $60, 53 | $0e, $07, $1c, $15, $2a, $23, $38, $31, 54 | $46, $4f, $54, $5d, $62, $6b, $70, $79 55 | ); 56 | 57 | constructor THasherCRC7_MMC.Create; 58 | begin 59 | inherited Create; 60 | FHash := 0; 61 | Check := '75'; 62 | end; 63 | 64 | procedure THasherCRC7_MMC.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := Table[(FHash shl 1) xor Msg^ ] ; 69 | 70 | Inc(Msg); 71 | end; 72 | end; 73 | 74 | function THasherCRC7_MMC.Final: String; 75 | begin 76 | 77 | Result := IntToHex(FHash, 2); 78 | end; 79 | 80 | initialization 81 | HasherList.RegisterHasher('CRC-7 MMC', THasherCRC7_MMC); 82 | 83 | end. 84 | -------------------------------------------------------------------------------- /crc7_umts.pas: -------------------------------------------------------------------------------- 1 | unit crc7_umts; 2 | //CRC-7 UMTS 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherCRC7_UMTS = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | var Table : array[0..255] of Byte = ( 23 | $00, $45, $4F, $0A, $5B, $1E, $14, $51, 24 | $73, $36, $3C, $79, $28, $6D, $67, $22, 25 | $23, $66, $6C, $29, $78, $3D, $37, $72, 26 | $50, $15, $1F, $5A, $0B, $4E, $44, $01, 27 | $46, $03, $09, $4C, $1D, $58, $52, $17, 28 | $35, $70, $7A, $3F, $6E, $2B, $21, $64, 29 | $65, $20, $2A, $6F, $3E, $7B, $71, $34, 30 | $16, $53, $59, $1C, $4D, $08, $02, $47, 31 | $49, $0C, $06, $43, $12, $57, $5D, $18, 32 | $3A, $7F, $75, $30, $61, $24, $2E, $6B, 33 | $6A, $2F, $25, $60, $31, $74, $7E, $3B, 34 | $19, $5C, $56, $13, $42, $07, $0D, $48, 35 | $0F, $4A, $40, $05, $54, $11, $1B, $5E, 36 | $7C, $39, $33, $76, $27, $62, $68, $2D, 37 | $2C, $69, $63, $26, $77, $32, $38, $7D, 38 | $5F, $1A, $10, $55, $04, $41, $4B, $0E, 39 | $57, $12, $18, $5D, $0C, $49, $43, $06, 40 | $24, $61, $6B, $2E, $7F, $3A, $30, $75, 41 | $74, $31, $3B, $7E, $2F, $6A, $60, $25, 42 | $07, $42, $48, $0D, $5C, $19, $13, $56, 43 | $11, $54, $5E, $1B, $4A, $0F, $05, $40, 44 | $62, $27, $2D, $68, $39, $7C, $76, $33, 45 | $32, $77, $7D, $38, $69, $2C, $26, $63, 46 | $41, $04, $0E, $4B, $1A, $5F, $55, $10, 47 | $1E, $5B, $51, $14, $45, $00, $0A, $4F, 48 | $6D, $28, $22, $67, $36, $73, $79, $3C, 49 | $3D, $78, $72, $37, $66, $23, $29, $6C, 50 | $4E, $0B, $01, $44, $15, $50, $5A, $1F, 51 | $58, $1D, $17, $52, $03, $46, $4C, $09, 52 | $2B, $6E, $64, $21, $70, $35, $3F, $7A, 53 | $7B, $3E, $34, $71, $20, $65, $6F, $2A, 54 | $08, $4D, $47, $02, $53, $16, $1C, $59 55 | ); 56 | 57 | constructor THasherCRC7_UMTS.Create; 58 | begin 59 | inherited Create; 60 | FHash := 0; 61 | Check := '61'; 62 | end; 63 | 64 | procedure THasherCRC7_UMTS.Update(Msg: PByte; Length: Integer); 65 | var i: Integer; 66 | begin 67 | for i:=0 to Length-1 do begin 68 | FHash := Table[(FHash shl 1) xor Msg^ ] ; 69 | 70 | Inc(Msg); 71 | end; 72 | end; 73 | 74 | function THasherCRC7_UMTS.Final: String; 75 | begin 76 | 77 | Result := IntToHex(FHash, 2); 78 | end; 79 | 80 | initialization 81 | HasherList.RegisterHasher('CRC-7 UMTS', THasherCRC7_UMTS); 82 | 83 | end. 84 | -------------------------------------------------------------------------------- /elfHash.pas: -------------------------------------------------------------------------------- 1 | unit ElfHash; 2 | //Elf Hash 3 | //Author: domasz 4 | //Last Update: 2022-11-26 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | 12 | type THasherElfHash = class(THasherbase) 13 | private 14 | FHash: Cardinal; 15 | X: Cardinal; 16 | public 17 | constructor Create; override; 18 | procedure Update(Msg: PByte; Length: Integer); override; 19 | function Final: String; override; 20 | end; 21 | 22 | implementation 23 | 24 | constructor THasherElfHash.Create; 25 | begin 26 | inherited Create; 27 | Check := '0678AEE9'; 28 | FHash := 0; 29 | X := 0; 30 | end; 31 | 32 | procedure THasherElfHash.Update(Msg: PByte; Length: Integer); 33 | var i: Integer; 34 | Val: Cardinal; 35 | begin 36 | for i:=0 to Length-1 do begin 37 | 38 | FHash := (FHash shl 4) + Msg^; 39 | Val := FHash and $F0000000; 40 | 41 | if Val <> 0 then begin 42 | FHash := FHash xor (Val shr 24); 43 | X := Val; 44 | end; 45 | 46 | FHash := FHash and not(X); 47 | 48 | Inc(Msg); 49 | end; 50 | end; 51 | 52 | function THasherElfHash.Final: String; 53 | begin 54 | Result := IntToHex(FHash, 8); 55 | end; 56 | 57 | 58 | initialization 59 | HasherList.RegisterHasher('Elf Hash', THasherElfHash); 60 | 61 | end. 62 | -------------------------------------------------------------------------------- /fletcher16.pas: -------------------------------------------------------------------------------- 1 | unit fletcher16; 2 | //Fletcher-16 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherFletcher16 = class(THasherbase) 12 | private 13 | FHash, FHash2: Word; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherFletcher16.Create; 23 | begin 24 | inherited Create; 25 | Check := '1EDE'; 26 | FHash := 0; 27 | FHash2 := 0; 28 | end; 29 | 30 | procedure THasherFletcher16.Update(Msg: PByte; Length: Integer); 31 | var i: Integer; 32 | begin 33 | for i:=0 to Length-1 do begin 34 | FHash := (FHash + Msg^) mod 255; 35 | FHash2 := (FHash2 + FHash) mod 255; 36 | 37 | Inc(Msg); 38 | end; 39 | end; 40 | 41 | function THasherFletcher16.Final: String; 42 | begin 43 | FHash := (FHash2 shl 8) or FHash; 44 | 45 | Result := IntToHex(FHash, 4); 46 | end; 47 | 48 | initialization 49 | HasherList.RegisterHasher('Fletcher-16', THasherFletcher16); 50 | 51 | end. 52 | -------------------------------------------------------------------------------- /fletcher32.pas: -------------------------------------------------------------------------------- 1 | unit fletcher32; 2 | //Fletcher-32 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherFletcher32 = class(THasherbase) 12 | private 13 | FHash, FHash2: Cardinal; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherFletcher32.Create; 23 | begin 24 | inherited Create; 25 | Check := '091501DD'; 26 | FHash := 0; 27 | FHash2 := 0; 28 | end; 29 | 30 | procedure THasherFletcher32.Update(Msg: PByte; Length: Integer); 31 | var i: Integer; 32 | begin 33 | for i:=0 to Length-1 do begin 34 | FHash := (FHash + Msg^) mod 65535; 35 | FHash2 := (FHash2 + FHash) mod 65535; 36 | 37 | Inc(Msg); 38 | end; 39 | end; 40 | 41 | function THasherFletcher32.Final: String; 42 | begin 43 | FHash := (FHash2 shl 16) or FHash; 44 | 45 | Result := IntToHex(FHash, 8); 46 | end; 47 | 48 | initialization 49 | HasherList.RegisterHasher('Fletcher-32', THasherFletcher32); 50 | 51 | end. 52 | -------------------------------------------------------------------------------- /fletcher64.pas: -------------------------------------------------------------------------------- 1 | unit fletcher64; 2 | //Fletcher-64 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherFletcher64 = class(THasherbase) 12 | private 13 | FHash, FHash2: QWord; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherFletcher64.Create; 23 | begin 24 | inherited Create; 25 | Check := '00000915000001DD'; 26 | FHash := 0; 27 | FHash2 := 0; 28 | end; 29 | 30 | procedure THasherFletcher64.Update(Msg: PByte; Length: Integer); 31 | var i: Integer; 32 | begin 33 | for i:=0 to Length-1 do begin 34 | FHash := (FHash + Msg^) mod 4294967295; 35 | FHash2 := (FHash2 + FHash) mod 4294967295; 36 | 37 | Inc(Msg); 38 | end; 39 | end; 40 | 41 | function THasherFletcher64.Final: String; 42 | begin 43 | FHash := (FHash2 shl 32) or FHash; 44 | 45 | Result := IntToHex(FHash, 16); 46 | end; 47 | 48 | initialization 49 | HasherList.RegisterHasher('Fletcher-64', THasherFletcher64); 50 | 51 | end. 52 | -------------------------------------------------------------------------------- /fletcher8.pas: -------------------------------------------------------------------------------- 1 | unit fletcher8; 2 | //Fletcher-8 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherFletcher8 = class(THasherbase) 12 | private 13 | FHash, FHash2: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherFletcher8.Create; 23 | begin 24 | inherited Create; 25 | Check := '0C'; 26 | FHash := 0; 27 | FHash2 := 0; 28 | end; 29 | 30 | procedure THasherFletcher8.Update(Msg: PByte; Length: Integer); 31 | var i: Integer; 32 | begin 33 | for i:=0 to Length-1 do begin 34 | FHash := (FHash + Msg^) mod 15; 35 | FHash2 := (FHash2 + FHash) mod 15; 36 | 37 | Inc(Msg); 38 | end; 39 | end; 40 | 41 | function THasherFletcher8.Final: String; 42 | begin 43 | FHash := (FHash2 shl 4) or FHash; 44 | 45 | Result := IntToHex(FHash, 2); 46 | end; 47 | 48 | initialization 49 | HasherList.RegisterHasher('Fletcher-8', THasherFletcher8); 50 | 51 | end. 52 | -------------------------------------------------------------------------------- /jshash.pas: -------------------------------------------------------------------------------- 1 | unit JsHash; 2 | //JsHash 3 | //Author: domasz 4 | //Last Update: 2022-11-26 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | 12 | type THasherJsHash = class(THasherbase) 13 | private 14 | FHash: Cardinal; 15 | public 16 | constructor Create; override; 17 | procedure Update(Msg: PByte; Length: Integer); override; 18 | function Final: String; override; 19 | end; 20 | 21 | implementation 22 | 23 | constructor THasherJsHash.Create; 24 | begin 25 | inherited Create; 26 | Check := '90A4224B'; 27 | FHash := 1315423911; 28 | end; 29 | 30 | procedure THasherJsHash.Update(Msg: PByte; Length: Integer); 31 | var i: Integer; 32 | Val: Cardinal; 33 | begin 34 | for i:=0 to Length-1 do begin 35 | 36 | Val := ((FHash shl 5) + Msg^ + (FHash shr 2)); 37 | 38 | FHash := FHash xor Val; 39 | 40 | Inc(Msg); 41 | end; 42 | end; 43 | 44 | function THasherJsHash.Final: String; 45 | begin 46 | Result := IntToHex(FHash, 8); 47 | end; 48 | 49 | 50 | initialization 51 | HasherList.RegisterHasher('Js Hash', THasherJsHash); 52 | 53 | end. 54 | -------------------------------------------------------------------------------- /pjwhash.pas: -------------------------------------------------------------------------------- 1 | unit PJWHash; 2 | //PJWHash (book) 3 | //Author: domasz 4 | //Last Update: 2022-11-26 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | 12 | type THasherPJWHash = class(THasherbase) 13 | private 14 | FHash: Cardinal; 15 | Test: Cardinal; 16 | BitsInUnsignedInt, ThreeQuarters, OneEighth, HighBits: Cardinal; 17 | public 18 | constructor Create; override; 19 | procedure Update(Msg: PByte; Length: Integer); override; 20 | function Final: String; override; 21 | end; 22 | 23 | implementation 24 | 25 | constructor THasherPJWHash.Create; 26 | begin 27 | inherited Create; 28 | Check := '0678AEE9'; 29 | FHash := 0; 30 | 31 | BitsInUnsignedInt := 32; 32 | ThreeQuarters := (BitsInUnsignedInt * 3) div 4; 33 | OneEighth := BitsInUnsignedInt div 8; 34 | HighBits := $FFFFFFFF shl (BitsInUnsignedInt - OneEighth); 35 | end; 36 | 37 | procedure THasherPJWHash.Update(Msg: PByte; Length: Integer); 38 | var i: Integer; 39 | Val: Cardinal; 40 | begin 41 | for i:=0 to Length-1 do begin 42 | 43 | FHash := (FHash shl OneEighth) + Msg^; 44 | Test := FHash and HighBits; 45 | 46 | if test <> 0 then FHash := (FHash xor (test shr ThreeQuarters)) and (not HighBits); 47 | 48 | Inc(Msg); 49 | end; 50 | end; 51 | 52 | function THasherPJWHash.Final: String; 53 | begin 54 | Result := IntToHex(FHash, 8); 55 | end; 56 | 57 | 58 | initialization 59 | HasherList.RegisterHasher('PJW Hash', THasherPJWHash); 60 | 61 | end. 62 | -------------------------------------------------------------------------------- /rshash.pas: -------------------------------------------------------------------------------- 1 | unit RsHash; 2 | //RsHash 3 | //Author: domasz 4 | //Last Update: 2022-11-26 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | 12 | type THasherRsHash = class(THasherbase) 13 | private 14 | FHash: Cardinal; 15 | A,B: Cardinal; 16 | public 17 | constructor Create; override; 18 | procedure Update(Msg: PByte; Length: Integer); override; 19 | function Final: String; override; 20 | end; 21 | 22 | implementation 23 | 24 | constructor THasherRsHash.Create; 25 | begin 26 | inherited Create; 27 | Check := '704952E9'; 28 | FHash := 0; 29 | B := 378551; 30 | A := 63689; 31 | end; 32 | 33 | procedure THasherRsHash.Update(Msg: PByte; Length: Integer); 34 | var i: Integer; 35 | begin 36 | for i:=0 to Length-1 do begin 37 | FHash := FHash * A + Msg^; 38 | A := A * B; 39 | 40 | Inc(Msg); 41 | end; 42 | end; 43 | 44 | function THasherRsHash.Final: String; 45 | begin 46 | Result := IntToHex(FHash, 8); 47 | end; 48 | 49 | 50 | initialization 51 | HasherList.RegisterHasher('Rs Hash', THasherRsHash); 52 | 53 | end. 54 | -------------------------------------------------------------------------------- /size64.pas: -------------------------------------------------------------------------------- 1 | unit SIZE64; 2 | //SIZE64 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherSIZE64 = class(THasherbase) 12 | private 13 | FHash: Cardinal; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherSIZE64.Create; 23 | begin 24 | inherited Create; 25 | Check := '0000000000000009'; 26 | FHash := 0; 27 | end; 28 | 29 | procedure THasherSIZE64.Update(Msg: PByte; Length: Integer); 30 | begin 31 | FHash := FHash + Length; 32 | end; 33 | 34 | function THasherSIZE64.Final: String; 35 | begin 36 | Result := IntToHex(FHash, 16); 37 | end; 38 | 39 | initialization 40 | HasherList.RegisterHasher('SIZE64', THasherSIZE64); 41 | 42 | end. 43 | -------------------------------------------------------------------------------- /sum16.pas: -------------------------------------------------------------------------------- 1 | unit SUM16; 2 | //SUM16 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherSUM16 = class(THasherbase) 12 | private 13 | FHash: Word; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherSUM16.Create; 23 | begin 24 | inherited Create; 25 | Check := '01DD'; 26 | FHash := 0; 27 | end; 28 | 29 | procedure THasherSUM16.Update(Msg: PByte; Length: Integer); 30 | var i: Integer; 31 | Val: Cardinal; 32 | begin 33 | for i:=0 to Length-1 do begin 34 | 35 | FHash := FHash + Msg^; 36 | 37 | Inc(Msg); 38 | end; 39 | end; 40 | 41 | function THasherSUM16.Final: String; 42 | begin 43 | Result := IntToHex(FHash, 4); 44 | end; 45 | 46 | initialization 47 | HasherList.RegisterHasher('SUM16', THasherSUM16); 48 | 49 | end. 50 | -------------------------------------------------------------------------------- /sum24.pas: -------------------------------------------------------------------------------- 1 | unit SUM24; 2 | //SUM24 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherSUM24 = class(THasherbase) 12 | private 13 | FHash: Cardinal; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherSUM24.Create; 23 | begin 24 | inherited Create; 25 | Check := '0001DD'; 26 | FHash := 0; 27 | end; 28 | 29 | procedure THasherSUM24.Update(Msg: PByte; Length: Integer); 30 | var i: Integer; 31 | Val: Cardinal; 32 | begin 33 | for i:=0 to Length-1 do begin 34 | 35 | FHash := FHash + Msg^; 36 | 37 | Inc(Msg); 38 | end; 39 | end; 40 | 41 | function THasherSUM24.Final: String; 42 | begin 43 | FHash := FHash and $FFFFFF; 44 | Result := IntToHex(FHash, 6); 45 | end; 46 | 47 | initialization 48 | HasherList.RegisterHasher('SUM24', THasherSUM24); 49 | 50 | end. 51 | -------------------------------------------------------------------------------- /sum32.pas: -------------------------------------------------------------------------------- 1 | unit SUM32; 2 | //SUM32 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherSUM32 = class(THasherbase) 12 | private 13 | FHash: Cardinal; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherSUM32.Create; 23 | begin 24 | inherited Create; 25 | Check := '000001DD'; 26 | FHash := 0; 27 | end; 28 | 29 | procedure THasherSUM32.Update(Msg: PByte; Length: Integer); 30 | var i: Integer; 31 | Val: Cardinal; 32 | begin 33 | for i:=0 to Length-1 do begin 34 | 35 | FHash := FHash + Msg^; 36 | 37 | Inc(Msg); 38 | end; 39 | end; 40 | 41 | function THasherSUM32.Final: String; 42 | begin 43 | Result := IntToHex(FHash, 8); 44 | end; 45 | 46 | initialization 47 | HasherList.RegisterHasher('SUM32', THasherSUM32); 48 | 49 | end. 50 | -------------------------------------------------------------------------------- /sum64.pas: -------------------------------------------------------------------------------- 1 | unit SUM64; 2 | //SUM64 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherSUM64 = class(THasherbase) 12 | private 13 | FHash: QWord; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherSUM64.Create; 23 | begin 24 | inherited Create; 25 | Check := '00000000000001DD'; 26 | FHash := 0; 27 | end; 28 | 29 | procedure THasherSUM64.Update(Msg: PByte; Length: Integer); 30 | var i: Integer; 31 | Val: Cardinal; 32 | begin 33 | for i:=0 to Length-1 do begin 34 | 35 | FHash := FHash + Msg^; 36 | 37 | Inc(Msg); 38 | end; 39 | end; 40 | 41 | function THasherSUM64.Final: String; 42 | begin 43 | Result := IntToHex(FHash, 16); 44 | end; 45 | 46 | initialization 47 | HasherList.RegisterHasher('SUM64', THasherSUM64); 48 | 49 | end. 50 | -------------------------------------------------------------------------------- /sum8.pas: -------------------------------------------------------------------------------- 1 | unit SUM8; 2 | //SUM8 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherSUM8 = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherSUM8.Create; 23 | begin 24 | inherited Create; 25 | Check := 'DD'; 26 | FHash := 0; 27 | end; 28 | 29 | procedure THasherSUM8.Update(Msg: PByte; Length: Integer); 30 | var i: Integer; 31 | Val: Cardinal; 32 | begin 33 | for i:=0 to Length-1 do begin 34 | 35 | FHash := FHash + Msg^; 36 | 37 | Inc(Msg); 38 | end; 39 | end; 40 | 41 | function THasherSUM8.Final: String; 42 | begin 43 | Result := IntToHex(FHash, 2); 44 | end; 45 | 46 | initialization 47 | HasherList.RegisterHasher('SUM8', THasherSUM8); 48 | 49 | end. 50 | -------------------------------------------------------------------------------- /sum_bsd.pas: -------------------------------------------------------------------------------- 1 | unit sum_bsd; 2 | //Sum BSD 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherSUM_BSD = class(THasherBase) 12 | private 13 | FHash: Word; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherSUM_BSD.Create; 23 | begin 24 | inherited Create; 25 | FHash := 0; 26 | Check := 'D16F'; 27 | end; 28 | 29 | procedure THasherSUM_BSD.Update(Msg: PByte; Length: Integer); 30 | var i: Integer; 31 | begin 32 | for i:=0 to Length-1 do begin 33 | FHash := (FHash shr 1) + ((FHash and 1) shl 15); 34 | FHash := FHash + Msg^; 35 | FHash := FHash and $ffff; 36 | 37 | Inc(Msg); 38 | end; 39 | end; 40 | 41 | function THasherSUM_BSD.Final: String; 42 | begin 43 | Result := IntToHex(FHash, 4); 44 | end; 45 | 46 | initialization 47 | HasherList.RegisterHasher('SUM BSD', THasherSUM_BSD); 48 | 49 | end. 50 | -------------------------------------------------------------------------------- /sum_sysv.pas: -------------------------------------------------------------------------------- 1 | unit SUM_SYSV; 2 | //SUM SYSV 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherSUM_SYSV = class(THasherbase) 12 | private 13 | FHash: Cardinal; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherSUM_SYSV.Create; 23 | begin 24 | inherited Create; 25 | Check := '01DD'; 26 | FHash := 0; 27 | end; 28 | 29 | procedure THasherSUM_SYSV.Update(Msg: PByte; Length: Integer); 30 | var i: Integer; 31 | begin 32 | for i:=0 to Length-1 do begin 33 | FHash := FHash + Msg^; 34 | 35 | Inc(Msg); 36 | end; 37 | end; 38 | 39 | function THasherSUM_SYSV.Final: String; 40 | var Val: Cardinal; 41 | begin 42 | Val := FHash mod 65536 + (FHash mod 4294967296) div 65536; 43 | FHash := (Val mod 65536) + Val div 65536; 44 | 45 | Result := IntToHex(FHash, 4); 46 | end; 47 | 48 | initialization 49 | HasherList.RegisterHasher('SUM SYSV', THasherSUM_SYSV); 50 | 51 | end. 52 | -------------------------------------------------------------------------------- /xor16.pas: -------------------------------------------------------------------------------- 1 | unit XOR16; 2 | //XOR16 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherXOR16 = class(THasherbase) 12 | private 13 | FHash: Cardinal; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherXOR16.Create; 23 | begin 24 | inherited Create; 25 | Check := '0839'; 26 | FHash := 0; 27 | end; 28 | 29 | procedure THasherXOR16.Update(Msg: PByte; Length: Integer); 30 | var i: Integer; 31 | L: Byte; 32 | begin 33 | L := 0; 34 | for i:=0 to Length-1 do begin 35 | FHash := FHash xor (Msg^ shl L); 36 | 37 | Inc(L, 8); 38 | if L = 32 then L := 0; 39 | 40 | Inc(Msg); 41 | end; 42 | end; 43 | 44 | function THasherXOR16.Final: String; 45 | begin 46 | FHash := (FHash and $FFFF) xor (FHash shr 16); 47 | 48 | Result := IntToHex(FHash, 4); 49 | end; 50 | 51 | initialization 52 | HasherList.RegisterHasher('XOR16', THasherXOR16); 53 | 54 | end. 55 | -------------------------------------------------------------------------------- /xor32.pas: -------------------------------------------------------------------------------- 1 | unit XOR32; 2 | //XOR32 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherXOR32 = class(THasherbase) 12 | private 13 | FHash: Cardinal; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherXOR32.Create; 23 | begin 24 | inherited Create; 25 | Check := '0C04043D'; 26 | FHash := 0; 27 | end; 28 | 29 | procedure THasherXOR32.Update(Msg: PByte; Length: Integer); 30 | var i: Integer; 31 | L: Byte; 32 | begin 33 | L := 0; 34 | for i:=0 to Length-1 do begin 35 | FHash := FHash xor (Msg^ shl L); 36 | 37 | Inc(L, 8); 38 | if L = 32 then L := 0; 39 | 40 | Inc(Msg); 41 | end; 42 | end; 43 | 44 | function THasherXOR32.Final: String; 45 | begin 46 | Result := IntToHex(FHash, 8); 47 | end; 48 | 49 | initialization 50 | HasherList.RegisterHasher('XOR32', THasherXOR32); 51 | 52 | end. 53 | -------------------------------------------------------------------------------- /xor8.pas: -------------------------------------------------------------------------------- 1 | unit XOR8; 2 | //XOR8 3 | //Author: domasz 4 | //Version: 0.1 (2022-11-17) 5 | //Licence: MIT 6 | 7 | interface 8 | 9 | uses SysUtils, HasherBase; 10 | 11 | type THasherXOR8 = class(THasherbase) 12 | private 13 | FHash: Byte; 14 | public 15 | constructor Create; override; 16 | procedure Update(Msg: PByte; Length: Integer); override; 17 | function Final: String; override; 18 | end; 19 | 20 | implementation 21 | 22 | constructor THasherXOR8.Create; 23 | begin 24 | inherited Create; 25 | Check := '31'; 26 | FHash := 0; 27 | end; 28 | 29 | procedure THasherXOR8.Update(Msg: PByte; Length: Integer); 30 | var i: Integer; 31 | Val: Cardinal; 32 | begin 33 | for i:=0 to Length-1 do begin 34 | FHash := FHash xor Msg^; 35 | 36 | Inc(Msg); 37 | end; 38 | end; 39 | 40 | function THasherXOR8.Final: String; 41 | begin 42 | Result := IntToHex(FHash, 2); 43 | end; 44 | 45 | initialization 46 | HasherList.RegisterHasher('XOR8', THasherXOR8); 47 | 48 | end. 49 | --------------------------------------------------------------------------------