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