summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorweidai <weidai@57ff6487-cd31-0410-9ec3-f628ee90f5f0>2009-01-24 02:51:45 +0000
committerweidai <weidai@57ff6487-cd31-0410-9ec3-f628ee90f5f0>2009-01-24 02:51:45 +0000
commit21e37311f74460550001f25240be0ebd83e11ea9 (patch)
treecf7f435ace477e6ed554b27c8be984b4a93b683f
parent83c4add7725ca2489ee5f10aee215e804368838b (diff)
downloadcryptopp-21e37311f74460550001f25240be0ebd83e11ea9.tar.gz
fix incorrect VMAC computation on message lengths that are >64 mod 128
git-svn-id: svn://svn.code.sf.net/p/cryptopp/code/trunk/c5@431 57ff6487-cd31-0410-9ec3-f628ee90f5f0
-rwxr-xr-xTestVectors/vmac.txt18
-rwxr-xr-xvmac.cpp8
2 files changed, 21 insertions, 5 deletions
diff --git a/TestVectors/vmac.txt b/TestVectors/vmac.txt
index 4fe3b4e..ad7db7a 100755
--- a/TestVectors/vmac.txt
+++ b/TestVectors/vmac.txt
@@ -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
diff --git a/vmac.cpp b/vmac.cpp
index 6c784f1..ecfd278 100755
--- a/vmac.cpp
+++ b/vmac.cpp
@@ -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);