fix incorrect VMAC computation on message lengths that are >64 mod 128

pull/2/head
weidai 2009-01-24 02:51:45 +00:00
parent f871754502
commit eb5732337b
2 changed files with 21 additions and 5 deletions

View File

@ -24,6 +24,15 @@ Test: Verify
Message: r170 "abc" "ab"
Digest: 9DA310281E6FD0A0
Test: Verify
Message: r65 "a"
Digest: 90 ea 57 cb 51 bc 92 a3
Test: Verify
Message: r129 "a"
Digest: 86 34 83 87 d1 3d 82 33
Test: Verify
Message: r65 "abc"
Digest: E86A86EC77A8BF61
Test: Verify
Message: "abc"
Digest: 2D376CF5B1813CE0
Test: NotVerify
@ -54,6 +63,15 @@ Test: Verify
Message: r170 "abc" "ab"
Digest: BF53B8D2D70C05A85880C2E21CAF1299
Test: Verify
Message: r65 "a"
Digest: b2 9b 00 76 0a 58 c7 ab 92 d6 60 24 d6 9c 1b 92
Test: Verify
Message: r129 "a"
Digest: a7 e5 2c 32 89 d9 b7 3b 53 57 6f 05 95 85 ee 79
Test: Verify
Message: r65 "abc"
Digest: 0A1B2F973044F469F405917E45010334
Test: Verify
Message: "abc"
Digest: 4EE815A06A1D71EDD36FC75D51188A40
Test: NotVerify

View File

@ -472,20 +472,18 @@ void VMAC_Base::VHASH_Update_Template(const word64 *data, size_t blocksRemaining
DeclareNH(nhA);
DeclareNH(nhB);
i = 0;
if (blocksRemainingInWord64 < L1KeyLengthInWord64)
{
if (blocksRemainingInWord64 % 8)
{
innerLoopEnd = blocksRemainingInWord64 % 8;
for (i=0; i<innerLoopEnd; i+=2)
for (; i<innerLoopEnd; i+=2)
INNER_LOOP_ITERATION(0);
blocksRemainingInWord64 -= innerLoopEnd;
data += innerLoopEnd;
}
innerLoopEnd = blocksRemainingInWord64;
}
for (i=0; i<innerLoopEnd; i+=8)
for (; i<innerLoopEnd; i+=8)
{
INNER_LOOP_ITERATION(0);
INNER_LOOP_ITERATION(1);