Add tests for vcore certificate functions 90/315890/3
authorLe <xuan.tien@samsung.com>
Fri, 9 Aug 2024 02:48:42 +0000 (09:48 +0700)
committerDariusz Michaluk <d.michaluk@samsung.com>
Tue, 20 Aug 2024 07:06:24 +0000 (09:06 +0200)
Change-Id: Id26b99d5ebb6fe2c7ef2d1d7685b95ded8ed549d
Signed-off-by: Le <xuan.tien@samsung.com>
unit-tests/CMakeLists.txt
unit-tests/test_vcore_certificate.cpp [new file with mode: 0644]

index aaea5f6111c0a142a74d609761edca741cd9faa2..45cf69ff99fb40bd854af94882785a234d6ac2c9 100644 (file)
@@ -76,6 +76,7 @@ SET(UNIT_TESTS_SOURCES
     test_vcore_signature_finder.cpp
     test_vcore_signature_reader.cpp
     test_vcore_signature_validator.cpp
+    test_vcore_certificate.cpp
     test_cert_server_db.cpp
     test_cert_server_logic.cpp
     colour_log_formatter.cpp
diff --git a/unit-tests/test_vcore_certificate.cpp b/unit-tests/test_vcore_certificate.cpp
new file mode 100644 (file)
index 0000000..c7b451b
--- /dev/null
@@ -0,0 +1,153 @@
+/*
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+#include "test_constant.h"
+#include "test_common.h"
+#include "test_macros.h"
+#include "vcore/Certificate.h"
+#include <string>
+#include <iostream>
+
+using namespace ValidationCore;
+using namespace std;
+
+const std::string certVerisign =
+       "MIIG+DCCBeCgAwIBAgIQU9K++SSnJF6DygHkbKokdzANBgkqhkiG9w0BAQUFADCB"
+       "vjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL"
+       "ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2Ug"
+       "YXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykwNjE4MDYGA1UEAxMv"
+       "VmVyaVNpZ24gQ2xhc3MgMyBFeHRlbmRlZCBWYWxpZGF0aW9uIFNTTCBTR0MgQ0Ew"
+       "HhcNMTAwNTI2MDAwMDAwWhcNMTIwNTI1MjM1OTU5WjCCASkxEzARBgsrBgEEAYI3"
+       "PAIBAxMCVVMxGTAXBgsrBgEEAYI3PAIBAhMIRGVsYXdhcmUxGzAZBgNVBA8TElYx"
+       "LjAsIENsYXVzZSA1LihiKTEQMA4GA1UEBRMHMjQ5Nzg4NjELMAkGA1UEBhMCVVMx"
+       "DjAMBgNVBBEUBTk0MDQzMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHFA1N"
+       "b3VudGFpbiBWaWV3MSIwIAYDVQQJFBk0ODcgRWFzdCBNaWRkbGVmaWVsZCBSb2Fk"
+       "MRcwFQYDVQQKFA5WZXJpU2lnbiwgSW5jLjEmMCQGA1UECxQdIFByb2R1Y3Rpb24g"
+       "U2VjdXJpdHkgU2VydmljZXMxGTAXBgNVBAMUEHd3dy52ZXJpc2lnbi5jb20wggEi"
+       "MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCj+PvvK+fZOXwno0yT/OTy2Zm9"
+       "ehnZjTtO/X2IWBEa3jG30C52uHFQI4NmXiQVNvJHkBaAj0ilVjvGdxXmkyyFsugt"
+       "IWOTZ8pSKdX1tmGFIon6Ko9+lBFkVkudA1ogAUbtTB8IcdeOlpK78T4SjdVMhY18"
+       "150YzSw6hRKlw52wBaDxtGZElvOth41K7TUcaDnQVzz5SBPW5MUhi7AWrdoSk17O"
+       "BozOzmB/jkYDVDnwLcbR89SLHEOle/idSYSDQUmab3y0JS8RyQV1+DB70mnFALnD"
+       "fLiL47nMQQCGxXgp5voQ2YmSXhevKmEJ9vvtC6C7yv2W6yomfS/weUEce9pvAgMB"
+       "AAGjggKCMIICfjCBiwYDVR0RBIGDMIGAghB3d3cudmVyaXNpZ24uY29tggx2ZXJp"
+       "c2lnbi5jb22CEHd3dy52ZXJpc2lnbi5uZXSCDHZlcmlzaWduLm5ldIIRd3d3LnZl"
+       "cmlzaWduLm1vYmmCDXZlcmlzaWduLm1vYmmCD3d3dy52ZXJpc2lnbi5ldYILdmVy"
+       "aXNpZ24uZXUwCQYDVR0TBAIwADAdBgNVHQ4EFgQU8oBwK/WBXCZDWi0dbuDgPyTK"
+       "iJIwCwYDVR0PBAQDAgWgMD4GA1UdHwQ3MDUwM6AxoC+GLWh0dHA6Ly9FVkludGwt"
+       "Y3JsLnZlcmlzaWduLmNvbS9FVkludGwyMDA2LmNybDBEBgNVHSAEPTA7MDkGC2CG"
+       "SAGG+EUBBxcGMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LnZlcmlzaWduLmNv"
+       "bS9ycGEwKAYDVR0lBCEwHwYIKwYBBQUHAwEGCCsGAQUFBwMCBglghkgBhvhCBAEw"
+       "HwYDVR0jBBgwFoAUTkPIHXbvN1N6T/JYb5TzOOLVvd8wdgYIKwYBBQUHAQEEajBo"
+       "MCsGCCsGAQUFBzABhh9odHRwOi8vRVZJbnRsLW9jc3AudmVyaXNpZ24uY29tMDkG"
+       "CCsGAQUFBzAChi1odHRwOi8vRVZJbnRsLWFpYS52ZXJpc2lnbi5jb20vRVZJbnRs"
+       "MjAwNi5jZXIwbgYIKwYBBQUHAQwEYjBgoV6gXDBaMFgwVhYJaW1hZ2UvZ2lmMCEw"
+       "HzAHBgUrDgMCGgQUS2u5KJYGDLvQUjibKaxLB4shBRgwJhYkaHR0cDovL2xvZ28u"
+       "dmVyaXNpZ24uY29tL3ZzbG9nbzEuZ2lmMA0GCSqGSIb3DQEBBQUAA4IBAQB9VZxB"
+       "wDMRGyhFWYkY5rwUVGuDJiGeas2xRJC0G4+riQ7IN7pz2a2BhktmZ5HbxXL4ZEY4"
+       "yMN68DEVErhtKiuL02ng27alhlngadKQzSL8pLdmQ+3jEwm9nva5C/7pbeqy+qGF"
+       "is4IWNYOc4HKNkABxXm5v0ouys8HPNkTLFLep0gLqRXW3gYN2XbKUWMs7z7hJpkY"
+       "GxP8YQSxi513O2dWVCXB8S6erIz9E/bcfdXoCPyQdn42y3IEoJvPvBS3S55fD4+Q"
+       "Q43GPhumSg9a6S3hnyw8DX5OiUGmqgQrtSeDRsNmWqtWizEQbe+fotZpEn/7zYTa"
+       "tk1ni/k5jDH/QeuG";
+
+const std::string 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";
+
+const std::string CertContainAIA =
+       "MIIC7jCCAlegAwIBAgIBADANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJLUjEO"
+       "MAwGA1UECAwFU2VvdWwxEDAOBgNVBAoMB1NhbXN1bmcxEzARBgNVBAsMClRpemVu"
+       "IFRlc3QxGjAYBgNVBAMMEVRlc3QgSW50ZXJtZWRpYXRlMRswGQYJKoZIhvcNAQkB"
+       "Fgx0dEBnbWFpbC5jb20wIBcNMTkwNzMwMTYzNTM2WhgPOTk5OTEyMzExNjM1MzZa"
+       "MHUxCzAJBgNVBAYTAktSMQ4wDAYDVQQIDAVTZW91bDEQMA4GA1UECgwHU2Ftc3Vu"
+       "ZzETMBEGA1UECwwKVGl6ZW4gVGVzdDESMBAGA1UEAwwJVGVzdCBMZWFmMRswGQYJ"
+       "KoZIhvcNAQkBFgx0dEBnbWFpbC5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ"
+       "AoGBAMOxszN5ySGPlD8ZbGxAOM8jjdF+SVOjZn/nvs2csX8FksUBTQmdkM2M2F14"
+       "1VB/4d3EgLswVyeSg+yHf+DeuQR1WBpezoqttfi+v3hFQGUJ1/waa+ktFLTaNnlo"
+       "yrbJ9KXxBn9V3Qrs3PJt3xOJK4Kw1FXnneAmraZFmHFifBaPAgMBAAGjgYMwgYAw"
+       "cwYIKwYBBQUHAQEEZzBlMCEGCCsGAQUFBzABhhVodHRwOi8vMTI3LjAuMC4xOjg4"
+       "ODgwQAYIKwYBBQUHMAKGNGh0dHA6Ly9TVlJTZWN1cmUtRzMtYWlhLnZlcmlzaWdu"
+       "LmNvbS9TVlJTZWN1cmVHMy5jZXIwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOB"
+       "gQCRXENZEGm/gCkDG18LahNiS4cjmTQ4f73NKNfhIZfsI2MBDHAfN9rULbJ3uMF+"
+       "jAmQ3ez86SC9BEMMeTXUl+mW4yUJq4dZRS4DAzExQjBRMwNK/BsAqsS49b7Q67Pq"
+       "cpUjMYn49z3eRbU0uiYU8Ptvwm19A/lwB7GG+yuw4a+Csw==";
+
+BOOST_AUTO_TEST_SUITE(VCORE_CERTIFICATE)
+
+POSITIVE_TEST_CASE(T_check_certificate_info)
+{
+       Certificate cert1(certVerisign, Certificate::FORM_BASE64);
+
+       Certificate::AltNameSet altNameSet1 = cert1.getAlternativeNameDNS();
+       BOOST_CHECK(altNameSet1.size() > 0);
+
+       Certificate::Fingerprint fingerprint = cert1.getFingerprint(Certificate::FINGERPRINT_SHA1);
+
+       std::string colonHex = cert1.FingerprintToColonHex(fingerprint);
+       BOOST_CHECK_EQUAL(colonHex, "B9:72:1E:D5:49:ED:BF:31:84:D8:27:0C:FE:03:11:19:DF:C2:2B:0A");
+
+       Certificate cert2(certGenUriIncluded, Certificate::FORM_BASE64);
+
+       Certificate::AltNameSet altNameSet2 = cert2.getAlternativeNameURI();
+       BOOST_CHECK(altNameSet2.size() > 0);
+       BOOST_CHECK(cert2.isCA() == 0);
+
+       Certificate cert3(CertContainAIA, Certificate::FORM_BASE64);
+
+       std::string ocspURL = cert3.getOCSPURL();
+       BOOST_CHECK_EQUAL(ocspURL, "http://127.0.0.1:8888");
+}
+
+NEGATIVE_TEST_CASE(T_create_certificate_wrong_param)
+{
+       BOOST_CHECK_THROW(Certificate::createFromFile("NULL"), Certificate::Exception::WrongParamError);
+       BOOST_CHECK_THROW(Certificate cert(NULL), Certificate::Exception::WrongParamError);
+}
+
+NEGATIVE_TEST_CASE(T_check_signed_by_with_null_param)
+{
+       Certificate certificate(certVerisign, Certificate::FORM_BASE64);
+       BOOST_CHECK(!certificate.isSignedBy(NULL));
+}
+
+BOOST_AUTO_TEST_SUITE_END()
\ No newline at end of file