mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-11-07 13:39:55 +00:00
sceSslConnect performs the client handshake on the host socket that the guest number maps to in the libkernel or libSceNet socket table, and sceSslRead and sceSslWrite carry application data. Session state comes from the context's memory pool, and the server is verified against the CAs loaded with sceSslLoadCert; a loaded client certificate is sent when the server asks for one. libkernel exports KernelLookupSocketNative_nid_no_patch, which checks its own socket table before the one libSceNet registers. Pools take a lock so connections can allocate outside the library lock. TLS 1.3 is compiled out. A missing CA, a verify callback, would-block sockets and every failure whose console code is unknown throw, as recorded in the libSceSsl debt entry. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01RoU3ZF76A6uR8sCA7NMLch
6.5 KiB
6.5 KiB
libSceSsl technical debt
Unknown function info
- sceSslCreateConnection, sceSslDeleteConnection, sceSslSetVerifyCallback, sceSslConnect, sceSslRead, sceSslWrite (libSceSsl) - imported by
ffmpeg.prx. Signatures follow SharpProspero, which also says the socket stays open aftersceSslDeleteConnectionand thatsceSslReadreturns 0 at the end of the stream. An unknown context returnsSSL_ERROR_INVALID_ID(0x8095F006), assceSslGetMemoryPoolStatsdoes on the console and as KytyPS5 and sharpemu return for other context calls; for an unknown connection, a connection whose context was terminated and a null host the console's codes are unknown, so these throw.sceSslConnectruns a TLS 1.2 client handshake with Mbed TLS 3.6.7 over the host socket that the guest number maps to in the libkernel or libSceNet socket table, andsceSslReadandsceSslWritecarry application data over it. TLS 1.3 is compiled out: SharpProspero'sSceSslVersionends at TLS 1.2, and Mbed TLS 1.3 needs PSA crypto state that is process-wide rather than allocated from a context's pool. Connection state is allocated from the context's pool and returned to it bysceSslDeleteConnection; a connection keeps the pool alive aftersceSslTerm. The server is verified against the CAs loaded withsceSslLoadCert: chain, validity dates and the host name the connection was created with, which is also sent as SNI. A client certificate loaded withsceSslLoadCertis sent when the server asks for one. With no CA loadedsceSslConnectthrows, because no root bundle is shipped and the console's built-in roots are unknown. With a verify callback set it throws: SharpProspero describes the arguments as an id, bits saying what failed, the chain, its length and the user argument, with a negative return failing the handshake with that value, but whether the id is the context or the connection, the bit values, the chain element type and when the callback runs are unknown. Handshake, verification and socket failures, a secondsceSslConnect, a read or write before the handshake, a descriptor that is not a socket, a null buffer, write flags other than 0 and read flags other than 0 andMsgFlagPartialRead(1) throw, as their console codes are unknown;MsgFlagPeek(3) is not implemented. A non-blocking socket that would block throws, and so does a libSceNet socket whoseSO_RCVTIMEOorSO_SNDTIMEOexpires, as libSceNet sets them on the host socket; libkernel keeps them above the host socket, so they do not bound SSL reads and writes on a libkernel socket.sceSslReadreturns what one Mbed TLS read delivers, up tolen, with flags 0 and withMsgFlagPartialReadalike; SharpProspero describessceSslReadas reading up tolenbutMsgFlagPartialReadas returning before the buffer is full, so whether flags 0 waits to fill the buffer is unknown. It returns 0 after the server's close_notify and also when the transport ends without one.sceSslWritesends all oflen, capped atINT_MAX, and returns the count. A connection serializes its reads and writes, so a read blocked in one thread holds back a write on the same connection from another.sceSslDeleteConnectionsends no close_notify. The socket is not checked when the connection is created,sceSslTermleaves the context's connections tosceSslDeleteConnection, andsceSslSetVerifyCallbackaccepts any callback, null included, and returns 0. None of this is verified on the console.SSL_ERROR_BEFORE_INIT(0x8095F001) is never returned, as the library keeps no state apart from its contexts - sceSslClose (libSceSsl) - unknown signature
- sceSslGetSerialNumber (libSceSsl) - unknown signature
- sceSslLoadCert, sceSslGetCaList, sceSslFreeCaList, sceSslGetCaCerts, sceSslFreeCaCerts, sceSslUnloadCert (libSceSsl) - signatures and layouts follow SharpProspero. PPSA15508/01.002.000 calls
sceSslLoadCertwith one 1,408-byte PEM CA and null client certificate/key arguments; this confirms that call shape, not console error behavior. Mbed TLS 3.6.7 parses DER/PEM chains and checks an optional client certificate/key pair. Imports are retained per context and committed together; a failed import preserves existing credentials. CA queries return independently owned snapshots; unload clears active credentials while outstanding snapshots remain valid. Appending repeated CA imports, snapshot lifetime across unload, memory overhead and error precedence have not been measured on a PS5. Invalid loads, malformed material, exhausted pools and unsupported keys throw rather than inventing console error codes. No root bundle is shipped; an empty context still returnsNOT_FOUND. The existing null-list error, unknown-context behavior and legacy clearing of foreign raw CA lists remain unchanged. Certificate readers remain unimplemented. Loading credentials does not start a TLS connection;sceSslConnectverifies the server against the loaded CAs and offers the loaded client certificate - PPSA01317 imports declared without parameters, signatures unknown: sceSslDisableVerifyOption, sceSslGetAlpnSelected, sceSslSetAlpn, sceSslSetMinSslVersion (libSceSsl). Connection storage exists, but their signatures and option behavior remain unknown, so they still throw
Functional
- PPSA07411 imports declared without parameters, signatures unknown, added without an implementation because the title fails to load without them: sceSslEnableVerifyOption (libSceSsl), four sce::Json::Value members (setElementAccessFailureHandler, setSpecialFloatHandler, setTypeMismatchHandler, operator bool) (libSceJson2), sceConvertKeycodeGetCharacter (libSceConvertKeycode) and sceNpSessionSignalingGetGroupFromSessionId (libSceNpSessionSignaling)