the S array swap was forgotten.
* arcfour.c (arcfour_stream): Likewise.
* arcfour-crypt.c (arcfour_crypt): Likewise.
Rev: src/nettle/ChangeLog:1.233
Rev: src/nettle/arcfour-crypt.c:1.2
Rev: src/nettle/arcfour.c:1.6
Rev: src/nettle/x86/arcfour-crypt.asm:1.5
+2004-02-05 Niels Möller <nisse@lysator.liu.se>
+
+ * testsuite/arcfour-test.c (test_main): Use test_cipher_stream.
+
+ * testsuite/testutils.c (test_cipher_stream): New function, that
+ tries dividing the input into varying size blocks before
+ processing.
+
+ * x86/arcfour-crypt.asm (nettle_arcfour_crypt): Bug fix, half of
+ the S array swap was forgotten.
+ * arcfour.c (arcfour_stream): Likewise.
+ * arcfour-crypt.c (arcfour_crypt): Likewise.
+
2004-02-05 Niels Möller <niels@s3.kth.se>
* x86/arcfour-crypt.asm (nettle_arcfour_crypt): Must store the new
si = ctx->S[i];
j += si; j &= 0xff;
sj = ctx->S[i] = ctx->S[j];
+ ctx->S[j] = si;
*dst++ = *src++ ^ ctx->S[ (si + sj) & 0xff ];
}
ctx->i = i; ctx->j = j;
si = ctx->S[i];
j += si; j &= 0xff;
sj = ctx->S[i] = ctx->S[j];
+ ctx->S[j] = si;
*dst++ = ctx->S[ (si + sj) & 0xff ];
}
ctx->i = i; ctx->j = j;
movzbl (%ebp, %eax), %ecx C si. Clears high bytes
addb %cl, %bl
movb (%ebp, %ebx), %ch C sj
- movb %ch, (%ebp, %eax)
+ movb %ch, (%ebp, %eax) C S[i] = sj
+ movb %cl, (%ebp, %ebx) C C[j] = si
addb %ch, %cl
xorb %ch, %ch C Clear, so it can be used
C for indexing.