zuc: eea XORKeyStreamAt fix issue

This commit is contained in:
Sun Yimin 2024-12-05 17:59:02 +08:00 committed by GitHub
parent f644a483e3
commit 9bfea6d73d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 16 additions and 0 deletions

View File

@ -126,6 +126,9 @@ func (c *eea) XORKeyStreamAt(dst, src []byte, offset uint64) {
if offsetDiff <= uint64(c.xLen) {
c.xLen -= int(offsetDiff)
c.used += offsetDiff
if c.xLen > 0 {
copy(c.x[:], c.x[offsetDiff:])
}
c.XORKeyStream(dst, src)
return
}

View File

@ -122,6 +122,19 @@ func TestXORStreamAt(t *testing.T) {
}
})
t.Run("Jump and forward (incomplete word): offsetDiff <= xLen", func(t *testing.T) {
c.XORKeyStreamAt(dst[:1], src[:1], 0)
c.XORKeyStreamAt(dst[3:16], src[3:16], 3)
if !bytes.Equal(dst[3:16], expected[3:16]) {
t.Errorf("expected=%x, result=%x\n", expected[3:16], dst[3:16])
}
c.XORKeyStreamAt(dst[:1], src[:1], 0)
c.XORKeyStreamAt(dst[4:16], src[4:16], 4)
if !bytes.Equal(dst[4:16], expected[4:16]) {
t.Errorf("expected=%x, result=%x\n", expected[3:16], dst[3:16])
}
})
t.Run("Jump and forward (skipped keys more than 128)", func(t *testing.T) {
// test offset - used > 128 bytes case
c.XORKeyStreamAt(dst[:16], src[:16], 0)