From db7f02f12c9251b12e1fc733ce9389ba9c425908 Mon Sep 17 00:00:00 2001 From: "sangwan.kwon" Date: Fri, 18 Mar 2016 13:30:45 +0900 Subject: [PATCH] Allow link file within package Change-Id: I58488519188fac7f0af51b24b116e0e90bdef55b Signed-off-by: sangwan.kwon --- packaging/cert-svc.spec | 2 +- tests/vcore/CMakeLists.txt | 2 + .../wgt_negative_link/author-signature.xml | 82 ++++++++++++++++++++ tests/vcore/resource/wgt_negative_link/config.xml | 9 +++ .../vcore/resource/wgt_negative_link/css/style.css | 24 ++++++ tests/vcore/resource/wgt_negative_link/icon.png | Bin 0 -> 57662 bytes .../resource/wgt_negative_link/images/tizen_32.png | Bin 0 -> 12848 bytes tests/vcore/resource/wgt_negative_link/index.html | 23 ++++++ tests/vcore/resource/wgt_negative_link/js/main.js | 21 ++++++ .../vcore/resource/wgt_negative_link/outboundLink | 1 + .../resource/wgt_negative_link/signature1.xml | 84 +++++++++++++++++++++ .../wgt_positive_link/author-signature.xml | 82 ++++++++++++++++++++ tests/vcore/resource/wgt_positive_link/config.xml | 9 +++ .../vcore/resource/wgt_positive_link/css/style.css | 24 ++++++ tests/vcore/resource/wgt_positive_link/icon.png | Bin 0 -> 57662 bytes .../resource/wgt_positive_link/images/tizen_32.png | Bin 0 -> 12848 bytes tests/vcore/resource/wgt_positive_link/index.html | 23 ++++++ tests/vcore/resource/wgt_positive_link/js/main.js | 21 ++++++ tests/vcore/resource/wgt_positive_link/link | 1 + .../resource/wgt_positive_link/signature1.xml | 84 +++++++++++++++++++++ tests/vcore/test-common.cpp | 2 + tests/vcore/test-common.h | 2 + tests/vcore/test-signature-validator.cpp | 49 ++++++++++++ vcore/vcore/ReferenceValidator.cpp | 46 ++++++++++- vcore/vcore/ReferenceValidator.h | 6 +- 25 files changed, 594 insertions(+), 3 deletions(-) create mode 100644 tests/vcore/resource/wgt_negative_link/author-signature.xml create mode 100644 tests/vcore/resource/wgt_negative_link/config.xml create mode 100644 tests/vcore/resource/wgt_negative_link/css/style.css create mode 100644 tests/vcore/resource/wgt_negative_link/icon.png create mode 100644 tests/vcore/resource/wgt_negative_link/images/tizen_32.png create mode 100644 tests/vcore/resource/wgt_negative_link/index.html create mode 100644 tests/vcore/resource/wgt_negative_link/js/main.js create mode 120000 tests/vcore/resource/wgt_negative_link/outboundLink create mode 100644 tests/vcore/resource/wgt_negative_link/signature1.xml create mode 100644 tests/vcore/resource/wgt_positive_link/author-signature.xml create mode 100644 tests/vcore/resource/wgt_positive_link/config.xml create mode 100644 tests/vcore/resource/wgt_positive_link/css/style.css create mode 100644 tests/vcore/resource/wgt_positive_link/icon.png create mode 100644 tests/vcore/resource/wgt_positive_link/images/tizen_32.png create mode 100644 tests/vcore/resource/wgt_positive_link/index.html create mode 100644 tests/vcore/resource/wgt_positive_link/js/main.js create mode 120000 tests/vcore/resource/wgt_positive_link/link create mode 100644 tests/vcore/resource/wgt_positive_link/signature1.xml diff --git a/packaging/cert-svc.spec b/packaging/cert-svc.spec index a995b3f..2c5eb41 100644 --- a/packaging/cert-svc.spec +++ b/packaging/cert-svc.spec @@ -31,7 +31,7 @@ Requires: ca-certificates-tizen %global TZ_SYS_ETC %{?TZ_SYS_ETC:%TZ_SYS_ETC}%{!?TZ_SYS_ETC:/opt/etc} %global TZ_SYS_SHARE %{?TZ_SYS_SHARE:%TZ_SYS_SHARE}%{!?TZ_SYS_SHARE:/opt/share} %global TZ_SYS_RO_SHARE %{?TZ_SYS_RO_SHARE:%TZ_SYS_RO_SHARE}%{!?TZ_SYS_RO_SHARE:%_datadir} -%global TZ_SYS_RW_APP %{?TZ_SYS_RW_APP:%TZ_SYS_RW_APP}%!?TZ_SYS_RW_APP:/opt/usr/apps} +%global TZ_SYS_RW_APP %{?TZ_SYS_RW_APP:%TZ_SYS_RW_APP}%{!?TZ_SYS_RW_APP:/opt/usr/apps} %global TZ_SYS_CA_CERTS %{?TZ_SYS_CA_CERTS:%TZ_SYS_CA_CERTS}%{!?TZ_SYS_CA_CERTS:%TZ_SYS_ETC/ssl/certs} %global TZ_SYS_RO_CA_CERTS_ORIG %{?TZ_SYS_RO_CA_CERTS_ORIG:%TZ_SYS_RO_CA_CERTS_ORIG}%{!?TZ_SYS_CA_RO_CERTS_ORGIN:%TZ_SYS_RO_SHARE/ca-certificates/certs} diff --git a/tests/vcore/CMakeLists.txt b/tests/vcore/CMakeLists.txt index c5b23db..5b78409 100644 --- a/tests/vcore/CMakeLists.txt +++ b/tests/vcore/CMakeLists.txt @@ -62,6 +62,8 @@ INSTALL( resource/wgt_negative_certificate resource/wgt_partner resource/wgt_platform + resource/wgt_positive_link + resource/wgt_negative_link resource/tpk resource/attacked-tpk resource/tpk-with-userdata diff --git a/tests/vcore/resource/wgt_negative_link/author-signature.xml b/tests/vcore/resource/wgt_negative_link/author-signature.xml new file mode 100644 index 0000000..c516425 --- /dev/null +++ b/tests/vcore/resource/wgt_negative_link/author-signature.xml @@ -0,0 +1,82 @@ + + + + + + +3tBypO7GkqT8R7QzlWtIHR1vTTBV8+U2/iNt6xCTHWY= + + + +Yc5/Km/O7fXXLzDC0Xc34K+k00+3OFIEkRFZXNT7pAI= + + + +1d0oEZHqPn+QzNzGIHwj9ODby6x9ggFs9uOsav6jPNs= + + + +eDr9ZPFlGlapLDnI1BiALwqovNdBvx3Aspc/lWOH3WI= + + + +vK73PtP7FGlsIb2sihFvwAJX+Ks+GVb8TmdIxtcPGAA= + + + +w1nM4fGtFaoLC3nYKx+3P5twAWunve6foHDsA5kJReY= + + + +1d0oEZHqPn+QzNzGIHwj9ODby6x9ggFs9uOsav6jPNs= + + + + + + +lpo8tUDs054eLlBQXiDPVDVKfw30ZZdtkRs1jd7H5K8= + + + +Xi8Z7uZlb5zbpnptgwGCwtxXMSb/ES9tcOJDgHu9htcYZz1iByEdW4DlJB+B9LpmLMWm5iUC/TZ1 +Ly1qUw/Q24qeVFKbqZOiK2w74CwEdOUs7h1gSuBh2ABxkoaNsJ9mCaxFHRVmEQc1jmWsbnXnCdh7 +8I6XAu1O9AWkyhXFo40= + + + + +MIIClTCCAX2gAwIBAgIGAVODJIU1MA0GCSqGSIb3DQEBBQUAMFYxGjAYBgNVBAoMEVRpemVuIEFz +c29jaWF0aW9uMRowGAYDVQQLDBFUaXplbiBBc3NvY2lhdGlvbjEcMBoGA1UEAwwTVGl6ZW4gRGV2 +ZWxvcGVycyBDQTAeFw0xMjExMDEwMDAwMDBaFw0xOTAxMDEwMDAwMDBaMBExDzANBgNVBAMMBmF1 +dGhvcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAqFd1i8Gps0Kb6WIAzCHSB1vbfjVbigOd +kmOx/ESTS4XHPgA8LfqzjATrsASnCovZjxOkqlBEqENnwHirBAAKFGAfjiJWMrNtpBzpvGWYYe5W +qqct0AxL8XjmMR2IQo0XjeTMT1MwLf7VsjINYeSiKr0YXDIQvjiHM4zxllfml08CAwEAAaMyMDAw +DAYDVR0TAQH/BAIwADALBgNVHQ8EBAMCB4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwDQYJKoZIhvcN +AQEFBQADggEBAG1lTFDWrlOobNHe1ZYXGFFfe0z6QHXXjdQcrbooZGgKYGLxuXrRFXkv101RNSu1 +XwCUhOsYVbHzDGHi/VngrbzYrFVPfNaF4HhfDHSKf+Fh0j0Hyyrkbx7jGzKKfykyUxb9ucHOgAp4 +MIM2RLIX2qqg/D/EHPZQjL4zEj8Ltya64CpiP56HvGZTjAz7W9dj1q+SuMWPiUrbNFjlibUTrlch +sAg/dLdn9DE7vsb9evSkTXHBUh8F3l1f+Ejz8Rc8SQu3Vd3VMBPzwG97SLWWCGCSPCcMRl81jgv+ +knt+MQX2bqF9X5tmFva1zGER1YMhpP74xFW9/ge80Ys6PNpLOng= + + +MIIDOTCCAiGgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMRowGAYDVQQKDBFUaXplbiBBc3NvY2lh +dGlvbjEaMBgGA1UECwwRVGl6ZW4gQXNzb2NpYXRpb24xHjAcBgNVBAMMFVRpemVuIERldmVsb3Bl +cnMgUm9vdDAeFw0xMjAxMDEwMDAwMDBaFw0yNzAxMDEwMDAwMDBaMFYxGjAYBgNVBAoMEVRpemVu +IEFzc29jaWF0aW9uMRowGAYDVQQLDBFUaXplbiBBc3NvY2lhdGlvbjEcMBoGA1UEAwwTVGl6ZW4g +RGV2ZWxvcGVycyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANVGhRGmMIUyBA7o +PCz8Sxut6z6HNkF4oDIuzuKaMzRYPeWodwe9O0gmqAkToQHfwg2giRhE5GoPld0fq+OYMMwSasCu +g8dwODx1eDeSYVuOLWRxpAmbTXOsSFi6VoWeyaPEm18JBHvZBsU5YQtgZ6Kp7MqzvQg3pXOxtajj +vyHxiatJl+xXrHgcXC1wgyG3buty7u/Fi2mvKXJ0PRJcCjjK81dqe/Vr20sRUCrbk02zbm5ggFt/ +jIEhV8wbFRQpliobc7J4dSTKhFfrqGM8rdd54LYhD7gSI1CFSe16pUXfcVR7FhJztRaiGLnCrwBE +dyTZ248+D4L/qR/D0axb3jcCAwEAAaMQMA4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOC +AQEAnOXXQ/1O/QTDHyrmQDtFziqPY3xWlJBqJtEqXiT7Y+Ljpe66e+Ee/OjQMlZe8gu21/8cKklH +95RxjopMWCVedXDUbWdvS2+CdyvVW/quT2E0tjqIzXDekUTYwwhlPWlGxvfj3VsxqSFq3p8Brl04 +1Gx5RKAGyKVsMfTLhbbwSWwApuBUxYfcNpKwLWGPXkysu+HctY03OKv4/xKBnVWiN8ex/Sgesi0M ++OBAOMdZMPK32uJBTeKFx1xZgTLIhk45V0hPOomPjZloiv0LSS11eyd451ufjW0iHRE7WlpR6EvI +W6TFyZgMpQq+kg4hWl2SBTf3s2VI8Ygz7gj8TMlClg== + + + + + \ No newline at end of file diff --git a/tests/vcore/resource/wgt_negative_link/config.xml b/tests/vcore/resource/wgt_negative_link/config.xml new file mode 100644 index 0000000..9f3f4fe --- /dev/null +++ b/tests/vcore/resource/wgt_negative_link/config.xml @@ -0,0 +1,9 @@ + + + + + + + Basic + + diff --git a/tests/vcore/resource/wgt_negative_link/css/style.css b/tests/vcore/resource/wgt_negative_link/css/style.css new file mode 100644 index 0000000..3821d78 --- /dev/null +++ b/tests/vcore/resource/wgt_negative_link/css/style.css @@ -0,0 +1,24 @@ +html, +body { + width: 100%; + height: 100%; + margin: 0 auto; + padding: 0; + background-color: #222222; + color: #ffffff; +} +.page { + width: 100%; + height: 100%; + display: table; +} +.contents { + display: table-cell; + vertical-align: middle; + text-align: center; + -webkit-tap-highlight-color: transparent; +} +#content-text { + font-weight: bold; + font-size: 5em; +} \ No newline at end of file diff --git a/tests/vcore/resource/wgt_negative_link/icon.png b/tests/vcore/resource/wgt_negative_link/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9765b1bda7e5bddf0925555ab204b887a873bf24 GIT binary patch literal 57662 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 O0000 + + + + + + + + Tizen Mobile Web Basic Application + + + + + + +
+
+ Basic +
+
+ + + diff --git a/tests/vcore/resource/wgt_negative_link/js/main.js b/tests/vcore/resource/wgt_negative_link/js/main.js new file mode 100644 index 0000000..9c1dff6 --- /dev/null +++ b/tests/vcore/resource/wgt_negative_link/js/main.js @@ -0,0 +1,21 @@ +window.onload = function() { + // TODO:: Do your initialization job + + // add eventListener for tizenhwkey + document.addEventListener('tizenhwkey', function(e) { + if (e.keyName === "back") { + try { + tizen.application.getCurrentApplication().exit(); + } catch (ignore) {} + } + }); + + // Sample code + var mainPage = document.querySelector('#main'); + + mainPage.addEventListener("click", function() { + var contentText = document.querySelector('#content-text'); + + contentText.innerHTML = (contentText.innerHTML === "Basic") ? "Tizen" : "Basic"; + }); +}; \ No newline at end of file diff --git a/tests/vcore/resource/wgt_negative_link/outboundLink b/tests/vcore/resource/wgt_negative_link/outboundLink new file mode 120000 index 0000000..977114b --- /dev/null +++ b/tests/vcore/resource/wgt_negative_link/outboundLink @@ -0,0 +1 @@ +../wgt_positive_link/icon.png \ No newline at end of file diff --git a/tests/vcore/resource/wgt_negative_link/signature1.xml b/tests/vcore/resource/wgt_negative_link/signature1.xml new file mode 100644 index 0000000..9100b31 --- /dev/null +++ b/tests/vcore/resource/wgt_negative_link/signature1.xml @@ -0,0 +1,84 @@ + + + + + + +216byXwFRY0ycTNU+u3YEocLm4bZ3IZP+Q+GxwvTuKI= + + + +3tBypO7GkqT8R7QzlWtIHR1vTTBV8+U2/iNt6xCTHWY= + + + +Yc5/Km/O7fXXLzDC0Xc34K+k00+3OFIEkRFZXNT7pAI= + + + +1d0oEZHqPn+QzNzGIHwj9ODby6x9ggFs9uOsav6jPNs= + + + +eDr9ZPFlGlapLDnI1BiALwqovNdBvx3Aspc/lWOH3WI= + + + +vK73PtP7FGlsIb2sihFvwAJX+Ks+GVb8TmdIxtcPGAA= + + + +w1nM4fGtFaoLC3nYKx+3P5twAWunve6foHDsA5kJReY= + + + +1d0oEZHqPn+QzNzGIHwj9ODby6x9ggFs9uOsav6jPNs= + + + + + + +u/jU3U4Zm5ihTMSjKGlGYbWzDfRkGphPPHx3gJIYEJ4= + + + +Wa4AWsiNy7QNJfPzl3NLSvF1wUCUvwA4LWero5isjXI4SyoFLLufqgleDNU32G6tvhhKfqkwNcCl +73VcLWEfA+ku+HwJuPm8Eh5FJMvifvqlmZO7Kt2GLiWKhMKM1firJxlhUHSpf7v1elMeRim3RTqg +SFuyA/hrMRUcuBENGXg= + + + + +MIICmzCCAgQCCQDXI7WLdVZwiTANBgkqhkiG9w0BAQUFADCBjzELMAkGA1UEBhMCS1IxDjAMBgNV +BAgMBVN1d29uMQ4wDAYDVQQHDAVTdXdvbjEWMBQGA1UECgwNVGl6ZW4gVGVzdCBDQTEiMCAGA1UE +CwwZVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEkMCIGA1UEAwwbVGl6ZW4gUHVibGljIERpc3Ry +aWJ1dG9yIENBMB4XDTEyMTAyOTEzMDMwNFoXDTIyMTAyNzEzMDMwNFowgZMxCzAJBgNVBAYTAktS +MQ4wDAYDVQQIDAVTdXdvbjEOMAwGA1UEBwwFU3V3b24xFjAUBgNVBAoMDVRpemVuIFRlc3QgQ0Ex +IjAgBgNVBAsMGVRpemVuIERpc3RyaWJ1dG9yIFRlc3QgQ0ExKDAmBgNVBAMMH1RpemVuIFB1Ymxp +YyBEaXN0cmlidXRvciBTaWduZXIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALtMvlc5hENK +90ZdA+y66+Sy0enD1gpZDBh5T9RP0oRsptJv5jjNTseQbQi0SZOdOXb6J7iQdlBCtR343RpIEz8H +mrBy7mSY7mgwoU4EPpp4CTSUeAuKcmvrNOngTp5Hv7Ngf02TTHOLK3hZLpGayaDviyNZB5PdqQdB +hokKjzAzAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAvGp1gxxAIlFfhJH1efjb9BJK/rtRkbYn9+Ez +GEbEULg1svsgnyWisFimI3uFvgI/swzr1eKVY3Sc8MQ3+Fdy3EkbDZ2+WAubhcEkorTWjzWz2fL1 +vKaYjeIsuEX6TVRUugHWudPzcEuQRLQf8ibZWjbQdBmpeQYBMg5x+xKLCJc= + + +MIICtDCCAh2gAwIBAgIJAMDbehElPNKvMA0GCSqGSIb3DQEBBQUAMIGVMQswCQYDVQQGEwJLUjEO +MAwGA1UECAwFU3V3b24xDjAMBgNVBAcMBVN1d29uMRYwFAYDVQQKDA1UaXplbiBUZXN0IENBMSMw +IQYDVQQLDBpUVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEpMCcGA1UEAwwgVGl6ZW4gUHVibGlj +IERpc3RyaWJ1dG9yIFJvb3QgQ0EwHhcNMTIxMDI5MTMwMjUwWhcNMjIxMDI3MTMwMjUwWjCBjzEL +MAkGA1UEBhMCS1IxDjAMBgNVBAgMBVN1d29uMQ4wDAYDVQQHDAVTdXdvbjEWMBQGA1UECgwNVGl6 +ZW4gVGVzdCBDQTEiMCAGA1UECwwZVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEkMCIGA1UEAwwb +VGl6ZW4gUHVibGljIERpc3RyaWJ1dG9yIENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDe +OTS/3nXvkDEmsFCJIvRlQ3RKDcxdWJJp625pFqHdmoJBdV+x6jl1raGK2Y1sp2Gdvpjc/z92yzAp +bE/UVLPh/tRNZPeGhzU4ejDDm7kzdr2f7Ia0U98K+OoY12ucwg7TYNItj9is7Cj4blGfuMDzd2ah +2AgnCGlwNwV/pv+uVQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBACqJ +KO33YdoGudwanZIxMdXuxnnD9R6u72ltKk1S4zPfMJJv482CRGCI4FK6djhlsI4i0Lt1SVIJEed+ +yc3qckGm19dW+4xdlkekon7pViEBWuyHw8OWv3RXtTum1+PGHjBJ2eYY4ZKIpz73U/1NC16sTB/0 +VhfnkHwPltmrpYVe + + + + + \ No newline at end of file diff --git a/tests/vcore/resource/wgt_positive_link/author-signature.xml b/tests/vcore/resource/wgt_positive_link/author-signature.xml new file mode 100644 index 0000000..bd37184 --- /dev/null +++ b/tests/vcore/resource/wgt_positive_link/author-signature.xml @@ -0,0 +1,82 @@ + + + + + + +3tBypO7GkqT8R7QzlWtIHR1vTTBV8+U2/iNt6xCTHWY= + + + +Yc5/Km/O7fXXLzDC0Xc34K+k00+3OFIEkRFZXNT7pAI= + + + +1d0oEZHqPn+QzNzGIHwj9ODby6x9ggFs9uOsav6jPNs= + + + +eDr9ZPFlGlapLDnI1BiALwqovNdBvx3Aspc/lWOH3WI= + + + +vK73PtP7FGlsIb2sihFvwAJX+Ks+GVb8TmdIxtcPGAA= + + + +w1nM4fGtFaoLC3nYKx+3P5twAWunve6foHDsA5kJReY= + + + +1d0oEZHqPn+QzNzGIHwj9ODby6x9ggFs9uOsav6jPNs= + + + + + + +lpo8tUDs054eLlBQXiDPVDVKfw30ZZdtkRs1jd7H5K8= + + + +e8VhZG2ZtBl3KlJhf/QvnTzwpv1HeTSK9Urkjb+Lx+4PFZWDFgb9UCKSeh1Kc1giUtOkiBVg0bQO +oO0akHeDXe5qcDWo94ZxWLDbNuCY7A3+lmX/wvSTZxCa8OM024ium+MP8PzRKlcqew0D8gK1785u +6YSrtpsdmvdnTI9G/Ew= + + + + +MIIClTCCAX2gAwIBAgIGAVODJIU1MA0GCSqGSIb3DQEBBQUAMFYxGjAYBgNVBAoMEVRpemVuIEFz +c29jaWF0aW9uMRowGAYDVQQLDBFUaXplbiBBc3NvY2lhdGlvbjEcMBoGA1UEAwwTVGl6ZW4gRGV2 +ZWxvcGVycyBDQTAeFw0xMjExMDEwMDAwMDBaFw0xOTAxMDEwMDAwMDBaMBExDzANBgNVBAMMBmF1 +dGhvcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAqFd1i8Gps0Kb6WIAzCHSB1vbfjVbigOd +kmOx/ESTS4XHPgA8LfqzjATrsASnCovZjxOkqlBEqENnwHirBAAKFGAfjiJWMrNtpBzpvGWYYe5W +qqct0AxL8XjmMR2IQo0XjeTMT1MwLf7VsjINYeSiKr0YXDIQvjiHM4zxllfml08CAwEAAaMyMDAw +DAYDVR0TAQH/BAIwADALBgNVHQ8EBAMCB4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwDQYJKoZIhvcN +AQEFBQADggEBAG1lTFDWrlOobNHe1ZYXGFFfe0z6QHXXjdQcrbooZGgKYGLxuXrRFXkv101RNSu1 +XwCUhOsYVbHzDGHi/VngrbzYrFVPfNaF4HhfDHSKf+Fh0j0Hyyrkbx7jGzKKfykyUxb9ucHOgAp4 +MIM2RLIX2qqg/D/EHPZQjL4zEj8Ltya64CpiP56HvGZTjAz7W9dj1q+SuMWPiUrbNFjlibUTrlch +sAg/dLdn9DE7vsb9evSkTXHBUh8F3l1f+Ejz8Rc8SQu3Vd3VMBPzwG97SLWWCGCSPCcMRl81jgv+ +knt+MQX2bqF9X5tmFva1zGER1YMhpP74xFW9/ge80Ys6PNpLOng= + + +MIIDOTCCAiGgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMRowGAYDVQQKDBFUaXplbiBBc3NvY2lh +dGlvbjEaMBgGA1UECwwRVGl6ZW4gQXNzb2NpYXRpb24xHjAcBgNVBAMMFVRpemVuIERldmVsb3Bl +cnMgUm9vdDAeFw0xMjAxMDEwMDAwMDBaFw0yNzAxMDEwMDAwMDBaMFYxGjAYBgNVBAoMEVRpemVu +IEFzc29jaWF0aW9uMRowGAYDVQQLDBFUaXplbiBBc3NvY2lhdGlvbjEcMBoGA1UEAwwTVGl6ZW4g +RGV2ZWxvcGVycyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANVGhRGmMIUyBA7o +PCz8Sxut6z6HNkF4oDIuzuKaMzRYPeWodwe9O0gmqAkToQHfwg2giRhE5GoPld0fq+OYMMwSasCu +g8dwODx1eDeSYVuOLWRxpAmbTXOsSFi6VoWeyaPEm18JBHvZBsU5YQtgZ6Kp7MqzvQg3pXOxtajj +vyHxiatJl+xXrHgcXC1wgyG3buty7u/Fi2mvKXJ0PRJcCjjK81dqe/Vr20sRUCrbk02zbm5ggFt/ +jIEhV8wbFRQpliobc7J4dSTKhFfrqGM8rdd54LYhD7gSI1CFSe16pUXfcVR7FhJztRaiGLnCrwBE +dyTZ248+D4L/qR/D0axb3jcCAwEAAaMQMA4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOC +AQEAnOXXQ/1O/QTDHyrmQDtFziqPY3xWlJBqJtEqXiT7Y+Ljpe66e+Ee/OjQMlZe8gu21/8cKklH +95RxjopMWCVedXDUbWdvS2+CdyvVW/quT2E0tjqIzXDekUTYwwhlPWlGxvfj3VsxqSFq3p8Brl04 +1Gx5RKAGyKVsMfTLhbbwSWwApuBUxYfcNpKwLWGPXkysu+HctY03OKv4/xKBnVWiN8ex/Sgesi0M ++OBAOMdZMPK32uJBTeKFx1xZgTLIhk45V0hPOomPjZloiv0LSS11eyd451ufjW0iHRE7WlpR6EvI +W6TFyZgMpQq+kg4hWl2SBTf3s2VI8Ygz7gj8TMlClg== + + + + + \ No newline at end of file diff --git a/tests/vcore/resource/wgt_positive_link/config.xml b/tests/vcore/resource/wgt_positive_link/config.xml new file mode 100644 index 0000000..9f3f4fe --- /dev/null +++ b/tests/vcore/resource/wgt_positive_link/config.xml @@ -0,0 +1,9 @@ + + + + + + + Basic + + diff --git a/tests/vcore/resource/wgt_positive_link/css/style.css b/tests/vcore/resource/wgt_positive_link/css/style.css new file mode 100644 index 0000000..3821d78 --- /dev/null +++ b/tests/vcore/resource/wgt_positive_link/css/style.css @@ -0,0 +1,24 @@ +html, +body { + width: 100%; + height: 100%; + margin: 0 auto; + padding: 0; + background-color: #222222; + color: #ffffff; +} +.page { + width: 100%; + height: 100%; + display: table; +} +.contents { + display: table-cell; + vertical-align: middle; + text-align: center; + -webkit-tap-highlight-color: transparent; +} +#content-text { + font-weight: bold; + font-size: 5em; +} \ No newline at end of file diff --git a/tests/vcore/resource/wgt_positive_link/icon.png b/tests/vcore/resource/wgt_positive_link/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9765b1bda7e5bddf0925555ab204b887a873bf24 GIT binary patch literal 57662 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 O0000 + + + + + + + + Tizen Mobile Web Basic Application + + + + + + +
+
+ Basic +
+
+ + + diff --git a/tests/vcore/resource/wgt_positive_link/js/main.js b/tests/vcore/resource/wgt_positive_link/js/main.js new file mode 100644 index 0000000..9c1dff6 --- /dev/null +++ b/tests/vcore/resource/wgt_positive_link/js/main.js @@ -0,0 +1,21 @@ +window.onload = function() { + // TODO:: Do your initialization job + + // add eventListener for tizenhwkey + document.addEventListener('tizenhwkey', function(e) { + if (e.keyName === "back") { + try { + tizen.application.getCurrentApplication().exit(); + } catch (ignore) {} + } + }); + + // Sample code + var mainPage = document.querySelector('#main'); + + mainPage.addEventListener("click", function() { + var contentText = document.querySelector('#content-text'); + + contentText.innerHTML = (contentText.innerHTML === "Basic") ? "Tizen" : "Basic"; + }); +}; \ No newline at end of file diff --git a/tests/vcore/resource/wgt_positive_link/link b/tests/vcore/resource/wgt_positive_link/link new file mode 120000 index 0000000..12585c9 --- /dev/null +++ b/tests/vcore/resource/wgt_positive_link/link @@ -0,0 +1 @@ +icon.png \ No newline at end of file diff --git a/tests/vcore/resource/wgt_positive_link/signature1.xml b/tests/vcore/resource/wgt_positive_link/signature1.xml new file mode 100644 index 0000000..bde3662 --- /dev/null +++ b/tests/vcore/resource/wgt_positive_link/signature1.xml @@ -0,0 +1,84 @@ + + + + + + +DUh6Bz3owCQr3cyqdh8qDBzhq9lv+4xTBgKoW30/BH4= + + + +3tBypO7GkqT8R7QzlWtIHR1vTTBV8+U2/iNt6xCTHWY= + + + +Yc5/Km/O7fXXLzDC0Xc34K+k00+3OFIEkRFZXNT7pAI= + + + +1d0oEZHqPn+QzNzGIHwj9ODby6x9ggFs9uOsav6jPNs= + + + +eDr9ZPFlGlapLDnI1BiALwqovNdBvx3Aspc/lWOH3WI= + + + +vK73PtP7FGlsIb2sihFvwAJX+Ks+GVb8TmdIxtcPGAA= + + + +w1nM4fGtFaoLC3nYKx+3P5twAWunve6foHDsA5kJReY= + + + +1d0oEZHqPn+QzNzGIHwj9ODby6x9ggFs9uOsav6jPNs= + + + + + + +u/jU3U4Zm5ihTMSjKGlGYbWzDfRkGphPPHx3gJIYEJ4= + + + +mrSCC3LnWsUZSBSt8U4zRMTPEw7OK+D0Na/ckLKxkDK9GoIp4fvrtG+LsTlfJJL9XBR/U/jTwimu +GqaD7dZtJktYeoxeMoFmoISd3cFuUbTIF8ZHoYF/X2Jds8hrXjdFQhUHFAJFtjeZZDZZ/8md4qcv +JI5SBPh3JCjnqh1uxKo= + + + + +MIICmzCCAgQCCQDXI7WLdVZwiTANBgkqhkiG9w0BAQUFADCBjzELMAkGA1UEBhMCS1IxDjAMBgNV +BAgMBVN1d29uMQ4wDAYDVQQHDAVTdXdvbjEWMBQGA1UECgwNVGl6ZW4gVGVzdCBDQTEiMCAGA1UE +CwwZVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEkMCIGA1UEAwwbVGl6ZW4gUHVibGljIERpc3Ry +aWJ1dG9yIENBMB4XDTEyMTAyOTEzMDMwNFoXDTIyMTAyNzEzMDMwNFowgZMxCzAJBgNVBAYTAktS +MQ4wDAYDVQQIDAVTdXdvbjEOMAwGA1UEBwwFU3V3b24xFjAUBgNVBAoMDVRpemVuIFRlc3QgQ0Ex +IjAgBgNVBAsMGVRpemVuIERpc3RyaWJ1dG9yIFRlc3QgQ0ExKDAmBgNVBAMMH1RpemVuIFB1Ymxp +YyBEaXN0cmlidXRvciBTaWduZXIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALtMvlc5hENK +90ZdA+y66+Sy0enD1gpZDBh5T9RP0oRsptJv5jjNTseQbQi0SZOdOXb6J7iQdlBCtR343RpIEz8H +mrBy7mSY7mgwoU4EPpp4CTSUeAuKcmvrNOngTp5Hv7Ngf02TTHOLK3hZLpGayaDviyNZB5PdqQdB +hokKjzAzAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAvGp1gxxAIlFfhJH1efjb9BJK/rtRkbYn9+Ez +GEbEULg1svsgnyWisFimI3uFvgI/swzr1eKVY3Sc8MQ3+Fdy3EkbDZ2+WAubhcEkorTWjzWz2fL1 +vKaYjeIsuEX6TVRUugHWudPzcEuQRLQf8ibZWjbQdBmpeQYBMg5x+xKLCJc= + + +MIICtDCCAh2gAwIBAgIJAMDbehElPNKvMA0GCSqGSIb3DQEBBQUAMIGVMQswCQYDVQQGEwJLUjEO +MAwGA1UECAwFU3V3b24xDjAMBgNVBAcMBVN1d29uMRYwFAYDVQQKDA1UaXplbiBUZXN0IENBMSMw +IQYDVQQLDBpUVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEpMCcGA1UEAwwgVGl6ZW4gUHVibGlj +IERpc3RyaWJ1dG9yIFJvb3QgQ0EwHhcNMTIxMDI5MTMwMjUwWhcNMjIxMDI3MTMwMjUwWjCBjzEL +MAkGA1UEBhMCS1IxDjAMBgNVBAgMBVN1d29uMQ4wDAYDVQQHDAVTdXdvbjEWMBQGA1UECgwNVGl6 +ZW4gVGVzdCBDQTEiMCAGA1UECwwZVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEkMCIGA1UEAwwb +VGl6ZW4gUHVibGljIERpc3RyaWJ1dG9yIENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDe +OTS/3nXvkDEmsFCJIvRlQ3RKDcxdWJJp625pFqHdmoJBdV+x6jl1raGK2Y1sp2Gdvpjc/z92yzAp +bE/UVLPh/tRNZPeGhzU4ejDDm7kzdr2f7Ia0U98K+OoY12ucwg7TYNItj9is7Cj4blGfuMDzd2ah +2AgnCGlwNwV/pv+uVQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBACqJ +KO33YdoGudwanZIxMdXuxnnD9R6u72ltKk1S4zPfMJJv482CRGCI4FK6djhlsI4i0Lt1SVIJEed+ +yc3qckGm19dW+4xdlkekon7pViEBWuyHw8OWv3RXtTum1+PGHjBJ2eYY4ZKIpz73U/1NC16sTB/0 +VhfnkHwPltmrpYVe + + + + + \ No newline at end of file diff --git a/tests/vcore/test-common.cpp b/tests/vcore/test-common.cpp index 33a83ce..0e8d36b 100644 --- a/tests/vcore/test-common.cpp +++ b/tests/vcore/test-common.cpp @@ -23,6 +23,8 @@ const std::string TestData::widget_negative_signature_path = std::string(TESTAPP const std::string TestData::widget_negative_certificate_path = std::string(TESTAPP_RES_DIR) + "apps/wgt_negative_certificate"; const std::string TestData::widget_partner_path = std::string(TESTAPP_RES_DIR) + "apps/wgt_partner"; const std::string TestData::widget_platform_path = std::string(TESTAPP_RES_DIR) + "apps/wgt_platform"; +const std::string TestData::widget_positive_link_path = std::string(TESTAPP_RES_DIR) + "apps/wgt_positive_link"; +const std::string TestData::widget_negative_link_path = std::string(TESTAPP_RES_DIR) + "apps/wgt_negative_link"; const std::string TestData::tpk_path = std::string(TESTAPP_RES_DIR) + "apps/tpk"; const std::string TestData::attacked_tpk_path = std::string(TESTAPP_RES_DIR) + "apps/attacked-tpk"; diff --git a/tests/vcore/test-common.h b/tests/vcore/test-common.h index ab6154d..204cf51 100644 --- a/tests/vcore/test-common.h +++ b/tests/vcore/test-common.h @@ -26,6 +26,8 @@ extern const std::string widget_negative_signature_path; extern const std::string widget_negative_certificate_path; extern const std::string widget_partner_path; extern const std::string widget_platform_path; +extern const std::string widget_positive_link_path; +extern const std::string widget_negative_link_path;; extern const std::string tpk_path; extern const std::string attacked_tpk_path; diff --git a/tests/vcore/test-signature-validator.cpp b/tests/vcore/test-signature-validator.cpp index f507328..640e77e 100644 --- a/tests/vcore/test-signature-validator.cpp +++ b/tests/vcore/test-signature-validator.cpp @@ -294,6 +294,55 @@ RUNNER_TEST(T00110_positive_platform_uncheck_ref) "visibility check failed."); } } +RUNNER_TEST(T00111_positive_wgt_link) +{ + SignatureFileInfoSet signatureSet; + SignatureFinder signatureFinder(TestData::widget_positive_link_path); + RUNNER_ASSERT_MSG( + SignatureFinder::NO_ERROR == signatureFinder.find(signatureSet), + "SignatureFinder failed"); + + for (auto &sig : signatureSet) { + SignatureValidator validator(sig); + SignatureData data; + VCerr result = validator.check( + TestData::widget_positive_link_path, + true, + true, + data); + + // this condition is for OCSP Success in signature1.xml + if (!data.isAuthorSignature()) + RUNNER_ASSERT_MSG(result == E_SIG_NONE, + "If DT_LNK type point within package, it should be success: " + << validator.errorToString(result)); + } +} + +RUNNER_TEST(T00112_negative_wgt_link) +{ + SignatureFileInfoSet signatureSet; + SignatureFinder signatureFinder(TestData::widget_negative_link_path); + RUNNER_ASSERT_MSG( + SignatureFinder::NO_ERROR == signatureFinder.find(signatureSet), + "SignatureFinder failed"); + + for (auto &sig : signatureSet) { + SignatureValidator validator(sig); + SignatureData data; + VCerr result = validator.check( + TestData::widget_negative_link_path, + true, + true, + data); + + if (!data.isAuthorSignature()) + RUNNER_ASSERT_MSG(result == E_SIG_INVALID_REF, + "If DT_LNK type point outside of package, it should be fail: " + << validator.errorToString(result)); + } +} + RUNNER_TEST(T00151_negative_hash_check_ref) { SignatureFileInfoSet signatureSet; diff --git a/vcore/vcore/ReferenceValidator.cpp b/vcore/vcore/ReferenceValidator.cpp index 72fb404..3b59682 100644 --- a/vcore/vcore/ReferenceValidator.cpp +++ b/vcore/vcore/ReferenceValidator.cpp @@ -15,6 +15,7 @@ */ /* * @author Bartlomiej Grzelewski (b.grzelewski@samsung.com) + * Sangwan Kwon (sangwan.kwon@samsung.com) * @file ReferenceValidator.cpp * @version 1.0 * @brief Compare signature reference list and list of widget file. @@ -25,11 +26,17 @@ #include #include #include +#include +#include #include #include +#ifndef PATH_MAX +#define PATH_MAX 4096 +#endif + namespace { const char *SPECIAL_SYMBOL_CURRENT_DIR = "."; @@ -53,7 +60,8 @@ class ReferenceValidator::Impl virtual ~Impl(){} - Result checkReferences(const SignatureData &signatureData){ + Result checkReferences(const SignatureData &signatureData) + { const ReferenceSet &refSet = signatureData.getReferenceSet(); ReferenceSet refDecoded; @@ -73,6 +81,19 @@ class ReferenceValidator::Impl signatureData.isAuthorSignature()); } + Result checkOutbound(const std::string &linkPath, const std::string &appPath) + { + char resolvedPath[PATH_MAX]; + if (realpath((appPath + "/" + linkPath).c_str(), resolvedPath) == NULL) + return ERROR_READING_LNK; + + std::string linkRealPath(resolvedPath); + if (linkRealPath.compare(0, appPath.size(), appPath) == 0) + return NO_ERROR; + else + return ERROR_OUTBOUND_LNK; + } + private: int hexToInt(char hex); std::string decodeProcent(const std::string &path); @@ -187,6 +208,24 @@ ReferenceValidator::Result ReferenceValidator::Impl::dfsCheckDirectories( closedir(dirp); return ERROR_REFERENCE_NOT_FOUND; } + } else if (result->d_type == DT_LNK) { + std::string linkPath(directory + result->d_name); + + if (referenceSet.end() == + referenceSet.find(linkPath)) + { + LogDebug("Found file : " << (directory + result->d_name)); + LogError("Unknown ERROR_REFERENCE_NOT_FOUND."); + closedir(dirp); + return ERROR_REFERENCE_NOT_FOUND; + } + + Result ret = checkOutbound(linkPath, m_dirpath); + if (ret != NO_ERROR) { + LogError("Link file point wrong path"); + closedir(dirp); + return ret; + } } else { LogError("Unknown file type."); closedir(dirp); @@ -218,4 +257,9 @@ ReferenceValidator::Result ReferenceValidator::checkReferences( return m_impl->checkReferences(signatureData); } +ReferenceValidator::Result ReferenceValidator::checkOutbound( + const std::string &linkPath, const std::string &appPath) +{ + return m_impl->checkOutbound(linkPath, appPath); +} } // ValidationCore diff --git a/vcore/vcore/ReferenceValidator.h b/vcore/vcore/ReferenceValidator.h index b370773..cd819c3 100644 --- a/vcore/vcore/ReferenceValidator.h +++ b/vcore/vcore/ReferenceValidator.h @@ -15,6 +15,7 @@ */ /* * @author Bartlomiej Grzelewski (b.grzelewski@samsung.com) + * Sangwan Kwon (sangwan.kwon@samsung.com) * @file ReferenceValidator.h * @version 1.0 * @brief Compare signature reference list with widget package. @@ -38,7 +39,9 @@ class ReferenceValidator : VcoreDPL::Noncopyable ERROR_READING_DIR, ERROR_UNSUPPORTED_FILE_TYPE, ERROR_REFERENCE_NOT_FOUND, - ERROR_DECODING_URL + ERROR_DECODING_URL, + ERROR_OUTBOUND_LNK, + ERROR_READING_LNK }; ReferenceValidator(const std::string &dirpath); @@ -46,6 +49,7 @@ class ReferenceValidator : VcoreDPL::Noncopyable virtual ~ReferenceValidator(); Result checkReferences(const SignatureData &signatureData); + Result checkOutbound(const std::string &linkPath, const std::string &appPath); private: class Impl; -- 2.7.4