X-Git-Url: https://git.cryptolib.org/?a=blobdiff_plain;f=rabbit%2Frabbit_c.c;fp=rabbit%2Frabbit_c.c;h=4b6d777075d005a81fb565a56c7ab4833fdbcd4d;hb=6095187b080b960d111a54f18a3b2da788d2d59d;hp=d719b0e7fe7e21609d6f6d14710bbbdf06e70b05;hpb=f3456452a0f13bfe6d332aaeeada5b626dac2739;p=arm-crypto-lib.git diff --git a/rabbit/rabbit_c.c b/rabbit/rabbit_c.c index d719b0e..4b6d777 100644 --- a/rabbit/rabbit_c.c +++ b/rabbit/rabbit_c.c @@ -141,24 +141,28 @@ static void ivsetup(rabbit_ctx_t* ctx, const void* iv){ uint8_t i; uint32_t t; - uint8_t t_iv[8]; + union __attribute__((packed)){ + uint8_t v8[8]; + uint16_t v16[4]; + uint32_t v32[2]; + }t_iv; i=0; #if ESTREAM - memcpy(t_iv, iv, 8); + memcpy(t_iv.v8, iv, 8); #else do{ - t_iv[i] = ((uint8_t*)iv)[7-i]; - t_iv[7-i] = ((uint8_t*)iv)[i]; + t_iv.v8[i] = ((uint8_t*)iv)[7-i]; + t_iv.v8[7-i] = ((uint8_t*)iv)[i]; }while(++i<4); #endif - ctx->c[0] ^= *((uint32_t*)t_iv); - ctx->c[4] ^= *((uint32_t*)t_iv); - ctx->c[2] ^= ((uint32_t*)t_iv)[1]; - ctx->c[6] ^= ((uint32_t*)t_iv)[1]; - t = (( (uint32_t)((uint16_t*)t_iv)[3])<<16) | (((uint16_t*)t_iv)[1]); + ctx->c[0] ^= t_iv.v32[0]; + ctx->c[4] ^= t_iv.v32[0]; + ctx->c[2] ^= t_iv.v32[1]; + ctx->c[6] ^= t_iv.v32[1]; + t = ( ((uint32_t)(t_iv.v16[3]))<<16) | (t_iv.v16[1]); ctx->c[1] ^= t; ctx->c[5] ^= t; - t = (( (uint32_t)((uint16_t*)t_iv)[2])<<16) | (((uint16_t*)t_iv)[0]); + t = ( ((uint32_t)(t_iv.v16[2]))<<16) | (t_iv.v16[0]); ctx->c[3] ^= t; ctx->c[7] ^= t; i=4;