# libSceLibreSsl3 technical debt ### Unknown function info - [libSceLibreSsl3 pending exports](../../../core/libs/prx/libSceLibreSsl3/Export.cpp) - 81 named callable exports, excluding `CRYPTO_memcmp`, `MD5`, `SHA1`, `d2i_ASN1_INTEGER`, `EVP_PKEY_up_ref` and `EC_KEY_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 and EC_KEY_up_ref](../../../core/libs/prx/libSceLibreSsl3/src/Key.cpp) - console layouts and retain/release interoperability are unverified. The 32-byte EVP and 64-byte EC layouts, with counters at offsets 4 and 48, 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` and `ec/ec_key.c`. 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. ### Additional callable export inventory - [Additional exports](../../../core/libs/prx/libSceLibreSsl3/AdditionalExports.cpp) declare 183 callable exports: 57 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` | | `EVP_CIPHER_iv_length` | `4ryyfC3TknU` | | `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` | | `X509_VERIFY_PARAM_set_flags` | `9E9Gr4FLIE4` | | `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` | | `EVP_MD_CTX_md` | `H1dRCduUy+o` | | `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` | | `sk_new` | `kJ+Y+ppuuRg` | | `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` | | `sk_push` | `oXlgRDLB+w8` | | `EVP_PKEY_derive_set_peer` | `ovH4WphWIQQ` | | `unknown` | `pW329hq95Hc` | | `unknown` | `pdxCm9+CCc4` | | `EVP_CIPHER_key_length` | `qAG7o03bkkM` | | `unknown` | `qGsc6uT6p1E` | | `EVP_PKEY_verify_init` | `qseLIVbdvMQ` | | `sk_free` | `rI4q1FM+0gQ` | | `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` |