fix bug in UnalignedPutWordNonTemplate

pull/2/head
weidai 2007-05-05 01:00:52 +00:00
parent a1e8a5f05c
commit c992330622
1 changed files with 92 additions and 54 deletions

84
misc.h
View File

@ -847,32 +847,61 @@ inline void UnalignedPutWordNonTemplate(ByteOrder order, byte *block, byte value
inline void UnalignedPutWordNonTemplate(ByteOrder order, byte *block, word16 value, const byte *xorBlock) inline void UnalignedPutWordNonTemplate(ByteOrder order, byte *block, word16 value, const byte *xorBlock)
{ {
if (order == BIG_ENDIAN_ORDER) if (order == BIG_ENDIAN_ORDER)
{
if (xorBlock)
{
block[0] = xorBlock[0] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 1);
block[1] = xorBlock[1] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 0);
}
else
{ {
block[0] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 1); block[0] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 1);
block[1] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 0); block[1] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 0);
} }
}
else
{
if (xorBlock)
{
block[0] = xorBlock[0] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 0);
block[1] = xorBlock[1] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 1);
}
else else
{ {
block[0] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 0); block[0] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 0);
block[1] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 1); block[1] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 1);
} }
if (xorBlock)
{
block[0] ^= xorBlock[0];
block[1] ^= xorBlock[1];
} }
} }
inline void UnalignedPutWordNonTemplate(ByteOrder order, byte *block, word32 value, const byte *xorBlock) inline void UnalignedPutWordNonTemplate(ByteOrder order, byte *block, word32 value, const byte *xorBlock)
{ {
if (order == BIG_ENDIAN_ORDER) if (order == BIG_ENDIAN_ORDER)
{
if (xorBlock)
{
block[0] = xorBlock[0] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 3);
block[1] = xorBlock[1] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 2);
block[2] = xorBlock[2] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 1);
block[3] = xorBlock[3] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 0);
}
else
{ {
block[0] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 3); block[0] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 3);
block[1] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 2); block[1] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 2);
block[2] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 1); block[2] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 1);
block[3] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 0); block[3] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 0);
} }
}
else
{
if (xorBlock)
{
block[0] = xorBlock[0] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 0);
block[1] = xorBlock[1] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 1);
block[2] = xorBlock[2] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 2);
block[3] = xorBlock[3] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 3);
}
else else
{ {
block[0] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 0); block[0] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 0);
@ -880,13 +909,6 @@ inline void UnalignedPutWordNonTemplate(ByteOrder order, byte *block, word32 val
block[2] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 2); block[2] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 2);
block[3] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 3); block[3] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 3);
} }
if (xorBlock)
{
block[0] ^= xorBlock[0];
block[1] ^= xorBlock[1];
block[2] ^= xorBlock[2];
block[3] ^= xorBlock[3];
} }
} }
@ -894,6 +916,19 @@ inline void UnalignedPutWordNonTemplate(ByteOrder order, byte *block, word32 val
inline void UnalignedPutWordNonTemplate(ByteOrder order, byte *block, word64 value, const byte *xorBlock) inline void UnalignedPutWordNonTemplate(ByteOrder order, byte *block, word64 value, const byte *xorBlock)
{ {
if (order == BIG_ENDIAN_ORDER) if (order == BIG_ENDIAN_ORDER)
{
if (xorBlock)
{
block[0] = xorBlock[0] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 7);
block[1] = xorBlock[1] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 6);
block[2] = xorBlock[2] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 5);
block[3] = xorBlock[3] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 4);
block[4] = xorBlock[4] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 3);
block[5] = xorBlock[5] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 2);
block[6] = xorBlock[6] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 1);
block[7] = xorBlock[7] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 0);
}
else
{ {
block[0] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 7); block[0] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 7);
block[1] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 6); block[1] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 6);
@ -904,6 +939,20 @@ inline void UnalignedPutWordNonTemplate(ByteOrder order, byte *block, word64 val
block[6] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 1); block[6] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 1);
block[7] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 0); block[7] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 0);
} }
}
else
{
if (xorBlock)
{
block[0] = xorBlock[0] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 0);
block[1] = xorBlock[1] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 1);
block[2] = xorBlock[2] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 2);
block[3] = xorBlock[3] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 3);
block[4] = xorBlock[4] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 4);
block[5] = xorBlock[5] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 5);
block[6] = xorBlock[6] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 6);
block[7] = xorBlock[7] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 7);
}
else else
{ {
block[0] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 0); block[0] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 0);
@ -915,17 +964,6 @@ inline void UnalignedPutWordNonTemplate(ByteOrder order, byte *block, word64 val
block[6] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 6); block[6] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 6);
block[7] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 7); block[7] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 7);
} }
if (xorBlock)
{
block[0] ^= xorBlock[0];
block[1] ^= xorBlock[1];
block[2] ^= xorBlock[2];
block[3] ^= xorBlock[3];
block[4] ^= xorBlock[4];
block[5] ^= xorBlock[5];
block[6] ^= xorBlock[6];
block[7] ^= xorBlock[7];
} }
} }
#endif #endif