On Wed, Oct 03, 2007 at 06:21:49PM +0800, Herbert Xu wrote: > static void __ctr_inc_byte(u8 *a, int size) > { > __be8 *b = (__be8 *)(a + size); > u8 c; > > do { > c = be8_to_cpu(*--b) + 1; > *b = cpu_to_be8(c); > if (c) > break; > } while (--size); This should be a for loop and we can make it inline too. static inline void __ctr_inc_byte(u8 *a, int size) { __be8 *b = (__be8 *)(a + size); u8 c; for (; size; size--) { c = b8_to_cpu(*--b) + 1; *b = cpu_to_be8(c); if (c) break; } } > Let's also get rid of the xor selection and just use this xor > function: > > static void xor_quad(u8 *dst, const u8 *src, unsigned int bs) > { > u32 *a = (u32 *)dst; > u32 *b = (u32 *)src; > > for (; bs >= 4; bs -= 4) > *a++ ^= *b++; > > xor_byte((u8 *)a, (u8 *)b, bs); > } xor_byte should be constructed in a similar fashion. Cheers, -- Visit Openswan at http://www.openswan.org/ Email: Herbert Xu ~{PmV>HI~} <herbert@xxxxxxxxxxxxxxxxxxx> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt - To unsubscribe from this list: send the line "unsubscribe linux-crypto" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html