/* PKIX1 Templates in TTCN-3
 *
 * Author: Philipp Maier <pmaier@sysmocom.de> / sysmocom - s.f.m.c. GmbH
 *
 * Released under the terms of GNU General Public License, Version 2 or
 * (at your option) any later version.
 *
 * SPDX-License-Identifier: GPL-2.0-or-later
 */

module PKIX1Explicit88_Templates {

import from PKIX1Explicit88_Types all;
import from PKIX1Explicit88 all;
import from PKIX1Implicit88 all;

/* Test certificate:
SGP.26_v1.2_files/Valid test cases/CertificateIssuer/CERT_CI_ECDSA_NIST.der
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            b8:74:f3:ab:fa:6c:44:d3
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: CN = GSMA Test CI, OU = TESTCERT, O = RSPTEST, C = IT
        Validity
            Not Before: Feb  1 15:39:42 2017 GMT
            Not After : Feb  1 15:39:42 2052 GMT
        Subject: CN = GSMA Test CI, OU = TESTCERT, O = RSPTEST, C = IT
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:94:06:57:a6:73:dc:28:8f:89:d5:2e:a8:a4:77:
                    04:99:27:91:f9:c3:4b:00:36:e6:33:e2:d0:cb:a9:
                    45:4d:65:db:32:eb:17:98:17:99:d2:f2:43:88:ee:
                    2b:95:c1:09:45:46:c9:79:01:ce:ae:ba:96:50:91:
                    9a:2e:20:d2:29
                ASN1 OID: prime256v1
                NIST CURVE: P-256
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                F5:41:72:BD:F9:8A:95:D6:5C:BE:B8:8A:38:A1:C1:1D:80:0A:85:C3
            X509v3 Basic Constraints: critical
                CA:TRUE
            X509v3 Certificate Policies: critical
                Policy: 2.23.146.1.2.1.0

            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign
            X509v3 Subject Alternative Name:
                Registered ID:2.999.1
            X509v3 CRL Distribution Points:

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-A.crl

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-B.crl

    Signature Algorithm: ecdsa-with-SHA256
         30:46:02:21:00:91:f2:51:c9:71:53:b9:cf:85:37:9a:74:8b:
         57:2a:49:68:52:45:56:c4:7f:33:eb:69:7b:55:91:2c:c0:f2:
         d2:02:21:00:dc:e4:9e:73:f3:49:ec:d0:59:10:ef:9d:f6:b6:
         9a:86:7a:bf:38:9d:c8:6b:84:11:b4:df:e1:96:91:50:f5:f9
*/
const octetstring cert_ci_nist :=
'30820256308201fba003020102020900b874f3abfa6c44d3300a06082a86
48ce3d04030230493115301306035504030c0c47534d4120546573742043
493111300f060355040b0c0854455354434552543110300e060355040a0c
0752535054455354310b30090603550406130249543020170d3137303230
313135333934325a180f32303532303230313135333934325a3049311530
1306035504030c0c47534d4120546573742043493111300f060355040b0c
0854455354434552543110300e060355040a0c0752535054455354310b30
090603550406130249543059301306072a8648ce3d020106082a8648ce3d
03010703420004940657a673dc288f89d52ea8a47704992791f9c34b0036
e633e2d0cba9454d65db32eb17981799d2f24388ee2b95c1094546c97901
ceaeba9650919a2e20d229a381c93081c6301d0603551d0e04160414f541
72bdf98a95d65cbeb88a38a1c11d800a85c3300f0603551d130101ff0405
30030101ff30170603551d200101ff040d300b3009060767811201020100
300e0603551d0f0101ff040403020106300e0603551d1104073005880388
3701305b0603551d1f045430523027a025a0238621687474703a2f2f6369
2e746573742e67736d612e636f6d2f43524c2d412e63726c3027a025a023
8621687474703a2f2f63692e746573742e67736d612e636f6d2f43524c2d
422e63726c300a06082a8648ce3d040302034900304602210091f251c971
53b9cf85379a748b572a4968524556c47f33eb697b55912cc0f2d2022100
dce49e73f349ecd05910ef9df6b69a867abf389dc86b8411b4dfe1969150
f5f9'O
function f_ts_cert_ci_nist() return Certificate {
	 var Certificate cert_decoded;
	 cert_decoded := dec_Certificate(cert_ci_nist);
	 return cert_decoded;
}
template (value) Certificate ts_cert_ci_nist := f_ts_cert_ci_nist();

/* Test certificate:
SGP.26_v1.2_files/Valid test cases/CertificateIssuer/CERT_CI_ECDSA_BRP.der
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            b8:74:f3:ab:fa:6c:44:d3
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: CN = GSMA Test CI, OU = TESTCERT, O = RSPTEST, C = IT
        Validity
            Not Before: Apr 19 10:34:38 2017 GMT
            Not After : Apr 18 10:34:38 2052 GMT
        Subject: CN = GSMA Test CI, OU = TESTCERT, O = RSPTEST, C = IT
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:27:87:b4:d5:6e:d8:24:a9:e6:be:04:e1:88:7f:
                    6b:98:ba:fe:b8:c7:63:f5:28:37:f7:01:13:e9:36:
                    4e:dd:be:13:9b:c0:c7:de:7e:16:8f:1e:5c:d0:c1:
                    85:34:fc:50:64:e6:4f:68:6d:c5:33:27:ca:7f:1d:
                    ce:a8:5a:29:94
                ASN1 OID: brainpoolP256r1
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                C0:BC:70:BA:36:92:9D:43:B4:67:FF:57:57:05:30:E5:7A:B8:FC:D8
            X509v3 Basic Constraints: critical
                CA:TRUE
            X509v3 Certificate Policies: critical
                Policy: 2.23.146.1.2.1.0

            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign
            X509v3 Subject Alternative Name:
                Registered ID:2.999.1
            X509v3 CRL Distribution Points:

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-A.crl

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-B.crl

    Signature Algorithm: ecdsa-with-SHA256
         30:44:02:20:06:c6:c3:9f:5a:b9:71:5d:72:c5:65:dc:f5:ff:
         3b:fe:f3:fb:70:ef:0a:e3:3a:07:36:66:91:35:86:d0:ef:92:
         02:20:16:b2:44:eb:46:9f:2a:2f:58:6b:c1:c3:20:b4:b6:43:
         1b:8f:74:d9:41:f7:f1:83:2b:43:25:52:b1:61:df:a2
*/
const octetstring cert_ci_brp :=
'30820255308201fca003020102020900b874f3abfa6c44d3300a06082a86
48ce3d04030230493115301306035504030c0c47534d4120546573742043
493111300f060355040b0c0854455354434552543110300e060355040a0c
0752535054455354310b30090603550406130249543020170d3137303431
393130333433385a180f32303532303431383130333433385a3049311530
1306035504030c0c47534d4120546573742043493111300f060355040b0c
0854455354434552543110300e060355040a0c0752535054455354310b30
09060355040613024954305a301406072a8648ce3d020106092b24030302
08010107034200042787b4d56ed824a9e6be04e1887f6b98bafeb8c763f5
2837f70113e9364eddbe139bc0c7de7e168f1e5cd0c18534fc5064e64f68
6dc53327ca7f1dcea85a2994a381c93081c6301d0603551d0e04160414c0
bc70ba36929d43b467ff57570530e57ab8fcd8300f0603551d130101ff04
0530030101ff30170603551d200101ff040d300b30090607678112010201
00300e0603551d0f0101ff040403020106300e0603551d11040730058803
883701305b0603551d1f045430523027a025a0238621687474703a2f2f63
692e746573742e67736d612e636f6d2f43524c2d412e63726c3027a025a0
238621687474703a2f2f63692e746573742e67736d612e636f6d2f43524c
2d422e63726c300a06082a8648ce3d0403020347003044022006c6c39f5a
b9715d72c565dcf5ff3bfef3fb70ef0ae33a073666913586d0ef92022016
b244eb469f2a2f586bc1c320b4b6431b8f74d941f7f1832b432552b161df
a2'O
function f_ts_cert_ci_brp() return Certificate {
	 var Certificate cert_decoded;
	 cert_decoded := dec_Certificate(cert_ci_brp);
	 return cert_decoded;
}
template (value) Certificate ts_cert_ci_brp := f_ts_cert_ci_brp();


/* Test certificate:
SGP.26_v1.2_files/Valid test cases/eUICC/CERT_EUICC_ECDSA_NIST.der
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            02:00:00:00:00:00:00:00:01
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: C = DE, O = RSP Test EUM, CN = EUM Test
        Validity
            Not Before: Jan  9 14:39:03 2017 GMT
            Not After : Nov  2 14:39:03 7492 GMT
        Subject: C = DE, O = RSP Test EUM, serialNumber = 89049032123451234512345678901235, CN = Test eUICC
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:6d:b3:f5:3a:dc:87:dc:2f:f1:0c:7b:fc:d8:7a:
                    d1:3a:e9:70:09:af:a0:65:a6:75:7e:e5:71:b3:f2:
                    eb:b1:8f:46:c1:d6:8f:3e:de:b0:e7:4b:2e:5d:54:
                    20:51:e7:d2:7f:50:95:20:28:60:5a:fd:ef:79:fe:
                    9f:ff:d0:39:59
                ASN1 OID: prime256v1
                NIST CURVE: P-256
        X509v3 extensions:
            X509v3 Authority Key Identifier:
                keyid:DD:3D:A2:4D:35:0C:1C:C5:D0:AF:09:65:F4:0E:C3:4C:5E:E4:09:F1

            X509v3 Subject Key Identifier:
                A5:24:76:AF:5D:50:AA:37:64:37:CC:B1:DA:21:72:EF:45:F4:84:F0
            X509v3 Key Usage: critical
                Digital Signature
            X509v3 Certificate Policies: critical
                Policy: 2.23.146.1.2.1.1

    Signature Algorithm: ecdsa-with-SHA256
         30:44:02:20:5e:da:e9:e3:b9:27:8a:36:12:65:dc:bd:13:a3:
         bf:48:d7:ae:c4:3d:29:05:12:5b:fa:ca:2f:4c:f3:a7:e6:54:
         02:20:08:9f:95:6b:b9:89:59:65:77:ec:98:6d:f7:af:66:f2:
         a4:46:25:f3:85:77:4c:56:65:07:f6:f2:cd:72:e0:2c
*/
const octetstring cert_euicc_nist :=
'308201fe308201a5a0030201020209020000000000000001300a06082a86
48ce3d0403023037310b300906035504061302444531153013060355040a
0c0c52535020546573742045554d3111300f06035504030c0845554d2054
6573743020170d3137303130393134333930335a180f3734393231313032
3134333930335a3064310b30090603550406130244453115301306035504
0a0c0c52535020546573742045554d312930270603550405132038393034
393033323132333435313233343531323334353637383930313233353113
301106035504030c0a546573742065554943433059301306072a8648ce3d
020106082a8648ce3d030107034200046db3f53adc87dc2ff10c7bfcd87a
d13ae97009afa065a6757ee571b3f2ebb18f46c1d68f3edeb0e74b2e5d54
2051e7d27f50952028605afdef79fe9fffd03959a36b3069301f0603551d
23041830168014dd3da24d350c1cc5d0af0965f40ec34c5ee409f1301d06
03551d0e04160414a52476af5d50aa376437ccb1da2172ef45f484f0300e
0603551d0f0101ff04040302078030170603551d200101ff040d300b3009
060767811201020101300a06082a8648ce3d040302034700304402205eda
e9e3b9278a361265dcbd13a3bf48d7aec43d2905125bfaca2f4cf3a7e654
0220089f956bb989596577ec986df7af66f2a44625f385774c566507f6f2
cd72e02c'O;
function f_ts_cert_euicc_nist() return Certificate {
	 var Certificate cert_decoded;
	 cert_decoded := dec_Certificate(cert_euicc_nist);
	 return cert_decoded;
}
template (value) Certificate ts_cert_euicc_nist := f_ts_cert_euicc_nist();

/* Test certificate:
SGP.26_v1.2_files/Valid test cases/eUICC/CERT_EUICC_ECDSA_BRP.der
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            02:00:00:00:00:00:00:00:01
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: C = DE, O = RSP Test EUM, CN = EUM Test
        Validity
            Not Before: Apr 20 12:07:50 2017 GMT
            Not After : Feb 11 12:07:50 7493 GMT
        Subject: C = DE, O = RSP Test EUM, serialNumber = 89049032123451234512345678901235, CN = Test eUICC
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:3e:59:0c:38:a9:c2:56:31:5e:cf:f3:29:14:16:
                    dd:33:54:09:a6:66:fd:41:b3:b5:1e:5e:51:14:f3:
                    43:ab:f0:a2:67:74:c6:c2:6c:48:75:3a:fe:28:36:
                    43:22:7b:b6:60:8c:d2:61:cc:97:2d:37:4a:47:91:
                    24:eb:f2:77:22
                ASN1 OID: brainpoolP256r1
        X509v3 extensions:
            X509v3 Authority Key Identifier:
                keyid:6F:A1:E5:21:73:63:A8:22:BD:ED:98:8A:1A:0D:0F:F5:D7:62:0D:B7

            X509v3 Subject Key Identifier:
                C8:A6:4F:34:3B:85:B7:B0:57:8D:C5:7F:8F:13:58:6D:C8:04:ED:84
            X509v3 Key Usage: critical
                Digital Signature
            X509v3 Certificate Policies: critical
                Policy: 2.23.146.1.2.1.1

    Signature Algorithm: ecdsa-with-SHA256
         30:45:02:20:00:b4:f8:6f:2e:a1:4c:cc:04:66:51:99:88:4c:
         ad:75:ca:dd:c3:36:79:77:2f:ff:d4:db:cf:1b:d2:a8:e4:1b:
         02:21:00:8b:4d:40:a2:d9:bd:3a:53:c6:80:bd:c8:a3:08:c3:
         fb:dd:fe:e7:c6:6a:18:b4:dc:dd:03:77:0f:ff:aa:49:82
*/
const octetstring cert_euicc_brp :=
'30820200308201a6a0030201020209020000000000000001300a06082a86
48ce3d0403023037310b300906035504061302444531153013060355040a
0c0c52535020546573742045554d3111300f06035504030c0845554d2054
6573743020170d3137303432303132303735305a180f3734393330323131
3132303735305a3064310b30090603550406130244453115301306035504
0a0c0c52535020546573742045554d312930270603550405132038393034
393033323132333435313233343531323334353637383930313233353113
301106035504030c0a54657374206555494343305a301406072a8648ce3d
020106092b2403030208010107034200043e590c38a9c256315ecff32914
16dd335409a666fd41b3b51e5e5114f343abf0a26774c6c26c48753afe28
3643227bb6608cd261cc972d374a479124ebf27722a36b3069301f060355
1d230418301680146fa1e5217363a822bded988a1a0d0ff5d7620db7301d
0603551d0e04160414c8a64f343b85b7b0578dc57f8f13586dc804ed8430
0e0603551d0f0101ff04040302078030170603551d200101ff040d300b30
09060767811201020101300a06082a8648ce3d0403020348003045022000
b4f86f2ea14ccc04665199884cad75caddc33679772fffd4dbcf1bd2a8e4
1b0221008b4d40a2d9bd3a53c680bdc8a308c3fbddfee7c66a18b4dcdd03
770fffaa4982'O;
function f_ts_cert_euicc_brp() return Certificate {
	 var Certificate cert_decoded;
	 cert_decoded := dec_Certificate(cert_euicc_brp);
	 return cert_decoded;
}
template (value) Certificate ts_cert_euicc_brp := f_ts_cert_euicc_brp();

/* Test certificate:
SGP.26_v1.2_files/Valid test cases/EUM/CERT_EUM_ECDSA_NIST.der
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 305419896 (0x12345678)
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: CN = GSMA Test CI, OU = TESTCERT, O = RSPTEST, C = IT
        Validity
            Not Before: Jan 19 18:10:30 2017 GMT
            Not After : Jan 19 18:10:30 2051 GMT
        Subject: C = DE, O = RSP Test EUM, CN = EUM Test
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:13:30:d5:92:56:ac:0c:b5:0b:d9:28:d0:f4:c6:
                    80:07:c4:85:fe:3f:42:98:8a:d3:ee:38:75:ae:33:
                    f4:98:3a:b2:3b:4d:d4:c3:13:40:d6:76:dd:8e:11:
                    f9:c5:cb:a1:b1:1e:b6:94:ee:d0:99:4d:b5:29:28:
                    5e:63:2c:89:06
                ASN1 OID: prime256v1
                NIST CURVE: P-256
        X509v3 extensions:
            X509v3 Authority Key Identifier:
                keyid:F5:41:72:BD:F9:8A:95:D6:5C:BE:B8:8A:38:A1:C1:1D:80:0A:85:C3

            X509v3 Subject Key Identifier:
                DD:3D:A2:4D:35:0C:1C:C5:D0:AF:09:65:F4:0E:C3:4C:5E:E4:09:F1
            X509v3 Key Usage: critical
                Certificate Sign
            X509v3 Certificate Policies: critical
                Policy: 2.23.146.1.2.1.2

            X509v3 Subject Alternative Name:
                Registered ID:2.999.5
            X509v3 Basic Constraints: critical
                CA:TRUE, pathlen:0
            X509v3 CRL Distribution Points:

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-B.crl

            X509v3 Name Constraints: critical
                Permitted:
                  DirName:O = RSP Test EUM, serialNumber = 89049032

    Signature Algorithm: ecdsa-with-SHA256
         30:46:02:21:00:8c:4d:4b:26:40:4e:a5:dd:ea:65:eb:b4:3c:
         18:db:ab:12:cb:90:97:de:b7:7f:0b:a1:57:e3:8c:7b:18:b4:
         ee:02:21:00:d1:8d:9c:f3:a1:34:87:ee:65:ca:6b:48:f8:c1:
         ad:c0:2e:7a:7d:89:f1:74:b5:ae:2b:5e:1d:82:0a:9b:23:23
*/
const octetstring cert_eum_nist :=
'3082027c30820221a003020102020412345678300a06082a8648ce3d0403
0230493115301306035504030c0c47534d4120546573742043493111300f
060355040b0c0854455354434552543110300e060355040a0c0752535054
455354310b30090603550406130249543020170d31373031313931383130
33305a180f32303531303131393138313033305a3037310b300906035504
061302444531153013060355040a0c0c52535020546573742045554d3111
300f06035504030c0845554d20546573743059301306072a8648ce3d0201
06082a8648ce3d030107034200041330d59256ac0cb50bd928d0f4c68007
c485fe3f42988ad3ee3875ae33f4983ab23b4dd4c31340d676dd8e11f9c5
cba1b11eb694eed0994db529285e632c8906a382010530820101301f0603
551d23041830168014f54172bdf98a95d65cbeb88a38a1c11d800a85c330
1d0603551d0e04160414dd3da24d350c1cc5d0af0965f40ec34c5ee409f1
300e0603551d0f0101ff04040302020430170603551d200101ff040d300b
3009060767811201020102300e0603551d11040730058803883705301206
03551d130101ff040830060101ff02010030320603551d1f042b30293027
a025a0238621687474703a2f2f63692e746573742e67736d612e636f6d2f
43524c2d422e63726c303e0603551d1e0101ff04343032a030302ea42c30
2a31153013060355040a0c0c52535020546573742045554d3111300f0603
55040513083839303439303332300a06082a8648ce3d0403020349003046
0221008c4d4b26404ea5ddea65ebb43c18dbab12cb9097deb77f0ba157e3
8c7b18b4ee022100d18d9cf3a13487ee65ca6b48f8c1adc02e7a7d89f174
b5ae2b5e1d820a9b2323'O
function f_ts_cert_eum_nist() return Certificate {
	 var Certificate cert_decoded;
	 cert_decoded := dec_Certificate(cert_eum_nist);
	 return cert_decoded;
}
template (value) Certificate ts_cert_eum_nist := f_ts_cert_eum_nist();

/* Test certificate:
SGP.26_v1.2_files/Valid test cases/EUM/CERT_EUM_ECDSA_BRP.der
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 305419896 (0x12345678)
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: CN = GSMA Test CI, OU = TESTCERT, O = RSPTEST, C = IT
        Validity
            Not Before: Apr 20 10:23:31 2017 GMT
            Not After : Apr 20 10:23:31 2051 GMT
        Subject: C = DE, O = RSP Test EUM, CN = EUM Test
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:a2:e5:2a:32:df:e8:99:65:71:c5:3a:f5:32:8e:
                    f6:82:09:3f:c1:d0:5f:52:65:2f:6b:71:1c:24:38:
                    21:f7:f1:6b:0c:ec:8d:21:9b:23:d3:f9:90:f4:34:
                    d0:b9:0d:42:71:6c:02:e0:93:05:26:44:63:f6:11:
                    e6:50:c3:7f:f7
                ASN1 OID: brainpoolP256r1
        X509v3 extensions:
            X509v3 Authority Key Identifier:
                keyid:C0:BC:70:BA:36:92:9D:43:B4:67:FF:57:57:05:30:E5:7A:B8:FC:D8

            X509v3 Subject Key Identifier:
                6F:A1:E5:21:73:63:A8:22:BD:ED:98:8A:1A:0D:0F:F5:D7:62:0D:B7
            X509v3 Key Usage: critical
                Certificate Sign
            X509v3 Certificate Policies: critical
                Policy: 2.23.146.1.2.1.2

            X509v3 Subject Alternative Name:
                Registered ID:2.999.5
            X509v3 Basic Constraints: critical
                CA:TRUE, pathlen:0
            X509v3 CRL Distribution Points:

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-B.crl

            X509v3 Name Constraints: critical
                Permitted:
                  DirName:O = RSP Test EUM, serialNumber = 89049032

    Signature Algorithm: ecdsa-with-SHA256
         30:44:02:20:2b:46:5c:c1:ac:87:8d:46:a8:7d:4a:70:72:ca:
         2c:f9:1c:27:10:87:02:19:ae:80:29:c6:96:bc:39:f0:5c:dc:
         02:20:40:cc:35:b4:9c:3b:30:ee:39:b0:5d:da:8f:6d:0d:a6:
         43:ab:8e:bd:6a:05:23:91:cf:46:c9:ee:4c:95:3b:19
*/
const octetstring cert_eum_brp :=
'3082027b30820222a003020102020412345678300a06082a8648ce3d0403
0230493115301306035504030c0c47534d4120546573742043493111300f
060355040b0c0854455354434552543110300e060355040a0c0752535054
455354310b30090603550406130249543020170d31373034323031303233
33315a180f32303531303432303130323333315a3037310b300906035504
061302444531153013060355040a0c0c52535020546573742045554d3111
300f06035504030c0845554d2054657374305a301406072a8648ce3d0201
06092b240303020801010703420004a2e52a32dfe8996571c53af5328ef6
82093fc1d05f52652f6b711c243821f7f16b0cec8d219b23d3f990f434d0
b90d42716c02e09305264463f611e650c37ff7a382010530820101301f06
03551d23041830168014c0bc70ba36929d43b467ff57570530e57ab8fcd8
301d0603551d0e041604146fa1e5217363a822bded988a1a0d0ff5d7620d
b7300e0603551d0f0101ff04040302020430170603551d200101ff040d30
0b3009060767811201020102300e0603551d110407300588038837053012
0603551d130101ff040830060101ff02010030320603551d1f042b302930
27a025a0238621687474703a2f2f63692e746573742e67736d612e636f6d
2f43524c2d422e63726c303e0603551d1e0101ff04343032a030302ea42c
302a31153013060355040a0c0c52535020546573742045554d3111300f06
0355040513083839303439303332300a06082a8648ce3d04030203470030
4402202b465cc1ac878d46a87d4a7072ca2cf91c2710870219ae8029c696
bc39f05cdc022040cc35b49c3b30ee39b05dda8f6d0da643ab8ebd6a0523
91cf46c9ee4c953b19'O;
function f_ts_cert_eum_brp() return Certificate {
	 var Certificate cert_decoded;
	 cert_decoded := dec_Certificate(cert_eum_brp);
	 return cert_decoded;
}
template (value) Certificate ts_cert_eum_brp := f_ts_cert_eum_brp();

/* Test certificate:
SGP.26_v1.2_files/Valid test cases/SM-DP+/DPauth/CERT_S_SM_DPauth_ECDSA_NIST.der
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 100 (0x64)
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: CN = GSMA Test CI, OU = TESTCERT, O = RSPTEST, C = IT
        Validity
            Not Before: Feb  1 13:38:56 2017 GMT
            Not After : Feb  1 13:38:56 2020 GMT
        Subject: O = ACME, CN = "TEST SM-DP+"
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:4d:fe:d4:f4:69:47:91:bf:16:95:ce:a0:30:7a:
                    35:b4:18:01:96:95:38:7b:b7:5b:7d:24:47:b6:b5:
                    20:9f:04:45:ae:4e:5e:52:1c:d1:38:88:d7:5f:e0:
                    7c:85:80:22:2a:e2:0d:ba:ac:1d:77:cd:76:30:49:
                    93:42:1b:d7:39
                ASN1 OID: prime256v1
                NIST CURVE: P-256
        X509v3 extensions:
            X509v3 Authority Key Identifier:
                keyid:F5:41:72:BD:F9:8A:95:D6:5C:BE:B8:8A:38:A1:C1:1D:80:0A:85:C3

            X509v3 Subject Key Identifier:
                BD:5A:82:CC:1A:96:60:21:18:BA:75:60:A1:FF:83:A7:8B:21:0B:E5
            X509v3 Subject Alternative Name:
                Registered ID:2.999.10
            X509v3 Key Usage: critical
                Digital Signature
            X509v3 Certificate Policies: critical
                Policy: 2.23.146.1.2.1.4

            X509v3 CRL Distribution Points:

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-A.crl

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-B.crl

    Signature Algorithm: ecdsa-with-SHA256
         30:45:02:21:00:f1:cf:ef:41:e2:b8:a0:22:62:17:10:b9:6a:
         65:4f:ff:e4:85:d0:8c:20:e6:64:e8:5b:f2:d7:27:00:2a:07:
         38:02:20:69:25:bd:f7:bb:87:d0:c8:be:2b:78:a0:c5:9a:61:
         01:78:29:30:c2:fe:98:ad:2d:70:38:65:6a:02:14:a3:97
*/
const octetstring cert_s_sm_dpauth_nist :=
'30820237308201dda003020102020164300a06082a8648ce3d0403023049
3115301306035504030c0c47534d4120546573742043493111300f060355
040b0c0854455354434552543110300e060355040a0c0752535054455354
310b3009060355040613024954301e170d3137303230313133333835365a
170d3230303230313133333835365a3025310d300b060355040a0c044143
4d453114301206035504030c0b5445535420534d2d44502b305930130607
2a8648ce3d020106082a8648ce3d030107034200044dfed4f4694791bf16
95cea0307a35b418019695387bb75b7d2447b6b5209f0445ae4e5e521cd1
3888d75fe07c8580222ae20dbaac1d77cd76304993421bd739a381d93081
d6301f0603551d23041830168014f54172bdf98a95d65cbeb88a38a1c11d
800a85c3301d0603551d0e04160414bd5a82cc1a96602118ba7560a1ff83
a78b210be5300e0603551d1104073005880388370a300e0603551d0f0101
ff04040302078030170603551d200101ff040d300b300906076781120102
0104305b0603551d1f045430523027a025a0238621687474703a2f2f6369
2e746573742e67736d612e636f6d2f43524c2d412e63726c3027a025a023
8621687474703a2f2f63692e746573742e67736d612e636f6d2f43524c2d
422e63726c300a06082a8648ce3d0403020348003045022100f1cfef41e2
b8a022621710b96a654fffe485d08c20e664e85bf2d727002a0738022069
25bdf7bb87d0c8be2b78a0c59a6101782930c2fe98ad2d7038656a0214a3
97'O;
function f_ts_cert_s_sm_dpauth_nist() return Certificate {
	 var Certificate cert_decoded;
	 cert_decoded := dec_Certificate(cert_s_sm_dpauth_nist);
	 return cert_decoded;
}
template (value) Certificate ts_cert_s_sm_dpauth_nist := f_ts_cert_s_sm_dpauth_nist();

/* Test certificate:
SGP.26_v1.2_files/Valid test cases/SM-DP+/DPauth/CERT_S_SM_DPauth_ECDSA_BRP.der
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 100 (0x64)
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: CN = GSMA Test CI, OU = TESTCERT, O = RSPTEST, C = IT
        Validity
            Not Before: Apr 26 15:20:12 2017 GMT
            Not After : Apr 25 15:20:12 2020 GMT
        Subject: O = ACME, CN = "TEST SM-DP+"
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:25:5d:7d:af:00:ef:84:1d:76:fa:7a:63:d6:3e:
                    b3:fe:6c:9f:70:49:2d:38:19:23:f8:f8:bd:7b:24:
                    f3:c5:ad:16:8e:be:3b:09:dd:80:f2:9e:7f:fd:24:
                    a4:d1:be:74:7f:83:23:e4:72:92:83:96:dd:e9:e0:
                    15:1c:ea:ba:18
                ASN1 OID: brainpoolP256r1
        X509v3 extensions:
            X509v3 Authority Key Identifier:
                keyid:C0:BC:70:BA:36:92:9D:43:B4:67:FF:57:57:05:30:E5:7A:B8:FC:D8

            X509v3 Subject Key Identifier:
                79:A4:BD:4D:78:FF:47:34:BC:60:45:CF:91:96:24:4A:1F:B8:4B:EB
            X509v3 Subject Alternative Name:
                Registered ID:2.999.10
            X509v3 Key Usage: critical
                Digital Signature
            X509v3 Certificate Policies: critical
                Policy: 2.23.146.1.2.1.4

            X509v3 CRL Distribution Points:

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-A.crl

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-B.crl

    Signature Algorithm: ecdsa-with-SHA256
         30:45:02:20:30:45:fe:e3:ed:cc:6c:84:36:3d:d7:b8:6e:98:
         4b:dd:1c:94:78:cd:0f:2c:da:8e:4c:b9:63:13:f7:85:b2:db:
         02:21:00:81:29:01:29:4a:5f:c6:82:cf:fa:57:0f:8a:42:d5:
         59:b0:7c:ef:83:05:f7:d2:36:41:64:df:4d:f8:8c:a7:fa
*/
const octetstring cert_s_sm_dpauth_brp :=
'30820238308201dea003020102020164300a06082a8648ce3d0403023049
3115301306035504030c0c47534d4120546573742043493111300f060355
040b0c0854455354434552543110300e060355040a0c0752535054455354
310b3009060355040613024954301e170d3137303432363135323031325a
170d3230303432353135323031325a3025310d300b060355040a0c044143
4d453114301206035504030c0b5445535420534d2d44502b305a30140607
2a8648ce3d020106092b240303020801010703420004255d7daf00ef841d
76fa7a63d63eb3fe6c9f70492d381923f8f8bd7b24f3c5ad168ebe3b09dd
80f29e7ffd24a4d1be747f8323e472928396dde9e0151ceaba18a381d930
81d6301f0603551d23041830168014c0bc70ba36929d43b467ff57570530
e57ab8fcd8301d0603551d0e0416041479a4bd4d78ff4734bc6045cf9196
244a1fb84beb300e0603551d1104073005880388370a300e0603551d0f01
01ff04040302078030170603551d200101ff040d300b3009060767811201
020104305b0603551d1f045430523027a025a0238621687474703a2f2f63
692e746573742e67736d612e636f6d2f43524c2d412e63726c3027a025a0
238621687474703a2f2f63692e746573742e67736d612e636f6d2f43524c
2d422e63726c300a06082a8648ce3d040302034800304502203045fee3ed
cc6c84363dd7b86e984bdd1c9478cd0f2cda8e4cb96313f785b2db022100
812901294a5fc682cffa570f8a42d559b07cef8305f7d2364164df4df88c
a7fa'O;
function f_ts_cert_s_sm_dpauth_brp() return Certificate {
	 var Certificate cert_decoded;
	 cert_decoded := dec_Certificate(cert_s_sm_dpauth_brp);
	 return cert_decoded;
}
template (value) Certificate ts_cert_s_sm_dpauth_brp := f_ts_cert_s_sm_dpauth_brp();

/* Test certificate:
SGP.26_v1.2_files/Valid test cases/SM-DP+/DPauth/CERT_S_SM_DP2auth_ECDSA_NIST.der
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 200 (0xc8)
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: CN = GSMA Test CI, OU = TESTCERT, O = RSPTEST, C = IT
        Validity
            Not Before: Aug 21 14:19:48 2017 GMT
            Not After : Aug 20 14:19:48 2020 GMT
        Subject: O = ACME, CN = "TEST SM-DP+2"
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:2b:2e:9b:45:d3:51:c0:9a:f4:0e:91:43:83:a1:
                    90:38:47:f2:60:7d:e6:0e:f7:ab:25:c4:0e:03:f8:
                    db:b6:50:8e:14:57:50:8c:2b:e0:01:73:47:ec:fa:
                    1b:f9:f7:75:e7:d0:7e:80:5e:52:e1:98:8b:7b:58:
                    5a:71:11:ae:33
                ASN1 OID: prime256v1
                NIST CURVE: P-256
        X509v3 extensions:
            X509v3 Authority Key Identifier:
                keyid:F5:41:72:BD:F9:8A:95:D6:5C:BE:B8:8A:38:A1:C1:1D:80:0A:85:C3

            X509v3 Subject Key Identifier:
                95:9E:F7:E6:50:C1:BE:21:6A:39:19:74:27:6D:26:B8:A9:35:61:71
            X509v3 Subject Alternative Name:
                Registered ID:2.999.12
            X509v3 Key Usage: critical
                Digital Signature
            X509v3 Certificate Policies: critical
                Policy: 2.23.146.1.2.1.4

            X509v3 CRL Distribution Points:

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-A.crl

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-B.crl

    Signature Algorithm: ecdsa-with-SHA256
         30:46:02:21:00:c0:a5:cd:d1:0f:25:29:a9:f1:86:6d:93:21:
         65:91:ce:7a:8a:29:54:6d:1f:aa:2f:99:c2:4e:a6:52:23:35:
         98:02:21:00:85:92:01:17:04:fe:ab:d5:a6:af:fc:40:10:96:
         39:99:08:3f:5b:3e:94:60:05:a3:f1:b0:cb:81:a6:6b:b9:3c
*/
const octetstring cert_s_sm_dp2auth_nist :=
'3082023a308201dfa003020102020200c8300a06082a8648ce3d04030230
493115301306035504030c0c47534d4120546573742043493111300f0603
55040b0c0854455354434552543110300e060355040a0c07525350544553
54310b3009060355040613024954301e170d313730383231313431393438
5a170d3230303832303134313934385a3026310d300b060355040a0c0441
434d453115301306035504030c0c5445535420534d2d44502b3230593013
06072a8648ce3d020106082a8648ce3d030107034200042b2e9b45d351c0
9af40e914383a1903847f2607de60ef7ab25c40e03f8dbb6508e1457508c
2be0017347ecfa1bf9f775e7d07e805e52e1988b7b585a7111ae33a381d9
3081d6301f0603551d23041830168014f54172bdf98a95d65cbeb88a38a1
c11d800a85c3301d0603551d0e04160414959ef7e650c1be216a39197427
6d26b8a9356171300e0603551d1104073005880388370c300e0603551d0f
0101ff04040302078030170603551d200101ff040d300b30090607678112
01020104305b0603551d1f045430523027a025a0238621687474703a2f2f
63692e746573742e67736d612e636f6d2f43524c2d412e63726c3027a025
a0238621687474703a2f2f63692e746573742e67736d612e636f6d2f4352
4c2d422e63726c300a06082a8648ce3d0403020349003046022100c0a5cd
d10f2529a9f1866d93216591ce7a8a29546d1faa2f99c24ea65223359802
21008592011704feabd5a6affc4010963999083f5b3e946005a3f1b0cb81
a66bb93c'O;
function f_ts_cert_s_sm_dp2auth_nist() return Certificate {
	 var Certificate cert_decoded;
	 cert_decoded := dec_Certificate(cert_s_sm_dp2auth_nist);
	 return cert_decoded;
}
template (value) Certificate ts_cert_s_sm_dp2auth_nist := f_ts_cert_s_sm_dp2auth_nist();

/* Test certificate:
SGP.26_v1.2_files/Valid test cases/SM-DP+/DPauth/CERT_S_SM_DP2auth_ECDSA_BRP.der
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 200 (0xc8)
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: CN = GSMA Test CI, OU = TESTCERT, O = RSPTEST, C = IT
        Validity
            Not Before: Aug 21 14:27:16 2017 GMT
            Not After : Aug 20 14:27:16 2020 GMT
        Subject: O = ACME, CN = "TEST SM-DP+2"
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:2e:ee:07:c9:6d:00:5b:e5:19:5f:79:ad:1d:ad:
                    cd:1d:37:8c:a3:09:5e:44:f7:2e:ea:41:0f:08:c7:
                    56:12:2c:90:63:c9:65:b7:fc:85:29:c0:ca:4e:9b:
                    4f:65:96:9c:28:3c:65:63:64:57:87:71:18:f6:d1:
                    17:2d:6a:23:65
                ASN1 OID: brainpoolP256r1
        X509v3 extensions:
            X509v3 Authority Key Identifier:
                keyid:C0:BC:70:BA:36:92:9D:43:B4:67:FF:57:57:05:30:E5:7A:B8:FC:D8

            X509v3 Subject Key Identifier:
                D7:0E:FD:05:7B:AC:1F:7C:55:EA:5D:8C:26:BE:16:02:92:84:5B:AF
            X509v3 Subject Alternative Name:
                Registered ID:2.999.12
            X509v3 Key Usage: critical
                Digital Signature
            X509v3 Certificate Policies: critical
                Policy: 2.23.146.1.2.1.4

            X509v3 CRL Distribution Points:

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-A.crl

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-B.crl

    Signature Algorithm: ecdsa-with-SHA256
         30:44:02:20:4b:32:a5:c9:ee:05:f2:9f:d4:4a:08:6f:f0:4a:
         10:9a:88:d6:e5:84:80:39:a5:16:ee:c7:8c:a4:ac:f0:c5:b3:
         02:20:52:9e:46:fa:10:9d:13:05:40:ba:d6:2a:46:fc:85:c3:
         95:b2:c4:cb:9e:8c:f1:50:79:d4:9a:9d:a5:37:df:e0
*/
const octetstring cert_s_sm_dp2auth_brp :=
'30820239308201e0a003020102020200c8300a06082a8648ce3d04030230
493115301306035504030c0c47534d4120546573742043493111300f0603
55040b0c0854455354434552543110300e060355040a0c07525350544553
54310b3009060355040613024954301e170d313730383231313432373136
5a170d3230303832303134323731365a3026310d300b060355040a0c0441
434d453115301306035504030c0c5445535420534d2d44502b32305a3014
06072a8648ce3d020106092b2403030208010107034200042eee07c96d00
5be5195f79ad1dadcd1d378ca3095e44f72eea410f08c756122c9063c965
b7fc8529c0ca4e9b4f65969c283c65636457877118f6d1172d6a2365a381
d93081d6301f0603551d23041830168014c0bc70ba36929d43b467ff5757
0530e57ab8fcd8301d0603551d0e04160414d70efd057bac1f7c55ea5d8c
26be160292845baf300e0603551d1104073005880388370c300e0603551d
0f0101ff04040302078030170603551d200101ff040d300b300906076781
1201020104305b0603551d1f045430523027a025a0238621687474703a2f
2f63692e746573742e67736d612e636f6d2f43524c2d412e63726c3027a0
25a0238621687474703a2f2f63692e746573742e67736d612e636f6d2f43
524c2d422e63726c300a06082a8648ce3d040302034700304402204b32a5
c9ee05f29fd44a086ff04a109a88d6e5848039a516eec78ca4acf0c5b302
20529e46fa109d130540bad62a46fc85c395b2c4cb9e8cf15079d49a9da5
37dfe0'O;
function f_ts_cert_s_sm_dp2auth_brp() return Certificate {
	 var Certificate cert_decoded;
	 cert_decoded := dec_Certificate(cert_s_sm_dp2auth_brp);
	 return cert_decoded;
}
template (value) Certificate ts_cert_s_sm_dp2auth_brp := f_ts_cert_s_sm_dp2auth_brp();

/* Test certificate:
SGP.26_v1.2_files/Valid test cases/SM-DP+/DPpb/CERT_S_SM_DPpb_ECDSA_NIST.der
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 101 (0x65)
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: CN = GSMA Test CI, OU = TESTCERT, O = RSPTEST, C = IT
        Validity
            Not Before: Feb  1 13:38:57 2017 GMT
            Not After : Feb  1 13:38:57 2020 GMT
        Subject: O = ACME, CN = "TEST SM-DP+"
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:10:4c:2a:e3:d0:2d:ef:9c:97:92:61:a7:c6:71:
                    00:76:b9:70:72:1d:09:55:a2:64:4a:e0:5f:ae:4b:
                    c2:31:4e:5d:c0:9f:6b:f0:11:80:26:16:53:42:e2:
                    12:31:87:75:e3:65:f3:b5:73:25:37:30:66:b9:90:
                    6e:0b:d1:38:8d
                ASN1 OID: prime256v1
                NIST CURVE: P-256
        X509v3 extensions:
            X509v3 Authority Key Identifier:
                keyid:F5:41:72:BD:F9:8A:95:D6:5C:BE:B8:8A:38:A1:C1:1D:80:0A:85:C3

            X509v3 Subject Key Identifier:
                E6:EA:F7:1E:E0:FB:94:30:EC:CD:1E:BB:42:1F:88:14:37:C1:32:63
            X509v3 Subject Alternative Name:
                Registered ID:2.999.10
            X509v3 Key Usage: critical
                Digital Signature
            X509v3 Certificate Policies: critical
                Policy: 2.23.146.1.2.1.5

            X509v3 CRL Distribution Points:

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-A.crl

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-B.crl

    Signature Algorithm: ecdsa-with-SHA256
         30:43:02:1f:1d:c0:8e:8b:98:1f:4c:77:0c:e9:06:01:c5:2b:
         2a:28:e2:21:65:4b:d0:ba:a3:78:34:80:92:27:52:bf:f4:02:
         20:64:23:83:9e:85:e8:93:6f:7a:18:b2:b4:b8:5f:99:8c:4f:
         38:a8:db:9b:88:8c:23:e2:99:7c:9e:a5:af:6e:94
*/
const octetstring cert_s_sm_dppb_nist :=
'30820235308201dda003020102020165300a06082a8648ce3d0403023049
3115301306035504030c0c47534d4120546573742043493111300f060355
040b0c0854455354434552543110300e060355040a0c0752535054455354
310b3009060355040613024954301e170d3137303230313133333835375a
170d3230303230313133333835375a3025310d300b060355040a0c044143
4d453114301206035504030c0b5445535420534d2d44502b305930130607
2a8648ce3d020106082a8648ce3d03010703420004104c2ae3d02def9c97
9261a7c6710076b970721d0955a2644ae05fae4bc2314e5dc09f6bf01180
26165342e212318775e365f3b57325373066b9906e0bd1388da381d93081
d6301f0603551d23041830168014f54172bdf98a95d65cbeb88a38a1c11d
800a85c3301d0603551d0e04160414e6eaf71ee0fb9430eccd1ebb421f88
1437c13263300e0603551d1104073005880388370a300e0603551d0f0101
ff04040302078030170603551d200101ff040d300b300906076781120102
0105305b0603551d1f045430523027a025a0238621687474703a2f2f6369
2e746573742e67736d612e636f6d2f43524c2d412e63726c3027a025a023
8621687474703a2f2f63692e746573742e67736d612e636f6d2f43524c2d
422e63726c300a06082a8648ce3d0403020346003043021f1dc08e8b981f
4c770ce90601c52b2a28e221654bd0baa3783480922752bff40220642383
9e85e8936f7a18b2b4b85f998c4f38a8db9b888c23e2997c9ea5af6e94'O;
function f_ts_cert_s_sm_dppb_nist() return Certificate {
	 var Certificate cert_decoded;
	 cert_decoded := dec_Certificate(cert_s_sm_dppb_nist);
	 return cert_decoded;
}
template (value) Certificate ts_cert_s_sm_dppb_nist := f_ts_cert_s_sm_dppb_nist();

/* Test certificate:
SGP.26_v1.2_files/Valid test cases/SM-DP+/DPpb/CERT_S_SM_DPpb_ECDSA_BRP.der
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 101 (0x65)
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: CN = GSMA Test CI, OU = TESTCERT, O = RSPTEST, C = IT
        Validity
            Not Before: Apr 26 15:20:13 2017 GMT
            Not After : Apr 25 15:20:13 2020 GMT
        Subject: O = ACME, CN = "TEST SM-DP+"
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:89:32:53:ec:c9:4c:51:df:4f:ee:6e:0d:b0:95:
                    1c:fc:65:62:74:81:b5:41:8e:55:70:69:f4:87:fa:
                    a1:54:66:a5:cb:8e:10:cc:2b:38:09:9c:f2:a9:29:
                    f7:f8:2d:ac:06:51:26:b7:1d:06:40:96:1d:b7:f9:
                    1a:49:e9:56:12
                ASN1 OID: brainpoolP256r1
        X509v3 extensions:
            X509v3 Authority Key Identifier:
                keyid:C0:BC:70:BA:36:92:9D:43:B4:67:FF:57:57:05:30:E5:7A:B8:FC:D8

            X509v3 Subject Key Identifier:
                A8:C6:8D:F4:49:EB:71:EC:72:3E:AC:13:2E:40:E4:B6:F5:46:44:FE
            X509v3 Subject Alternative Name:
                Registered ID:2.999.10
            X509v3 Key Usage: critical
                Digital Signature
            X509v3 Certificate Policies: critical
                Policy: 2.23.146.1.2.1.5

            X509v3 CRL Distribution Points:

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-A.crl

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-B.crl

    Signature Algorithm: ecdsa-with-SHA256
         30:44:02:20:5f:33:63:c1:01:b4:db:d0:2a:61:3c:8a:ca:32:
         df:4f:2f:51:4c:21:73:e8:93:6e:9b:ff:af:02:a1:f5:e2:56:
         02:20:01:c0:99:36:19:43:29:65:fe:5a:87:a0:38:ae:91:bf:
         02:45:07:06:a3:2c:4b:13:07:af:4b:e8:ec:41:68:1d
*/
const octetstring cert_s_sm_dppb_brp :=
'30820237308201dea003020102020165300a06082a8648ce3d0403023049
3115301306035504030c0c47534d4120546573742043493111300f060355
040b0c0854455354434552543110300e060355040a0c0752535054455354
310b3009060355040613024954301e170d3137303432363135323031335a
170d3230303432353135323031335a3025310d300b060355040a0c044143
4d453114301206035504030c0b5445535420534d2d44502b305a30140607
2a8648ce3d020106092b240303020801010703420004893253ecc94c51df
4fee6e0db0951cfc65627481b5418e557069f487faa15466a5cb8e10cc2b
38099cf2a929f7f82dac065126b71d0640961db7f91a49e95612a381d930
81d6301f0603551d23041830168014c0bc70ba36929d43b467ff57570530
e57ab8fcd8301d0603551d0e04160414a8c68df449eb71ec723eac132e40
e4b6f54644fe300e0603551d1104073005880388370a300e0603551d0f01
01ff04040302078030170603551d200101ff040d300b3009060767811201
020105305b0603551d1f045430523027a025a0238621687474703a2f2f63
692e746573742e67736d612e636f6d2f43524c2d412e63726c3027a025a0
238621687474703a2f2f63692e746573742e67736d612e636f6d2f43524c
2d422e63726c300a06082a8648ce3d040302034700304402205f3363c101
b4dbd02a613c8aca32df4f2f514c2173e8936e9bffaf02a1f5e256022001
c0993619432965fe5a87a038ae91bf02450706a32c4b1307af4be8ec4168
1d'O;
function f_ts_cert_s_sm_dppb_brp() return Certificate {
	 var Certificate cert_decoded;
	 cert_decoded := dec_Certificate(cert_s_sm_dppb_brp);
	 return cert_decoded;
}
template (value) Certificate ts_cert_s_sm_dppb_brp := f_ts_cert_s_sm_dppb_brp();

/* Test certificate:
SGP.26_v1.2_files/Valid test cases/SM-DP+/DPpb/CERT_S_SM_DP2pb_ECDSA_NIST.der
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 201 (0xc9)
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: CN = GSMA Test CI, OU = TESTCERT, O = RSPTEST, C = IT
        Validity
            Not Before: Aug 21 14:23:52 2017 GMT
            Not After : Aug 20 14:23:52 2020 GMT
        Subject: O = ACME, CN = "TEST SM-DP+2"
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:3e:2d:75:a1:06:22:12:16:c2:ae:e8:fa:d5:84:
                    f7:79:63:3c:f9:44:68:1b:5e:c7:5a:96:65:3f:5f:
                    40:1c:47:6a:e3:9d:54:6c:03:2d:32:d0:07:0a:7b:
                    86:e5:dc:eb:aa:dd:f3:1c:a5:c2:76:6c:19:6b:d7:
                    9b:c2:1a:01:80
                ASN1 OID: prime256v1
                NIST CURVE: P-256
        X509v3 extensions:
            X509v3 Authority Key Identifier:
                keyid:F5:41:72:BD:F9:8A:95:D6:5C:BE:B8:8A:38:A1:C1:1D:80:0A:85:C3

            X509v3 Subject Key Identifier:
                20:A3:A8:30:E9:2E:E7:A4:68:C5:EB:27:BA:8D:F1:84:59:AD:FD:D7
            X509v3 Subject Alternative Name:
                Registered ID:2.999.12
            X509v3 Key Usage: critical
                Digital Signature
            X509v3 Certificate Policies: critical
                Policy: 2.23.146.1.2.1.5

            X509v3 CRL Distribution Points:

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-A.crl

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-B.crl

    Signature Algorithm: ecdsa-with-SHA256
         30:45:02:20:17:81:a1:df:74:e8:c6:60:88:67:17:b7:6c:fd:
         ce:a0:2d:f7:b2:85:5a:5b:6c:5e:a9:cc:8d:ec:97:4c:e1:9b:
         02:21:00:ca:a8:9b:fb:af:26:13:02:1b:8f:7c:2c:63:59:44:
         b3:5b:14:38:c0:09:e6:81:dc:e6:7a:58:b3:97:b8:f4:c1
*/
const octetstring cert_s_sm_dp2pb_nist :=
'30820239308201dfa003020102020200c9300a06082a8648ce3d04030230
493115301306035504030c0c47534d4120546573742043493111300f0603
55040b0c0854455354434552543110300e060355040a0c07525350544553
54310b3009060355040613024954301e170d313730383231313432333532
5a170d3230303832303134323335325a3026310d300b060355040a0c0441
434d453115301306035504030c0c5445535420534d2d44502b3230593013
06072a8648ce3d020106082a8648ce3d030107034200043e2d75a1062212
16c2aee8fad584f779633cf944681b5ec75a96653f5f401c476ae39d546c
032d32d0070a7b86e5dcebaaddf31ca5c2766c196bd79bc21a0180a381d9
3081d6301f0603551d23041830168014f54172bdf98a95d65cbeb88a38a1
c11d800a85c3301d0603551d0e0416041420a3a830e92ee7a468c5eb27ba
8df18459adfdd7300e0603551d1104073005880388370c300e0603551d0f
0101ff04040302078030170603551d200101ff040d300b30090607678112
01020105305b0603551d1f045430523027a025a0238621687474703a2f2f
63692e746573742e67736d612e636f6d2f43524c2d412e63726c3027a025
a0238621687474703a2f2f63692e746573742e67736d612e636f6d2f4352
4c2d422e63726c300a06082a8648ce3d040302034800304502201781a1df
74e8c660886717b76cfdcea02df7b2855a5b6c5ea9cc8dec974ce19b0221
00caa89bfbaf2613021b8f7c2c635944b35b1438c009e681dce67a58b397
b8f4c1'O
function f_ts_cert_s_sm_dp2pb_nist() return Certificate {
	 var Certificate cert_decoded;
	 cert_decoded := dec_Certificate(cert_s_sm_dp2pb_nist);
	 return cert_decoded;
}
template (value) Certificate ts_cert_s_sm_dp2pb_nist := f_ts_cert_s_sm_dp2pb_nist();

/* Test certificate:
SGP.26_v1.2_files/Valid test cases/SM-DP+/DPpb/CERT_S_SM_DP2pb_ECDSA_BRP.der
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 201 (0xc9)
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: CN = GSMA Test CI, OU = TESTCERT, O = RSPTEST, C = IT
        Validity
            Not Before: Aug 21 14:31:07 2017 GMT
            Not After : Aug 20 14:31:07 2020 GMT
        Subject: O = ACME, CN = "TEST SM-DP+2"
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:73:61:85:5e:59:02:64:b2:52:c7:1a:60:62:a0:
                    21:e2:7b:46:f7:60:b8:13:82:06:a7:f7:44:20:ef:
                    8b:c5:5a:8b:98:8d:16:58:f9:d7:0d:3a:2d:84:80:
                    aa:df:64:e6:2c:4d:71:27:de:5a:0a:2b:91:7a:94:
                    3f:44:74:aa:dd
                ASN1 OID: brainpoolP256r1
        X509v3 extensions:
            X509v3 Authority Key Identifier:
                keyid:C0:BC:70:BA:36:92:9D:43:B4:67:FF:57:57:05:30:E5:7A:B8:FC:D8

            X509v3 Subject Key Identifier:
                31:03:8A:55:B6:BE:CF:6C:EA:59:DE:2F:DA:14:F4:32:7F:B8:B6:A9
            X509v3 Subject Alternative Name:
                Registered ID:2.999.12
            X509v3 Key Usage: critical
                Digital Signature
            X509v3 Certificate Policies: critical
                Policy: 2.23.146.1.2.1.5

            X509v3 CRL Distribution Points:

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-A.crl

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-B.crl

    Signature Algorithm: ecdsa-with-SHA256
         30:44:02:20:0b:2f:51:21:0c:e1:39:f1:80:69:54:a2:74:7b:
         18:bd:7b:39:0b:25:0c:4a:12:ae:8d:d2:1e:43:42:0e:3c:73:
         02:20:7b:e1:51:0d:c0:52:93:9e:c1:77:4e:3a:cd:d8:78:8d:
         e9:47:49:fd:81:9a:28:6c:8d:c6:81:3a:45:64:9b:b4
*/
const octetstring cert_s_sm_dp2pb_brp :=
'30820239308201e0a003020102020200c9300a06082a8648ce3d04030230
493115301306035504030c0c47534d4120546573742043493111300f0603
55040b0c0854455354434552543110300e060355040a0c07525350544553
54310b3009060355040613024954301e170d313730383231313433313037
5a170d3230303832303134333130375a3026310d300b060355040a0c0441
434d453115301306035504030c0c5445535420534d2d44502b32305a3014
06072a8648ce3d020106092b2403030208010107034200047361855e5902
64b252c71a6062a021e27b46f760b8138206a7f74420ef8bc55a8b988d16
58f9d70d3a2d8480aadf64e62c4d7127de5a0a2b917a943f4474aadda381
d93081d6301f0603551d23041830168014c0bc70ba36929d43b467ff5757
0530e57ab8fcd8301d0603551d0e0416041431038a55b6becf6cea59de2f
da14f4327fb8b6a9300e0603551d1104073005880388370c300e0603551d
0f0101ff04040302078030170603551d200101ff040d300b300906076781
1201020105305b0603551d1f045430523027a025a0238621687474703a2f
2f63692e746573742e67736d612e636f6d2f43524c2d412e63726c3027a0
25a0238621687474703a2f2f63692e746573742e67736d612e636f6d2f43
524c2d422e63726c300a06082a8648ce3d040302034700304402200b2f51
210ce139f1806954a2747b18bd7b390b250c4a12ae8dd21e43420e3c7302
207be1510dc052939ec1774e3acdd8788de94749fd819a286c8dc6813a45
649bb4'O;
function f_ts_cert_s_sm_dp2pb_brp() return Certificate {
	 var Certificate cert_decoded;
	 cert_decoded := dec_Certificate(cert_s_sm_dp2pb_brp);
	 return cert_decoded;
}
template (value) Certificate ts_cert_s_sm_dp2pb_brp := f_ts_cert_s_sm_dp2pb_brp();

/* Test certificate:
SGP.26_v1.2_files/Valid test cases/SM-DP+/DPtls/CERT_S_SM_DP2_TLS.der
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 153 (0x99)
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: CN = GSMA Test CI, OU = TESTCERT, O = RSPTEST, C = IT
        Validity
            Not Before: Sep  1 11:26:44 2017 GMT
            Not After : Aug 31 11:26:44 2020 GMT
        Subject: O = ACME, CN = testsmdpplus2.gsma.com
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:1a:d9:00:0c:75:4e:37:61:3e:75:0f:b7:bf:73:
                    42:fe:d5:0b:c0:72:52:ed:84:65:6b:45:d6:f7:08:
                    78:95:08:a9:ff:e0:96:17:23:af:11:ef:c8:dd:a6:
                    9a:69:f2:b5:18:8b:b3:12:13:82:0a:b2:dd:1e:f5:
                    80:2e:8f:d4:b6
                ASN1 OID: prime256v1
                NIST CURVE: P-256
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature
            X509v3 Extended Key Usage: critical
                TLS Web Server Authentication, TLS Web Client Authentication
            X509v3 Certificate Policies:
                Policy: 2.23.146.1.2.1.3

            X509v3 Subject Key Identifier:
                9F:5F:6B:0C:E7:00:32:25:2D:CE:10:D3:49:A6:55:18:1B:85:3E:CE
            X509v3 Authority Key Identifier:
                keyid:F5:41:72:BD:F9:8A:95:D6:5C:BE:B8:8A:38:A1:C1:1D:80:0A:85:C3

            X509v3 Subject Alternative Name:
                DNS:testsmdpplus2.gsma.com, Registered ID:2.999.12
            X509v3 CRL Distribution Points:

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-A.crl

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-B.crl

    Signature Algorithm: ecdsa-with-SHA256
         30:45:02:21:00:94:1a:fc:27:73:40:ce:05:d5:d4:1b:49:90:
         d9:c5:d7:02:6c:7e:a7:3b:7a:07:0f:30:ad:69:b1:78:a3:e9:
         65:02:20:28:59:fb:74:a0:6f:d1:36:c3:9f:94:14:16:23:e3:
         b5:88:ae:ef:d8:42:6d:2c:0b:df:51:3d:fe:58:7a:ac:31
*/
const octetstring cert_s_sm_dp2_tls :=
'3082027c30820222a00302010202020099300a06082a8648ce3d04030230
493115301306035504030c0c47534d4120546573742043493111300f0603
55040b0c0854455354434552543110300e060355040a0c07525350544553
54310b3009060355040613024954301e170d313730393031313132363434
5a170d3230303833313131323634345a3030310d300b060355040a0c0441
434d45311f301d06035504030c1674657374736d6470706c7573322e6773
6d612e636f6d3059301306072a8648ce3d020106082a8648ce3d03010703
4200041ad9000c754e37613e750fb7bf7342fed50bc07252ed84656b45d6
f708789508a9ffe0961723af11efc8dda69a69f2b5188bb31213820ab2dd
1ef5802e8fd4b6a38201113082010d300e0603551d0f0101ff0404030207
8030200603551d250101ff0416301406082b0601050507030106082b0601
050507030230140603551d20040d300b3009060767811201020103301d06
03551d0e041604149f5f6b0ce70032252dce10d349a655181b853ece301f
0603551d23041830168014f54172bdf98a95d65cbeb88a38a1c11d800a85
c330260603551d11041f301d821674657374736d6470706c7573322e6773
6d612e636f6d880388370c305b0603551d1f045430523027a025a0238621
687474703a2f2f63692e746573742e67736d612e636f6d2f43524c2d412e
63726c3027a025a0238621687474703a2f2f63692e746573742e67736d61
2e636f6d2f43524c2d422e63726c300a06082a8648ce3d04030203480030
45022100941afc277340ce05d5d41b4990d9c5d7026c7ea73b7a070f30ad
69b178a3e96502202859fb74a06fd136c39f94141623e3b588aeefd8426d
2c0bdf513dfe587aac31'O;
function f_ts_cert_s_sm_dp2_tls() return Certificate {
	 var Certificate cert_decoded;
	 cert_decoded := dec_Certificate(cert_s_sm_dp2_tls);
	 return cert_decoded;
}
template (value) Certificate ts_cert_s_sm_dp2_tls := f_ts_cert_s_sm_dp2_tls();

/* Test certificate:
SGP.26_v1.2_files/Valid test cases/SM-DP+/DPtls/CERT_S_SM_DP4_TLS.der
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 2452 (0x994)
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: CN = GSMA Test CI, OU = TESTCERT, O = RSPTEST, C = IT
        Validity
            Not Before: Dec  5 13:32:17 2017 GMT
            Not After : Dec  4 13:32:17 2020 GMT
        Subject: O = ACME, CN = testsmdpplus4.gsma.com
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:3a:db:e8:4d:23:a8:1a:f6:3b:a2:d8:99:83:6c:
                    bb:68:a7:62:56:b3:0d:70:26:30:3d:c3:6b:c1:5d:
                    f6:11:36:c4:fb:e7:02:01:b4:c5:a6:6e:3d:ac:6b:
                    2b:3b:95:7a:99:bb:4e:74:10:03:e8:bf:74:2f:08:
                    13:02:aa:7d:a6
                ASN1 OID: prime256v1
                NIST CURVE: P-256
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature
            X509v3 Extended Key Usage: critical
                TLS Web Server Authentication, TLS Web Client Authentication
            X509v3 Certificate Policies:
                Policy: 2.23.146.1.2.1.3

            X509v3 Subject Key Identifier:
                13:0F:3D:7B:B3:B0:65:AD:3C:58:78:76:BC:BB:6B:84:FD:49:7A:AB
            X509v3 Authority Key Identifier:
                keyid:F5:41:72:BD:F9:8A:95:D6:5C:BE:B8:8A:38:A1:C1:1D:80:0A:85:C3

            X509v3 Subject Alternative Name:
                DNS:testsmdpplus4.gsma.com, Registered ID:2.999.14
            X509v3 CRL Distribution Points:

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-A.crl

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-B.crl

    Signature Algorithm: ecdsa-with-SHA256
         30:44:02:20:6e:eb:6d:9e:59:01:39:c4:9a:2c:9b:d5:05:6e:
         c9:a6:f6:03:73:29:62:da:e3:6e:d1:de:6d:fe:c1:31:95:8f:
         02:20:39:5c:3b:44:d5:de:84:73:ce:be:82:3d:33:5f:b4:fe:
         5b:2c:7f:47:3d:e6:5e:70:4a:ae:66:2a:6c:af:ec:5c
*/
const octetstring cert_s_sm_dp4_tls :=
'3082027b30820222a00302010202020994300a06082a8648ce3d04030230
493115301306035504030c0c47534d4120546573742043493111300f0603
55040b0c0854455354434552543110300e060355040a0c07525350544553
54310b3009060355040613024954301e170d313731323035313333323137
5a170d3230313230343133333231375a3030310d300b060355040a0c0441
434d45311f301d06035504030c1674657374736d6470706c7573342e6773
6d612e636f6d3059301306072a8648ce3d020106082a8648ce3d03010703
4200043adbe84d23a81af63ba2d899836cbb68a76256b30d7026303dc36b
c15df61136c4fbe70201b4c5a66e3dac6b2b3b957a99bb4e741003e8bf74
2f081302aa7da6a38201113082010d300e0603551d0f0101ff0404030207
8030200603551d250101ff0416301406082b0601050507030106082b0601
050507030230140603551d20040d300b3009060767811201020103301d06
03551d0e04160414130f3d7bb3b065ad3c587876bcbb6b84fd497aab301f
0603551d23041830168014f54172bdf98a95d65cbeb88a38a1c11d800a85
c330260603551d11041f301d821674657374736d6470706c7573342e6773
6d612e636f6d880388370e305b0603551d1f045430523027a025a0238621
687474703a2f2f63692e746573742e67736d612e636f6d2f43524c2d412e
63726c3027a025a0238621687474703a2f2f63692e746573742e67736d61
2e636f6d2f43524c2d422e63726c300a06082a8648ce3d04030203470030
4402206eeb6d9e590139c49a2c9bd5056ec9a6f603732962dae36ed1de6d
fec131958f0220395c3b44d5de8473cebe823d335fb4fe5b2c7f473de65e
704aae662a6cafec5c'O;
function f_ts_cert_s_sm_dp4_tls() return Certificate {
	 var Certificate cert_decoded;
	 cert_decoded := dec_Certificate(cert_s_sm_dp4_tls);
	 return cert_decoded;
}
template (value) Certificate ts_cert_s_sm_dp4_tls := f_ts_cert_s_sm_dp4_tls();

/* Test certificate:
SGP.26_v1.2_files/Valid test cases/SM-DP+/DPtls/CERT_S_SM_DP8_TLS.der
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 2456 (0x998)
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: CN = GSMA Test CI, OU = TESTCERT, O = RSPTEST, C = IT
        Validity
            Not Before: Dec  5 13:37:06 2017 GMT
            Not After : Dec  4 13:37:06 2020 GMT
        Subject: O = ACME, CN = testsmdpplus8.gsma.com
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:ce:41:31:18:fa:64:99:6e:d8:b2:9b:fc:ac:85:
                    33:83:e6:5d:3f:22:a1:99:e7:96:6b:f4:06:9a:69:
                    58:39:2b:e5:39:d0:00:ea:51:a5:48:8b:10:87:d6:
                    eb:47:c0:01:84:6d:1e:68:7e:c4:90:e8:1a:80:96:
                    49:42:0c:52:6b
                ASN1 OID: prime256v1
                NIST CURVE: P-256
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature
            X509v3 Extended Key Usage: critical
                TLS Web Server Authentication, TLS Web Client Authentication
            X509v3 Certificate Policies:
                Policy: 2.23.146.1.2.1.3

            X509v3 Subject Key Identifier:
                B8:7E:0A:73:F2:44:D5:99:4C:28:61:E6:EA:6E:30:70:D6:34:2A:53
            X509v3 Authority Key Identifier:
                keyid:F5:41:72:BD:F9:8A:95:D6:5C:BE:B8:8A:38:A1:C1:1D:80:0A:85:C3

            X509v3 Subject Alternative Name:
                DNS:testsmdpplus8.gsma.com, Registered ID:2.999.18
            X509v3 CRL Distribution Points:

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-A.crl

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-B.crl

    Signature Algorithm: ecdsa-with-SHA256
         30:45:02:21:00:c1:74:e5:e3:ad:32:a9:6c:26:14:29:de:cd:
         c3:09:e5:fe:8a:c1:9d:be:e2:54:73:94:e1:43:be:84:f0:33:
         4a:02:20:55:c4:13:42:f8:b4:f1:d2:2f:0f:31:20:3f:fe:27:
         75:69:6a:0c:72:89:86:7e:66:35:2a:03:ae:e2:b8:71:3c
*/
const octetstring cert_s_sm_dp8_tls :=
'3082027c30820222a00302010202020998300a06082a8648ce3d04030230
493115301306035504030c0c47534d4120546573742043493111300f0603
55040b0c0854455354434552543110300e060355040a0c07525350544553
54310b3009060355040613024954301e170d313731323035313333373036
5a170d3230313230343133333730365a3030310d300b060355040a0c0441
434d45311f301d06035504030c1674657374736d6470706c7573382e6773
6d612e636f6d3059301306072a8648ce3d020106082a8648ce3d03010703
420004ce413118fa64996ed8b29bfcac853383e65d3f22a199e7966bf406
9a6958392be539d000ea51a5488b1087d6eb47c001846d1e687ec490e81a
809649420c526ba38201113082010d300e0603551d0f0101ff0404030207
8030200603551d250101ff0416301406082b0601050507030106082b0601
050507030230140603551d20040d300b3009060767811201020103301d06
03551d0e04160414b87e0a73f244d5994c2861e6ea6e3070d6342a53301f
0603551d23041830168014f54172bdf98a95d65cbeb88a38a1c11d800a85
c330260603551d11041f301d821674657374736d6470706c7573382e6773
6d612e636f6d8803883712305b0603551d1f045430523027a025a0238621
687474703a2f2f63692e746573742e67736d612e636f6d2f43524c2d412e
63726c3027a025a0238621687474703a2f2f63692e746573742e67736d61
2e636f6d2f43524c2d422e63726c300a06082a8648ce3d04030203480030
45022100c174e5e3ad32a96c261429decdc309e5fe8ac19dbee2547394e1
43be84f0334a022055c41342f8b4f1d22f0f31203ffe2775696a0c728986
7e66352a03aee2b8713c'O;
function f_ts_cert_s_sm_dp8_tls() return Certificate {
	 var Certificate cert_decoded;
	 cert_decoded := dec_Certificate(cert_s_sm_dp8_tls);
	 return cert_decoded;
}
template (value) Certificate ts_cert_s_sm_dp8_tls := f_ts_cert_s_sm_dp8_tls();

/* Test certificate:
SGP.26_v1.2_files/Valid test cases/SM-DP+/DPtls/CERT_S_SM_DP_TLS_NIST.der
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 9 (0x9)
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: CN = GSMA Test CI, OU = TESTCERT, O = RSPTEST, C = IT
        Validity
            Not Before: Jun 29 12:21:14 2017 GMT
            Not After : Jun 28 12:21:14 2020 GMT
        Subject: O = ACME, CN = testsmdpplus1.gsma.com
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:28:24:30:75:ce:8e:fd:1f:ae:67:68:39:40:7d:
                    b2:6e:4c:cb:43:70:94:62:1c:9b:39:61:33:f1:b2:
                    4b:b5:01:b8:fe:4e:b2:4d:3e:0d:39:2f:25:3f:6f:
                    1b:94:62:70:b3:ca:29:2e:34:db:6f:7a:87:b3:a5:
                    f6:ac:94:5f:08
                ASN1 OID: prime256v1
                NIST CURVE: P-256
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature
            X509v3 Extended Key Usage: critical
                TLS Web Server Authentication, TLS Web Client Authentication
            X509v3 Certificate Policies:
                Policy: 2.23.146.1.2.1.3

            X509v3 Subject Key Identifier:
                27:FE:F1:F2:29:18:7E:C7:83:ED:F6:E0:29:64:A4:51:8D:57:D4:A9
            X509v3 Authority Key Identifier:
                keyid:F5:41:72:BD:F9:8A:95:D6:5C:BE:B8:8A:38:A1:C1:1D:80:0A:85:C3

            X509v3 Subject Alternative Name:
                DNS:testsmdpplus1.gsma.com, Registered ID:2.999.10
            X509v3 CRL Distribution Points:

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-A.crl

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-B.crl

    Signature Algorithm: ecdsa-with-SHA256
         30:45:02:20:2a:68:cf:75:5a:8b:0b:87:c9:41:25:6b:4d:af:
         4b:f2:09:6d:01:c8:3f:27:2b:cc:ce:63:df:d5:cc:5a:39:e3:
         02:21:00:b0:f5:02:4b:9e:aa:15:26:28:ab:19:77:21:a1:d1:
         a5:9e:05:c0:2e:20:83:79:15:8c:d4:74:4d:37:48:67:8a
*/
const octetstring cert_s_sm_dp_tls_nist :=
'3082027b30820221a003020102020109300a06082a8648ce3d0403023049
3115301306035504030c0c47534d4120546573742043493111300f060355
040b0c0854455354434552543110300e060355040a0c0752535054455354
310b3009060355040613024954301e170d3137303632393132323131345a
170d3230303632383132323131345a3030310d300b060355040a0c044143
4d45311f301d06035504030c1674657374736d6470706c7573312e67736d
612e636f6d3059301306072a8648ce3d020106082a8648ce3d0301070342
000428243075ce8efd1fae676839407db26e4ccb437094621c9b396133f1
b24bb501b8fe4eb24d3e0d392f253f6f1b946270b3ca292e34db6f7a87b3
a5f6ac945f08a38201113082010d300e0603551d0f0101ff040403020780
30200603551d250101ff0416301406082b0601050507030106082b060105
0507030230140603551d20040d300b3009060767811201020103301d0603
551d0e0416041427fef1f229187ec783edf6e02964a4518d57d4a9301f06
03551d23041830168014f54172bdf98a95d65cbeb88a38a1c11d800a85c3
30260603551d11041f301d821674657374736d6470706c7573312e67736d
612e636f6d880388370a305b0603551d1f045430523027a025a023862168
7474703a2f2f63692e746573742e67736d612e636f6d2f43524c2d412e63
726c3027a025a0238621687474703a2f2f63692e746573742e67736d612e
636f6d2f43524c2d422e63726c300a06082a8648ce3d0403020348003045
02202a68cf755a8b0b87c941256b4daf4bf2096d01c83f272bccce63dfd5
cc5a39e3022100b0f5024b9eaa152628ab197721a1d1a59e05c02e208379
158cd4744d3748678a'O;
function f_ts_cert_s_sm_dp_tls_nist() return Certificate {
	 var Certificate cert_decoded;
	 cert_decoded := dec_Certificate(cert_s_sm_dp_tls_nist);
	 return cert_decoded;
}
template (value) Certificate ts_cert_s_sm_dp_tls_nist := f_ts_cert_s_sm_dp_tls_nist();

/* Test certificate:
SGP.26_v1.2_files/Valid test cases/SM-DP+/DPtls/CERT_S_SM_DP_TLS_BRP.der
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 9 (0x9)
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: CN = GSMA Test CI, OU = TESTCERT, O = RSPTEST, C = IT
        Validity
            Not Before: Jul  6 13:49:28 2017 GMT
            Not After : Jul  5 13:49:28 2020 GMT
        Subject: O = ACME, CN = smdp-plus.test.gsma.com
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:4c:22:cc:d8:2c:8d:02:21:f9:d8:54:3b:72:e1:
                    07:bc:c9:fd:90:54:d6:6c:75:c0:eb:74:a7:bd:e7:
                    30:e7:61:8e:f6:5b:27:0b:5e:82:e4:3a:79:6f:8d:
                    ee:0b:af:8a:fb:eb:8a:53:62:53:7a:02:fd:65:c7:
                    9e:41:19:6b:b5
                ASN1 OID: brainpoolP256r1
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature
            X509v3 Extended Key Usage: critical
                TLS Web Server Authentication, TLS Web Client Authentication
            X509v3 Certificate Policies:
                Policy: 2.23.146.1.2.1.3

            X509v3 Subject Key Identifier:
                3D:33:09:83:F3:9F:CC:5B:D2:E4:AD:68:A6:19:A7:47:48:AE:8B:9D
            X509v3 Authority Key Identifier:
                keyid:C0:BC:70:BA:36:92:9D:43:B4:67:FF:57:57:05:30:E5:7A:B8:FC:D8

            X509v3 Subject Alternative Name:
                DNS:smdp-plus.test.gsma.com, Registered ID:2.999.10
            X509v3 CRL Distribution Points:

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-A.crl

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-B.crl

    Signature Algorithm: ecdsa-with-SHA256
         30:44:02:20:4a:9c:78:38:89:c0:ef:f1:9d:68:c3:9f:67:d5:
         b5:81:d3:c9:df:3e:1d:52:67:40:3a:e1:f1:ea:6f:1e:4c:d5:
         02:20:5a:9f:b1:a7:3b:5e:6f:1b:ac:a3:16:55:90:ec:56:c5:
         0a:91:25:ed:76:39:d6:c8:49:1c:a3:c8:3e:55:59:11
*/
const octetstring cert_s_sm_dp_tls_brp :=
'3082027d30820224a003020102020109300a06082a8648ce3d0403023049
3115301306035504030c0c47534d4120546573742043493111300f060355
040b0c0854455354434552543110300e060355040a0c0752535054455354
310b3009060355040613024954301e170d3137303730363133343932385a
170d3230303730353133343932385a3031310d300b060355040a0c044143
4d453120301e06035504030c17736d64702d706c75732e746573742e6773
6d612e636f6d305a301406072a8648ce3d020106092b2403030208010107
034200044c22ccd82c8d0221f9d8543b72e107bcc9fd9054d66c75c0eb74
a7bde730e7618ef65b270b5e82e43a796f8dee0baf8afbeb8a5362537a02
fd65c79e41196bb5a38201123082010e300e0603551d0f0101ff04040302
078030200603551d250101ff0416301406082b0601050507030106082b06
01050507030230140603551d20040d300b3009060767811201020103301d
0603551d0e041604143d330983f39fcc5bd2e4ad68a619a74748ae8b9d30
1f0603551d23041830168014c0bc70ba36929d43b467ff57570530e57ab8
fcd830270603551d110420301e8217736d64702d706c75732e746573742e
67736d612e636f6d880388370a305b0603551d1f045430523027a025a023
8621687474703a2f2f63692e746573742e67736d612e636f6d2f43524c2d
412e63726c3027a025a0238621687474703a2f2f63692e746573742e6773
6d612e636f6d2f43524c2d422e63726c300a06082a8648ce3d0403020347
00304402204a9c783889c0eff19d68c39f67d5b581d3c9df3e1d5267403a
e1f1ea6f1e4cd502205a9fb1a73b5e6f1baca3165590ec56c50a9125ed76
39d6c8491ca3c83e555911'O;
function f_ts_cert_s_sm_dp_tls_brp() return Certificate {
	 var Certificate cert_decoded;
	 cert_decoded := dec_Certificate(cert_s_sm_dp_tls_brp);
	 return cert_decoded;
}
template (value) Certificate ts_cert_s_sm_dp_tls_brp := f_ts_cert_s_sm_dp_tls_brp();

/* Test certificate:
SGP.26_v1.2_files/Valid test cases/SM-DS/DSauth/CERT_S_SM_DSauth_ECDSA_NIST.der
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 7495 (0x1d47)
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: CN = GSMA Test CI, OU = TESTCERT, O = RSPTEST, C = IT
        Validity
            Not Before: Jan 30 11:08:22 2017 GMT
            Not After : Jan 30 11:08:22 2020 GMT
        Subject: O = ACME, CN = TEST SM-DS
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:37:fb:94:e3:a2:be:fe:76:3e:1a:77:4a:48:54:
                    88:0f:10:6d:80:f9:36:84:5b:ad:2f:dd:97:1b:c0:
                    68:d8:ab:61:a5:48:1a:ee:97:7d:5a:81:68:bb:9f:
                    79:00:4b:1d:00:72:c1:ba:76:73:b0:cb:64:81:6e:
                    10:19:b2:4f:d0
                ASN1 OID: prime256v1
                NIST CURVE: P-256
        X509v3 extensions:
            X509v3 Authority Key Identifier:
                keyid:F5:41:72:BD:F9:8A:95:D6:5C:BE:B8:8A:38:A1:C1:1D:80:0A:85:C3

            X509v3 Key Usage: critical
                Digital Signature
            X509v3 Subject Key Identifier:
                C1:F4:06:4B:3B:25:8A:FB:61:38:8B:3F:F2:EE:6A:61:E2:C4:4D:72
            X509v3 Subject Alternative Name:
                Registered ID:2.999.15
            X509v3 Certificate Policies: critical
                Policy: 2.23.146.1.2.1.7

            X509v3 CRL Distribution Points:

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-A.crl

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-B.crl

    Signature Algorithm: ecdsa-with-SHA256
         30:45:02:21:00:d3:41:14:3c:60:cd:36:14:93:12:ed:a8:4d:
         40:08:7a:ee:cc:e9:7d:de:06:44:dc:e8:b7:6a:16:8f:e8:e2:
         61:02:20:09:d6:1d:c9:40:e3:13:08:33:32:78:77:44:0d:6f:
         ac:eb:9f:6b:92:72:88:6b:f5:fa:a1:47:98:76:99:59:f2
*/
const octetstring cert_s_sm_dsauth_nist :=
'30820237308201dda00302010202021d47300a06082a8648ce3d04030230
493115301306035504030c0c47534d4120546573742043493111300f0603
55040b0c0854455354434552543110300e060355040a0c07525350544553
54310b3009060355040613024954301e170d313730313330313130383232
5a170d3230303133303131303832325a3024310d300b060355040a0c0441
434d453113301106035504030c0a5445535420534d2d4453305930130607
2a8648ce3d020106082a8648ce3d0301070342000437fb94e3a2befe763e
1a774a4854880f106d80f936845bad2fdd971bc068d8ab61a5481aee977d
5a8168bb9f79004b1d0072c1ba7673b0cb64816e1019b24fd0a381d93081
d6301f0603551d23041830168014f54172bdf98a95d65cbeb88a38a1c11d
800a85c3300e0603551d0f0101ff040403020780301d0603551d0e041604
14c1f4064b3b258afb61388b3ff2ee6a61e2c44d72300e0603551d110407
3005880388370f30170603551d200101ff040d300b300906076781120102
0107305b0603551d1f045430523027a025a0238621687474703a2f2f6369
2e746573742e67736d612e636f6d2f43524c2d412e63726c3027a025a023
8621687474703a2f2f63692e746573742e67736d612e636f6d2f43524c2d
422e63726c300a06082a8648ce3d0403020348003045022100d341143c60
cd36149312eda84d40087aeecce97dde0644dce8b76a168fe8e261022009
d61dc940e3130833327877440d6faceb9f6b9272886bf5faa14798769959
f2'O;
function f_ts_cert_s_sm_dsauth_nist() return Certificate {
	 var Certificate cert_decoded;
	 cert_decoded := dec_Certificate(cert_s_sm_dsauth_nist);
	 return cert_decoded;
}
template (value) Certificate ts_cert_s_sm_dsauth_nist := f_ts_cert_s_sm_dsauth_nist();

/* Test certificate:
SGP.26_v1.2_files/Valid test cases/SM-DS/DSauth/CERT_S_SM_DSauth_ECDSA_BRP.der
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 7495 (0x1d47)
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: CN = GSMA Test CI, OU = TESTCERT, O = RSPTEST, C = IT
        Validity
            Not Before: May  5 17:03:51 2017 GMT
            Not After : May  4 17:03:51 2020 GMT
        Subject: O = ACME, CN = TEST SM-DS
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:81:d1:d0:23:f3:9f:18:43:34:18:c2:8c:d2:3d:
                    42:15:7a:43:9f:ed:d2:9e:59:ab:11:86:e1:30:89:
                    81:96:c1:56:3a:13:f4:8b:36:d6:d4:b1:3b:4d:08:
                    5a:57:60:ae:61:3d:06:1f:fe:6f:c7:a4:0c:65:02:
                    e3:ff:73:3c:31
                ASN1 OID: brainpoolP256r1
        X509v3 extensions:
            X509v3 Authority Key Identifier:
                keyid:C0:BC:70:BA:36:92:9D:43:B4:67:FF:57:57:05:30:E5:7A:B8:FC:D8

            X509v3 Key Usage: critical
                Digital Signature
            X509v3 Subject Key Identifier:
                F0:5F:0B:54:AE:E8:AE:01:08:F0:1D:EF:54:8E:D9:85:97:14:DD:48
            X509v3 Subject Alternative Name:
                Registered ID:2.999.15
            X509v3 Certificate Policies: critical
                Policy: 2.23.146.1.2.1.7

            X509v3 CRL Distribution Points:

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-A.crl

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-B.crl

    Signature Algorithm: ecdsa-with-SHA256
         30:45:02:20:25:a0:29:5d:1a:46:6e:2d:07:48:83:c5:f9:43:
         e2:fb:0a:72:ee:96:b5:75:95:d9:7d:91:b5:cb:b1:ea:6e:63:
         02:21:00:8d:4c:5b:4a:e7:48:86:82:28:72:15:0c:13:90:b9:
         64:39:f0:30:71:d2:4a:a4:11:45:5d:bb:16:2e:05:54:77
*/
const octetstring cert_s_sm_dsauth_brp :=
'30820238308201dea00302010202021d47300a06082a8648ce3d04030230
493115301306035504030c0c47534d4120546573742043493111300f0603
55040b0c0854455354434552543110300e060355040a0c07525350544553
54310b3009060355040613024954301e170d313730353035313730333531
5a170d3230303530343137303335315a3024310d300b060355040a0c0441
434d453113301106035504030c0a5445535420534d2d4453305a30140607
2a8648ce3d020106092b24030302080101070342000481d1d023f39f1843
3418c28cd23d42157a439fedd29e59ab1186e130898196c1563a13f48b36
d6d4b13b4d085a5760ae613d061ffe6fc7a40c6502e3ff733c31a381d930
81d6301f0603551d23041830168014c0bc70ba36929d43b467ff57570530
e57ab8fcd8300e0603551d0f0101ff040403020780301d0603551d0e0416
0414f05f0b54aee8ae0108f01def548ed9859714dd48300e0603551d1104
073005880388370f30170603551d200101ff040d300b3009060767811201
020107305b0603551d1f045430523027a025a0238621687474703a2f2f63
692e746573742e67736d612e636f6d2f43524c2d412e63726c3027a025a0
238621687474703a2f2f63692e746573742e67736d612e636f6d2f43524c
2d422e63726c300a06082a8648ce3d0403020348003045022025a0295d1a
466e2d074883c5f943e2fb0a72ee96b57595d97d91b5cbb1ea6e63022100
8d4c5b4ae74886822872150c1390b96439f03071d24aa411455dbb162e05
5477'O;
function f_ts_cert_s_sm_dsauth_brp() return Certificate {
	 var Certificate cert_decoded;
	 cert_decoded := dec_Certificate(cert_s_sm_dsauth_brp);
	 return cert_decoded;
}
template (value) Certificate ts_cert_s_sm_dsauth_brp := f_ts_cert_s_sm_dsauth_brp();

/* Test certificate:
SGP.26_v1.2_files/Valid test cases/SM-DS/DStls/CERT_SM_DS_TLS_NIST.der
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 77899973700 (0x1223334444)
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: CN = GSMA Test CI, OU = TESTCERT, O = RSPTEST, C = IT
        Validity
            Not Before: Jul 28 13:34:55 2017 GMT
            Not After : Jul 27 13:34:55 2020 GMT
        Subject: O = RSPTEST, CN = testrootsmds.gsma.com
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:92:0c:d5:ff:68:04:d8:7d:99:1d:ad:f6:38:c9:
                    b7:83:c5:85:00:a5:7b:a4:93:5b:9e:e2:ef:02:52:
                    b6:a6:dd:9a:50:1c:21:fd:35:42:6b:3b:51:c4:e4:
                    61:e5:6c:3f:77:2e:69:5f:b8:61:7f:9a:74:82:30:
                    4b:bb:2f:e2:84
                ASN1 OID: prime256v1
                NIST CURVE: P-256
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature
            X509v3 Extended Key Usage: critical
                TLS Web Server Authentication, TLS Web Client Authentication
            X509v3 Certificate Policies:
                Policy: 2.23.146.1.2.1.6

            X509v3 Subject Key Identifier:
                A0:36:C1:62:75:35:1E:C7:B0:15:53:A1:3F:83:E2:8D:44:00:BD:0A
            X509v3 Authority Key Identifier:
                keyid:F5:41:72:BD:F9:8A:95:D6:5C:BE:B8:8A:38:A1:C1:1D:80:0A:85:C3

            X509v3 Subject Alternative Name:
                DNS:testrootsmds.gsma.com, Registered ID:2.999.15
            X509v3 CRL Distribution Points:

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-A.crl

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-B.crl

    Signature Algorithm: ecdsa-with-SHA256
         30:45:02:20:20:15:19:8e:b1:3b:3c:b2:cd:90:f2:02:c0:1c:
         55:88:0c:4b:94:64:5a:88:f2:87:2b:44:f4:fa:42:15:bb:64:
         02:21:00:8f:0d:7e:67:1f:bf:34:a4:0e:51:d2:11:2f:ca:21:
         47:0c:ba:c9:84:06:30:39:5b:66:66:60:61:d3:86:3e:33
*/
const octetstring cert_sm_ds_tls_nist :=
'3082028030820226a00302010202051223334444300a06082a8648ce3d04
030230493115301306035504030c0c47534d412054657374204349311130
0f060355040b0c0854455354434552543110300e060355040a0c07525350
54455354310b3009060355040613024954301e170d313730373238313333
3435355a170d3230303732373133333435355a30323110300e060355040a
0c0752535054455354311e301c06035504030c1574657374726f6f74736d
64732e67736d612e636f6d3059301306072a8648ce3d020106082a8648ce
3d03010703420004920cd5ff6804d87d991dadf638c9b783c58500a57ba4
935b9ee2ef0252b6a6dd9a501c21fd35426b3b51c4e461e56c3f772e695f
b8617f9a7482304bbb2fe284a38201103082010c300e0603551d0f0101ff
04040302078030200603551d250101ff0416301406082b06010505070301
06082b0601050507030230140603551d20040d300b300906076781120102
0106301d0603551d0e04160414a036c16275351ec7b01553a13f83e28d44
00bd0a301f0603551d23041830168014f54172bdf98a95d65cbeb88a38a1
c11d800a85c330250603551d11041e301c821574657374726f6f74736d64
732e67736d612e636f6d880388370f305b0603551d1f045430523027a025
a0238621687474703a2f2f63692e746573742e67736d612e636f6d2f4352
4c2d412e63726c3027a025a0238621687474703a2f2f63692e746573742e
67736d612e636f6d2f43524c2d422e63726c300a06082a8648ce3d040302
034800304502202015198eb13b3cb2cd90f202c01c55880c4b94645a88f2
872b44f4fa4215bb640221008f0d7e671fbf34a40e51d2112fca21470cba
c9840630395b66666061d3863e33'O;
function f_ts_cert_sm_ds_tls_nist() return Certificate {
	 var Certificate cert_decoded;
	 cert_decoded := dec_Certificate(cert_sm_ds_tls_nist);
	 return cert_decoded;
}
template (value) Certificate ts_cert_sm_ds_tls_nist := f_ts_cert_sm_ds_tls_nist();

/* Test certificate:
SGP.26_v1.2_files/Valid test cases/SM-DS/DStls/CERT_S_SM_DS2_TLS_NIST.der
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 81684042822800725 (0x122333444455555)
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: CN = GSMA Test CI, OU = TESTCERT, O = RSPTEST, C = IT
        Validity
            Not Before: Jul 31 09:36:23 2017 GMT
            Not After : Jul 30 09:36:23 2020 GMT
        Subject: O = RSPTEST, CN = testsmds1.gsma.com
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:19:d0:a3:31:cf:30:2c:7a:07:61:52:90:92:56:
                    75:ad:14:62:cc:58:ba:57:b2:a8:fa:67:69:fd:65:
                    f5:c3:ad:34:d4:92:89:77:cf:57:39:30:ca:01:d8:
                    61:15:a6:8d:45:a6:86:0c:7b:9d:b2:3d:82:18:58:
                    11:41:8c:2a:09
                ASN1 OID: prime256v1
                NIST CURVE: P-256
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature
            X509v3 Extended Key Usage: critical
                TLS Web Server Authentication, TLS Web Client Authentication
            X509v3 Certificate Policies:
                Policy: 2.23.146.1.2.1.6

            X509v3 Subject Key Identifier:
                53:82:04:27:91:71:ED:3D:0A:79:C0:AD:61:A5:35:31:2C:86:48:6C
            X509v3 Authority Key Identifier:
                keyid:F5:41:72:BD:F9:8A:95:D6:5C:BE:B8:8A:38:A1:C1:1D:80:0A:85:C3

            X509v3 Subject Alternative Name:
                DNS:testsmds1.gsma.com, Registered ID:2.999.15.2
            X509v3 CRL Distribution Points:

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-A.crl

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-B.crl

    Signature Algorithm: ecdsa-with-SHA256
         30:45:02:20:5c:b0:bd:6d:48:5b:13:21:c3:bf:28:37:22:a6:
         43:09:a5:d2:0e:8f:67:1b:d0:05:f3:f9:1e:17:6f:8b:a4:80:
         02:21:00:c7:73:03:63:64:ab:76:34:f2:61:24:99:d8:24:8c:
         af:df:81:d1:6d:3c:2c:5b:d6:0c:4b:ee:60:68:31:c4:f1
*/
const octetstring cert_s_sm_ds2_tls_nist :=
'3082027e30820224a00302010202080122333444455555300a06082a8648
ce3d04030230493115301306035504030c0c47534d412054657374204349
3111300f060355040b0c0854455354434552543110300e060355040a0c07
52535054455354310b3009060355040613024954301e170d313730373331
3039333632335a170d3230303733303039333632335a302f3110300e0603
55040a0c0752535054455354311b301906035504030c1274657374736d64
73312e67736d612e636f6d3059301306072a8648ce3d020106082a8648ce
3d0301070342000419d0a331cf302c7a07615290925675ad1462cc58ba57
b2a8fa6769fd65f5c3ad34d4928977cf573930ca01d86115a68d45a6860c
7b9db23d82185811418c2a09a382010e3082010a300e0603551d0f0101ff
04040302078030200603551d250101ff0416301406082b06010505070301
06082b0601050507030230140603551d20040d300b300906076781120102
0106301d0603551d0e04160414538204279171ed3d0a79c0ad61a535312c
86486c301f0603551d23041830168014f54172bdf98a95d65cbeb88a38a1
c11d800a85c330230603551d11041c301a821274657374736d6473312e67
736d612e636f6d880488370f02305b0603551d1f045430523027a025a023
8621687474703a2f2f63692e746573742e67736d612e636f6d2f43524c2d
412e63726c3027a025a0238621687474703a2f2f63692e746573742e6773
6d612e636f6d2f43524c2d422e63726c300a06082a8648ce3d0403020348
00304502205cb0bd6d485b1321c3bf283722a64309a5d20e8f671bd005f3
f91e176f8ba480022100c773036364ab7634f2612499d8248cafdf81d16d
3c2c5bd60c4bee606831c4f1'O;
function f_ts_cert_s_sm_ds2_tls_nist() return Certificate {
	 var Certificate cert_decoded;
	 cert_decoded := dec_Certificate(cert_s_sm_ds2_tls_nist);
	 return cert_decoded;
}
template (value) Certificate ts_cert_s_sm_ds2_tls_nist := f_ts_cert_s_sm_ds2_tls_nist();

/* Test certificate:
SGP.26_v1.2_files/Valid test cases/SM-DS/DStls/CERT_S_SM_DS_TLS_BRP.der
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 1246399579205 (0x12233344445)
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: CN = GSMA Test CI, OU = TESTCERT, O = RSPTEST, C = IT
        Validity
            Not Before: Jul  7 06:18:01 2017 GMT
            Not After : Jul  6 06:18:01 2020 GMT
        Subject: O = TESTCERT, CN = smds.test.gsma.com
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:39:ef:3f:92:a3:bc:a8:ef:7d:66:26:7f:1e:1a:
                    d8:b9:43:fd:2d:b2:27:cb:e1:a1:0b:f4:92:72:61:
                    81:c4:81:5b:2a:31:60:7c:7d:e5:b3:1c:a0:22:1d:
                    ff:ed:ad:58:70:63:3d:30:ed:55:aa:bb:51:7a:e4:
                    39:9c:4a:64:81
                ASN1 OID: brainpoolP256r1
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature
            X509v3 Extended Key Usage: critical
                TLS Web Server Authentication, TLS Web Client Authentication
            X509v3 Certificate Policies:
                Policy: 2.23.146.1.2.1.6

            X509v3 Subject Key Identifier:
                73:99:CA:C7:B1:5F:AB:2F:F9:33:CF:2D:22:15:E4:84:4A:DE:F8:05
            X509v3 Authority Key Identifier:
                keyid:C0:BC:70:BA:36:92:9D:43:B4:67:FF:57:57:05:30:E5:7A:B8:FC:D8

            X509v3 Subject Alternative Name:
                DNS:smds.test.gsma.com, Registered ID:2.999.15
            X509v3 CRL Distribution Points:

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-A.crl

                Full Name:
                  URI:http://ci.test.gsma.com/CRL-B.crl

    Signature Algorithm: ecdsa-with-SHA256
         30:44:02:20:18:56:2e:17:de:40:a4:93:18:dc:8e:a5:26:dc:
         e5:71:9d:85:42:c8:5b:cc:2c:6c:86:a4:6a:58:db:b5:ce:1a:
         02:20:4a:91:75:54:26:98:e5:85:6e:27:57:41:0c:46:f2:fb:
         22:7e:04:2c:79:6a:99:77:69:5b:20:2e:89:49:c3:4d
*/
const octetstring cert_s_sm_ds_tls_brp :=
'3082027c30820223a0030201020206012233344445300a06082a8648ce3d
04030230493115301306035504030c0c47534d4120546573742043493111
300f060355040b0c0854455354434552543110300e060355040a0c075253
5054455354310b3009060355040613024954301e170d3137303730373036
313830315a170d3230303730363036313830315a30303111300f06035504
0a0c085445535443455254311b301906035504030c12736d64732e746573
742e67736d612e636f6d305a301406072a8648ce3d020106092b24030302
080101070342000439ef3f92a3bca8ef7d66267f1e1ad8b943fd2db227cb
e1a10bf492726181c4815b2a31607c7de5b31ca0221dffedad5870633d30
ed55aabb517ae4399c4a6481a382010d30820109300e0603551d0f0101ff
04040302078030200603551d250101ff0416301406082b06010505070301
06082b0601050507030230140603551d20040d300b300906076781120102
0106301d0603551d0e041604147399cac7b15fab2ff933cf2d2215e4844a
def805301f0603551d23041830168014c0bc70ba36929d43b467ff575705
30e57ab8fcd830220603551d11041b30198212736d64732e746573742e67
736d612e636f6d880388370f305b0603551d1f045430523027a025a02386
21687474703a2f2f63692e746573742e67736d612e636f6d2f43524c2d41
2e63726c3027a025a0238621687474703a2f2f63692e746573742e67736d
612e636f6d2f43524c2d422e63726c300a06082a8648ce3d040302034700
3044022018562e17de40a49318dc8ea526dce5719d8542c85bcc2c6c86a4
6a58dbb5ce1a02204a9175542698e5856e2757410c46f2fb227e042c796a
9977695b202e8949c34d'O;
function f_ts_cert_s_sm_ds_tls_brp() return Certificate {
	 var Certificate cert_decoded;
	 cert_decoded := dec_Certificate(cert_s_sm_ds_tls_brp);
	 return cert_decoded;
}
template (value) Certificate ts_cert_s_sm_ds_tls_brp := f_ts_cert_s_sm_ds_tls_brp();

}
