예제 #1
0
        public void BouncyCertFromCoreFxCert()
        {
            logger.LogDebug("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);
            logger.BeginScope(System.Reflection.MethodBase.GetCurrentMethod().Name);

#if NETCOREAPP
            if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
            {
                logger.LogDebug("Test skipped for netcoreapp and macOS as not able to load certificates from a .pfx file pre .NET Core 5.0.");
                return;
            }
#endif

            var coreFxCert = new X509Certificate2("certs/localhost.pfx", string.Empty, X509KeyStorageFlags.Exportable);
            Assert.NotNull(coreFxCert);
            Assert.NotNull(coreFxCert.PrivateKey);

            string coreFxFingerprint = DtlsUtils.Fingerprint(coreFxCert).ToString();
            logger.LogDebug($"Core FX certificate fingerprint {coreFxFingerprint}.");

            var bcCert = Org.BouncyCastle.Security.DotNetUtilities.FromX509Certificate(coreFxCert);
            Assert.NotNull(bcCert);

            var bcKey = Org.BouncyCastle.Security.DotNetUtilities.GetKeyPair(coreFxCert.PrivateKey).Private;
            Assert.NotNull(bcKey);

            string bcFingerprint = DtlsUtils.Fingerprint(bcCert).ToString();
            logger.LogDebug($"BouncyCastle certificate fingerprint {bcFingerprint}.");

            Assert.Equal(coreFxFingerprint, bcFingerprint);
        }
예제 #2
0
        public void CreateSelfSignedCertifcateUnitTest()
        {
            logger.LogDebug("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);
            logger.BeginScope(System.Reflection.MethodBase.GetCurrentMethod().Name);

            var cert = DtlsUtils.CreateSelfSignedCert();

            Assert.NotNull(cert);
        }
예제 #3
0
        public void CreateClientInstanceUnitTest()
        {
            logger.LogDebug("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);
            logger.BeginScope(System.Reflection.MethodBase.GetCurrentMethod().Name);

            (var tlsCert, var pvtKey) = DtlsUtils.CreateSelfSignedTlsCert();
            DtlsSrtpTransport dtlsTransport = new DtlsSrtpTransport(new DtlsSrtpClient(tlsCert, pvtKey));

            Assert.NotNull(dtlsTransport);
        }
예제 #4
0
        public void CreateSelfSignedCertifcateUnitTest()
        {
            logger.LogDebug("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);
            logger.BeginScope(System.Reflection.MethodBase.GetCurrentMethod().Name);

            (var tlsCert, var pvtKey) = DtlsUtils.CreateSelfSignedTlsCert();

            logger.LogDebug(tlsCert.ToString());

            Assert.NotNull(tlsCert);
            Assert.NotNull(pvtKey);
        }
        public void SendVideoRtcpFeedbackReportUnitTest()
        {
            logger.LogDebug("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);
            logger.BeginScope(System.Reflection.MethodBase.GetCurrentMethod().Name);

            RTCConfiguration pcConfiguration = new RTCConfiguration
            {
                certificates = new List <RTCCertificate>
                {
                    new RTCCertificate
                    {
                        Certificate = DtlsUtils.CreateSelfSignedCert()
                    }
                },
                X_UseRtpFeedbackProfile = true
            };

            RTCPeerConnection pcSrc = new RTCPeerConnection(pcConfiguration);
            var videoTrackSrc       = new MediaStreamTrack(SDPMediaTypesEnum.video, false, new List <SDPMediaFormat> {
                new SDPMediaFormat(SDPMediaFormatsEnum.VP8)
            });

            pcSrc.addTrack(videoTrackSrc);
            var offer = pcSrc.createOffer(new RTCOfferOptions());

            logger.LogDebug($"offer: {offer.sdp}");

            RTCPeerConnection pcDst = new RTCPeerConnection(pcConfiguration);
            var videoTrackDst       = new MediaStreamTrack(SDPMediaTypesEnum.video, false, new List <SDPMediaFormat> {
                new SDPMediaFormat(SDPMediaFormatsEnum.VP8)
            });

            pcDst.addTrack(videoTrackDst);

            var setOfferResult = pcDst.setRemoteDescription(offer);

            Assert.Equal(SetDescriptionResultEnum.OK, setOfferResult);

            var answer          = pcDst.createAnswer(null);
            var setAnswerResult = pcSrc.setRemoteDescription(answer);

            Assert.Equal(SetDescriptionResultEnum.OK, setAnswerResult);

            logger.LogDebug($"answer: {answer.sdp}");

            RTCPFeedback pliReport = new RTCPFeedback(pcDst.VideoLocalTrack.Ssrc, pcDst.VideoRemoteTrack.Ssrc, PSFBFeedbackTypesEnum.PLI);

            pcDst.SendRtcpFeedback(SDPMediaTypesEnum.video, pliReport);
        }
예제 #6
0
        public void GetCertifcateFingerprintUnitTest()
        {
            logger.LogDebug("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);
            logger.BeginScope(System.Reflection.MethodBase.GetCurrentMethod().Name);

            (var tlsCert, var pvtKey) = DtlsUtils.CreateSelfSignedTlsCert();
            Assert.NotNull(tlsCert);

            var fingerprint = DtlsUtils.Fingerprint(tlsCert);

            logger.LogDebug($"Fingerprint {fingerprint}.");

            Assert.NotNull(fingerprint.algorithm);
            Assert.NotNull(fingerprint.value);
        }
예제 #7
0
        public void LoadSecretFromArchiveUnitTest()
        {
            logger.LogDebug("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);
            logger.BeginScope(System.Reflection.MethodBase.GetCurrentMethod().Name);

            var cert = new X509Certificate2("certs/localhost.pfx", (string)null, X509KeyStorageFlags.Exportable);

            Assert.NotNull(cert);

            //var rsaParams = ((RSA)cert.PrivateKey).ExportParameters(true);

            var key = DtlsUtils.LoadPrivateKeyResource(cert);

            Assert.NotNull(key);
        }
예제 #8
0
        public void LoadSecretFromArchiveUnitTest()
        {
            logger.LogDebug("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);
            logger.BeginScope(System.Reflection.MethodBase.GetCurrentMethod().Name);

#if NETCOREAPP
            if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
            {
                logger.LogDebug("Test skipped for netcoreapp and macOS as not able to load certificates from a .pfx file pre .NET Core 5.0.");
                return;
            }
#endif
            var cert = new X509Certificate2("certs/localhost.pfx", string.Empty, X509KeyStorageFlags.Exportable);
            Assert.NotNull(cert);
            var key = DtlsUtils.LoadPrivateKeyResource(cert);
            Assert.NotNull(key);
        }
예제 #9
0
        public void ConnectTest()
        {
            //CertificateInfo certificateInfo = DtlsUtils.
            byte[] testData = { 1, 2, 3, 4, 5 };

            int clientUdpPort = 8001, serverUdpPort = 8002;
            var clientSocket = new Socket(SocketType.Dgram, ProtocolType.Udp);

            clientSocket.Bind(new IPEndPoint(IPAddress.Any, clientUdpPort));

            var serverSocket = new Socket(SocketType.Dgram, ProtocolType.Udp);

            serverSocket.Bind(new IPEndPoint(IPAddress.Any, serverUdpPort));

            clientSocket.Connect(IPAddress.Loopback, serverUdpPort);
            serverSocket.Connect(IPAddress.Loopback, clientUdpPort);

            clientSocket.Send(testData);
            byte[] receiveBuffer = new byte[serverSocket.Available];
            serverSocket.Receive(receiveBuffer);

            CollectionAssert.AreEqual(receiveBuffer, testData);

            CertificateInfo clientCertificateInfo   = DtlsUtils.GenerateCertificateInfo();
            var             clientDatagramTransport = new DatagramTransportImpl(clientSocket);
            var             client = new DtlsClient(clientDatagramTransport, clientCertificateInfo, new DtlsClientProtocol(new Org.BouncyCastle.Security.SecureRandom()));

            CertificateInfo serverCertificateInfo   = DtlsUtils.GenerateCertificateInfo();
            var             serverDatagramTransport = new DatagramTransportImpl(serverSocket);
            var             server = new DtlsServer(serverDatagramTransport, serverCertificateInfo, new DtlsServerProtocol(new Org.BouncyCastle.Security.SecureRandom()));

            Task serverAcceptTask = new Task(() => server.Start());

            serverAcceptTask.Start();

            client.HandshakeComplete += (sender, args) =>
            {
            };
            client.ServerCertificateAvailable += (sender, args) =>
            {
            };

            client.Start();
        }
예제 #10
0
        public void LoadSecretFromArchiveUnitTest()
        {
            logger.LogDebug("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);
            logger.BeginScope(System.Reflection.MethodBase.GetCurrentMethod().Name);

            if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
            {
                logger.LogDebug("Test skipped as MacOS is not able to load certificates from a .pfx file pre .NET Core 5.0.");
            }
            else
            {
                var cert = new X509Certificate2("certs/localhost.pfx", string.Empty, X509KeyStorageFlags.Exportable);
                Assert.NotNull(cert);

                //var rsaParams = ((RSA)cert.PrivateKey).ExportParameters(true);

                var key = DtlsUtils.LoadPrivateKeyResource(cert);
                Assert.NotNull(key);
            }
        }
예제 #11
0
 public void CertificateInfoGenerationTest()
 {
     var certInfo = DtlsUtils.GenerateCertificateInfo();
 }