@ -41,6 +41,7 @@
# include <openssl/nid.h>
# include <openssl/nid.h>
# include <openssl/rand.h>
# include <openssl/rand.h>
# include <openssl/rsa.h>
# include <openssl/rsa.h>
# include <openssl/siphash.h>
# include <openssl/trust_token.h>
# include <openssl/trust_token.h>
# if defined(OPENSSL_WINDOWS)
# if defined(OPENSSL_WINDOWS)
@ -561,20 +562,20 @@ static bool SpeedAESBlock(const std::string &name, unsigned bits,
static bool SpeedHashChunk ( const EVP_MD * md , std : : string name ,
static bool SpeedHashChunk ( const EVP_MD * md , std : : string name ,
size_t chunk_len ) {
size_t chunk_len ) {
bssl : : ScopedEVP_MD_CTX ctx ;
bssl : : ScopedEVP_MD_CTX ctx ;
uint8_t scratch [ 16384 ] ;
uint8_t input [ 16384 ] = { 0 } ;
if ( chunk_len > sizeof ( scratch ) ) {
if ( chunk_len > sizeof ( input ) ) {
return false ;
return false ;
}
}
name + = ChunkLenSuffix ( chunk_len ) ;
name + = ChunkLenSuffix ( chunk_len ) ;
TimeResults results ;
TimeResults results ;
if ( ! TimeFunction ( & results , [ & ctx , md , chunk_len , & scratch ] ( ) - > bool {
if ( ! TimeFunction ( & results , [ & ctx , md , chunk_len , & input ] ( ) - > bool {
uint8_t digest [ EVP_MAX_MD_SIZE ] ;
uint8_t digest [ EVP_MAX_MD_SIZE ] ;
unsigned int md_len ;
unsigned int md_len ;
return EVP_DigestInit_ex ( ctx . get ( ) , md , NULL /* ENGINE */ ) & &
return EVP_DigestInit_ex ( ctx . get ( ) , md , NULL /* ENGINE */ ) & &
EVP_DigestUpdate ( ctx . get ( ) , scratch , chunk_len ) & &
EVP_DigestUpdate ( ctx . get ( ) , input , chunk_len ) & &
EVP_DigestFinal_ex ( ctx . get ( ) , digest , & md_len ) ;
EVP_DigestFinal_ex ( ctx . get ( ) , digest , & md_len ) ;
} ) ) {
} ) ) {
fprintf ( stderr , " EVP_DigestInit_ex failed. \n " ) ;
fprintf ( stderr , " EVP_DigestInit_ex failed. \n " ) ;
@ -1035,6 +1036,29 @@ static bool SpeedBase64(const std::string &selected) {
return true ;
return true ;
}
}
static bool SpeedSipHash ( const std : : string & selected ) {
if ( ! selected . empty ( ) & & selected . find ( " siphash " ) = = std : : string : : npos ) {
return true ;
}
uint64_t key [ 2 ] = { 0 } ;
for ( size_t len : g_chunk_lengths ) {
std : : vector < uint8_t > input ( len ) ;
TimeResults results ;
if ( ! TimeFunction ( & results , [ & ] ( ) - > bool {
SIPHASH_24 ( key , input . data ( ) , input . size ( ) ) ;
return true ;
} ) ) {
fprintf ( stderr , " SIPHASH_24 failed. \n " ) ;
ERR_print_errors_fp ( stderr ) ;
return false ;
}
results . PrintWithBytes ( " SipHash-2-4 " + ChunkLenSuffix ( len ) , len ) ;
}
return true ;
}
static TRUST_TOKEN_PRETOKEN * trust_token_pretoken_dup (
static TRUST_TOKEN_PRETOKEN * trust_token_pretoken_dup (
TRUST_TOKEN_PRETOKEN * in ) {
TRUST_TOKEN_PRETOKEN * in ) {
TRUST_TOKEN_PRETOKEN * out =
TRUST_TOKEN_PRETOKEN * out =
@ -1434,7 +1458,8 @@ bool Speed(const std::vector<std::string> &args) {
TRUST_TOKEN_experiment_v2_pmb ( ) , 1 , selected ) | |
TRUST_TOKEN_experiment_v2_pmb ( ) , 1 , selected ) | |
! SpeedTrustToken ( " TrustToken-Exp2PMB-Batch10 " ,
! SpeedTrustToken ( " TrustToken-Exp2PMB-Batch10 " ,
TRUST_TOKEN_experiment_v2_pmb ( ) , 10 , selected ) | |
TRUST_TOKEN_experiment_v2_pmb ( ) , 10 , selected ) | |
! SpeedBase64 ( selected ) ) {
! SpeedBase64 ( selected ) | |
! SpeedSipHash ( selected ) ) {
return false ;
return false ;
}
}
# if defined(BORINGSSL_FIPS)
# if defined(BORINGSSL_FIPS)