Skip to content

Commit

Permalink
crypto/sha*: replace putUint{32,64} helpers
Browse files Browse the repository at this point in the history
Replaces putUint{32,64} functions in crypto/sha* packages with the
equivalent functions encoding/binary.BigEndian.PutUint{32,64}.

Change-Id: I9208d2125202ea9c97777560e6917d21893aced0
Reviewed-on: https://go-review.googlesource.com/c/go/+/156117
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
  • Loading branch information
mmcloughlin authored and bradfitz committed May 23, 2019
1 parent 2500ac2 commit 3ce865d
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 82 deletions.
37 changes: 9 additions & 28 deletions src/crypto/sha1/sha1.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ package sha1

import (
"crypto"
"encoding/binary"
"errors"
"hash"
)
Expand Down Expand Up @@ -81,13 +82,13 @@ func (d *digest) UnmarshalBinary(b []byte) error {

func appendUint64(b []byte, x uint64) []byte {
var a [8]byte
putUint64(a[:], x)
binary.BigEndian.PutUint64(a[:], x)
return append(b, a[:]...)
}

func appendUint32(b []byte, x uint32) []byte {
var a [4]byte
putUint32(a[:], x)
binary.BigEndian.PutUint32(a[:], x)
return append(b, a[:]...)
}

Expand Down Expand Up @@ -170,7 +171,7 @@ func (d *digest) checkSum() [Size]byte {

// Length in bits.
len <<= 3
putUint64(tmp[:], len)
binary.BigEndian.PutUint64(tmp[:], len)
d.Write(tmp[0:8])

if d.nx != 0 {
Expand All @@ -179,11 +180,11 @@ func (d *digest) checkSum() [Size]byte {

var digest [Size]byte

putUint32(digest[0:], d.h[0])
putUint32(digest[4:], d.h[1])
putUint32(digest[8:], d.h[2])
putUint32(digest[12:], d.h[3])
putUint32(digest[16:], d.h[4])
binary.BigEndian.PutUint32(digest[0:], d.h[0])
binary.BigEndian.PutUint32(digest[4:], d.h[1])
binary.BigEndian.PutUint32(digest[8:], d.h[2])
binary.BigEndian.PutUint32(digest[12:], d.h[3])
binary.BigEndian.PutUint32(digest[16:], d.h[4])

return digest
}
Expand Down Expand Up @@ -263,23 +264,3 @@ func Sum(data []byte) [Size]byte {
d.Write(data)
return d.checkSum()
}

func putUint64(x []byte, s uint64) {
_ = x[7]
x[0] = byte(s >> 56)
x[1] = byte(s >> 48)
x[2] = byte(s >> 40)
x[3] = byte(s >> 32)
x[4] = byte(s >> 24)
x[5] = byte(s >> 16)
x[6] = byte(s >> 8)
x[7] = byte(s)
}

func putUint32(x []byte, s uint32) {
_ = x[3]
x[0] = byte(s >> 24)
x[1] = byte(s >> 16)
x[2] = byte(s >> 8)
x[3] = byte(s)
}
43 changes: 12 additions & 31 deletions src/crypto/sha256/sha256.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ package sha256

import (
"crypto"
"encoding/binary"
"errors"
"hash"
)
Expand Down Expand Up @@ -104,35 +105,15 @@ func (d *digest) UnmarshalBinary(b []byte) error {
return nil
}

func putUint32(x []byte, s uint32) {
_ = x[3]
x[0] = byte(s >> 24)
x[1] = byte(s >> 16)
x[2] = byte(s >> 8)
x[3] = byte(s)
}

func putUint64(x []byte, s uint64) {
_ = x[7]
x[0] = byte(s >> 56)
x[1] = byte(s >> 48)
x[2] = byte(s >> 40)
x[3] = byte(s >> 32)
x[4] = byte(s >> 24)
x[5] = byte(s >> 16)
x[6] = byte(s >> 8)
x[7] = byte(s)
}

func appendUint64(b []byte, x uint64) []byte {
var a [8]byte
putUint64(a[:], x)
binary.BigEndian.PutUint64(a[:], x)
return append(b, a[:]...)
}

func appendUint32(b []byte, x uint32) []byte {
var a [4]byte
putUint32(a[:], x)
binary.BigEndian.PutUint32(a[:], x)
return append(b, a[:]...)
}

Expand Down Expand Up @@ -246,7 +227,7 @@ func (d *digest) checkSum() [Size]byte {

// Length in bits.
len <<= 3
putUint64(tmp[:], len)
binary.BigEndian.PutUint64(tmp[:], len)
d.Write(tmp[0:8])

if d.nx != 0 {
Expand All @@ -255,15 +236,15 @@ func (d *digest) checkSum() [Size]byte {

var digest [Size]byte

putUint32(digest[0:], d.h[0])
putUint32(digest[4:], d.h[1])
putUint32(digest[8:], d.h[2])
putUint32(digest[12:], d.h[3])
putUint32(digest[16:], d.h[4])
putUint32(digest[20:], d.h[5])
putUint32(digest[24:], d.h[6])
binary.BigEndian.PutUint32(digest[0:], d.h[0])
binary.BigEndian.PutUint32(digest[4:], d.h[1])
binary.BigEndian.PutUint32(digest[8:], d.h[2])
binary.BigEndian.PutUint32(digest[12:], d.h[3])
binary.BigEndian.PutUint32(digest[16:], d.h[4])
binary.BigEndian.PutUint32(digest[20:], d.h[5])
binary.BigEndian.PutUint32(digest[24:], d.h[6])
if !d.is224 {
putUint32(digest[28:], d.h[7])
binary.BigEndian.PutUint32(digest[28:], d.h[7])
}

return digest
Expand Down
35 changes: 12 additions & 23 deletions src/crypto/sha512/sha512.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ package sha512

import (
"crypto"
"encoding/binary"
"errors"
"hash"
)
Expand Down Expand Up @@ -195,21 +196,9 @@ func (d *digest) UnmarshalBinary(b []byte) error {
return nil
}

func putUint64(x []byte, s uint64) {
_ = x[7]
x[0] = byte(s >> 56)
x[1] = byte(s >> 48)
x[2] = byte(s >> 40)
x[3] = byte(s >> 32)
x[4] = byte(s >> 24)
x[5] = byte(s >> 16)
x[6] = byte(s >> 8)
x[7] = byte(s)
}

func appendUint64(b []byte, x uint64) []byte {
var a [8]byte
putUint64(a[:], x)
binary.BigEndian.PutUint64(a[:], x)
return append(b, a[:]...)
}

Expand Down Expand Up @@ -316,24 +305,24 @@ func (d *digest) checkSum() [Size]byte {

// Length in bits.
len <<= 3
putUint64(tmp[0:], 0) // upper 64 bits are always zero, because len variable has type uint64
putUint64(tmp[8:], len)
binary.BigEndian.PutUint64(tmp[0:], 0) // upper 64 bits are always zero, because len variable has type uint64
binary.BigEndian.PutUint64(tmp[8:], len)
d.Write(tmp[0:16])

if d.nx != 0 {
panic("d.nx != 0")
}

var digest [Size]byte
putUint64(digest[0:], d.h[0])
putUint64(digest[8:], d.h[1])
putUint64(digest[16:], d.h[2])
putUint64(digest[24:], d.h[3])
putUint64(digest[32:], d.h[4])
putUint64(digest[40:], d.h[5])
binary.BigEndian.PutUint64(digest[0:], d.h[0])
binary.BigEndian.PutUint64(digest[8:], d.h[1])
binary.BigEndian.PutUint64(digest[16:], d.h[2])
binary.BigEndian.PutUint64(digest[24:], d.h[3])
binary.BigEndian.PutUint64(digest[32:], d.h[4])
binary.BigEndian.PutUint64(digest[40:], d.h[5])
if d.function != crypto.SHA384 {
putUint64(digest[48:], d.h[6])
putUint64(digest[56:], d.h[7])
binary.BigEndian.PutUint64(digest[48:], d.h[6])
binary.BigEndian.PutUint64(digest[56:], d.h[7])
}

return digest
Expand Down

0 comments on commit 3ce865d

Please sign in to comment.