1 /*
2 * Copyright (C) 2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include <gtest/gtest.h>
17 #include "securec.h"
18
19 #include "asy_key_generator.h"
20 #include "asy_key_generator_spi.h"
21 #include "blob.h"
22 #include "memory.h"
23 #include "params_parser.h"
24 #include "rsa_asy_key_generator_openssl.h"
25
26 using namespace std;
27 using namespace testing::ext;
28
29 namespace {
30 class CryptoRsaAsyKeyPemTest : public testing::Test {
31 public:
32 static void SetUpTestCase();
33 static void TearDownTestCase();
34 void SetUp();
35 void TearDown();
36 };
37
SetUpTestCase()38 void CryptoRsaAsyKeyPemTest::SetUpTestCase() {}
TearDownTestCase()39 void CryptoRsaAsyKeyPemTest::TearDownTestCase() {}
SetUp()40 void CryptoRsaAsyKeyPemTest::SetUp() {}
TearDown()41 void CryptoRsaAsyKeyPemTest::TearDown() {}
42
43 constexpr int32_t OPENSSL_RSA_KEY_SIZE_1024 = 1024;
44 constexpr int32_t OPENSSL_RSA_KEY_SIZE_2048 = 2048;
45
46 static string g_testPrikeyPkcs1Str512 = "-----BEGIN RSA PRIVATE KEY-----\n"
47 "MIIBOQIBAAJBAKG0KN3tjZM8dCNfCg9bcmZM3Bhv/mRrMxuvua2Ru8Kr1NL+/wye\n"
48 "EMnIARFr+Alf1Tyfjy0PWwFnf8jHWRsz0vkCAwEAAQJAWaTy8vV7AyEEkYdioFjl\n"
49 "9uitK68KrMjxMGwe16ZvHOAcF1+DvEZpALCs6Stn4vh3zas7FNCxCbd5ptCjHHnM\n"
50 "wQIhANCYrfBv6m/kADdb9BYpdhMtp1uH3ucf9yMp9b2cr3V1AiEAxnNzDcvW2aOt\n"
51 "B4+WCEX+tTD3hSBbcv1sKrCApdu3gvUCIEn4WnYQucnDyG/ZI81YFo7meZpzrA+5\n"
52 "viGyF3qNvYqhAiAq/6jWPGx5C7XaBYqEkGX37Hw1JCWsbKybM1MsnMbOYQIgG1P4\n"
53 "2PckY+Ho8KCyXy8ABT6vVE8T7glwpNDQQBE87D0=\n"
54 "-----END RSA PRIVATE KEY-----\n";
55
56 static string g_testPrikeyPkcs8Str512 = "-----BEGIN PRIVATE KEY-----\n"
57 "MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEAobQo3e2Nkzx0I18K\n"
58 "D1tyZkzcGG/+ZGszG6+5rZG7wqvU0v7/DJ4QycgBEWv4CV/VPJ+PLQ9bAWd/yMdZ\n"
59 "GzPS+QIDAQABAkBZpPLy9XsDIQSRh2KgWOX26K0rrwqsyPEwbB7Xpm8c4BwXX4O8\n"
60 "RmkAsKzpK2fi+HfNqzsU0LEJt3mm0KMceczBAiEA0Jit8G/qb+QAN1v0Fil2Ey2n\n"
61 "W4fe5x/3Iyn1vZyvdXUCIQDGc3MNy9bZo60Hj5YIRf61MPeFIFty/WwqsICl27eC\n"
62 "9QIgSfhadhC5ycPIb9kjzVgWjuZ5mnOsD7m+IbIXeo29iqECICr/qNY8bHkLtdoF\n"
63 "ioSQZffsfDUkJaxsrJszUyycxs5hAiAbU/jY9yRj4ejwoLJfLwAFPq9UTxPuCXCk\n"
64 "0NBAETzsPQ==\n"
65 "-----END PRIVATE KEY-----\n";
66
67 static string g_testPubkeyPkcs1Str512 = "-----BEGIN RSA PUBLIC KEY-----\n"
68 "MEgCQQChtCjd7Y2TPHQjXwoPW3JmTNwYb/5kazMbr7mtkbvCq9TS/v8MnhDJyAER\n"
69 "a/gJX9U8n48tD1sBZ3/Ix1kbM9L5AgMBAAE=\n"
70 "-----END RSA PUBLIC KEY-----\n";
71
72 static string g_testPubkeyX509Str512 = "-----BEGIN PUBLIC KEY-----\n"
73 "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKG0KN3tjZM8dCNfCg9bcmZM3Bhv/mRr\n"
74 "Mxuvua2Ru8Kr1NL+/wyeEMnIARFr+Alf1Tyfjy0PWwFnf8jHWRsz0vkCAwEAAQ==\n"
75 "-----END PUBLIC KEY-----\n";
76
77 static string g_testPrikeyPkcs1Str768 = "-----BEGIN RSA PRIVATE KEY-----\n"
78 "MIIBywIBAAJhAPxoq7Nw6sd9nQHV4vh25TBFFOGJvcyST+ev1vvtQE1BKZ22pg5V\n"
79 "Ktx0Up2zombb7ZmdB0CfyqSH3fQ9im6GHfchE9xPUe47UcF4LDnuvRnzwwFi8AxB\n"
80 "iLSC4BcvsOYR0wIDAQABAmABimIB5l6IeSvMJxILki4z7TgDaGPQK9RxBZG6V+hc\n"
81 "kFlArSy2Sa7JSax3afFDz3PQsdVnasx0JGalmsXdsgDWDKZr+WBC5/8h+DZ74+9a\n"
82 "AYrYfApdUnJd4lEBwXJTtQECMQD+55b0UvdY7tua7jukEhrtE7nHBgfMHZCh5Mye\n"
83 "xIAtT5NNPqDacFiqwOsZjxiRYfsCMQD9flXlxTpfh905rl3Z5Zd8TQziNzgIWeO0\n"
84 "eXuzN4XsEbilfqVc0WMGwqq0YIrK4AkCMQCL/nL4Ymx4Ck7PqxFUTaE+HTxFovk7\n"
85 "T+10DG2YsMDYocB7hu7eqR75QJSd5+oNRmsCMQCKhNKjcBbpxPBaaLHYM+GHhwMX\n"
86 "Sl1QEu6e3BOAZ0LDMRvZM09hXPnj49QsJOUy3yECMHYS7JtNGAbkAkNaQzRmq4Rm\n"
87 "/O7AemtWRCdj0h4bHuR4HBYDYbA/qoonqXDxLG16zA==\n"
88 "-----END RSA PRIVATE KEY-----\n";
89
90 static string g_testPrikeyPkcs8Str768 = "-----BEGIN PRIVATE KEY-----\n"
91 "MIIB5QIBADANBgkqhkiG9w0BAQEFAASCAc8wggHLAgEAAmEA/Girs3Dqx32dAdXi\n"
92 "+HblMEUU4Ym9zJJP56/W++1ATUEpnbamDlUq3HRSnbOiZtvtmZ0HQJ/KpIfd9D2K\n"
93 "boYd9yET3E9R7jtRwXgsOe69GfPDAWLwDEGItILgFy+w5hHTAgMBAAECYAGKYgHm\n"
94 "Xoh5K8wnEguSLjPtOANoY9Ar1HEFkbpX6FyQWUCtLLZJrslJrHdp8UPPc9Cx1Wdq\n"
95 "zHQkZqWaxd2yANYMpmv5YELn/yH4Nnvj71oBith8Cl1Scl3iUQHBclO1AQIxAP7n\n"
96 "lvRS91ju25ruO6QSGu0TuccGB8wdkKHkzJ7EgC1Pk00+oNpwWKrA6xmPGJFh+wIx\n"
97 "AP1+VeXFOl+H3TmuXdnll3xNDOI3OAhZ47R5e7M3hewRuKV+pVzRYwbCqrRgisrg\n"
98 "CQIxAIv+cvhibHgKTs+rEVRNoT4dPEWi+TtP7XQMbZiwwNihwHuG7t6pHvlAlJ3n\n"
99 "6g1GawIxAIqE0qNwFunE8Fposdgz4YeHAxdKXVAS7p7cE4BnQsMxG9kzT2Fc+ePj\n"
100 "1Cwk5TLfIQIwdhLsm00YBuQCQ1pDNGarhGb87sB6a1ZEJ2PSHhse5HgcFgNhsD+q\n"
101 "iiepcPEsbXrM\n"
102 "-----END PRIVATE KEY-----\n";
103
104 static string g_testPubkeyPkcs1Str768 = "-----BEGIN RSA PUBLIC KEY-----\n"
105 "MGgCYQD8aKuzcOrHfZ0B1eL4duUwRRThib3Mkk/nr9b77UBNQSmdtqYOVSrcdFKd\n"
106 "s6Jm2+2ZnQdAn8qkh930PYpuhh33IRPcT1HuO1HBeCw57r0Z88MBYvAMQYi0guAX\n"
107 "L7DmEdMCAwEAAQ==\n"
108 "-----END RSA PUBLIC KEY-----\n";
109
110 static string g_testPubkeyX509Str768 = "-----BEGIN PUBLIC KEY-----\n"
111 "MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAPxoq7Nw6sd9nQHV4vh25TBFFOGJvcyS\n"
112 "T+ev1vvtQE1BKZ22pg5VKtx0Up2zombb7ZmdB0CfyqSH3fQ9im6GHfchE9xPUe47\n"
113 "UcF4LDnuvRnzwwFi8AxBiLSC4BcvsOYR0wIDAQAB\n"
114 "-----END PUBLIC KEY-----\n";
115
116 static string g_testPrikeyPkcs1Str1024 = "-----BEGIN RSA PRIVATE KEY-----\n"
117 "MIICXQIBAAKBgQCwIN3mr21+N96ToxnVnaS+xyK9cNRAHiHGgrbjHw6RAj3V+l+W\n"
118 "Y68IhIe3DudVlzE9oMjeOQwkMkq//HCxNlIlFR6O6pa0mrXSwPRE7YKG97CeKk2g\n"
119 "YOS8YEh8toAvm7xKbiLkXuuMlxrjP2j/mb5iI/UASFSPZiQ/IyxDr0AQaQIDAQAB\n"
120 "AoGAEvBFzBNa+7J4PXnRQlYEK/tvsd0bBZX33ceacMubHl6WVZbphltLq+fMTBPP\n"
121 "LjXmtpC+aJ7Lvmyl+wTi/TsxE9vxW5JnbuRT48rnZ/Xwq0eozDeEeIBRrpsr7Rvr\n"
122 "7ctrgzr4m4yMHq9aDgpxj8IR7oHkfwnmWr0wM3FuiVlj650CQQDineeNZ1hUTkj4\n"
123 "D3O+iCi3mxEVEeJrpqrmSFolRMb+iozrIRKuJlgcOs+Gqi2fHfOTTL7LkpYe8SVg\n"
124 "e3JxUdVLAkEAxvcZXk+byMFoetrnlcMR13VHUpoVeoV9qkv6CAWLlbMdgf7uKmgp\n"
125 "a1Yp3QPDNQQqkPvrqtfR19JWZ4uy1qREmwJALTU3BjyBoH/liqb6fh4HkWk75Som\n"
126 "MzeSjFIOubSYxhq5tgZpBZjcpvUMhV7Zrw54kwASZ+YcUJvmyvKViAm9NQJBAKF7\n"
127 "DyXSKrem8Ws0m1ybM7HQx5As6l3EVhePDmDQT1eyRbKp+xaD74nkJpnwYdB3jyyY\n"
128 "qc7A1tj5J5NmeEFolR0CQQCn76Xp8HCjGgLHw9vg7YyIL28y/XyfFyaZAzzK+Yia\n"
129 "akNwQ6NeGtXSsuGCcyyfpacHp9xy8qXQNKSkw03/5vDO\n"
130 "-----END RSA PRIVATE KEY-----\n";
131
132 static string g_testPrikeyPkcs8Str1024 = "-----BEGIN PRIVATE KEY-----\n"
133 "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALAg3eavbX433pOj\n"
134 "GdWdpL7HIr1w1EAeIcaCtuMfDpECPdX6X5ZjrwiEh7cO51WXMT2gyN45DCQySr/8\n"
135 "cLE2UiUVHo7qlrSatdLA9ETtgob3sJ4qTaBg5LxgSHy2gC+bvEpuIuRe64yXGuM/\n"
136 "aP+ZvmIj9QBIVI9mJD8jLEOvQBBpAgMBAAECgYAS8EXME1r7sng9edFCVgQr+2+x\n"
137 "3RsFlffdx5pwy5seXpZVlumGW0ur58xME88uNea2kL5onsu+bKX7BOL9OzET2/Fb\n"
138 "kmdu5FPjyudn9fCrR6jMN4R4gFGumyvtG+vty2uDOvibjIwer1oOCnGPwhHugeR/\n"
139 "CeZavTAzcW6JWWPrnQJBAOKd541nWFROSPgPc76IKLebERUR4mumquZIWiVExv6K\n"
140 "jOshEq4mWBw6z4aqLZ8d85NMvsuSlh7xJWB7cnFR1UsCQQDG9xleT5vIwWh62ueV\n"
141 "wxHXdUdSmhV6hX2qS/oIBYuVsx2B/u4qaClrVindA8M1BCqQ++uq19HX0lZni7LW\n"
142 "pESbAkAtNTcGPIGgf+WKpvp+HgeRaTvlKiYzN5KMUg65tJjGGrm2BmkFmNym9QyF\n"
143 "XtmvDniTABJn5hxQm+bK8pWICb01AkEAoXsPJdIqt6bxazSbXJszsdDHkCzqXcRW\n"
144 "F48OYNBPV7JFsqn7FoPvieQmmfBh0HePLJipzsDW2Pknk2Z4QWiVHQJBAKfvpenw\n"
145 "cKMaAsfD2+DtjIgvbzL9fJ8XJpkDPMr5iJpqQ3BDo14a1dKy4YJzLJ+lpwen3HLy\n"
146 "pdA0pKTDTf/m8M4=\n"
147 "-----END PRIVATE KEY-----\n";
148
149 static string g_testPubkeyPkcs1Str1024 = "-----BEGIN RSA PUBLIC KEY-----\n"
150 "MIGJAoGBALAg3eavbX433pOjGdWdpL7HIr1w1EAeIcaCtuMfDpECPdX6X5ZjrwiE\n"
151 "h7cO51WXMT2gyN45DCQySr/8cLE2UiUVHo7qlrSatdLA9ETtgob3sJ4qTaBg5Lxg\n"
152 "SHy2gC+bvEpuIuRe64yXGuM/aP+ZvmIj9QBIVI9mJD8jLEOvQBBpAgMBAAE=\n"
153 "-----END RSA PUBLIC KEY-----\n";
154
155 static string g_testPubkeyX509Str1024 = "-----BEGIN PUBLIC KEY-----\n"
156 "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwIN3mr21+N96ToxnVnaS+xyK9\n"
157 "cNRAHiHGgrbjHw6RAj3V+l+WY68IhIe3DudVlzE9oMjeOQwkMkq//HCxNlIlFR6O\n"
158 "6pa0mrXSwPRE7YKG97CeKk2gYOS8YEh8toAvm7xKbiLkXuuMlxrjP2j/mb5iI/UA\n"
159 "SFSPZiQ/IyxDr0AQaQIDAQAB\n"
160 "-----END PUBLIC KEY-----\n";
161
162 static string g_testPrikeyPkcs1Str2048 = "-----BEGIN RSA PRIVATE KEY-----\n"
163 "MIIEogIBAAKCAQEAr4U12jTPgkgtjUa1Co6iEUOTsgwr9gM2N6SJ479C+EZ4xhcS\n"
164 "z3SAXwkds3p0j88s/M0qjnINYa2p+RtDnPbLezrLXsCa5wTvHVqOIm8mH99GcfHQ\n"
165 "dKPWx2FICbLSgrQu6CyFFjs62aA5yKYeXXC1CSmu29YjcLMvh00OH3h3bYXcPwMq\n"
166 "GiGJ7MWs1iRLbjV5m8FgL8OJntggAB5eYGfkP7dLuuOw8hIT8Xsxuwer/V67O9s5\n"
167 "kweDOxa4UKmj+MrZc9iHzDnt6unRRSr//boHFJAikSUTIaIUDrWG9UkboAA8QFZ5\n"
168 "OAjbw5LpLKnBfxxVxIFeMRI4MVrF//RKRqpUfQIDAQABAoIBAEKvJpWfiNMjnwLU\n"
169 "wUWgiRxsAzoa+7y83aVoQucfLE9tXsdLzt64kWkJ6pncxVo5yQrG3AtAc6sPssss\n"
170 "u5RwA0DvRoLaRD/PFRWe6O9WMTLcvkPeLmeSM7COWjMtGGOGF2goOewHVsWF5U5B\n"
171 "JrozbuRrTL7C7bYMrdsGwH3eY+lc2AY8fJK62m71MGn4+FX9473s9wP3bLjNMI1y\n"
172 "ghwXYxcgeoNWnKoZX/hkHVDvQt44Jgo1jJUdeFNC0RA8je4MnmUmQI1lOT8Bo1XM\n"
173 "p8a6HGykXiX07Al8QUIJWTy+xhfBQdnOsNkYvl1l9SMjyipywCuA1D4Z7bU6DfIG\n"
174 "wx5SK9UCgYEA2AjAuXOkxUnM9qXZiLEf+41zs5JsayPTB2ehvs7sAAzJ9FKs8uP0\n"
175 "ILSuC4YTaQL/D67dheA6NQs9Q3VBznhkdbpOfThFt1vjHxyw7wkquUeo6I7s2Omt\n"
176 "zKwA8v96QizlYRYDyzp9Dx7m1aP3VtgiWgisDCVSgSs1EGEl3i+4racCgYEAz/2/\n"
177 "N/8xLTOoPpo4AQZJQz9ULD1zPgWgUBQchBxE8etkghZu5m8HxawROe/GJqW/B1nV\n"
178 "leVN6aLguOEQevdnMn0mK2Z14JUFf/BHLU7P8T+gc120O6yi6dSzadCxCNzWLfOb\n"
179 "/ZT8r5iw3KuyL/E1xj8eRUbllXQErFCRHKdTGTsCgYASsL8rzEuHHhlzhWnKn7hq\n"
180 "pRRLhvGGW3UYgOjHf1N/tZuLXdPEt+AZLEiaiqEHRtEWZESaHooqqKxGN9DXsibO\n"
181 "4K2Fu+acNIDz4iGUrLBbk02TwTnQkncM7Byw6VWEgCngOm1dmdPUCRJjjWoKw2xF\n"
182 "adaovlni/v/6SM1j6bEKpQKBgCbCfcD8sHhg+Qh5itg+CKcchR4dcX1sZPynUs0X\n"
183 "y41dtYQ8k/wjUsp2j1tBoKaRGrFO/2uIqOVSMhih8IVJ15RkGBncZTkt7DF0YH9E\n"
184 "AaJOniMBolXAjTeQKMMeXe9t4Af+LuKpwhEjHkpxQKqIg+Hm30g/twcL8Nb/yJsT\n"
185 "X3wDAoGATq+mjrkDpW3JXHINoYXcst1Gd4HYFom1XywX44baAVNwQvunEPBdISwS\n"
186 "MfE5Q1tQ9X3H9bPvRbOo6XooOR3xRE5+nRDIbCD5N2yXT1z0wWO/+DE3aqVAxBZE\n"
187 "mZJqaxk4qMyM8vrqfcDa/gbxaaRWZdEriExT2YdmB5lj4IhOTnQ=\n"
188 "-----END RSA PRIVATE KEY-----\n";
189
190 static string g_testPrikeyPkcs8Str2048 = "-----BEGIN PRIVATE KEY-----\n"
191 "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCvhTXaNM+CSC2N\n"
192 "RrUKjqIRQ5OyDCv2AzY3pInjv0L4RnjGFxLPdIBfCR2zenSPzyz8zSqOcg1hran5\n"
193 "G0Oc9st7OstewJrnBO8dWo4ibyYf30Zx8dB0o9bHYUgJstKCtC7oLIUWOzrZoDnI\n"
194 "ph5dcLUJKa7b1iNwsy+HTQ4feHdthdw/AyoaIYnsxazWJEtuNXmbwWAvw4me2CAA\n"
195 "Hl5gZ+Q/t0u647DyEhPxezG7B6v9Xrs72zmTB4M7FrhQqaP4ytlz2IfMOe3q6dFF\n"
196 "Kv/9ugcUkCKRJRMhohQOtYb1SRugADxAVnk4CNvDkuksqcF/HFXEgV4xEjgxWsX/\n"
197 "9EpGqlR9AgMBAAECggEAQq8mlZ+I0yOfAtTBRaCJHGwDOhr7vLzdpWhC5x8sT21e\n"
198 "x0vO3riRaQnqmdzFWjnJCsbcC0Bzqw+yyyy7lHADQO9GgtpEP88VFZ7o71YxMty+\n"
199 "Q94uZ5IzsI5aMy0YY4YXaCg57AdWxYXlTkEmujNu5GtMvsLttgyt2wbAfd5j6VzY\n"
200 "Bjx8krrabvUwafj4Vf3jvez3A/dsuM0wjXKCHBdjFyB6g1acqhlf+GQdUO9C3jgm\n"
201 "CjWMlR14U0LREDyN7gyeZSZAjWU5PwGjVcynxrocbKReJfTsCXxBQglZPL7GF8FB\n"
202 "2c6w2Ri+XWX1IyPKKnLAK4DUPhnttToN8gbDHlIr1QKBgQDYCMC5c6TFScz2pdmI\n"
203 "sR/7jXOzkmxrI9MHZ6G+zuwADMn0Uqzy4/QgtK4LhhNpAv8Prt2F4Do1Cz1DdUHO\n"
204 "eGR1uk59OEW3W+MfHLDvCSq5R6jojuzY6a3MrADy/3pCLOVhFgPLOn0PHubVo/dW\n"
205 "2CJaCKwMJVKBKzUQYSXeL7itpwKBgQDP/b83/zEtM6g+mjgBBklDP1QsPXM+BaBQ\n"
206 "FByEHETx62SCFm7mbwfFrBE578Ympb8HWdWV5U3pouC44RB692cyfSYrZnXglQV/\n"
207 "8EctTs/xP6BzXbQ7rKLp1LNp0LEI3NYt85v9lPyvmLDcq7Iv8TXGPx5FRuWVdASs\n"
208 "UJEcp1MZOwKBgBKwvyvMS4ceGXOFacqfuGqlFEuG8YZbdRiA6Md/U3+1m4td08S3\n"
209 "4BksSJqKoQdG0RZkRJoeiiqorEY30NeyJs7grYW75pw0gPPiIZSssFuTTZPBOdCS\n"
210 "dwzsHLDpVYSAKeA6bV2Z09QJEmONagrDbEVp1qi+WeL+//pIzWPpsQqlAoGAJsJ9\n"
211 "wPyweGD5CHmK2D4IpxyFHh1xfWxk/KdSzRfLjV21hDyT/CNSynaPW0GgppEasU7/\n"
212 "a4io5VIyGKHwhUnXlGQYGdxlOS3sMXRgf0QBok6eIwGiVcCNN5Aowx5d723gB/4u\n"
213 "4qnCESMeSnFAqoiD4ebfSD+3Bwvw1v/ImxNffAMCgYBOr6aOuQOlbclccg2hhdyy\n"
214 "3UZ3gdgWibVfLBfjhtoBU3BC+6cQ8F0hLBIx8TlDW1D1fcf1s+9Fs6jpeig5HfFE\n"
215 "Tn6dEMhsIPk3bJdPXPTBY7/4MTdqpUDEFkSZkmprGTiozIzy+up9wNr+BvFppFZl\n"
216 "0SuITFPZh2YHmWPgiE5OdA==\n"
217 "-----END PRIVATE KEY-----\n";
218
219 static string g_testPubkeyPkcs1Str2048 = "-----BEGIN RSA PUBLIC KEY-----\n"
220 "MIIBCgKCAQEAr4U12jTPgkgtjUa1Co6iEUOTsgwr9gM2N6SJ479C+EZ4xhcSz3SA\n"
221 "Xwkds3p0j88s/M0qjnINYa2p+RtDnPbLezrLXsCa5wTvHVqOIm8mH99GcfHQdKPW\n"
222 "x2FICbLSgrQu6CyFFjs62aA5yKYeXXC1CSmu29YjcLMvh00OH3h3bYXcPwMqGiGJ\n"
223 "7MWs1iRLbjV5m8FgL8OJntggAB5eYGfkP7dLuuOw8hIT8Xsxuwer/V67O9s5kweD\n"
224 "Oxa4UKmj+MrZc9iHzDnt6unRRSr//boHFJAikSUTIaIUDrWG9UkboAA8QFZ5OAjb\n"
225 "w5LpLKnBfxxVxIFeMRI4MVrF//RKRqpUfQIDAQAB\n"
226 "-----END RSA PUBLIC KEY-----\n";
227
228 static string g_testPubkeyX509Str2048 = "-----BEGIN PUBLIC KEY-----\n"
229 "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr4U12jTPgkgtjUa1Co6i\n"
230 "EUOTsgwr9gM2N6SJ479C+EZ4xhcSz3SAXwkds3p0j88s/M0qjnINYa2p+RtDnPbL\n"
231 "ezrLXsCa5wTvHVqOIm8mH99GcfHQdKPWx2FICbLSgrQu6CyFFjs62aA5yKYeXXC1\n"
232 "CSmu29YjcLMvh00OH3h3bYXcPwMqGiGJ7MWs1iRLbjV5m8FgL8OJntggAB5eYGfk\n"
233 "P7dLuuOw8hIT8Xsxuwer/V67O9s5kweDOxa4UKmj+MrZc9iHzDnt6unRRSr//boH\n"
234 "FJAikSUTIaIUDrWG9UkboAA8QFZ5OAjbw5LpLKnBfxxVxIFeMRI4MVrF//RKRqpU\n"
235 "fQIDAQAB\n"
236 "-----END PUBLIC KEY-----\n";
237
238 static string g_testPrikeyPkcs1Str3072 = "-----BEGIN RSA PRIVATE KEY-----\n"
239 "MIIG4wIBAAKCAYEAyBxneAYLMyWepegDigzAXZUmB3F7WtBJ9YmfAwafMQDqtDMQ\n"
240 "fHN/qodxSJ6ZRlvpDkALbiZmw0LpN+DIMJCB3o28L21B0lpcGJDfYFKjdWP2l4si\n"
241 "bVv69zV/5k2T5asLLSdrm12umkCwm1C1UoT5Ivqde4ipLQFhMYPPzB3/hz3eRTcx\n"
242 "ZUWm0uOWsXlvImTP4aXeEFTatBWzglWgtOucUG3cezLIzdyD88ZBi27lzo74ocjI\n"
243 "GhDC4pdS9DvQ+kp9KvYG+DslxOpbTN4SGQaiQkl+k1cJ6keY8cisG30exDFkLyVm\n"
244 "fFjPMfKulc0h03xIY3nPkfC7dc8hB8nzvzZbCzr1cDjJR80ekSEmUfj2eUCMSxaS\n"
245 "PvAoafsxSLTZsjFb+6hTJPJ8GdxtFg1FrzA51QSxhRivobdvqntmQU3K8Ne2KVmq\n"
246 "64UH2a69GcH2oWejG4mIeT4t1gBFZ+peqOsIgq/VeYI2WmNb1co3pvRBuIAcG1sg\n"
247 "TaU8AilKi6YBEcNxAgMBAAECggGBAKW96PEfSF13ljxhu7S2tQmNxC68Dmh8RhWp\n"
248 "g9uUu3tx//N6q/f4DdCnV+vG+Lqu24wi/ZShF9I4dEQE2Kpotjgn+qrpenAIyWjL\n"
249 "bUgxihNr1U1VPxGG8omYdTPCI3JBRgODN/w6DqjSVbR+l4AehN805gTwfva4wtCp\n"
250 "FQ5B9mgElTmM6kuv8emP+TtLkgHRr+B8aj3qmi44HzMfSvkugIyZQdmEiY8ASwY4\n"
251 "ugcLtilsf4A4dYwpP9E/dsS1WnREBogt55mTcW6dYPBiP+DrWgI62cih4xg70u6l\n"
252 "hzTdGJrruHIzSHOEWAuQRFd4qT7TjWDguyn5QsCTj9goONTMcxqbHqbITWdXMZF1\n"
253 "yJyvv9vev1sX2Ie5zIgl2DC6Nve62ouIp1WrkNK3lynISRXs4ZogHfVrwXkpaAN5\n"
254 "XRGKTOMOm/Auv32qVHZEVy/APtbVw334f7WzWfft8w6siaJmUr5vi904iSWli6yk\n"
255 "9qmlNAqsTT18036oNcuy+YLBD2smcQKBwQD/9lv5TCQR4dJojDTtenODWwRzSFxq\n"
256 "Rgpjgxl9ZP6xaltzq+/Ri6YkM/EW4V29kbSGYjrbIBE23r+vy6fu/mHEmwlKeXCX\n"
257 "LVEknY6gtayxvcDWR8BzB8ZzR3GYuWM29aNh2oRbaVdMXJmJShVtk5XtM8JfZocT\n"
258 "FSrFIlIRYpKNuywu9ObQazNBuzLUzdc7KYQmedxwaXFC2y0KVpjLqWnxK07eiNFX\n"
259 "63fAVgYxfmdFIleNZHSt5f5pT3q1OOLkSeUCgcEAyCPw98KUezkE9RNXDgS0lYdZ\n"
260 "DY6nMG4XB+jo14upF87hUJBxSECvi8UWsv9JovqRutocGnsD8t/ox7cO2gbqkgzA\n"
261 "ky/jYrbqvcz/9e3SyWY1dB+CwBUqnozFw4/g2c2oabiqaOCwMEwJ0UDyUnonJdvs\n"
262 "KgDPnCuAEN4Fb3QnMLFmrtxGrACTGM20YnOOaK2XajsCuz/OKjW5fKA6GGXNKTB0\n"
263 "E5bPZF+T0pgSlW6ewiAMHBX9ou1ZSBZFxavun4qdAoHAZkO/q3LIVnyq3CpoWxk5\n"
264 "XZnXxVd71Nn2/Js8a+UV/TxJHYXsYwQwdPZrtICGO18jiS1l5naBajLE0y/DALGR\n"
265 "zkNDCwZJ/ZyVdtOcUIlFXh46FWLFeS/6EcTRlfs7sJGjnUz45KzJvDCjBz8aIJV+\n"
266 "qS6s0gDcprsmQ2za7Sc89nN5y6j9LvglmnV4cZ1sCK8lpVm6wQ7fuZ5n+GFw2q3t\n"
267 "LfXnpPF08nOZfLbh8pRWHkECSfOAypnBc8HVfOIlhKAhAoHAbA0rbTe53gTcrktw\n"
268 "tnrH2+qko3MexEDLYlPWUXhvJBFnB43T+wQhQj53kM/Ou5S31L8oaQt9CETmcdxc\n"
269 "wkz1m0ATP+OcyZCjjzD8B5QMNvtdZIIWnwlOZybtJjWpWS10/Q7bwZ98v7ZtnnGH\n"
270 "4gtc0022ZL7nVxMNIw4atR9qgRllrIX0CayNvdhgyL5GZjFCC/Ir+VfrQFKc/7Gp\n"
271 "a76aUuB76o+DDFelgQ7lCZQdVgTjRM6CjtHBX+/WX3ABdlTpAoHAHhdO5ZGis6/t\n"
272 "P3W180XWP3UnYnFTDNABXd1SAyybe8x1nivR1cvXM5PB/NxU8wrv6u3v+zzwhQS8\n"
273 "gUIutHYPo01srF3SHEN+Wg+YT1OE/+VGtjynOaK1lbrSqXV8W+37xSSjOtlYjlw3\n"
274 "FiMV9UQBFmPUO43ptbB4JuR7ynxoo5yGFMRlFaqK1q6d7orq42Ab2um3UytOOAUj\n"
275 "f0FhluVcicRTtaF9Bho/LHOKc0PTmIYWE1n1bk3bAUwFxts3qm56\n"
276 "-----END RSA PRIVATE KEY-----\n";
277
278 static string g_testPrikeyPkcs8Str3072 = "-----BEGIN PRIVATE KEY-----\n"
279 "MIIG/QIBADANBgkqhkiG9w0BAQEFAASCBucwggbjAgEAAoIBgQDIHGd4BgszJZ6l\n"
280 "6AOKDMBdlSYHcXta0En1iZ8DBp8xAOq0MxB8c3+qh3FInplGW+kOQAtuJmbDQuk3\n"
281 "4MgwkIHejbwvbUHSWlwYkN9gUqN1Y/aXiyJtW/r3NX/mTZPlqwstJ2ubXa6aQLCb\n"
282 "ULVShPki+p17iKktAWExg8/MHf+HPd5FNzFlRabS45axeW8iZM/hpd4QVNq0FbOC\n"
283 "VaC065xQbdx7MsjN3IPzxkGLbuXOjvihyMgaEMLil1L0O9D6Sn0q9gb4OyXE6ltM\n"
284 "3hIZBqJCSX6TVwnqR5jxyKwbfR7EMWQvJWZ8WM8x8q6VzSHTfEhjec+R8Lt1zyEH\n"
285 "yfO/NlsLOvVwOMlHzR6RISZR+PZ5QIxLFpI+8Chp+zFItNmyMVv7qFMk8nwZ3G0W\n"
286 "DUWvMDnVBLGFGK+ht2+qe2ZBTcrw17YpWarrhQfZrr0ZwfahZ6MbiYh5Pi3WAEVn\n"
287 "6l6o6wiCr9V5gjZaY1vVyjem9EG4gBwbWyBNpTwCKUqLpgERw3ECAwEAAQKCAYEA\n"
288 "pb3o8R9IXXeWPGG7tLa1CY3ELrwOaHxGFamD25S7e3H/83qr9/gN0KdX68b4uq7b\n"
289 "jCL9lKEX0jh0RATYqmi2OCf6qul6cAjJaMttSDGKE2vVTVU/EYbyiZh1M8IjckFG\n"
290 "A4M3/DoOqNJVtH6XgB6E3zTmBPB+9rjC0KkVDkH2aASVOYzqS6/x6Y/5O0uSAdGv\n"
291 "4HxqPeqaLjgfMx9K+S6AjJlB2YSJjwBLBji6Bwu2KWx/gDh1jCk/0T92xLVadEQG\n"
292 "iC3nmZNxbp1g8GI/4OtaAjrZyKHjGDvS7qWHNN0Ymuu4cjNIc4RYC5BEV3ipPtON\n"
293 "YOC7KflCwJOP2Cg41MxzGpsepshNZ1cxkXXInK+/296/WxfYh7nMiCXYMLo297ra\n"
294 "i4inVauQ0reXKchJFezhmiAd9WvBeSloA3ldEYpM4w6b8C6/fapUdkRXL8A+1tXD\n"
295 "ffh/tbNZ9+3zDqyJomZSvm+L3TiJJaWLrKT2qaU0CqxNPXzTfqg1y7L5gsEPayZx\n"
296 "AoHBAP/2W/lMJBHh0miMNO16c4NbBHNIXGpGCmODGX1k/rFqW3Or79GLpiQz8Rbh\n"
297 "Xb2RtIZiOtsgETbev6/Lp+7+YcSbCUp5cJctUSSdjqC1rLG9wNZHwHMHxnNHcZi5\n"
298 "Yzb1o2HahFtpV0xcmYlKFW2Tle0zwl9mhxMVKsUiUhFiko27LC705tBrM0G7MtTN\n"
299 "1zsphCZ53HBpcULbLQpWmMupafErTt6I0Vfrd8BWBjF+Z0UiV41kdK3l/mlPerU4\n"
300 "4uRJ5QKBwQDII/D3wpR7OQT1E1cOBLSVh1kNjqcwbhcH6OjXi6kXzuFQkHFIQK+L\n"
301 "xRay/0mi+pG62hwaewPy3+jHtw7aBuqSDMCTL+Nituq9zP/17dLJZjV0H4LAFSqe\n"
302 "jMXDj+DZzahpuKpo4LAwTAnRQPJSeicl2+wqAM+cK4AQ3gVvdCcwsWau3EasAJMY\n"
303 "zbRic45orZdqOwK7P84qNbl8oDoYZc0pMHQTls9kX5PSmBKVbp7CIAwcFf2i7VlI\n"
304 "FkXFq+6fip0CgcBmQ7+rcshWfKrcKmhbGTldmdfFV3vU2fb8mzxr5RX9PEkdhexj\n"
305 "BDB09mu0gIY7XyOJLWXmdoFqMsTTL8MAsZHOQ0MLBkn9nJV205xQiUVeHjoVYsV5\n"
306 "L/oRxNGV+zuwkaOdTPjkrMm8MKMHPxoglX6pLqzSANymuyZDbNrtJzz2c3nLqP0u\n"
307 "+CWadXhxnWwIryWlWbrBDt+5nmf4YXDare0t9eek8XTyc5l8tuHylFYeQQJJ84DK\n"
308 "mcFzwdV84iWEoCECgcBsDSttN7neBNyuS3C2esfb6qSjcx7EQMtiU9ZReG8kEWcH\n"
309 "jdP7BCFCPneQz867lLfUvyhpC30IROZx3FzCTPWbQBM/45zJkKOPMPwHlAw2+11k\n"
310 "ghafCU5nJu0mNalZLXT9DtvBn3y/tm2ecYfiC1zTTbZkvudXEw0jDhq1H2qBGWWs\n"
311 "hfQJrI292GDIvkZmMUIL8iv5V+tAUpz/salrvppS4Hvqj4MMV6WBDuUJlB1WBONE\n"
312 "zoKO0cFf79ZfcAF2VOkCgcAeF07lkaKzr+0/dbXzRdY/dSdicVMM0AFd3VIDLJt7\n"
313 "zHWeK9HVy9czk8H83FTzCu/q7e/7PPCFBLyBQi60dg+jTWysXdIcQ35aD5hPU4T/\n"
314 "5Ua2PKc5orWVutKpdXxb7fvFJKM62ViOXDcWIxX1RAEWY9Q7jem1sHgm5HvKfGij\n"
315 "nIYUxGUVqorWrp3uiurjYBva6bdTK044BSN/QWGW5VyJxFO1oX0GGj8sc4pzQ9OY\n"
316 "hhYTWfVuTdsBTAXG2zeqbno=\n"
317 "-----END PRIVATE KEY-----\n";
318
319 static string g_testPubkeyPkcs1Str3072 = "-----BEGIN RSA PUBLIC KEY-----\n"
320 "MIIBigKCAYEAyBxneAYLMyWepegDigzAXZUmB3F7WtBJ9YmfAwafMQDqtDMQfHN/\n"
321 "qodxSJ6ZRlvpDkALbiZmw0LpN+DIMJCB3o28L21B0lpcGJDfYFKjdWP2l4sibVv6\n"
322 "9zV/5k2T5asLLSdrm12umkCwm1C1UoT5Ivqde4ipLQFhMYPPzB3/hz3eRTcxZUWm\n"
323 "0uOWsXlvImTP4aXeEFTatBWzglWgtOucUG3cezLIzdyD88ZBi27lzo74ocjIGhDC\n"
324 "4pdS9DvQ+kp9KvYG+DslxOpbTN4SGQaiQkl+k1cJ6keY8cisG30exDFkLyVmfFjP\n"
325 "MfKulc0h03xIY3nPkfC7dc8hB8nzvzZbCzr1cDjJR80ekSEmUfj2eUCMSxaSPvAo\n"
326 "afsxSLTZsjFb+6hTJPJ8GdxtFg1FrzA51QSxhRivobdvqntmQU3K8Ne2KVmq64UH\n"
327 "2a69GcH2oWejG4mIeT4t1gBFZ+peqOsIgq/VeYI2WmNb1co3pvRBuIAcG1sgTaU8\n"
328 "AilKi6YBEcNxAgMBAAE=\n"
329 "-----END RSA PUBLIC KEY-----\n";
330
331 static string g_testPubkeyX509Str3072 = "-----BEGIN PUBLIC KEY-----\n"
332 "MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAyBxneAYLMyWepegDigzA\n"
333 "XZUmB3F7WtBJ9YmfAwafMQDqtDMQfHN/qodxSJ6ZRlvpDkALbiZmw0LpN+DIMJCB\n"
334 "3o28L21B0lpcGJDfYFKjdWP2l4sibVv69zV/5k2T5asLLSdrm12umkCwm1C1UoT5\n"
335 "Ivqde4ipLQFhMYPPzB3/hz3eRTcxZUWm0uOWsXlvImTP4aXeEFTatBWzglWgtOuc\n"
336 "UG3cezLIzdyD88ZBi27lzo74ocjIGhDC4pdS9DvQ+kp9KvYG+DslxOpbTN4SGQai\n"
337 "Qkl+k1cJ6keY8cisG30exDFkLyVmfFjPMfKulc0h03xIY3nPkfC7dc8hB8nzvzZb\n"
338 "Czr1cDjJR80ekSEmUfj2eUCMSxaSPvAoafsxSLTZsjFb+6hTJPJ8GdxtFg1FrzA5\n"
339 "1QSxhRivobdvqntmQU3K8Ne2KVmq64UH2a69GcH2oWejG4mIeT4t1gBFZ+peqOsI\n"
340 "gq/VeYI2WmNb1co3pvRBuIAcG1sgTaU8AilKi6YBEcNxAgMBAAE=\n"
341 "-----END PUBLIC KEY-----\n";
342
343 static string g_testPrikeyPkcs1Str4096 = "-----BEGIN RSA PRIVATE KEY-----\n"
344 "MIIJJwIBAAKCAgEAnDx8bd6se93OKCpW6F5vi9eqAvmocX6X6wo7RfE4Bdt/sBMk\n"
345 "KEizMM9BBZacBDFX5CnEzZeuj8ILYJlx29jkuQ2nseG56na/YLCfeeHAM4tHEc3W\n"
346 "RhM8GOeMra1mcI4wqS8hbAvFJwrn2Ej5FD/UzCyl4vME3Nf8jgQ3thmsDOLiAgLn\n"
347 "0dh8HKQgq/yAhq33bat+crbhmauBhy9mI+1iLiN0SXX2Jeo6gUuNsKwPIrbTFTYj\n"
348 "2UuxvXK8MvYz9jKVGfKY5ua28yWDBMkS45qAO2L1FV3eCFkb8EiZMSRZ8fqcxGD8\n"
349 "dR3AeyTbb6naguVXfe36qw+LVOnsQONkgmFi6aSIfudhAPfwo9Ekbp3P6Y5pWQB6\n"
350 "/8U1qUGcOvLa2YZ1DSQ4XbRfYf6xXL3dQ/MA1s9qErEBkqpukj1/13wjUKVX7VpP\n"
351 "RCg0eYSKZprocGQ2mrXjA+rb9kaWmWzTOqobMxxk5HtstxTG+I0PiwMO72Z2VESs\n"
352 "qkGeXXrk2tuR/3rGbIxMpUAS/d8sHKUHGERBpyeliGrin+QebNuU1ef6WUp1IXQM\n"
353 "Lg3x3MNLvOhXAwEhPjtYFU2RHOTcmycxEadtT6KQIBQhkE2Vr5RF2C9C1vk3hBUl\n"
354 "hWLAACkQWXvLNisjuMqp4RYhUVdWfZpQn8+PCXFkU6aPaO7QZa+u1DTF6WMCAwEA\n"
355 "AQKCAgATZU7tNN+k4Pxe8CKp5k9ixPtOM0A+FsE1ZKfHHxMdZwqLCVVLyvqz7Ibd\n"
356 "8rybqKSIpsbP3yzEnApdi68e4+ZBMvjGlIdIHEXV8xdZQjViMMA57ZvURz8GuHg2\n"
357 "d3hoML7JwhgcGbn4BtqRdz20zdfVIRXW/uRzpjysRMnFyZoaX3A/X6z32DBQPe/w\n"
358 "agBqt94nt0qTYzDOqwQBjFjZzPaLU8tz8zkDq/hnZMHKVRHr9VZvI7F/oG4IXt4O\n"
359 "VZJN1im8dumUgL/ln5qMVYoKx3tz4+0ZIfYWgzl8swaRmzmvWLVti7zLrU3f+8ti\n"
360 "KWv/JAmgkJK1+dAKUqAJzjEEHqLwvNv6k2adAxMla6QOzHTIlqdsI31BJmIdFj47\n"
361 "q0zq6tmRHvdVw2lYOxrmr/rpPzbRPhq0YgnlRq0Yv/oWPEiU+i6BfWLU5yfBKtpl\n"
362 "JKX5fqC5rd9JPWON1LDqM211YbzuEBNrYwN8ydDoRDQOA+nORizerAbSCVkRiB9k\n"
363 "wpI8n38uBICR/kDgpOwy2dWxmnlSmWSUonugqnBniSuGzeDMUJUAFzOqVnGR6JX4\n"
364 "8FZdNr8vj49+Z8BhD4e2f2fHw5SQQ6LnYWXLXU49HAIQtOKfruHCfscvxjKa6yMY\n"
365 "ywz8vHAc4y88uyjFkXa3Z21XIS+yv/OjpWYZUmB1nTC6RkvzgQKCAQEAyZu1dimB\n"
366 "NfX+Vb8u/h/ug1JcwzIQMoSZN8de4xpCz/bgU/S5h9ti5Cea/XxM5WDx/e/vgKeh\n"
367 "NZmgofyQuKJetdMVw5vM0mBKQ8MnGqTA+GfcrvdeJvBZHkAm7RjY5Ty9GEkuNE0v\n"
368 "XapMBL/o6jIk5OpwMKCblgOYVpChXQL3scOskPc3PN6//KbJNW0NdoKji8C6XzaW\n"
369 "gCAdxh49AXuddW17SHUpwwico35KuhM7hibTZUmG6LVGnzINh/2Q5RUsNn7WFgTW\n"
370 "KiuKV6NjC2awtoI66ALqRviSYKuK6/LCgMgbl47MA3sgZjQQiwR+6MlZ1vZaB/Lv\n"
371 "yihlYqAKt5rsmwKCAQEAxmMdCHarACYts3uTLcwDvtFsKdvLdmVv7sr7enajjtTk\n"
372 "zfwA+PDggWSyjr1O1j52qVRNE7WXUoXr6PQagxmzK5IRXKtWzP94a/ZR6CCAtT19\n"
373 "YQGTPhsWerCZIJacsmuuv1eDOlIh2mzoR/x+23K/blEWZO2o+EgddVqdng4su802\n"
374 "LLclDO5MTVmInGQQ1ve+TOEXU2d4NWQxlT21jWX+/4eAiBreuEllkBLfew/ABQjR\n"
375 "k+JRP+TflrIquS6/FIVTvwkjmIGEbJ1rpeE9SoUpfE6KWuU7SQOOEvcvR+xYLty0\n"
376 "gYNMH9E2aNGYqnW1Nhnjd/6Z7trwshE4gjkXzgau2QKCAQAYF9ufu2YNpNA4PxjG\n"
377 "ldpTJ0yepyT4ZJBK8jCMw16oq8AzSFPDwJwY2ALVuD0YTHWe+0WMAnxpg2qG8T/6\n"
378 "UK0w3YEEV2Iq4gb+AhxyOq41AXSGFFnUHXUJAHGmdAm3m4KdnGFBLtgyQV/EUYrs\n"
379 "MgHmuX2e0hLF4rgZ4D7odqpTPCcrS9/2DkizUNtK3zV0rDgPQ4ECT+u8dBoayxJP\n"
380 "Uw6GMgdBqX7MKANQJo+XnSTH62vn9tmAhelirQCg99SRC+60tIOxLfLKJ1npD0WO\n"
381 "3z7PENEpWO/We25Czz1S5TgJW+CwRAhtghFlJWO0uVzRRP7PibFIseemKR20o5uk\n"
382 "RYdxAoIBAD+gbCBZxvBOTlwBJywKAa2ChzlJmBDJ6cNhcJRPVpepqhRyXXF599co\n"
383 "D6h+CLnn4LDgK7RFilnaP9Y/6/zeEjvIJi9deIJY8StXHd/gBMecCAlDsxC5KVWC\n"
384 "LCpqg6kppisSCzF6RAdE5J6p2ZnSTJk6An+uRYITxvbrcB/QFgLJhzWCK6zhBLHO\n"
385 "JGVcJpZ7cJpBmvSR+9jL4Kcn2oGWE9mqgMumKoZaa+twUiKq43/52xWeAUcHxboU\n"
386 "PGWWG4yeUkSzzqnL6EfZmTvjaH/tA2gt3GvYl1IMhNWKV6yunX2yJWZgUNrng5bM\n"
387 "mjUZeVv3o5/JlV8o8wd5RHFnlD3soMkCggEAKQV5ywRKLq87mKnM7Sod6vTeDK3O\n"
388 "QKJu525T57ob9ERhtYa9VbVqfIWhQTHTAOOTmBqLf0R7cCPxG9CsLASr5VURqLxm\n"
389 "fDhQfmL7H0p3uwv+oP6fhqPApkzJG/5XzUTHriTl8CNMXssnR++0QbXEK7f8F4J/\n"
390 "wr0/wxTHTnLF8d+NXOyYIV0r1X7ghzPmW6RGxKXxLPBKiB9kVmmj/uw6/zalMHKQ\n"
391 "NC++MqaQgO6q4/RhlraPnpXfh5Lq+AySVYVCix2TdR4Z3NfZqQEq1R7s/Z11eCVq\n"
392 "4XL6VInzyqsK4Tx64QnhjqY9efm7jwxbN5Fon/ayRtsoKjXR6WtoECF93A==\n"
393 "-----END RSA PRIVATE KEY-----\n";
394
395 static string g_testPrikeyPkcs8Str4096 = "-----BEGIN PRIVATE KEY-----\n"
396 "MIIJQQIBADANBgkqhkiG9w0BAQEFAASCCSswggknAgEAAoICAQCcPHxt3qx73c4o\n"
397 "KlboXm+L16oC+ahxfpfrCjtF8TgF23+wEyQoSLMwz0EFlpwEMVfkKcTNl66Pwgtg\n"
398 "mXHb2OS5Daex4bnqdr9gsJ954cAzi0cRzdZGEzwY54ytrWZwjjCpLyFsC8UnCufY\n"
399 "SPkUP9TMLKXi8wTc1/yOBDe2GawM4uICAufR2HwcpCCr/ICGrfdtq35ytuGZq4GH\n"
400 "L2Yj7WIuI3RJdfYl6jqBS42wrA8ittMVNiPZS7G9crwy9jP2MpUZ8pjm5rbzJYME\n"
401 "yRLjmoA7YvUVXd4IWRvwSJkxJFnx+pzEYPx1HcB7JNtvqdqC5Vd97fqrD4tU6exA\n"
402 "42SCYWLppIh+52EA9/Cj0SRunc/pjmlZAHr/xTWpQZw68trZhnUNJDhdtF9h/rFc\n"
403 "vd1D8wDWz2oSsQGSqm6SPX/XfCNQpVftWk9EKDR5hIpmmuhwZDaateMD6tv2RpaZ\n"
404 "bNM6qhszHGTke2y3FMb4jQ+LAw7vZnZURKyqQZ5deuTa25H/esZsjEylQBL93ywc\n"
405 "pQcYREGnJ6WIauKf5B5s25TV5/pZSnUhdAwuDfHcw0u86FcDASE+O1gVTZEc5Nyb\n"
406 "JzERp21PopAgFCGQTZWvlEXYL0LW+TeEFSWFYsAAKRBZe8s2KyO4yqnhFiFRV1Z9\n"
407 "mlCfz48JcWRTpo9o7tBlr67UNMXpYwIDAQABAoICABNlTu0036Tg/F7wIqnmT2LE\n"
408 "+04zQD4WwTVkp8cfEx1nCosJVUvK+rPsht3yvJuopIimxs/fLMScCl2Lrx7j5kEy\n"
409 "+MaUh0gcRdXzF1lCNWIwwDntm9RHPwa4eDZ3eGgwvsnCGBwZufgG2pF3PbTN19Uh\n"
410 "Fdb+5HOmPKxEycXJmhpfcD9frPfYMFA97/BqAGq33ie3SpNjMM6rBAGMWNnM9otT\n"
411 "y3PzOQOr+GdkwcpVEev1Vm8jsX+gbghe3g5Vkk3WKbx26ZSAv+WfmoxVigrHe3Pj\n"
412 "7Rkh9haDOXyzBpGbOa9YtW2LvMutTd/7y2Ipa/8kCaCQkrX50ApSoAnOMQQeovC8\n"
413 "2/qTZp0DEyVrpA7MdMiWp2wjfUEmYh0WPjurTOrq2ZEe91XDaVg7Guav+uk/NtE+\n"
414 "GrRiCeVGrRi/+hY8SJT6LoF9YtTnJ8Eq2mUkpfl+oLmt30k9Y43UsOozbXVhvO4Q\n"
415 "E2tjA3zJ0OhENA4D6c5GLN6sBtIJWRGIH2TCkjyffy4EgJH+QOCk7DLZ1bGaeVKZ\n"
416 "ZJSie6CqcGeJK4bN4MxQlQAXM6pWcZHolfjwVl02vy+Pj35nwGEPh7Z/Z8fDlJBD\n"
417 "oudhZctdTj0cAhC04p+u4cJ+xy/GMprrIxjLDPy8cBzjLzy7KMWRdrdnbVchL7K/\n"
418 "86OlZhlSYHWdMLpGS/OBAoIBAQDJm7V2KYE19f5Vvy7+H+6DUlzDMhAyhJk3x17j\n"
419 "GkLP9uBT9LmH22LkJ5r9fEzlYPH97++Ap6E1maCh/JC4ol610xXDm8zSYEpDwyca\n"
420 "pMD4Z9yu914m8FkeQCbtGNjlPL0YSS40TS9dqkwEv+jqMiTk6nAwoJuWA5hWkKFd\n"
421 "Avexw6yQ9zc83r/8psk1bQ12gqOLwLpfNpaAIB3GHj0Be511bXtIdSnDCJyjfkq6\n"
422 "EzuGJtNlSYbotUafMg2H/ZDlFSw2ftYWBNYqK4pXo2MLZrC2gjroAupG+JJgq4rr\n"
423 "8sKAyBuXjswDeyBmNBCLBH7oyVnW9loH8u/KKGVioAq3muybAoIBAQDGYx0IdqsA\n"
424 "Ji2ze5MtzAO+0Wwp28t2ZW/uyvt6dqOO1OTN/AD48OCBZLKOvU7WPnapVE0TtZdS\n"
425 "hevo9BqDGbMrkhFcq1bM/3hr9lHoIIC1PX1hAZM+GxZ6sJkglpyya66/V4M6UiHa\n"
426 "bOhH/H7bcr9uURZk7aj4SB11Wp2eDiy7zTYstyUM7kxNWYicZBDW975M4RdTZ3g1\n"
427 "ZDGVPbWNZf7/h4CIGt64SWWQEt97D8AFCNGT4lE/5N+Wsiq5Lr8UhVO/CSOYgYRs\n"
428 "nWul4T1KhSl8Topa5TtJA44S9y9H7Fgu3LSBg0wf0TZo0ZiqdbU2GeN3/pnu2vCy\n"
429 "ETiCORfOBq7ZAoIBABgX25+7Zg2k0Dg/GMaV2lMnTJ6nJPhkkEryMIzDXqirwDNI\n"
430 "U8PAnBjYAtW4PRhMdZ77RYwCfGmDaobxP/pQrTDdgQRXYiriBv4CHHI6rjUBdIYU\n"
431 "WdQddQkAcaZ0Cbebgp2cYUEu2DJBX8RRiuwyAea5fZ7SEsXiuBngPuh2qlM8JytL\n"
432 "3/YOSLNQ20rfNXSsOA9DgQJP67x0GhrLEk9TDoYyB0GpfswoA1Amj5edJMfra+f2\n"
433 "2YCF6WKtAKD31JEL7rS0g7Et8sonWekPRY7fPs8Q0SlY79Z7bkLPPVLlOAlb4LBE\n"
434 "CG2CEWUlY7S5XNFE/s+JsUix56YpHbSjm6RFh3ECggEAP6BsIFnG8E5OXAEnLAoB\n"
435 "rYKHOUmYEMnpw2FwlE9Wl6mqFHJdcXn31ygPqH4IuefgsOArtEWKWdo/1j/r/N4S\n"
436 "O8gmL114gljxK1cd3+AEx5wICUOzELkpVYIsKmqDqSmmKxILMXpEB0TknqnZmdJM\n"
437 "mToCf65FghPG9utwH9AWAsmHNYIrrOEEsc4kZVwmlntwmkGa9JH72MvgpyfagZYT\n"
438 "2aqAy6Yqhlpr63BSIqrjf/nbFZ4BRwfFuhQ8ZZYbjJ5SRLPOqcvoR9mZO+Nof+0D\n"
439 "aC3ca9iXUgyE1YpXrK6dfbIlZmBQ2ueDlsyaNRl5W/ejn8mVXyjzB3lEcWeUPeyg\n"
440 "yQKCAQApBXnLBEourzuYqcztKh3q9N4Mrc5Aom7nblPnuhv0RGG1hr1VtWp8haFB\n"
441 "MdMA45OYGot/RHtwI/Eb0KwsBKvlVRGovGZ8OFB+YvsfSne7C/6g/p+Go8CmTMkb\n"
442 "/lfNRMeuJOXwI0xeyydH77RBtcQrt/wXgn/CvT/DFMdOcsXx341c7JghXSvVfuCH\n"
443 "M+ZbpEbEpfEs8EqIH2RWaaP+7Dr/NqUwcpA0L74yppCA7qrj9GGWto+eld+Hkur4\n"
444 "DJJVhUKLHZN1Hhnc19mpASrVHuz9nXV4JWrhcvpUifPKqwrhPHrhCeGOpj15+buP\n"
445 "DFs3kWif9rJG2ygqNdHpa2gQIX3c\n"
446 "-----END PRIVATE KEY-----\n";
447
448 static string g_testPubkeyPkcs1Str4096 = "-----BEGIN RSA PUBLIC KEY-----\n"
449 "MIICCgKCAgEAnDx8bd6se93OKCpW6F5vi9eqAvmocX6X6wo7RfE4Bdt/sBMkKEiz\n"
450 "MM9BBZacBDFX5CnEzZeuj8ILYJlx29jkuQ2nseG56na/YLCfeeHAM4tHEc3WRhM8\n"
451 "GOeMra1mcI4wqS8hbAvFJwrn2Ej5FD/UzCyl4vME3Nf8jgQ3thmsDOLiAgLn0dh8\n"
452 "HKQgq/yAhq33bat+crbhmauBhy9mI+1iLiN0SXX2Jeo6gUuNsKwPIrbTFTYj2Uux\n"
453 "vXK8MvYz9jKVGfKY5ua28yWDBMkS45qAO2L1FV3eCFkb8EiZMSRZ8fqcxGD8dR3A\n"
454 "eyTbb6naguVXfe36qw+LVOnsQONkgmFi6aSIfudhAPfwo9Ekbp3P6Y5pWQB6/8U1\n"
455 "qUGcOvLa2YZ1DSQ4XbRfYf6xXL3dQ/MA1s9qErEBkqpukj1/13wjUKVX7VpPRCg0\n"
456 "eYSKZprocGQ2mrXjA+rb9kaWmWzTOqobMxxk5HtstxTG+I0PiwMO72Z2VESsqkGe\n"
457 "XXrk2tuR/3rGbIxMpUAS/d8sHKUHGERBpyeliGrin+QebNuU1ef6WUp1IXQMLg3x\n"
458 "3MNLvOhXAwEhPjtYFU2RHOTcmycxEadtT6KQIBQhkE2Vr5RF2C9C1vk3hBUlhWLA\n"
459 "ACkQWXvLNisjuMqp4RYhUVdWfZpQn8+PCXFkU6aPaO7QZa+u1DTF6WMCAwEAAQ==\n"
460 "-----END RSA PUBLIC KEY-----\n";
461
462 static string g_testPubkeyX509Str4096 = "-----BEGIN PUBLIC KEY-----\n"
463 "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnDx8bd6se93OKCpW6F5v\n"
464 "i9eqAvmocX6X6wo7RfE4Bdt/sBMkKEizMM9BBZacBDFX5CnEzZeuj8ILYJlx29jk\n"
465 "uQ2nseG56na/YLCfeeHAM4tHEc3WRhM8GOeMra1mcI4wqS8hbAvFJwrn2Ej5FD/U\n"
466 "zCyl4vME3Nf8jgQ3thmsDOLiAgLn0dh8HKQgq/yAhq33bat+crbhmauBhy9mI+1i\n"
467 "LiN0SXX2Jeo6gUuNsKwPIrbTFTYj2UuxvXK8MvYz9jKVGfKY5ua28yWDBMkS45qA\n"
468 "O2L1FV3eCFkb8EiZMSRZ8fqcxGD8dR3AeyTbb6naguVXfe36qw+LVOnsQONkgmFi\n"
469 "6aSIfudhAPfwo9Ekbp3P6Y5pWQB6/8U1qUGcOvLa2YZ1DSQ4XbRfYf6xXL3dQ/MA\n"
470 "1s9qErEBkqpukj1/13wjUKVX7VpPRCg0eYSKZprocGQ2mrXjA+rb9kaWmWzTOqob\n"
471 "Mxxk5HtstxTG+I0PiwMO72Z2VESsqkGeXXrk2tuR/3rGbIxMpUAS/d8sHKUHGERB\n"
472 "pyeliGrin+QebNuU1ef6WUp1IXQMLg3x3MNLvOhXAwEhPjtYFU2RHOTcmycxEadt\n"
473 "T6KQIBQhkE2Vr5RF2C9C1vk3hBUlhWLAACkQWXvLNisjuMqp4RYhUVdWfZpQn8+P\n"
474 "CXFkU6aPaO7QZa+u1DTF6WMCAwEAAQ==\n"
475 "-----END PUBLIC KEY-----\n";
476
477 static string g_testPrikeyPkcs1Str8192 = "-----BEGIN RSA PRIVATE KEY-----\n"
478 "MIISKwIBAAKCBAEAzZanvEfcwMNZiE4KToPs3w2XkUzQGZZvV9jPrr83JG0rE9F1\n"
479 "JpGpbF9y8k8AcE+PEIbyYsvRP4D4fr3JWvieN/PI8hgx+XxkhBHTnJ6GyUKSHKt0\n"
480 "d8ggYv4WYlznQhvqR3cib6I7JRfOR+CxoeuvO8mhZPsOUdq6JVhiaMwhAeNK8nbS\n"
481 "0CuGIqNXEdkCBL+yN820IT/hO0AYaIupoz6VMTQ1/3gv3nXdJUaBIlqDaoXlw70k\n"
482 "VSWXLlW6XBBG3HS7TWuu9V2oOQ8yHHviIuKYXW9vNZQoVcrRzc65UjjSkenAnVrf\n"
483 "UvoLVpQQY/2aE3MTFVxiKS9mHLXuN/KffMkgWRJ4T05tDBAFtKVmbNUYC6WMIk+z\n"
484 "m0Uq3cE4D3CTKTXAsjOcL11r44aJuAUp1hpMdawGNhigejKJIRA3zkBbv8/h+oEP\n"
485 "Mw8sqkooIgDSqM2axUzlRm35fiejX2EwEtnS8JK5BFBfS7GEyDWDgL+04qZ3KH4c\n"
486 "SBxmpxLFTDUiGGmlviPeveoP8G9lRNJSp3tTsO9PU8/DCyAq73FDZpmU70wkBkaN\n"
487 "wc2IE5z6R4ltwttIH1OXNjsH+kWGu0valHivFyXtE6cDCLSEwj7RG9jqx/LI+lS2\n"
488 "Q0nazZWhK4gqh4cDVUHH5GwtiP47JCCSl+ptvo3w8zN2mupq+Nu+svrtimjK3eof\n"
489 "qSS3l/5biSgQv5dmgg4iVqFl84F2CN+qAkHgppjA26f9PdZjz6G/k3FJvLoZ1uoD\n"
490 "/TVEn1XhaxlcMMcd/x/gW7tlVPlUljr5mKaNdKWmmT5oTGs8hjRyD5LLpv63WEqA\n"
491 "aEj2bHRI/lH+s0GLo1KMz5EDdPkq8NqvKkG3zONZt0bKf/WYWzCWtqvIq1AgaWa9\n"
492 "b84v9vXZIk5RLlOtfPlcAtml7yewUp+HCR5Yea/vn17vkh1R8XWxjb+yJVUCc8ic\n"
493 "FRaY2J8QICV/qDOzneY8m4LFASs4HDKMIz4zagCSFPCEtefO40P+1eBYK4w9RGBs\n"
494 "YnMp62dY5uVoFW6R2NDXpm63kBvjyHEYYNt3RunSmEhugCIuoPgdW07XRRQU7cuD\n"
495 "shdEIj062dSRsVH4vpVuOIE2o0peyZjJ5Pomdv5rcu48mWrSgamMccxz03fFQ9c6\n"
496 "RMCqiD0EXA070i4hXUYm5cQCLMqb5VIzoczoraTrnodf6Kl6pJvuYutmXwcRiXYJ\n"
497 "Ac8WpwL+c15XkSUfedNMWucH9dcSlsL1JqmYlM8cv+gJenr83Wko2bd3GR4/2sNG\n"
498 "RKG6fRinJlUrtTp9X43G6nKcl346CblZYCQ6qK4YA7u+Mn4+CRwiB82KlhLNXLVN\n"
499 "xu9fs3yyBAlRQqDprka8egFTd9zU/b4QNjuUbQIDAQABAoIEAQCmxX59ymG18QHx\n"
500 "AzVzKat96X25PXFWQGVEArm+TJkDsJcQNYpt5h1kry0EiLeXY8JvKrj3EdVFSW7L\n"
501 "CVOMuz9FrjmkwaHQe2rig7+APkyieKEkJqWNAUfcZbdsxWZHh3ON04OYwSZvWZdZ\n"
502 "UVlnO1PkERUeYFXmaqMz5jW2Q1jHOkUy2Nb8TUI7WPspnDr59TMx92kWy8X+lWj3\n"
503 "bcwHg53s0yi2ex2BvWTOdxoL7xbJ06JmHUma1KqFyL8rLXz+GqdSD3dWzUnIN55z\n"
504 "4r63g88LhHjXIr9xkNyOshI9M6EFAnTgcLXWjsWhzuxY4IEbI+8oFc//DtcrlR2Q\n"
505 "Pv3HcTQPbV8xHjJxZZHrT3z97gLad8lsj/DnlL1INBQw2iZWeKc/J4ScG5GIeTvA\n"
506 "jle4uY6qqghD28haOCJrMsfCRQzoVU9AMW9OARI/dXaG1toMWvUg9dbLQizwfGEX\n"
507 "3zPrJs3pn2v8puIW+gL3kgmB6IFolpb0vxBcIsXW4/AueK+W1CTCUEDBGF0jsomY\n"
508 "wXCRMgba8dYM6+2RWd/aaqu9T/qz/7T9bkBSJVMsbdvNKhtixRUFbH6uXEaFa972\n"
509 "knrWk+ucwIRHu+RHLIDBPcnNaDJUTotgHlXX0dJvkOCz+npdhFVc1Ma9ck+h4HHD\n"
510 "RbUFDQNHX8dE0ct1sZFjHIbek5Ub/5/C9osR/w6P2jgYZsMBHH+o/+5eZOLYcHF6\n"
511 "KiRTbWNQFiV+AlnQjzmjOPAky0QrD6788V97AC7UWRs7oCVBhTYt3ChYv0buFOqO\n"
512 "wxLXKMmcyN1LDE0nKEGZHuKnUeIJltlRLvm4fkb42IU6nsFW682/A6ZxEiQX5V9h\n"
513 "Qc3RE9pkEqcK3gM7oDNPw4oJ+zxB6ACHMH0ZA8m7wfBkl1TWti94Tc//Pt4o+OGM\n"
514 "7++UrWteQaVdTAsOAO1WgixvWRHg8cFg1aQFGWg6X/iPEQyoAQu4dkcNb40PKAs1\n"
515 "qBLyr8FqXXWnnlikSm+UGVEBU6mGUn8M6NsRyrPs2hq7hYfge7LTqWtrdK8CFf/w\n"
516 "0ANHQw+zW7QEfc6gXM9IHs2nDORtI/DW6HZQeTz0dFGZY4rN1mJQIg31P5ar5t7F\n"
517 "jbI/jFKMdB7Pw3oRJxA6EZOKPZOR6hb1ywrPnGDxcXiZr/nm1Fc9sFjaYAZQGrSJ\n"
518 "PpQLHVmxTnwBAadaAOgxtzEJWatcSfr5GwMrWmJDRC9JJnxYOt3YX8latqFiC5U6\n"
519 "s+3xjl5CXFi9xmyimlAE7ZnCWlG7JeilGbgMw5WKJIfUWKbK/hupnVHC1Q7O/Y/+\n"
520 "bkw9GzEGQ4X1EhOhLS/cdyyv64D6G1Dlm8JzxyXYHaDF3GrhqMNVYTe4So3PAIpk\n"
521 "tL8PDwE1AoICAQDp/cruR4T2wT/M+dbNhTuYwa+hzSyiK5dR5wZmoBwJ1VA/Bm0T\n"
522 "pkV1rcwnQDhfylK89Tx9fc7+ZwzduX1bzjP9RXctQ4Tg3/wA/ON2bZMO+tInLTWP\n"
523 "3GDnCN6V8jQZUIFAkdQ60ZKLmY4fdsyKGZDqS3Cn2XovNV9vKd3DzpMSz/STjSjK\n"
524 "s7FPbKyn8chb2WJfLe1J6XK3wiPg/vCXFqebhzeGAwcEPUpW+aU1sjGNW2IMhaXv\n"
525 "lDNJPbVjIks7jMKihAKzOSvxGpns8beds7KH89wUGZwnKa4DJxbmRKnZE5vJyM6y\n"
526 "DFXOZ3Vnl56c64b93j9tW2KZkLYkJywkoa+Po9FZGNmOvjjndXqdSSAI/i1UZwV+\n"
527 "Vu2e0/Rax2+qL8Y2Mt4QTTQTeJg5SLZjcMNsSxdqVanoyzTVM3vMAy7NcB8224Sa\n"
528 "UAi8NQJzRBavhsQPAagBWKRVhVtQSyrZdW1pXHGVYyLx25gPtBGvuEiuzKA//aDy\n"
529 "JZDEo4/xZT6/qrvyxCVUH0GvzvhTjj7EYWIP/kcRjBDEtpxTK0kz2U1biE0zJ7jd\n"
530 "V6TvuGXFsb+iy2RMFBZ01gK/yZZdaU6rJUohMHaSRHLyOsVfRxE4zYHDis6MsgYd\n"
531 "LV0lo8NIgXD9e6kmFHhL1VIN5dpFE5y7GCvDlTWq7ZU6X+BpQHBKfij8gwKCAgEA\n"
532 "4Oz1S0uMutbdpSy36jde4vwgCkAaKsVLLR6ekPJf5j+e4LlayodKOtgEQlQZ/9JT\n"
533 "DSLHr2+rVlgRKHXjIUpHZJt3Beyj8ZJeceJr/AYGCn1qiB+yw8hECa3kLytdmhDp\n"
534 "yU+JAQ3SK78f79D+k69oGQkE3wBN+pVf53922Wbzp/98EjnKfYxobLNUi6WWS8a2\n"
535 "Y+tCfyz12NV7aYEKgCsGaR2xzxRO3JP4d3pwAgb9W614YAHCZdxorAhsH8fA8eEW\n"
536 "nPbBWt6FCh8bVi5NFORUxisDyjHdyGRQeZycDoXy9cvtlRmTULibvnjJy08MshE1\n"
537 "yO3U3/IudsR57+e+N3KD84mjAoEybqxBIsQiUw0vUWFU0OaDYIDAap8jXossLm0y\n"
538 "kSLJ/ALzGlSW1Y5C/koHHE2kP7TCkcbvF9Dx/wRrQaO+fQyM1wk93mqTka3ypMuH\n"
539 "9cOqST0NLOeiXdJeR/XlKAmnc1QtAApjIHyvM0BRDw16UD6k2ehT6kMssNBWy1vw\n"
540 "cMa4rwmPH2eWAe0zKB40PaREtUyV+hanv1E8YAnwTXm1LS/21xKAq/Mm3R2OjhpP\n"
541 "OuFCT5GSotJk+hor+YzlZG8cd5Eomk18BGE2GcRHdDmrdcM/D7SC1nI1ckD3V5AW\n"
542 "659V8jbVLMlChKcNIytekwkZ3aLjtii3wGvp4ODzOE8CggIBAKsZa7RFE9MjiDWo\n"
543 "UwvBaszOhFD6KLME0QeQuTt9xELkemM7nbMKmCvuxCPHb/GLjmihonPY9O1OCThw\n"
544 "lFv3Mkj27KhqgNW2sx09zk4g3bHMcrM2+b2SVkFaWPioPLRuC7VdbST9bf0qcaRM\n"
545 "SFCLVU4dj+kMu62dh4VPxduSSDUvXxYt2DAwqWz8eFvuDqYrFSWn/aVYUQxRp860\n"
546 "XNT+Od0eSNlziUPuVVe4ALh87oMA2Xdymt3PLplVyDcPMpf+26vef+Lx4VHSM8/x\n"
547 "CGUGq3uCM+F2wJpafeXMRZBnkRMspXQtpAbJwkzFljIDynXQO8uTIioi8rx79tQE\n"
548 "2OCIYknUbhaKdztLmWyWmOw+NnCc/CSFmJzDj8neDwX6Y4q8mGG1XG/rJDNAsX7h\n"
549 "zox0PlIHrr2Qmkehn6ZumQ2bHjQW0pxYdGQqNdj5oisLFNOQ5fhbK7CgUro+Y4EZ\n"
550 "FeIhXbn3YQ7tiPX1rwF8mJo3VN6MvnlMSs4F7g/70huf/vxEKl7gUrNqj6uw2iCv\n"
551 "GPKciwpK00jfdLuDFFg0hLinI0vVJS5M0372waKQ4cpnqUuvEk4XOjyA6U24aH0x\n"
552 "rdaz07rlJy7ZYnwBwaVj4BH7I/IKo/J5ksLvEvedAgUYsbiJHiy8NyKsf+2tr6dn\n"
553 "KeodSJMhnja4t7ARv5T3C6VND0dlAoICAQDFHMPmZWICBvScoPDX8AhWkS8e7IhB\n"
554 "/T5hXxkE23NRW2XHeIhpPmC96rroyb0zJMWlmFo4k3sqouj+dTlD3k1sjJWk+nm9\n"
555 "5VChKxUI+tpmbPxkKKtHygReGycCc1WHA9VtlybwZoVN0yOQza2cDTcD4ZSEPUcZ\n"
556 "F7jBLkIgSYm0K0A21LBwkBCfWhT4gHeTFqSWMgDHZMZabNPHZM+n/IyUp/JAEIL/\n"
557 "6Sjww7rO/AMiSYZZVJFhJOQSBxuCSlL7Zg+kJNbT5Hfgo9wYDWF9so/cTqv2kPbU\n"
558 "e5zOxoE4dQizgTBG3u/r6KyMIlxtsGvmzRA+craAP0Oaz5owtP1MqC2cynyxYDmr\n"
559 "JYe7iPivobla7xoeLDTr6Ek35xhe7UYdtZKAAGXUVV1oMMMyiYaKRKOwmRYcwjNU\n"
560 "/2pei7zXiK7aCj6QZeQzOqUeenWyUCd5ZehTZ1Ke9kLKnH/9CrOXCpX1HWjCt/zr\n"
561 "sS6ntLzxBCdFMsGC+zMKyABqJs5OcXXupzayDmSg+JaVpfie3ZlcSgPsFT4lR+WT\n"
562 "EjGVhwKLA4q0yrkMzaDbYBqlFeR0GEfqnoHajrfG9UL1L75QM4lgG6qX9ouS+QIF\n"
563 "H2xUhkCcGheocjWhcSadg8q5VcMiym44LUz41lzCdG0i34lMqPzpWkN6RZqGUg6O\n"
564 "f2Zw2eFPMrPTHwKCAgEA0vyJR+nzWV6PsU6A60qqEahhV7E5R3m6K3Ri7HRZT955\n"
565 "YAC0iIm+er1DdP3VVYjLG9lCZEEfLnDIRMzwCVwY4nC8rF1T3DY6xflT4lM5d74P\n"
566 "vvAUETff4nO1EcmraAx5NhieHLMKDNq7KGkh0kMkmTCgfzFqgg299WzlDsyHBRL4\n"
567 "BJrYKxslyp/eTvlVCzZ+poD1XrXuQl970ta4bwrypMMNdAcJh8lLrx3Lj0cBd2rg\n"
568 "bPov25f0UuWeeieO6es/dTv6WmXVwI+LZSS3/NbwJlOr1rR4yttvZr35B2P9FFQC\n"
569 "uOtgt3LCCwKkLcvg4RhtNaCACq6ZlQjws61Kfu4RzWJyY7bdytaLPsIxeXAsORa4\n"
570 "UGqfoERl1SVMRbI/peh7W1Hcodfq6Ut5HyOaoQWpeqEw9o3jdjOjVgH7qOZKAsz+\n"
571 "+GgxxpmgLPpEskXuAqt2ERXN7PvrnOYfusYxWxw5gM6KLeiJJKMv+zUyfUSoAhkx\n"
572 "eyUvjW3+8NIKSNzxHO93i+9SaIyfgTBuv52FSdl+ts8JqL4jHWBLYSQDutOVC/4S\n"
573 "Hk24SPOtOUyKA5gP7OLTBo0BoAJUduQGOJLLKKRPink/UoUjRD0uh1BwhQpaQX6+\n"
574 "iWRPEvsEAOCwMeKvTpVxvad6qzRehRUtSL0SYl66g+wHzHCP6oW+80HvDn6tYmw=\n"
575 "-----END RSA PRIVATE KEY-----\n";
576
577 static string g_testPrikeyPkcs8Str8192 = "-----BEGIN PRIVATE KEY-----\n"
578 "MIISRQIBADANBgkqhkiG9w0BAQEFAASCEi8wghIrAgEAAoIEAQDNlqe8R9zAw1mI\n"
579 "TgpOg+zfDZeRTNAZlm9X2M+uvzckbSsT0XUmkalsX3LyTwBwT48QhvJiy9E/gPh+\n"
580 "vcla+J4388jyGDH5fGSEEdOcnobJQpIcq3R3yCBi/hZiXOdCG+pHdyJvojslF85H\n"
581 "4LGh6687yaFk+w5R2rolWGJozCEB40rydtLQK4Yio1cR2QIEv7I3zbQhP+E7QBho\n"
582 "i6mjPpUxNDX/eC/edd0lRoEiWoNqheXDvSRVJZcuVbpcEEbcdLtNa671Xag5DzIc\n"
583 "e+Ii4phdb281lChVytHNzrlSONKR6cCdWt9S+gtWlBBj/ZoTcxMVXGIpL2Ycte43\n"
584 "8p98ySBZEnhPTm0MEAW0pWZs1RgLpYwiT7ObRSrdwTgPcJMpNcCyM5wvXWvjhom4\n"
585 "BSnWGkx1rAY2GKB6MokhEDfOQFu/z+H6gQ8zDyyqSigiANKozZrFTOVGbfl+J6Nf\n"
586 "YTAS2dLwkrkEUF9LsYTINYOAv7TipncofhxIHGanEsVMNSIYaaW+I9696g/wb2VE\n"
587 "0lKne1Ow709Tz8MLICrvcUNmmZTvTCQGRo3BzYgTnPpHiW3C20gfU5c2Owf6RYa7\n"
588 "S9qUeK8XJe0TpwMItITCPtEb2OrH8sj6VLZDSdrNlaEriCqHhwNVQcfkbC2I/jsk\n"
589 "IJKX6m2+jfDzM3aa6mr4276y+u2KaMrd6h+pJLeX/luJKBC/l2aCDiJWoWXzgXYI\n"
590 "36oCQeCmmMDbp/091mPPob+TcUm8uhnW6gP9NUSfVeFrGVwwxx3/H+Bbu2VU+VSW\n"
591 "OvmYpo10paaZPmhMazyGNHIPksum/rdYSoBoSPZsdEj+Uf6zQYujUozPkQN0+Srw\n"
592 "2q8qQbfM41m3Rsp/9ZhbMJa2q8irUCBpZr1vzi/29dkiTlEuU618+VwC2aXvJ7BS\n"
593 "n4cJHlh5r++fXu+SHVHxdbGNv7IlVQJzyJwVFpjYnxAgJX+oM7Od5jybgsUBKzgc\n"
594 "MowjPjNqAJIU8IS1587jQ/7V4FgrjD1EYGxicynrZ1jm5WgVbpHY0NembreQG+PI\n"
595 "cRhg23dG6dKYSG6AIi6g+B1bTtdFFBTty4OyF0QiPTrZ1JGxUfi+lW44gTajSl7J\n"
596 "mMnk+iZ2/mty7jyZatKBqYxxzHPTd8VD1zpEwKqIPQRcDTvSLiFdRiblxAIsypvl\n"
597 "UjOhzOitpOueh1/oqXqkm+5i62ZfBxGJdgkBzxanAv5zXleRJR9500xa5wf11xKW\n"
598 "wvUmqZiUzxy/6Al6evzdaSjZt3cZHj/aw0ZEobp9GKcmVSu1On1fjcbqcpyXfjoJ\n"
599 "uVlgJDqorhgDu74yfj4JHCIHzYqWEs1ctU3G71+zfLIECVFCoOmuRrx6AVN33NT9\n"
600 "vhA2O5RtAgMBAAECggQBAKbFfn3KYbXxAfEDNXMpq33pfbk9cVZAZUQCub5MmQOw\n"
601 "lxA1im3mHWSvLQSIt5djwm8quPcR1UVJbssJU4y7P0WuOaTBodB7auKDv4A+TKJ4\n"
602 "oSQmpY0BR9xlt2zFZkeHc43Tg5jBJm9Zl1lRWWc7U+QRFR5gVeZqozPmNbZDWMc6\n"
603 "RTLY1vxNQjtY+ymcOvn1MzH3aRbLxf6VaPdtzAeDnezTKLZ7HYG9ZM53GgvvFsnT\n"
604 "omYdSZrUqoXIvystfP4ap1IPd1bNScg3nnPivreDzwuEeNciv3GQ3I6yEj0zoQUC\n"
605 "dOBwtdaOxaHO7FjggRsj7ygVz/8O1yuVHZA+/cdxNA9tXzEeMnFlketPfP3uAtp3\n"
606 "yWyP8OeUvUg0FDDaJlZ4pz8nhJwbkYh5O8COV7i5jqqqCEPbyFo4Imsyx8JFDOhV\n"
607 "T0Axb04BEj91dobW2gxa9SD11stCLPB8YRffM+smzemfa/ym4hb6AveSCYHogWiW\n"
608 "lvS/EFwixdbj8C54r5bUJMJQQMEYXSOyiZjBcJEyBtrx1gzr7ZFZ39pqq71P+rP/\n"
609 "tP1uQFIlUyxt280qG2LFFQVsfq5cRoVr3vaSetaT65zAhEe75EcsgME9yc1oMlRO\n"
610 "i2AeVdfR0m+Q4LP6el2EVVzUxr1yT6HgccNFtQUNA0dfx0TRy3WxkWMcht6TlRv/\n"
611 "n8L2ixH/Do/aOBhmwwEcf6j/7l5k4thwcXoqJFNtY1AWJX4CWdCPOaM48CTLRCsP\n"
612 "rvzxX3sALtRZGzugJUGFNi3cKFi/Ru4U6o7DEtcoyZzI3UsMTScoQZke4qdR4gmW\n"
613 "2VEu+bh+RvjYhTqewVbrzb8DpnESJBflX2FBzdET2mQSpwreAzugM0/Dign7PEHo\n"
614 "AIcwfRkDybvB8GSXVNa2L3hNz/8+3ij44Yzv75Sta15BpV1MCw4A7VaCLG9ZEeDx\n"
615 "wWDVpAUZaDpf+I8RDKgBC7h2Rw1vjQ8oCzWoEvKvwWpddaeeWKRKb5QZUQFTqYZS\n"
616 "fwzo2xHKs+zaGruFh+B7stOpa2t0rwIV//DQA0dDD7NbtAR9zqBcz0gezacM5G0j\n"
617 "8NbodlB5PPR0UZljis3WYlAiDfU/lqvm3sWNsj+MUox0Hs/DehEnEDoRk4o9k5Hq\n"
618 "FvXLCs+cYPFxeJmv+ebUVz2wWNpgBlAatIk+lAsdWbFOfAEBp1oA6DG3MQlZq1xJ\n"
619 "+vkbAytaYkNEL0kmfFg63dhfyVq2oWILlTqz7fGOXkJcWL3GbKKaUATtmcJaUbsl\n"
620 "6KUZuAzDlYokh9RYpsr+G6mdUcLVDs79j/5uTD0bMQZDhfUSE6EtL9x3LK/rgPob\n"
621 "UOWbwnPHJdgdoMXcauGow1VhN7hKjc8AimS0vw8PATUCggIBAOn9yu5HhPbBP8z5\n"
622 "1s2FO5jBr6HNLKIrl1HnBmagHAnVUD8GbROmRXWtzCdAOF/KUrz1PH19zv5nDN25\n"
623 "fVvOM/1Fdy1DhODf/AD843Ztkw760ictNY/cYOcI3pXyNBlQgUCR1DrRkouZjh92\n"
624 "zIoZkOpLcKfZei81X28p3cPOkxLP9JONKMqzsU9srKfxyFvZYl8t7UnpcrfCI+D+\n"
625 "8JcWp5uHN4YDBwQ9Slb5pTWyMY1bYgyFpe+UM0k9tWMiSzuMwqKEArM5K/Eamezx\n"
626 "t52zsofz3BQZnCcprgMnFuZEqdkTm8nIzrIMVc5ndWeXnpzrhv3eP21bYpmQtiQn\n"
627 "LCShr4+j0VkY2Y6+OOd1ep1JIAj+LVRnBX5W7Z7T9FrHb6ovxjYy3hBNNBN4mDlI\n"
628 "tmNww2xLF2pVqejLNNUze8wDLs1wHzbbhJpQCLw1AnNEFq+GxA8BqAFYpFWFW1BL\n"
629 "Ktl1bWlccZVjIvHbmA+0Ea+4SK7MoD/9oPIlkMSjj/FlPr+qu/LEJVQfQa/O+FOO\n"
630 "PsRhYg/+RxGMEMS2nFMrSTPZTVuITTMnuN1XpO+4ZcWxv6LLZEwUFnTWAr/Jll1p\n"
631 "TqslSiEwdpJEcvI6xV9HETjNgcOKzoyyBh0tXSWjw0iBcP17qSYUeEvVUg3l2kUT\n"
632 "nLsYK8OVNartlTpf4GlAcEp+KPyDAoICAQDg7PVLS4y61t2lLLfqN17i/CAKQBoq\n"
633 "xUstHp6Q8l/mP57guVrKh0o62ARCVBn/0lMNIsevb6tWWBEodeMhSkdkm3cF7KPx\n"
634 "kl5x4mv8BgYKfWqIH7LDyEQJreQvK12aEOnJT4kBDdIrvx/v0P6Tr2gZCQTfAE36\n"
635 "lV/nf3bZZvOn/3wSOcp9jGhss1SLpZZLxrZj60J/LPXY1XtpgQqAKwZpHbHPFE7c\n"
636 "k/h3enACBv1brXhgAcJl3GisCGwfx8Dx4Rac9sFa3oUKHxtWLk0U5FTGKwPKMd3I\n"
637 "ZFB5nJwOhfL1y+2VGZNQuJu+eMnLTwyyETXI7dTf8i52xHnv5743coPziaMCgTJu\n"
638 "rEEixCJTDS9RYVTQ5oNggMBqnyNeiywubTKRIsn8AvMaVJbVjkL+SgccTaQ/tMKR\n"
639 "xu8X0PH/BGtBo759DIzXCT3eapORrfKky4f1w6pJPQ0s56Jd0l5H9eUoCadzVC0A\n"
640 "CmMgfK8zQFEPDXpQPqTZ6FPqQyyw0FbLW/BwxrivCY8fZ5YB7TMoHjQ9pES1TJX6\n"
641 "Fqe/UTxgCfBNebUtL/bXEoCr8ybdHY6OGk864UJPkZKi0mT6Giv5jOVkbxx3kSia\n"
642 "TXwEYTYZxEd0Oat1wz8PtILWcjVyQPdXkBbrn1XyNtUsyUKEpw0jK16TCRndouO2\n"
643 "KLfAa+ng4PM4TwKCAgEAqxlrtEUT0yOINahTC8FqzM6EUPooswTRB5C5O33EQuR6\n"
644 "YzudswqYK+7EI8dv8YuOaKGic9j07U4JOHCUW/cySPbsqGqA1bazHT3OTiDdscxy\n"
645 "szb5vZJWQVpY+Kg8tG4LtV1tJP1t/SpxpExIUItVTh2P6Qy7rZ2HhU/F25JINS9f\n"
646 "Fi3YMDCpbPx4W+4OpisVJaf9pVhRDFGnzrRc1P453R5I2XOJQ+5VV7gAuHzugwDZ\n"
647 "d3Ka3c8umVXINw8yl/7bq95/4vHhUdIzz/EIZQare4Iz4XbAmlp95cxFkGeREyyl\n"
648 "dC2kBsnCTMWWMgPKddA7y5MiKiLyvHv21ATY4IhiSdRuFop3O0uZbJaY7D42cJz8\n"
649 "JIWYnMOPyd4PBfpjiryYYbVcb+skM0CxfuHOjHQ+UgeuvZCaR6Gfpm6ZDZseNBbS\n"
650 "nFh0ZCo12PmiKwsU05Dl+FsrsKBSuj5jgRkV4iFdufdhDu2I9fWvAXyYmjdU3oy+\n"
651 "eUxKzgXuD/vSG5/+/EQqXuBSs2qPq7DaIK8Y8pyLCkrTSN90u4MUWDSEuKcjS9Ul\n"
652 "LkzTfvbBopDhymepS68SThc6PIDpTbhofTGt1rPTuuUnLtlifAHBpWPgEfsj8gqj\n"
653 "8nmSwu8S950CBRixuIkeLLw3Iqx/7a2vp2cp6h1IkyGeNri3sBG/lPcLpU0PR2UC\n"
654 "ggIBAMUcw+ZlYgIG9Jyg8NfwCFaRLx7siEH9PmFfGQTbc1FbZcd4iGk+YL3quujJ\n"
655 "vTMkxaWYWjiTeyqi6P51OUPeTWyMlaT6eb3lUKErFQj62mZs/GQoq0fKBF4bJwJz\n"
656 "VYcD1W2XJvBmhU3TI5DNrZwNNwPhlIQ9RxkXuMEuQiBJibQrQDbUsHCQEJ9aFPiA\n"
657 "d5MWpJYyAMdkxlps08dkz6f8jJSn8kAQgv/pKPDDus78AyJJhllUkWEk5BIHG4JK\n"
658 "UvtmD6Qk1tPkd+Cj3BgNYX2yj9xOq/aQ9tR7nM7GgTh1CLOBMEbe7+vorIwiXG2w\n"
659 "a+bNED5ytoA/Q5rPmjC0/UyoLZzKfLFgOaslh7uI+K+huVrvGh4sNOvoSTfnGF7t\n"
660 "Rh21koAAZdRVXWgwwzKJhopEo7CZFhzCM1T/al6LvNeIrtoKPpBl5DM6pR56dbJQ\n"
661 "J3ll6FNnUp72Qsqcf/0Ks5cKlfUdaMK3/OuxLqe0vPEEJ0UywYL7MwrIAGomzk5x\n"
662 "de6nNrIOZKD4lpWl+J7dmVxKA+wVPiVH5ZMSMZWHAosDirTKuQzNoNtgGqUV5HQY\n"
663 "R+qegdqOt8b1QvUvvlAziWAbqpf2i5L5AgUfbFSGQJwaF6hyNaFxJp2DyrlVwyLK\n"
664 "bjgtTPjWXMJ0bSLfiUyo/OlaQ3pFmoZSDo5/ZnDZ4U8ys9MfAoICAQDS/IlH6fNZ\n"
665 "Xo+xToDrSqoRqGFXsTlHebordGLsdFlP3nlgALSIib56vUN0/dVViMsb2UJkQR8u\n"
666 "cMhEzPAJXBjicLysXVPcNjrF+VPiUzl3vg++8BQRN9/ic7URyatoDHk2GJ4cswoM\n"
667 "2rsoaSHSQySZMKB/MWqCDb31bOUOzIcFEvgEmtgrGyXKn95O+VULNn6mgPVete5C\n"
668 "X3vS1rhvCvKkww10BwmHyUuvHcuPRwF3auBs+i/bl/RS5Z56J47p6z91O/paZdXA\n"
669 "j4tlJLf81vAmU6vWtHjK229mvfkHY/0UVAK462C3csILAqQty+DhGG01oIAKrpmV\n"
670 "CPCzrUp+7hHNYnJjtt3K1os+wjF5cCw5FrhQap+gRGXVJUxFsj+l6HtbUdyh1+rp\n"
671 "S3kfI5qhBal6oTD2jeN2M6NWAfuo5koCzP74aDHGmaAs+kSyRe4Cq3YRFc3s++uc\n"
672 "5h+6xjFbHDmAzoot6Ikkoy/7NTJ9RKgCGTF7JS+Nbf7w0gpI3PEc73eL71JojJ+B\n"
673 "MG6/nYVJ2X62zwmoviMdYEthJAO605UL/hIeTbhI8605TIoDmA/s4tMGjQGgAlR2\n"
674 "5AY4kssopE+KeT9ShSNEPS6HUHCFClpBfr6JZE8S+wQA4LAx4q9OlXG9p3qrNF6F\n"
675 "FS1IvRJiXrqD7AfMcI/qhb7zQe8Ofq1ibA==\n"
676 "-----END PRIVATE KEY-----\n";
677
678 static string g_testPubkeyPkcs1Str8192 = "-----BEGIN RSA PUBLIC KEY-----\n"
679 "MIIECgKCBAEAzZanvEfcwMNZiE4KToPs3w2XkUzQGZZvV9jPrr83JG0rE9F1JpGp\n"
680 "bF9y8k8AcE+PEIbyYsvRP4D4fr3JWvieN/PI8hgx+XxkhBHTnJ6GyUKSHKt0d8gg\n"
681 "Yv4WYlznQhvqR3cib6I7JRfOR+CxoeuvO8mhZPsOUdq6JVhiaMwhAeNK8nbS0CuG\n"
682 "IqNXEdkCBL+yN820IT/hO0AYaIupoz6VMTQ1/3gv3nXdJUaBIlqDaoXlw70kVSWX\n"
683 "LlW6XBBG3HS7TWuu9V2oOQ8yHHviIuKYXW9vNZQoVcrRzc65UjjSkenAnVrfUvoL\n"
684 "VpQQY/2aE3MTFVxiKS9mHLXuN/KffMkgWRJ4T05tDBAFtKVmbNUYC6WMIk+zm0Uq\n"
685 "3cE4D3CTKTXAsjOcL11r44aJuAUp1hpMdawGNhigejKJIRA3zkBbv8/h+oEPMw8s\n"
686 "qkooIgDSqM2axUzlRm35fiejX2EwEtnS8JK5BFBfS7GEyDWDgL+04qZ3KH4cSBxm\n"
687 "pxLFTDUiGGmlviPeveoP8G9lRNJSp3tTsO9PU8/DCyAq73FDZpmU70wkBkaNwc2I\n"
688 "E5z6R4ltwttIH1OXNjsH+kWGu0valHivFyXtE6cDCLSEwj7RG9jqx/LI+lS2Q0na\n"
689 "zZWhK4gqh4cDVUHH5GwtiP47JCCSl+ptvo3w8zN2mupq+Nu+svrtimjK3eofqSS3\n"
690 "l/5biSgQv5dmgg4iVqFl84F2CN+qAkHgppjA26f9PdZjz6G/k3FJvLoZ1uoD/TVE\n"
691 "n1XhaxlcMMcd/x/gW7tlVPlUljr5mKaNdKWmmT5oTGs8hjRyD5LLpv63WEqAaEj2\n"
692 "bHRI/lH+s0GLo1KMz5EDdPkq8NqvKkG3zONZt0bKf/WYWzCWtqvIq1AgaWa9b84v\n"
693 "9vXZIk5RLlOtfPlcAtml7yewUp+HCR5Yea/vn17vkh1R8XWxjb+yJVUCc8icFRaY\n"
694 "2J8QICV/qDOzneY8m4LFASs4HDKMIz4zagCSFPCEtefO40P+1eBYK4w9RGBsYnMp\n"
695 "62dY5uVoFW6R2NDXpm63kBvjyHEYYNt3RunSmEhugCIuoPgdW07XRRQU7cuDshdE\n"
696 "Ij062dSRsVH4vpVuOIE2o0peyZjJ5Pomdv5rcu48mWrSgamMccxz03fFQ9c6RMCq\n"
697 "iD0EXA070i4hXUYm5cQCLMqb5VIzoczoraTrnodf6Kl6pJvuYutmXwcRiXYJAc8W\n"
698 "pwL+c15XkSUfedNMWucH9dcSlsL1JqmYlM8cv+gJenr83Wko2bd3GR4/2sNGRKG6\n"
699 "fRinJlUrtTp9X43G6nKcl346CblZYCQ6qK4YA7u+Mn4+CRwiB82KlhLNXLVNxu9f\n"
700 "s3yyBAlRQqDprka8egFTd9zU/b4QNjuUbQIDAQAB\n"
701 "-----END RSA PUBLIC KEY-----\n";
702
703 static string g_testPubkeyX509Str8192 = "-----BEGIN PUBLIC KEY-----\n"
704 "MIIEIjANBgkqhkiG9w0BAQEFAAOCBA8AMIIECgKCBAEAzZanvEfcwMNZiE4KToPs\n"
705 "3w2XkUzQGZZvV9jPrr83JG0rE9F1JpGpbF9y8k8AcE+PEIbyYsvRP4D4fr3JWvie\n"
706 "N/PI8hgx+XxkhBHTnJ6GyUKSHKt0d8ggYv4WYlznQhvqR3cib6I7JRfOR+Cxoeuv\n"
707 "O8mhZPsOUdq6JVhiaMwhAeNK8nbS0CuGIqNXEdkCBL+yN820IT/hO0AYaIupoz6V\n"
708 "MTQ1/3gv3nXdJUaBIlqDaoXlw70kVSWXLlW6XBBG3HS7TWuu9V2oOQ8yHHviIuKY\n"
709 "XW9vNZQoVcrRzc65UjjSkenAnVrfUvoLVpQQY/2aE3MTFVxiKS9mHLXuN/KffMkg\n"
710 "WRJ4T05tDBAFtKVmbNUYC6WMIk+zm0Uq3cE4D3CTKTXAsjOcL11r44aJuAUp1hpM\n"
711 "dawGNhigejKJIRA3zkBbv8/h+oEPMw8sqkooIgDSqM2axUzlRm35fiejX2EwEtnS\n"
712 "8JK5BFBfS7GEyDWDgL+04qZ3KH4cSBxmpxLFTDUiGGmlviPeveoP8G9lRNJSp3tT\n"
713 "sO9PU8/DCyAq73FDZpmU70wkBkaNwc2IE5z6R4ltwttIH1OXNjsH+kWGu0valHiv\n"
714 "FyXtE6cDCLSEwj7RG9jqx/LI+lS2Q0nazZWhK4gqh4cDVUHH5GwtiP47JCCSl+pt\n"
715 "vo3w8zN2mupq+Nu+svrtimjK3eofqSS3l/5biSgQv5dmgg4iVqFl84F2CN+qAkHg\n"
716 "ppjA26f9PdZjz6G/k3FJvLoZ1uoD/TVEn1XhaxlcMMcd/x/gW7tlVPlUljr5mKaN\n"
717 "dKWmmT5oTGs8hjRyD5LLpv63WEqAaEj2bHRI/lH+s0GLo1KMz5EDdPkq8NqvKkG3\n"
718 "zONZt0bKf/WYWzCWtqvIq1AgaWa9b84v9vXZIk5RLlOtfPlcAtml7yewUp+HCR5Y\n"
719 "ea/vn17vkh1R8XWxjb+yJVUCc8icFRaY2J8QICV/qDOzneY8m4LFASs4HDKMIz4z\n"
720 "agCSFPCEtefO40P+1eBYK4w9RGBsYnMp62dY5uVoFW6R2NDXpm63kBvjyHEYYNt3\n"
721 "RunSmEhugCIuoPgdW07XRRQU7cuDshdEIj062dSRsVH4vpVuOIE2o0peyZjJ5Pom\n"
722 "dv5rcu48mWrSgamMccxz03fFQ9c6RMCqiD0EXA070i4hXUYm5cQCLMqb5VIzoczo\n"
723 "raTrnodf6Kl6pJvuYutmXwcRiXYJAc8WpwL+c15XkSUfedNMWucH9dcSlsL1JqmY\n"
724 "lM8cv+gJenr83Wko2bd3GR4/2sNGRKG6fRinJlUrtTp9X43G6nKcl346CblZYCQ6\n"
725 "qK4YA7u+Mn4+CRwiB82KlhLNXLVNxu9fs3yyBAlRQqDprka8egFTd9zU/b4QNjuU\n"
726 "bQIDAQAB\n"
727 "-----END PUBLIC KEY-----\n";
728
729 static string g_testPubkeyEccStr = "-----BEGIN PUBLIC KEY-----\n"
730 "MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEFZ5z0WC0cbwjdJjbHk6MlGTcVphvhNXf\n"
731 "Gi4r8wO9kpAMJZ8ql2r5Yzl9/L3U85FzuYRFEGQspCXvZf0fLSh4sg==\n"
732 "-----END PUBLIC KEY-----\n";
733
734 static string g_testPrikeyEccStr = "-----BEGIN EC PRIVATE KEY-----\n"
735 "MHQCAQEEIE0qd9kvmhww4glLxuEeF7NMgXz0YHj6sI8ibDBgU/iEoAcGBSuBBAAK\n"
736 "oUQDQgAEFZ5z0WC0cbwjdJjbHk6MlGTcVphvhNXfGi4r8wO9kpAMJZ8ql2r5Yzl9\n"
737 "/L3U85FzuYRFEGQspCXvZf0fLSh4sg==\n"
738 "-----END EC PRIVATE KEY-----\n";
739
RsaAsyKeyPemTest1(const char * algoName,const char * priKeyPkcs1Str,const char * priKeyPkcs8Str)740 static void RsaAsyKeyPemTest1(const char *algoName, const char *priKeyPkcs1Str, const char *priKeyPkcs8Str)
741 {
742 HcfAsyKeyGenerator *generator = nullptr;
743 HcfResult res = HcfAsyKeyGeneratorCreate(algoName, &generator);
744 EXPECT_EQ(res, HCF_SUCCESS);
745 EXPECT_NE(generator, nullptr);
746
747 HcfKeyPair *dupKeyPair = nullptr;
748 res = generator->convertPemKey(generator, nullptr, nullptr, priKeyPkcs1Str, &dupKeyPair);
749 EXPECT_EQ(res, HCF_SUCCESS);
750 HcfPriKey *prikey = dupKeyPair->priKey;
751 char *retStr = nullptr;
752 res = prikey->base.getEncodedPem((HcfKey *)prikey, "PKCS1", &retStr);
753 EXPECT_EQ(res, HCF_SUCCESS);
754 int32_t cmpRes = strcmp(retStr, priKeyPkcs1Str);
755 EXPECT_EQ(cmpRes, HCF_SUCCESS);
756
757 res = prikey->base.getEncodedPem((HcfKey *)prikey, "PKCS8", &retStr);
758 EXPECT_EQ(res, HCF_SUCCESS);
759 cmpRes = strcmp(retStr, priKeyPkcs8Str);
760 EXPECT_EQ(cmpRes, HCF_SUCCESS);
761
762 HcfFree(retStr);
763 HcfObjDestroy(dupKeyPair);
764 HcfObjDestroy(generator);
765 }
766
RsaAsyKeyPemTest2(const char * algoName,const char * priKeyPkcs8Str,const char * priKeyPkcs1Str)767 static void RsaAsyKeyPemTest2(const char *algoName, const char *priKeyPkcs8Str, const char *priKeyPkcs1Str)
768 {
769 HcfAsyKeyGenerator *generator = nullptr;
770 HcfResult res = HcfAsyKeyGeneratorCreate(algoName, &generator);
771 EXPECT_EQ(res, HCF_SUCCESS);
772 EXPECT_NE(generator, nullptr);
773
774 HcfKeyPair *dupKeyPair = nullptr;
775 res = generator->convertPemKey(generator, nullptr, nullptr, priKeyPkcs8Str, &dupKeyPair);
776 EXPECT_EQ(res, HCF_SUCCESS);
777 HcfPriKey *prikey = dupKeyPair->priKey;
778 char *retStr = nullptr;
779 res = prikey->base.getEncodedPem((HcfKey *)prikey, "PKCS1", &retStr);
780 EXPECT_EQ(res, HCF_SUCCESS);
781 int32_t cmpRes = strcmp(retStr, priKeyPkcs1Str);
782 EXPECT_EQ(cmpRes, HCF_SUCCESS);
783
784 res = prikey->base.getEncodedPem((HcfKey *)prikey, "PKCS8", &retStr);
785 EXPECT_EQ(res, HCF_SUCCESS);
786 cmpRes = strcmp(retStr, priKeyPkcs8Str);
787 EXPECT_EQ(cmpRes, HCF_SUCCESS);
788
789 HcfFree(retStr);
790 HcfObjDestroy(dupKeyPair);
791 HcfObjDestroy(generator);
792 }
793
RsaAsyKeyPemTest3(const char * algoName,const char * pubKeyPkcs1Str,const char * pubKeyX509Str)794 static void RsaAsyKeyPemTest3(const char *algoName, const char *pubKeyPkcs1Str, const char *pubKeyX509Str)
795 {
796 HcfAsyKeyGenerator *generator = nullptr;
797 HcfResult res = HcfAsyKeyGeneratorCreate(algoName, &generator);
798 EXPECT_EQ(res, HCF_SUCCESS);
799 EXPECT_NE(generator, nullptr);
800
801 HcfKeyPair *dupKeyPair = nullptr;
802 res = generator->convertPemKey(generator, nullptr, pubKeyPkcs1Str, nullptr, &dupKeyPair);
803 EXPECT_EQ(res, HCF_SUCCESS);
804
805 HcfPubKey *pubkey = dupKeyPair->pubKey;
806 char *retStr = nullptr;
807 res = pubkey->base.getEncodedPem((HcfKey *)pubkey, "PKCS1", &retStr);
808 EXPECT_EQ(res, HCF_SUCCESS);
809 int32_t cmpRes = strcmp(retStr, pubKeyPkcs1Str);
810 EXPECT_EQ(cmpRes, HCF_SUCCESS);
811
812 res = pubkey->base.getEncodedPem((HcfKey *)pubkey, "X509", &retStr);
813 EXPECT_EQ(res, HCF_SUCCESS);
814 cmpRes = strcmp(retStr, pubKeyX509Str);
815 EXPECT_EQ(cmpRes, HCF_SUCCESS);
816
817 HcfFree(retStr);
818 HcfObjDestroy(dupKeyPair);
819 HcfObjDestroy(generator);
820 }
821
RsaAsyKeyPemTest4(const char * algoName,const char * pubKeyX509Str,const char * pubKeyPkcs1Str)822 static void RsaAsyKeyPemTest4(const char *algoName, const char *pubKeyX509Str, const char *pubKeyPkcs1Str)
823 {
824 HcfAsyKeyGenerator *generator = nullptr;
825 HcfResult res = HcfAsyKeyGeneratorCreate(algoName, &generator);
826 EXPECT_EQ(res, HCF_SUCCESS);
827 EXPECT_NE(generator, nullptr);
828
829 HcfKeyPair *dupKeyPair = nullptr;
830 res = generator->convertPemKey(generator, nullptr, pubKeyX509Str, nullptr, &dupKeyPair);
831 EXPECT_EQ(res, HCF_SUCCESS);
832
833 HcfPubKey *pubkey = dupKeyPair->pubKey;
834 char *retStr = nullptr;
835 res = pubkey->base.getEncodedPem((HcfKey *)pubkey, "PKCS1", &retStr);
836 EXPECT_EQ(res, HCF_SUCCESS);
837 int32_t cmpRes = strcmp(retStr, pubKeyPkcs1Str);
838 EXPECT_EQ(cmpRes, HCF_SUCCESS);
839
840 res = pubkey->base.getEncodedPem((HcfKey *)pubkey, "X509", &retStr);
841 EXPECT_EQ(res, HCF_SUCCESS);
842 cmpRes = strcmp(retStr, pubKeyX509Str);
843 EXPECT_EQ(cmpRes, HCF_SUCCESS);
844
845 HcfFree(retStr);
846 HcfObjDestroy(dupKeyPair);
847 HcfObjDestroy(generator);
848 }
849
RsaAsyKeyPemTest5(const char * algoName,const char * pubKeyPkcs1Str,const char * pubKeyX509Str,const char * priKeyPkcs1Str,const char * priKeyPkcs8Str)850 static void RsaAsyKeyPemTest5(const char *algoName, const char *pubKeyPkcs1Str, const char *pubKeyX509Str,
851 const char *priKeyPkcs1Str, const char *priKeyPkcs8Str)
852 {
853 HcfAsyKeyGenerator *generator = nullptr;
854 HcfResult res = HcfAsyKeyGeneratorCreate(algoName, &generator);
855 EXPECT_EQ(res, HCF_SUCCESS);
856 EXPECT_NE(generator, nullptr);
857
858 HcfKeyPair *dupKeyPair = nullptr;
859 res = generator->convertPemKey(generator, nullptr, pubKeyPkcs1Str, priKeyPkcs1Str, &dupKeyPair);
860 EXPECT_EQ(res, HCF_SUCCESS);
861
862 HcfPubKey *pubkey = dupKeyPair->pubKey;
863 char *retStr = nullptr;
864 res = pubkey->base.getEncodedPem((HcfKey *)pubkey, "PKCS1", &retStr);
865 EXPECT_EQ(res, HCF_SUCCESS);
866 int32_t cmpRes = strcmp(retStr, pubKeyPkcs1Str);
867 EXPECT_EQ(cmpRes, HCF_SUCCESS);
868
869 res = pubkey->base.getEncodedPem((HcfKey *)pubkey, "X509", &retStr);
870 EXPECT_EQ(res, HCF_SUCCESS);
871 cmpRes = strcmp(retStr, pubKeyX509Str);
872 EXPECT_EQ(cmpRes, HCF_SUCCESS);
873
874 HcfPriKey *prikey = dupKeyPair->priKey;
875 retStr = nullptr;
876 res = prikey->base.getEncodedPem((HcfKey *)prikey, "PKCS1", &retStr);
877 EXPECT_EQ(res, HCF_SUCCESS);
878 cmpRes = strcmp(retStr, priKeyPkcs1Str);
879 EXPECT_EQ(cmpRes, HCF_SUCCESS);
880
881 res = prikey->base.getEncodedPem((HcfKey *)prikey, "PKCS8", &retStr);
882 EXPECT_EQ(res, HCF_SUCCESS);
883 cmpRes = strcmp(retStr, priKeyPkcs8Str);
884 EXPECT_EQ(cmpRes, HCF_SUCCESS);
885
886 HcfFree(retStr);
887 HcfObjDestroy(dupKeyPair);
888 HcfObjDestroy(generator);
889 }
890
RsaAsyKeyPemTest6(const char * algoName,const char * pubKeyPkcs1Str,const char * pubKeyX509Str,const char * priKeyPkcs1Str,const char * priKeyPkcs8Str)891 static void RsaAsyKeyPemTest6(const char *algoName, const char *pubKeyPkcs1Str, const char *pubKeyX509Str,
892 const char *priKeyPkcs1Str, const char *priKeyPkcs8Str)
893 {
894 HcfAsyKeyGenerator *generator = nullptr;
895 HcfResult res = HcfAsyKeyGeneratorCreate(algoName, &generator);
896 EXPECT_EQ(res, HCF_SUCCESS);
897 EXPECT_NE(generator, nullptr);
898
899 HcfKeyPair *dupKeyPair = nullptr;
900 res = generator->convertPemKey(generator, nullptr, pubKeyPkcs1Str, priKeyPkcs8Str, &dupKeyPair);
901 EXPECT_EQ(res, HCF_SUCCESS);
902
903 HcfPubKey *pubkey = dupKeyPair->pubKey;
904 char *retStr = nullptr;
905 res = pubkey->base.getEncodedPem((HcfKey *)pubkey, "PKCS1", &retStr);
906 EXPECT_EQ(res, HCF_SUCCESS);
907 int32_t cmpRes = strcmp(retStr, pubKeyPkcs1Str);
908 EXPECT_EQ(cmpRes, HCF_SUCCESS);
909
910 res = pubkey->base.getEncodedPem((HcfKey *)pubkey, "X509", &retStr);
911 EXPECT_EQ(res, HCF_SUCCESS);
912 cmpRes = strcmp(retStr, pubKeyX509Str);
913 EXPECT_EQ(cmpRes, HCF_SUCCESS);
914
915 HcfPriKey *prikey = dupKeyPair->priKey;
916 retStr = nullptr;
917 res = prikey->base.getEncodedPem((HcfKey *)prikey, "PKCS1", &retStr);
918 EXPECT_EQ(res, HCF_SUCCESS);
919 cmpRes = strcmp(retStr, priKeyPkcs1Str);
920 EXPECT_EQ(cmpRes, HCF_SUCCESS);
921
922 res = prikey->base.getEncodedPem((HcfKey *)prikey, "PKCS8", &retStr);
923 EXPECT_EQ(res, HCF_SUCCESS);
924 cmpRes = strcmp(retStr, priKeyPkcs8Str);
925 EXPECT_EQ(cmpRes, HCF_SUCCESS);
926
927 HcfFree(retStr);
928 HcfObjDestroy(dupKeyPair);
929 HcfObjDestroy(generator);
930 }
931
RsaAsyKeyPemTest7(const char * algoName,const char * pubKeyPkcs1Str,const char * pubKeyX509Str,const char * priKeyPkcs1Str,const char * priKeyPkcs8Str)932 static void RsaAsyKeyPemTest7(const char *algoName, const char *pubKeyPkcs1Str, const char *pubKeyX509Str,
933 const char *priKeyPkcs1Str, const char *priKeyPkcs8Str)
934 {
935 HcfAsyKeyGenerator *generator = nullptr;
936 HcfResult res = HcfAsyKeyGeneratorCreate(algoName, &generator);
937 EXPECT_EQ(res, HCF_SUCCESS);
938 EXPECT_NE(generator, nullptr);
939
940 HcfKeyPair *dupKeyPair = nullptr;
941 res = generator->convertPemKey(generator, nullptr, pubKeyX509Str, priKeyPkcs1Str, &dupKeyPair);
942 EXPECT_EQ(res, HCF_SUCCESS);
943
944 HcfPubKey *pubkey = dupKeyPair->pubKey;
945 char *retStr = nullptr;
946 res = pubkey->base.getEncodedPem((HcfKey *)pubkey, "PKCS1", &retStr);
947 EXPECT_EQ(res, HCF_SUCCESS);
948 int32_t cmpRes = strcmp(retStr, pubKeyPkcs1Str);
949 EXPECT_EQ(cmpRes, HCF_SUCCESS);
950
951 res = pubkey->base.getEncodedPem((HcfKey *)pubkey, "X509", &retStr);
952 EXPECT_EQ(res, HCF_SUCCESS);
953 cmpRes = strcmp(retStr, pubKeyX509Str);
954 EXPECT_EQ(cmpRes, HCF_SUCCESS);
955
956 HcfPriKey *prikey = dupKeyPair->priKey;
957 retStr = nullptr;
958 res = prikey->base.getEncodedPem((HcfKey *)prikey, "PKCS1", &retStr);
959 EXPECT_EQ(res, HCF_SUCCESS);
960 cmpRes = strcmp(retStr, priKeyPkcs1Str);
961 EXPECT_EQ(cmpRes, HCF_SUCCESS);
962
963 res = prikey->base.getEncodedPem((HcfKey *)prikey, "PKCS8", &retStr);
964 EXPECT_EQ(res, HCF_SUCCESS);
965 cmpRes = strcmp(retStr, priKeyPkcs8Str);
966 EXPECT_EQ(cmpRes, HCF_SUCCESS);
967
968 HcfFree(retStr);
969 HcfObjDestroy(dupKeyPair);
970 HcfObjDestroy(generator);
971 }
972
RsaAsyKeyPemTest8(const char * algoName,const char * pubKeyPkcs1Str,const char * pubKeyX509Str,const char * priKeyPkcs1Str,const char * priKeyPkcs8Str)973 static void RsaAsyKeyPemTest8(const char *algoName, const char *pubKeyPkcs1Str, const char *pubKeyX509Str,
974 const char *priKeyPkcs1Str, const char *priKeyPkcs8Str)
975 {
976 HcfAsyKeyGenerator *generator = nullptr;
977 HcfResult res = HcfAsyKeyGeneratorCreate(algoName, &generator);
978 EXPECT_EQ(res, HCF_SUCCESS);
979 EXPECT_NE(generator, nullptr);
980
981 HcfKeyPair *dupKeyPair = nullptr;
982 res = generator->convertPemKey(generator, nullptr, pubKeyX509Str, priKeyPkcs8Str, &dupKeyPair);
983 EXPECT_EQ(res, HCF_SUCCESS);
984
985 HcfPubKey *pubkey = dupKeyPair->pubKey;
986 char *retStr = nullptr;
987 res = pubkey->base.getEncodedPem((HcfKey *)pubkey, "PKCS1", &retStr);
988 EXPECT_EQ(res, HCF_SUCCESS);
989 int32_t cmpRes = strcmp(retStr, pubKeyPkcs1Str);
990 EXPECT_EQ(cmpRes, HCF_SUCCESS);
991
992 res = pubkey->base.getEncodedPem((HcfKey *)pubkey, "X509", &retStr);
993 EXPECT_EQ(res, HCF_SUCCESS);
994 cmpRes = strcmp(retStr, pubKeyX509Str);
995 EXPECT_EQ(cmpRes, HCF_SUCCESS);
996
997 HcfPriKey *prikey = dupKeyPair->priKey;
998 retStr = nullptr;
999 res = prikey->base.getEncodedPem((HcfKey *)prikey, "PKCS1", &retStr);
1000 EXPECT_EQ(res, HCF_SUCCESS);
1001 cmpRes = strcmp(retStr, priKeyPkcs1Str);
1002 EXPECT_EQ(cmpRes, HCF_SUCCESS);
1003
1004 res = prikey->base.getEncodedPem((HcfKey *)prikey, "PKCS8", &retStr);
1005 EXPECT_EQ(res, HCF_SUCCESS);
1006 cmpRes = strcmp(retStr, priKeyPkcs8Str);
1007 EXPECT_EQ(cmpRes, HCF_SUCCESS);
1008
1009 HcfFree(retStr);
1010 HcfObjDestroy(dupKeyPair);
1011 HcfObjDestroy(generator);
1012 }
1013
1014 // test pubkey is null, prikey is not null pkcs1 to pkcs8
1015 HWTEST_F(CryptoRsaAsyKeyPemTest, CryptoRsaAsyKeyPemTest001, TestSize.Level0)
1016 {
1017 RsaAsyKeyPemTest1("RSA512", g_testPrikeyPkcs1Str512.c_str(), g_testPrikeyPkcs8Str512.c_str());
1018 RsaAsyKeyPemTest1("RSA768", g_testPrikeyPkcs1Str768.c_str(), g_testPrikeyPkcs8Str768.c_str());
1019 RsaAsyKeyPemTest1("RSA1024", g_testPrikeyPkcs1Str1024.c_str(), g_testPrikeyPkcs8Str1024.c_str());
1020 RsaAsyKeyPemTest1("RSA2048", g_testPrikeyPkcs1Str2048.c_str(), g_testPrikeyPkcs8Str2048.c_str());
1021 RsaAsyKeyPemTest1("RSA3072", g_testPrikeyPkcs1Str3072.c_str(), g_testPrikeyPkcs8Str3072.c_str());
1022 RsaAsyKeyPemTest1("RSA4096", g_testPrikeyPkcs1Str4096.c_str(), g_testPrikeyPkcs8Str4096.c_str());
1023 RsaAsyKeyPemTest1("RSA8192", g_testPrikeyPkcs1Str8192.c_str(), g_testPrikeyPkcs8Str8192.c_str());
1024 }
1025
1026 // test pubkey is null, prikey is not null pkcs8 to pkcs1
1027 HWTEST_F(CryptoRsaAsyKeyPemTest, CryptoRsaAsyKeyPemTest002, TestSize.Level0)
1028 {
1029 RsaAsyKeyPemTest2("RSA512", g_testPrikeyPkcs8Str512.c_str(), g_testPrikeyPkcs1Str512.c_str());
1030 RsaAsyKeyPemTest2("RSA768", g_testPrikeyPkcs8Str768.c_str(), g_testPrikeyPkcs1Str768.c_str());
1031 RsaAsyKeyPemTest2("RSA1024", g_testPrikeyPkcs8Str1024.c_str(), g_testPrikeyPkcs1Str1024.c_str());
1032 RsaAsyKeyPemTest2("RSA2048", g_testPrikeyPkcs8Str2048.c_str(), g_testPrikeyPkcs1Str2048.c_str());
1033 RsaAsyKeyPemTest2("RSA3072", g_testPrikeyPkcs8Str3072.c_str(), g_testPrikeyPkcs1Str3072.c_str());
1034 RsaAsyKeyPemTest2("RSA4096", g_testPrikeyPkcs8Str4096.c_str(), g_testPrikeyPkcs1Str4096.c_str());
1035 RsaAsyKeyPemTest2("RSA8192", g_testPrikeyPkcs8Str8192.c_str(), g_testPrikeyPkcs1Str8192.c_str());
1036 }
1037
1038 // test pubkey is not null pkcs1 to x509, prikey is null
1039 HWTEST_F(CryptoRsaAsyKeyPemTest, CryptoRsaAsyKeyPemTest003, TestSize.Level0)
1040 {
1041 RsaAsyKeyPemTest3("RSA512", g_testPubkeyPkcs1Str512.c_str(), g_testPubkeyX509Str512.c_str());
1042 RsaAsyKeyPemTest3("RSA768", g_testPubkeyPkcs1Str768.c_str(), g_testPubkeyX509Str768.c_str());
1043 RsaAsyKeyPemTest3("RSA1024", g_testPubkeyPkcs1Str1024.c_str(), g_testPubkeyX509Str1024.c_str());
1044 RsaAsyKeyPemTest3("RSA2048", g_testPubkeyPkcs1Str2048.c_str(), g_testPubkeyX509Str2048.c_str());
1045 RsaAsyKeyPemTest3("RSA3072", g_testPubkeyPkcs1Str3072.c_str(), g_testPubkeyX509Str3072.c_str());
1046 RsaAsyKeyPemTest3("RSA4096", g_testPubkeyPkcs1Str4096.c_str(), g_testPubkeyX509Str4096.c_str());
1047 RsaAsyKeyPemTest3("RSA8192", g_testPubkeyPkcs1Str8192.c_str(), g_testPubkeyX509Str8192.c_str());
1048 }
1049
1050 // test pubkey is not null x509 to pkcs1, prikey is null
1051 HWTEST_F(CryptoRsaAsyKeyPemTest, CryptoRsaAsyKeyPemTest004, TestSize.Level0)
1052 {
1053 RsaAsyKeyPemTest4("RSA512", g_testPubkeyX509Str512.c_str(), g_testPubkeyPkcs1Str512.c_str());
1054 RsaAsyKeyPemTest4("RSA768", g_testPubkeyX509Str768.c_str(), g_testPubkeyPkcs1Str768.c_str());
1055 RsaAsyKeyPemTest4("RSA1024", g_testPubkeyX509Str1024.c_str(), g_testPubkeyPkcs1Str1024.c_str());
1056 RsaAsyKeyPemTest4("RSA2048", g_testPubkeyX509Str2048.c_str(), g_testPubkeyPkcs1Str2048.c_str());
1057 RsaAsyKeyPemTest4("RSA3072", g_testPubkeyX509Str3072.c_str(), g_testPubkeyPkcs1Str3072.c_str());
1058 RsaAsyKeyPemTest4("RSA4096", g_testPubkeyX509Str4096.c_str(), g_testPubkeyPkcs1Str4096.c_str());
1059 RsaAsyKeyPemTest4("RSA8192", g_testPubkeyX509Str8192.c_str(), g_testPubkeyPkcs1Str8192.c_str());
1060 }
1061
1062 // test pubkey is pkcs1 to x509, prikey is pkcs1 to pkcs8
1063 HWTEST_F(CryptoRsaAsyKeyPemTest, CryptoRsaAsyKeyPemTest005, TestSize.Level0)
1064 {
1065 RsaAsyKeyPemTest5("RSA512", g_testPubkeyPkcs1Str512.c_str(), g_testPubkeyX509Str512.c_str(),
1066 g_testPrikeyPkcs1Str512.c_str(), g_testPrikeyPkcs8Str512.c_str());
1067 RsaAsyKeyPemTest5("RSA768", g_testPubkeyPkcs1Str768.c_str(), g_testPubkeyX509Str768.c_str(),
1068 g_testPrikeyPkcs1Str768.c_str(), g_testPrikeyPkcs8Str768.c_str());
1069 RsaAsyKeyPemTest5("RSA1024", g_testPubkeyPkcs1Str1024.c_str(), g_testPubkeyX509Str1024.c_str(),
1070 g_testPrikeyPkcs1Str1024.c_str(), g_testPrikeyPkcs8Str1024.c_str());
1071 RsaAsyKeyPemTest5("RSA2048", g_testPubkeyPkcs1Str2048.c_str(), g_testPubkeyX509Str2048.c_str(),
1072 g_testPrikeyPkcs1Str2048.c_str(), g_testPrikeyPkcs8Str2048.c_str());
1073 RsaAsyKeyPemTest5("RSA3072", g_testPubkeyPkcs1Str3072.c_str(), g_testPubkeyX509Str3072.c_str(),
1074 g_testPrikeyPkcs1Str3072.c_str(), g_testPrikeyPkcs8Str3072.c_str());
1075 RsaAsyKeyPemTest5("RSA4096", g_testPubkeyPkcs1Str4096.c_str(), g_testPubkeyX509Str4096.c_str(),
1076 g_testPrikeyPkcs1Str4096.c_str(), g_testPrikeyPkcs8Str4096.c_str());
1077 RsaAsyKeyPemTest5("RSA8192", g_testPubkeyPkcs1Str8192.c_str(), g_testPubkeyX509Str8192.c_str(),
1078 g_testPrikeyPkcs1Str8192.c_str(), g_testPrikeyPkcs8Str8192.c_str());
1079 }
1080
1081 // test pubkey is pkcs1 to x509, prikey is pkcs8 to pkcs1
1082 HWTEST_F(CryptoRsaAsyKeyPemTest, CryptoRsaAsyKeyPemTest006, TestSize.Level0)
1083 {
1084 RsaAsyKeyPemTest6("RSA512", g_testPubkeyPkcs1Str512.c_str(), g_testPubkeyX509Str512.c_str(),
1085 g_testPrikeyPkcs1Str512.c_str(), g_testPrikeyPkcs8Str512.c_str());
1086 RsaAsyKeyPemTest6("RSA768", g_testPubkeyPkcs1Str768.c_str(), g_testPubkeyX509Str768.c_str(),
1087 g_testPrikeyPkcs1Str768.c_str(), g_testPrikeyPkcs8Str768.c_str());
1088 RsaAsyKeyPemTest6("RSA1024", g_testPubkeyPkcs1Str1024.c_str(), g_testPubkeyX509Str1024.c_str(),
1089 g_testPrikeyPkcs1Str1024.c_str(), g_testPrikeyPkcs8Str1024.c_str());
1090 RsaAsyKeyPemTest6("RSA2048", g_testPubkeyPkcs1Str2048.c_str(), g_testPubkeyX509Str2048.c_str(),
1091 g_testPrikeyPkcs1Str2048.c_str(), g_testPrikeyPkcs8Str2048.c_str());
1092 RsaAsyKeyPemTest6("RSA3072", g_testPubkeyPkcs1Str3072.c_str(), g_testPubkeyX509Str3072.c_str(),
1093 g_testPrikeyPkcs1Str3072.c_str(), g_testPrikeyPkcs8Str3072.c_str());
1094 RsaAsyKeyPemTest6("RSA4096", g_testPubkeyPkcs1Str4096.c_str(), g_testPubkeyX509Str4096.c_str(),
1095 g_testPrikeyPkcs1Str4096.c_str(), g_testPrikeyPkcs8Str4096.c_str());
1096 RsaAsyKeyPemTest6("RSA8192", g_testPubkeyPkcs1Str8192.c_str(), g_testPubkeyX509Str8192.c_str(),
1097 g_testPrikeyPkcs1Str8192.c_str(), g_testPrikeyPkcs8Str8192.c_str());
1098 }
1099
1100 // test pubkey is x509 to pkcs1, prikey is pkcs1 to pkcs8
1101 HWTEST_F(CryptoRsaAsyKeyPemTest, CryptoRsaAsyKeyPemTest007, TestSize.Level0)
1102 {
1103 RsaAsyKeyPemTest7("RSA512", g_testPubkeyPkcs1Str512.c_str(), g_testPubkeyX509Str512.c_str(),
1104 g_testPrikeyPkcs1Str512.c_str(), g_testPrikeyPkcs8Str512.c_str());
1105 RsaAsyKeyPemTest7("RSA768", g_testPubkeyPkcs1Str768.c_str(), g_testPubkeyX509Str768.c_str(),
1106 g_testPrikeyPkcs1Str768.c_str(), g_testPrikeyPkcs8Str768.c_str());
1107 RsaAsyKeyPemTest7("RSA1024", g_testPubkeyPkcs1Str1024.c_str(), g_testPubkeyX509Str1024.c_str(),
1108 g_testPrikeyPkcs1Str1024.c_str(), g_testPrikeyPkcs8Str1024.c_str());
1109 RsaAsyKeyPemTest7("RSA2048", g_testPubkeyPkcs1Str2048.c_str(), g_testPubkeyX509Str2048.c_str(),
1110 g_testPrikeyPkcs1Str2048.c_str(), g_testPrikeyPkcs8Str2048.c_str());
1111 RsaAsyKeyPemTest7("RSA3072", g_testPubkeyPkcs1Str3072.c_str(), g_testPubkeyX509Str3072.c_str(),
1112 g_testPrikeyPkcs1Str3072.c_str(), g_testPrikeyPkcs8Str3072.c_str());
1113 RsaAsyKeyPemTest7("RSA4096", g_testPubkeyPkcs1Str4096.c_str(), g_testPubkeyX509Str4096.c_str(),
1114 g_testPrikeyPkcs1Str4096.c_str(), g_testPrikeyPkcs8Str4096.c_str());
1115 RsaAsyKeyPemTest7("RSA8192", g_testPubkeyPkcs1Str8192.c_str(), g_testPubkeyX509Str8192.c_str(),
1116 g_testPrikeyPkcs1Str8192.c_str(), g_testPrikeyPkcs8Str8192.c_str());
1117 }
1118
1119 // test pubkey is x509 to pkcs1, prikey is pkcs8 to pkcs1
1120 HWTEST_F(CryptoRsaAsyKeyPemTest, CryptoRsaAsyKeyPemTest008, TestSize.Level0)
1121 {
1122 RsaAsyKeyPemTest8("RSA512", g_testPubkeyPkcs1Str512.c_str(), g_testPubkeyX509Str512.c_str(),
1123 g_testPrikeyPkcs1Str512.c_str(), g_testPrikeyPkcs8Str512.c_str());
1124 RsaAsyKeyPemTest8("RSA768", g_testPubkeyPkcs1Str768.c_str(), g_testPubkeyX509Str768.c_str(),
1125 g_testPrikeyPkcs1Str768.c_str(), g_testPrikeyPkcs8Str768.c_str());
1126 RsaAsyKeyPemTest8("RSA1024", g_testPubkeyPkcs1Str1024.c_str(), g_testPubkeyX509Str1024.c_str(),
1127 g_testPrikeyPkcs1Str1024.c_str(), g_testPrikeyPkcs8Str1024.c_str());
1128 RsaAsyKeyPemTest8("RSA2048", g_testPubkeyPkcs1Str2048.c_str(), g_testPubkeyX509Str2048.c_str(),
1129 g_testPrikeyPkcs1Str2048.c_str(), g_testPrikeyPkcs8Str2048.c_str());
1130 RsaAsyKeyPemTest8("RSA3072", g_testPubkeyPkcs1Str3072.c_str(), g_testPubkeyX509Str3072.c_str(),
1131 g_testPrikeyPkcs1Str3072.c_str(), g_testPrikeyPkcs8Str3072.c_str());
1132 RsaAsyKeyPemTest8("RSA4096", g_testPubkeyPkcs1Str4096.c_str(), g_testPubkeyX509Str4096.c_str(),
1133 g_testPrikeyPkcs1Str4096.c_str(), g_testPrikeyPkcs8Str4096.c_str());
1134 RsaAsyKeyPemTest8("RSA8192", g_testPubkeyPkcs1Str8192.c_str(), g_testPubkeyX509Str8192.c_str(),
1135 g_testPrikeyPkcs1Str8192.c_str(), g_testPrikeyPkcs8Str8192.c_str());
1136 }
1137
1138 // test ConvertPemKey parma is null
1139 HWTEST_F(CryptoRsaAsyKeyPemTest, CryptoRsaAsyKeyPemErrorTest001, TestSize.Level0)
1140 {
1141 HcfAsyKeyGenerator *generator = nullptr;
1142 HcfResult res = HcfAsyKeyGeneratorCreate("RSA1024", &generator);
1143 EXPECT_EQ(res, HCF_SUCCESS);
1144 EXPECT_NE(generator, nullptr);
1145
1146 HcfKeyPair *dupKeyPair = nullptr;
1147 res = generator->convertPemKey(generator, nullptr, nullptr, nullptr, &dupKeyPair);
1148 EXPECT_NE(res, HCF_SUCCESS);
1149 EXPECT_EQ(dupKeyPair, nullptr);
1150
1151 res = generator->convertPemKey(nullptr, nullptr, g_testPubkeyX509Str1024.c_str(),
1152 g_testPrikeyPkcs1Str1024.c_str(), &dupKeyPair);
1153 EXPECT_NE(res, HCF_SUCCESS);
1154 EXPECT_EQ(dupKeyPair, nullptr);
1155
1156 res = generator->convertPemKey(generator, nullptr, g_testPubkeyX509Str1024.c_str(),
1157 g_testPrikeyPkcs1Str1024.c_str(), nullptr);
1158 EXPECT_NE(res, HCF_SUCCESS);
1159 EXPECT_EQ(dupKeyPair, nullptr);
1160 HcfObjDestroy(generator);
1161 }
1162
1163 // test ConvertPemKey pubkey and prikey is invalid
1164 HWTEST_F(CryptoRsaAsyKeyPemTest, CryptoRsaAsyKeyPemErrorTest002, TestSize.Level0)
1165 {
1166 HcfAsyKeyGenerator *generator = nullptr;
1167 HcfResult res = HcfAsyKeyGeneratorCreate("RSA1024", &generator);
1168 EXPECT_EQ(res, HCF_SUCCESS);
1169 EXPECT_NE(generator, nullptr);
1170
1171 HcfKeyPair *dupKeyPair = nullptr;
1172 res = generator->convertPemKey(generator, nullptr, "pubkey", g_testPrikeyPkcs1Str1024.c_str(), &dupKeyPair);
1173 EXPECT_NE(res, HCF_SUCCESS);
1174 EXPECT_EQ(dupKeyPair, nullptr);
1175
1176 res = generator->convertPemKey(generator, nullptr, g_testPubkeyX509Str1024.c_str(), "prikey", &dupKeyPair);
1177 EXPECT_NE(res, HCF_SUCCESS);
1178 EXPECT_EQ(dupKeyPair, nullptr);
1179
1180 res = generator->convertPemKey(generator, nullptr, "pubkey", "prikey", &dupKeyPair);
1181 EXPECT_NE(res, HCF_SUCCESS);
1182 EXPECT_EQ(dupKeyPair, nullptr);
1183
1184 HcfObjDestroy(generator);
1185 }
1186
1187 // test getEncodedPem param is null
1188 HWTEST_F(CryptoRsaAsyKeyPemTest, CryptoRsaAsyKeyPemErrorTest003, TestSize.Level0)
1189 {
1190 HcfAsyKeyGenerator *generator = nullptr;
1191 HcfResult res = HcfAsyKeyGeneratorCreate("RSA1024", &generator);
1192 EXPECT_EQ(res, HCF_SUCCESS);
1193 EXPECT_NE(generator, nullptr);
1194
1195 HcfKeyPair *dupKeyPair = nullptr;
1196 res = generator->convertPemKey(generator, nullptr, g_testPubkeyPkcs1Str1024.c_str(),
1197 g_testPrikeyPkcs1Str1024.c_str(), &dupKeyPair);
1198 EXPECT_EQ(res, HCF_SUCCESS);
1199
1200 HcfPubKey *pubkey = dupKeyPair->pubKey;
1201 char *retStr = nullptr;
1202 res = pubkey->base.getEncodedPem(nullptr, "PKCS1", &retStr);
1203 EXPECT_NE(res, HCF_SUCCESS);
1204
1205 pubkey = dupKeyPair->pubKey;
1206 res = pubkey->base.getEncodedPem((HcfKey *)pubkey, nullptr, &retStr);
1207 EXPECT_NE(res, HCF_SUCCESS);
1208
1209 pubkey = dupKeyPair->pubKey;
1210 res = pubkey->base.getEncodedPem((HcfKey *)pubkey, "PKCS1", nullptr);
1211 EXPECT_NE(res, HCF_SUCCESS);
1212
1213 HcfPriKey *prikey = dupKeyPair->priKey;
1214 res = prikey->base.getEncodedPem(nullptr, "PKCS1", &retStr);
1215 EXPECT_NE(res, HCF_SUCCESS);
1216
1217 prikey = dupKeyPair->priKey;
1218 res = prikey->base.getEncodedPem((HcfKey *)prikey, nullptr, &retStr);
1219 EXPECT_NE(res, HCF_SUCCESS);
1220
1221 prikey = dupKeyPair->priKey;
1222 res = prikey->base.getEncodedPem((HcfKey *)prikey, "PKCS1", nullptr);
1223 EXPECT_NE(res, HCF_SUCCESS);
1224
1225 HcfObjDestroy(generator);
1226 }
1227
1228 // test getEncodedPem param is invalid
1229 HWTEST_F(CryptoRsaAsyKeyPemTest, CryptoRsaAsyKeyPemErrorTest004, TestSize.Level0)
1230 {
1231 HcfAsyKeyGenerator *generator = nullptr;
1232 HcfResult res = HcfAsyKeyGeneratorCreate("RSA1024", &generator);
1233 EXPECT_EQ(res, HCF_SUCCESS);
1234 EXPECT_NE(generator, nullptr);
1235
1236 HcfKeyPair *dupKeyPair = nullptr;
1237 res = generator->convertPemKey(generator, nullptr, g_testPubkeyPkcs1Str1024.c_str(),
1238 g_testPrikeyPkcs1Str1024.c_str(), &dupKeyPair);
1239 EXPECT_EQ(res, HCF_SUCCESS);
1240
1241 HcfPubKey *pubkey = dupKeyPair->pubKey;
1242 char *retStr = nullptr;
1243 res = pubkey->base.getEncodedPem((HcfKey *)pubkey, "PKCS8", &retStr);
1244 EXPECT_NE(res, HCF_SUCCESS);
1245
1246 pubkey = dupKeyPair->pubKey;
1247 res = pubkey->base.getEncodedPem((HcfKey *)pubkey, "test", &retStr);
1248 EXPECT_NE(res, HCF_SUCCESS);
1249
1250 pubkey = dupKeyPair->pubKey;
1251 res = pubkey->base.getEncodedPem((HcfKey *)pubkey, "pkcs1", &retStr);
1252 EXPECT_NE(res, HCF_SUCCESS);
1253
1254 pubkey = dupKeyPair->pubKey;
1255 res = pubkey->base.getEncodedPem((HcfKey *)pubkey, "x509", &retStr);
1256 EXPECT_NE(res, HCF_SUCCESS);
1257
1258 HcfPriKey *prikey = dupKeyPair->priKey;
1259 res = prikey->base.getEncodedPem((HcfKey *)prikey, "X509", &retStr);
1260 EXPECT_NE(res, HCF_SUCCESS);
1261
1262 prikey = dupKeyPair->priKey;
1263 res = prikey->base.getEncodedPem((HcfKey *)prikey, "test", &retStr);
1264 EXPECT_NE(res, HCF_SUCCESS);
1265
1266 prikey = dupKeyPair->priKey;
1267 res = prikey->base.getEncodedPem((HcfKey *)prikey, "pkcs1", &retStr);
1268 EXPECT_NE(res, HCF_SUCCESS);
1269
1270 prikey = dupKeyPair->priKey;
1271 res = prikey->base.getEncodedPem((HcfKey *)prikey, "pkcs8", &retStr);
1272 EXPECT_NE(res, HCF_SUCCESS);
1273
1274 HcfObjDestroy(generator);
1275 }
1276
1277 //test convertPemKey ecc pubkey and prikey
1278 HWTEST_F(CryptoRsaAsyKeyPemTest, CryptoRsaAsyKeyPemErrorTest005, TestSize.Level0)
1279 {
1280 HcfAsyKeyGenerator *generator = nullptr;
1281 HcfResult res = HcfAsyKeyGeneratorCreate("RSA1024", &generator);
1282 EXPECT_EQ(res, HCF_SUCCESS);
1283 EXPECT_NE(generator, nullptr);
1284
1285 HcfKeyPair *dupKeyPair = nullptr;
1286 res = generator->convertPemKey(generator, nullptr, g_testPubkeyEccStr.c_str(), g_testPrikeyEccStr.c_str(),
1287 &dupKeyPair);
1288 EXPECT_NE(res, HCF_SUCCESS);
1289 EXPECT_EQ(dupKeyPair, nullptr);
1290
1291 res = generator->convertPemKey(generator, nullptr, g_testPubkeyEccStr.c_str(), nullptr, &dupKeyPair);
1292 EXPECT_NE(res, HCF_SUCCESS);
1293 EXPECT_EQ(dupKeyPair, nullptr);
1294
1295 res = generator->convertPemKey(generator, nullptr, nullptr, g_testPrikeyEccStr.c_str(), &dupKeyPair);
1296 EXPECT_NE(res, HCF_SUCCESS);
1297 EXPECT_EQ(dupKeyPair, nullptr);
1298
1299 HcfObjDestroy(generator);
1300 }
1301
1302 // test getEncodedPem ecc pubkey and ecc prikey
1303 HWTEST_F(CryptoRsaAsyKeyPemTest, CryptoRsaAsyKeyPemErrorTest006, TestSize.Level0)
1304 {
1305 HcfAsyKeyGenerator *generator = nullptr;
1306 int32_t res = HcfAsyKeyGeneratorCreate("ECC224", &generator);
1307 ASSERT_EQ(res, HCF_SUCCESS);
1308 ASSERT_NE(generator, nullptr);
1309
1310 HcfKeyPair *keyPair = nullptr;
1311 res = generator->generateKeyPair(generator, nullptr, &keyPair);
1312 ASSERT_EQ(res, HCF_SUCCESS);
1313 ASSERT_NE(keyPair, nullptr);
1314 HcfPubKey *pubkey = keyPair->pubKey;
1315 char *retStr = nullptr;
1316 res = pubkey->base.getEncodedPem((HcfKey *)pubkey, "PKCS1", &retStr);
1317 EXPECT_NE(res, HCF_SUCCESS);
1318 EXPECT_EQ(retStr, nullptr);
1319 res = pubkey->base.getEncodedPem((HcfKey *)pubkey, "X509", &retStr);
1320 EXPECT_NE(res, HCF_SUCCESS);
1321 EXPECT_EQ(retStr, nullptr);
1322
1323 HcfPriKey *prikey = keyPair->priKey;
1324 res = prikey->base.getEncodedPem((HcfKey *)prikey, "PKCS1", &retStr);
1325 EXPECT_NE(res, HCF_SUCCESS);
1326 EXPECT_EQ(retStr, nullptr);
1327 res = prikey->base.getEncodedPem((HcfKey *)prikey, "PKCS8", &retStr);
1328 EXPECT_NE(res, HCF_SUCCESS);
1329 EXPECT_EQ(retStr, nullptr);
1330
1331 HcfObjDestroy(keyPair);
1332 HcfObjDestroy(generator);
1333 }
1334
1335 // test getEncodedPem dsa pubkey and prikey
1336 HWTEST_F(CryptoRsaAsyKeyPemTest, CryptoRsaAsyKeyPemErrorTest007, TestSize.Level0)
1337 {
1338 HcfAsyKeyGenerator *generator = nullptr;
1339 int32_t res = HcfAsyKeyGeneratorCreate("DSA1024", &generator);
1340 ASSERT_EQ(res, HCF_SUCCESS);
1341 ASSERT_NE(generator, nullptr);
1342
1343 HcfKeyPair *keyPair = nullptr;
1344 res = generator->generateKeyPair(generator, nullptr, &keyPair);
1345 ASSERT_EQ(res, HCF_SUCCESS);
1346 ASSERT_NE(keyPair, nullptr);
1347 HcfPubKey *pubkey = keyPair->pubKey;
1348 char *retStr = nullptr;
1349 res = pubkey->base.getEncodedPem((HcfKey *)pubkey, "PKCS1", &retStr);
1350 EXPECT_NE(res, HCF_SUCCESS);
1351 EXPECT_EQ(retStr, nullptr);
1352 res = pubkey->base.getEncodedPem((HcfKey *)pubkey, "X509", &retStr);
1353 EXPECT_NE(res, HCF_SUCCESS);
1354 EXPECT_EQ(retStr, nullptr);
1355
1356 HcfPriKey *prikey = keyPair->priKey;
1357 res = prikey->base.getEncodedPem((HcfKey *)prikey, "PKCS1", &retStr);
1358 EXPECT_NE(res, HCF_SUCCESS);
1359 EXPECT_EQ(retStr, nullptr);
1360 res = prikey->base.getEncodedPem((HcfKey *)prikey, "PKCS8", &retStr);
1361 EXPECT_NE(res, HCF_SUCCESS);
1362 EXPECT_EQ(retStr, nullptr);
1363
1364 HcfObjDestroy(keyPair);
1365 HcfObjDestroy(generator);
1366 }
1367
1368 // test getEncodedPem sm2 pubkey and prikey
1369 HWTEST_F(CryptoRsaAsyKeyPemTest, CryptoRsaAsyKeyPemErrorTest008, TestSize.Level0)
1370 {
1371 HcfAsyKeyGenerator *generator = nullptr;
1372 int32_t res = HcfAsyKeyGeneratorCreate("SM2_256", &generator);
1373 ASSERT_EQ(res, HCF_SUCCESS);
1374 ASSERT_NE(generator, nullptr);
1375
1376 HcfKeyPair *keyPair = nullptr;
1377 res = generator->generateKeyPair(generator, nullptr, &keyPair);
1378 ASSERT_EQ(res, HCF_SUCCESS);
1379 ASSERT_NE(keyPair, nullptr);
1380 HcfPubKey *pubkey = keyPair->pubKey;
1381 char *retStr = nullptr;
1382 res = pubkey->base.getEncodedPem((HcfKey *)pubkey, "PKCS1", &retStr);
1383 EXPECT_NE(res, HCF_SUCCESS);
1384 EXPECT_EQ(retStr, nullptr);
1385 res = pubkey->base.getEncodedPem((HcfKey *)pubkey, "X509", &retStr);
1386 EXPECT_NE(res, HCF_SUCCESS);
1387 EXPECT_EQ(retStr, nullptr);
1388
1389 HcfPriKey *prikey = keyPair->priKey;
1390 res = prikey->base.getEncodedPem((HcfKey *)prikey, "PKCS1", &retStr);
1391 EXPECT_NE(res, HCF_SUCCESS);
1392 EXPECT_EQ(retStr, nullptr);
1393 res = prikey->base.getEncodedPem((HcfKey *)prikey, "PKCS8", &retStr);
1394 EXPECT_NE(res, HCF_SUCCESS);
1395 EXPECT_EQ(retStr, nullptr);
1396
1397 HcfObjDestroy(keyPair);
1398 HcfObjDestroy(generator);
1399 }
1400
1401 // test getEncodedPem Ed25519 pubkey and prikey
1402 HWTEST_F(CryptoRsaAsyKeyPemTest, CryptoRsaAsyKeyPemErrorTest009, TestSize.Level0)
1403 {
1404 HcfAsyKeyGenerator *generator = nullptr;
1405 int32_t res = HcfAsyKeyGeneratorCreate("Ed25519", &generator);
1406 ASSERT_EQ(res, HCF_SUCCESS);
1407 ASSERT_NE(generator, nullptr);
1408
1409 HcfKeyPair *keyPair = nullptr;
1410 res = generator->generateKeyPair(generator, nullptr, &keyPair);
1411 ASSERT_EQ(res, HCF_SUCCESS);
1412 ASSERT_NE(keyPair, nullptr);
1413 HcfPubKey *pubkey = keyPair->pubKey;
1414 char *retStr = nullptr;
1415 res = pubkey->base.getEncodedPem((HcfKey *)pubkey, "PKCS1", &retStr);
1416 EXPECT_NE(res, HCF_SUCCESS);
1417 EXPECT_EQ(retStr, nullptr);
1418 res = pubkey->base.getEncodedPem((HcfKey *)pubkey, "X509", &retStr);
1419 EXPECT_NE(res, HCF_SUCCESS);
1420 EXPECT_EQ(retStr, nullptr);
1421
1422 HcfPriKey *prikey = keyPair->priKey;
1423 res = prikey->base.getEncodedPem((HcfKey *)prikey, "PKCS1", &retStr);
1424 EXPECT_NE(res, HCF_SUCCESS);
1425 EXPECT_EQ(retStr, nullptr);
1426 res = prikey->base.getEncodedPem((HcfKey *)prikey, "PKCS8", &retStr);
1427 EXPECT_NE(res, HCF_SUCCESS);
1428 EXPECT_EQ(retStr, nullptr);
1429
1430 HcfObjDestroy(keyPair);
1431 HcfObjDestroy(generator);
1432 }
1433
1434 // test getEncodedPem X25519 pubkey and prikey
1435 HWTEST_F(CryptoRsaAsyKeyPemTest, CryptoRsaAsyKeyPemErrorTest010, TestSize.Level0)
1436 {
1437 HcfAsyKeyGenerator *generator = nullptr;
1438 int32_t res = HcfAsyKeyGeneratorCreate("X25519", &generator);
1439 ASSERT_EQ(res, HCF_SUCCESS);
1440 ASSERT_NE(generator, nullptr);
1441
1442 HcfKeyPair *keyPair = nullptr;
1443 res = generator->generateKeyPair(generator, nullptr, &keyPair);
1444 ASSERT_EQ(res, HCF_SUCCESS);
1445 ASSERT_NE(keyPair, nullptr);
1446 HcfPubKey *pubkey = keyPair->pubKey;
1447 char *retStr = nullptr;
1448 res = pubkey->base.getEncodedPem((HcfKey *)pubkey, "PKCS1", &retStr);
1449 EXPECT_NE(res, HCF_SUCCESS);
1450 EXPECT_EQ(retStr, nullptr);
1451 res = pubkey->base.getEncodedPem((HcfKey *)pubkey, "X509", &retStr);
1452 EXPECT_NE(res, HCF_SUCCESS);
1453 EXPECT_EQ(retStr, nullptr);
1454
1455 HcfPriKey *prikey = keyPair->priKey;
1456 res = prikey->base.getEncodedPem((HcfKey *)prikey, "PKCS1", &retStr);
1457 EXPECT_NE(res, HCF_SUCCESS);
1458 EXPECT_EQ(retStr, nullptr);
1459 res = prikey->base.getEncodedPem((HcfKey *)prikey, "PKCS8", &retStr);
1460 EXPECT_NE(res, HCF_SUCCESS);
1461 EXPECT_EQ(retStr, nullptr);
1462
1463 HcfObjDestroy(keyPair);
1464 HcfObjDestroy(generator);
1465 }
1466
1467 // test getEncodedPem dh pubkey and prikey
1468 HWTEST_F(CryptoRsaAsyKeyPemTest, CryptoRsaAsyKeyPemErrorTest011, TestSize.Level0)
1469 {
1470 HcfAsyKeyGenerator *generator = nullptr;
1471 int32_t res = HcfAsyKeyGeneratorCreate("DH_modp1536", &generator);
1472 ASSERT_EQ(res, HCF_SUCCESS);
1473 ASSERT_NE(generator, nullptr);
1474
1475 HcfKeyPair *keyPair = nullptr;
1476 res = generator->generateKeyPair(generator, nullptr, &keyPair);
1477 ASSERT_EQ(res, HCF_SUCCESS);
1478 ASSERT_NE(keyPair, nullptr);
1479 HcfPubKey *pubkey = keyPair->pubKey;
1480 char *retStr = nullptr;
1481 res = pubkey->base.getEncodedPem((HcfKey *)pubkey, "PKCS1", &retStr);
1482 EXPECT_NE(res, HCF_SUCCESS);
1483 EXPECT_EQ(retStr, nullptr);
1484 res = pubkey->base.getEncodedPem((HcfKey *)pubkey, "X509", &retStr);
1485 EXPECT_NE(res, HCF_SUCCESS);
1486 EXPECT_EQ(retStr, nullptr);
1487
1488 HcfPriKey *prikey = keyPair->priKey;
1489 res = prikey->base.getEncodedPem((HcfKey *)prikey, "PKCS1", &retStr);
1490 EXPECT_NE(res, HCF_SUCCESS);
1491 EXPECT_EQ(retStr, nullptr);
1492 res = prikey->base.getEncodedPem((HcfKey *)prikey, "PKCS8", &retStr);
1493 EXPECT_NE(res, HCF_SUCCESS);
1494 EXPECT_EQ(retStr, nullptr);
1495
1496 HcfObjDestroy(keyPair);
1497 HcfObjDestroy(generator);
1498 }
1499
1500 // test engineConvertPemKey Pubkey and Prikey 2048
1501 HWTEST_F(CryptoRsaAsyKeyPemTest, CryptoRsaAsyKeyPemSpiTest001, TestSize.Level0)
1502 {
1503 HcfAsyKeyGeneratorSpi *spiObj = nullptr;
1504 HcfAsyKeyGenParams params = {
1505 .algo = HCF_ALG_RSA,
1506 .bits = OPENSSL_RSA_KEY_SIZE_2048,
1507 .primes = 0,
1508 };
1509
1510 HcfResult res = HcfAsyKeyGeneratorSpiRsaCreate(¶ms, &spiObj);
1511
1512 EXPECT_EQ(res, HCF_SUCCESS);
1513 EXPECT_NE(spiObj, nullptr);
1514
1515 HcfKeyPair *keyPair = nullptr;
1516 res = spiObj->engineConvertPemKey(spiObj, nullptr, g_testPubkeyPkcs1Str2048.c_str(),
1517 g_testPrikeyPkcs1Str2048.c_str(), &keyPair);
1518 EXPECT_EQ(res, HCF_SUCCESS);
1519
1520 HcfPubKey *pubkey = keyPair->pubKey;
1521 char *retStr = nullptr;
1522 res = pubkey->base.getEncodedPem((HcfKey *)pubkey, "PKCS1", &retStr);
1523 EXPECT_EQ(res, HCF_SUCCESS);
1524 int32_t cmpRes = strcmp(retStr, g_testPubkeyPkcs1Str2048.c_str());
1525 EXPECT_EQ(cmpRes, HCF_SUCCESS);
1526
1527 retStr = nullptr;
1528 res = pubkey->base.getEncodedPem((HcfKey *)pubkey, "X509", &retStr);
1529 EXPECT_EQ(res, HCF_SUCCESS);
1530 cmpRes = strcmp(retStr, g_testPubkeyX509Str2048.c_str());
1531 EXPECT_EQ(cmpRes, HCF_SUCCESS);
1532
1533 HcfPriKey *prikey = keyPair->priKey;
1534 retStr = nullptr;
1535 res = prikey->base.getEncodedPem((HcfKey *)prikey, "PKCS1", &retStr);
1536 EXPECT_EQ(res, HCF_SUCCESS);
1537 cmpRes = strcmp(retStr, g_testPrikeyPkcs1Str2048.c_str());
1538 EXPECT_EQ(cmpRes, HCF_SUCCESS);
1539
1540 retStr = nullptr;
1541 res = prikey->base.getEncodedPem((HcfKey *)prikey, "PKCS8", &retStr);
1542 EXPECT_EQ(res, HCF_SUCCESS);
1543 cmpRes = strcmp(retStr, g_testPrikeyPkcs8Str2048.c_str());
1544 EXPECT_EQ(cmpRes, HCF_SUCCESS);
1545
1546 HcfFree(retStr);
1547 HcfObjDestroy(keyPair);
1548 HcfObjDestroy(spiObj);
1549 }
1550
1551 // test engineConvertPemKey Pubkey and Prikey 1024
1552 HWTEST_F(CryptoRsaAsyKeyPemTest, CryptoRsaAsyKeyPemSpiTest002, TestSize.Level0)
1553 {
1554 HcfAsyKeyGeneratorSpi *spiObj = nullptr;
1555 HcfAsyKeyGenParams params = {
1556 .algo = HCF_ALG_RSA,
1557 .bits = OPENSSL_RSA_KEY_SIZE_1024,
1558 .primes = 0,
1559 };
1560
1561 HcfResult res = HcfAsyKeyGeneratorSpiRsaCreate(¶ms, &spiObj);
1562
1563 EXPECT_EQ(res, HCF_SUCCESS);
1564 EXPECT_NE(spiObj, nullptr);
1565
1566 HcfKeyPair *keyPair = nullptr;
1567 res = spiObj->engineConvertPemKey(spiObj, nullptr, g_testPubkeyPkcs1Str1024.c_str(),
1568 g_testPrikeyPkcs1Str1024.c_str(), &keyPair);
1569 EXPECT_EQ(res, HCF_SUCCESS);
1570
1571 HcfPubKey *pubkey = keyPair->pubKey;
1572 char *retStr = nullptr;
1573 res = pubkey->base.getEncodedPem((HcfKey *)pubkey, "PKCS1", &retStr);
1574 EXPECT_EQ(res, HCF_SUCCESS);
1575 int32_t cmpRes = strcmp(retStr, g_testPubkeyPkcs1Str1024.c_str());
1576 EXPECT_EQ(cmpRes, HCF_SUCCESS);
1577
1578 retStr = nullptr;
1579 res = pubkey->base.getEncodedPem((HcfKey *)pubkey, "X509", &retStr);
1580 EXPECT_EQ(res, HCF_SUCCESS);
1581 cmpRes = strcmp(retStr, g_testPubkeyX509Str1024.c_str());
1582 EXPECT_EQ(cmpRes, HCF_SUCCESS);
1583
1584 HcfPriKey *prikey = keyPair->priKey;
1585 retStr = nullptr;
1586 res = prikey->base.getEncodedPem((HcfKey *)prikey, "PKCS1", &retStr);
1587 EXPECT_EQ(res, HCF_SUCCESS);
1588 cmpRes = strcmp(retStr, g_testPrikeyPkcs1Str1024.c_str());
1589 EXPECT_EQ(cmpRes, HCF_SUCCESS);
1590
1591 retStr = nullptr;
1592 res = prikey->base.getEncodedPem((HcfKey *)prikey, "PKCS8", &retStr);
1593 EXPECT_EQ(res, HCF_SUCCESS);
1594 cmpRes = strcmp(retStr, g_testPrikeyPkcs8Str1024.c_str());
1595 EXPECT_EQ(cmpRes, HCF_SUCCESS);
1596
1597 HcfFree(retStr);
1598 HcfObjDestroy(keyPair);
1599 HcfObjDestroy(spiObj);
1600 }
1601
1602 // test engineConvertPemKey param is invalid
1603 HWTEST_F(CryptoRsaAsyKeyPemTest, CryptoRsaAsyKeyPemSpiErrorTest001, TestSize.Level0)
1604 {
1605 HcfAsyKeyGeneratorSpi *spiObj = nullptr;
1606 HcfAsyKeyGenParams params = {
1607 .algo = HCF_ALG_RSA,
1608 .bits = OPENSSL_RSA_KEY_SIZE_1024,
1609 .primes = 0,
1610 };
1611
1612 HcfResult res = HcfAsyKeyGeneratorSpiRsaCreate(¶ms, &spiObj);
1613
1614 EXPECT_EQ(res, HCF_SUCCESS);
1615 EXPECT_NE(spiObj, nullptr);
1616
1617 HcfKeyPair *keyPair = nullptr;
1618 res = spiObj->engineConvertPemKey(nullptr, nullptr, g_testPubkeyPkcs1Str1024.c_str(),
1619 g_testPrikeyPkcs1Str1024.c_str(), &keyPair);
1620 EXPECT_NE(res, HCF_SUCCESS);
1621
1622 res = spiObj->engineConvertPemKey(spiObj, nullptr, nullptr, nullptr, &keyPair);
1623 EXPECT_NE(res, HCF_SUCCESS);
1624
1625 res = spiObj->engineConvertPemKey(spiObj, nullptr, g_testPubkeyPkcs1Str1024.c_str(),
1626 g_testPrikeyPkcs1Str1024.c_str(), nullptr);
1627 EXPECT_NE(res, HCF_SUCCESS);
1628
1629 HcfObjDestroy(spiObj);
1630 }
1631
1632 HWTEST_F(CryptoRsaAsyKeyPemTest, CryptoRsaAsyKeySpecApiTest, TestSize.Level0)
1633 {
1634 HcfAsyKeyGenerator *generator = nullptr;
1635 int32_t res = HcfAsyKeyGeneratorCreate("Ed25519", &generator);
1636 ASSERT_EQ(res, HCF_SUCCESS);
1637 ASSERT_NE(generator, nullptr);
1638
1639 HcfKeyPair *keyPair = nullptr;
1640 res = generator->generateKeyPair(generator, nullptr, &keyPair);
1641 ASSERT_EQ(res, HCF_SUCCESS);
1642 ASSERT_NE(keyPair, nullptr);
1643
1644 HcfPriKey *prikey = keyPair->priKey;
1645 char *retStr = nullptr;
1646 res = prikey->getAsyKeySpecString(prikey, RSA_N_BN, &retStr);
1647 ASSERT_EQ(res, HCF_NOT_SUPPORT);
1648 ASSERT_EQ(retStr, nullptr);
1649
1650 int32_t returnInt = 0;
1651 res = prikey->getAsyKeySpecInt(prikey, RSA_N_BN, &returnInt);
1652 ASSERT_EQ(res, HCF_NOT_SUPPORT);
1653 ASSERT_EQ(returnInt, 0);
1654
1655 HcfBigInteger retBigInt = { .data = NULL, .len = 0 };
1656 res = prikey->getAsyKeySpecBigInteger(prikey, RSA_N_BN, &retBigInt);
1657 ASSERT_EQ(res, HCF_INVALID_PARAMS);
1658 ASSERT_EQ(retBigInt.data, nullptr);
1659 ASSERT_EQ(retBigInt.len, 0);
1660 HcfFree(retBigInt.data);
1661
1662 HcfBlob priKeyBlob = { .data = nullptr, .len = 0 };
1663 res = prikey->getEncodedDer(keyPair->priKey, "PKCS1", &priKeyBlob);
1664 ASSERT_EQ(res, HCF_INVALID_PARAMS);
1665 ASSERT_EQ(priKeyBlob.data, nullptr);
1666 ASSERT_EQ(priKeyBlob.len, 0);
1667
1668 HcfObjDestroy(keyPair);
1669 HcfObjDestroy(generator);
1670 HcfFree(priKeyBlob.data);
1671 }
1672 }
1673