Skip to content

Commit

Permalink
Add <Hasher>::OUTPUT_SIZE
Browse files Browse the repository at this point in the history
  • Loading branch information
sipa committed Jun 21, 2014
1 parent 4791b99 commit a0495bb
Show file tree
Hide file tree
Showing 8 changed files with 31 additions and 16 deletions.
2 changes: 1 addition & 1 deletion src/crypto/ripemd160.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ CRIPEMD160& CRIPEMD160::Write(const unsigned char *data, size_t len) {
return *this;
}

void CRIPEMD160::Finalize(unsigned char *hash) {
void CRIPEMD160::Finalize(unsigned char hash[OUTPUT_SIZE]) {
static const unsigned char pad[64] = {0x80};
unsigned char sizedesc[8];
WriteLE64(sizedesc, bytes << 3);
Expand Down
4 changes: 3 additions & 1 deletion src/crypto/ripemd160.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,11 @@ class CRIPEMD160 {
size_t bytes;

public:
static const size_t OUTPUT_SIZE = 20;

CRIPEMD160();
CRIPEMD160& Write(const unsigned char *data, size_t len);
void Finalize(unsigned char *hash);
void Finalize(unsigned char hash[OUTPUT_SIZE]);
CRIPEMD160& Reset();
};

Expand Down
2 changes: 1 addition & 1 deletion src/crypto/sha1.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ CSHA1& CSHA1::Write(const unsigned char *data, size_t len) {
return *this;
}

void CSHA1::Finalize(unsigned char *hash) {
void CSHA1::Finalize(unsigned char hash[OUTPUT_SIZE]) {
static const unsigned char pad[64] = {0x80};
unsigned char sizedesc[8];
WriteBE64(sizedesc, bytes << 3);
Expand Down
4 changes: 3 additions & 1 deletion src/crypto/sha1.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,11 @@ class CSHA1 {
size_t bytes;

public:
static const size_t OUTPUT_SIZE = 20;

CSHA1();
CSHA1& Write(const unsigned char *data, size_t len);
void Finalize(unsigned char *hash);
void Finalize(unsigned char hash[OUTPUT_SIZE]);
CSHA1& Reset();
};

Expand Down
6 changes: 3 additions & 3 deletions src/crypto/sha2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -295,7 +295,7 @@ CSHA256& CSHA256::Write(const unsigned char *data, size_t len) {
return *this;
}

void CSHA256::Finalize(unsigned char *hash) {
void CSHA256::Finalize(unsigned char hash[OUTPUT_SIZE]) {
static const unsigned char pad[64] = {0x80};
unsigned char sizedesc[8];
WriteBE64(sizedesc, bytes << 3);
Expand Down Expand Up @@ -348,7 +348,7 @@ CSHA512& CSHA512::Write(const unsigned char *data, size_t len) {
return *this;
}

void CSHA512::Finalize(unsigned char *hash) {
void CSHA512::Finalize(unsigned char hash[OUTPUT_SIZE]) {
static const unsigned char pad[128] = {0x80};
unsigned char sizedesc[16] = {0x00};
WriteBE64(sizedesc+8, bytes << 3);
Expand Down Expand Up @@ -391,7 +391,7 @@ CHMAC_SHA512::CHMAC_SHA512(const unsigned char *key, size_t keylen) {
inner.Write(rkey, 128);
}

void CHMAC_SHA512::Finalize(unsigned char *hash) {
void CHMAC_SHA512::Finalize(unsigned char hash[OUTPUT_SIZE]) {
unsigned char temp[64];
inner.Finalize(temp);
outer.Write(temp, 64).Finalize(hash);
Expand Down
12 changes: 9 additions & 3 deletions src/crypto/sha2.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,11 @@ class CSHA256 {
size_t bytes;

public:
static const size_t OUTPUT_SIZE = 32;

CSHA256();
CSHA256& Write(const unsigned char *data, size_t len);
void Finalize(unsigned char *hash);
void Finalize(unsigned char hash[OUTPUT_SIZE]);
CSHA256& Reset();
};

Expand All @@ -30,9 +32,11 @@ class CSHA512 {
size_t bytes;

public:
static const size_t OUTPUT_SIZE = 64;

CSHA512();
CSHA512& Write(const unsigned char *data, size_t len);
void Finalize(unsigned char *hash);
void Finalize(unsigned char hash[OUTPUT_SIZE]);
CSHA512& Reset();
};

Expand All @@ -43,12 +47,14 @@ class CHMAC_SHA512 {
CSHA512 inner;

public:
static const size_t OUTPUT_SIZE = 64;

CHMAC_SHA512(const unsigned char *key, size_t keylen);
CHMAC_SHA512& Write(const unsigned char *data, size_t len) {
inner.Write(data, len);
return *this;
}
void Finalize(unsigned char *hash);
void Finalize(unsigned char hash[OUTPUT_SIZE]);
};

#endif
16 changes: 10 additions & 6 deletions src/hash.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,12 @@ class CHash256 {
private:
CSHA256 sha;
public:
void Finalize(unsigned char *hash) {
unsigned char buf[32];
static const size_t OUTPUT_SIZE = CSHA256::OUTPUT_SIZE;

void Finalize(unsigned char hash[OUTPUT_SIZE]) {
unsigned char buf[sha.OUTPUT_SIZE];
sha.Finalize(buf);
sha.Reset().Write(buf, 32).Finalize(hash);
sha.Reset().Write(buf, sha.OUTPUT_SIZE).Finalize(hash);
}

CHash256& Write(const unsigned char *data, size_t len) {
Expand All @@ -41,10 +43,12 @@ class CHash160 {
private:
CSHA256 sha;
public:
void Finalize(unsigned char *hash) {
unsigned char buf[32];
static const size_t OUTPUT_SIZE = CRIPEMD160::OUTPUT_SIZE;

void Finalize(unsigned char hash[OUTPUT_SIZE]) {
unsigned char buf[sha.OUTPUT_SIZE];
sha.Finalize(buf);
CRIPEMD160().Write(buf, 32).Finalize(hash);
CRIPEMD160().Write(buf, sha.OUTPUT_SIZE).Finalize(hash);
}

CHash160& Write(const unsigned char *data, size_t len) {
Expand Down
1 change: 1 addition & 0 deletions src/test/crypto_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ BOOST_AUTO_TEST_SUITE(crypto_tests)
template<typename Hasher, typename In, typename Out>
void TestVector(const Hasher &h, const In &in, const Out &out) {
Out hash;
BOOST_CHECK(out.size() == h.OUTPUT_SIZE);
hash.resize(out.size());
{
// Test that writing the whole input string at once works.
Expand Down

0 comments on commit a0495bb

Please sign in to comment.