func TestCBCCrypter(t *testing.T) {
f := func(key [KeySize]byte, iv [BlockSize]byte, pt []byte) bool {
c := NewCipher(key[:], SboxDefault)
- for i := 0; i < BlockSize; i++ {
+ for range BlockSize {
pt = append(pt, pt...)
}
ct := make([]byte, len(pt))
MainLoop:
for {
c.c.Encrypt(c.iv, c.iv)
- for n = 0; n < BlockSize; n++ {
+ for n = range BlockSize {
if i*BlockSize+n == len(src) {
break MainLoop
}
MainLoop:
for {
c.c.Encrypt(c.iv, c.iv)
- for n = 0; n < BlockSize; n++ {
+ for n = range BlockSize {
if i*BlockSize+n == len(src) {
break MainLoop
}
src := make([]byte, BlockSize)
rand.Read(src)
c := NewCipher(key[:], SboxDefault)
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
+ for b.Loop() {
c.Encrypt(dst, src)
}
}
}
n1t, n2t = c.c.xcrypt(SeqEncrypt, c.n1, c.n2)
nvs2block(n1t, n2t, block)
- for n = 0; n < BlockSize; n++ {
+ for n = range BlockSize {
if i*BlockSize+n == len(src) {
break MainLoop
}
rand.Read(src)
c := NewCipher(key, SboxDefault)
ctr := c.NewCTR(iv)
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
+ for b.Loop() {
ctr.XORKeyStream(dst, src)
}
}
func (m *MAC) Write(b []byte) (int, error) {
m.buf = append(m.buf, b...)
for len(m.buf) >= BlockSize {
- for i := 0; i < BlockSize; i++ {
+ for i := range BlockSize {
m.prev[i] ^= m.buf[i]
}
m.n1, m.n2 = block2nvs(m.prev)
return append(b, m.prev[0:m.size]...)
}
buf := m.buf
- var i int
- for i = 0; i < BlockSize-len(m.buf); i++ {
+ for range BlockSize - len(m.buf) {
buf = append(buf, byte(0))
}
- for i = 0; i < BlockSize; i++ {
+ for i := range BlockSize {
buf[i] ^= m.prev[i]
}
m.n1, m.n2 = block2nvs(buf)
t.Run("128U", func(t *testing.T) {
m.Reset()
- for i := 0; i < 128; i++ {
+ for range 128 {
m.Write([]byte("U"))
}
if !bytes.Equal(m.Sum(nil), []byte{0x1a, 0x06, 0xd1, 0xba, 0xd7, 0x45, 0x80, 0xef}) {
t.Run("xxxxxxxxxxxxx", func(t *testing.T) {
m.Reset()
- for i := 0; i < 13; i++ {
+ for range 13 {
m.Write([]byte("x"))
}
if !bytes.Equal(m.Sum(nil), []byte{0x91, 0x7e, 0xe1, 0xf1, 0xa6, 0x68, 0xfb, 0xd3}) {
rand.Read(b2)
c := NewCipher(key[:], SboxDefault)
mac, _ := c.NewMAC(BlockSize, iv)
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
+ for b.Loop() {
mac.Write(b1)
mac.Write(b2)
mac.Sum(nil)
func DiversifyCryptoPro(kek, ukm []byte) []byte {
out := kek
- for i := 0; i < 8; i++ {
+ for i := range 8 {
var s1, s2 uint64
- for j := 0; j < 8; j++ {
+ for j := range 8 {
k := binary.LittleEndian.Uint32(out[j*4 : j*4+4])
if (ukm[i]>>j)&1 > 0 {
s1 += uint64(k)
kek := make([]byte, KeySize)
cek := make([]byte, KeySize)
ukm := make([]byte, 8)
- for i := 0; i < 1000; i++ {
+ for range 1000 {
if _, err := io.ReadFull(rand.Reader, kek); err != nil {
t.Fatal(err)
}
}
digest := make([]byte, 32)
rand.Read(digest)
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
+ for b.Loop() {
prv.SignDigest(digest, rand.Reader)
}
}
if err != nil {
b.Fatal(err)
}
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
+ for b.Loop() {
pub.VerifyDigest(digest, sign)
}
}
}
digest := make([]byte, 64)
rand.Read(digest)
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
+ for b.Loop() {
prv.SignDigest(digest, rand.Reader)
}
}
if err != nil {
b.Fatal(err)
}
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
+ for b.Loop() {
pub.VerifyDigest(digest, sign)
}
}
return nil, fmt.Errorf("gogost/gost3410: len(key)=%d != %d", len(raw), pointSize)
}
key := make([]byte, pointSize)
- for i := 0; i < len(key); i++ {
+ for i := range len(key) {
key[i] = raw[len(raw)-i-1]
}
k := bytes2big(key)
rand io.Reader, digest []byte, opts crypto.SignerOpts,
) ([]byte, error) {
dgst := make([]byte, len(digest))
- for i := 0; i < len(digest); i++ {
+ for i := range len(digest) {
dgst[i] = digest[len(digest)-i-1]
}
return prv.Prv.Sign(rand, dgst, opts)
rand io.Reader, digest []byte, opts crypto.SignerOpts,
) ([]byte, error) {
dgst := make([]byte, len(digest))
- for i := 0; i < len(digest); i++ {
+ for i := range len(digest) {
dgst[i] = digest[len(digest)-i-1]
}
sign, err := prv.Prv.Sign(rand, dgst, opts)
if len(raw) != len(key) {
return nil, fmt.Errorf("gogost/gost3410: len(key) != %d", len(key))
}
- for i := 0; i < len(key); i++ {
+ for i := range len(key) {
key[i] = raw[len(raw)-i-1]
}
return &PublicKey{
digest, signature []byte,
) (bool, error) {
dgst := make([]byte, len(digest))
- for i := 0; i < len(digest); i++ {
+ for i := range len(digest) {
dgst[i] = digest[len(digest)-i-1]
}
return pub.Pub.VerifyDigest(dgst, signature)
digest, signature []byte,
) (bool, error) {
dgst := make([]byte, len(digest))
- for i := 0; i < len(digest); i++ {
+ for i := range len(digest) {
dgst[i] = digest[len(digest)-i-1]
}
sign := make([]byte, len(signature))
- for i := 0; i < len(signature); i++ {
+ for i := range len(signature) {
sign[i] = signature[len(signature)-i-1]
}
return pub.Pub.VerifyDigest(dgst, sign)
// Unmarshal little-endian UKM value.
func NewUKM(raw []byte) *big.Int {
t := make([]byte, len(raw))
- for i := 0; i < len(t); i++ {
+ for i := range len(t) {
t[i] = raw[len(raw)-i-1]
}
return bytes2big(t)
out[1] = s[6]
out[0] = s[7]
- for i := 0; i < 12; i++ {
+ for range 12 {
out = fChi(out)
}
blockXor(out, out, &m)
out = fChi(out)
blockXor(out, out, &hin)
- for i := 0; i < 61; i++ {
+ for range 61 {
out = fChi(out)
}
return *out
func TestVectors128U(t *testing.T) {
h := New(SboxDefault)
- for i := 0; i < 128; i++ {
+ for range 128 {
h.Write([]byte("U"))
}
if !bytes.Equal(h.Sum(nil), []byte{
func TestVectorsCryptoPro128U(t *testing.T) {
h := New(&gost28147.SboxIdGostR341194CryptoProParamSet)
- for i := 0; i < 128; i++ {
+ for range 128 {
h.Write([]byte{'U'})
}
if !bytes.Equal(h.Sum(nil), []byte{
h := New(SboxDefault)
src := make([]byte, BlockSize+1)
rand.Read(src)
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
+ for b.Loop() {
h.Write(src)
h.Sum(nil)
}
}
func l(blk *[BlockSize]byte) {
- for n := 0; n < BlockSize; n++ {
+ for range BlockSize {
blk[0],
blk[1],
blk[2],
func lInv(blk *[BlockSize]byte) {
var t byte
- for n := 0; n < BlockSize; n++ {
+ for range BlockSize {
t = blk[0]
copy(blk[:], blk[1:])
t ^= gfCache[blk[0]][lc[0]]
}
func sInv(blk *[BlockSize]byte) {
- for n := 0; n < BlockSize; n++ {
+ for n := range BlockSize {
blk[n] = piInv[int(blk[n])]
}
}
func init() {
- for a := 0; a < 256; a++ {
- for b := 0; b < 256; b++ {
+ for a := range 256 {
+ for b := range 256 {
gfCache[a][b] = gf(byte(a), byte(b))
}
}
- for i := 0; i < 256; i++ {
+ for i := range 256 {
piInv[int(pi[i])] = byte(i)
}
- for i := 0; i < 32; i++ {
+ for i := range 32 {
cBlk[i] = new([BlockSize]byte)
cBlk[i][15] = byte(i) + 1
l(cBlk[i])
copy(kr1[:], key[BlockSize:])
copy(ks[0][:], kr0[:])
copy(ks[1][:], kr1[:])
- for i := 0; i < 4; i++ {
- for j := 0; j < 8; j++ {
+ for i := range 4 {
+ for j := range 8 {
subtle.XORBytes(krt[:], kr0[:], cBlk[8*i+j][:])
s(&krt)
l(&krt)
func (c *Cipher) Encrypt(dst, src []byte) {
blk := new([BlockSize]byte)
copy(blk[:], src)
- for i := 0; i < 9; i++ {
+ for i := range 9 {
subtle.XORBytes(blk[:], blk[:], c.ks[i][:])
s(blk)
l(blk)
io.ReadFull(rand.Reader, key)
c := NewCipher(key)
blk := make([]byte, BlockSize)
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
+ for b.Loop() {
c.Encrypt(blk, blk)
}
}
io.ReadFull(rand.Reader, key)
c := NewCipher(key)
blk := make([]byte, BlockSize)
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
+ for b.Loop() {
c.Decrypt(blk, blk)
}
}
func R(blk []byte) {
t := blk[15]
- for i := 0; i < 15; i++ {
+ for i := range 15 {
t ^= gfCache[blk[i]][lc[i]]
}
copy(blk[1:], blk)
panic("invalid key size")
}
keyCompatible := make([]byte, KeySize)
- for i := 0; i < KeySize/4; i++ {
+ for i := range KeySize / 4 {
keyCompatible[i*4+0] = key[i*4+3]
keyCompatible[i*4+1] = key[i*4+2]
keyCompatible[i*4+2] = key[i*4+1]
h.n = 0
h.buf = nil
clear(h.chk)
- for i := 0; i < BlockSize; i++ {
+ for i := range BlockSize {
if h.size == 32 {
h.hsh[i] = 1
} else {
func add512bit(out, chk, data []byte) []byte {
var ss uint16
- for i := 0; i < BlockSize; i++ {
+ for i := range BlockSize {
ss = uint16(chk[i]) + uint16(data[i]) + (ss >> 8)
out[i] = byte(0xFF & ss)
}
func lps(out, data []byte) {
var res [BlockSize]byte
- for i := 0; i < 8; i++ {
+ for i := range 8 {
binary.LittleEndian.PutUint64(res[i*8:i*8+8],
precalc[0][data[8*0+i]]^
precalc[1][data[8*1+i]]^
func e(out, k, msg []byte) {
var msgBuf, kBuf, xorBuf [BlockSize]byte
- for i := 0; i < 12; i++ {
+ for i := range 12 {
subtle.XORBytes(xorBuf[:], k, msg)
lps(msgBuf[:], xorBuf[:])
msg = msgBuf[:]
func TestBlocksized(t *testing.T) {
h := New(64)
m := make([]byte, BlockSize)
- for i := 0; i < BlockSize; i++ {
+ for i := range BlockSize {
m[i] = byte(i)
}
h.Write(m)
h := New(64)
src := make([]byte, BlockSize+1)
rand.Read(src)
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
+ for b.Loop() {
h.Write(src)
h.Sum(nil)
}
for len(in) >= mgm.BlockSize {
mgm.cipher.Encrypt(mgm.bufC, mgm.bufP) // E_K(Y_i)
// subtle.XORBytes panic because of partial buffer overlapping
- for i := 0; i < mgm.BlockSize; i++ { // C_i = P_i (xor) E_K(Y_i)
+ for i := range mgm.BlockSize { // C_i = P_i (xor) E_K(Y_i)
out[i] = mgm.bufC[i] ^ in[i]
}
incr(mgm.bufP[mgm.BlockSize/2:]) // Y_i = incr_r(Y_{i-1})
}
if len(in) > 0 {
mgm.cipher.Encrypt(mgm.bufC, mgm.bufP)
- for i := 0; i < len(in); i++ {
+ for i := range len(in) {
out[i] = in[i] ^ mgm.bufC[i]
}
}
panic(err)
}
ct := make([]byte, len(pt)+aead.Overhead())
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
+ for b.Loop() {
aead.Seal(ct[:0], nonce, pt, nil)
}
}
panic(err)
}
ct := make([]byte, len(pt)+aead.Overhead())
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
+ for b.Loop() {
aead.Seal(ct[:0], nonce, pt, nil)
}
}
func gf128half(n int, t, x0, x1, z0, z1 uint64) (uint64, uint64, uint64, uint64, uint64) {
var sign bool
- for i := 0; i < n; i++ {
+ for range n {
if t&1 > 0 {
z0, z1 = z0^x0, z1^x1
}
rand.Read(x)
rand.Read(y)
mul := newMul128()
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
+ for b.Loop() {
mul.Mul(x, y)
}
}
rand.Read(x)
rand.Read(y)
mul := newMul64()
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
+ for b.Loop() {
mul.Mul(x, y)
}
}
}
n--
out := dst[prf.BlockSize():]
- for i := 0; i < n; i++ {
+ for i := range n {
in[len(in)-1] = byte(i + 2)
copy(in[:prf.BlockSize()], prf.Derive(in))
copy(out, in[:prf.BlockSize()])