mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-07-01 16:58:30 +00:00
Make numerous improvements
- Python static hello world now 1.8mb - Python static fully loaded now 10mb - Python HTTPS client now uses MbedTLS - Python REPL now completes import stmts - Increase stack size for Python for now - Begin synthesizing posixpath and ntpath - Restore Python \N{UNICODE NAME} support - Restore Python NFKD symbol normalization - Add optimized code path for Intel SHA-NI - Get more Python unit tests passing faster - Get Python help() pagination working on NT - Python hashlib now supports MbedTLS PBKDF2 - Make memcpy/memmove/memcmp/bcmp/etc. faster - Add Mersenne Twister and Vigna to LIBC_RAND - Provide privileged __printf() for error code - Fix zipos opendir() so that it reports ENOTDIR - Add basic chmod() implementation for Windows NT - Add Cosmo's best functions to Python cosmo module - Pin function trace indent depth to that of caller - Show memory diagram on invalid access in MODE=dbg - Differentiate stack overflow on crash in MODE=dbg - Add stb_truetype and tools for analyzing font files - Upgrade to UNICODE 13 and reduce its binary footprint - COMPILE.COM now logs resource usage of build commands - Start implementing basic poll() support on bare metal - Set getauxval(AT_EXECFN) to GetModuleFileName() on NT - Add descriptions to strerror() in non-TINY build modes - Add COUNTBRANCH() macro to help with micro-optimizations - Make error / backtrace / asan / memory code more unbreakable - Add fast perfect C implementation of μ-Law and a-Law audio codecs - Make strtol() functions consistent with other libc implementations - Improve Linenoise implementation (see also github.com/jart/bestline) - COMPILE.COM now suppresses stdout/stderr of successful build commands
This commit is contained in:
parent
fa7b4f5bd1
commit
39bf41f4eb
806 changed files with 77494 additions and 63859 deletions
131
third_party/mbedtls/sha1.c
vendored
131
third_party/mbedtls/sha1.c
vendored
|
@ -16,7 +16,9 @@
|
|||
│ limitations under the License. │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/bits/bits.h"
|
||||
#include "libc/intrin/asan.internal.h"
|
||||
#include "libc/macros.internal.h"
|
||||
#include "libc/nexgen32e/sha.h"
|
||||
#include "libc/nexgen32e/x86feature.h"
|
||||
#include "libc/str/str.h"
|
||||
#include "third_party/mbedtls/common.h"
|
||||
|
@ -31,33 +33,15 @@ Mbed TLS (Apache 2.0)\\n\
|
|||
Copyright ARM Limited\\n\
|
||||
Copyright Mbed TLS Contributors\"");
|
||||
asm(".include \"libc/disclaimer.inc\"");
|
||||
|
||||
/* clang-format off */
|
||||
/*
|
||||
* FIPS-180-1 compliant SHA-1 implementation
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
/*
|
||||
* The SHA-1 standard was published by NIST in 1993.
|
||||
*
|
||||
* http://www.itl.nist.gov/fipspubs/fip180-1.htm
|
||||
*/
|
||||
|
||||
void sha1_transform_avx2(mbedtls_sha1_context *, const uint8_t *, int);
|
||||
/**
|
||||
* @fileoverview FIPS-180-1 compliant SHA-1 implementation
|
||||
*
|
||||
* The SHA-1 standard was published by NIST in 1993.
|
||||
*
|
||||
* @see http://www.itl.nist.gov/fipspubs/fip180-1.htm
|
||||
*/
|
||||
|
||||
#define SHA1_VALIDATE_RET(cond) \
|
||||
MBEDTLS_INTERNAL_VALIDATE_RET( cond, MBEDTLS_ERR_SHA1_BAD_INPUT_DATA )
|
||||
|
@ -131,9 +115,30 @@ int mbedtls_internal_sha1_process( mbedtls_sha1_context *ctx,
|
|||
SHA1_VALIDATE_RET( ctx != NULL );
|
||||
SHA1_VALIDATE_RET( (const unsigned char *)data != NULL );
|
||||
|
||||
if (!IsTiny() && LIKELY(X86_HAVE(AVX2) && X86_HAVE(BMI) && X86_HAVE(BMI2))) {
|
||||
sha1_transform_avx2(ctx, data, 1);
|
||||
return 0;
|
||||
if( !IsTiny() || X86_NEED( SHA ) )
|
||||
{
|
||||
if( X86_HAVE( SHA ) )
|
||||
{
|
||||
if( IsAsan() )
|
||||
{
|
||||
__asan_verify( data, 64 );
|
||||
__asan_verify( ctx, sizeof(*ctx) );
|
||||
}
|
||||
sha1_transform_ni( ctx->state, data, 1 );
|
||||
return( 0 );
|
||||
}
|
||||
if( X86_HAVE( BMI ) &&
|
||||
X86_HAVE( BMI2 ) &&
|
||||
X86_HAVE( AVX2 ) )
|
||||
{
|
||||
if( IsAsan() )
|
||||
{
|
||||
__asan_verify( data, 64 );
|
||||
__asan_verify( ctx, sizeof(*ctx) );
|
||||
}
|
||||
sha1_transform_avx2( ctx->state, data, 1 );
|
||||
return( 0 );
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef MBEDTLS_SHA1_SMALLER
|
||||
|
@ -399,28 +404,45 @@ int mbedtls_sha1_update_ret( mbedtls_sha1_context *ctx,
|
|||
if( left && ilen >= fill )
|
||||
{
|
||||
memcpy( (void *) (ctx->buffer + left), input, fill );
|
||||
|
||||
if( ( ret = mbedtls_internal_sha1_process( ctx, ctx->buffer ) ) != 0 )
|
||||
return( ret );
|
||||
|
||||
input += fill;
|
||||
ilen -= fill;
|
||||
left = 0;
|
||||
}
|
||||
|
||||
if (!IsTiny() && ilen >= 64 && X86_HAVE(AVX2) && X86_HAVE(BMI) && X86_HAVE(BMI2)) {
|
||||
sha1_transform_avx2(ctx, input, ilen / 64);
|
||||
input += ROUNDDOWN(ilen, 64);
|
||||
ilen -= ROUNDDOWN(ilen, 64);
|
||||
}
|
||||
|
||||
while( ilen >= 64 )
|
||||
if( ilen >= 64 )
|
||||
{
|
||||
if( ( ret = mbedtls_internal_sha1_process( ctx, input ) ) != 0 )
|
||||
return( ret );
|
||||
|
||||
input += 64;
|
||||
ilen -= 64;
|
||||
if( ( !IsTiny() || X86_NEED(SHA) ) && X86_HAVE( SHA ) )
|
||||
{
|
||||
if( IsAsan() )
|
||||
__asan_verify( input, ilen );
|
||||
sha1_transform_ni( ctx->state, input, ilen / 64 );
|
||||
input += ROUNDDOWN( ilen, 64 );
|
||||
ilen -= ROUNDDOWN( ilen, 64 );
|
||||
}
|
||||
else if( !IsTiny() &&
|
||||
X86_HAVE( BMI ) &&
|
||||
X86_HAVE( BMI2 ) &&
|
||||
X86_HAVE( AVX2 ) )
|
||||
{
|
||||
if( IsAsan() )
|
||||
__asan_verify( input, ilen );
|
||||
sha1_transform_avx2( ctx->state, input, ilen / 64 );
|
||||
input += ROUNDDOWN( ilen, 64 );
|
||||
ilen -= ROUNDDOWN( ilen, 64 );
|
||||
}
|
||||
else
|
||||
{
|
||||
do
|
||||
{
|
||||
if(( ret = mbedtls_internal_sha1_process( ctx, input ) ))
|
||||
return( ret );
|
||||
input += 64;
|
||||
ilen -= 64;
|
||||
}
|
||||
while( ilen >= 64 );
|
||||
}
|
||||
}
|
||||
|
||||
if( ilen > 0 )
|
||||
|
@ -471,10 +493,8 @@ int mbedtls_sha1_finish_ret( mbedtls_sha1_context *ctx,
|
|||
{
|
||||
/* We'll need an extra block */
|
||||
mbedtls_platform_zeroize( ctx->buffer + used, 64 - used );
|
||||
|
||||
if( ( ret = mbedtls_internal_sha1_process( ctx, ctx->buffer ) ) != 0 )
|
||||
return( ret );
|
||||
|
||||
mbedtls_platform_zeroize( ctx->buffer, 56 );
|
||||
}
|
||||
|
||||
|
@ -532,24 +552,17 @@ int mbedtls_sha1_ret( const void *input,
|
|||
{
|
||||
int ret = MBEDTLS_ERR_THIS_CORRUPTION;
|
||||
mbedtls_sha1_context ctx;
|
||||
|
||||
SHA1_VALIDATE_RET( ilen == 0 || input != NULL );
|
||||
SHA1_VALIDATE_RET( (unsigned char *)output != NULL );
|
||||
|
||||
mbedtls_sha1_init( &ctx );
|
||||
|
||||
if( ( ret = mbedtls_sha1_starts_ret( &ctx ) ) != 0 )
|
||||
goto exit;
|
||||
|
||||
if( ( ret = mbedtls_sha1_update_ret( &ctx, input, ilen ) ) != 0 )
|
||||
goto exit;
|
||||
|
||||
if( ( ret = mbedtls_sha1_finish_ret( &ctx, output ) ) != 0 )
|
||||
goto exit;
|
||||
|
||||
exit:
|
||||
mbedtls_sha1_free( &ctx );
|
||||
|
||||
return( ret );
|
||||
}
|
||||
|
||||
|
@ -608,9 +621,7 @@ int mbedtls_sha1_self_test( int verbose )
|
|||
unsigned char buf[1024];
|
||||
unsigned char sha1sum[20];
|
||||
mbedtls_sha1_context ctx;
|
||||
|
||||
mbedtls_sha1_init( &ctx );
|
||||
|
||||
/*
|
||||
* SHA-1
|
||||
*/
|
||||
|
@ -618,14 +629,11 @@ int mbedtls_sha1_self_test( int verbose )
|
|||
{
|
||||
if( verbose != 0 )
|
||||
mbedtls_printf( " SHA-1 test #%d: ", i + 1 );
|
||||
|
||||
if( ( ret = mbedtls_sha1_starts_ret( &ctx ) ) != 0 )
|
||||
goto fail;
|
||||
|
||||
if( i == 2 )
|
||||
{
|
||||
memset( buf, 'a', buflen = 1000 );
|
||||
|
||||
for( j = 0; j < 1000; j++ )
|
||||
{
|
||||
ret = mbedtls_sha1_update_ret( &ctx, buf, buflen );
|
||||
|
@ -640,34 +648,25 @@ int mbedtls_sha1_self_test( int verbose )
|
|||
if( ret != 0 )
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if( ( ret = mbedtls_sha1_finish_ret( &ctx, sha1sum ) ) != 0 )
|
||||
goto fail;
|
||||
|
||||
if( memcmp( sha1sum, sha1_test_sum[i], 20 ) != 0 )
|
||||
if( timingsafe_bcmp( sha1sum, sha1_test_sum[i], 20 ) != 0 )
|
||||
{
|
||||
ret = 1;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if( verbose != 0 )
|
||||
mbedtls_printf( "passed\n" );
|
||||
}
|
||||
|
||||
if( verbose != 0 )
|
||||
mbedtls_printf( "\n" );
|
||||
|
||||
goto exit;
|
||||
|
||||
fail:
|
||||
if( verbose != 0 )
|
||||
mbedtls_printf( "failed\n" );
|
||||
|
||||
exit:
|
||||
mbedtls_sha1_free( &ctx );
|
||||
|
||||
return( ret );
|
||||
}
|
||||
|
||||
|
||||
#endif /* MBEDTLS_SELF_TEST */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue