mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-07-08 12:18:31 +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
|
@ -24,20 +24,62 @@ Copyright 2014 Google Inc.\"");
|
|||
asm(".include \"libc/disclaimer.inc\"");
|
||||
|
||||
/**
|
||||
* Lexicographically compares the first len bytes in b1 and b2.
|
||||
* Lexicographically compares the first 𝑛 bytes in 𝑝 and 𝑞.
|
||||
*
|
||||
* The following expression:
|
||||
*
|
||||
* timingsafe_memcmp(p, q, n)
|
||||
*
|
||||
* Is functionally equivalent to:
|
||||
*
|
||||
* MAX(-1, MIN(1, memcmp(p, q, n)))
|
||||
*
|
||||
* Running time is independent of the byte sequences compared, making
|
||||
* this safe to use for comparing secret values such as cryptographic
|
||||
* MACs. In contrast, memcmp() may short-circuit after finding the first
|
||||
* differing byte.
|
||||
*
|
||||
* timingsafe_memcmp n=0 661 picoseconds
|
||||
* timingsafe_memcmp n=1 1 ns/byte 590 mb/s
|
||||
* timingsafe_memcmp n=2 1 ns/byte 738 mb/s
|
||||
* timingsafe_memcmp n=3 1 ns/byte 805 mb/s
|
||||
* timingsafe_memcmp n=4 1 ns/byte 843 mb/s
|
||||
* timingsafe_memcmp n=5 1 ns/byte 922 mb/s
|
||||
* timingsafe_memcmp n=6 1 ns/byte 932 mb/s
|
||||
* timingsafe_memcmp n=7 1 ns/byte 939 mb/s
|
||||
* timingsafe_memcmp n=8 992 ps/byte 984 mb/s
|
||||
* timingsafe_memcmp n=9 992 ps/byte 984 mb/s
|
||||
* timingsafe_memcmp n=15 926 ps/byte 1,054 mb/s
|
||||
* timingsafe_memcmp n=16 950 ps/byte 1,026 mb/s
|
||||
* timingsafe_memcmp n=17 933 ps/byte 1,045 mb/s
|
||||
* timingsafe_memcmp n=31 896 ps/byte 1,089 mb/s
|
||||
* timingsafe_memcmp n=32 888 ps/byte 1,098 mb/s
|
||||
* timingsafe_memcmp n=33 972 ps/byte 1,004 mb/s
|
||||
* timingsafe_memcmp n=80 913 ps/byte 1,068 mb/s
|
||||
* timingsafe_memcmp n=128 891 ps/byte 1,095 mb/s
|
||||
* timingsafe_memcmp n=256 873 ps/byte 1,118 mb/s
|
||||
* timingsafe_memcmp n=16384 858 ps/byte 1,138 mb/s
|
||||
* timingsafe_memcmp n=32768 856 ps/byte 1,140 mb/s
|
||||
* timingsafe_memcmp n=131072 857 ps/byte 1,138 mb/s
|
||||
* bcmp ne n=256 3 ps/byte 246 gb/s
|
||||
* bcmp eq n=256 32 ps/byte 30,233 mb/s
|
||||
* memcmp ne n=256 3 ps/byte 246 gb/s
|
||||
* memcmp eq n=256 31 ps/byte 31,493 mb/s
|
||||
* timingsafe_bcmp ne n=256 27 ps/byte 35,992 mb/s
|
||||
* timingsafe_bcmp eq n=256 27 ps/byte 35,992 mb/s
|
||||
* timingsafe_memcmp ne n=256 877 ps/byte 1,113 mb/s
|
||||
* timingsafe_memcmp eq n=256 883 ps/byte 1,105 mb/s
|
||||
*
|
||||
* @note each byte is interpreted as unsigned char
|
||||
* @return -1, 0, or 1 based on comparison
|
||||
* @see timingsafe_bcmp() it's 100x faster
|
||||
* @asyncsignalsafe
|
||||
*/
|
||||
int timingsafe_memcmp(const void *b1, const void *b2, size_t len) {
|
||||
const unsigned char *p1 = b1, *p2 = b2;
|
||||
int timingsafe_memcmp(const void *p, const void *q, size_t n) {
|
||||
const unsigned char *p1 = p, *p2 = q;
|
||||
size_t i;
|
||||
int res = 0, done = 0;
|
||||
for (i = 0; i < len; i++) {
|
||||
for (i = 0; i < n; i++) {
|
||||
/* lt is -1 if p1[i] < p2[i]; else 0. */
|
||||
int lt = (p1[i] - p2[i]) >> CHAR_BIT;
|
||||
/* gt is -1 if p1[i] > p2[i]; else 0. */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue