crypto/modes/gcm128.c: more strict aliasing fixes.
This commit is contained in:
@@ -847,7 +847,11 @@ void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx,const unsigned char *iv,size_t len)
|
|||||||
GCM_MUL(ctx,Yi);
|
GCM_MUL(ctx,Yi);
|
||||||
|
|
||||||
if (is_endian.little)
|
if (is_endian.little)
|
||||||
|
#ifdef BSWAP4
|
||||||
|
ctr = BSWAP4(ctx->Yi.d[3]);
|
||||||
|
#else
|
||||||
ctr = GETU32(ctx->Yi.c+12);
|
ctr = GETU32(ctx->Yi.c+12);
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
ctr = ctx->Yi.d[3];
|
ctr = ctx->Yi.d[3];
|
||||||
}
|
}
|
||||||
@@ -855,7 +859,11 @@ void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx,const unsigned char *iv,size_t len)
|
|||||||
(*ctx->block)(ctx->Yi.c,ctx->EK0.c,ctx->key);
|
(*ctx->block)(ctx->Yi.c,ctx->EK0.c,ctx->key);
|
||||||
++ctr;
|
++ctr;
|
||||||
if (is_endian.little)
|
if (is_endian.little)
|
||||||
|
#ifdef BSWAP4
|
||||||
|
ctx->Yi.d[3] = BSWAP4(ctr);
|
||||||
|
#else
|
||||||
PUTU32(ctx->Yi.c+12,ctr);
|
PUTU32(ctx->Yi.c+12,ctr);
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
ctx->Yi.d[3] = ctr;
|
ctx->Yi.d[3] = ctr;
|
||||||
}
|
}
|
||||||
@@ -950,7 +958,11 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (is_endian.little)
|
if (is_endian.little)
|
||||||
|
#ifdef BSWAP4
|
||||||
|
ctr = BSWAP4(ctx->Yi.d[3]);
|
||||||
|
#else
|
||||||
ctr = GETU32(ctx->Yi.c+12);
|
ctr = GETU32(ctx->Yi.c+12);
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
ctr = ctx->Yi.d[3];
|
ctr = ctx->Yi.d[3];
|
||||||
|
|
||||||
@@ -984,7 +996,11 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx,
|
|||||||
(*block)(ctx->Yi.c,ctx->EKi.c,key);
|
(*block)(ctx->Yi.c,ctx->EKi.c,key);
|
||||||
++ctr;
|
++ctr;
|
||||||
if (is_endian.little)
|
if (is_endian.little)
|
||||||
|
#ifdef BSWAP4
|
||||||
|
ctx->Yi.d[3] = BSWAP4(ctr);
|
||||||
|
#else
|
||||||
PUTU32(ctx->Yi.c+12,ctr);
|
PUTU32(ctx->Yi.c+12,ctr);
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
ctx->Yi.d[3] = ctr;
|
ctx->Yi.d[3] = ctr;
|
||||||
for (i=0; i<16/sizeof(size_t); ++i)
|
for (i=0; i<16/sizeof(size_t); ++i)
|
||||||
@@ -1006,7 +1022,11 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx,
|
|||||||
(*block)(ctx->Yi.c,ctx->EKi.c,key);
|
(*block)(ctx->Yi.c,ctx->EKi.c,key);
|
||||||
++ctr;
|
++ctr;
|
||||||
if (is_endian.little)
|
if (is_endian.little)
|
||||||
|
#ifdef BSWAP4
|
||||||
|
ctx->Yi.d[3] = BSWAP4(ctr);
|
||||||
|
#else
|
||||||
PUTU32(ctx->Yi.c+12,ctr);
|
PUTU32(ctx->Yi.c+12,ctr);
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
ctx->Yi.d[3] = ctr;
|
ctx->Yi.d[3] = ctr;
|
||||||
for (i=0; i<16/sizeof(size_t); ++i)
|
for (i=0; i<16/sizeof(size_t); ++i)
|
||||||
@@ -1025,7 +1045,11 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx,
|
|||||||
(*block)(ctx->Yi.c,ctx->EKi.c,key);
|
(*block)(ctx->Yi.c,ctx->EKi.c,key);
|
||||||
++ctr;
|
++ctr;
|
||||||
if (is_endian.little)
|
if (is_endian.little)
|
||||||
|
#ifdef BSWAP4
|
||||||
|
ctx->Yi.d[3] = BSWAP4(ctr);
|
||||||
|
#else
|
||||||
PUTU32(ctx->Yi.c+12,ctr);
|
PUTU32(ctx->Yi.c+12,ctr);
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
ctx->Yi.d[3] = ctr;
|
ctx->Yi.d[3] = ctr;
|
||||||
for (i=0; i<16/sizeof(size_t); ++i)
|
for (i=0; i<16/sizeof(size_t); ++i)
|
||||||
@@ -1041,7 +1065,11 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx,
|
|||||||
(*block)(ctx->Yi.c,ctx->EKi.c,key);
|
(*block)(ctx->Yi.c,ctx->EKi.c,key);
|
||||||
++ctr;
|
++ctr;
|
||||||
if (is_endian.little)
|
if (is_endian.little)
|
||||||
|
#ifdef BSWAP4
|
||||||
|
ctx->Yi.d[3] = BSWAP4(ctr);
|
||||||
|
#else
|
||||||
PUTU32(ctx->Yi.c+12,ctr);
|
PUTU32(ctx->Yi.c+12,ctr);
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
ctx->Yi.d[3] = ctr;
|
ctx->Yi.d[3] = ctr;
|
||||||
while (len--) {
|
while (len--) {
|
||||||
@@ -1059,7 +1087,11 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx,
|
|||||||
(*block)(ctx->Yi.c,ctx->EKi.c,key);
|
(*block)(ctx->Yi.c,ctx->EKi.c,key);
|
||||||
++ctr;
|
++ctr;
|
||||||
if (is_endian.little)
|
if (is_endian.little)
|
||||||
|
#ifdef BSWAP4
|
||||||
|
ctx->Yi.d[3] = BSWAP4(ctr);
|
||||||
|
#else
|
||||||
PUTU32(ctx->Yi.c+12,ctr);
|
PUTU32(ctx->Yi.c+12,ctr);
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
ctx->Yi.d[3] = ctr;
|
ctx->Yi.d[3] = ctr;
|
||||||
}
|
}
|
||||||
@@ -1103,7 +1135,11 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (is_endian.little)
|
if (is_endian.little)
|
||||||
|
#ifdef BSWAP4
|
||||||
|
ctr = BSWAP4(ctx->Yi.d[3]);
|
||||||
|
#else
|
||||||
ctr = GETU32(ctx->Yi.c+12);
|
ctr = GETU32(ctx->Yi.c+12);
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
ctr = ctx->Yi.d[3];
|
ctr = ctx->Yi.d[3];
|
||||||
|
|
||||||
@@ -1140,7 +1176,11 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx,
|
|||||||
(*block)(ctx->Yi.c,ctx->EKi.c,key);
|
(*block)(ctx->Yi.c,ctx->EKi.c,key);
|
||||||
++ctr;
|
++ctr;
|
||||||
if (is_endian.little)
|
if (is_endian.little)
|
||||||
|
#ifdef BSWAP4
|
||||||
|
ctx->Yi.d[3] = BSWAP4(ctr);
|
||||||
|
#else
|
||||||
PUTU32(ctx->Yi.c+12,ctr);
|
PUTU32(ctx->Yi.c+12,ctr);
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
ctx->Yi.d[3] = ctr;
|
ctx->Yi.d[3] = ctr;
|
||||||
for (i=0; i<16/sizeof(size_t); ++i)
|
for (i=0; i<16/sizeof(size_t); ++i)
|
||||||
@@ -1160,7 +1200,11 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx,
|
|||||||
(*block)(ctx->Yi.c,ctx->EKi.c,key);
|
(*block)(ctx->Yi.c,ctx->EKi.c,key);
|
||||||
++ctr;
|
++ctr;
|
||||||
if (is_endian.little)
|
if (is_endian.little)
|
||||||
|
#ifdef BSWAP4
|
||||||
|
ctx->Yi.d[3] = BSWAP4(ctr);
|
||||||
|
#else
|
||||||
PUTU32(ctx->Yi.c+12,ctr);
|
PUTU32(ctx->Yi.c+12,ctr);
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
ctx->Yi.d[3] = ctr;
|
ctx->Yi.d[3] = ctr;
|
||||||
for (i=0; i<16/sizeof(size_t); ++i)
|
for (i=0; i<16/sizeof(size_t); ++i)
|
||||||
@@ -1178,7 +1222,11 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx,
|
|||||||
(*block)(ctx->Yi.c,ctx->EKi.c,key);
|
(*block)(ctx->Yi.c,ctx->EKi.c,key);
|
||||||
++ctr;
|
++ctr;
|
||||||
if (is_endian.little)
|
if (is_endian.little)
|
||||||
|
#ifdef BSWAP4
|
||||||
|
ctx->Yi.d[3] = BSWAP4(ctr);
|
||||||
|
#else
|
||||||
PUTU32(ctx->Yi.c+12,ctr);
|
PUTU32(ctx->Yi.c+12,ctr);
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
ctx->Yi.d[3] = ctr;
|
ctx->Yi.d[3] = ctr;
|
||||||
for (i=0; i<16/sizeof(size_t); ++i) {
|
for (i=0; i<16/sizeof(size_t); ++i) {
|
||||||
@@ -1196,7 +1244,11 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx,
|
|||||||
(*block)(ctx->Yi.c,ctx->EKi.c,key);
|
(*block)(ctx->Yi.c,ctx->EKi.c,key);
|
||||||
++ctr;
|
++ctr;
|
||||||
if (is_endian.little)
|
if (is_endian.little)
|
||||||
|
#ifdef BSWAP4
|
||||||
|
ctx->Yi.d[3] = BSWAP4(ctr);
|
||||||
|
#else
|
||||||
PUTU32(ctx->Yi.c+12,ctr);
|
PUTU32(ctx->Yi.c+12,ctr);
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
ctx->Yi.d[3] = ctr;
|
ctx->Yi.d[3] = ctr;
|
||||||
while (len--) {
|
while (len--) {
|
||||||
@@ -1217,7 +1269,11 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx,
|
|||||||
(*block)(ctx->Yi.c,ctx->EKi.c,key);
|
(*block)(ctx->Yi.c,ctx->EKi.c,key);
|
||||||
++ctr;
|
++ctr;
|
||||||
if (is_endian.little)
|
if (is_endian.little)
|
||||||
|
#ifdef BSWAP4
|
||||||
|
ctx->Yi.d[3] = BSWAP4(ctr);
|
||||||
|
#else
|
||||||
PUTU32(ctx->Yi.c+12,ctr);
|
PUTU32(ctx->Yi.c+12,ctr);
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
ctx->Yi.d[3] = ctr;
|
ctx->Yi.d[3] = ctr;
|
||||||
}
|
}
|
||||||
@@ -1262,7 +1318,11 @@ int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (is_endian.little)
|
if (is_endian.little)
|
||||||
|
#ifdef BSWAP4
|
||||||
|
ctr = BSWAP4(ctx->Yi.d[3]);
|
||||||
|
#else
|
||||||
ctr = GETU32(ctx->Yi.c+12);
|
ctr = GETU32(ctx->Yi.c+12);
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
ctr = ctx->Yi.d[3];
|
ctr = ctx->Yi.d[3];
|
||||||
|
|
||||||
@@ -1284,7 +1344,11 @@ int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx,
|
|||||||
(*stream)(in,out,GHASH_CHUNK/16,key,ctx->Yi.c);
|
(*stream)(in,out,GHASH_CHUNK/16,key,ctx->Yi.c);
|
||||||
ctr += GHASH_CHUNK/16;
|
ctr += GHASH_CHUNK/16;
|
||||||
if (is_endian.little)
|
if (is_endian.little)
|
||||||
|
#ifdef BSWAP4
|
||||||
|
ctx->Yi.d[3] = BSWAP4(ctr);
|
||||||
|
#else
|
||||||
PUTU32(ctx->Yi.c+12,ctr);
|
PUTU32(ctx->Yi.c+12,ctr);
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
ctx->Yi.d[3] = ctr;
|
ctx->Yi.d[3] = ctr;
|
||||||
GHASH(ctx,out,GHASH_CHUNK);
|
GHASH(ctx,out,GHASH_CHUNK);
|
||||||
@@ -1299,7 +1363,11 @@ int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx,
|
|||||||
(*stream)(in,out,j,key,ctx->Yi.c);
|
(*stream)(in,out,j,key,ctx->Yi.c);
|
||||||
ctr += (unsigned int)j;
|
ctr += (unsigned int)j;
|
||||||
if (is_endian.little)
|
if (is_endian.little)
|
||||||
|
#ifdef BSWAP4
|
||||||
|
ctx->Yi.d[3] = BSWAP4(ctr);
|
||||||
|
#else
|
||||||
PUTU32(ctx->Yi.c+12,ctr);
|
PUTU32(ctx->Yi.c+12,ctr);
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
ctx->Yi.d[3] = ctr;
|
ctx->Yi.d[3] = ctr;
|
||||||
in += i;
|
in += i;
|
||||||
@@ -1319,7 +1387,11 @@ int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx,
|
|||||||
(*ctx->block)(ctx->Yi.c,ctx->EKi.c,key);
|
(*ctx->block)(ctx->Yi.c,ctx->EKi.c,key);
|
||||||
++ctr;
|
++ctr;
|
||||||
if (is_endian.little)
|
if (is_endian.little)
|
||||||
|
#ifdef BSWAP4
|
||||||
|
ctx->Yi.d[3] = BSWAP4(ctr);
|
||||||
|
#else
|
||||||
PUTU32(ctx->Yi.c+12,ctr);
|
PUTU32(ctx->Yi.c+12,ctr);
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
ctx->Yi.d[3] = ctr;
|
ctx->Yi.d[3] = ctr;
|
||||||
while (len--) {
|
while (len--) {
|
||||||
@@ -1361,7 +1433,11 @@ int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (is_endian.little)
|
if (is_endian.little)
|
||||||
|
#ifdef BSWAP4
|
||||||
|
ctr = BSWAP4(ctx->Yi.d[3]);
|
||||||
|
#else
|
||||||
ctr = GETU32(ctx->Yi.c+12);
|
ctr = GETU32(ctx->Yi.c+12);
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
ctr = ctx->Yi.d[3];
|
ctr = ctx->Yi.d[3];
|
||||||
|
|
||||||
@@ -1386,7 +1462,11 @@ int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx,
|
|||||||
(*stream)(in,out,GHASH_CHUNK/16,key,ctx->Yi.c);
|
(*stream)(in,out,GHASH_CHUNK/16,key,ctx->Yi.c);
|
||||||
ctr += GHASH_CHUNK/16;
|
ctr += GHASH_CHUNK/16;
|
||||||
if (is_endian.little)
|
if (is_endian.little)
|
||||||
|
#ifdef BSWAP4
|
||||||
|
ctx->Yi.d[3] = BSWAP4(ctr);
|
||||||
|
#else
|
||||||
PUTU32(ctx->Yi.c+12,ctr);
|
PUTU32(ctx->Yi.c+12,ctr);
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
ctx->Yi.d[3] = ctr;
|
ctx->Yi.d[3] = ctr;
|
||||||
out += GHASH_CHUNK;
|
out += GHASH_CHUNK;
|
||||||
@@ -1412,7 +1492,11 @@ int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx,
|
|||||||
(*stream)(in,out,j,key,ctx->Yi.c);
|
(*stream)(in,out,j,key,ctx->Yi.c);
|
||||||
ctr += (unsigned int)j;
|
ctr += (unsigned int)j;
|
||||||
if (is_endian.little)
|
if (is_endian.little)
|
||||||
|
#ifdef BSWAP4
|
||||||
|
ctx->Yi.d[3] = BSWAP4(ctr);
|
||||||
|
#else
|
||||||
PUTU32(ctx->Yi.c+12,ctr);
|
PUTU32(ctx->Yi.c+12,ctr);
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
ctx->Yi.d[3] = ctr;
|
ctx->Yi.d[3] = ctr;
|
||||||
out += i;
|
out += i;
|
||||||
@@ -1423,7 +1507,11 @@ int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx,
|
|||||||
(*ctx->block)(ctx->Yi.c,ctx->EKi.c,key);
|
(*ctx->block)(ctx->Yi.c,ctx->EKi.c,key);
|
||||||
++ctr;
|
++ctr;
|
||||||
if (is_endian.little)
|
if (is_endian.little)
|
||||||
|
#ifdef BSWAP4
|
||||||
|
ctx->Yi.d[3] = BSWAP4(ctr);
|
||||||
|
#else
|
||||||
PUTU32(ctx->Yi.c+12,ctr);
|
PUTU32(ctx->Yi.c+12,ctr);
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
ctx->Yi.d[3] = ctr;
|
ctx->Yi.d[3] = ctr;
|
||||||
while (len--) {
|
while (len--) {
|
||||||
|
Reference in New Issue
Block a user