/* * Copyright 2018 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #import #import #include #include "rtc_base/gunit.h" #import "api/peerconnection/RTCConfiguration+Private.h" #import "api/peerconnection/RTCConfiguration.h" #import "api/peerconnection/RTCIceServer.h" #import "api/peerconnection/RTCMediaConstraints.h" #import "api/peerconnection/RTCPeerConnection.h" #import "api/peerconnection/RTCPeerConnectionFactory.h" #import "helpers/NSString+StdString.h" @interface RTCCertificateTest : XCTestCase @end @implementation RTCCertificateTest - (void)testCertificateIsUsedInConfig { RTC_OBJC_TYPE(RTCConfiguration) *originalConfig = [[RTC_OBJC_TYPE(RTCConfiguration) alloc] init]; NSArray *urlStrings = @[ @"stun:stun1.example.net" ]; RTC_OBJC_TYPE(RTCIceServer) *server = [[RTC_OBJC_TYPE(RTCIceServer) alloc] initWithURLStrings:urlStrings]; originalConfig.iceServers = @[ server ]; // Generate a new certificate. RTC_OBJC_TYPE(RTCCertificate) *originalCertificate = [RTC_OBJC_TYPE(RTCCertificate) generateCertificateWithParams:@{@"expires" : @100000, @"name" : @"RSASSA-PKCS1-v1_5"}]; // Store certificate in configuration. originalConfig.certificate = originalCertificate; RTC_OBJC_TYPE(RTCMediaConstraints) *contraints = [[RTC_OBJC_TYPE(RTCMediaConstraints) alloc] initWithMandatoryConstraints:@{} optionalConstraints:nil]; RTC_OBJC_TYPE(RTCPeerConnectionFactory) *factory = [[RTC_OBJC_TYPE(RTCPeerConnectionFactory) alloc] init]; // Create PeerConnection with this certificate. RTC_OBJC_TYPE(RTCPeerConnection) *peerConnection = [factory peerConnectionWithConfiguration:originalConfig constraints:contraints delegate:nil]; // Retrieve certificate from the configuration. RTC_OBJC_TYPE(RTCConfiguration) *retrievedConfig = peerConnection.configuration; // Extract PEM strings from original certificate. std::string originalPrivateKeyField = [[originalCertificate private_key] UTF8String]; std::string originalCertificateField = [[originalCertificate certificate] UTF8String]; // Extract PEM strings from certificate retrieved from configuration. RTC_OBJC_TYPE(RTCCertificate) *retrievedCertificate = retrievedConfig.certificate; std::string retrievedPrivateKeyField = [[retrievedCertificate private_key] UTF8String]; std::string retrievedCertificateField = [[retrievedCertificate certificate] UTF8String]; // Check that the original certificate and retrieved certificate match. EXPECT_EQ(originalPrivateKeyField, retrievedPrivateKeyField); EXPECT_EQ(retrievedCertificateField, retrievedCertificateField); } @end