github.com/xushiwei/go@v0.0.0-20130601165731-2b9d83f45bc9/src/pkg/crypto/rc4/rc4_386.s (about) 1 // Copyright 2013 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // func xorKeyStream(dst, src *byte, n int, state *[256]byte, i, j *uint8) 6 TEXT ·xorKeyStream(SB),7,$0 7 MOVL dst+0(FP), DI 8 MOVL src+4(FP), SI 9 MOVL state+12(FP), BP 10 11 MOVL i+16(FP), AX 12 MOVBLZX (AX), AX 13 MOVL j+20(FP), BX 14 MOVBLZX (BX), BX 15 CMPL n+8(FP), $0 16 JEQ done 17 18 loop: 19 // i += 1 20 INCB AX 21 22 // j += c.s[i] 23 MOVBLZX (BP)(AX*4), DX 24 ADDB DX, BX 25 MOVBLZX BX, BX 26 27 // c.s[i], c.s[j] = c.s[j], c.s[i] 28 MOVBLZX (BP)(BX*4), CX 29 MOVB CX, (BP)(AX*4) 30 MOVB DX, (BP)(BX*4) 31 32 // *dst = *src ^ c.s[c.s[i]+c.s[j]] 33 ADDB DX, CX 34 MOVBLZX CX, CX 35 MOVB (BP)(CX*4), CX 36 XORB (SI), CX 37 MOVBLZX CX, CX 38 MOVB CX, (DI) 39 40 INCL SI 41 INCL DI 42 DECL n+8(FP) 43 JNE loop 44 45 done: 46 MOVL i+16(FP), CX 47 MOVB AX, (CX) 48 MOVL j+20(FP), CX 49 MOVB BX, (CX) 50 51 RET