[C++ API added] getAlternativeNameURI() 35/91735/4
authorsangwan.kwon <sangwan.kwon@samsung.com>
Tue, 11 Oct 2016 06:08:12 +0000 (15:08 +0900)
committersangwan.kwon <sangwan.kwon@samsung.com>
Wed, 12 Oct 2016 00:36:52 +0000 (09:36 +0900)
* API getAlternativeNameURI() should return list of
* alternativeNames hardcoded in certificate.

Change-Id: I2110ca33885da2910f5d93d7317bea8a8b19756f
Signed-off-by: sangwan.kwon <sangwan.kwon@samsung.com>
src/vcore/Certificate.cpp
src/vcore/Certificate.h
tests/vcore/test-certificate.cpp
tests/vcore/test-common.cpp
tests/vcore/test-common.h

index d2c5c0121ed054219d2c7c1fe6dad6c67b4d01a4..4b66f77e16fc6ba95d6c1358caf1f5aed6de6046 100644 (file)
@@ -423,7 +423,7 @@ std::string Certificate::getOCSPURL() const
        return retValue;
 }
 
-Certificate::AltNameSet Certificate::getAlternativeNameDNS() const
+Certificate::AltNameSet Certificate::getAlternativeName(int type) const
 {
        AltNameSet set;
        GENERAL_NAME *namePart = NULL;
@@ -436,14 +436,28 @@ Certificate::AltNameSet Certificate::getAlternativeNameDNS() const
                        VcoreThrowMsg(Certificate::Exception::OpensslInternalError,
                                                  "openssl sk_GENERAL_NAME_pop err.");
 
-               if (GEN_DNS == namePart->type) {
-                       char *temp = reinterpret_cast<char *>(ASN1_STRING_data(namePart->d.dNSName));
+               if (type == namePart->type) {
+                       char *temp;
+
+                       switch (type) {
+                       case GEN_DNS:
+                               temp = reinterpret_cast<char *>(ASN1_STRING_data(namePart->d.dNSName));
+                               break;
+
+                       case GEN_URI:
+                               temp = reinterpret_cast<char *>(ASN1_STRING_data(namePart->d.uniformResourceIdentifier));
+                               break;
+
+                       default:
+                               VcoreThrowMsg(Certificate::Exception::WrongParamError,
+                                                         "Not support alt name type : " << type);
+                       }
 
                        if (!temp) {
                                set.insert(std::string());
                        } else {
                                set.insert(std::string(temp));
-                               LogDebug("FOUND GEN_DNS: " << temp);
+                               LogDebug("FOUND AltName: " << temp);
                        }
                } else {
                        LogDebug("FOUND GEN TYPE ID: " << namePart->type);
@@ -453,6 +467,16 @@ Certificate::AltNameSet Certificate::getAlternativeNameDNS() const
        return set;
 }
 
+Certificate::AltNameSet Certificate::getAlternativeNameDNS() const
+{
+       return getAlternativeName(GEN_DNS);
+}
+
+Certificate::AltNameSet Certificate::getAlternativeNameURI() const
+{
+       return getAlternativeName(GEN_URI);
+}
+
 ASN1_TIME *Certificate::getNotAfterTime() const
 {
        auto timeafter = X509_get_notAfter(m_x509);
index 64673ab6fab31db562c3cf87ba6038db7a74e8ba..efaa6513e1989aed320be4407c9ffd91118a9eaf 100644 (file)
@@ -124,6 +124,7 @@ public:
        // 4 of them are "string similar" types so it is possible
        // to create more generic function.
        AltNameSet getAlternativeNameDNS() const;
+       AltNameSet getAlternativeNameURI() const;
 
        time_t getNotAfter() const;
 
@@ -176,5 +177,9 @@ protected:
        std::string getField(FieldType type, int fieldNid) const;
 
        X509 *m_x509;
+
+private:
+       AltNameSet getAlternativeName(int type) const;
+
 };
 } // namespace ValidationCore
index 0ad6e1b483a20270c2ad6f6781c7db597a5c8747..c7deecac1640ffd4d75cb21820602995ff467a19 100644 (file)
@@ -99,3 +99,20 @@ RUNNER_TEST(T0034_Certificate_isCA)
        Certificate cert3(TestData::google3rd, Certificate::FORM_BASE64);
        RUNNER_ASSERT(cert3.isCA() == 0);
 }
+
+/*
+ * test: Certificate::getAlternativeNameURI
+ * description: Certificate should parse data passed to object constructor.
+ * expected: Function getAlternativeNameURI should return list of
+ * alternativeNames hardcoded in certificate.
+ */
+RUNNER_TEST(T0035_Certificate_AltNameURI)
+{
+       Certificate cert(TestData::certGenUriIncluded, Certificate::FORM_BASE64);
+       Certificate::AltNameSet nameSet = cert.getAlternativeNameURI();
+       RUNNER_ASSERT(nameSet.size() == 8);
+       std::string str("URN:tizen:deviceid=2.0#R1q+lPsGCM7PAEPvzUcc38xPCLw=");
+       RUNNER_ASSERT(nameSet.find(str) != nameSet.end());
+       str = std::string("fakeURI");
+       RUNNER_ASSERT(nameSet.find(str) == nameSet.end());
+}
index c6aa2ce3094bab4107974ca6829ebf164dcb898e..cd045699c5f3c3845f377aeb8074ee51f017c453 100644 (file)
@@ -224,3 +224,34 @@ const std::string TestData::certVerisign =
        "GxP8YQSxi513O2dWVCXB8S6erIz9E/bcfdXoCPyQdn42y3IEoJvPvBS3S55fD4+Q"
        "Q43GPhumSg9a6S3hnyw8DX5OiUGmqgQrtSeDRsNmWqtWizEQbe+fotZpEn/7zYTa"
        "tk1ni/k5jDH/QeuG";
+
+const std::string TestData::certGenUriIncluded =
+       "MIIFKjCCBBKgAwIBAgIBZTANBgkqhkiG9w0BAQsFADCBnjELMAkGA1UEBhMCS1Ix"
+       "FDASBgNVBAgMC1NvdXRoIEtvcmVhMQ4wDAYDVQQHDAVTdXdvbjEmMCQGA1UECgwd"
+       "U2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4xDzANBgNVBAsMBk1vYmlsZTEw"
+       "MC4GA1UEAwwnU2Ftc3VuZyBUaXplbiBERVZFTE9QRVIgUHVibGljIENBIENsYXNz"
+       "MB4XDTE2MTAxMTA2MDcxNloXDTE3MTAxMTA2MDcxNlowcDERMA8GA1UEAwwIVGl6"
+       "ZW5TREsxCTAHBgNVBAsMADEJMAcGA1UECgwAMQkwBwYDVQQHDAAxCTAHBgNVBAgM"
+       "ADEJMAcGA1UEBhMAMSQwIgYJKoZIhvcNAQkBFhVqYzgxNS5sZWVAc2Ftc3VuZy5j"
+       "b20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCNnAGGY63LX79FH4cq"
+       "WXPCL995W3hZ8l1q9vlJgH00KV7jgPj0NTc2rjKgp/gmbco/vZV8Bp/tbAYDvVRu"
+       "8ObgcjiUDANm9jRJLNu0GBVmhbBQJI5rmZ9xJofJSEHTdaO8aeGfyAvMgdrzyvE1"
+       "QYX/QYKN5/YMMtf/A/uN1d+e20/F89UFsMGC/2LzkUwIJGe9PR1w6x/sb9+y6cap"
+       "XbfjoFN5TEL+nI5qxUNDmTXwglN6HVE3eBfw4Doz9SIKM0RH5vbUPOsmuuw0obHh"
+       "Qh5qpAGNGxzRibUM7Kv9rLpTtD6WpC7beVq8Gbct7zZCzEEEyAvf3vI4aDieOE/E"
+       "0tZxAgMBAAGjggGeMIIBmjCCAZYGA1UdEQSCAY0wggGJhhRVUk46dGl6ZW46cGFj"
+       "a2FnZWlkPYYzVVJOOnRpemVuOmRldmljZWlkPTIuMCNSMXErbFBzR0NNN1BBRVB2"
+       "elVjYzM4eFBDTHc9hjNVUk46dGl6ZW46ZGV2aWNlaWQ9Mi4wI1IycStsUHNHQ003"
+       "UEFFUHZ6VWNjMzh4UENMdz2GM1VSTjp0aXplbjpkZXZpY2VpZD0yLjAjUjNxK2xQ"
+       "c0dDTTdQQUVQdnpVY2MzOHhQQ0x3PYYzVVJOOnRpemVuOmRldmljZWlkPTIuMCNS"
+       "NHErbFBzR0NNN1BBRVB2elVjYzM4eFBDTHc9hjNVUk46dGl6ZW46ZGV2aWNlaWQ9"
+       "Mi4wI1I1cStsUHNHQ003UEFFUHZ6VWNjMzh4UENMdz2GM1VSTjp0aXplbjpkZXZp"
+       "Y2VpZD0yLjAjUjZxK2xQc0dDTTdQQUVQdnpVY2MzOHhQQ0x3PYYzVVJOOnRpemVu"
+       "OmRldmljZWlkPTIuMCNSN3ErbFBzR0NNN1BBRVB2elVjYzM4eFBDTHc9MA0GCSqG"
+       "SIb3DQEBCwUAA4IBAQBJ6uM+XOwTFl39wj5VdvDZr5GzreKG8PUw7L2wLeVxC2h9"
+       "+q3jKannvhrHjCC6mPzjVhYQgoH02ywqDmfMJnE8h1GaF2KGZbuVkL/S02UZ+CwJ"
+       "6J/2dBsakzn1yAjloGq1TQ/AFeN7tEC1ZB88XeLlH6fBKLC41HxLlEKZmyVU281Y"
+       "Hu1gDU7+7BzMY21+RkPKVCJXnyZmv34LL+V199OnLphurx4kfrkRKz2ujTDefzLG"
+       "qERauXufUJ8eWPBgjgxewkQJeUK+pqQ1XbvQA7hHDTxbtbU4sjYHIrDEm2LVJB7b"
+       "+eUuTos3aMVELp3gK4wnj/WoSPJ4hudhGUco4cLT";
+
index 204cf51cb4a09993d648042fd590c5c0ffc65733..247baad1657588fe215d26903cdab27b5607e2ba 100644 (file)
@@ -43,4 +43,5 @@ extern const std::string google2nd;
 extern const std::string google3rd;
 
 extern const std::string certVerisign;
+extern const std::string certGenUriIncluded;
 }