ptr_dst := @m_digest[not m_rnd and 1];
for i := 0 to MHASH384_LEN-1 do
begin
- val := ptr_src[ptr_mix[i]] xor ptr_xor[i] xor ptr_rnd[i];
+ val := (ptr_src[ptr_mix[i]] xor ptr_xor[i]) + ptr_rnd[i];
ptr_dst[i] := ptr_dst[i] xor TABLE_SBX[val][i];
end;
m_rnd := (m_rnd + 1) and $FF
ptr_dst := @m_digest[not m_rnd and 1];
for i := 0 to MHASH384_LEN-1 do
begin
- val := ptr_src[ptr_mix[i]] xor ptr_xor[i] xor ptr_rnd[i];
+ val := (ptr_src[ptr_mix[i]] xor ptr_xor[i]) + ptr_rnd[i];
output[i] := ptr_dst[i] xor TABLE_SBX[val][i];
end;
end;
);
TEST_RESULT: array[0..15] of TDigestBuf =
(
- ( $7B, $5E, $40, $A3, $5D, $2A, $27, $21, $24, $93, $20, $27, $F0, $9F, $0B, $9F, $26, $71, $D9, $EF, $F4, $C7, $E6, $F9, $74, $66, $EA, $67, $31, $61, $7D, $FA, $9B, $8B, $00, $46, $CB, $8D, $6A, $A1, $E5, $AD, $F5, $20, $FC, $E3, $4C, $32 ), {00}
- ( $94, $16, $8F, $71, $27, $DD, $E6, $1D, $B6, $90, $AC, $C4, $DC, $FC, $BF, $35, $EA, $F7, $7A, $15, $1F, $8B, $BA, $EE, $4F, $C3, $F7, $04, $57, $3D, $FD, $0D, $FE, $9C, $D5, $C4, $C3, $E0, $22, $7A, $C6, $58, $2A, $51, $F2, $C4, $D8, $64 ), {01}
- ( $55, $05, $C0, $3B, $FF, $14, $2D, $7B, $47, $37, $FA, $7F, $36, $75, $0F, $8E, $09, $34, $A3, $65, $FE, $F6, $15, $92, $E3, $D3, $B0, $D3, $08, $86, $7D, $AA, $44, $64, $EB, $35, $EA, $27, $07, $7A, $BE, $AC, $BE, $79, $B6, $57, $15, $30 ), {02}
- ( $6E, $5B, $90, $D2, $56, $81, $B4, $54, $50, $E2, $1F, $C8, $62, $73, $EB, $AD, $B7, $91, $73, $58, $69, $CE, $6D, $EE, $AE, $1A, $D5, $27, $80, $5A, $AC, $62, $D8, $8E, $AE, $DD, $59, $2F, $20, $15, $FE, $80, $5F, $01, $F6, $32, $25, $32 ), {03}
- ( $1F, $41, $37, $2F, $44, $B6, $63, $4C, $7B, $63, $B6, $D8, $6B, $C2, $AF, $06, $83, $72, $78, $E6, $87, $21, $76, $73, $96, $49, $B0, $63, $0F, $D6, $BB, $72, $AD, $E6, $93, $38, $2A, $94, $B8, $C2, $F8, $74, $CF, $98, $5E, $CE, $41, $F2 ), {04}
- ( $3A, $2A, $83, $28, $0D, $B4, $E5, $95, $E0, $12, $11, $19, $32, $A7, $8D, $60, $8A, $E7, $9B, $2A, $01, $C8, $1D, $CB, $B4, $F6, $61, $43, $48, $D4, $BF, $D6, $98, $55, $40, $AF, $BC, $D8, $17, $13, $FF, $86, $CE, $8B, $5F, $5F, $8D, $02 ), {05}
- ( $21, $D1, $B5, $D8, $B8, $85, $30, $EC, $CB, $40, $39, $76, $08, $51, $37, $9D, $1E, $32, $04, $F8, $88, $9D, $9C, $C7, $3C, $E6, $23, $13, $F7, $D7, $37, $54, $DF, $98, $F3, $EE, $F2, $6E, $C5, $37, $D8, $41, $55, $B8, $91, $15, $22, $29 ), {06}
- ( $EC, $18, $E2, $AF, $4A, $C0, $D8, $62, $6A, $E5, $16, $59, $93, $DE, $29, $DB, $B2, $01, $30, $D1, $CE, $5B, $70, $A5, $52, $DA, $EC, $D7, $97, $E1, $5D, $9B, $B5, $41, $1B, $4A, $64, $C7, $8E, $1F, $0C, $6E, $EB, $56, $7A, $56, $0D, $85 ), {07}
- ( $11, $5C, $21, $BE, $85, $D7, $86, $D5, $39, $3B, $63, $5C, $3B, $B5, $35, $7A, $64, $CA, $DD, $58, $9A, $C8, $3F, $44, $F8, $51, $39, $D0, $A5, $72, $F0, $A1, $F6, $A9, $54, $47, $14, $12, $D9, $67, $F0, $9C, $5D, $EF, $C5, $00, $1A, $A2 ), {08}
- ( $B4, $65, $C4, $CA, $4E, $13, $93, $92, $1E, $51, $A6, $E4, $4F, $94, $BA, $5E, $F3, $41, $AA, $19, $57, $0B, $BD, $93, $DB, $DA, $66, $E5, $1E, $9A, $F0, $79, $50, $1B, $D6, $77, $17, $35, $44, $F4, $E6, $51, $BC, $75, $D3, $9E, $62, $27 ), {09}
- ( $3E, $9C, $8A, $AC, $E6, $82, $E2, $BC, $B3, $1A, $F7, $26, $F6, $18, $17, $DB, $DB, $1F, $BB, $61, $C8, $3D, $36, $94, $9E, $B8, $CF, $BF, $0F, $4C, $C8, $68, $D2, $0F, $43, $5C, $69, $26, $AA, $F8, $AB, $96, $2E, $BC, $7D, $DC, $02, $05 ), {0A}
- ( $AA, $7B, $C9, $28, $2A, $D0, $5D, $B2, $3D, $0C, $3C, $B5, $E7, $1E, $EF, $26, $2F, $D5, $9A, $EC, $23, $23, $F3, $A4, $B2, $AA, $52, $C9, $D3, $B1, $23, $D3, $5E, $1A, $D1, $20, $30, $E4, $4A, $CF, $7E, $53, $2F, $2D, $E9, $22, $D7, $8A ), {0B}
- ( $66, $67, $B6, $8B, $44, $B0, $E4, $B0, $C2, $34, $C9, $45, $08, $5E, $79, $24, $3F, $A0, $59, $20, $39, $E4, $77, $C2, $A2, $73, $A6, $76, $70, $3C, $6F, $3D, $F8, $51, $CD, $7C, $EB, $4F, $7F, $3B, $33, $D8, $94, $4C, $76, $3D, $C5, $AF ), {0C}
- ( $A1, $E3, $B0, $B2, $0B, $57, $32, $BD, $BC, $8B, $C7, $90, $7D, $58, $14, $A4, $4F, $76, $D0, $C2, $5D, $3A, $63, $4D, $12, $9F, $56, $18, $C4, $B7, $17, $4B, $C8, $FA, $20, $27, $85, $67, $78, $A8, $48, $B2, $79, $52, $5A, $D1, $0C, $00 ), {0D}
- ( $46, $73, $F5, $55, $3F, $56, $F0, $7E, $7C, $1D, $C1, $29, $D7, $95, $8E, $F2, $D2, $EF, $62, $6B, $5E, $26, $49, $1E, $DB, $64, $BE, $D9, $C2, $DF, $80, $FC, $2E, $AA, $A1, $2B, $A6, $27, $DA, $8C, $E2, $50, $39, $28, $1D, $04, $BE, $E3 ), {0E}
- ( $34, $D4, $0F, $D3, $95, $49, $87, $77, $C2, $0C, $7A, $8E, $A5, $EB, $ED, $11, $5A, $1C, $B7, $7C, $74, $68, $98, $22, $9B, $96, $90, $6D, $A6, $B7, $39, $B6, $91, $C4, $73, $89, $7A, $FB, $80, $16, $40, $A5, $19, $E2, $A9, $03, $C3, $E0 ) {0F}
+ ( $4A, $07, $8B, $E6, $56, $B2, $94, $64, $38, $9C, $71, $09, $F0, $F4, $08, $B0, $AD, $9C, $92, $BD, $B4, $36, $03, $63, $73, $AC, $50, $BC, $99, $3C, $21, $F7, $34, $8B, $9E, $E2, $09, $80, $F7, $7F, $4D, $2B, $ED, $49, $0E, $BC, $9D, $2E ), {00}
+ ( $F8, $41, $FD, $28, $F9, $75, $A8, $27, $ED, $57, $55, $CD, $BA, $E2, $A0, $F0, $FB, $4D, $D8, $A0, $2C, $84, $10, $04, $0F, $EC, $8B, $42, $59, $0E, $EF, $70, $FF, $0F, $50, $4A, $E4, $4F, $38, $1B, $AF, $99, $59, $96, $03, $76, $C9, $E9 ), {01}
+ ( $60, $1F, $8D, $7E, $31, $94, $48, $A6, $3E, $32, $86, $00, $64, $91, $2F, $34, $4D, $D7, $15, $52, $AC, $70, $61, $31, $19, $39, $6E, $B4, $BB, $CB, $AC, $95, $95, $E6, $F1, $80, $6C, $12, $7F, $83, $B0, $7A, $7D, $44, $9A, $FA, $83, $71 ), {02}
+ ( $EF, $AC, $BD, $E1, $8D, $6A, $B7, $29, $45, $74, $D2, $F7, $68, $86, $49, $D9, $6D, $74, $AE, $A6, $85, $F6, $D4, $34, $38, $76, $BB, $9C, $25, $7C, $ED, $B5, $A4, $E6, $0F, $8E, $01, $42, $96, $FB, $5E, $46, $C1, $7A, $C6, $79, $E7, $A8 ), {03}
+ ( $DA, $23, $8B, $FF, $84, $2B, $DA, $78, $D3, $0F, $1F, $A2, $A1, $2D, $FA, $7D, $6A, $C5, $F1, $B0, $28, $BB, $41, $FB, $1F, $FA, $85, $D3, $63, $21, $FE, $08, $A6, $00, $64, $CD, $28, $CB, $B0, $F5, $73, $EA, $61, $6B, $FE, $08, $C2, $72 ), {04}
+ ( $92, $39, $31, $81, $E1, $41, $3D, $83, $DB, $9B, $83, $52, $20, $83, $FC, $6A, $EE, $CE, $E2, $78, $AA, $CF, $53, $E1, $F2, $4F, $7A, $39, $36, $05, $75, $14, $1F, $71, $1E, $76, $2C, $D1, $BB, $43, $96, $38, $F7, $11, $EC, $D9, $1C, $15 ), {05}
+ ( $0B, $99, $27, $1A, $6F, $34, $40, $52, $FF, $38, $01, $36, $F5, $28, $BC, $F3, $60, $2A, $AB, $73, $3D, $59, $86, $B2, $57, $EC, $91, $65, $AA, $61, $50, $A1, $79, $25, $54, $B1, $9E, $7E, $D9, $11, $BE, $B6, $48, $6D, $C0, $9D, $85, $A2 ), {06}
+ ( $4C, $A3, $1A, $25, $69, $2C, $FC, $7C, $71, $8A, $9D, $D1, $E0, $5D, $F8, $BE, $AA, $E5, $38, $66, $9F, $E7, $11, $0F, $72, $63, $EF, $C0, $E3, $CE, $10, $8E, $CD, $A0, $C3, $D9, $85, $46, $42, $AA, $C7, $56, $DF, $C4, $C6, $D4, $22, $8E ), {07}
+ ( $9B, $F9, $38, $C8, $33, $E2, $58, $44, $3E, $DE, $FD, $51, $0A, $62, $2D, $ED, $ED, $72, $1C, $01, $45, $D5, $C9, $D0, $F9, $88, $15, $74, $0A, $23, $9D, $D8, $50, $5B, $FF, $7B, $2D, $0E, $6A, $1B, $0A, $4D, $F2, $C5, $F6, $7B, $41, $28 ), {08}
+ ( $87, $37, $44, $97, $9E, $FA, $03, $2F, $78, $D0, $66, $97, $30, $13, $FD, $44, $2F, $91, $97, $E7, $D4, $12, $B9, $AA, $EF, $E5, $CB, $B1, $74, $BE, $63, $C0, $CC, $02, $A6, $E0, $30, $E6, $14, $75, $EB, $89, $4A, $E1, $2D, $16, $57, $51 ), {09}
+ ( $56, $7F, $32, $54, $FD, $4F, $58, $C9, $66, $F5, $11, $99, $27, $F1, $2F, $0B, $59, $3E, $5A, $CF, $90, $02, $88, $F1, $C5, $9D, $CC, $C0, $E4, $77, $C3, $4A, $00, $F4, $BF, $6B, $71, $F2, $F9, $08, $FD, $1A, $F2, $9C, $27, $88, $87, $97 ), {0A}
+ ( $0E, $73, $2B, $B3, $8D, $C5, $35, $9D, $A7, $C9, $7B, $63, $D5, $2C, $5E, $E1, $20, $73, $33, $7D, $E7, $4E, $16, $95, $48, $40, $D6, $E3, $63, $0E, $C3, $5B, $D2, $FF, $EA, $D6, $5D, $FD, $11, $5C, $1B, $58, $1E, $EF, $1B, $32, $DD, $2A ), {0B}
+ ( $8E, $7E, $C7, $36, $DF, $F6, $C7, $9C, $55, $AE, $12, $99, $05, $5D, $9D, $61, $D3, $26, $2E, $84, $EE, $CC, $56, $33, $47, $29, $6B, $89, $BF, $81, $2F, $DC, $C6, $30, $D2, $62, $CE, $AC, $4C, $BE, $21, $1F, $57, $9E, $B6, $EC, $1C, $B2 ), {0C}
+ ( $34, $DE, $19, $51, $1B, $E9, $A2, $84, $D8, $B9, $B4, $C7, $6D, $D6, $93, $4F, $C0, $B5, $EB, $C2, $0D, $6E, $B7, $E3, $9B, $54, $13, $B3, $39, $8D, $34, $9F, $80, $6B, $13, $36, $7A, $11, $F4, $B5, $D4, $C3, $D0, $CE, $6F, $8E, $A3, $A7 ), {0D}
+ ( $0F, $F2, $A2, $F0, $AC, $6F, $43, $AF, $48, $CE, $8A, $38, $0B, $1A, $B1, $34, $CE, $6A, $31, $76, $CE, $C8, $13, $B2, $AE, $6C, $3B, $7A, $B6, $DA, $EF, $D1, $BE, $99, $E7, $F3, $C9, $E6, $1A, $1B, $3E, $63, $1D, $07, $7C, $27, $35, $13 ), {0E}
+ ( $09, $19, $F0, $2A, $72, $1C, $4A, $DA, $98, $79, $C3, $BE, $6C, $EC, $98, $FB, $6E, $A0, $D4, $53, $C2, $0D, $B4, $BD, $9B, $28, $7E, $D6, $25, $2B, $98, $25, $CF, $66, $A0, $65, $A2, $09, $AF, $C8, $D5, $A2, $2A, $DF, $2E, $45, $7C, $6E ) {0F}
);
var
Digest: TMHash384;
i, j: Cardinal;
Hash: TByteArray;
begin
- for i := 0 to Length(TEST_VECTOR)-1 do
+ for i := 0 to High(TEST_VECTOR) do
begin
Digest := TMHash384.Create();
for j := 0 to TEST_VECTOR[i].iterations-1 do
begin
- if (@callback <> nil) then
+ if (@callback <> nil) and (j and $7FFF = 0) then
begin
callback(Length(TEST_VECTOR), i + 1, GetProgress(TEST_VECTOR[i].iterations, j));
end;