Skip to content

Commit f9110d9

Browse files
[crypto] avoid direct access to mbedtls psa crypto struct members.
1 parent 76c12d9 commit f9110d9

1 file changed

Lines changed: 18 additions & 35 deletions

File tree

src/core/meshcop/secure_transport.cpp

Lines changed: 18 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1199,27 +1199,19 @@ Error SecureTransport::Extension::GetPeerCertificateBase64(unsigned char *aPeerC
11991199
size_t *aCertLength,
12001200
size_t aCertBufferSize)
12011201
{
1202-
Error error = kErrorNone;
1203-
SecureSession *session = mSecureTransport.mSessions.GetHead();
1202+
Error error = kErrorNone;
1203+
SecureSession *session;
1204+
const mbedtls_x509_crt *peerCert;
12041205

1206+
session = mSecureTransport.mSessions.GetHead();
12051207
VerifyOrExit(session != nullptr, error = kErrorInvalidState);
12061208
VerifyOrExit(session->IsConnected(), error = kErrorInvalidState);
12071209

1208-
#if (MBEDTLS_VERSION_NUMBER >= 0x03010000)
1209-
VerifyOrExit(mbedtls_base64_encode(aPeerCert, aCertBufferSize, aCertLength,
1210-
session->mSsl.MBEDTLS_PRIVATE(session)->MBEDTLS_PRIVATE(peer_cert)->raw.p,
1211-
session->mSsl.MBEDTLS_PRIVATE(session)->MBEDTLS_PRIVATE(peer_cert)->raw.len) ==
1212-
0,
1210+
peerCert = mbedtls_ssl_get_peer_cert(&session->mSsl);
1211+
VerifyOrExit(peerCert != nullptr, error = kErrorInvalidState);
1212+
1213+
VerifyOrExit(mbedtls_base64_encode(aPeerCert, aCertBufferSize, aCertLength, peerCert->raw.p, peerCert->raw.len) == 0,
12131214
error = kErrorNoBufs);
1214-
#else
1215-
VerifyOrExit(
1216-
mbedtls_base64_encode(
1217-
aPeerCert, aCertBufferSize, aCertLength,
1218-
session->mSsl.MBEDTLS_PRIVATE(session)->MBEDTLS_PRIVATE(peer_cert)->MBEDTLS_PRIVATE(raw).MBEDTLS_PRIVATE(p),
1219-
session->mSsl.MBEDTLS_PRIVATE(session)->MBEDTLS_PRIVATE(peer_cert)->MBEDTLS_PRIVATE(raw).MBEDTLS_PRIVATE(
1220-
len)) == 0,
1221-
error = kErrorNoBufs);
1222-
#endif
12231215

12241216
exit:
12251217
return error;
@@ -1229,30 +1221,21 @@ Error SecureTransport::Extension::GetPeerCertificateBase64(unsigned char *aPeerC
12291221
#if defined(MBEDTLS_SSL_KEEP_PEER_CERTIFICATE)
12301222
Error SecureTransport::Extension::GetPeerCertificateDer(uint8_t *aPeerCert, size_t *aCertLength, size_t aCertBufferSize)
12311223
{
1232-
Error error = kErrorNone;
1233-
SecureSession *session = mSecureTransport.mSessions.GetHead();
1224+
Error error = kErrorNone;
1225+
SecureSession *session;
1226+
const mbedtls_x509_crt *peerCert;
12341227

1228+
session = mSecureTransport.mSessions.GetHead();
1229+
VerifyOrExit(session != nullptr, error = kErrorInvalidState);
12351230
VerifyOrExit(session->IsConnected(), error = kErrorInvalidState);
12361231

1237-
#if (MBEDTLS_VERSION_NUMBER >= 0x03010000)
1238-
VerifyOrExit(session->mSsl.MBEDTLS_PRIVATE(session)->MBEDTLS_PRIVATE(peer_cert)->raw.len < aCertBufferSize,
1239-
error = kErrorNoBufs);
1232+
peerCert = mbedtls_ssl_get_peer_cert(&session->mSsl);
1233+
VerifyOrExit(peerCert != nullptr, error = kErrorInvalidState);
12401234

1241-
*aCertLength = session->mSsl.MBEDTLS_PRIVATE(session)->MBEDTLS_PRIVATE(peer_cert)->raw.len;
1242-
memcpy(aPeerCert, session->mSsl.MBEDTLS_PRIVATE(session)->MBEDTLS_PRIVATE(peer_cert)->raw.p, *aCertLength);
1235+
VerifyOrExit(peerCert->raw.len <= aCertBufferSize, error = kErrorNoBufs);
12431236

1244-
#else
1245-
VerifyOrExit(
1246-
session->mSsl.MBEDTLS_PRIVATE(session)->MBEDTLS_PRIVATE(peer_cert)->MBEDTLS_PRIVATE(raw).MBEDTLS_PRIVATE(len) <
1247-
aCertBufferSize,
1248-
error = kErrorNoBufs);
1249-
1250-
*aCertLength =
1251-
session->mSsl.MBEDTLS_PRIVATE(session)->MBEDTLS_PRIVATE(peer_cert)->MBEDTLS_PRIVATE(raw).MBEDTLS_PRIVATE(len);
1252-
memcpy(aPeerCert,
1253-
session->mSsl.MBEDTLS_PRIVATE(session)->MBEDTLS_PRIVATE(peer_cert)->MBEDTLS_PRIVATE(raw).MBEDTLS_PRIVATE(p),
1254-
*aCertLength);
1255-
#endif
1237+
*aCertLength = peerCert->raw.len;
1238+
memcpy(aPeerCert, peerCert->raw.p, *aCertLength);
12561239

12571240
exit:
12581241
return error;

0 commit comments

Comments
 (0)