hash: hash_proc, cubehashproc
This commit is contained in:
parent
091b4d2b20
commit
c70ed00230
|
@ -45,9 +45,59 @@ public:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template<int I, int R, int B, int F, int H>
|
||||||
|
class cubehashproc : public hash_proc
|
||||||
|
{
|
||||||
|
cubehash_state<I, R, B, F, H> state;
|
||||||
|
byte buf[B];
|
||||||
|
int bpos;
|
||||||
|
public:
|
||||||
|
uint size() {
|
||||||
|
return H;
|
||||||
|
}
|
||||||
|
|
||||||
|
void init() {
|
||||||
|
state.init();
|
||||||
|
bpos = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void eat (const std::vector<byte>&a) {
|
||||||
|
int apos = 0;
|
||||||
|
if (bpos) {
|
||||||
|
for (; bpos < B && apos < a.size(); ++bpos, ++apos)
|
||||||
|
buf[bpos] = a[apos];
|
||||||
|
if (bpos == B) {
|
||||||
|
state.process_block (buf);
|
||||||
|
bpos = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (apos + B <= a.size() ) {
|
||||||
|
state.process_block (& (a[apos]) );
|
||||||
|
apos += B;
|
||||||
|
}
|
||||||
|
for (; apos < a.size(); ++apos, ++bpos)
|
||||||
|
buf[bpos] = a[apos];
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<byte> finish() {
|
||||||
|
state.process_final_incomplete_block (buf, bpos);
|
||||||
|
std::vector<byte> result;
|
||||||
|
result.resize (H, 0);
|
||||||
|
state.get_hash (& (result[0]) );
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class cube128hash : public cubehash<16, 16, 32, 32, 16> {};
|
class cube128hash : public cubehash<16, 16, 32, 32, 16> {};
|
||||||
class cube192hash : public cubehash<16, 16, 32, 32, 24> {};
|
class cube192hash : public cubehash<16, 16, 32, 32, 24> {};
|
||||||
class cube256hash : public cubehash<16, 16, 32, 32, 32> {};
|
class cube256hash : public cubehash<16, 16, 32, 32, 32> {};
|
||||||
class cube384hash : public cubehash<16, 16, 32, 32, 48> {};
|
class cube384hash : public cubehash<16, 16, 32, 32, 48> {};
|
||||||
class cube512hash : public cubehash<16, 16, 32, 32, 64> {};
|
class cube512hash : public cubehash<16, 16, 32, 32, 64> {};
|
||||||
|
|
||||||
|
class cube128proc : public cubehashproc<16, 16, 32, 32, 16> {};
|
||||||
|
class cube192proc : public cubehashproc<16, 16, 32, 32, 24> {};
|
||||||
|
class cube256proc : public cubehashproc<16, 16, 32, 32, 32> {};
|
||||||
|
class cube384proc : public cubehashproc<16, 16, 32, 32, 48> {};
|
||||||
|
class cube512proc : public cubehashproc<16, 16, 32, 32, 64> {};
|
||||||
|
|
|
@ -32,5 +32,14 @@ public:
|
||||||
virtual uint size() = 0; //in bytes
|
virtual uint size() = 0; //in bytes
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class hash_proc
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual uint size() = 0;
|
||||||
|
virtual void init() = 0;
|
||||||
|
virtual void eat (const std::vector<byte>&) = 0;
|
||||||
|
virtual std::vector<byte> finish() = 0;
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue