aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/checksum/adler32/adler32.cpp33
-rw-r--r--src/checksum/adler32/adler32.h1
2 files changed, 20 insertions, 14 deletions
diff --git a/src/checksum/adler32/adler32.cpp b/src/checksum/adler32/adler32.cpp
index c66943b88..09e42b8db 100644
--- a/src/checksum/adler32/adler32.cpp
+++ b/src/checksum/adler32/adler32.cpp
@@ -10,12 +10,14 @@
namespace Botan {
-/*
-* Adler32 Checksum
-*/
-void Adler32::hash(const byte input[], u32bit length)
+namespace {
+
+void adler32_update(const byte input[], size_t length,
+ u16bit& S1, u16bit& S2)
{
- u32bit S1x = S1, S2x = S2;
+ u32bit S1x = S1;
+ u32bit S2x = S2;
+
while(length >= 16)
{
S1x += input[ 0]; S2x += S1x;
@@ -37,29 +39,34 @@ void Adler32::hash(const byte input[], u32bit length)
input += 16;
length -= 16;
}
- for(u32bit j = 0; j != length; ++j)
+
+ for(size_t j = 0; j != length; ++j)
{
- S1x += input[j]; S2x += S1x;
+ S1x += input[j];
+ S2x += S1x;
}
- S1x %= 65521;
- S2x %= 65521;
- S1 = S1x;
- S2 = S2x;
+
+ S1 = S1x % 65521;
+ S2 = S2x % 65521;
}
+}
+
/*
* Update an Adler32 Checksum
*/
void Adler32::add_data(const byte input[], u32bit length)
{
const u32bit PROCESS_AMOUNT = 5552;
+
while(length >= PROCESS_AMOUNT)
{
- hash(input, PROCESS_AMOUNT);
+ adler32_update(input, PROCESS_AMOUNT, S1, S2);
input += PROCESS_AMOUNT;
length -= PROCESS_AMOUNT;
}
- hash(input, length);
+
+ adler32_update(input, length, S1, S2);
}
/*
diff --git a/src/checksum/adler32/adler32.h b/src/checksum/adler32/adler32.h
index 8cbd67f10..4993e601b 100644
--- a/src/checksum/adler32/adler32.h
+++ b/src/checksum/adler32/adler32.h
@@ -26,7 +26,6 @@ class BOTAN_DLL Adler32 : public HashFunction
private:
void add_data(const byte[], u32bit);
void final_result(byte[]);
- void hash(const byte[], u32bit);
u16bit S1, S2;
};