예제 #1
0
        void CheckMailGoogleCom(SecCertificate cert, int expectedRetainCount)
        {
            Assert.That(cert.Handle, Is.Not.EqualTo(IntPtr.Zero), "Handle");
            Assert.That(CFGetRetainCount(cert.Handle), Is.EqualTo(expectedRetainCount), "RetainCount");
            Assert.That(cert.SubjectSummary, Is.EqualTo("mail.google.com"), "SubjectSummary");
            Assert.That((nuint)(uint)mail_google_com.Length, Is.EqualTo(cert.DerData.Length), "DerData");
            if (TestRuntime.CheckXcodeVersion(8, 3))
            {
                Assert.That(cert.GetCommonName(), Is.EqualTo("mail.google.com"), "GetCommonName");
                Assert.That(cert.GetSerialNumber().ToStableString(), Is.EqualTo("<2b9f7ee5 ca25a625 14204782 753a9bb9>"), "GetSerialNumber");

                var emailAddresses = cert.GetEmailAddresses();
                Assert.IsTrue(emailAddresses == null || emailAddresses.Length == 0, "GetEmailAddresses");

                Assert.NotNull(cert.GetNormalizedIssuerSequence(), "GetNormalizedIssuerSequence");
                Assert.NotNull(cert.GetNormalizedSubjectSequence(), "GetNormalizedSubjectSequence");
                Assert.NotNull(cert.GetPublicKey(), "GetPublicKey");
            }
            if (TestRuntime.CheckXcodeVersion(9, 0))
            {
                NSError err;
                Assert.That(cert.GetSerialNumber(out err).ToStableString(), Is.EqualTo("<2b9f7ee5 ca25a625 14204782 753a9bb9>"), "GetSerialNumber/NSError");
                Assert.Null(err, "err");
            }
            if (TestRuntime.CheckXcodeVersion(10, 0))
            {
                Assert.NotNull(cert.GetKey(), "GetKey");
            }
        }
예제 #2
0
 void CheckMailGoogleCom(SecCertificate cert, int expectedRetainCount)
 {
     Assert.That(cert.Handle, Is.Not.EqualTo(IntPtr.Zero), "Handle");
     Assert.That(CFGetRetainCount(cert.Handle), Is.EqualTo(expectedRetainCount), "RetainCount");
     Assert.That(cert.SubjectSummary, Is.EqualTo("mail.google.com"), "SubjectSummary");
     Assert.That((nuint)(uint)mail_google_com.Length, Is.EqualTo(cert.DerData.Length), "DerData");
     if (TestRuntime.CheckXcodeVersion(8, 3))
     {
         Assert.That(cert.GetCommonName(), Is.EqualTo("mail.google.com"), "GetCommonName");
         Assert.That(cert.GetSerialNumber().Description, Is.EqualTo("<2b9f7ee5 ca25a625 14204782 753a9bb9>"), "GetSerialNumber");
         Assert.Null(cert.GetEmailAddresses(), "GetEmailAddresses");
         Assert.NotNull(cert.GetNormalizedIssuerSequence(), "GetNormalizedIssuerSequence");
         Assert.NotNull(cert.GetNormalizedSubjectSequence(), "GetNormalizedSubjectSequence");
         Assert.NotNull(cert.GetPublicKey(), "GetPublicKey");
     }
 }
예제 #3
0
        /*  Extract a public key from certificate and append to a header to all key types
         *  Returns nil if the key type in the certificate can not be recognized/extracted
         *  else base64 sha256 hashes of all combinations currently supported
         */
        string[] PublicKeyWithHeader(X509Certificate2 cert)
        {
            /* The return value */
            string[] allKeyWithHeaders = new string[kSupportedCertCount];
            int      currentKeys       = 0;

            /* We need to use ios native code to allow ECC public key extraction which is
             * not implemented in C#/Xamarin
             */
            byte[] rawData = cert.GetRawCertData();
            if (rawData == null)
            {
                return(null);
            }
            SecCertificate secCertificate = new SecCertificate(rawData);

            // Get public key and its byte representation for later copy
            SecKey publicKey = secCertificate.GetPublicKey();

            byte[] publicKeyBytes = publicKey.GetExternalRepresentation().ToArray();

            /* Append combinations header + public key */
            // ECC P256
            byte[] keyECCP256WithHeader = new byte[ecdsaSecp256r1SPKIHeader.Length + publicKeyBytes.Length];
            ecdsaSecp256r1SPKIHeader.CopyTo(keyECCP256WithHeader, 0);
            publicKeyBytes.CopyTo(keyECCP256WithHeader, ecdsaSecp256r1SPKIHeader.Length);
            allKeyWithHeaders[currentKeys++] = base64Sha2StringFromBytes(keyECCP256WithHeader);
            // RSA2048
            byte[] keyRSA2048WithHeader = new byte[rsa2048SPKIHeader.Length + publicKeyBytes.Length];
            rsa2048SPKIHeader.CopyTo(keyRSA2048WithHeader, 0);
            publicKeyBytes.CopyTo(keyRSA2048WithHeader, rsa2048SPKIHeader.Length);
            allKeyWithHeaders[currentKeys++] = base64Sha2StringFromBytes(keyRSA2048WithHeader);
            // ECC P384
            byte[] keyECCP384WithHeader = new byte[ecdsaSecp384r1SPKIHeader.Length + publicKeyBytes.Length];
            ecdsaSecp384r1SPKIHeader.CopyTo(keyECCP384WithHeader, 0);
            publicKeyBytes.CopyTo(keyECCP384WithHeader, ecdsaSecp384r1SPKIHeader.Length);
            allKeyWithHeaders[currentKeys++] = base64Sha2StringFromBytes(keyECCP384WithHeader);
            // RSA4096
            byte[] keyRSA4096WithHeader = new byte[rsa4096SPKIHeader.Length + publicKeyBytes.Length];
            rsa4096SPKIHeader.CopyTo(keyRSA4096WithHeader, 0);
            publicKeyBytes.CopyTo(keyRSA4096WithHeader, rsa4096SPKIHeader.Length);
            allKeyWithHeaders[currentKeys++] = base64Sha2StringFromBytes(keyRSA4096WithHeader);

            return(allKeyWithHeaders);
        }