3 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
20 #include <dpl/test/test_runner.h>
21 #include <vcore/CryptoHash.h>
22 #include <vcore/SignatureFinder.h>
23 #include <vcore/SignatureReader.h>
24 #include <vcore/SignatureValidator.h>
25 #include <vcore/WrtSignatureValidator.h>
27 #include <vcore/RevocationCheckerBase.h>
31 const std::string widget_path =
32 "/usr/apps/widget/tests/vcore_widget_uncompressed/";
33 const std::string widget_negative_hash_path =
34 "/usr/apps/widget/tests/vcore_widget_uncompressed_negative_hash/";
35 const std::string widget_negative_signature_path =
36 "/usr/apps/widget/tests/vcore_widget_uncompressed_negative_signature/";
37 const std::string widget_negative_certificate_path =
38 "/usr/apps/widget/tests/vcore_widget_uncompressed_negative_certificate/";
39 const std::string widget_partner_path =
40 "/usr/apps/widget/tests/vcore_widget_uncompressed_partner/";
41 const std::string widget_partner_operator_path =
42 "/usr/apps/widget/tests/vcore_widget_uncompressed_partner_operator/";
44 inline const char* GetSignatureXmlSchema()
46 return "/usr/share/wrt-engine/schema.xsd";
50 const std::string keys_path = "/usr/apps/widget/tests/vcore_keys/";
51 const std::string widget_store_path = "/usr/apps/widget/tests/vcore_widgets/";
52 const std::string cert_store_path = "/usr/apps/widget/tests/vcore_certs/";
54 const std::string anka_ec_key_type = "urn:oid:1.2.840.10045.3.1.7";
55 const std::string anka_ec_public_key =
56 "BGi9RmTUjpqCpQjx6SSiKdfmtjQBFNSN7ghm6TuaH9r4x73WddeLxLioH3VEmFLC+QLiR"\
57 "kPxDxL/6YmQdgfGrqk=";
59 const std::string rsa_modulus =
60 "ocwjKEFaPxLNcPTz2PtT2Gyu5jzkWaPo4thjZo3rXuNbD4TzjY02UGnTxvflNeORLpSS1"\
61 "PeYr/1E/Nhr7qQAzj9g0DwW7p8zQEdOUi3v76VykeB0pFJH+0Fxp6LVBX9Z+EvZk+dbOy"\
62 "GJ4Njm9B6M09axXlV11Anj9B/HYUDfDX8=";
63 const std::string rsa_exponent = "AQAB";
65 const std::string magda_dsa_p =
66 "2BYIQj0ePUVxzrdBT41eCblraa9Dqag7QXFMCRM2PtyS22JPDKuV77tBc/jg0V3htHWdR"\
67 "q9n6/kQDwrP7FIPoLATLIiC3oAYWj46Mr6d9k/tt/JZU6PvULmB2k1wrrmvKUi+U+I5Ro"\
68 "qe8ui8lqR9pp9u2WCh2QmFfCohKNjN5qs=";
69 const std::string magda_dsa_q = "4p4JcDqz+S7CbWyd8txApZw0sik=";
70 const std::string magda_dsa_g =
71 "AQrLND1ZGFvzwBpPPXplmPh1ijPx1O2gQEvPvyjR88guWcGqQc0m7dTb6PEvbI/oZ0o91"\
72 "k7VEkfthURnNR1WtOLT8dmAuKQfwTQLPwCwUM/QiuWSlCyKLTE4Ev8aOG7ZqWudsKm/td"\
73 "n9pUNGtcod1wo1ZtP7PfEJ6rYZGQDOlz8=";
75 const std::string tizen_partner =
76 "MIICozCCAgwCCQD9IBoOxzq2hjANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMC"
77 "S1IxDjAMBgNVBAgMBVN1d29uMQ4wDAYDVQQHDAVTdXdvbjEWMBQGA1UECgwNVGl6"
78 "ZW4gVGVzdCBDQTEiMCAGA1UECwwZVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEq"
79 "MCgGA1UEAwwhVGl6ZW4gUGFydG5lciBEaXN0cmlidXRvciBSb290IENBMB4XDTEy"
80 "MTAyNjA4MTIzMVoXDTIyMTAyNDA4MTIzMVowgZUxCzAJBgNVBAYTAktSMQ4wDAYD"
81 "VQQIDAVTdXdvbjEOMAwGA1UEBwwFU3V3b24xFjAUBgNVBAoMDVRpemVuIFRlc3Qg"
82 "Q0ExIjAgBgNVBAsMGVRpemVuIERpc3RyaWJ1dG9yIFRlc3QgQ0ExKjAoBgNVBAMM"
83 "IVRpemVuIFBhcnRuZXIgRGlzdHJpYnV0b3IgUm9vdCBDQTCBnzANBgkqhkiG9w0B"
84 "AQEFAAOBjQAwgYkCgYEAnIBA2qQEaMzGalP0kzvwUxdCC6ybSC/fb+M9iGvt8QXp"
85 "ic2yARQB+bIhfbEu1XHwE1jCAGxKd6uT91b4FWr04YwnBPoRX4rBGIYlqo/dg+pS"
86 "rGyFjy7vfr0BOdWp2+WPlTe7SOS6bVauncrSoHxX0spiLaU5LU686BKr7YaABV0C"
87 "AwEAATANBgkqhkiG9w0BAQUFAAOBgQAX0Tcfmxcs1TUPBdr1U1dx/W/6Y4PcAF7n"
88 "DnMrR0ZNRPgeSCiVLax1bkHxcvW74WchdKIb24ZtAsFwyrsmUCRV842YHdfddjo6"
89 "xgUu7B8n7hQeV3EADh6ft/lE8nalzAl9tALTxAmLtYvEYA7thvDoKi1k7bN48izL"
92 const std::string tizen_partner_operator =
93 "MIICzDCCAjWgAwIBAgIJAJrv22F9wyp/MA0GCSqGSIb3DQEBBQUAMIGeMQswCQYD"
94 "VQQGEwJLUjEOMAwGA1UECAwFU3V3b24xDjAMBgNVBAcMBVN1d29uMRYwFAYDVQQK"
95 "DA1UaXplbiBUZXN0IENBMSIwIAYDVQQLDBlUaXplbiBEaXN0cmlidXRvciBUZXN0"
96 "IENBMTMwMQYDVQQDDCpUaXplbiBQYXJ0bmVyLU9wZXJhdG9yIERpc3RyaWJ1dG9y"
97 "IFJvb3QgQ0EwHhcNMTIxMjEzMDUzOTMyWhcNMjIxMjExMDUzOTMyWjCBnjELMAkG"
98 "A1UEBhMCS1IxDjAMBgNVBAgMBVN1d29uMQ4wDAYDVQQHDAVTdXdvbjEWMBQGA1UE"
99 "CgwNVGl6ZW4gVGVzdCBDQTEiMCAGA1UECwwZVGl6ZW4gRGlzdHJpYnV0b3IgVGVz"
100 "dCBDQTEzMDEGA1UEAwwqVGl6ZW4gUGFydG5lci1PcGVyYXRvciBEaXN0cmlidXRv"
101 "ciBSb290IENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9X0Hw0EfAuagg"
102 "De9h6Jtvh8Df4fyVbvLm9VNea/iVP3/qTbG8tNqoQ32lu0SwzAZBnjpvpbxzsWs9"
103 "pSYo7Ys1fymHlu+gf+kmTGTVscBrAHWkr4O0m33x2FYfy/wmu+IImnRDYDud83rN"
104 "tjQmMO6BihN9Lb6kLiEtVIa8ITwdQwIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0G"
105 "CSqGSIb3DQEBBQUAA4GBAHS2M2UnfEsZf80/sT84xTcfASXgpFL/1M5HiAVpR+1O"
106 "UwLpLyqHiGQaASuADDeGEfcIqEf8gP1SzvnAZqLx9GchbOrOKRleooVFH7PRxFBS"
107 "VWJ5Fq46dJ1mCgTWSkrL6dN5j9hWCzzGfv0Wco+NAf61n9kVbCv7AScIJwQNltOy";
109 const std::string googleCA =
110 "MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG"
111 "A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz"
112 "cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2"
113 "MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV"
114 "BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt"
115 "YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN"
116 "ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE"
117 "BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is"
118 "I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G"
119 "CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do"
120 "lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc"
121 "AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k";
123 const std::string google2nd =
124 "MIIDIzCCAoygAwIBAgIEMAAAAjANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJV"
125 "UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xNzA1BgNVBAsTLkNsYXNzIDMgUHVi"
126 "bGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNTEzMDAw"
127 "MDAwWhcNMTQwNTEyMjM1OTU5WjBMMQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhh"
128 "d3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEWMBQGA1UEAxMNVGhhd3RlIFNHQyBD"
129 "QTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1NNn0I0Vf67NMf59HZGhPwtx"
130 "PKzMyGT7Y/wySweUvW+Aui/hBJPAM/wJMyPpC3QrccQDxtLN4i/1CWPN/0ilAL/g"
131 "5/OIty0y3pg25gqtAHvEZEo7hHUD8nCSfQ5i9SGraTaEMXWQ+L/HbIgbBpV8yeWo"
132 "3nWhLHpo39XKHIdYYBkCAwEAAaOB/jCB+zASBgNVHRMBAf8ECDAGAQH/AgEAMAsG"
133 "A1UdDwQEAwIBBjARBglghkgBhvhCAQEEBAMCAQYwKAYDVR0RBCEwH6QdMBsxGTAX"
134 "BgNVBAMTEFByaXZhdGVMYWJlbDMtMTUwMQYDVR0fBCowKDAmoCSgIoYgaHR0cDov"
135 "L2NybC52ZXJpc2lnbi5jb20vcGNhMy5jcmwwMgYIKwYBBQUHAQEEJjAkMCIGCCsG"
136 "AQUFBzABhhZodHRwOi8vb2NzcC50aGF3dGUuY29tMDQGA1UdJQQtMCsGCCsGAQUF"
137 "BwMBBggrBgEFBQcDAgYJYIZIAYb4QgQBBgpghkgBhvhFAQgBMA0GCSqGSIb3DQEB"
138 "BQUAA4GBAFWsY+reod3SkF+fC852vhNRj5PZBSvIG3dLrWlQoe7e3P3bB+noOZTc"
139 "q3J5Lwa/q4FwxKjt6lM07e8eU9kGx1Yr0Vz00YqOtCuxN5BICEIlxT6Ky3/rbwTR"
140 "bcV0oveifHtgPHfNDs5IAn8BL7abN+AqKjbc1YXWrOU/VG+WHgWv";
142 const std::string google3rd =
143 "MIIDIjCCAougAwIBAgIQK59+5colpiUUIEeCdTqbuTANBgkqhkiG9w0BAQUFADBM"
144 "MQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkg"
145 "THRkLjEWMBQGA1UEAxMNVGhhd3RlIFNHQyBDQTAeFw0xMTEwMjYwMDAwMDBaFw0x"
146 "MzA5MzAyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlh"
147 "MRYwFAYDVQQHFA1Nb3VudGFpbiBWaWV3MRMwEQYDVQQKFApHb29nbGUgSW5jMRgw"
148 "FgYDVQQDFA9tYWlsLmdvb2dsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ"
149 "AoGBAK85FZho5JL+T0/xu/8NLrD+Jaq9aARnJ+psQ0ynbcvIj36B7ocmJRASVDOe"
150 "qj2bj46Ss0sB4/lKKcMP/ay300yXKT9pVc9wgwSvLgRudNYPFwn+niAkJOPHaJys"
151 "Eb2S5LIbCfICMrtVGy0WXzASI+JMSo3C2j/huL/3OrGGvvDFAgMBAAGjgecwgeQw"
152 "DAYDVR0TAQH/BAIwADA2BgNVHR8ELzAtMCugKaAnhiVodHRwOi8vY3JsLnRoYXd0"
153 "ZS5jb20vVGhhd3RlU0dDQ0EuY3JsMCgGA1UdJQQhMB8GCCsGAQUFBwMBBggrBgEF"
154 "BQcDAgYJYIZIAYb4QgQBMHIGCCsGAQUFBwEBBGYwZDAiBggrBgEFBQcwAYYWaHR0"
155 "cDovL29jc3AudGhhd3RlLmNvbTA+BggrBgEFBQcwAoYyaHR0cDovL3d3dy50aGF3"
156 "dGUuY29tL3JlcG9zaXRvcnkvVGhhd3RlX1NHQ19DQS5jcnQwDQYJKoZIhvcNAQEF"
157 "BQADgYEANYARzVI+hCn7wSjhIOUCj19xZVgdYnJXPOZeJWHTy60i+NiBpOf0rnzZ"
158 "wW2qkw1iB5/yZ0eZNDNPPQJ09IHWOAgh6OKh+gVBnJzJ+fPIo+4NpddQVF4vfXm3"
159 "fgp8tuIsqK7+lNfNFjBxBKqeecPStiSnJavwSI4vw6e7UN0Pz7A=";
161 const std::string certVerisign =
162 "MIIG+DCCBeCgAwIBAgIQU9K++SSnJF6DygHkbKokdzANBgkqhkiG9w0BAQUFADCB"
163 "vjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL"
164 "ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2Ug"
165 "YXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykwNjE4MDYGA1UEAxMv"
166 "VmVyaVNpZ24gQ2xhc3MgMyBFeHRlbmRlZCBWYWxpZGF0aW9uIFNTTCBTR0MgQ0Ew"
167 "HhcNMTAwNTI2MDAwMDAwWhcNMTIwNTI1MjM1OTU5WjCCASkxEzARBgsrBgEEAYI3"
168 "PAIBAxMCVVMxGTAXBgsrBgEEAYI3PAIBAhMIRGVsYXdhcmUxGzAZBgNVBA8TElYx"
169 "LjAsIENsYXVzZSA1LihiKTEQMA4GA1UEBRMHMjQ5Nzg4NjELMAkGA1UEBhMCVVMx"
170 "DjAMBgNVBBEUBTk0MDQzMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHFA1N"
171 "b3VudGFpbiBWaWV3MSIwIAYDVQQJFBk0ODcgRWFzdCBNaWRkbGVmaWVsZCBSb2Fk"
172 "MRcwFQYDVQQKFA5WZXJpU2lnbiwgSW5jLjEmMCQGA1UECxQdIFByb2R1Y3Rpb24g"
173 "U2VjdXJpdHkgU2VydmljZXMxGTAXBgNVBAMUEHd3dy52ZXJpc2lnbi5jb20wggEi"
174 "MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCj+PvvK+fZOXwno0yT/OTy2Zm9"
175 "ehnZjTtO/X2IWBEa3jG30C52uHFQI4NmXiQVNvJHkBaAj0ilVjvGdxXmkyyFsugt"
176 "IWOTZ8pSKdX1tmGFIon6Ko9+lBFkVkudA1ogAUbtTB8IcdeOlpK78T4SjdVMhY18"
177 "150YzSw6hRKlw52wBaDxtGZElvOth41K7TUcaDnQVzz5SBPW5MUhi7AWrdoSk17O"
178 "BozOzmB/jkYDVDnwLcbR89SLHEOle/idSYSDQUmab3y0JS8RyQV1+DB70mnFALnD"
179 "fLiL47nMQQCGxXgp5voQ2YmSXhevKmEJ9vvtC6C7yv2W6yomfS/weUEce9pvAgMB"
180 "AAGjggKCMIICfjCBiwYDVR0RBIGDMIGAghB3d3cudmVyaXNpZ24uY29tggx2ZXJp"
181 "c2lnbi5jb22CEHd3dy52ZXJpc2lnbi5uZXSCDHZlcmlzaWduLm5ldIIRd3d3LnZl"
182 "cmlzaWduLm1vYmmCDXZlcmlzaWduLm1vYmmCD3d3dy52ZXJpc2lnbi5ldYILdmVy"
183 "aXNpZ24uZXUwCQYDVR0TBAIwADAdBgNVHQ4EFgQU8oBwK/WBXCZDWi0dbuDgPyTK"
184 "iJIwCwYDVR0PBAQDAgWgMD4GA1UdHwQ3MDUwM6AxoC+GLWh0dHA6Ly9FVkludGwt"
185 "Y3JsLnZlcmlzaWduLmNvbS9FVkludGwyMDA2LmNybDBEBgNVHSAEPTA7MDkGC2CG"
186 "SAGG+EUBBxcGMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LnZlcmlzaWduLmNv"
187 "bS9ycGEwKAYDVR0lBCEwHwYIKwYBBQUHAwEGCCsGAQUFBwMCBglghkgBhvhCBAEw"
188 "HwYDVR0jBBgwFoAUTkPIHXbvN1N6T/JYb5TzOOLVvd8wdgYIKwYBBQUHAQEEajBo"
189 "MCsGCCsGAQUFBzABhh9odHRwOi8vRVZJbnRsLW9jc3AudmVyaXNpZ24uY29tMDkG"
190 "CCsGAQUFBzAChi1odHRwOi8vRVZJbnRsLWFpYS52ZXJpc2lnbi5jb20vRVZJbnRs"
191 "MjAwNi5jZXIwbgYIKwYBBQUHAQwEYjBgoV6gXDBaMFgwVhYJaW1hZ2UvZ2lmMCEw"
192 "HzAHBgUrDgMCGgQUS2u5KJYGDLvQUjibKaxLB4shBRgwJhYkaHR0cDovL2xvZ28u"
193 "dmVyaXNpZ24uY29tL3ZzbG9nbzEuZ2lmMA0GCSqGSIb3DQEBBQUAA4IBAQB9VZxB"
194 "wDMRGyhFWYkY5rwUVGuDJiGeas2xRJC0G4+riQ7IN7pz2a2BhktmZ5HbxXL4ZEY4"
195 "yMN68DEVErhtKiuL02ng27alhlngadKQzSL8pLdmQ+3jEwm9nva5C/7pbeqy+qGF"
196 "is4IWNYOc4HKNkABxXm5v0ouys8HPNkTLFLep0gLqRXW3gYN2XbKUWMs7z7hJpkY"
197 "GxP8YQSxi513O2dWVCXB8S6erIz9E/bcfdXoCPyQdn42y3IEoJvPvBS3S55fD4+Q"
198 "Q43GPhumSg9a6S3hnyw8DX5OiUGmqgQrtSeDRsNmWqtWizEQbe+fotZpEn/7zYTa"
201 const std::string crlExampleCertificate =
202 "MIIFlDCCBHygAwIBAgIBADANBgkqhkiG9w0BAQUFADBDMRIwEAYKCZImiZPyLGQB"
203 "GRYCZXMxGDAWBgoJkiaJk/IsZAEZFghpcmlzZ3JpZDETMBEGA1UEAxMKSVJJU0dy"
204 "aWRDQTAeFw0wNTA2MjgwNTAyMjhaFw0xNTA2MjYwNTAyMjhaMEMxEjAQBgoJkiaJ"
205 "k/IsZAEZFgJlczEYMBYGCgmSJomT8ixkARkWCGlyaXNncmlkMRMwEQYDVQQDEwpJ"
206 "UklTR3JpZENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1CQiWlff"
207 "ajoMSTuismKqLQ+Mt33Tq4bBpCZvCBXhqan1R0ksILPtK1L7C8QWqPk6AZZpuNmY"
208 "cNVtJGc8ksgDWvX0EB3GKwZTZ8RrSRlSEe9Otq+Ur7S9uxM1JMmCr6zZTMFANzBS"
209 "4btnduV78C09IhFYG4OW8IPhNrbfPaeOR+PRPAa/qdSONAwTrM1sZkIvGpAkBWM6"
210 "Pn7TK9BAK6GLvwgii780fWj3Cwgmp8EDCTievBbWj+z8/apMEy9R0vyB2dWNNCnk"
211 "6q8VvrjgMsJt33O3BqOoBuZ8R/SS9OFWLFSU3s7cfrRaUSJk/Mx8OGFizRkcXSzX"
212 "0Nidcg7hX5i78wIDAQABo4ICkTCCAo0wDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E"
213 "FgQUnUJkLlupXvH/bMg8NtPxtkOYrRowawYDVR0jBGQwYoAUnUJkLlupXvH/bMg8"
214 "NtPxtkOYrRqhR6RFMEMxEjAQBgoJkiaJk/IsZAEZFgJlczEYMBYGCgmSJomT8ixk"
215 "ARkWCGlyaXNncmlkMRMwEQYDVQQDEwpJUklTR3JpZENBggEAMA4GA1UdDwEB/wQE"
216 "AwIBxjARBglghkgBhvhCAQEEBAMCAAcwOwYJYIZIAYb4QgENBC4WLElSSVNHcmlk"
217 "IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENlcnRpZmljYXRlMIGZBgNVHR8EgZEw"
218 "gY4wLqAsoCqGKGh0dHA6Ly93d3cuaXJpc2dyaWQuZXMvcGtpL2NybC9jYWNybC5w"
219 "ZW0wXKBaoFiGVmxkYXA6Ly9sZGFwLmlyaXNncmlkLmVzOjEzODAvY249SVJJU0dy"
220 "aWRDQSxkYz1pcmlzZ3JpZCxkYz1lcz9jZXJ0aWZpY2F0ZVJldm9jYXRpb25MaXN0"
221 "MDcGCWCGSAGG+EIBAwQqFihodHRwOi8vd3d3LmlyaXNncmlkLmVzL3BraS9jcmwv"
222 "Y2FjcmwucGVtME4GCWCGSAGG+EIBCARBFj9odHRwOi8vd3d3LmlyaXNncmlkLmVz"
223 "L3BraS9wb2xpY3kvMS4zLjYuMS40LjEuNzU0Ny4yLjIuNC4xLjEuMS8waQYDVR0g"
224 "BGIwYDBeBg0rBgEEAbp7AgIEAQEBME0wSwYIKwYBBQUHAgEWP2h0dHA6Ly93d3cu"
225 "aXJpc2dyaWQuZXMvcGtpL3BvbGljeS8xLjMuNi4xLjQuMS43NTQ3LjIuMi40LjEu"
226 "MS4xLzANBgkqhkiG9w0BAQUFAAOCAQEAaqRfyLER+P2QOZLLdz66m7FGsgtFsAEx"
227 "wiNrIChFWfyHVZG7Ph1fn/GDD5LMsrU23lx3NBN5/feHuut1XNYKNs8vtV07D70r"
228 "DKjUlPbmWV0B+/GDxe1FDGop/tKQfyHSUaBuauXChFU/2INu5lhBerNl7QxNJ1ws"
229 "cWGiT7R+L/2EjgzWgH1V/0zmIOMep6kY7MUs8rlyF0O5MNFs232cA1trl9kvhAGU"
230 "9p58Enf5DWMrh17SPH586yIJeiWZtPez9G54ftY+XIqfn0X0zso0dnoXNJQYS043"
231 "/5vSnoHdRx/EmN8yjeEavZtC48moN0iJ38eB44uKgCD77rZW5s1XqA==";
236 // explicit TestCleanup(bool bCheckForFakeVerification = false)
238 // if (bCheckForFakeVerification) {
239 // bool bUnsetEnvVar = true;
241 // m_strEnvVar = "CHECK_ONLY_DOMAIN_INSTEAD_OF_VALIDATION";
242 // if (getenv(m_strEnvVar.c_str()) != NULL) {
243 // bUnsetEnvVar = false;
245 // setenv(m_strEnvVar.c_str(), "1", 0);
252 // if (!m_strRootCAPath.empty()) {
253 // removeCertGivenByFilename(m_strRootCAPath.c_str());
256 // if (!m_strEnvVar.empty()) {
257 // unsetenv(m_strEnvVar.c_str());
261 // void setRootCAPath(const std::string& strRootCAPath)
263 // m_strRootCAPath = strRootCAPath;
267 // std::string m_strRootCAPath;
268 // std::string m_strEnvVar;
271 //class PolicyChanger : public VcoreDPL::Event::EventListener<AceUpdateResponseEvent>
276 // VcoreDPL::Event::EventDeliverySystem::AddListener<AceUpdateResponseEvent>(this);
281 // VcoreDPL::Event::EventDeliverySystem::RemoveListener<AceUpdateResponseEvent>(this);
284 // void OnEventReceived(const AceUpdateResponseEvent& event)
286 // if (0 != event.GetArg0()) {
287 // LogError("Policy change failed");
289 // Assert(0 == event.GetArg0() && "Policy change failed");
290 // LoopControl::finish_wait_for_wrt_init();
293 // void updatePolicy(const std::string& path)
295 // AceUpdateRequestEvent event(path);
296 // VcoreDPL::Event::EventDeliverySystem::Publish(event);
297 // LoopControl::wait_for_wrt_init();
301 } // namespace anonymous
303 using namespace ValidationCore;
305 //////////////////////////////////////////////////
306 //////// VALIDATION CORE TEST SUITE ////////////
307 //////////////////////////////////////////////////
310 * test: Class SignatureFinder
311 * description: SignatureFinder should search directory passed as
312 * param of constructor.
313 * expected: Signature finder should put information about 3
314 * signture files in SinatureFileInfoSet.
316 RUNNER_TEST(test01_signature_finder)
318 SignatureFileInfoSet signatureSet;
319 SignatureFinder signatureFinder(widget_path);
321 SignatureFinder::NO_ERROR == signatureFinder.find(signatureSet),
322 "SignatureFinder failed");
323 RUNNER_ASSERT_MSG(signatureSet.size() == 3,
324 "Some signature has not been found");
326 SignatureFileInfo first = *(signatureSet.begin());
328 std::string("author-signature.xml") == first.getFileName(),
330 RUNNER_ASSERT_MSG(-1 == first.getFileNumber(), "Wrong signature number.");
331 first = *(signatureSet.rbegin());
332 RUNNER_ASSERT_MSG(std::string("signature22.xml") == first.getFileName(),
333 "Wrong signature fileName.");
334 RUNNER_ASSERT_MSG(22 == first.getFileNumber(), "Wrong signature number.");
338 * test: Class SignatureReader
339 * description: SignatureReader should parse widget digigal signaturesignature
340 * without any errors. Path to signature is passed to constructor.
341 * param of destructor.
342 * expected: SignatureReader should not throw any exception.
344 RUNNER_TEST(test02_signature_reader)
346 SignatureFileInfoSet signatureSet;
347 SignatureFinder signatureFinder(widget_path);
349 SignatureFinder::NO_ERROR == signatureFinder.find(signatureSet),
350 "SignatureFinder failed");
352 SignatureFileInfoSet::reverse_iterator iter = signatureSet.rbegin();
354 for (; iter != signatureSet.rend(); ++iter) {
355 SignatureData data(widget_path + iter->getFileName(),
356 iter->getFileNumber());
358 xml.initialize(data, GetSignatureXmlSchema());
364 * test: Integration test of SignatureFinder, SignatureReader,
366 * description: Directory passed to SignatureFinded constructor should be searched
367 * and 3 signature should be find. All signature should be parsed and verified.
368 * expected: Verificator should DISREGARD author signature and VERIFY
369 * distrubutor signature.
371 RUNNER_TEST(test03t01_wrtsignature_validator)
373 SignatureFileInfoSet signatureSet;
374 SignatureFinder signatureFinder(widget_path);
376 SignatureFinder::NO_ERROR == signatureFinder.find(signatureSet),
377 "SignatureFinder failed");
379 SignatureFileInfoSet::reverse_iterator iter = signatureSet.rbegin();
380 for (; iter != signatureSet.rend(); ++iter) {
381 SignatureData data(widget_path + iter->getFileName(),
382 iter->getFileNumber());
384 xml.initialize(data, GetSignatureXmlSchema());
387 WrtSignatureValidator validator(
388 WrtSignatureValidator::WAC20,
393 if (data.isAuthorSignature()) {
395 WrtSignatureValidator::SIGNATURE_DISREGARD ==
396 validator.check(data, widget_path),
397 "Validation failed");
399 if (data.getSignatureNumber() == 1)
401 WrtSignatureValidator::Result temp = validator.check(data, widget_path);
404 WrtSignatureValidator::SIGNATURE_DISREGARD ==
406 "Validation failed");
411 WrtSignatureValidator::Result temp = validator.check(data, widget_path);
414 WrtSignatureValidator::SIGNATURE_VERIFIED ==
416 "Validation failed");
422 RUNNER_TEST(test03t02_wrtsignature_validator_negative_hash_input)
424 SignatureFileInfoSet signatureSet;
425 SignatureFinder signatureFinder(widget_negative_hash_path);
427 SignatureFinder::NO_ERROR == signatureFinder.find(signatureSet),
428 "SignatureFinder failed");
430 SignatureFileInfoSet::reverse_iterator iter = signatureSet.rbegin();
431 for (; iter != signatureSet.rend(); ++iter) {
432 SignatureData data(widget_negative_hash_path + iter->getFileName(),
433 iter->getFileNumber());
435 xml.initialize(data, GetSignatureXmlSchema());
438 WrtSignatureValidator validator(
439 WrtSignatureValidator::WAC20,
444 int temp = validator.check(data, widget_negative_hash_path);
446 (WrtSignatureValidator::SIGNATURE_INVALID == temp
447 || WrtSignatureValidator::SIGNATURE_DISREGARD == temp),
448 "Wrong input file but success.. Errorcode : " << wrtValidatorErrorToString(temp));
452 RUNNER_TEST(test03t03_wrtsignature_validator_negative_signature_input)
454 SignatureFileInfoSet signatureSet;
455 SignatureFinder signatureFinder(widget_negative_signature_path);
457 SignatureFinder::NO_ERROR == signatureFinder.find(signatureSet),
458 "SignatureFinder failed");
460 SignatureFileInfoSet::reverse_iterator iter = signatureSet.rbegin();
461 for (; iter != signatureSet.rend(); ++iter) {
462 SignatureData data(widget_negative_signature_path + iter->getFileName(),
463 iter->getFileNumber());
465 xml.initialize(data, GetSignatureXmlSchema());
468 WrtSignatureValidator validator(
469 WrtSignatureValidator::WAC20,
474 int temp = validator.check(data, widget_negative_signature_path);
476 (WrtSignatureValidator::SIGNATURE_INVALID == temp
477 || WrtSignatureValidator::SIGNATURE_DISREGARD == temp),
478 "Wrong input file but success.. Errorcode : " << wrtValidatorErrorToString(temp));
482 RUNNER_TEST(test03t04_wrtsignature_validator_partner)
484 SignatureFileInfoSet signatureSet;
485 SignatureFinder signatureFinder(widget_partner_path);
487 SignatureFinder::NO_ERROR == signatureFinder.find(signatureSet),
488 "SignatureFinder failed");
490 SignatureFileInfoSet::reverse_iterator iter = signatureSet.rbegin();
491 for (; iter != signatureSet.rend(); ++iter) {
492 SignatureData data(widget_partner_path + iter->getFileName(),
493 iter->getFileNumber());
495 xml.initialize(data, GetSignatureXmlSchema());
498 WrtSignatureValidator validator(
499 WrtSignatureValidator::WAC20,
504 int temp = validator.check(data, widget_partner_path);
506 WrtSignatureValidator::SIGNATURE_VERIFIED == temp,
507 "Wrong input file but success.. Errorcode : " << wrtValidatorErrorToString(temp));
508 if (!data.isAuthorSignature()) {
510 data.getVisibilityLevel() == CertStoreId::VIS_PARTNER,
511 "visibility check failed.");
515 /* // no partner_operator certificate in kiran emlulator
516 RUNNER_TEST(test03t05_wrtsignature_validator_partner_operator)
518 SignatureFileInfoSet signatureSet;
519 SignatureFinder signatureFinder(widget_partner_operator_path);
520 LogError("Size: " << signatureSet.size());
522 SignatureFinder::NO_ERROR == signatureFinder.find(signatureSet),
523 "SignatureFinder failed");
525 SignatureFileInfoSet::reverse_iterator iter = signatureSet.rbegin();
526 LogError("Size: " << signatureSet.size());
527 for (; iter != signatureSet.rend(); ++iter) {
528 SignatureData data(widget_partner_operator_path + iter->getFileName(),
529 iter->getFileNumber());
531 xml.initialize(data, GetSignatureXmlSchema());
534 WrtSignatureValidator validator(
535 WrtSignatureValidator::WAC20,
540 if (data.isAuthorSignature()) {
543 WrtSignatureValidator::SIGNATURE_VERIFIED ==
544 validator.check(data, widget_partner_operator_path),
545 "Wrong input file but success..");
547 LogError("Distributor");
549 WrtSignatureValidator::SIGNATURE_VERIFIED ==
550 validator.check(data, widget_partner_operator_path),
551 "Wrong input file but success..");
554 data.getVisibilityLevel() == CertStoreId::VIS_PLATFORM,
555 "visibility check failed.");
562 RUNNER_TEST(test03t04_wrtsignature_validator_negative_certificate_input)
564 SignatureFileInfoSet signatureSet;
565 SignatureFinder signatureFinder(widget_negative_certificate_path);
566 LogError("Size: " << signatureSet.size());
568 SignatureFinder::NO_ERROR == signatureFinder.find(signatureSet),
569 "SignatureFinder failed");
571 SignatureFileInfoSet::reverse_iterator iter = signatureSet.rbegin();
572 LogError("Size: " << signatureSet.size());
573 for (; iter != signatureSet.rend(); ++iter) {
574 SignatureData data(widget_negative_certificate_path + iter->getFileName(),
575 iter->getFileNumber());
577 xml.initialize(data, GetSignatureXmlSchema());
580 WrtSignatureValidator validator(
581 WrtSignatureValidator::WAC20,
586 if (data.isAuthorSignature()) {
589 WrtSignatureValidator::SIGNATURE_INVALID ==
590 validator.check(data, widget_negative_certificate_path),
591 "Wrong input file but success..");
593 LogError("Distributor");
595 WrtSignatureValidator::SIGNATURE_DISREGARD ==
596 validator.check(data, widget_negative_certificate_path),
597 "Wrong input file but success..");
604 * test: Integration test of SignatureFinder, SignatureReader,
606 * description: Directory passed to SignatureFinded constructor should be searched
607 * and 3 signature should be find. All signature should be parsed and verified.
608 * expected: Verificator should DISREGARD author signature and VERIFY
609 * distrubutor signature.
611 RUNNER_TEST(test04t01_signature_validator)
613 SignatureFileInfoSet signatureSet;
614 SignatureFinder signatureFinder(widget_path);
616 SignatureFinder::NO_ERROR == signatureFinder.find(signatureSet),
617 "SignatureFinder failed");
619 SignatureFileInfoSet::reverse_iterator iter = signatureSet.rbegin();
620 for (; iter != signatureSet.rend(); ++iter) {
621 SignatureData data(widget_path + iter->getFileName(),
622 iter->getFileNumber());
624 xml.initialize(data, GetSignatureXmlSchema());
627 SignatureValidator validator(
628 SignatureValidator::WAC20,
633 if (data.isAuthorSignature()) {
635 SignatureValidator::SIGNATURE_DISREGARD ==
636 validator.check(data, widget_path),
637 "Validation failed");
639 if (data.getSignatureNumber() == 1)
641 SignatureValidator::Result temp = validator.check(data, widget_path);
644 SignatureValidator::SIGNATURE_DISREGARD ==
646 "Validation failed");
650 SignatureValidator::Result temp = validator.check(data, widget_path);
653 SignatureValidator::SIGNATURE_VERIFIED ==
655 "Validation failed");
661 RUNNER_TEST(test04t02_signature_validator_negative_hash_input)
663 SignatureFileInfoSet signatureSet;
664 SignatureFinder signatureFinder(widget_negative_hash_path);
666 SignatureFinder::NO_ERROR == signatureFinder.find(signatureSet),
667 "SignatureFinder failed");
669 SignatureFileInfoSet::reverse_iterator iter = signatureSet.rbegin();
670 for (; iter != signatureSet.rend(); ++iter) {
671 SignatureData data(widget_negative_hash_path + iter->getFileName(),
672 iter->getFileNumber());
674 xml.initialize(data, GetSignatureXmlSchema());
677 SignatureValidator validator(
678 SignatureValidator::WAC20,
683 int temp = validator.check(data, widget_negative_hash_path);
685 (WrtSignatureValidator::SIGNATURE_INVALID == temp
686 || WrtSignatureValidator::SIGNATURE_DISREGARD == temp),
687 "Wrong input file but success.. Errorcode : " << wrtValidatorErrorToString(temp));
691 RUNNER_TEST(test04t03_signature_validator_negative_signature_input)
693 SignatureFileInfoSet signatureSet;
694 SignatureFinder signatureFinder(widget_negative_signature_path);
696 SignatureFinder::NO_ERROR == signatureFinder.find(signatureSet),
697 "SignatureFinder failed");
699 SignatureFileInfoSet::reverse_iterator iter = signatureSet.rbegin();
700 for (; iter != signatureSet.rend(); ++iter) {
701 SignatureData data(widget_negative_signature_path + iter->getFileName(),
702 iter->getFileNumber());
704 xml.initialize(data, GetSignatureXmlSchema());
707 SignatureValidator validator(
708 SignatureValidator::WAC20,
713 int temp = validator.check(data, widget_negative_signature_path);
715 (WrtSignatureValidator::SIGNATURE_INVALID == temp
716 || WrtSignatureValidator::SIGNATURE_DISREGARD == temp),
717 "Wrong input file but success.. Errorcode : " << wrtValidatorErrorToString(temp));
721 RUNNER_TEST(test04t04_signature_validator_partner)
723 SignatureFileInfoSet signatureSet;
724 SignatureFinder signatureFinder(widget_partner_path);
726 SignatureFinder::NO_ERROR == signatureFinder.find(signatureSet),
727 "SignatureFinder failed");
729 SignatureFileInfoSet::reverse_iterator iter = signatureSet.rbegin();
730 for (; iter != signatureSet.rend(); ++iter) {
731 SignatureData data(widget_partner_path + iter->getFileName(),
732 iter->getFileNumber());
734 xml.initialize(data, GetSignatureXmlSchema());
737 SignatureValidator validator(
738 SignatureValidator::TIZEN,
743 int temp = validator.check(data, widget_partner_path);
744 RUNNER_ASSERT_MSG(SignatureValidator::SIGNATURE_VERIFIED == temp,
745 "Wrong input file but success.. Errorcode : " << wrtValidatorErrorToString(temp));
747 if (!data.isAuthorSignature()) {
749 data.getVisibilityLevel() == CertStoreId::VIS_PARTNER,
750 "visibility check failed.");
754 /* // no partner_operator certificate in kiran emulator
755 RUNNER_TEST(test04t05_signature_validator_partner_operator)
757 SignatureFileInfoSet signatureSet;
758 SignatureFinder signatureFinder(widget_partner_operator_path);
759 LogError("Size: " << signatureSet.size());
761 SignatureFinder::NO_ERROR == signatureFinder.find(signatureSet),
762 "SignatureFinder failed");
764 SignatureFileInfoSet::reverse_iterator iter = signatureSet.rbegin();
765 LogError("Size: " << signatureSet.size());
766 for (; iter != signatureSet.rend(); ++iter) {
767 SignatureData data(widget_partner_operator_path + iter->getFileName(),
768 iter->getFileNumber());
770 xml.initialize(data, GetSignatureXmlSchema());
773 SignatureValidator validator(
774 SignatureValidator::TIZEN,
779 if (data.isAuthorSignature()) {
782 SignatureValidator::SIGNATURE_VERIFIED ==
783 validator.check(data, widget_partner_operator_path),
784 "Wrong input file but success..");
786 LogError("Distributor");
788 SignatureValidator::SIGNATURE_VERIFIED ==
789 validator.check(data, widget_partner_operator_path),
790 "Wrong input file but success..");
793 data.getVisibilityLevel() == CertStoreId::VIS_PLATFORM,
794 "visibility check failed.");
801 RUNNER_TEST(test04t04_signature_validator_negative_certificate_input)
803 SignatureFileInfoSet signatureSet;
804 SignatureFinder signatureFinder(widget_negative_certificate_path);
805 LogError("Size: " << signatureSet.size());
807 SignatureFinder::NO_ERROR == signatureFinder.find(signatureSet),
808 "SignatureFinder failed");
810 SignatureFileInfoSet::reverse_iterator iter = signatureSet.rbegin();
811 LogError("Size: " << signatureSet.size());
812 for (; iter != signatureSet.rend(); ++iter) {
813 SignatureData data(widget_negative_certificate_path + iter->getFileName(),
814 iter->getFileNumber());
816 xml.initialize(data, GetSignatureXmlSchema());
819 SignatureValidator validator(
820 SignatureValidator::WAC20,
825 if (data.isAuthorSignature()) {
828 SignatureValidator::SIGNATURE_DISREGARD ==
829 validator.check(data, widget_negative_certificate_path),
830 "Wrong input file but success..");
832 LogError("Distributor");
834 SignatureValidator::SIGNATURE_DISREGARD ==
835 validator.check(data, widget_negative_certificate_path),
836 "Wrong input file but success..");
843 * test: Integration test of SignatureFinder, SignatureReader,
844 * SignatureValidator, ReferenceValidator
845 * description: As above but this test also checks reference from signatures.
846 * expected: All reference checks should return NO_ERROR.
848 RUNNER_TEST(test05t01_signature_reference)
850 SignatureFileInfoSet signatureSet;
851 SignatureFinder signatureFinder(widget_path);
853 SignatureFinder::NO_ERROR == signatureFinder.find(signatureSet),
854 "SignatureFinder failed");
856 SignatureFileInfoSet::reverse_iterator iter = signatureSet.rbegin();
858 for (; iter != signatureSet.rend(); ++iter) {
859 SignatureData data(widget_path + iter->getFileName(),
860 iter->getFileNumber());
862 xml.initialize(data, GetSignatureXmlSchema());
865 WrtSignatureValidator sval(
866 WrtSignatureValidator::WAC20,
871 if (data.isAuthorSignature()) {
873 WrtSignatureValidator::SIGNATURE_DISREGARD ==
874 sval.check(data, widget_path),
875 "Validation failed");
877 if (data.getSignatureNumber() == 1)
880 WrtSignatureValidator::SIGNATURE_DISREGARD ==
881 sval.check(data, widget_path),
882 "Validation failed");
887 WrtSignatureValidator::SIGNATURE_VERIFIED ==
888 sval.check(data, widget_path),
889 "Validation failed");
894 ReferenceValidator val(widget_path);
895 int temp = val.checkReferences(data);
896 RUNNER_ASSERT_MSG(ReferenceValidator::NO_ERROR == temp,
897 "File[" << iter->getFileName()
898 << "] FileNumber[" << iter->getFileNumber()
899 << "] Errorcode : " << refValidatorErrorToString(temp));
905 * test: ReferenceValidator::checkReference
906 * description: Simple test. File "encoding test.empty" exists.
907 * expected: checkReference should return NO_ERROR.
910 RUNNER_TEST(test05t02_signature_reference_encoding_dummy)
912 ReferenceSet referenceSet;
914 ReferenceValidator val("/usr/apps/widget/tests/reference");
915 referenceSet.insert("encoding test.empty");
916 data.setReference(referenceSet);
918 int temp = val.checkReferences(data);
919 RUNNER_ASSERT_MSG(ReferenceValidator::NO_ERROR == temp,
920 "Errorcode : " << refValidatorErrorToString(temp));
925 * test: ReferenceValidator::checkReference
926 * description: Negative test. File "encoding test" does not exists.
927 * expected: checkReference should return ERROR_REFERENCE_NOT_FOUND
930 RUNNER_TEST(test05t03_signature_reference_encoding_negative)
932 ReferenceSet referenceSet;
934 ReferenceValidator val("/usr/apps/widget/tests/reference");
935 referenceSet.insert("encoding test");
936 data.setReference(referenceSet);
938 int temp = val.checkReferences(data);
939 RUNNER_ASSERT_MSG(ReferenceValidator::ERROR_REFERENCE_NOT_FOUND == temp,
940 "Errorcode : " << refValidatorErrorToString(temp));
945 * test: ReferenceValidator::checkReference, ReferenceValidator::decodeProcent
946 * description: File "encoding test.empty" exists. Name set in referenceSet must
947 * be encoded first by decodeProcent function.
948 * expected: checkReference should return NO_ERROR
951 RUNNER_TEST(test05t04_signature_reference_encoding_space)
953 ReferenceSet referenceSet;
955 ReferenceValidator val("/usr/apps/widget/tests/reference");
956 referenceSet.insert("encoding%20test.empty");
957 data.setReference(referenceSet);
959 int temp = val.checkReferences(data);
960 RUNNER_ASSERT_MSG(ReferenceValidator::NO_ERROR == temp,
961 "Errorcode : " << refValidatorErrorToString(temp));
966 * test: ReferenceValidator::checkReference, ReferenceValidator::decodeProcent
967 * description: Negative test. File "encoding test" does not exists. Name set in
968 * referenceSet must be encoded first by decodeProcent function.
969 * expected: checkReference should return ERROR_REFERENCE_NOT_FOUND
972 RUNNER_TEST(test05t05_signature_reference_encoding_space_negative)
974 ReferenceSet referenceSet;
976 ReferenceValidator val("/usr/apps/widget/tests/reference");
977 referenceSet.insert("encoding%20test");
978 data.setReference(referenceSet);
980 int temp = val.checkReferences(data);
981 RUNNER_ASSERT_MSG(ReferenceValidator::ERROR_REFERENCE_NOT_FOUND == temp,
982 "Errorcode : " << refValidatorErrorToString(temp));
987 * test: ReferenceValidator::checkReference, ReferenceValidator::decodeProcent
988 * description: File "encoding test.empty" exists. Name set in
989 * referenceSet must be encoded first by decodeProcent function.
990 * expected: checkReference should return NO_ERROR
993 RUNNER_TEST(test05t06_signature_reference_encoding)
995 ReferenceSet referenceSet;
997 ReferenceValidator val("/usr/apps/widget/tests/reference");
998 referenceSet.insert("e%6Ec%6Fding%20te%73%74.e%6d%70ty");
999 data.setReference(referenceSet);
1001 int temp = val.checkReferences(data);
1002 RUNNER_ASSERT_MSG(ReferenceValidator::NO_ERROR == temp,
1003 "Errorcode : " << refValidatorErrorToString(temp));
1008 * test: ReferenceValidator::checkReference, ReferenceValidator::decodeProcent
1009 * description: Negative test. "%%" is illegal combination of char. decodeProcent
1010 * should throw exception.
1011 * expected: checkReference should return ERROR_DECODING_URL
1014 RUNNER_TEST(test05t07_signature_reference_encoding_negative)
1016 ReferenceSet referenceSet;
1018 ReferenceValidator val("/usr/apps/widget/tests/reference");
1019 referenceSet.insert("e%6Ec%6Fding%%0test%2ete%73%74");
1020 data.setReference(referenceSet);
1022 int temp = val.checkReferences(data);
1023 RUNNER_ASSERT_MSG(ReferenceValidator::ERROR_DECODING_URL == temp,
1024 "Errorcode : " << refValidatorErrorToString(temp));
1029 * test: class Certificate
1030 * description: Certificate should parse data passed to object constructor.
1031 * expected: Getters should be able to return certificate information.
1033 RUNNER_TEST(test08t01_Certificate)
1035 Certificate cert(certVerisign, Certificate::FORM_BASE64);
1038 result = cert.getCommonName(Certificate::FIELD_SUBJECT);
1039 RUNNER_ASSERT_MSG(!result.empty(), "No common name");
1040 RUNNER_ASSERT_MSG(!result.compare("www.verisign.com"), "CommonName mismatch");
1042 result = cert.getCommonName(Certificate::FIELD_ISSUER);
1043 RUNNER_ASSERT_MSG(!result.empty(), "No common name");
1044 RUNNER_ASSERT_MSG(!result.compare("VeriSign Class 3 Extended Validation SSL SGC CA"),
1045 "CommonName mismatch");
1047 result = cert.getCountryName();
1048 RUNNER_ASSERT_MSG(!result.empty(), "No country");
1049 RUNNER_ASSERT_MSG(!result.compare("US"), "Country mismatch");
1053 * test: Certificate::getFingerprint
1054 * description: Certificate should parse data passed to object constructor.
1055 * expected: Function fingerprint should return valid fingerprint.
1057 RUNNER_TEST(test08t02_Certificate)
1059 Certificate cert(certVerisign, Certificate::FORM_BASE64);
1061 Certificate::Fingerprint fin =
1062 cert.getFingerprint(Certificate::FINGERPRINT_SHA1);
1064 unsigned char buff[20] = {
1065 0xb9, 0x72, 0x1e, 0xd5, 0x49,
1066 0xed, 0xbf, 0x31, 0x84, 0xd8,
1067 0x27, 0x0c, 0xfe, 0x03, 0x11,
1068 0x19, 0xdf, 0xc2, 0x2b, 0x0a};
1069 RUNNER_ASSERT_MSG(fin.size() == 20, "Wrong size of fingerprint");
1071 for (size_t i = 0; i<20; ++i) {
1072 RUNNER_ASSERT_MSG(fin[i] == buff[i], "Fingerprint mismatch");
1077 * test: Certificate::getAlternativeNameDNS
1078 * description: Certificate should parse data passed to object constructor.
1079 * expected: Function getAlternativeNameDNS should return list of
1080 * alternativeNames hardcoded in certificate.
1082 RUNNER_TEST(test08t03_Certificate)
1084 Certificate cert(certVerisign, Certificate::FORM_BASE64);
1086 Certificate::AltNameSet nameSet = cert.getAlternativeNameDNS();
1088 RUNNER_ASSERT(nameSet.size() == 8);
1090 std::string str("verisign.com");
1091 RUNNER_ASSERT(nameSet.find(str) != nameSet.end());
1093 str = std::string("fake.com");
1094 RUNNER_ASSERT(nameSet.find(str) == nameSet.end());
1099 * test: Certificate::isCA
1100 * description: Certificate should parse data passed to object constructor.
1101 * expected: 1st and 2nd certificate should be identified as CA.
1103 RUNNER_TEST(test08t04_Certificate_isCA)
1105 Certificate cert1(googleCA, Certificate::FORM_BASE64);
1106 RUNNER_ASSERT(cert1.isCA() > 0);
1108 Certificate cert2(google2nd, Certificate::FORM_BASE64);
1109 RUNNER_ASSERT(cert2.isCA() > 0);
1111 Certificate cert3(google3rd, Certificate::FORM_BASE64);
1112 RUNNER_ASSERT(cert3.isCA() == 0);
1115 #define CRYPTO_HASH_TEST(text,expected,FUN) \
1117 ValidationCore::Crypto::Hash::Base *crypto; \
1118 crypto = new ValidationCore::Crypto::Hash::FUN(); \
1119 std::string input = text; \
1120 crypto->Append(text); \
1122 std::string result = crypto->ToBase64String(); \
1123 RUNNER_ASSERT_MSG(result == expected, \
1124 "Hash function failed"); \
1128 * test: class ValidationCore::Crypto::Hash::MD4
1129 * description: Test implementation of MD4 hash algorithm
1130 * expected: Value counted by algorithm should be eqal to value encoded in test.
1132 RUNNER_TEST(test80_crypto_md4)
1134 CRYPTO_HASH_TEST("Hi, my name is Bart.",
1135 "Rj5V34qqMQmHh2bn3Cb/vQ==",
1140 * test: class ValidationCore::Crypto::Hash::MD5
1141 * description: Test implementation of hash algorithm
1142 * expected: Value counted by algorithm should be eqal to value encoded in test.
1144 RUNNER_TEST(test81_crypto_md5)
1146 CRYPTO_HASH_TEST("Hi, my name is Bart.",
1147 "4y2iI6QtFC7+0xurBOfcsg==",
1152 * test: class ValidationCore::Crypto::Hash::SHA
1153 * description: Test implementation of hash algorithm
1154 * expected: Value counted by algorithm should be eqal to value encoded in test.
1156 RUNNER_TEST(test82_crypto_sha)
1158 CRYPTO_HASH_TEST("Hi, my name is Bart.",
1159 "v7w8XNvzQkZPoID+bbdrLwI6zPA=",
1164 * test: class ValidationCore::Crypto::Hash::SHA1
1165 * description: Test implementation of hash algorithm
1166 * expected: Value counted by algorithm should be eqal to value encoded in test.
1168 RUNNER_TEST(test83_crypto_sha1)
1170 CRYPTO_HASH_TEST("Hi, my name is Bart.",
1171 "Srydq14dzpuLn+xlkGz7ZyFLe1w=",
1176 * test: class ValidationCore::Crypto::Hash::SHA224
1177 * description: Test implementation of hash algorithm
1178 * expected: Value counted by algorithm should be eqal to value encoded in test.
1180 RUNNER_TEST(test84_crypto_sha224)
1182 CRYPTO_HASH_TEST("Hi, my name is Bart.",
1183 "Ss2MKa2Mxrf0/hrl8bf0fOSz/e5nQv4J/yX6ig==",
1188 * test: class ValidationCore::Crypto::Hash::SHA256
1189 * description: Test implementation of hash algorithm
1190 * expected: Value counted by algorithm should be eqal to value encoded in test.
1192 RUNNER_TEST(test85_crypto_sha256)
1194 CRYPTO_HASH_TEST("Hi, my name is Bart.",
1195 "Bja/IuUJHLPlHYYB2hBcuuOlRWPy1RdF6gzL0VWxeps=",
1200 * test: class ValidationCore::Crypto::Hash::SHA384
1201 * description: Test implementation of hash algorithm
1202 * expected: Value counted by algorithm should be eqal to value encoded in test.
1204 RUNNER_TEST(test86_crypto_sha384)
1206 CRYPTO_HASH_TEST("Hi, my name is Bart.",
1207 "5RjtzCnGAt+P6J8h32Dzrmka+5i5MMvDRVz+s9jA7TW508sUZOnKliliad5nUJrj",
1212 * test: class ValidationCore::Crypto::Hash::SHA512
1213 * description: Test implementation of hash algorithm
1214 * expected: Value counted by algorithm should be eqal to value encoded in test.
1216 RUNNER_TEST(test87_crypto_sha512)
1218 CRYPTO_HASH_TEST("Hi, my name is Bart.",
1219 "LxemzcQNf5erjA4a6PnTXfL+putB3uElitOjc5QCQ9Mg4ZuxTpre8VIBAviwRcTnui2Y0/Yg7cB40OG3XJMfbA==",
1224 * test: class ValidationCore::Crypto::Hash::SHA1
1225 * description: This example was implemented to show how to count SHA1 value from certificate.
1226 * expected: Value counted by algorithm should be eqal to value encoded in test.
1228 RUNNER_TEST(test88_crypto_sha1_certificate)
1230 Certificate cert(certVerisign, Certificate::FORM_BASE64);
1232 ValidationCore::Crypto::Hash::SHA1 sha1;
1233 sha1.Append(cert.getDER());
1235 std::string result = sha1.ToBase64String();
1237 RUNNER_ASSERT_MSG(result == "uXIe1UntvzGE2CcM/gMRGd/CKwo=",
1238 "Certificate hash does not match.");
1242 * test: CertificateIdentifier::find(Fingerprint)
1243 * description: Check implementation of fingerprint_list.
1244 * expected: Google CA certificate was added to TIZEN_MEMBER group
1245 * and ORANGE_LEGACY. Both domain should be found.
1248 RUNNER_TEST(test90_certificate_identifier_find_fingerprint)
1250 CertificateIdentifier certIdent;
1251 CertificateConfigReader reader;
1253 "/usr/apps/widget/tests/vcore_config/fin_list.xml",
1254 "/usr/apps/widget/tests/vcore_config/fin_list.xsd");
1255 reader.read(certIdent);
1257 Certificate cert(googleCA, Certificate::FORM_BASE64);
1259 CertStoreId::Set domain =
1260 certIdent.find(cert.getFingerprint(Certificate::FINGERPRINT_SHA1));
1262 RUNNER_ASSERT(!domain.contains(CertStoreId::WAC_PUBLISHER));
1263 RUNNER_ASSERT(!domain.contains(CertStoreId::DEVELOPER));
1264 RUNNER_ASSERT(!domain.contains(CertStoreId::WAC_ROOT));
1265 RUNNER_ASSERT(!domain.contains(CertStoreId::WAC_MEMBER));
1266 RUNNER_ASSERT(domain.contains(CertStoreId::TIZEN_MEMBER));
1267 RUNNER_ASSERT(domain.contains(CertStoreId::ORANGE_LEGACY));
1272 * test: CertificateIdentifier::find(CertificatePtr)
1273 * description: Check implementation of fingerprint_list.
1274 * expected: Google CA certificate was added to TIZEN_MEMBER group
1275 * and ORANGE_LEGACY. Both domain should be found.
1278 RUNNER_TEST(test91_certificate_identifier_find_cert)
1280 CertificateIdentifier certIdent;
1281 CertificateConfigReader reader;
1283 "/usr/apps/widget/tests/vcore_config/fin_list.xml",
1284 "/usr/apps/widget/tests/vcore_config/fin_list.xsd");
1285 reader.read(certIdent);
1287 CertificatePtr cert(new Certificate(googleCA, Certificate::FORM_BASE64));
1289 CertStoreId::Set domain = certIdent.find(cert);
1291 RUNNER_ASSERT(!domain.contains(CertStoreId::WAC_PUBLISHER));
1292 RUNNER_ASSERT(!domain.contains(CertStoreId::DEVELOPER));
1293 RUNNER_ASSERT(!domain.contains(CertStoreId::WAC_ROOT));
1294 RUNNER_ASSERT(!domain.contains(CertStoreId::WAC_MEMBER));
1295 RUNNER_ASSERT(domain.contains(CertStoreId::TIZEN_MEMBER));
1296 RUNNER_ASSERT(domain.contains(CertStoreId::ORANGE_LEGACY));
1301 * test: CertificateIdentifier::find(Fingerprint)
1302 * description: Check implementation of fingerprint_list.
1303 * expected: google2nd certificate was not added to any group so
1304 * no domain should be found.
1307 RUNNER_TEST(test92_certificate_identifier_negative)
1309 CertificateIdentifier certIdent;
1310 CertificateConfigReader reader;
1312 "/usr/apps/widget/tests/vcore_config/fin_list.xml",
1313 "/usr/apps/widget/tests/vcore_config/fin_list.xsd");
1314 reader.read(certIdent);
1316 Certificate cert(google2nd, Certificate::FORM_BASE64);
1318 CertStoreId::Set domain =
1319 certIdent.find(cert.getFingerprint(Certificate::FINGERPRINT_SHA1));
1321 RUNNER_ASSERT(!domain.contains(CertStoreId::WAC_PUBLISHER));
1322 RUNNER_ASSERT(!domain.contains(CertStoreId::DEVELOPER));
1323 RUNNER_ASSERT(!domain.contains(CertStoreId::WAC_ROOT));
1324 RUNNER_ASSERT(!domain.contains(CertStoreId::WAC_MEMBER));
1325 RUNNER_ASSERT(!domain.contains(CertStoreId::TIZEN_MEMBER));
1326 RUNNER_ASSERT(!domain.contains(CertStoreId::ORANGE_LEGACY));
1330 * test: CertificateIdentifier::find(Fingerprint)
1331 * description: Check implementation of fingerprint_list.
1332 * expected: Google CA certificate was added to TIZEN_MEMBER group
1333 * and ORANGE_LEGACY. Both domain should be found.
1336 RUNNER_TEST(test93_certificate_identifier_find_fingerprint)
1338 CertificateIdentifier certIdent;
1339 CertificateConfigReader reader;
1341 "/usr/apps/widget/tests/vcore_config/fin_list.xml",
1342 "/usr/apps/widget/tests/vcore_config/fin_list.xsd");
1343 reader.read(certIdent);
1345 Certificate cert(googleCA, Certificate::FORM_BASE64);
1347 CertStoreId::Set visibilityLevel =
1348 certIdent.find(cert.getFingerprint(Certificate::FINGERPRINT_SHA1));
1350 RUNNER_ASSERT(!visibilityLevel.contains(CertStoreId::WAC_PUBLISHER));
1351 RUNNER_ASSERT(!visibilityLevel.contains(CertStoreId::DEVELOPER));
1352 RUNNER_ASSERT(!visibilityLevel.contains(CertStoreId::WAC_ROOT));
1353 RUNNER_ASSERT(!visibilityLevel.contains(CertStoreId::WAC_MEMBER));
1354 RUNNER_ASSERT(visibilityLevel.contains(CertStoreId::TIZEN_MEMBER));
1355 RUNNER_ASSERT(visibilityLevel.contains(CertStoreId::ORANGE_LEGACY));
1357 RUNNER_ASSERT(visibilityLevel.contains(CertStoreId::VIS_PUBLIC));
1358 RUNNER_ASSERT(!visibilityLevel.contains(CertStoreId::VIS_PARTNER));
1359 RUNNER_ASSERT(!visibilityLevel.contains(CertStoreId::VIS_PARTNER_OPERATOR));
1360 RUNNER_ASSERT(!visibilityLevel.contains(CertStoreId::VIS_PARTNER_MANUFACTURER));
1365 * test: CertificateIdentifier::find(CertificatePtr)
1366 * description: Check implementation of fingerprint_list.
1367 * expected: Google CA certificate was added to TIZEN_MEMBER group
1368 * and ORANGE_LEGACY. Both domain should be found.
1371 RUNNER_TEST(test94_certificate_identifier_find_cert)
1373 CertificateIdentifier certIdent;
1374 CertificateConfigReader reader;
1376 "/usr/apps/widget/tests/vcore_config/fin_list.xml",
1377 "/usr/apps/widget/tests/vcore_config/fin_list.xsd");
1378 reader.read(certIdent);
1380 CertificatePtr cert(new Certificate(googleCA, Certificate::FORM_BASE64));
1382 CertStoreId::Set visibilityLevel = certIdent.find(cert);
1384 RUNNER_ASSERT(!visibilityLevel.contains(CertStoreId::WAC_PUBLISHER));
1385 RUNNER_ASSERT(!visibilityLevel.contains(CertStoreId::DEVELOPER));
1386 RUNNER_ASSERT(!visibilityLevel.contains(CertStoreId::WAC_ROOT));
1387 RUNNER_ASSERT(!visibilityLevel.contains(CertStoreId::WAC_MEMBER));
1388 RUNNER_ASSERT(visibilityLevel.contains(CertStoreId::TIZEN_MEMBER));
1389 RUNNER_ASSERT(visibilityLevel.contains(CertStoreId::ORANGE_LEGACY));
1391 RUNNER_ASSERT(visibilityLevel.contains(CertStoreId::VIS_PUBLIC));
1392 RUNNER_ASSERT(!visibilityLevel.contains(CertStoreId::VIS_PARTNER));
1393 RUNNER_ASSERT(!visibilityLevel.contains(CertStoreId::VIS_PARTNER_OPERATOR));
1394 RUNNER_ASSERT(!visibilityLevel.contains(CertStoreId::VIS_PARTNER_MANUFACTURER));
1399 * test: CertificateIdentifier::find(Fingerprint)
1400 * description: Check implementation of fingerprint_list.
1401 * expected: google2nd certificate was not added to any group so
1402 * no domain should be found.
1405 RUNNER_TEST(test95_certificate_identifier_negative)
1407 CertificateIdentifier certIdent;
1408 CertificateConfigReader reader;
1410 "/usr/apps/widget/tests/vcore_config/fin_list.xml",
1411 "/usr/apps/widget/tests/vcore_config/fin_list.xsd");
1412 reader.read(certIdent);
1414 Certificate cert(google2nd, Certificate::FORM_BASE64);
1416 CertStoreId::Set domain =
1417 certIdent.find(cert.getFingerprint(Certificate::FINGERPRINT_SHA1));
1419 RUNNER_ASSERT(!domain.contains(CertStoreId::WAC_PUBLISHER));
1420 RUNNER_ASSERT(!domain.contains(CertStoreId::DEVELOPER));
1421 RUNNER_ASSERT(!domain.contains(CertStoreId::WAC_ROOT));
1422 RUNNER_ASSERT(!domain.contains(CertStoreId::WAC_MEMBER));
1423 RUNNER_ASSERT(!domain.contains(CertStoreId::TIZEN_MEMBER));
1424 RUNNER_ASSERT(!domain.contains(CertStoreId::ORANGE_LEGACY));
1425 RUNNER_ASSERT(!domain.contains(CertStoreId::VIS_PUBLIC));
1426 RUNNER_ASSERT(!domain.contains(CertStoreId::VIS_PARTNER));
1427 RUNNER_ASSERT(!domain.contains(CertStoreId::VIS_PARTNER_OPERATOR));
1428 RUNNER_ASSERT(!domain.contains(CertStoreId::VIS_PARTNER_MANUFACTURER));