@@ -229,13 +229,15 @@ shared_ptr<DtlsTransport> PeerConnection::initDtlsTransport() {
229
229
230
230
PLOG_VERBOSE << " Starting DTLS transport" ;
231
231
232
- auto fingerprintAlgorithm = CertificateFingerprint::Algorithm::Sha256;
233
- if (auto remote = remoteDescription (); remote && remote->fingerprint ()) {
234
- fingerprintAlgorithm = remote->fingerprint ()->algorithm ;
232
+ CertificateFingerprint::Algorithm fingerprintAlgorithm;
233
+ {
234
+ std::lock_guard lock (mRemoteDescriptionMutex );
235
+ if (mRemoteDescription && mRemoteDescription ->fingerprint ()) {
236
+ mRemoteFingerprintAlgorithm = mRemoteDescription ->fingerprint ()->algorithm ;
237
+ }
238
+ fingerprintAlgorithm = mRemoteFingerprintAlgorithm ;
235
239
}
236
240
237
- mRemoteFingerprintAlgorithm = fingerprintAlgorithm;
238
-
239
241
auto lower = std::atomic_load (&mIceTransport );
240
242
if (!lower)
241
243
throw std::logic_error (" No underlying ICE transport for DTLS transport" );
@@ -443,23 +445,25 @@ void PeerConnection::rollbackLocalDescription() {
443
445
444
446
bool PeerConnection::checkFingerprint (const std::string &fingerprint) {
445
447
std::lock_guard lock (mRemoteDescriptionMutex );
446
- if (!mRemoteDescription || !mRemoteDescription ->fingerprint ())
448
+ mRemoteFingerprint = fingerprint;
449
+
450
+ if (!mRemoteDescription || !mRemoteDescription ->fingerprint ()
451
+ || mRemoteFingerprintAlgorithm != mRemoteDescription ->fingerprint ()->algorithm )
447
452
return false ;
448
453
449
- if (config.disableFingerprintVerification ) {
454
+ if (config.disableFingerprintVerification ) {
450
455
PLOG_VERBOSE << " Skipping fingerprint validation" ;
451
- mRemoteFingerprint = fingerprint;
452
456
return true ;
453
457
}
454
458
455
459
auto expectedFingerprint = mRemoteDescription ->fingerprint ()->value ;
456
460
if (expectedFingerprint == fingerprint) {
457
461
PLOG_VERBOSE << " Valid fingerprint \" " << fingerprint << " \" " ;
458
- mRemoteFingerprint = fingerprint;
459
462
return true ;
460
463
}
461
464
462
- PLOG_ERROR << " Invalid fingerprint \" " << fingerprint << " \" , expected \" " << expectedFingerprint << " \" " ;
465
+ PLOG_ERROR << " Invalid fingerprint \" " << fingerprint << " \" , expected \" "
466
+ << expectedFingerprint << " \" " ;
463
467
return false ;
464
468
}
465
469
@@ -1308,6 +1312,7 @@ void PeerConnection::resetCallbacks() {
1308
1312
}
1309
1313
1310
1314
CertificateFingerprint PeerConnection::remoteFingerprint () {
1315
+ std::lock_guard lock (mRemoteDescriptionMutex );
1311
1316
if (mRemoteFingerprint )
1312
1317
return {CertificateFingerprint{mRemoteFingerprintAlgorithm , *mRemoteFingerprint }};
1313
1318
else
0 commit comments