public void TestGenerateThaliAcceptablePublicPrivateKeyPair() { var keyPair = ThaliCryptoUtilities.GenerateThaliAcceptablePublicPrivateKeyPair(); Assert.IsTrue(keyPair != null && keyPair.Private != null && keyPair.Public != null); var testPublic = (RsaKeyParameters)keyPair.Public; Assert.AreEqual(testPublic.Modulus.BitLength, ThaliCryptoUtilities.KeySizeInBits); }
public void GetServersRootPublicKeyTest() { var keyPair = ThaliCryptoUtilities.GenerateThaliAcceptablePublicPrivateKeyPair(); var pkcs12Stream = ThaliCryptoUtilities.CreatePKCS12KeyStoreWithPublicPrivateKeyPair( keyPair, ThaliCryptoUtilities.DefaultPassPhrase); var cert = ThaliCryptoUtilities.GetX509Certificate(pkcs12Stream, ThaliCryptoUtilities.DefaultPassPhrase); var serverKey = ThaliClientToDeviceHubUtilities.GetServersRootPublicKey(Host, Port, cert); Assert.IsNotNull(serverKey); }
public void ThaliWebRequestTest() { var keyPair = ThaliCryptoUtilities.GenerateThaliAcceptablePublicPrivateKeyPair(); var pkcs12Stream = ThaliCryptoUtilities.CreatePKCS12KeyStoreWithPublicPrivateKeyPair( keyPair, ThaliCryptoUtilities.DefaultPassPhrase); var cert = ThaliCryptoUtilities.GetX509Certificate(pkcs12Stream, ThaliCryptoUtilities.DefaultPassPhrase); var serverKey = ThaliClientToDeviceHubUtilities.GetServersRootPublicKey(Host, Port, cert); var serverHttpKeyUri = HttpKeyUri.BuildHttpKeyUri(serverKey, Host, Port, null, null); var thaliWebRequest = ThaliClientToDeviceHubUtilities.CreateThaliWebRequest(serverHttpKeyUri, cert); thaliWebRequest.Method = "GET"; thaliWebRequest.GetResponse().Close(); }
public void TestKeyStoreMethods() { var keyPair = ThaliCryptoUtilities.GenerateThaliAcceptablePublicPrivateKeyPair(); var keyStoreBinary = ThaliCryptoUtilities.CreatePKCS12KeyStoreWithPublicPrivateKeyPair(keyPair, ThaliCryptoUtilities.DefaultPassPhrase); var x509cert = ThaliCryptoUtilities.GetX509Certificate(keyStoreBinary, ThaliCryptoUtilities.DefaultPassPhrase); var retrievedKeyParams = ((RSACryptoServiceProvider)x509cert.PrivateKey).ExportParameters(true); var originalBigIntegerRsaPublicKey = new BigIntegerRSAPublicKey((RsaKeyParameters)keyPair.Public); var retrievedBigIntegerRsaPublicKey = new BigIntegerRSAPublicKey(retrievedKeyParams); Assert.IsTrue(originalBigIntegerRsaPublicKey.Equals(retrievedBigIntegerRsaPublicKey)); var originalKeyParams = (RsaPrivateCrtKeyParameters)keyPair.Private; Assert.IsTrue( originalKeyParams.DP.Equals(new BigInteger(1, retrievedKeyParams.DP)) && originalKeyParams.DQ.Equals(new BigInteger(1, retrievedKeyParams.DQ)) && originalKeyParams.P.Equals(new BigInteger(1, retrievedKeyParams.P)) && originalKeyParams.Q.Equals(new BigInteger(1, retrievedKeyParams.Q))); }
public void HttpKeyUriTests() { var keyPair = ThaliCryptoUtilities.GenerateThaliAcceptablePublicPrivateKeyPair(); var serverPublicKey = new BigIntegerRSAPublicKey((RsaKeyParameters)keyPair.Public); const string Host = "foo.com"; const int Port = 413; string path = "/ick"; string query = "?ark"; string fragment = "#bark"; string extraValue = query + fragment; var httpKeyURL = HttpKeyUri.BuildHttpKeyUri(serverPublicKey, Host, Port, path, extraValue); // We want one we do manually just to make sure everything is o.k. Assert.IsTrue(Host.Equals(httpKeyURL.Host, StringComparison.Ordinal)); Assert.IsTrue(Port == httpKeyURL.Port); Assert.IsTrue(serverPublicKey.Modulus.Equals(httpKeyURL.ServerPublicKey.Modulus)); Assert.IsTrue(serverPublicKey.Exponent.Equals(httpKeyURL.ServerPublicKey.Exponent)); Assert.IsTrue(query.Equals(httpKeyURL.Query, StringComparison.Ordinal)); Assert.IsTrue(fragment.Equals(httpKeyURL.Fragment, StringComparison.Ordinal)); Assert.IsTrue(httpKeyURL.PathWithoutPublicKey.Equals(path, StringComparison.Ordinal)); string expectedURL = HttpKeyUri.HttpKeySchemeName + "://" + Host + ":" + Port + "/" + HttpKeyUri.RsaKeyType + ":" + serverPublicKey.Exponent + "." + serverPublicKey.Modulus + path + query + fragment; Assert.IsTrue(expectedURL.Equals(httpKeyURL.ToString(), StringComparison.Ordinal)); string expectedHttpsURL = "https://" + Host + ":" + Port + path + query + fragment; Assert.IsTrue(expectedHttpsURL.Equals(httpKeyURL.CreateHttpsUrl(), StringComparison.Ordinal)); // ReSharper disable once EqualExpressionComparison Assert.IsTrue(httpKeyURL.Equals(httpKeyURL)); HttpKeyUri secondHttpKeyURL = HttpKeyUri.BuildHttpKeyUri(expectedURL); Assert.IsTrue(httpKeyURL.Equals(secondHttpKeyURL)); HttpKeyUri thirdHttpKeyURL = HttpKeyUri.BuildHttpKeyUri(serverPublicKey, Host, Port, null, null); string expectedThirdURL = HttpKeyUri.HttpKeySchemeName + "://" + Host + ":" + Port + "/" + HttpKeyUri.RsaKeyType + ":" + serverPublicKey.Exponent + "." + serverPublicKey.Modulus; Assert.IsTrue(expectedThirdURL.Equals(thirdHttpKeyURL.ToString(), StringComparison.Ordinal)); Assert.IsTrue(HttpKeyUri.BuildHttpKeyUri(expectedThirdURL).Equals(thirdHttpKeyURL)); path = "/ick ?"; query = "?????? "; fragment = "###???///???"; HttpKeyUri escapedChars = HttpKeyUri.BuildHttpKeyUri(serverPublicKey, Host, Port, path, query + fragment); expectedHttpsURL = "https://" + Host + ":" + Port + "/ick%20%20%3F" + "??????%20%20%20%20" + "###???///???"; Assert.IsTrue(expectedHttpsURL.Equals(escapedChars.CreateHttpsUrl(), StringComparison.Ordinal)); path = "/ick/bick/bark/ark/mark/hark"; httpKeyURL = HttpKeyUri.BuildHttpKeyUri(serverPublicKey, Host, Port, path, extraValue); Assert.IsTrue(httpKeyURL.PathWithoutPublicKey.Equals(path, StringComparison.Ordinal)); httpKeyURL = HttpKeyUri.BuildHttpKeyUri(httpKeyURL.ToString()); Assert.IsTrue(httpKeyURL.PathWithoutPublicKey.Equals(path, StringComparison.Ordinal)); }