summaryrefslogtreecommitdiff
path: root/extmod/modussl_mbedtls.c
AgeCommit message (Collapse)Author
2021-03-15run code formatting scriptmicroDev
2020-07-06Add license to some obvious files.Diego Elio Pettenò
2019-12-04protocols: Allow them to be (optionally) type-safeJeff Epler
Protocols are nice, but there is no way for C code to verify whether a type's "protocol" structure actually implements some particular protocol. As a result, you can pass an object that implements the "vfs" protocol to one that expects the "stream" protocol, and the opposite of awesomeness ensues. This patch adds an OPTIONAL (but enabled by default) protocol identifier as the first member of any protocol structure. This identifier is simply a unique QSTR chosen by the protocol designer and used by each protocol implementer. When checking for protocol support, instead of just checking whether the object's type has a non-NULL protocol field, use `mp_proto_get` which implements the protocol check when possible. The existing protocols are now named: protocol_framebuf protocol_i2c protocol_pin protocol_stream protocol_spi protocol_vfs (most of these are unused in CP and are just inherited from MP; vfs and stream are definitely used though) I did not find any crashing examples, but here's one to give a flavor of what is improved, using `micropython_coverage`. Before the change, the vfs "ioctl" protocol is invoked, and the result is not intelligible as json (but it could have resulted in a hard fault, potentially): >>> import uos, ujson >>> u = uos.VfsPosix('/tmp') >>> ujson.load(u) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: syntax error in JSON After the change, the vfs object is correctly detected as not supporting the stream protocol: >>> ujson.load(p) Traceback (most recent call last): File "<stdin>", line 1, in <module> OSError: stream operation not supported
2018-06-18extmod: Update to use new mp_get_stream helper.Damien George
With this patch objects are only checked that they have the stream protocol at the start of their use as a stream, and afterwards the efficient mp_get_stream() helper is used to extract the stream protocol C methods.
2018-05-31extmod/modussl_mbedtls: Use mbedtls_entropy_func for CTR-DRBG entropy.Damien George
If mbedtls_ctr_drbg_seed() is available in the mbedtls bulid then so should be mbedtls_entropy_func(). Then it's up to the port to configure a valid entropy source, eg via MBEDTLS_ENTROPY_HARDWARE_ALT.
2018-05-31extmod/modussl_mbedtls: Populate sock member right away in wrap_socket.Damien George
Otherwise the "sock" member may have an undefined value if wrap_socket fails with an exception and exits early, and then if the finaliser runs it will try to close an invalid stream object. Fixes issue #3828.
2018-04-10py/stream: Switch stream close operation from method to ioctl.Damien George
This patch moves the implementation of stream closure from a dedicated method to the ioctl of the stream protocol, for each type that implements closing. The benefits of this are: 1. Rounds out the stream ioctl function, which already includes flush, seek and poll (among other things). 2. Makes calling mp_stream_close() on an object slightly more efficient because it now no longer needs to lookup the close method and call it, rather it just delegates straight to the ioctl function (if it exists). 3. Reduces code size and allows future types that implement the stream protocol to be smaller because they don't need a dedicated close method. Code size reduction is around 200 bytes smaller for x86 archs and around 30 bytes smaller for the bare-metal archs.
2017-12-13extmod/modussl_mbedtls: Clean up mbedtls state when error during setup.Damien George
Without this patch, if the SSL handshake fails (eg the connection was lost) then the mbedtls state (memory) will never be freed.
2017-10-30extmod/modussl_mbedtls: Allow to compile with unix coverage build.Damien George
Fixes a few C warnings. No functional changes.
2017-10-30extmod/modussl: Add finaliser support for ussl objects.Eric Poulsen
Per the comment found here https://github.com/micropython/micropython-esp32/issues/209#issuecomment-339855157, this patch adds finaliser code to prevent memory leaks from ussl objects, which is especially useful when memory for a ussl context is allocated outside the uPy heap. This patch is in-line with the finaliser code found in many modsocket implementations for various ports. This feature is configured via MICROPY_PY_USSL_FINALISER and is disabled by default because there may be issues using it when the ussl state *is* allocated on the uPy heap, rather than externally.
2017-10-04all: Remove inclusion of internal py header files.Damien George
Header files that are considered internal to the py core and should not normally be included directly are: py/nlr.h - internal nlr configuration and declarations py/bc0.h - contains bytecode macro definitions py/runtime0.h - contains basic runtime enums Instead, the top-level header files to include are one of: py/obj.h - includes runtime0.h and defines everything to use the mp_obj_t type py/runtime.h - includes mpstate.h and hence nlr.h, obj.h, runtime0.h, and defines everything to use the general runtime support functions Additional, specific headers (eg py/objlist.h) can be included if needed.
2017-09-06extmod/modussl_mbedtls: Allow to compile with MBEDTLS_DEBUG_C disabled.Damien George
With MBEDTLS_DEBUG_C disabled the function mbedtls_debug_set_threshold() doesn't exist. There's also no need to call mbedtls_ssl_conf_dbg() so a few bytes can be saved on disabling that and not needing the mbedtls_debug callback.
2017-08-16extmod/modussl_mbedtls.c: Add ussl.getpeercert() method.Eric Poulsen
Behaviour is as per CPython but only the binary form is implemented here. A test is included.
2017-07-26extmod/modussl_mbedtls: Implement non-blocking SSL sockets.Eric Poulsen
2017-07-25extmod/modussl_mbedtls: Make socket.close() free all TLS resources.Damien George
Also, use mp_stream_close() helper to close the underlying socket.
2017-07-25extmod/modussl_mbedtls: When reading and peer wants to close, return 0.Damien George
If this particular code is returned then there's no more data, it's not really an error.
2017-07-24all: Don't include system errno.h when it's not needed.Damien George
2017-07-24extmod/modussl_mbedtls: Support server_side mode.Damien George
To use server_side mode one must pass valid values in the "key" and "cert" parameters.
2017-03-29extmod: Update for changes to mp_obj_str_get_data.Damien George
2016-11-14all: Remove readall() method, which is equivalent to read() w/o args.Paul Sokolovsky
Its addition was due to an early exploration on how to add CPython-like stream interface. It's clear that it's not needed and just takes up bytes in all ports.
2016-10-15extmod/modussl_mbedtls: Add dummy setblocking() method.Paul Sokolovsky
Accepts only value of True.
2016-10-07extmod: Use mp_raise_OSError helper function.Damien George
2016-09-23extmod/modussl_mbedtls: Add server_hostname param for wrap_socket().Paul Sokolovsky
In CPython, module-level .wrap_socket() function actually doesn't accept (or document) this param, only SSLContext.wrap_socket() has.
2016-09-22extmod/modussl_mbedtls: Use 2-component include paths.Paul Sokolovsky
This is required to use mbedTLS versions from various sources, e.g. mainline vs embedded into Zephyr RTOS.
2016-09-22extmod/modussl_mbedtls: Implement key= and cert= args to wrap_socket().Paul Sokolovsky
Unlike standard keyfile= and certfile=, these accept byte buffer objects (to not depend on FS implementation).
2016-09-21extmod/modussl_mbedtls: Initial implementation of mbedTLS ussl module.Paul Sokolovsky