summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsiddharth <s@ricketyspace.net>2021-10-10 17:13:11 -0400
committersiddharth <s@ricketyspace.net>2021-10-10 17:13:11 -0400
commit75e82c897ca5910e2fa469ff0fd16dfd71cd1637 (patch)
tree84f0cb461c3e931907c668acfb85c078d65775ca
parent244d10ac25d1adc0f10e089f8d457269b109897d (diff)
Revert "lib: move common hashing functions to hash.go"
This reverts commit 15e142c3f12fd9228b69bcaf4a2703c9d8205d59.
-rw-r--r--lib/hash.go67
-rw-r--r--lib/sha1.go68
2 files changed, 67 insertions, 68 deletions
diff --git a/lib/hash.go b/lib/hash.go
index 363d3d6..c36ff43 100644
--- a/lib/hash.go
+++ b/lib/hash.go
@@ -3,31 +3,6 @@
package lib
-// Converts padded messages bytes `pm` into 512-bit message blocks.
-// Each 512-bit block is an array of 16 32-bit words.
-// It's assumed bit length of `pm` is a multiple of 512.
-func shaMessageBlocks(pm []byte) [][]uint32 {
- // Break into 512-bit blocks
- bs := BreakIntoBlocks(pm, 64)
-
- mbs := make([][]uint32, 0) // Message blocks.
- for i := 0; i < len(bs); i++ {
- ws := make([]uint32, 0) // 32-bit words.
-
- // Break 512-bit (64 bytes) into 32-bit words.
- for j := 0; j < 64; j = j + 4 {
- // Pack 4 bytes into a 32-bit word.
- w := (uint32(bs[i][j])<<24 |
- uint32(bs[i][j+1])<<16 |
- uint32(bs[i][j+2])<<8 |
- uint32(bs[i][j+3]))
- ws = append(ws, w)
- }
- mbs = append(mbs, ws)
- }
- return mbs
-}
-
// (a + b + ...) mod 2^32
func shaAdd(n ...uint32) uint32 {
sum := uint64(0)
@@ -46,45 +21,3 @@ func shaRotr(x uint32, n uint) uint32 {
func shaRotl(x uint32, n uint) uint32 {
return (x << n) | (x >> (32 - n))
}
-
-// Returns Merkle–Damgård padding in bytes for length of mesage `l`
-// bytes.
-func MDPadding(l int) []byte {
- l = l * 8 // msg size in bits
-
- // Reckon value of `k`
- k := 0
- for ((l + 1 + k) % 512) != 448 {
- k += 1
- }
-
- // Initialize padding bytes
- pbs := make([]byte, 0)
-
- // Add bit `1` as byte block.
- pbs = append(pbs, 0x80)
- f := 7 // unclaimed bits in last byte of `pbs`
-
- // Add `k` bit `0`s
- for i := 0; i < k; i++ {
- if f == 0 {
- pbs = append(pbs, 0x0)
- f = 8
- }
- f = f - 1
- }
-
- // Add `l` in a 64 bit block in `pbs`
- l64 := uint64(l)
- b64 := make([]byte, 8) // last 64-bits
- for i := 7; i >= 0; i-- {
- // Get 8 last bits.
- b64[i] = byte(l64 & 0xFF)
-
- // Get rid of the last 8 bits.
- l64 = l64 >> 8
- }
- pbs = append(pbs, b64...)
-
- return pbs
-}
diff --git a/lib/sha1.go b/lib/sha1.go
index e4ab369..989c59b 100644
--- a/lib/sha1.go
+++ b/lib/sha1.go
@@ -53,6 +53,30 @@ func sha1KT(t int) uint32 {
}
}
+// Converts padded messages bytes `pm` into 512-bit message blocks.
+// Each 512-bit block is an array of 16 32-bit words.
+func sha1MessageBlocks(pm []byte) [][]uint32 {
+ // Break into 512-bit blocks
+ bs := BreakIntoBlocks(pm, 64)
+
+ mbs := make([][]uint32, 0) // Message blocks.
+ for i := 0; i < len(bs); i++ {
+ ws := make([]uint32, 0) // 32-bit words.
+
+ // Break 512-bit (64 bytes) into 32-bit words.
+ for j := 0; j < 64; j = j + 4 {
+ // Pack 4 bytes into a 32-bit word.
+ w := (uint32(bs[i][j])<<24 |
+ uint32(bs[i][j+1])<<16 |
+ uint32(bs[i][j+2])<<8 |
+ uint32(bs[i][j+3]))
+ ws = append(ws, w)
+ }
+ mbs = append(mbs, ws)
+ }
+ return mbs
+}
+
// Returns the message schedule W_t for message black `mb`
// The message schedule has 80 32-bit words.
func sha1MessageSchedule(mb []uint32) []uint32 {
@@ -104,7 +128,7 @@ func (s *Sha1) Hash() []byte {
pm := s.Pad()
// Break into message blocks.
- mbs := shaMessageBlocks(pm)
+ mbs := sha1MessageBlocks(pm)
// Initialize hash values.
h := make([]uint32, 5)
@@ -170,3 +194,45 @@ func (s *Sha1) MacVerify(secret, msg, mac []byte) bool {
}
return false
}
+
+// Returns Merkle–Damgård padding in bytes for length of mesage `l`
+// bytes.
+func MDPadding(l int) []byte {
+ l = l * 8 // msg size in bits
+
+ // Reckon value of `k`
+ k := 0
+ for ((l + 1 + k) % 512) != 448 {
+ k += 1
+ }
+
+ // Initialize padding bytes
+ pbs := make([]byte, 0)
+
+ // Add bit `1` as byte block.
+ pbs = append(pbs, 0x80)
+ f := 7 // unclaimed bits in last byte of `pbs`
+
+ // Add `k` bit `0`s
+ for i := 0; i < k; i++ {
+ if f == 0 {
+ pbs = append(pbs, 0x0)
+ f = 8
+ }
+ f = f - 1
+ }
+
+ // Add `l` in a 64 bit block in `pbs`
+ l64 := uint64(l)
+ b64 := make([]byte, 8) // last 64-bits
+ for i := 7; i >= 0; i-- {
+ // Get 8 last bits.
+ b64[i] = byte(l64 & 0xFF)
+
+ // Get rid of the last 8 bits.
+ l64 = l64 >> 8
+ }
+ pbs = append(pbs, b64...)
+
+ return pbs
+}