Browse Source

SHA-3: speedups (#47)

* add function for one-off calculation

* sha3: simplifies Read function

* sha3: remove if from Read
kris/switch_to_rust
Henry Case 4 years ago
committed by GitHub
parent
commit
8474981cfc
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 11 additions and 19 deletions
  1. +11
    -19
      hash/sha3/sha3.go

+ 11
- 19
hash/sha3/sha3.go View File

@@ -157,44 +157,36 @@ func (c *state) Read(out []byte) (nread int, err error) {
rate := c.BlockSize()
nread = len(out)

// finalize if not done yet
if !c.isSquezing {
c.finalize_sha3()
}

// Copy-out bytes that are still kept in the buffer
if c.idx != 0 {
l := min(c.idx, len(out))
idx := rate - c.idx
copy(out, buf[idx:idx+l])
out = out[l:]
c.idx -= l
}
l := min(c.idx, len(out))
copy(out, buf[rate-c.idx:rate-c.idx+l])
out = out[l:]
c.idx -= l

l := len(out)
if l == 0 {
if len(out) == 0 {
// nothing else todo
return nread, nil
}

// copy out full blocks and squeeze. at this point
// there is no more data in the buffer.
nblocks := l / rate
for i := 0; i < nblocks; i++ {
nblocks := len(out) / rate
for nblocks > 0 {
keccakF1600(&c.a)
copyOut(c, out[:rate])
out = out[rate:]
}

// produce more if needed
l = len(out)
if l == 0 {
return nread, nil
nblocks--
}

keccakF1600(&c.a)
copyOut(c, buf)
copy(out, buf[:l])
c.idx = rate - l
copy(out, buf[:len(out)])
c.idx = rate - len(out)
return nread, nil
}



Loading…
Cancel
Save