Skip to content

Commit 9bfea6d

Browse files
authored
zuc: eea XORKeyStreamAt fix issue
1 parent f644a48 commit 9bfea6d

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

zuc/eea.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,9 @@ func (c *eea) XORKeyStreamAt(dst, src []byte, offset uint64) {
126126
if offsetDiff <= uint64(c.xLen) {
127127
c.xLen -= int(offsetDiff)
128128
c.used += offsetDiff
129+
if c.xLen > 0 {
130+
copy(c.x[:], c.x[offsetDiff:])
131+
}
129132
c.XORKeyStream(dst, src)
130133
return
131134
}

zuc/eea_test.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,19 @@ func TestXORStreamAt(t *testing.T) {
122122
}
123123
})
124124

125+
t.Run("Jump and forward (incomplete word): offsetDiff <= xLen", func(t *testing.T) {
126+
c.XORKeyStreamAt(dst[:1], src[:1], 0)
127+
c.XORKeyStreamAt(dst[3:16], src[3:16], 3)
128+
if !bytes.Equal(dst[3:16], expected[3:16]) {
129+
t.Errorf("expected=%x, result=%x\n", expected[3:16], dst[3:16])
130+
}
131+
c.XORKeyStreamAt(dst[:1], src[:1], 0)
132+
c.XORKeyStreamAt(dst[4:16], src[4:16], 4)
133+
if !bytes.Equal(dst[4:16], expected[4:16]) {
134+
t.Errorf("expected=%x, result=%x\n", expected[3:16], dst[3:16])
135+
}
136+
})
137+
125138
t.Run("Jump and forward (skipped keys more than 128)", func(t *testing.T) {
126139
// test offset - used > 128 bytes case
127140
c.XORKeyStreamAt(dst[:16], src[:16], 0)

0 commit comments

Comments
 (0)