42 inline static uint32_t
LeftRotate(uint32_t value,
size_t count) {
43 return (value << count) ^ (value >> (32-count));
63 memcpy(m_digest, s.m_digest, 5 *
sizeof(uint32_t));
64 memcpy(m_block, s.m_block, 64);
65 m_blockByteIndex = s.m_blockByteIndex;
66 m_byteCount = s.m_byteCount;
75 m_digest[0] = 0x67452301;
76 m_digest[1] = 0xEFCDAB89;
77 m_digest[2] = 0x98BADCFE;
78 m_digest[3] = 0x10325476;
79 m_digest[4] = 0xC3D2E1F0;
89 this->m_block[this->m_blockByteIndex++] = octet;
91 if(m_blockByteIndex == 64) {
92 this->m_blockByteIndex = 0;
102 const uint8_t* begin =
static_cast<const uint8_t*
>(start);
103 const uint8_t* finish =
static_cast<const uint8_t*
>(end);
104 while(begin != finish) {
115 const uint8_t* block =
static_cast<const uint8_t*
>(data);
124 size_t bitCount = this->m_byteCount * 8;
126 if (this->m_blockByteIndex > 56) {
127 while (m_blockByteIndex != 0) {
130 while (m_blockByteIndex < 56) {
134 while (m_blockByteIndex < 56) {
142 processByte( static_cast<unsigned char>((bitCount>>24) & 0xFF));
143 processByte( static_cast<unsigned char>((bitCount>>16) & 0xFF));
144 processByte( static_cast<unsigned char>((bitCount>>8 ) & 0xFF));
145 processByte( static_cast<unsigned char>((bitCount) & 0xFF));
147 memcpy(digest, m_digest, 5 *
sizeof(uint32_t));
158 digest[di++] = ((d32[0] >> 24) & 0xFF);
159 digest[di++] = ((d32[0] >> 16) & 0xFF);
160 digest[di++] = ((d32[0] >> 8) & 0xFF);
161 digest[di++] = ((d32[0]) & 0xFF);
163 digest[di++] = ((d32[1] >> 24) & 0xFF);
164 digest[di++] = ((d32[1] >> 16) & 0xFF);
165 digest[di++] = ((d32[1] >> 8) & 0xFF);
166 digest[di++] = ((d32[1]) & 0xFF);
168 digest[di++] = ((d32[2] >> 24) & 0xFF);
169 digest[di++] = ((d32[2] >> 16) & 0xFF);
170 digest[di++] = ((d32[2] >> 8) & 0xFF);
171 digest[di++] = ((d32[2]) & 0xFF);
173 digest[di++] = ((d32[3] >> 24) & 0xFF);
174 digest[di++] = ((d32[3] >> 16) & 0xFF);
175 digest[di++] = ((d32[3] >> 8) & 0xFF);
176 digest[di++] = ((d32[3]) & 0xFF);
178 digest[di++] = ((d32[4] >> 24) & 0xFF);
179 digest[di++] = ((d32[4] >> 16) & 0xFF);
180 digest[di++] = ((d32[4] >> 8) & 0xFF);
181 digest[di++] = ((d32[4]) & 0xFF);
192 for (
size_t i = 0; i < 16; i++) {
193 w[i] = (m_block[i*4 + 0] << 24);
194 w[i] |= (m_block[i*4 + 1] << 16);
195 w[i] |= (m_block[i*4 + 2] << 8);
196 w[i] |= (m_block[i*4 + 3]);
198 for (
size_t i = 16; i < 80; i++) {
199 w[i] =
LeftRotate((w[i-3] ^ w[i-8] ^ w[i-14] ^ w[i-16]), 1);
202 uint32_t a = m_digest[0];
203 uint32_t b = m_digest[1];
204 uint32_t c = m_digest[2];
205 uint32_t d = m_digest[3];
206 uint32_t e = m_digest[4];
208 for (std::size_t i=0; i<80; ++i) {
213 f = (b & c) | (~b & d);
219 f = (b & c) | (b & d) | (c & d);
225 uint32_t temp =
LeftRotate(a, 5) + f + e + k + w[i];
242 size_t m_blockByteIndex;
const uint32_t * getDigest(digest32_t digest)
gets digest of SHA1
Definition: TinySHA1.h:123
SHA1 & processBytes(const void *const data, size_t len)
processes the bytes of a SHA1
Definition: TinySHA1.h:114
void processBlock()
processes block of SHA1
Definition: TinySHA1.h:190
Do not use these functions.
Definition: FileDataReader.h:16
SHA1()
Default Constructor of SHA1.
Definition: TinySHA1.h:49
uint32_t digest32_t[5]
digest32
Definition: TinySHA1.h:31
uint8_t digest8_t[20]
digest8
Definition: TinySHA1.h:36
const SHA1 & operator=(const SHA1 &s)
equals operator
Definition: TinySHA1.h:62
SHA1 & processByte(uint8_t octet)
processes byte of SHA1sum
Definition: TinySHA1.h:88
static uint32_t LeftRotate(uint32_t value, size_t count)
equals operator
Definition: TinySHA1.h:42
SHA1 & reset()
reset the SHA1
Definition: TinySHA1.h:74
SHA1 functionality of Pluto.
Definition: TinySHA1.h:24
const uint8_t * getDigestBytes(digest8_t digest)
gets the digests bytes of the SHA1
Definition: TinySHA1.h:154
SHA1(const SHA1 &s)
Copy Constructor of SHA1.
Definition: TinySHA1.h:56
SHA1 & processBlock(const void *const start, const void *const end)
processes block of SHA1sum
Definition: TinySHA1.h:101