mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
crypto/{aes,cipher,rand}: use binary.{Big,Little}Endian methods
Use the binary.{Big,Little}Endian integer encoding methods rather
than unsafe or local implementations. These methods are tested to
ensure they inline correctly and don't add unnecessary bounds checks,
so it seems better to use them wherever possible.
This introduces a dependency on encoding/binary to crypto/cipher. I
think this is OK because other "L3" packages already import
encoding/binary.
Change-Id: I5cf01800d08554ca364e46cfc1d9445cf3c711a0
Reviewed-on: https://go-review.googlesource.com/115555
Run-TryBot: Michael Munday <mike.munday@ibm.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
3649fe299d
commit
4a842f2559
6 changed files with 56 additions and 103 deletions
|
|
@ -13,6 +13,7 @@ import (
|
|||
"bufio"
|
||||
"crypto/aes"
|
||||
"crypto/cipher"
|
||||
"encoding/binary"
|
||||
"io"
|
||||
"os"
|
||||
"runtime"
|
||||
|
|
@ -137,14 +138,7 @@ func (r *reader) Read(b []byte) (n int, err error) {
|
|||
// dst = encrypt(t^seed)
|
||||
// seed = encrypt(t^dst)
|
||||
ns := time.Now().UnixNano()
|
||||
r.time[0] = byte(ns >> 56)
|
||||
r.time[1] = byte(ns >> 48)
|
||||
r.time[2] = byte(ns >> 40)
|
||||
r.time[3] = byte(ns >> 32)
|
||||
r.time[4] = byte(ns >> 24)
|
||||
r.time[5] = byte(ns >> 16)
|
||||
r.time[6] = byte(ns >> 8)
|
||||
r.time[7] = byte(ns)
|
||||
binary.BigEndian.PutUint64(r.time[:], uint64(ns))
|
||||
r.cipher.Encrypt(r.time[0:], r.time[0:])
|
||||
for i := 0; i < aes.BlockSize; i++ {
|
||||
r.dst[i] = r.time[i] ^ r.seed[i]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue