mirror of
https://github.com/yuzu-emu/mbedtls.git
synced 2024-12-26 00:25:35 +00:00
Merge pull request #4835 from gilles-peskine-arm/base64-no-table-2.2x
Backport 2.2x: range-based constant-flow base64
This commit is contained in:
commit
8e8251a6fa
4
ChangeLog.d/base64-ranges.txt
Normal file
4
ChangeLog.d/base64-ranges.txt
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
Changes
|
||||||
|
* Improve the performance of base64 constant-flow code. The result is still
|
||||||
|
slower than the original non-constant-flow implementation, but much faster
|
||||||
|
than the previous constant-flow implementation. Fixes #4814.
|
3
ChangeLog.d/no-strerror.txt
Normal file
3
ChangeLog.d/no-strerror.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
Bugfix
|
||||||
|
* Fix the build of sample programs when neither MBEDTLS_ERROR_C nor
|
||||||
|
MBEDTLS_ERROR_STRERROR_DUMMY is enabled.
|
263
library/base64.c
263
library/base64.c
|
@ -22,6 +22,7 @@
|
||||||
#if defined(MBEDTLS_BASE64_C)
|
#if defined(MBEDTLS_BASE64_C)
|
||||||
|
|
||||||
#include "mbedtls/base64.h"
|
#include "mbedtls/base64.h"
|
||||||
|
#include "base64_invasive.h"
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
|
@ -35,127 +36,41 @@
|
||||||
#endif /* MBEDTLS_PLATFORM_C */
|
#endif /* MBEDTLS_PLATFORM_C */
|
||||||
#endif /* MBEDTLS_SELF_TEST */
|
#endif /* MBEDTLS_SELF_TEST */
|
||||||
|
|
||||||
static const unsigned char base64_enc_map[64] =
|
|
||||||
{
|
|
||||||
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
|
|
||||||
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
|
|
||||||
'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd',
|
|
||||||
'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
|
|
||||||
'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
|
|
||||||
'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7',
|
|
||||||
'8', '9', '+', '/'
|
|
||||||
};
|
|
||||||
|
|
||||||
static const unsigned char base64_dec_map[128] =
|
|
||||||
{
|
|
||||||
127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
|
|
||||||
127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
|
|
||||||
127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
|
|
||||||
127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
|
|
||||||
127, 127, 127, 62, 127, 127, 127, 63, 52, 53,
|
|
||||||
54, 55, 56, 57, 58, 59, 60, 61, 127, 127,
|
|
||||||
127, 64, 127, 127, 127, 0, 1, 2, 3, 4,
|
|
||||||
5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
|
|
||||||
15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
|
|
||||||
25, 127, 127, 127, 127, 127, 127, 26, 27, 28,
|
|
||||||
29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
|
|
||||||
39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
|
|
||||||
49, 50, 51, 127, 127, 127, 127, 127
|
|
||||||
};
|
|
||||||
|
|
||||||
#define BASE64_SIZE_T_MAX ( (size_t) -1 ) /* SIZE_T_MAX is not standard */
|
#define BASE64_SIZE_T_MAX ( (size_t) -1 ) /* SIZE_T_MAX is not standard */
|
||||||
|
|
||||||
/*
|
/* Return 0xff if low <= c <= high, 0 otherwise.
|
||||||
* Constant flow conditional assignment to unsigned char
|
*
|
||||||
|
* Constant flow with respect to c.
|
||||||
*/
|
*/
|
||||||
static void mbedtls_base64_cond_assign_uchar( unsigned char * dest, const unsigned char * const src,
|
MBEDTLS_STATIC_TESTABLE
|
||||||
unsigned char condition )
|
unsigned char mbedtls_base64_mask_of_range( unsigned char low,
|
||||||
|
unsigned char high,
|
||||||
|
unsigned char c )
|
||||||
{
|
{
|
||||||
/* MSVC has a warning about unary minus on unsigned integer types,
|
/* low_mask is: 0 if low <= c, 0x...ff if low > c */
|
||||||
* but this is well-defined and precisely what we want to do here. */
|
unsigned low_mask = ( (unsigned) c - low ) >> 8;
|
||||||
#if defined(_MSC_VER)
|
/* high_mask is: 0 if c <= high, 0x...ff if c > high */
|
||||||
#pragma warning( push )
|
unsigned high_mask = ( (unsigned) high - c ) >> 8;
|
||||||
#pragma warning( disable : 4146 )
|
return( ~( low_mask | high_mask ) & 0xff );
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Generate bitmask from condition, mask will either be 0xFF or 0 */
|
|
||||||
unsigned char mask = ( condition | -condition );
|
|
||||||
mask >>= 7;
|
|
||||||
mask = -mask;
|
|
||||||
|
|
||||||
#if defined(_MSC_VER)
|
|
||||||
#pragma warning( pop )
|
|
||||||
#endif
|
|
||||||
|
|
||||||
*dest = ( ( *src ) & mask ) | ( ( *dest ) & ~mask );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* Given a value in the range 0..63, return the corresponding Base64 digit.
|
||||||
* Constant flow conditional assignment to uint_32
|
* The implementation assumes that letters are consecutive (e.g. ASCII
|
||||||
|
* but not EBCDIC).
|
||||||
*/
|
*/
|
||||||
static void mbedtls_base64_cond_assign_uint32( uint32_t * dest, const uint32_t src,
|
MBEDTLS_STATIC_TESTABLE
|
||||||
uint32_t condition )
|
unsigned char mbedtls_base64_enc_char( unsigned char val )
|
||||||
{
|
{
|
||||||
/* MSVC has a warning about unary minus on unsigned integer types,
|
unsigned char digit = 0;
|
||||||
* but this is well-defined and precisely what we want to do here. */
|
/* For each range of values, if val is in that range, mask digit with
|
||||||
#if defined(_MSC_VER)
|
* the corresponding value. Since val can only be in a single range,
|
||||||
#pragma warning( push )
|
* only at most one masking will change digit. */
|
||||||
#pragma warning( disable : 4146 )
|
digit |= mbedtls_base64_mask_of_range( 0, 25, val ) & ( 'A' + val );
|
||||||
#endif
|
digit |= mbedtls_base64_mask_of_range( 26, 51, val ) & ( 'a' + val - 26 );
|
||||||
|
digit |= mbedtls_base64_mask_of_range( 52, 61, val ) & ( '0' + val - 52 );
|
||||||
/* Generate bitmask from condition, mask will either be 0xFFFFFFFF or 0 */
|
digit |= mbedtls_base64_mask_of_range( 62, 62, val ) & '+';
|
||||||
uint32_t mask = ( condition | -condition );
|
digit |= mbedtls_base64_mask_of_range( 63, 63, val ) & '/';
|
||||||
mask >>= 31;
|
return( digit );
|
||||||
mask = -mask;
|
|
||||||
|
|
||||||
#if defined(_MSC_VER)
|
|
||||||
#pragma warning( pop )
|
|
||||||
#endif
|
|
||||||
|
|
||||||
*dest = ( src & mask ) | ( ( *dest ) & ~mask );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Constant flow check for equality
|
|
||||||
*/
|
|
||||||
static unsigned char mbedtls_base64_eq( size_t in_a, size_t in_b )
|
|
||||||
{
|
|
||||||
size_t difference = in_a ^ in_b;
|
|
||||||
|
|
||||||
/* MSVC has a warning about unary minus on unsigned integer types,
|
|
||||||
* but this is well-defined and precisely what we want to do here. */
|
|
||||||
#if defined(_MSC_VER)
|
|
||||||
#pragma warning( push )
|
|
||||||
#pragma warning( disable : 4146 )
|
|
||||||
#endif
|
|
||||||
|
|
||||||
difference |= -difference;
|
|
||||||
|
|
||||||
#if defined(_MSC_VER)
|
|
||||||
#pragma warning( pop )
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* cope with the varying size of size_t per platform */
|
|
||||||
difference >>= ( sizeof( difference ) * 8 - 1 );
|
|
||||||
|
|
||||||
return (unsigned char) ( 1 ^ difference );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Constant flow lookup into table.
|
|
||||||
*/
|
|
||||||
static unsigned char mbedtls_base64_table_lookup( const unsigned char * const table,
|
|
||||||
const size_t table_size, const size_t table_index )
|
|
||||||
{
|
|
||||||
size_t i;
|
|
||||||
unsigned char result = 0;
|
|
||||||
|
|
||||||
for( i = 0; i < table_size; ++i )
|
|
||||||
{
|
|
||||||
mbedtls_base64_cond_assign_uchar( &result, &table[i], mbedtls_base64_eq( i, table_index ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -198,17 +113,12 @@ int mbedtls_base64_encode( unsigned char *dst, size_t dlen, size_t *olen,
|
||||||
C2 = *src++;
|
C2 = *src++;
|
||||||
C3 = *src++;
|
C3 = *src++;
|
||||||
|
|
||||||
*p++ = mbedtls_base64_table_lookup( base64_enc_map, sizeof( base64_enc_map ),
|
*p++ = mbedtls_base64_enc_char( ( C1 >> 2 ) & 0x3F );
|
||||||
( ( C1 >> 2 ) & 0x3F ) );
|
*p++ = mbedtls_base64_enc_char( ( ( ( C1 & 3 ) << 4 ) + ( C2 >> 4 ) )
|
||||||
|
& 0x3F );
|
||||||
*p++ = mbedtls_base64_table_lookup( base64_enc_map, sizeof( base64_enc_map ),
|
*p++ = mbedtls_base64_enc_char( ( ( ( C2 & 15 ) << 2 ) + ( C3 >> 6 ) )
|
||||||
( ( ( ( C1 & 3 ) << 4 ) + ( C2 >> 4 ) ) & 0x3F ) );
|
& 0x3F );
|
||||||
|
*p++ = mbedtls_base64_enc_char( C3 & 0x3F );
|
||||||
*p++ = mbedtls_base64_table_lookup( base64_enc_map, sizeof( base64_enc_map ),
|
|
||||||
( ( ( ( C2 & 15 ) << 2 ) + ( C3 >> 6 ) ) & 0x3F ) );
|
|
||||||
|
|
||||||
*p++ = mbedtls_base64_table_lookup( base64_enc_map, sizeof( base64_enc_map ),
|
|
||||||
( C3 & 0x3F ) );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if( i < slen )
|
if( i < slen )
|
||||||
|
@ -216,15 +126,12 @@ int mbedtls_base64_encode( unsigned char *dst, size_t dlen, size_t *olen,
|
||||||
C1 = *src++;
|
C1 = *src++;
|
||||||
C2 = ( ( i + 1 ) < slen ) ? *src++ : 0;
|
C2 = ( ( i + 1 ) < slen ) ? *src++ : 0;
|
||||||
|
|
||||||
*p++ = mbedtls_base64_table_lookup( base64_enc_map, sizeof( base64_enc_map ),
|
*p++ = mbedtls_base64_enc_char( ( C1 >> 2 ) & 0x3F );
|
||||||
( ( C1 >> 2 ) & 0x3F ) );
|
*p++ = mbedtls_base64_enc_char( ( ( ( C1 & 3 ) << 4 ) + ( C2 >> 4 ) )
|
||||||
|
& 0x3F );
|
||||||
*p++ = mbedtls_base64_table_lookup( base64_enc_map, sizeof( base64_enc_map ),
|
|
||||||
( ( ( ( C1 & 3 ) << 4 ) + ( C2 >> 4 ) ) & 0x3F ) );
|
|
||||||
|
|
||||||
if( ( i + 1 ) < slen )
|
if( ( i + 1 ) < slen )
|
||||||
*p++ = mbedtls_base64_table_lookup( base64_enc_map, sizeof( base64_enc_map ),
|
*p++ = mbedtls_base64_enc_char( ( ( C2 & 15 ) << 2 ) & 0x3F );
|
||||||
( ( ( C2 & 15 ) << 2 ) & 0x3F ) );
|
|
||||||
else *p++ = '=';
|
else *p++ = '=';
|
||||||
|
|
||||||
*p++ = '=';
|
*p++ = '=';
|
||||||
|
@ -236,26 +143,58 @@ int mbedtls_base64_encode( unsigned char *dst, size_t dlen, size_t *olen,
|
||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Given a Base64 digit, return its value.
|
||||||
|
* If c is not a Base64 digit ('A'..'Z', 'a'..'z', '0'..'9', '+' or '/'),
|
||||||
|
* return -1.
|
||||||
|
*
|
||||||
|
* The implementation assumes that letters are consecutive (e.g. ASCII
|
||||||
|
* but not EBCDIC).
|
||||||
|
*
|
||||||
|
* The implementation is constant-flow (no branch or memory access depending
|
||||||
|
* on the value of c) unless the compiler inlines and optimizes a specific
|
||||||
|
* access.
|
||||||
|
*/
|
||||||
|
MBEDTLS_STATIC_TESTABLE
|
||||||
|
signed char mbedtls_base64_dec_value( unsigned char c )
|
||||||
|
{
|
||||||
|
unsigned char val = 0;
|
||||||
|
/* For each range of digits, if c is in that range, mask val with
|
||||||
|
* the corresponding value. Since c can only be in a single range,
|
||||||
|
* only at most one masking will change val. Set val to one plus
|
||||||
|
* the desired value so that it stays 0 if c is in none of the ranges. */
|
||||||
|
val |= mbedtls_base64_mask_of_range( 'A', 'Z', c ) & ( c - 'A' + 0 + 1 );
|
||||||
|
val |= mbedtls_base64_mask_of_range( 'a', 'z', c ) & ( c - 'a' + 26 + 1 );
|
||||||
|
val |= mbedtls_base64_mask_of_range( '0', '9', c ) & ( c - '0' + 52 + 1 );
|
||||||
|
val |= mbedtls_base64_mask_of_range( '+', '+', c ) & ( c - '+' + 62 + 1 );
|
||||||
|
val |= mbedtls_base64_mask_of_range( '/', '/', c ) & ( c - '/' + 63 + 1 );
|
||||||
|
/* At this point, val is 0 if c is an invalid digit and v+1 if c is
|
||||||
|
* a digit with the value v. */
|
||||||
|
return( val - 1 );
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Decode a base64-formatted buffer
|
* Decode a base64-formatted buffer
|
||||||
*/
|
*/
|
||||||
int mbedtls_base64_decode( unsigned char *dst, size_t dlen, size_t *olen,
|
int mbedtls_base64_decode( unsigned char *dst, size_t dlen, size_t *olen,
|
||||||
const unsigned char *src, size_t slen )
|
const unsigned char *src, size_t slen )
|
||||||
{
|
{
|
||||||
size_t i, n;
|
size_t i; /* index in source */
|
||||||
uint32_t j, x;
|
size_t n; /* number of digits or trailing = in source */
|
||||||
|
uint32_t x; /* value accumulator */
|
||||||
|
unsigned accumulated_digits = 0;
|
||||||
|
unsigned equals = 0;
|
||||||
|
int spaces_present = 0;
|
||||||
unsigned char *p;
|
unsigned char *p;
|
||||||
unsigned char dec_map_lookup;
|
|
||||||
|
|
||||||
/* First pass: check for validity and get output length */
|
/* First pass: check for validity and get output length */
|
||||||
for( i = n = j = 0; i < slen; i++ )
|
for( i = n = 0; i < slen; i++ )
|
||||||
{
|
{
|
||||||
/* Skip spaces before checking for EOL */
|
/* Skip spaces before checking for EOL */
|
||||||
x = 0;
|
spaces_present = 0;
|
||||||
while( i < slen && src[i] == ' ' )
|
while( i < slen && src[i] == ' ' )
|
||||||
{
|
{
|
||||||
++i;
|
++i;
|
||||||
++x;
|
spaces_present = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Spaces at end of buffer are OK */
|
/* Spaces at end of buffer are OK */
|
||||||
|
@ -270,20 +209,24 @@ int mbedtls_base64_decode( unsigned char *dst, size_t dlen, size_t *olen,
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* Space inside a line is an error */
|
/* Space inside a line is an error */
|
||||||
if( x != 0 )
|
if( spaces_present )
|
||||||
return( MBEDTLS_ERR_BASE64_INVALID_CHARACTER );
|
return( MBEDTLS_ERR_BASE64_INVALID_CHARACTER );
|
||||||
|
|
||||||
if( src[i] == '=' && ++j > 2 )
|
if( src[i] > 127 )
|
||||||
return( MBEDTLS_ERR_BASE64_INVALID_CHARACTER );
|
|
||||||
|
|
||||||
dec_map_lookup = mbedtls_base64_table_lookup( base64_dec_map, sizeof( base64_dec_map ), src[i] );
|
|
||||||
|
|
||||||
if( src[i] > 127 || dec_map_lookup == 127 )
|
|
||||||
return( MBEDTLS_ERR_BASE64_INVALID_CHARACTER );
|
|
||||||
|
|
||||||
if( dec_map_lookup < 64 && j != 0 )
|
|
||||||
return( MBEDTLS_ERR_BASE64_INVALID_CHARACTER );
|
return( MBEDTLS_ERR_BASE64_INVALID_CHARACTER );
|
||||||
|
|
||||||
|
if( src[i] == '=' )
|
||||||
|
{
|
||||||
|
if( ++equals > 2 )
|
||||||
|
return( MBEDTLS_ERR_BASE64_INVALID_CHARACTER );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if( equals != 0 )
|
||||||
|
return( MBEDTLS_ERR_BASE64_INVALID_CHARACTER );
|
||||||
|
if( mbedtls_base64_dec_value( src[i] ) < 0 )
|
||||||
|
return( MBEDTLS_ERR_BASE64_INVALID_CHARACTER );
|
||||||
|
}
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -298,7 +241,7 @@ int mbedtls_base64_decode( unsigned char *dst, size_t dlen, size_t *olen,
|
||||||
* n = ( ( n * 6 ) + 7 ) >> 3;
|
* n = ( ( n * 6 ) + 7 ) >> 3;
|
||||||
*/
|
*/
|
||||||
n = ( 6 * ( n >> 3 ) ) + ( ( 6 * ( n & 0x7 ) + 7 ) >> 3 );
|
n = ( 6 * ( n >> 3 ) ) + ( ( 6 * ( n & 0x7 ) + 7 ) >> 3 );
|
||||||
n -= j;
|
n -= equals;
|
||||||
|
|
||||||
if( dst == NULL || dlen < n )
|
if( dst == NULL || dlen < n )
|
||||||
{
|
{
|
||||||
|
@ -306,22 +249,24 @@ int mbedtls_base64_decode( unsigned char *dst, size_t dlen, size_t *olen,
|
||||||
return( MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL );
|
return( MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL );
|
||||||
}
|
}
|
||||||
|
|
||||||
for( j = 3, n = x = 0, p = dst; i > 0; i--, src++ )
|
equals = 0;
|
||||||
{
|
for( x = 0, p = dst; i > 0; i--, src++ )
|
||||||
|
{
|
||||||
if( *src == '\r' || *src == '\n' || *src == ' ' )
|
if( *src == '\r' || *src == '\n' || *src == ' ' )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
dec_map_lookup = mbedtls_base64_table_lookup( base64_dec_map, sizeof( base64_dec_map ), *src );
|
x = x << 6;
|
||||||
|
if( *src == '=' )
|
||||||
|
++equals;
|
||||||
|
else
|
||||||
|
x |= mbedtls_base64_dec_value( *src );
|
||||||
|
|
||||||
mbedtls_base64_cond_assign_uint32( &j, j - 1, mbedtls_base64_eq( dec_map_lookup, 64 ) );
|
if( ++accumulated_digits == 4 )
|
||||||
x = ( x << 6 ) | ( dec_map_lookup & 0x3F );
|
|
||||||
|
|
||||||
if( ++n == 4 )
|
|
||||||
{
|
{
|
||||||
n = 0;
|
accumulated_digits = 0;
|
||||||
if( j > 0 ) *p++ = MBEDTLS_BYTE_2( x );
|
*p++ = MBEDTLS_BYTE_2( x );
|
||||||
if( j > 1 ) *p++ = MBEDTLS_BYTE_1( x );
|
if( equals <= 1 ) *p++ = MBEDTLS_BYTE_1( x );
|
||||||
if( j > 2 ) *p++ = MBEDTLS_BYTE_0( x );
|
if( equals <= 0 ) *p++ = MBEDTLS_BYTE_0( x );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
55
library/base64_invasive.h
Normal file
55
library/base64_invasive.h
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
/**
|
||||||
|
* \file base_invasive.h
|
||||||
|
*
|
||||||
|
* \brief Base64 module: interfaces for invasive testing only.
|
||||||
|
*
|
||||||
|
* The interfaces in this file are intended for testing purposes only.
|
||||||
|
* They SHOULD NOT be made available in library integrations except when
|
||||||
|
* building the library for testing.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* Copyright The Mbed TLS Contributors
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
* not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
#ifndef MBEDTLS_BASE64_INVASIVE_H
|
||||||
|
#define MBEDTLS_BASE64_INVASIVE_H
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
|
#if defined(MBEDTLS_TEST_HOOKS)
|
||||||
|
/* Return 0xff if low <= c <= high, 0 otherwise.
|
||||||
|
*
|
||||||
|
* Constant flow with respect to c.
|
||||||
|
*/
|
||||||
|
unsigned char mbedtls_base64_mask_of_range( unsigned char low,
|
||||||
|
unsigned char high,
|
||||||
|
unsigned char c );
|
||||||
|
|
||||||
|
/* Given a value in the range 0..63, return the corresponding Base64 digit.
|
||||||
|
*
|
||||||
|
* Operates in constant time (no branches or memory access depending on val).
|
||||||
|
*/
|
||||||
|
unsigned char mbedtls_base64_enc_char( unsigned char val );
|
||||||
|
|
||||||
|
/* Given a Base64 digit, return its value.
|
||||||
|
* If c is not a Base64 digit ('A'..'Z', 'a'..'z', '0'..'9', '+' or '/'),
|
||||||
|
* return -1.
|
||||||
|
*
|
||||||
|
* Operates in constant time (no branches or memory access depending on c).
|
||||||
|
*/
|
||||||
|
signed char mbedtls_base64_dec_value( unsigned char c );
|
||||||
|
#endif /* MBEDTLS_TEST_HOOKS */
|
||||||
|
|
||||||
|
#endif /* MBEDTLS_SSL_INVASIVE_H */
|
1
programs/.gitignore
vendored
1
programs/.gitignore
vendored
|
@ -65,6 +65,7 @@ x509/cert_app
|
||||||
x509/cert_req
|
x509/cert_req
|
||||||
x509/cert_write
|
x509/cert_write
|
||||||
x509/crl_app
|
x509/crl_app
|
||||||
|
x509/load_roots
|
||||||
x509/req_app
|
x509/req_app
|
||||||
|
|
||||||
# generated files
|
# generated files
|
||||||
|
|
|
@ -106,6 +106,7 @@ APPS = \
|
||||||
x509/cert_req$(EXEXT) \
|
x509/cert_req$(EXEXT) \
|
||||||
x509/cert_write$(EXEXT) \
|
x509/cert_write$(EXEXT) \
|
||||||
x509/crl_app$(EXEXT) \
|
x509/crl_app$(EXEXT) \
|
||||||
|
x509/load_roots$(EXEXT) \
|
||||||
x509/req_app$(EXEXT) \
|
x509/req_app$(EXEXT) \
|
||||||
# End of APPS
|
# End of APPS
|
||||||
|
|
||||||
|
@ -357,6 +358,10 @@ x509/cert_req$(EXEXT): x509/cert_req.c $(DEP)
|
||||||
echo " CC x509/cert_req.c"
|
echo " CC x509/cert_req.c"
|
||||||
$(CC) $(LOCAL_CFLAGS) $(CFLAGS) x509/cert_req.c $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
|
$(CC) $(LOCAL_CFLAGS) $(CFLAGS) x509/cert_req.c $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
|
||||||
|
|
||||||
|
x509/load_roots$(EXEXT): x509/load_roots.c $(DEP)
|
||||||
|
echo " CC x509/load_roots.c"
|
||||||
|
$(CC) $(LOCAL_CFLAGS) $(CFLAGS) x509/load_roots.c $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
|
||||||
|
|
||||||
x509/req_app$(EXEXT): x509/req_app.c $(DEP)
|
x509/req_app$(EXEXT): x509/req_app.c $(DEP)
|
||||||
echo " CC x509/req_app.c"
|
echo " CC x509/req_app.c"
|
||||||
$(CC) $(LOCAL_CFLAGS) $(CFLAGS) x509/req_app.c $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
|
$(CC) $(LOCAL_CFLAGS) $(CFLAGS) x509/req_app.c $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
|
||||||
|
|
|
@ -197,7 +197,9 @@ int main( int argc, char *argv[] )
|
||||||
{
|
{
|
||||||
int ret = 1;
|
int ret = 1;
|
||||||
int exit_code = MBEDTLS_EXIT_FAILURE;
|
int exit_code = MBEDTLS_EXIT_FAILURE;
|
||||||
char buf[1024];
|
#if defined(MBEDTLS_ERROR_C)
|
||||||
|
char buf[200];
|
||||||
|
#endif
|
||||||
int i;
|
int i;
|
||||||
char *p, *q;
|
char *p, *q;
|
||||||
|
|
||||||
|
@ -208,7 +210,9 @@ int main( int argc, char *argv[] )
|
||||||
* Set to sane values
|
* Set to sane values
|
||||||
*/
|
*/
|
||||||
mbedtls_pk_init( &key );
|
mbedtls_pk_init( &key );
|
||||||
|
#if defined(MBEDTLS_ERROR_C)
|
||||||
memset( buf, 0, sizeof( buf ) );
|
memset( buf, 0, sizeof( buf ) );
|
||||||
|
#endif
|
||||||
|
|
||||||
mbedtls_mpi_init( &N ); mbedtls_mpi_init( &P ); mbedtls_mpi_init( &Q );
|
mbedtls_mpi_init( &N ); mbedtls_mpi_init( &P ); mbedtls_mpi_init( &Q );
|
||||||
mbedtls_mpi_init( &D ); mbedtls_mpi_init( &E ); mbedtls_mpi_init( &DP );
|
mbedtls_mpi_init( &D ); mbedtls_mpi_init( &E ); mbedtls_mpi_init( &DP );
|
||||||
|
@ -296,8 +300,7 @@ int main( int argc, char *argv[] )
|
||||||
|
|
||||||
if( ret != 0 )
|
if( ret != 0 )
|
||||||
{
|
{
|
||||||
mbedtls_strerror( ret, (char *) buf, sizeof(buf) );
|
mbedtls_printf( " failed\n ! mbedtls_pk_parse_keyfile returned -0x%04x", (unsigned int) -ret );
|
||||||
mbedtls_printf( " failed\n ! mbedtls_pk_parse_keyfile returned -0x%04x - %s\n\n", (unsigned int) -ret, buf );
|
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -357,8 +360,7 @@ int main( int argc, char *argv[] )
|
||||||
|
|
||||||
if( ret != 0 )
|
if( ret != 0 )
|
||||||
{
|
{
|
||||||
mbedtls_strerror( ret, (char *) buf, sizeof(buf) );
|
mbedtls_printf( " failed\n ! mbedtls_pk_parse_public_key returned -0x%04x", (unsigned int) -ret );
|
||||||
mbedtls_printf( " failed\n ! mbedtls_pk_parse_public_key returned -0x%04x - %s\n\n", (unsigned int) -ret, buf );
|
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@ set(executables
|
||||||
cert_req
|
cert_req
|
||||||
cert_write
|
cert_write
|
||||||
crl_app
|
crl_app
|
||||||
|
load_roots
|
||||||
req_app
|
req_app
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
217
programs/x509/load_roots.c
Normal file
217
programs/x509/load_roots.c
Normal file
|
@ -0,0 +1,217 @@
|
||||||
|
/*
|
||||||
|
* Root CA reading application
|
||||||
|
*
|
||||||
|
* Copyright The Mbed TLS Contributors
|
||||||
|
* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
|
||||||
|
*
|
||||||
|
* This file is provided under the Apache License 2.0, or the
|
||||||
|
* GNU General Public License v2.0 or later.
|
||||||
|
*
|
||||||
|
* **********
|
||||||
|
* Apache License 2.0:
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
* not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* **********
|
||||||
|
*
|
||||||
|
* **********
|
||||||
|
* GNU General Public License v2.0 or later:
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* **********
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined(MBEDTLS_CONFIG_FILE)
|
||||||
|
#include "mbedtls/config.h"
|
||||||
|
#else
|
||||||
|
#include MBEDTLS_CONFIG_FILE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(MBEDTLS_PLATFORM_C)
|
||||||
|
#include "mbedtls/platform.h"
|
||||||
|
#else
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#define mbedtls_time time
|
||||||
|
#define mbedtls_time_t time_t
|
||||||
|
#define mbedtls_fprintf fprintf
|
||||||
|
#define mbedtls_printf printf
|
||||||
|
#define mbedtls_exit exit
|
||||||
|
#define MBEDTLS_EXIT_SUCCESS EXIT_SUCCESS
|
||||||
|
#define MBEDTLS_EXIT_FAILURE EXIT_FAILURE
|
||||||
|
#endif /* MBEDTLS_PLATFORM_C */
|
||||||
|
|
||||||
|
#if !defined(MBEDTLS_X509_CRT_PARSE_C) || !defined(MBEDTLS_FS_IO) || \
|
||||||
|
!defined(MBEDTLS_TIMING_C)
|
||||||
|
int main( void )
|
||||||
|
{
|
||||||
|
mbedtls_printf("MBEDTLS_X509_CRT_PARSE_C and/or MBEDTLS_FS_IO and/or "
|
||||||
|
"MBEDTLS_TIMING_C not defined.\n");
|
||||||
|
mbedtls_exit( 0 );
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
|
||||||
|
#include "mbedtls/error.h"
|
||||||
|
#include "mbedtls/timing.h"
|
||||||
|
#include "mbedtls/x509_crt.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#define DFL_ITERATIONS 1
|
||||||
|
#define DFL_PRIME_CACHE 1
|
||||||
|
|
||||||
|
#define USAGE \
|
||||||
|
"\n usage: load_roots param=<>... [--] FILE...\n" \
|
||||||
|
"\n acceptable parameters:\n" \
|
||||||
|
" iterations=%%d Iteration count (not including cache priming); default: 1\n" \
|
||||||
|
" prime=%%d Prime the disk read cache? Default: 1 (yes)\n" \
|
||||||
|
"\n"
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* global options
|
||||||
|
*/
|
||||||
|
struct options
|
||||||
|
{
|
||||||
|
const char **filenames; /* NULL-terminated list of file names */
|
||||||
|
unsigned iterations; /* Number of iterations to time */
|
||||||
|
int prime_cache; /* Prime the disk read cache? */
|
||||||
|
} opt;
|
||||||
|
|
||||||
|
|
||||||
|
int read_certificates( const char *const *filenames )
|
||||||
|
{
|
||||||
|
mbedtls_x509_crt cas;
|
||||||
|
int ret = 0;
|
||||||
|
const char *const *cur;
|
||||||
|
|
||||||
|
mbedtls_x509_crt_init( &cas );
|
||||||
|
|
||||||
|
for( cur = filenames; *cur != NULL; cur++ )
|
||||||
|
{
|
||||||
|
ret = mbedtls_x509_crt_parse_file( &cas, *cur );
|
||||||
|
if( ret != 0 )
|
||||||
|
{
|
||||||
|
#if defined(MBEDTLS_ERROR_C) || defined(MBEDTLS_ERROR_STRERROR_DUMMY)
|
||||||
|
char error_message[200];
|
||||||
|
mbedtls_strerror( ret, error_message, sizeof( error_message ) );
|
||||||
|
printf( "\n%s: -0x%04x (%s)\n",
|
||||||
|
*cur, (unsigned) -ret, error_message );
|
||||||
|
#else
|
||||||
|
printf( "\n%s: -0x%04x\n",
|
||||||
|
*cur, (unsigned) -ret );
|
||||||
|
#endif
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exit:
|
||||||
|
mbedtls_x509_crt_free( &cas );
|
||||||
|
return( ret == 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
int main( int argc, char *argv[] )
|
||||||
|
{
|
||||||
|
int exit_code = MBEDTLS_EXIT_FAILURE;
|
||||||
|
unsigned i, j;
|
||||||
|
struct mbedtls_timing_hr_time timer;
|
||||||
|
unsigned long ms;
|
||||||
|
|
||||||
|
if( argc <= 1 )
|
||||||
|
{
|
||||||
|
mbedtls_printf( USAGE );
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
opt.filenames = NULL;
|
||||||
|
opt.iterations = DFL_ITERATIONS;
|
||||||
|
opt.prime_cache = DFL_PRIME_CACHE;
|
||||||
|
|
||||||
|
for( i = 1; i < (unsigned) argc; i++ )
|
||||||
|
{
|
||||||
|
char *p = argv[i];
|
||||||
|
char *q = NULL;
|
||||||
|
|
||||||
|
if( strcmp( p, "--" ) == 0 )
|
||||||
|
break;
|
||||||
|
if( ( q = strchr( p, '=' ) ) == NULL )
|
||||||
|
break;
|
||||||
|
*q++ = '\0';
|
||||||
|
|
||||||
|
for( j = 0; p + j < q; j++ )
|
||||||
|
{
|
||||||
|
if( argv[i][j] >= 'A' && argv[i][j] <= 'Z' )
|
||||||
|
argv[i][j] |= 0x20;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( strcmp( p, "iterations" ) == 0 )
|
||||||
|
{
|
||||||
|
opt.iterations = atoi( q );
|
||||||
|
}
|
||||||
|
else if( strcmp( p, "prime" ) == 0 )
|
||||||
|
{
|
||||||
|
opt.iterations = atoi( q ) != 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mbedtls_printf( "Unknown option: %s\n", p );
|
||||||
|
mbedtls_printf( USAGE );
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
opt.filenames = (const char**) argv + i;
|
||||||
|
if( *opt.filenames == 0 )
|
||||||
|
{
|
||||||
|
mbedtls_printf( "Missing list of certificate files to parse\n" );
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
mbedtls_printf( "Parsing %u certificates", argc - i );
|
||||||
|
if( opt.prime_cache )
|
||||||
|
{
|
||||||
|
if( ! read_certificates( opt.filenames ) )
|
||||||
|
goto exit;
|
||||||
|
mbedtls_printf( " " );
|
||||||
|
}
|
||||||
|
|
||||||
|
(void) mbedtls_timing_get_timer( &timer, 1 );
|
||||||
|
for( i = 1; i <= opt.iterations; i++ )
|
||||||
|
{
|
||||||
|
if( ! read_certificates( opt.filenames ) )
|
||||||
|
goto exit;
|
||||||
|
mbedtls_printf( "." );
|
||||||
|
}
|
||||||
|
ms = mbedtls_timing_get_timer( &timer, 0 );
|
||||||
|
mbedtls_printf( "\n%u iterations -> %lu ms\n", opt.iterations, ms );
|
||||||
|
exit_code = MBEDTLS_EXIT_SUCCESS;
|
||||||
|
|
||||||
|
exit:
|
||||||
|
mbedtls_exit( exit_code );
|
||||||
|
}
|
||||||
|
#endif /* necessary configuration */
|
|
@ -1,3 +1,33 @@
|
||||||
|
mask_of_range empty (1..0)
|
||||||
|
mask_of_range:1:0
|
||||||
|
|
||||||
|
mask_of_range empty (255..0)
|
||||||
|
mask_of_range:255:0
|
||||||
|
|
||||||
|
mask_of_range empty (42..7)
|
||||||
|
mask_of_range:42:7
|
||||||
|
|
||||||
|
mask_of_range 0..0
|
||||||
|
mask_of_range:0:0
|
||||||
|
|
||||||
|
mask_of_range 42..42
|
||||||
|
mask_of_range:42:42
|
||||||
|
|
||||||
|
mask_of_range 255..255
|
||||||
|
mask_of_range:255:255
|
||||||
|
|
||||||
|
mask_of_range 0..255
|
||||||
|
mask_of_range:0:255
|
||||||
|
|
||||||
|
mask_of_range 'A'..'Z'
|
||||||
|
mask_of_range:65:90
|
||||||
|
|
||||||
|
enc_char (all digits)
|
||||||
|
enc_chars:
|
||||||
|
|
||||||
|
dec_value (all characters)
|
||||||
|
dec_chars:
|
||||||
|
|
||||||
Test case mbedtls_base64_encode #1 buffer just right
|
Test case mbedtls_base64_encode #1 buffer just right
|
||||||
mbedtls_base64_encode:"":"":0:0
|
mbedtls_base64_encode:"":"":0:0
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,13 @@
|
||||||
/* BEGIN_HEADER */
|
/* BEGIN_HEADER */
|
||||||
#include "mbedtls/base64.h"
|
#include "mbedtls/base64.h"
|
||||||
|
#include "base64_invasive.h"
|
||||||
#include <test/constant_flow.h>
|
#include <test/constant_flow.h>
|
||||||
|
|
||||||
|
#if defined(MBEDTLS_TEST_HOOKS)
|
||||||
|
static const char base64_digits[] =
|
||||||
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||||||
|
#endif /* MBEDTLS_TEST_HOOKS */
|
||||||
|
|
||||||
/* END_HEADER */
|
/* END_HEADER */
|
||||||
|
|
||||||
/* BEGIN_DEPENDENCIES
|
/* BEGIN_DEPENDENCIES
|
||||||
|
@ -8,6 +15,65 @@
|
||||||
* END_DEPENDENCIES
|
* END_DEPENDENCIES
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* BEGIN_CASE depends_on:MBEDTLS_TEST_HOOKS */
|
||||||
|
void mask_of_range( int low_arg, int high_arg )
|
||||||
|
{
|
||||||
|
unsigned char low = low_arg, high = high_arg;
|
||||||
|
unsigned c;
|
||||||
|
for( c = 0; c <= 0xff; c++ )
|
||||||
|
{
|
||||||
|
mbedtls_test_set_step( c );
|
||||||
|
TEST_CF_SECRET( &c, sizeof( c ) );
|
||||||
|
unsigned char m = mbedtls_base64_mask_of_range( low, high, c );
|
||||||
|
TEST_CF_PUBLIC( &c, sizeof( c ) );
|
||||||
|
TEST_CF_PUBLIC( &m, sizeof( m ) );
|
||||||
|
if( low <= c && c <= high )
|
||||||
|
TEST_EQUAL( m, 0xff );
|
||||||
|
else
|
||||||
|
TEST_EQUAL( m, 0 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* END_CASE */
|
||||||
|
|
||||||
|
/* BEGIN_CASE depends_on:MBEDTLS_TEST_HOOKS */
|
||||||
|
void enc_chars( )
|
||||||
|
{
|
||||||
|
for( unsigned value = 0; value < 64; value++ )
|
||||||
|
{
|
||||||
|
mbedtls_test_set_step( value );
|
||||||
|
TEST_CF_SECRET( &value, sizeof( value ) );
|
||||||
|
unsigned char digit = mbedtls_base64_enc_char( value );
|
||||||
|
TEST_CF_PUBLIC( &value, sizeof( value ) );
|
||||||
|
TEST_CF_PUBLIC( &digit, sizeof( digit ) );
|
||||||
|
TEST_EQUAL( digit, base64_digits[value] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* END_CASE */
|
||||||
|
|
||||||
|
/* BEGIN_CASE depends_on:MBEDTLS_TEST_HOOKS */
|
||||||
|
void dec_chars( )
|
||||||
|
{
|
||||||
|
char *p;
|
||||||
|
signed char expected;
|
||||||
|
|
||||||
|
for( unsigned c = 0; c <= 0xff; c++ )
|
||||||
|
{
|
||||||
|
mbedtls_test_set_step( c );
|
||||||
|
/* base64_digits is 0-terminated. sizeof()-1 excludes the trailing 0. */
|
||||||
|
p = memchr( base64_digits, c, sizeof( base64_digits ) - 1 );
|
||||||
|
if( p == NULL )
|
||||||
|
expected = -1;
|
||||||
|
else
|
||||||
|
expected = p - base64_digits;
|
||||||
|
TEST_CF_SECRET( &c, sizeof( c ) );
|
||||||
|
signed char actual = mbedtls_base64_dec_value( c );
|
||||||
|
TEST_CF_PUBLIC( &c, sizeof( c ) );
|
||||||
|
TEST_CF_PUBLIC( &actual, sizeof( actual ) );
|
||||||
|
TEST_EQUAL( actual, expected );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* END_CASE */
|
||||||
|
|
||||||
/* BEGIN_CASE */
|
/* BEGIN_CASE */
|
||||||
void mbedtls_base64_encode( char * src_string, char * dst_string,
|
void mbedtls_base64_encode( char * src_string, char * dst_string,
|
||||||
int dst_buf_size, int result )
|
int dst_buf_size, int result )
|
||||||
|
|
167
visualc/VS2010/load_roots.vcxproj
Normal file
167
visualc/VS2010/load_roots.vcxproj
Normal file
|
@ -0,0 +1,167 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\..\programs\x509\load_roots.c" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="mbedTLS.vcxproj">
|
||||||
|
<Project>{46cf2d25-6a36-4189-b59c-e4815388e554}</Project>
|
||||||
|
<LinkLibraryDependencies>true</LinkLibraryDependencies>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{65EB85E6-C928-689F-8335-126F78025220}</ProjectGuid>
|
||||||
|
<Keyword>Win32Proj</Keyword>
|
||||||
|
<RootNamespace>load_roots</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<LinkIncremental>true</LinkIncremental>
|
||||||
|
<IntDir>$(Configuration)\$(TargetName)\</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<LinkIncremental>true</LinkIncremental>
|
||||||
|
<IntDir>$(Configuration)\$(TargetName)\</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<LinkIncremental>false</LinkIncremental>
|
||||||
|
<IntDir>$(Configuration)\$(TargetName)\</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<LinkIncremental>false</LinkIncremental>
|
||||||
|
<IntDir>$(Configuration)\$(TargetName)\</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>
|
||||||
|
../../include;../../3rdparty/everest/include/;../../3rdparty/everest/include/everest;../../3rdparty/everest/include/everest/vs2010;../../3rdparty/everest/include/everest/kremlib;../../tests/include </AdditionalIncludeDirectories>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
<AdditionalLibraryDirectories>Debug</AdditionalLibraryDirectories>
|
||||||
|
</Link>
|
||||||
|
<ProjectReference>
|
||||||
|
<LinkLibraryDependencies>false</LinkLibraryDependencies>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>
|
||||||
|
../../include;../../3rdparty/everest/include/;../../3rdparty/everest/include/everest;../../3rdparty/everest/include/everest/vs2010;../../3rdparty/everest/include/everest/kremlib;../../tests/include </AdditionalIncludeDirectories>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
<AdditionalLibraryDirectories>Debug</AdditionalLibraryDirectories>
|
||||||
|
</Link>
|
||||||
|
<ProjectReference>
|
||||||
|
<LinkLibraryDependencies>false</LinkLibraryDependencies>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>
|
||||||
|
../../include;../../3rdparty/everest/include/;../../3rdparty/everest/include/everest;../../3rdparty/everest/include/everest/vs2010;../../3rdparty/everest/include/everest/kremlib;../../tests/include </AdditionalIncludeDirectories>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<AdditionalLibraryDirectories>Release</AdditionalLibraryDirectories>
|
||||||
|
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>
|
||||||
|
../../include;../../3rdparty/everest/include/;../../3rdparty/everest/include/everest;../../3rdparty/everest/include/everest/vs2010;../../3rdparty/everest/include/everest/kremlib;../../tests/include </AdditionalIncludeDirectories>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<AdditionalLibraryDirectories>Release</AdditionalLibraryDirectories>
|
||||||
|
<AdditionalDependencies>%(AdditionalDependencies);</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
|
@ -253,6 +253,11 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "crl_app", "crl_app.vcxproj"
|
||||||
{46CF2D25-6A36-4189-B59C-E4815388E554} = {46CF2D25-6A36-4189-B59C-E4815388E554}
|
{46CF2D25-6A36-4189-B59C-E4815388E554} = {46CF2D25-6A36-4189-B59C-E4815388E554}
|
||||||
EndProjectSection
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "load_roots", "load_roots.vcxproj", "{65EB85E6-C928-689F-8335-126F78025220}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{46CF2D25-6A36-4189-B59C-E4815388E554} = {46CF2D25-6A36-4189-B59C-E4815388E554}
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "req_app", "req_app.vcxproj", "{486B1375-5CFA-C2D2-DD89-C9F497BADCB3}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "req_app", "req_app.vcxproj", "{486B1375-5CFA-C2D2-DD89-C9F497BADCB3}"
|
||||||
ProjectSection(ProjectDependencies) = postProject
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
{46CF2D25-6A36-4189-B59C-E4815388E554} = {46CF2D25-6A36-4189-B59C-E4815388E554}
|
{46CF2D25-6A36-4189-B59C-E4815388E554} = {46CF2D25-6A36-4189-B59C-E4815388E554}
|
||||||
|
@ -674,6 +679,14 @@ Global
|
||||||
{DB904B85-AD31-B7FB-114F-88760CC485F2}.Release|Win32.Build.0 = Release|Win32
|
{DB904B85-AD31-B7FB-114F-88760CC485F2}.Release|Win32.Build.0 = Release|Win32
|
||||||
{DB904B85-AD31-B7FB-114F-88760CC485F2}.Release|x64.ActiveCfg = Release|x64
|
{DB904B85-AD31-B7FB-114F-88760CC485F2}.Release|x64.ActiveCfg = Release|x64
|
||||||
{DB904B85-AD31-B7FB-114F-88760CC485F2}.Release|x64.Build.0 = Release|x64
|
{DB904B85-AD31-B7FB-114F-88760CC485F2}.Release|x64.Build.0 = Release|x64
|
||||||
|
{65EB85E6-C928-689F-8335-126F78025220}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{65EB85E6-C928-689F-8335-126F78025220}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{65EB85E6-C928-689F-8335-126F78025220}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{65EB85E6-C928-689F-8335-126F78025220}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{65EB85E6-C928-689F-8335-126F78025220}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{65EB85E6-C928-689F-8335-126F78025220}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{65EB85E6-C928-689F-8335-126F78025220}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{65EB85E6-C928-689F-8335-126F78025220}.Release|x64.Build.0 = Release|x64
|
||||||
{486B1375-5CFA-C2D2-DD89-C9F497BADCB3}.Debug|Win32.ActiveCfg = Debug|Win32
|
{486B1375-5CFA-C2D2-DD89-C9F497BADCB3}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
{486B1375-5CFA-C2D2-DD89-C9F497BADCB3}.Debug|Win32.Build.0 = Debug|Win32
|
{486B1375-5CFA-C2D2-DD89-C9F497BADCB3}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{486B1375-5CFA-C2D2-DD89-C9F497BADCB3}.Debug|x64.ActiveCfg = Debug|x64
|
{486B1375-5CFA-C2D2-DD89-C9F497BADCB3}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
|
|
@ -253,6 +253,7 @@
|
||||||
<ClInclude Include="..\..\tests\include\test\drivers\signature.h" />
|
<ClInclude Include="..\..\tests\include\test\drivers\signature.h" />
|
||||||
<ClInclude Include="..\..\tests\include\test\drivers\size.h" />
|
<ClInclude Include="..\..\tests\include\test\drivers\size.h" />
|
||||||
<ClInclude Include="..\..\tests\include\test\drivers\test_driver.h" />
|
<ClInclude Include="..\..\tests\include\test\drivers\test_driver.h" />
|
||||||
|
<ClInclude Include="..\..\library\base64_invasive.h" />
|
||||||
<ClInclude Include="..\..\library\check_crypto_config.h" />
|
<ClInclude Include="..\..\library\check_crypto_config.h" />
|
||||||
<ClInclude Include="..\..\library\common.h" />
|
<ClInclude Include="..\..\library\common.h" />
|
||||||
<ClInclude Include="..\..\library\ecp_invasive.h" />
|
<ClInclude Include="..\..\library\ecp_invasive.h" />
|
||||||
|
|
Loading…
Reference in a new issue