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