mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-11-05 13:20:11 +00:00
202 lines
13 KiB
Markdown
202 lines
13 KiB
Markdown
# libSceLibreSsl3 technical debt
|
|
|
|
### Unknown function info
|
|
|
|
- [libSceLibreSsl3 pending exports](../../../core/libs/prx/libSceLibreSsl3/Export.cpp) - 80 named callable exports, excluding `CRYPTO_memcmp`, `MD5`, `SHA1`, `d2i_ASN1_INTEGER`, `EVP_PKEY_up_ref`, `EC_KEY_up_ref` and `RSA_up_ref`, remain unimplemented from the [PS5 3.20 export table](https://github.com/DNNDHH/PS5-3.20_Libs/blob/b2a77c09cd71c01f34c790cfbe98c751a13262ad/libSceLibreSsl3.c), cross-checked against the same module in PS5 firmware 13.60. Their signatures and behaviour are unverified; the declarations use the no-parameter unknown-signature convention and throw through `NotImplemented_nid_no_patch`.
|
|
|
|
### Functional
|
|
|
|
- [ASN.1 integer decoding](../../../core/libs/prx/libSceLibreSsl3/src/IntegerDecoder.cpp) throws on rejected encodings/allocation failures instead of matching native NULL/error handling. Redundant-sign/empty-content rejection retains old output that the module frees and clears. The decoder does not populate the legacy queue; remaining LibreSSL3 ERR exports throw. [13.42 native-PC evidence](https://github.com/boykopovar/AnyPS5/pull/10948#issuecomment-6412137728), using a recording allocator, confirms tested replacement/free order, allocation cleanup and negative-length NULL returns. Nonnegative null input faults natively and throws here. Console/application-heap ABI and untested error-precedence/overflow combinations remain unverified. Contracts follow [LibreSSL 4.0.0](https://github.com/libressl/openbsd/tree/ce488b78e0bd994780569df718596b9776ff681a/src/lib/libcrypto/asn1). Closes when: error/replacement semantics and console/allocator interoperability are verified.
|
|
- [CRYPTO_memcmp](../../../core/libs/prx/libSceLibreSsl3/Export.cpp) follows the public [LibreSSL signature and equality contract](https://man.openbsd.org/CRYPTO_memcmp.3), without PS5 verification. The exact nonzero result for unequal buffers is unspecified by that contract. Content-independent execution of its volatile byte reads still depends on the compiler; inspect optimized code when changing toolchains. Closes when: measured on a PS5 and the supported toolchains' generated code is checked.
|
|
- [MD5 and SHA1](../../../core/libs/prx/libSceLibreSsl3/src/Digest.cpp) (libSceLibreSsl3) - follow LibreSSL's [md5.c, sha1.c](https://github.com/libressl/openbsd/tree/bc9483725c5815efb64b6d9acc52fc5fba139212/src/lib/libcrypto) and hash through libSceLibreSsl's `MD5_*` and `SHA1_*`. A null digest buffer, which LibreSSL 4.0.0 does not check, throws. Nothing is checked on the console
|
|
- [EVP_PKEY_up_ref, EC_KEY_up_ref and RSA_up_ref](../../../core/libs/prx/libSceLibreSsl3/src/Key.cpp) - console layouts and retain/release interoperability are unverified. The 32-byte EVP, 64-byte EC and 152-byte RSA layouts, with counters at offsets 4, 48 and 104, follow [LibreSSL 4.0.0](https://github.com/libressl/openbsd/tree/ce488b78e0bd994780569df718596b9776ff681a/src/lib/libcrypto) `evp/evp_local.h`, `evp/p_lib.c`, `ec/ec_local.h`, `ec/ec_key.c`, `rsa/rsa_local.h` and `rsa/rsa_lib.c`; the RSA layout has no `engine` field, unlike libSceLibreSsl's `LibreSslRsa`. Atomic retains replace its internal mutex; future releases must synchronize with the same counters. With no key constructors/destructors in this module, tests use caller-owned objects without validating allocator or destruction compatibility. Null keys and signed-counter overflow, undefined upstream, throw without mutation. Closes when: console layouts and lifetime interoperability are measured.
|
|
|
|
- [Parent export forwarding](../../../core/libs/prx/libSceLibreSsl3/ParentExports.cpp) exposes 395 parent-library exports on Windows through IAT tail jumps without changing their ABI. Non-Windows hosts use their existing dependency lookup. Static COFF inspection verifies names, parent imports and tail jumps; Windows loading and runtime behavior remain unverified. Parent functions retain their existing implementation limitations.
|
|
- [EVP_MD_CTX_md](../../../core/libs/prx/libSceLibreSsl3/src/DigestContext.cpp) (libSceLibreSsl3) - nothing is checked on the console. As in [LibreSSL 4.0.0](https://github.com/libressl/openbsd/blob/ce488b78e0bd994780569df718596b9776ff681a/src/lib/libcrypto/evp/evp_digest.c) `evp_digest.c`, a null context returns null and any other returns its first field, `digest`. That field is first in 4.0.0's `evp_local.h` and in the [2.5.4 layout](https://github.com/libressl/openbsd/blob/2e2c612066aa993717528a0249c15c51128d61cb/src/lib/libcrypto/evp/evp.h) of the contexts the forwarded libSceLibreSsl exports handle; the layouts differ after it, so the context and digest are declared opaque. Closes when: compared with the console.
|
|
- [EVP_CIPHER_key_length and EVP_CIPHER_iv_length](../../../core/libs/prx/libSceLibreSsl3/src/Cipher.cpp) (libSceLibreSsl3) - nothing is checked on the console. They return `key_len` and `iv_len` from the 80-byte `EVP_CIPHER` of [LibreSSL 4.0.0](https://github.com/libressl/openbsd/tree/ce488b78e0bd994780569df718596b9776ff681a/src/lib/libcrypto/evp) `evp_local.h` and `evp_cipher.c`. The fields are at offsets 8 and 12, as in the [2.5.4 layout](https://github.com/libressl/openbsd/blob/2e2c612066aa993717528a0249c15c51128d61cb/src/lib/libcrypto/evp/evp.h) of the ciphers the forwarded libSceLibreSsl exports handle. A null cipher, which LibreSSL dereferences, throws. Closes when: compared with the console.
|
|
- [X509_VERIFY_PARAM_set_flags](../../../core/libs/prx/libSceLibreSsl3/src/X509VerifyParam.cpp) (libSceLibreSsl3) - nothing is checked on the console. It ORs the flags into `flags` and returns 1, as both [LibreSSL 2.5.4](https://github.com/libressl/openbsd/blob/2e2c612066aa993717528a0249c15c51128d61cb/src/lib/libcrypto/x509/x509_vpm.c) and [4.0.0](https://github.com/libressl/openbsd/blob/ce488b78e0bd994780569df718596b9776ff681a/src/lib/libcrypto/x509/x509_vpm.c) `x509_vpm.c` do. They differ when `EXPLICIT_POLICY`, `INHIBIT_ANY` or `INHIBIT_MAP` is set while `POLICY_CHECK` is neither set nor requested: 2.5.4 also adds `POLICY_CHECK` and 4.0.0 does not. The console's choice is unknown, so that case throws through `NotImplemented_nid_no_patch` and leaves the parameters unchanged. It writes libSceLibreSsl's 2.5.4 `LibreSslX509VerifyParam`, whose `flags` is at offset 24 as in 4.0.0. Null parameters throw. Closes when: the console's policy behaviour is measured.
|
|
- [sk_new, sk_push and sk_free](../../../core/libs/prx/libSceLibreSsl3/src/Stack.cpp) (libSceLibreSsl3) - follow [LibreSSL 4.0.0](https://github.com/libressl/openbsd/blob/ce488b78e0bd994780569df718596b9776ff681a/src/lib/libcrypto/stack/stack.c) `stack.c` with libSceLibreSsl's 32-byte `_STACK` layout, which `stack_local.h` keeps there. Stacks and element arrays come from the guest heap, so the forwarded `sk_pop_free` can release them. Nothing is checked on the console. Where LibreSSL faults or overflows, they throw: `sk_push` on a null stack, on a negative element count, on a null element array it does not regrow, or when the element array cannot double without overflowing `int`
|
|
|
|
### Additional callable export inventory
|
|
|
|
- [Additional exports](../../../core/libs/prx/libSceLibreSsl3/AdditionalExports.cpp) declare 176 callable exports: 50 named and 126 known only by NID. Every entry throws. Parameterless `int` declarations are unknown-signature placeholders, not verified ABI contracts. Names/NIDs match the 13.60 export table. No functional implementation or title unblock is claimed.
|
|
|
|
| Name | NID |
|
|
| --- | --- |
|
|
| `unknown` | `++b0FizBrJk` |
|
|
| `unknown` | `+STC2BUY9vY` |
|
|
| `unknown` | `+Tu0gXSas9s` |
|
|
| `unknown` | `+bQfpiUHRVk` |
|
|
| `unknown` | `0BW+8jTsY54` |
|
|
| `unknown` | `0IxWzLyU8PI` |
|
|
| `SSL_SESSION_get_timeout` | `0JcHkrKJ9iw` |
|
|
| `unknown` | `13BHMSblVyY` |
|
|
| `unknown` | `27Fuliv3Om8` |
|
|
| `unknown` | `2bIZM-OfE8Y` |
|
|
| `unknown` | `2l+JidqxyZQ` |
|
|
| `TLS_method` | `31eWdro1jqs` |
|
|
| `unknown` | `3KZ-L4y1gak` |
|
|
| `unknown` | `3m4CmAyOXwQ` |
|
|
| `BIO_clear_flags` | `3sypCuBDdQs` |
|
|
| `unknown` | `3tGgkjBQ82A` |
|
|
| `unknown` | `3v2Omd4sqcU` |
|
|
| `unknown` | `3wlK0tLONvk` |
|
|
| `unknown` | `409ieWBMPUk` |
|
|
| `unknown` | `44M+SEbpNdQ` |
|
|
| `unknown` | `4Q3bvOy4LY8` |
|
|
| `unknown` | `4pEl-5DmrrM` |
|
|
| `SSL_set_accept_state` | `5BoCLZK9mGk` |
|
|
| `unknown` | `5DhOJmgra8E` |
|
|
| `unknown` | `5NBoRJYLH0U` |
|
|
| `unknown` | `5PWK0cYOpHs` |
|
|
| `i2d_SSL_SESSION` | `5aSlVeVSKVc` |
|
|
| `unknown` | `5ex+694ri90` |
|
|
| `tls_read` | `7RvDjfy4gUA` |
|
|
| `unknown` | `8A-gU2xQfjY` |
|
|
| `unknown` | `8AGfaSvdDq4` |
|
|
| `unknown` | `8kct4CSWwOA` |
|
|
| `tls_configure` | `8pwP-7j5UZI` |
|
|
| `X509_STORE_CTX_get0_param` | `8wroYNJAQpo` |
|
|
| `unknown` | `A-Hs-8mau+8` |
|
|
| `unknown` | `A0lZtFjhcTw` |
|
|
| `unknown` | `A65b+ZhOt9k` |
|
|
| `BN_clear_free` | `ABcJv8S1KEM` |
|
|
| `unknown` | `AiNud8LR8B4` |
|
|
| `unknown` | `Ax+Uu++rnrA` |
|
|
| `SSL_CTX_set_timeout` | `BBOgwZLvXHA` |
|
|
| `tls_config_new` | `BQNyLN2nA9w` |
|
|
| `unknown` | `BRjfzlGULmU` |
|
|
| `unknown` | `BS5yWv6X-hg` |
|
|
| `unknown` | `C7eFtWPfLdk` |
|
|
| `unknown` | `CFRaBB2+R+s` |
|
|
| `unknown` | `DZ6fywqpaik` |
|
|
| `TLS_server_method` | `EtM5Jwx4EFo` |
|
|
| `unknown` | `F7jknWesBTY` |
|
|
| `tls_close` | `Fqc0-3YCXjo` |
|
|
| `tls_client` | `GEK3LmjM9Q4` |
|
|
| `unknown` | `GFEaREp1UFw` |
|
|
| `EVP_PKEY_get0_EC_KEY` | `GY2X+VHs568` |
|
|
| `unknown` | `GjO5Ap3E-t4` |
|
|
| `unknown` | `HE-vihq-KKw` |
|
|
| `EVP_PKEY_verify` | `HEuvmk+aHs4` |
|
|
| `unknown` | `IOutZPRNNPo` |
|
|
| `d2i_SSL_SESSION` | `IiG4HLr+cOw` |
|
|
| `unknown` | `J437jVn9pjI` |
|
|
| `unknown` | `J5ZLHxWkT6k` |
|
|
| `unknown` | `JSqFTYGaWhU` |
|
|
| `unknown` | `JvoQz7GYOMo` |
|
|
| `unknown` | `Jzebx477Q3M` |
|
|
| `SSL_CTX_add1_chain_cert` | `L897DuAuXKk` |
|
|
| `unknown` | `LA1MlgDx80o` |
|
|
| `tls_config_free` | `LL8N+X6DA-4` |
|
|
| `HMAC_CTX_new` | `LcxutSyn11o` |
|
|
| `unknown` | `LdGe2IfIlpI` |
|
|
| `unknown` | `M7ze0mz2jQM` |
|
|
| `tls_error` | `N+G3Gxequt0` |
|
|
| `unknown` | `O9Thca3enw8` |
|
|
| `unknown` | `OqtHJ7QUZg8` |
|
|
| `unknown` | `PBYz0kpXwg8` |
|
|
| `unknown` | `PNfwr3s6dEs` |
|
|
| `unknown` | `PcUZS7XHwHk` |
|
|
| `unknown` | `QKIOxHfZLh8` |
|
|
| `unknown` | `QTV9Nyi7ryg` |
|
|
| `unknown` | `QYEjNnn6PT4` |
|
|
| `SSL_CIPHER_get_id` | `QaiPrM-RrrM` |
|
|
| `unknown` | `QhYzE+Jdvuk` |
|
|
| `unknown` | `QnjD8S6Rgk4` |
|
|
| `unknown` | `R3NyckUcClU` |
|
|
| `BN_dup` | `RMhEgJs6KLI` |
|
|
| `EVP_sha512_256` | `Sea+FOS2GOI` |
|
|
| `unknown` | `Sqn+7yQmQWc` |
|
|
| `unknown` | `Ssfu1yw4Em4` |
|
|
| `unknown` | `TKGJOgbeyuA` |
|
|
| `unknown` | `TpBvY92mrSM` |
|
|
| `unknown` | `U1dQZ1rXHdA` |
|
|
| `unknown` | `U3AsZ-9e2MI` |
|
|
| `SSL_CTX_set0_chain` | `UHkYqkyfwOs` |
|
|
| `unknown` | `UT6E1YgI8mw` |
|
|
| `unknown` | `UmAPG5bxYYk` |
|
|
| `X509_STORE_load_locations` | `V3JtebYui1A` |
|
|
| `ERR_func_error_string` | `VXuysR7ySzw` |
|
|
| `EVP_get_digestbyname` | `Wm24hhTLqWM` |
|
|
| `SSL_SESSION_set_time` | `XG3hIzt9VXY` |
|
|
| `unknown` | `XK3FmaTS6pg` |
|
|
| `HMAC_CTX_free` | `YAxGqtnKQFY` |
|
|
| `unknown` | `YJ7bfxMHniE` |
|
|
| `unknown` | `ZERQN8ewpgk` |
|
|
| `unknown` | `ZFeTGo4ybcw` |
|
|
| `unknown` | `ZQ3b6SakHkc` |
|
|
| `unknown` | `aKGUCnoiE+k` |
|
|
| `unknown` | `aLdgrI2jAF0` |
|
|
| `unknown` | `aSO3Svp7umY` |
|
|
| `unknown` | `agQxMaXVE8o` |
|
|
| `unknown` | `as+t2ZOg5fw` |
|
|
| `unknown` | `ba4o0Ih6kSs` |
|
|
| `unknown` | `bpOQdoGE2es` |
|
|
| `SSL_get_version` | `dL2V0os4TZ4` |
|
|
| `unknown` | `dQE7FIbNsUE` |
|
|
| `i2d_X509` | `e2ReciVG21w` |
|
|
| `unknown` | `eyrIagsax0w` |
|
|
| `unknown` | `f6Pa2rYH-dw` |
|
|
| `unknown` | `fR2Wat3ssHs` |
|
|
| `d2i_X509_CRL` | `fVos2kAqfMI` |
|
|
| `tls_write` | `fZJr2OF+KGw` |
|
|
| `unknown` | `fdvZNUHm-dE` |
|
|
| `unknown` | `fq1vAGKJNrI` |
|
|
| `unknown` | `gavhu7SX2FI` |
|
|
| `PEM_read_bio_PUBKEY` | `gn7mRF71J4k` |
|
|
| `EVP_PKEY_assign` | `gp5dGS14-pI` |
|
|
| `OPENSSL_init_ssl` | `hGiyDq-l4AE` |
|
|
| `unknown` | `iFlkTGEbE9k` |
|
|
| `unknown` | `iHetf873n+4` |
|
|
| `unknown` | `je-ydGAbgFg` |
|
|
| `unknown` | `k1AHUWet-oU` |
|
|
| `unknown` | `kO-jQ3HS9kE` |
|
|
| `unknown` | `kPCJUQuguzE` |
|
|
| `BIO_set_flags` | `lLHlEb1nt5U` |
|
|
| `unknown` | `lTdt9OsPAV0` |
|
|
| `SSL_set_alpn_protos` | `lyk0UDADPAc` |
|
|
| `unknown` | `mKlCMgWMU84` |
|
|
| `SSL_set_info_callback` | `mOQe5RQATT4` |
|
|
| `unknown` | `mXrusLhI3CI` |
|
|
| `unknown` | `mhAgol4ETgY` |
|
|
| `tls_server` | `nCOh70mg3K0` |
|
|
| `unknown` | `o0dpw6ZZ6K0` |
|
|
| `unknown` | `o3Q8yQAMT-k` |
|
|
| `EVP_PKEY_derive_set_peer` | `ovH4WphWIQQ` |
|
|
| `unknown` | `pW329hq95Hc` |
|
|
| `unknown` | `pdxCm9+CCc4` |
|
|
| `unknown` | `qGsc6uT6p1E` |
|
|
| `EVP_PKEY_verify_init` | `qseLIVbdvMQ` |
|
|
| `unknown` | `rJZ-aiNIYCA` |
|
|
| `unknown` | `s8WMaKNjwvE` |
|
|
| `unknown` | `sENJFZ7WbLU` |
|
|
| `EVP_PKEY_bits` | `ssruelYxprY` |
|
|
| `SSL_do_handshake` | `tJsbVTdWjT4` |
|
|
| `unknown` | `tZG2VIefbX0` |
|
|
| `unknown` | `uITUdhDDAg8` |
|
|
| `HKDF` | `uJ2ZXq4z3As` |
|
|
| `unknown` | `uM9UnC8KFjY` |
|
|
| `unknown` | `uihDBp74nLI` |
|
|
| `EVP_PKEY_CTX_free` | `ulzAPWCIBkw` |
|
|
| `tls_free` | `uz3bWkbHZu4` |
|
|
| `unknown` | `v1vHv4jOJxQ` |
|
|
| `unknown` | `vLuIwBfrxrk` |
|
|
| `unknown` | `vR0po3nBkBs` |
|
|
| `unknown` | `vnwZHU5FvBQ` |
|
|
| `unknown` | `vo-cv5gnPUA` |
|
|
| `unknown` | `vu4FgwGayHY` |
|
|
| `unknown` | `wHdymWL7CbE` |
|
|
| `unknown` | `wNQT6Zn4UG4` |
|
|
| `X509_EXTENSION_free` | `wbJDMMsje6s` |
|
|
| `unknown` | `whL1IRBxFZA` |
|
|
| `unknown` | `xBkcXV1OqWQ` |
|
|
| `unknown` | `xVv3qlSRldc` |
|
|
| `unknown` | `xZ1BME5qDv0` |
|
|
| `unknown` | `xf6anoZpWRM` |
|
|
| `X509_get0_pubkey` | `xj7cFYOV4+Y` |
|
|
| `unknown` | `xpB+BNkO2Z0` |
|
|
| `unknown` | `yLm956jsJpc` |
|
|
| `unknown` | `z8fsXF8JuL0` |
|
|
| `unknown` | `zCa75KLWWn4` |
|