mirror of
				https://github.com/cuberite/polarssl.git
				synced 2025-11-04 04:32:24 -05:00 
			
		
		
		
	Add UINT64 GET and PUT macros
Copy over the GET/PUT_UINT64_LE/BE macros from aes.c and sha512.c Add the MBEDTLS_ prefix to all 4 macros. Modify the GET_UINT64 macros to no longer take a target variable as a parameter, so when the macro function is called it must be assigned to a variable in the same statement. Signed-off-by: Joe Subbiani <joe.subbiani@arm.com>
This commit is contained in:
		
							parent
							
								
									2194dc477a
								
							
						
					
					
						commit
						99edd6c810
					
				@ -1074,35 +1074,6 @@ int mbedtls_aes_crypt_cbc( mbedtls_aes_context *ctx,
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_CIPHER_MODE_XTS)
 | 
			
		||||
 | 
			
		||||
/* Endianess with 64 bits values */
 | 
			
		||||
#ifndef GET_UINT64_LE
 | 
			
		||||
#define GET_UINT64_LE(n,b,i)                            \
 | 
			
		||||
{                                                       \
 | 
			
		||||
    (n) = ( (uint64_t) (b)[(i) + 7] << 56 )             \
 | 
			
		||||
        | ( (uint64_t) (b)[(i) + 6] << 48 )             \
 | 
			
		||||
        | ( (uint64_t) (b)[(i) + 5] << 40 )             \
 | 
			
		||||
        | ( (uint64_t) (b)[(i) + 4] << 32 )             \
 | 
			
		||||
        | ( (uint64_t) (b)[(i) + 3] << 24 )             \
 | 
			
		||||
        | ( (uint64_t) (b)[(i) + 2] << 16 )             \
 | 
			
		||||
        | ( (uint64_t) (b)[(i) + 1] <<  8 )             \
 | 
			
		||||
        | ( (uint64_t) (b)[(i)    ]       );            \
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef PUT_UINT64_LE
 | 
			
		||||
#define PUT_UINT64_LE(n,b,i)                            \
 | 
			
		||||
{                                                       \
 | 
			
		||||
    (b)[(i) + 7] = (unsigned char) ( (n) >> 56 );       \
 | 
			
		||||
    (b)[(i) + 6] = (unsigned char) ( (n) >> 48 );       \
 | 
			
		||||
    (b)[(i) + 5] = (unsigned char) ( (n) >> 40 );       \
 | 
			
		||||
    (b)[(i) + 4] = (unsigned char) ( (n) >> 32 );       \
 | 
			
		||||
    (b)[(i) + 3] = (unsigned char) ( (n) >> 24 );       \
 | 
			
		||||
    (b)[(i) + 2] = (unsigned char) ( (n) >> 16 );       \
 | 
			
		||||
    (b)[(i) + 1] = (unsigned char) ( (n) >>  8 );       \
 | 
			
		||||
    (b)[(i)    ] = (unsigned char) ( (n)       );       \
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
typedef unsigned char mbedtls_be128[16];
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
@ -1118,14 +1089,14 @@ static void mbedtls_gf128mul_x_ble( unsigned char r[16],
 | 
			
		||||
{
 | 
			
		||||
    uint64_t a, b, ra, rb;
 | 
			
		||||
 | 
			
		||||
    GET_UINT64_LE( a, x, 0 );
 | 
			
		||||
    GET_UINT64_LE( b, x, 8 );
 | 
			
		||||
    a = MBEDTLS_GET_UINT64_LE( x, 0 );
 | 
			
		||||
    b = MBEDTLS_GET_UINT64_LE( x, 8 );
 | 
			
		||||
 | 
			
		||||
    ra = ( a << 1 )  ^ 0x0087 >> ( 8 - ( ( b >> 63 ) << 3 ) );
 | 
			
		||||
    rb = ( a >> 63 ) | ( b << 1 );
 | 
			
		||||
 | 
			
		||||
    PUT_UINT64_LE( ra, r, 0 );
 | 
			
		||||
    PUT_UINT64_LE( rb, r, 8 );
 | 
			
		||||
    MBEDTLS_PUT_UINT64_LE( ra, r, 0 );
 | 
			
		||||
    MBEDTLS_PUT_UINT64_LE( rb, r, 8 );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 | 
			
		||||
@ -193,5 +193,96 @@ extern void (*mbedtls_test_hook_test_fail)( const char * test, int line, const c
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Get the unsigned 64 bits integer corresponding to eight bytes in
 | 
			
		||||
 * big-endian order (MSB first).
 | 
			
		||||
 *
 | 
			
		||||
 * \param   data    Base address of the memory to get the eight bytes from.
 | 
			
		||||
 * \param   offset  Offset from \p base of the first and most significant
 | 
			
		||||
 *                  byte of the eight bytes to build the 64 bits unsigned
 | 
			
		||||
 *                  integer from.
 | 
			
		||||
 */
 | 
			
		||||
#ifndef MBEDTLS_GET_UINT64_BE
 | 
			
		||||
#define MBEDTLS_GET_UINT64_BE( data, offset )                 \
 | 
			
		||||
    (                                                         \
 | 
			
		||||
          ( (uint64_t) ( data )[( offset )    ] << 56 )       \
 | 
			
		||||
        | ( (uint64_t) ( data )[( offset ) + 1] << 48 )       \
 | 
			
		||||
        | ( (uint64_t) ( data )[( offset ) + 2] << 40 )       \
 | 
			
		||||
        | ( (uint64_t) ( data )[( offset ) + 3] << 32 )       \
 | 
			
		||||
        | ( (uint64_t) ( data )[( offset ) + 4] << 24 )       \
 | 
			
		||||
        | ( (uint64_t) ( data )[( offset ) + 5] << 16 )       \
 | 
			
		||||
        | ( (uint64_t) ( data )[( offset ) + 6] <<  8 )       \
 | 
			
		||||
        | ( (uint64_t) ( data )[( offset ) + 7]       )       \
 | 
			
		||||
    )
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Put in memory a 64 bits unsigned integer in big-endian order.
 | 
			
		||||
 *
 | 
			
		||||
 * \param   n       64 bits unsigned integer to put in memory.
 | 
			
		||||
 * \param   data    Base address of the memory where to put the 64
 | 
			
		||||
 *                  bits unsigned integer in.
 | 
			
		||||
 * \param   offset  Offset from \p base where to put the most significant
 | 
			
		||||
 *                  byte of the 64 bits unsigned integer \p n.
 | 
			
		||||
 */
 | 
			
		||||
#ifndef MBEDTLS_PUT_UINT64_BE
 | 
			
		||||
#define MBEDTLS_PUT_UINT64_BE( n, data, offset )                    \
 | 
			
		||||
{                                                                   \
 | 
			
		||||
    ( data )[( offset )    ] = (unsigned char) ( (n) >> 56 );       \
 | 
			
		||||
    ( data )[( offset ) + 1] = (unsigned char) ( (n) >> 48 );       \
 | 
			
		||||
    ( data )[( offset ) + 2] = (unsigned char) ( (n) >> 40 );       \
 | 
			
		||||
    ( data )[( offset ) + 3] = (unsigned char) ( (n) >> 32 );       \
 | 
			
		||||
    ( data )[( offset ) + 4] = (unsigned char) ( (n) >> 24 );       \
 | 
			
		||||
    ( data )[( offset ) + 5] = (unsigned char) ( (n) >> 16 );       \
 | 
			
		||||
    ( data )[( offset ) + 6] = (unsigned char) ( (n) >>  8 );       \
 | 
			
		||||
    ( data )[( offset ) + 7] = (unsigned char) ( (n)       );       \
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Get the unsigned 64 bits integer corresponding to eight bytes in
 | 
			
		||||
 * little-endian order (LSB first).
 | 
			
		||||
 *
 | 
			
		||||
 * \param   data    Base address of the memory to get the eight bytes from.
 | 
			
		||||
 * \param   offset  Offset from \p base of the first and least significant
 | 
			
		||||
 *                  byte of the eight bytes to build the 64 bits unsigned
 | 
			
		||||
 *                  integer from.
 | 
			
		||||
 */
 | 
			
		||||
#ifndef MBEDTLS_GET_UINT64_LE
 | 
			
		||||
#define MBEDTLS_GET_UINT64_LE( data, offset )               \
 | 
			
		||||
    (                                                       \
 | 
			
		||||
          ( (uint64_t) ( data )[( offset ) + 7] << 56 )     \
 | 
			
		||||
        | ( (uint64_t) ( data )[( offset ) + 6] << 48 )     \
 | 
			
		||||
        | ( (uint64_t) ( data )[( offset ) + 5] << 40 )     \
 | 
			
		||||
        | ( (uint64_t) ( data )[( offset ) + 4] << 32 )     \
 | 
			
		||||
        | ( (uint64_t) ( data )[( offset ) + 3] << 24 )     \
 | 
			
		||||
        | ( (uint64_t) ( data )[( offset ) + 2] << 16 )     \
 | 
			
		||||
        | ( (uint64_t) ( data )[( offset ) + 1] <<  8 )     \
 | 
			
		||||
        | ( (uint64_t) ( data )[( offset )    ]       )     \
 | 
			
		||||
    )
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Put in memory a 64 bits unsigned integer in little-endian order.
 | 
			
		||||
 *
 | 
			
		||||
 * \param   n       64 bits unsigned integer to put in memory.
 | 
			
		||||
 * \param   data    Base address of the memory where to put the 64
 | 
			
		||||
 *                  bits unsigned integer in.
 | 
			
		||||
 * \param   offset  Offset from \p base where to put the least significant
 | 
			
		||||
 *                  byte of the 64 bits unsigned integer \p n.
 | 
			
		||||
 */
 | 
			
		||||
#ifndef MBEDTLS_PUT_UINT64_LE
 | 
			
		||||
#define MBEDTLS_PUT_UINT64_LE( n, data, offset )                    \
 | 
			
		||||
{                                                                   \
 | 
			
		||||
    ( data )[( offset ) + 7] = (unsigned char) ( (n) >> 56 );       \
 | 
			
		||||
    ( data )[( offset ) + 6] = (unsigned char) ( (n) >> 48 );       \
 | 
			
		||||
    ( data )[( offset ) + 5] = (unsigned char) ( (n) >> 40 );       \
 | 
			
		||||
    ( data )[( offset ) + 4] = (unsigned char) ( (n) >> 32 );       \
 | 
			
		||||
    ( data )[( offset ) + 3] = (unsigned char) ( (n) >> 24 );       \
 | 
			
		||||
    ( data )[( offset ) + 2] = (unsigned char) ( (n) >> 16 );       \
 | 
			
		||||
    ( data )[( offset ) + 1] = (unsigned char) ( (n) >>  8 );       \
 | 
			
		||||
    ( data )[( offset )    ] = (unsigned char) ( (n)       );       \
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* MBEDTLS_LIBRARY_COMMON_H */
 | 
			
		||||
 | 
			
		||||
@ -56,44 +56,13 @@
 | 
			
		||||
 | 
			
		||||
#if !defined(MBEDTLS_SHA512_ALT)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * 64-bit integer manipulation macros (big endian)
 | 
			
		||||
 */
 | 
			
		||||
#ifndef GET_UINT64_BE
 | 
			
		||||
#define GET_UINT64_BE(n,b,i)                            \
 | 
			
		||||
{                                                       \
 | 
			
		||||
    (n) = ( (uint64_t) (b)[(i)    ] << 56 )       \
 | 
			
		||||
        | ( (uint64_t) (b)[(i) + 1] << 48 )       \
 | 
			
		||||
        | ( (uint64_t) (b)[(i) + 2] << 40 )       \
 | 
			
		||||
        | ( (uint64_t) (b)[(i) + 3] << 32 )       \
 | 
			
		||||
        | ( (uint64_t) (b)[(i) + 4] << 24 )       \
 | 
			
		||||
        | ( (uint64_t) (b)[(i) + 5] << 16 )       \
 | 
			
		||||
        | ( (uint64_t) (b)[(i) + 6] <<  8 )       \
 | 
			
		||||
        | ( (uint64_t) (b)[(i) + 7]       );      \
 | 
			
		||||
}
 | 
			
		||||
#endif /* GET_UINT64_BE */
 | 
			
		||||
 | 
			
		||||
#ifndef PUT_UINT64_BE
 | 
			
		||||
#define PUT_UINT64_BE(n,b,i)                            \
 | 
			
		||||
{                                                       \
 | 
			
		||||
    (b)[(i)    ] = (unsigned char) ( (n) >> 56 );       \
 | 
			
		||||
    (b)[(i) + 1] = (unsigned char) ( (n) >> 48 );       \
 | 
			
		||||
    (b)[(i) + 2] = (unsigned char) ( (n) >> 40 );       \
 | 
			
		||||
    (b)[(i) + 3] = (unsigned char) ( (n) >> 32 );       \
 | 
			
		||||
    (b)[(i) + 4] = (unsigned char) ( (n) >> 24 );       \
 | 
			
		||||
    (b)[(i) + 5] = (unsigned char) ( (n) >> 16 );       \
 | 
			
		||||
    (b)[(i) + 6] = (unsigned char) ( (n) >>  8 );       \
 | 
			
		||||
    (b)[(i) + 7] = (unsigned char) ( (n)       );       \
 | 
			
		||||
}
 | 
			
		||||
#endif /* PUT_UINT64_BE */
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SHA512_SMALLER)
 | 
			
		||||
static void sha512_put_uint64_be( uint64_t n, unsigned char *b, uint8_t i )
 | 
			
		||||
{
 | 
			
		||||
    PUT_UINT64_BE(n, b, i);
 | 
			
		||||
    MBEDTLS_PUT_UINT64_BE(n, b, i);
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
#define sha512_put_uint64_be    PUT_UINT64_BE
 | 
			
		||||
#define sha512_put_uint64_be    MBEDTLS_PUT_UINT64_BE
 | 
			
		||||
#endif /* MBEDTLS_SHA512_SMALLER */
 | 
			
		||||
 | 
			
		||||
void mbedtls_sha512_init( mbedtls_sha512_context *ctx )
 | 
			
		||||
@ -261,7 +230,7 @@ int mbedtls_internal_sha512_process( mbedtls_sha512_context *ctx,
 | 
			
		||||
    {
 | 
			
		||||
        if( i < 16 )
 | 
			
		||||
        {
 | 
			
		||||
            GET_UINT64_BE( local.W[i], data, i << 3 );
 | 
			
		||||
            local.W[i] = MBEDTLS_GET_UINT64_BE( data, i << 3 );
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
@ -281,7 +250,7 @@ int mbedtls_internal_sha512_process( mbedtls_sha512_context *ctx,
 | 
			
		||||
#else /* MBEDTLS_SHA512_SMALLER */
 | 
			
		||||
    for( i = 0; i < 16; i++ )
 | 
			
		||||
    {
 | 
			
		||||
        GET_UINT64_BE( local.W[i], data, i << 3 );
 | 
			
		||||
        local.W[i] = MBEDTLS_GET_UINT64_BE( data, i << 3 );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    for( ; i < 80; i++ )
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user