// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

#include "textflag.h"

// func xorKeyStream(dst, src *byte, n int, state *[256]byte, i, j *uint8)
TEXT ·xorKeyStream(SB),NOSPLIT,$0
	MOVL dst+0(FP), DI
	MOVL src+4(FP), SI
	MOVL state+12(FP), BP

	MOVL i+16(FP), AX
	MOVBLZX (AX), AX
	MOVL j+20(FP), BX
	MOVBLZX (BX), BX
	CMPL n+8(FP), $0
	JEQ done

loop:
	// i += 1
	INCB AX

	// j += c.s[i]
	MOVBLZX (BP)(AX*4), DX
	ADDB DX, BX
	MOVBLZX BX, BX

	// c.s[i], c.s[j] = c.s[j], c.s[i]
	MOVBLZX (BP)(BX*4), CX
	MOVB CX, (BP)(AX*4)
	MOVB DX, (BP)(BX*4)

	// *dst = *src ^ c.s[c.s[i]+c.s[j]]
	ADDB DX, CX
	MOVBLZX CX, CX
	MOVB (BP)(CX*4), CX
	XORB (SI), CX
	MOVBLZX CX, CX
	MOVB CX, (DI)

	INCL SI
	INCL DI
	DECL n+8(FP)
	JNE loop

done:
	MOVL i+16(FP), CX
	MOVB AX, (CX)
	MOVL j+20(FP), CX
	MOVB BX, (CX)

	RET
