mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-01-31 11:37:35 +00:00
cc1920749e
Your redbean can now interoperate with clients that require TLS crypto. This is accomplished using a protocol polyglot that lets us distinguish between HTTP and HTTPS regardless of the port number. Certificates will be generated automatically, if none are supplied by the user. Footprint increases by only a few hundred kb so redbean in MODY=tiny is now 1.0mb - Add lseek() polyfills for ZIP executable - Automatically polyfill /tmp/FOO paths on NT - Fix readdir() / ftw() / nftw() bugs on Windows - Introduce -B flag for slower SSL that's stronger - Remove mbedtls features Cosmopolitan doesn't need - Have base64 decoder support the uri-safe alternative - Remove Truncated HMAC because it's forbidden by the IETF - Add all the mbedtls test suites and make them go 3x faster - Support opendir() / readdir() / closedir() on ZIP executable - Use Everest for ECDHE-ECDSA because it's so good it's so good - Add tinier implementation of sha1 since it's not worth the rom - Add chi-square monte-carlo mean correlation tests for getrandom() - Source entropy on Windows from the proper interface everyone uses We're continuing to outperform NGINX and other servers on raw message throughput. Using SSL means that instead of 1,000,000 qps you can get around 300,000 qps. However redbean isn't as fast as NGINX yet at SSL handshakes, since redbean can do 2,627 per second and NGINX does 4.3k Right now, the SSL UX story works best if you give your redbean a key signing key since that can be easily generated by openssl using a one liner then redbean will do all the things that are impossibly hard to do like signing ecdsa and rsa certificates that'll work in chrome. We should integrate the let's encrypt acme protocol in the future. Live Demo: https://redbean.justine.lol/ Root Cert: https://redbean.justine.lol/redbean1.crt
120 lines
4.1 KiB
C
120 lines
4.1 KiB
C
#ifndef MBEDTLS_MEMORY_BUFFER_ALLOC_H
|
|
#define MBEDTLS_MEMORY_BUFFER_ALLOC_H
|
|
#include "third_party/mbedtls/config.h"
|
|
/* clang-format off */
|
|
|
|
/**
|
|
* \name SECTION: Module settings
|
|
*
|
|
* The configuration options you can set for this module are in this section.
|
|
* Either change them in config.h or define them on the compiler command line.
|
|
* \{
|
|
*/
|
|
|
|
#if !defined(MBEDTLS_MEMORY_ALIGN_MULTIPLE)
|
|
#define MBEDTLS_MEMORY_ALIGN_MULTIPLE 4 /**< Align on multiples of this value */
|
|
#endif
|
|
|
|
/* \} name SECTION: Module settings */
|
|
|
|
#define MBEDTLS_MEMORY_VERIFY_NONE 0
|
|
#define MBEDTLS_MEMORY_VERIFY_ALLOC (1 << 0)
|
|
#define MBEDTLS_MEMORY_VERIFY_FREE (1 << 1)
|
|
#define MBEDTLS_MEMORY_VERIFY_ALWAYS (MBEDTLS_MEMORY_VERIFY_ALLOC | MBEDTLS_MEMORY_VERIFY_FREE)
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* \brief Initialize use of stack-based memory allocator.
|
|
* The stack-based allocator does memory management inside the
|
|
* presented buffer and does not call calloc() and free().
|
|
* It sets the global mbedtls_calloc() and mbedtls_free() pointers
|
|
* to its own functions.
|
|
*
|
|
* \note This code is not optimized and provides a straight-forward
|
|
* implementation of a stack-based memory allocator.
|
|
*
|
|
* \param buf buffer to use as heap
|
|
* \param len size of the buffer
|
|
*/
|
|
void mbedtls_memory_buffer_alloc_init( unsigned char *buf, size_t len );
|
|
|
|
/**
|
|
* \brief Free the mutex for thread-safety and clear remaining memory
|
|
*/
|
|
void mbedtls_memory_buffer_alloc_free( void );
|
|
|
|
/**
|
|
* \brief Determine when the allocator should automatically verify the state
|
|
* of the entire chain of headers / meta-data.
|
|
* (Default: MBEDTLS_MEMORY_VERIFY_NONE)
|
|
*
|
|
* \param verify One of MBEDTLS_MEMORY_VERIFY_NONE, MBEDTLS_MEMORY_VERIFY_ALLOC,
|
|
* MBEDTLS_MEMORY_VERIFY_FREE or MBEDTLS_MEMORY_VERIFY_ALWAYS
|
|
*/
|
|
void mbedtls_memory_buffer_set_verify( int verify );
|
|
|
|
#if defined(MBEDTLS_MEMORY_DEBUG)
|
|
/**
|
|
* \brief Print out the status of the allocated memory (primarily for use
|
|
* after a program should have de-allocated all memory)
|
|
* Prints out a list of 'still allocated' blocks and their stack
|
|
* trace if MBEDTLS_MEMORY_BACKTRACE is defined.
|
|
*/
|
|
void mbedtls_memory_buffer_alloc_status( void );
|
|
|
|
/**
|
|
* \brief Get the peak heap usage so far
|
|
*
|
|
* \param max_used Peak number of bytes in use or committed. This
|
|
* includes bytes in allocated blocks too small to split
|
|
* into smaller blocks but larger than the requested size.
|
|
* \param max_blocks Peak number of blocks in use, including free and used
|
|
*/
|
|
void mbedtls_memory_buffer_alloc_max_get( size_t *max_used, size_t *max_blocks );
|
|
|
|
/**
|
|
* \brief Reset peak statistics
|
|
*/
|
|
void mbedtls_memory_buffer_alloc_max_reset( void );
|
|
|
|
/**
|
|
* \brief Get the current heap usage
|
|
*
|
|
* \param cur_used Current number of bytes in use or committed. This
|
|
* includes bytes in allocated blocks too small to split
|
|
* into smaller blocks but larger than the requested size.
|
|
* \param cur_blocks Current number of blocks in use, including free and used
|
|
*/
|
|
void mbedtls_memory_buffer_alloc_cur_get( size_t *cur_used, size_t *cur_blocks );
|
|
#endif /* MBEDTLS_MEMORY_DEBUG */
|
|
|
|
/**
|
|
* \brief Verifies that all headers in the memory buffer are correct
|
|
* and contain sane values. Helps debug buffer-overflow errors.
|
|
*
|
|
* Prints out first failure if MBEDTLS_MEMORY_DEBUG is defined.
|
|
* Prints out full header information if MBEDTLS_MEMORY_DEBUG
|
|
* is defined. (Includes stack trace information for each block if
|
|
* MBEDTLS_MEMORY_BACKTRACE is defined as well).
|
|
*
|
|
* \return 0 if verified, 1 otherwise
|
|
*/
|
|
int mbedtls_memory_buffer_alloc_verify( void );
|
|
|
|
#if defined(MBEDTLS_SELF_TEST)
|
|
/**
|
|
* \brief Checkup routine
|
|
*
|
|
* \return 0 if successful, or 1 if a test failed
|
|
*/
|
|
int mbedtls_memory_buffer_alloc_self_test( int verbose );
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* memory_buffer_alloc.h */
|