2 * QEMU Crypto cipher algorithms
4 * Copyright (c) 2022 Bytedance
5 * Author: lei he <helei.sig11@bytedance.com>
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, see <http://www.gnu.org/licenses/>.
22 #include "qemu/osdep.h"
24 #include "crypto/init.h"
25 #include "crypto/akcipher.h"
26 #include "qapi/error.h"
28 static const uint8_t rsa1024_private_key[] = {
29 0x30, 0x82, 0x02, 0x5c, 0x02, 0x01, 0x00, 0x02,
30 0x81, 0x81, 0x00, 0xe6, 0x4d, 0x76, 0x4f, 0xb2,
31 0x97, 0x09, 0xad, 0x9d, 0x17, 0x33, 0xf2, 0x30,
32 0x42, 0x83, 0xa9, 0xcb, 0x49, 0xa4, 0x2e, 0x59,
33 0x5e, 0x75, 0x51, 0xd1, 0xac, 0xc8, 0x86, 0x3e,
34 0xdb, 0x72, 0x2e, 0xb2, 0xf7, 0xc3, 0x5b, 0xc7,
35 0xea, 0xed, 0x30, 0xd1, 0xf7, 0x37, 0xee, 0x9d,
36 0x36, 0x59, 0x6f, 0xf8, 0xce, 0xc0, 0x5c, 0x82,
37 0x80, 0x37, 0x83, 0xd7, 0x45, 0x6a, 0xe9, 0xea,
38 0xc5, 0x3a, 0x59, 0x6b, 0x34, 0x31, 0x44, 0x00,
39 0x74, 0xa7, 0x29, 0xab, 0x79, 0x4a, 0xbd, 0xe8,
40 0x25, 0x35, 0x01, 0x11, 0x40, 0xbf, 0x31, 0xbd,
41 0xd3, 0xe0, 0x68, 0x1e, 0xd5, 0x5b, 0x2f, 0xe9,
42 0x20, 0xf2, 0x9f, 0x46, 0x35, 0x30, 0xa8, 0xf1,
43 0xfe, 0xef, 0xd8, 0x76, 0x23, 0x46, 0x34, 0x70,
44 0xa1, 0xce, 0xc6, 0x65, 0x6d, 0xb0, 0x94, 0x7e,
45 0xe5, 0x92, 0x45, 0x7b, 0xaa, 0xbb, 0x95, 0x97,
46 0x77, 0xcd, 0xd3, 0x02, 0x03, 0x01, 0x00, 0x01,
47 0x02, 0x81, 0x80, 0x30, 0x6a, 0xc4, 0x9e, 0xc8,
48 0xba, 0xfc, 0x2b, 0xe5, 0xc4, 0xc5, 0x04, 0xfb,
49 0xa4, 0x60, 0x2d, 0xc8, 0x31, 0x39, 0x35, 0x0d,
50 0x50, 0xd0, 0x75, 0x5d, 0x11, 0x68, 0x2e, 0xe0,
51 0xf4, 0x1d, 0xb3, 0x37, 0xa8, 0xe3, 0x07, 0x5e,
52 0xa6, 0x43, 0x2b, 0x6a, 0x59, 0x01, 0x07, 0x47,
53 0x41, 0xef, 0xd7, 0x9c, 0x85, 0x4a, 0xe7, 0xa7,
54 0xff, 0xf0, 0xab, 0xe5, 0x0c, 0x11, 0x08, 0x10,
55 0x75, 0x5a, 0x68, 0xa0, 0x08, 0x03, 0xc9, 0x40,
56 0x79, 0x67, 0x1d, 0x65, 0x89, 0x2d, 0x08, 0xf9,
57 0xb5, 0x1b, 0x7d, 0xd2, 0x41, 0x3b, 0x33, 0xf2,
58 0x47, 0x2f, 0x9c, 0x0b, 0xd5, 0xaf, 0xcb, 0xdb,
59 0xbb, 0x37, 0x63, 0x03, 0xf8, 0xe7, 0x2e, 0xc7,
60 0x3c, 0x86, 0x9f, 0xc2, 0x9b, 0xb4, 0x70, 0x6a,
61 0x4d, 0x7c, 0xe4, 0x1b, 0x3a, 0xa9, 0xae, 0xd7,
62 0xce, 0x7f, 0x56, 0xc2, 0x73, 0x5e, 0x58, 0x63,
63 0xd5, 0x86, 0x41, 0x02, 0x41, 0x00, 0xf6, 0x56,
64 0x69, 0xec, 0xef, 0x65, 0x95, 0xdc, 0x25, 0x47,
65 0xe0, 0x6f, 0xb0, 0x4f, 0x79, 0x77, 0x0a, 0x5e,
66 0x46, 0xcb, 0xbd, 0x0b, 0x71, 0x51, 0x2a, 0xa4,
67 0x65, 0x29, 0x18, 0xc6, 0x30, 0xa0, 0x95, 0x4c,
68 0x4b, 0xbe, 0x8c, 0x40, 0xe3, 0x9c, 0x23, 0x02,
69 0x14, 0x43, 0xe9, 0x64, 0xea, 0xe3, 0xa8, 0xe2,
70 0x1a, 0xd5, 0xf9, 0x5c, 0xe0, 0x36, 0x2c, 0x97,
71 0xda, 0xd5, 0xc7, 0x46, 0xce, 0x11, 0x02, 0x41,
72 0x00, 0xef, 0x56, 0x08, 0xb8, 0x29, 0xa5, 0xa6,
73 0x7c, 0xf7, 0x5f, 0xb4, 0xf5, 0x63, 0xe7, 0xeb,
74 0x45, 0xfd, 0x89, 0xaa, 0x94, 0xa6, 0x3d, 0x0b,
75 0xd9, 0x04, 0x6f, 0x78, 0xe0, 0xbb, 0xa2, 0xd4,
76 0x29, 0x83, 0x17, 0x95, 0x6f, 0x50, 0x3d, 0x40,
77 0x5d, 0xe5, 0x24, 0xda, 0xc2, 0x23, 0x50, 0x86,
78 0xa8, 0x34, 0xc8, 0x6f, 0xec, 0x7f, 0xb6, 0x45,
79 0x3a, 0xdd, 0x78, 0x9b, 0xee, 0xa1, 0xe4, 0x09,
80 0xa3, 0x02, 0x40, 0x5c, 0xd6, 0x66, 0x67, 0x58,
81 0x35, 0xc5, 0xcb, 0xc8, 0xf5, 0x14, 0xbd, 0xa3,
82 0x09, 0xe0, 0xb2, 0x1f, 0x63, 0x36, 0x75, 0x34,
83 0x52, 0xea, 0xaa, 0xf7, 0x52, 0x2b, 0x99, 0xd8,
84 0x6f, 0x61, 0x06, 0x34, 0x1e, 0x23, 0xf1, 0xb5,
85 0x34, 0x03, 0x53, 0xe5, 0xd1, 0xb3, 0xc7, 0x80,
86 0x5f, 0x7b, 0x32, 0xbf, 0x84, 0x2f, 0x2e, 0xf3,
87 0x22, 0xb0, 0x91, 0x5a, 0x2f, 0x04, 0xd7, 0x4a,
88 0x9a, 0x01, 0xb1, 0x02, 0x40, 0x34, 0x0b, 0x26,
89 0x4c, 0x3d, 0xaa, 0x2a, 0xc0, 0xe3, 0xdd, 0xe8,
90 0xf0, 0xaf, 0x6f, 0xe0, 0x06, 0x51, 0x32, 0x9d,
91 0x68, 0x43, 0x99, 0xe4, 0xb8, 0xa5, 0x31, 0x44,
92 0x3c, 0xc2, 0x30, 0x8f, 0x28, 0x13, 0xbc, 0x8e,
93 0x1f, 0x2d, 0x78, 0x94, 0x45, 0x96, 0xad, 0x63,
94 0xf0, 0x71, 0x53, 0x72, 0x64, 0xa3, 0x4d, 0xae,
95 0xa0, 0xe3, 0xc8, 0x93, 0xd7, 0x50, 0x0f, 0x89,
96 0x00, 0xe4, 0x2d, 0x3d, 0x37, 0x02, 0x41, 0x00,
97 0xbe, 0xa6, 0x08, 0xe0, 0xc8, 0x15, 0x2a, 0x47,
98 0xcb, 0xd5, 0xec, 0x93, 0xd3, 0xaa, 0x12, 0x82,
99 0xaf, 0xac, 0x51, 0x5a, 0x5b, 0xa7, 0x93, 0x4b,
100 0xb9, 0xab, 0x00, 0xfa, 0x5a, 0xea, 0x34, 0xe4,
101 0x80, 0xf1, 0x44, 0x6a, 0x65, 0xe4, 0x33, 0x99,
102 0xfb, 0x54, 0xd7, 0x89, 0x5a, 0x1b, 0xd6, 0x2b,
103 0xcc, 0x6e, 0x4b, 0x19, 0xa0, 0x6d, 0x93, 0x9f,
104 0xc3, 0x91, 0x7a, 0xa5, 0xd8, 0x59, 0x0e, 0x9e,
107 static const uint8_t rsa1024_public_key[] = {
108 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xe6,
109 0x4d, 0x76, 0x4f, 0xb2, 0x97, 0x09, 0xad, 0x9d,
110 0x17, 0x33, 0xf2, 0x30, 0x42, 0x83, 0xa9, 0xcb,
111 0x49, 0xa4, 0x2e, 0x59, 0x5e, 0x75, 0x51, 0xd1,
112 0xac, 0xc8, 0x86, 0x3e, 0xdb, 0x72, 0x2e, 0xb2,
113 0xf7, 0xc3, 0x5b, 0xc7, 0xea, 0xed, 0x30, 0xd1,
114 0xf7, 0x37, 0xee, 0x9d, 0x36, 0x59, 0x6f, 0xf8,
115 0xce, 0xc0, 0x5c, 0x82, 0x80, 0x37, 0x83, 0xd7,
116 0x45, 0x6a, 0xe9, 0xea, 0xc5, 0x3a, 0x59, 0x6b,
117 0x34, 0x31, 0x44, 0x00, 0x74, 0xa7, 0x29, 0xab,
118 0x79, 0x4a, 0xbd, 0xe8, 0x25, 0x35, 0x01, 0x11,
119 0x40, 0xbf, 0x31, 0xbd, 0xd3, 0xe0, 0x68, 0x1e,
120 0xd5, 0x5b, 0x2f, 0xe9, 0x20, 0xf2, 0x9f, 0x46,
121 0x35, 0x30, 0xa8, 0xf1, 0xfe, 0xef, 0xd8, 0x76,
122 0x23, 0x46, 0x34, 0x70, 0xa1, 0xce, 0xc6, 0x65,
123 0x6d, 0xb0, 0x94, 0x7e, 0xe5, 0x92, 0x45, 0x7b,
124 0xaa, 0xbb, 0x95, 0x97, 0x77, 0xcd, 0xd3, 0x02,
125 0x03, 0x01, 0x00, 0x01,
128 static const uint8_t rsa2048_private_key[] = {
129 0x30, 0x82, 0x04, 0xa4, 0x02, 0x01, 0x00, 0x02,
130 0x82, 0x01, 0x01, 0x00, 0xbd, 0x9c, 0x83, 0x6b,
131 0x0e, 0x8e, 0xcf, 0xfa, 0xaa, 0x4f, 0x6a, 0xf4,
132 0xe3, 0x52, 0x0f, 0xa5, 0xd0, 0xbe, 0x5e, 0x7f,
133 0x08, 0x24, 0xba, 0x87, 0x46, 0xfb, 0x28, 0x93,
134 0xe5, 0xe5, 0x81, 0x42, 0xc0, 0xf9, 0x17, 0xc7,
135 0x81, 0x01, 0xf4, 0x18, 0x6a, 0x17, 0xf5, 0x57,
136 0x20, 0x37, 0xcf, 0xf9, 0x74, 0x5e, 0xe1, 0x48,
137 0x6a, 0x71, 0x0a, 0x0f, 0x79, 0x72, 0x2b, 0x46,
138 0x10, 0x53, 0xdc, 0x14, 0x43, 0xbd, 0xbc, 0x6d,
139 0x15, 0x6f, 0x15, 0x4e, 0xf0, 0x0d, 0x89, 0x39,
140 0x02, 0xc3, 0x68, 0x5c, 0xa8, 0xfc, 0xed, 0x64,
141 0x9d, 0x98, 0xb7, 0xcd, 0x83, 0x66, 0x93, 0xc3,
142 0xd9, 0x57, 0xa0, 0x21, 0x93, 0xad, 0x5c, 0x75,
143 0x69, 0x88, 0x9e, 0x81, 0xdc, 0x7f, 0x1d, 0xd5,
144 0xbd, 0x1c, 0xc1, 0x30, 0x56, 0xa5, 0xda, 0x99,
145 0x46, 0xa6, 0x6d, 0x0e, 0x6f, 0x5e, 0x51, 0x34,
146 0x49, 0x73, 0xc3, 0x67, 0x49, 0x7e, 0x21, 0x2a,
147 0x20, 0xa7, 0x2b, 0x92, 0x73, 0x1d, 0xa5, 0x25,
148 0x2a, 0xd0, 0x3a, 0x89, 0x75, 0xb2, 0xbb, 0x19,
149 0x37, 0x78, 0x48, 0xd2, 0xf2, 0x2a, 0x6d, 0x9e,
150 0xc6, 0x26, 0xca, 0x46, 0x8c, 0xf1, 0x42, 0x2a,
151 0x31, 0xb2, 0xfc, 0xe7, 0x55, 0x51, 0xff, 0x07,
152 0x13, 0x5b, 0x36, 0x59, 0x2b, 0x43, 0x30, 0x4b,
153 0x05, 0x5c, 0xd2, 0x45, 0xa0, 0xa0, 0x7c, 0x17,
154 0x5b, 0x07, 0xbb, 0x5d, 0x83, 0x80, 0x92, 0x6d,
155 0x87, 0x1a, 0x43, 0xac, 0xc7, 0x6b, 0x8d, 0x11,
156 0x60, 0x27, 0xd2, 0xdf, 0xdb, 0x71, 0x02, 0x55,
157 0x6e, 0xb5, 0xca, 0x4d, 0xda, 0x59, 0x0d, 0xb8,
158 0x8c, 0xcd, 0xd3, 0x0e, 0x55, 0xa0, 0xa4, 0x8d,
159 0xa0, 0x14, 0x10, 0x48, 0x42, 0x35, 0x56, 0x08,
160 0xf7, 0x29, 0x5f, 0xa2, 0xea, 0xa4, 0x5e, 0x8e,
161 0x99, 0x56, 0xaa, 0x5a, 0x8c, 0x23, 0x8f, 0x35,
162 0x22, 0x8a, 0xff, 0xed, 0x02, 0x03, 0x01, 0x00,
163 0x01, 0x02, 0x82, 0x01, 0x00, 0x4e, 0x4a, 0xf3,
164 0x44, 0xe0, 0x64, 0xfd, 0xe1, 0xde, 0x33, 0x1e,
165 0xd1, 0xf1, 0x8f, 0x6f, 0xe0, 0xa2, 0xfa, 0x08,
166 0x60, 0xe1, 0xc6, 0xf0, 0xb2, 0x6d, 0x0f, 0xc6,
167 0x28, 0x93, 0xb4, 0x19, 0x94, 0xab, 0xc3, 0xef,
168 0x1a, 0xb4, 0xdd, 0x4e, 0xa2, 0x4a, 0x24, 0x8c,
169 0x6c, 0xa6, 0x64, 0x05, 0x5f, 0x56, 0xba, 0xda,
170 0xc1, 0x21, 0x1a, 0x7d, 0xf1, 0xf7, 0xce, 0xb9,
171 0xa9, 0x9b, 0x92, 0x54, 0xfc, 0x95, 0x20, 0x22,
172 0x4e, 0xd4, 0x9b, 0xe2, 0xab, 0x8e, 0x99, 0xb8,
173 0x40, 0xaf, 0x30, 0x6a, 0xc6, 0x60, 0x0c, 0xd8,
174 0x25, 0x44, 0xa1, 0xcb, 0xbb, 0x73, 0x77, 0x86,
175 0xaa, 0x46, 0xf3, 0x54, 0xae, 0xa8, 0xa0, 0xdb,
176 0xdd, 0xab, 0x6e, 0xfb, 0x2c, 0x5a, 0x14, 0xaf,
177 0x08, 0x13, 0xa7, 0x6c, 0xe9, 0xfd, 0xcd, 0x4c,
178 0x1f, 0x20, 0x3a, 0x16, 0x2b, 0xf0, 0xb6, 0x7c,
179 0x47, 0x5f, 0xd1, 0x0a, 0x2c, 0xc4, 0xa5, 0x68,
180 0xd0, 0x43, 0x75, 0x6b, 0x65, 0xaa, 0x32, 0xc6,
181 0x99, 0x06, 0xcb, 0x8f, 0xe6, 0x8d, 0xce, 0xbf,
182 0x4d, 0x0d, 0x7b, 0x22, 0x2a, 0x8a, 0xcb, 0x7d,
183 0x7f, 0x16, 0x48, 0x85, 0xf1, 0x86, 0xcb, 0x54,
184 0xb9, 0x39, 0xd4, 0xbc, 0xe3, 0x2d, 0x27, 0x59,
185 0xf6, 0x81, 0x5e, 0x94, 0x45, 0xdf, 0xb9, 0x22,
186 0xaf, 0x64, 0x0d, 0x14, 0xec, 0x8c, 0xeb, 0x71,
187 0xac, 0xee, 0x09, 0x4c, 0xbf, 0x34, 0xf9, 0xf4,
188 0x66, 0x77, 0x36, 0x3b, 0x41, 0x74, 0x01, 0x4f,
189 0xfc, 0x56, 0x83, 0xba, 0x14, 0xb0, 0x2f, 0xdd,
190 0x4d, 0xb9, 0x3f, 0xdf, 0x71, 0xbe, 0x7b, 0xba,
191 0x66, 0xc8, 0xc5, 0x42, 0xc9, 0xba, 0x18, 0x63,
192 0x45, 0x07, 0x2f, 0x84, 0x3e, 0xc3, 0xfb, 0x47,
193 0xda, 0xd4, 0x1d, 0x0e, 0x9d, 0x96, 0xc0, 0xea,
194 0xee, 0x45, 0x2f, 0xe1, 0x62, 0x23, 0xee, 0xef,
195 0x3d, 0x5e, 0x55, 0xa1, 0x0d, 0x02, 0x81, 0x81,
196 0x00, 0xeb, 0x76, 0x88, 0xd3, 0xae, 0x3f, 0x1d,
197 0xf2, 0x49, 0xe0, 0x37, 0x49, 0x83, 0x82, 0x6c,
198 0xf7, 0xf1, 0x17, 0x30, 0x75, 0x2e, 0x89, 0x06,
199 0x88, 0x56, 0x32, 0xf6, 0xfa, 0x58, 0xcb, 0x3c,
200 0x98, 0x67, 0xc3, 0xde, 0x10, 0x82, 0xe5, 0xfa,
201 0xfa, 0x52, 0x47, 0x8d, 0xd7, 0x00, 0xc6, 0xcb,
202 0xf7, 0xf6, 0x57, 0x9b, 0x6e, 0x0c, 0xac, 0xe8,
203 0x3b, 0xd1, 0xde, 0xb5, 0x34, 0xaf, 0x8b, 0x2a,
204 0xb0, 0x2d, 0x01, 0xeb, 0x7c, 0xa0, 0x42, 0x26,
205 0xbb, 0x2b, 0x43, 0x0e, 0x1d, 0xe2, 0x4e, 0xc9,
206 0xc1, 0x0a, 0x67, 0x1d, 0xfc, 0x83, 0x25, 0xce,
207 0xb2, 0x18, 0xd9, 0x0d, 0x70, 0xf5, 0xa3, 0x5a,
208 0x9c, 0x99, 0xdd, 0x47, 0xa1, 0x57, 0xe7, 0x20,
209 0xde, 0xa1, 0x29, 0x8d, 0x96, 0x62, 0xf9, 0x26,
210 0x95, 0x51, 0xa6, 0xe7, 0x09, 0x8b, 0xba, 0x16,
211 0x8b, 0x19, 0x5b, 0xf9, 0x27, 0x0d, 0xc5, 0xd6,
212 0x5f, 0x02, 0x81, 0x81, 0x00, 0xce, 0x26, 0x31,
213 0xb5, 0x43, 0x53, 0x95, 0x39, 0xdd, 0x01, 0x98,
214 0x8b, 0x3d, 0x27, 0xeb, 0x0b, 0x87, 0x1c, 0x95,
215 0xfc, 0x3e, 0x36, 0x51, 0x31, 0xb5, 0xea, 0x59,
216 0x56, 0xc0, 0x97, 0x62, 0xf0, 0x63, 0x2b, 0xb6,
217 0x30, 0x9b, 0xdf, 0x19, 0x10, 0xe9, 0xa0, 0x3d,
218 0xea, 0x54, 0x5a, 0xe6, 0xc6, 0x9e, 0x7e, 0xb5,
219 0xf0, 0xb0, 0x54, 0xef, 0xc3, 0xe1, 0x47, 0xa6,
220 0x95, 0xc7, 0xe4, 0xa3, 0x4a, 0x30, 0x68, 0x24,
221 0x98, 0x7d, 0xc1, 0x34, 0xa9, 0xcb, 0xbc, 0x3c,
222 0x08, 0x9c, 0x7d, 0x0c, 0xa2, 0xb7, 0x60, 0xaa,
223 0x38, 0x08, 0x16, 0xa6, 0x7f, 0xdb, 0xd2, 0xb1,
224 0x67, 0xe7, 0x93, 0x8e, 0xbb, 0x7e, 0xb9, 0xb5,
225 0xd0, 0xd0, 0x9f, 0x7b, 0xcc, 0x46, 0xe6, 0x74,
226 0x78, 0x1a, 0x96, 0xd6, 0xd7, 0x74, 0x34, 0x54,
227 0x3b, 0x54, 0x55, 0x7f, 0x89, 0x81, 0xbc, 0x40,
228 0x55, 0x87, 0x24, 0x95, 0x33, 0x02, 0x81, 0x81,
229 0x00, 0xb0, 0x18, 0x5d, 0x2a, 0x1a, 0x95, 0x9f,
230 0x9a, 0xd5, 0x3f, 0x37, 0x79, 0xe6, 0x3d, 0x83,
231 0xab, 0x46, 0x86, 0x36, 0x3a, 0x5d, 0x0c, 0x23,
232 0x73, 0x91, 0x2b, 0xda, 0x63, 0xce, 0x46, 0x68,
233 0xd1, 0xfe, 0x40, 0x90, 0xf2, 0x3e, 0x43, 0x2b,
234 0x19, 0x4c, 0xb1, 0xb0, 0xd5, 0x8c, 0x02, 0x21,
235 0x07, 0x18, 0x17, 0xda, 0xe9, 0x49, 0xd7, 0x82,
236 0x73, 0x42, 0x78, 0xd1, 0x82, 0x4e, 0x8a, 0xc0,
237 0xe9, 0x33, 0x2f, 0xcd, 0x62, 0xce, 0x23, 0xca,
238 0xfd, 0x8d, 0xd4, 0x3f, 0x59, 0x80, 0x27, 0xb6,
239 0x61, 0x85, 0x9b, 0x2a, 0xe4, 0xef, 0x5c, 0x36,
240 0x22, 0x21, 0xcd, 0x2a, 0x6d, 0x41, 0x77, 0xe2,
241 0xcb, 0x5d, 0x93, 0x0d, 0x00, 0x10, 0x52, 0x8d,
242 0xd5, 0x92, 0x28, 0x16, 0x78, 0xd3, 0x1a, 0x4c,
243 0x8d, 0xbd, 0x9c, 0x1a, 0x0b, 0x9c, 0x91, 0x16,
244 0x4c, 0xff, 0x31, 0x36, 0xbb, 0xcb, 0x64, 0x1a,
245 0xf7, 0x02, 0x81, 0x80, 0x32, 0x65, 0x09, 0xdf,
246 0xca, 0xee, 0xa2, 0xdb, 0x3b, 0x58, 0xc9, 0x86,
247 0xb8, 0x53, 0x8a, 0xd5, 0x0d, 0x99, 0x82, 0x5c,
248 0xe0, 0x84, 0x7c, 0xc2, 0xcf, 0x3a, 0xd3, 0xce,
249 0x2e, 0x54, 0x93, 0xbe, 0x3a, 0x30, 0x14, 0x60,
250 0xbb, 0xaa, 0x05, 0x41, 0xaa, 0x2b, 0x1f, 0x17,
251 0xaa, 0xb9, 0x72, 0x12, 0xf9, 0xe9, 0xf5, 0xe6,
252 0x39, 0xe4, 0xf9, 0x9c, 0x03, 0xf5, 0x75, 0x16,
253 0xc6, 0x7f, 0xf1, 0x1f, 0x10, 0xc8, 0x54, 0xb1,
254 0xe6, 0x84, 0x15, 0xb0, 0xb0, 0x7a, 0x7a, 0x9e,
255 0x8c, 0x4a, 0xd1, 0x8c, 0xf1, 0x91, 0x32, 0xeb,
256 0x71, 0xa6, 0xbf, 0xdb, 0x1f, 0xcc, 0xd8, 0xcb,
257 0x92, 0xc3, 0xf2, 0xaf, 0x89, 0x22, 0x32, 0xfd,
258 0x32, 0x12, 0xda, 0xbb, 0xac, 0x55, 0x68, 0x01,
259 0x78, 0x56, 0x89, 0x7c, 0xb0, 0x0e, 0x9e, 0xcc,
260 0xc6, 0x28, 0x04, 0x7e, 0x83, 0xf5, 0x96, 0x30,
261 0x92, 0x51, 0xf2, 0x1b, 0x02, 0x81, 0x81, 0x00,
262 0x83, 0x6d, 0xd1, 0x98, 0x90, 0x41, 0x8c, 0xa7,
263 0x92, 0x83, 0xac, 0x89, 0x05, 0x0c, 0x79, 0x67,
264 0x90, 0xb6, 0xa1, 0xf3, 0x2f, 0xca, 0xf0, 0x15,
265 0xe0, 0x30, 0x58, 0xe9, 0x4f, 0xcb, 0x4c, 0x56,
266 0x56, 0x56, 0x14, 0x3f, 0x1b, 0x79, 0xb6, 0xef,
267 0x57, 0x4b, 0x28, 0xbd, 0xb0, 0xe6, 0x0c, 0x49,
268 0x4b, 0xbe, 0xe1, 0x57, 0x28, 0x2a, 0x23, 0x5e,
269 0xc4, 0xa2, 0x19, 0x4b, 0x00, 0x67, 0x78, 0xd9,
270 0x26, 0x6e, 0x17, 0x25, 0xce, 0xe4, 0xfd, 0xde,
271 0x86, 0xa8, 0x5a, 0x67, 0x47, 0x6b, 0x15, 0x09,
272 0xe1, 0xec, 0x8e, 0x62, 0x98, 0x91, 0x6f, 0xc0,
273 0x98, 0x0c, 0x70, 0x0e, 0x7d, 0xbe, 0x63, 0xbd,
274 0x12, 0x5a, 0x98, 0x1c, 0xe3, 0x0c, 0xfb, 0xc7,
275 0xfb, 0x1b, 0xbd, 0x02, 0x87, 0xcc, 0x0c, 0xbb,
276 0xc2, 0xd4, 0xb6, 0xc1, 0xa1, 0x23, 0xd3, 0x1e,
277 0x21, 0x6f, 0x48, 0xba, 0x0e, 0x2e, 0xc7, 0x42
280 static const uint8_t rsa2048_public_key[] = {
281 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01,
282 0x00, 0xbd, 0x9c, 0x83, 0x6b, 0x0e, 0x8e, 0xcf,
283 0xfa, 0xaa, 0x4f, 0x6a, 0xf4, 0xe3, 0x52, 0x0f,
284 0xa5, 0xd0, 0xbe, 0x5e, 0x7f, 0x08, 0x24, 0xba,
285 0x87, 0x46, 0xfb, 0x28, 0x93, 0xe5, 0xe5, 0x81,
286 0x42, 0xc0, 0xf9, 0x17, 0xc7, 0x81, 0x01, 0xf4,
287 0x18, 0x6a, 0x17, 0xf5, 0x57, 0x20, 0x37, 0xcf,
288 0xf9, 0x74, 0x5e, 0xe1, 0x48, 0x6a, 0x71, 0x0a,
289 0x0f, 0x79, 0x72, 0x2b, 0x46, 0x10, 0x53, 0xdc,
290 0x14, 0x43, 0xbd, 0xbc, 0x6d, 0x15, 0x6f, 0x15,
291 0x4e, 0xf0, 0x0d, 0x89, 0x39, 0x02, 0xc3, 0x68,
292 0x5c, 0xa8, 0xfc, 0xed, 0x64, 0x9d, 0x98, 0xb7,
293 0xcd, 0x83, 0x66, 0x93, 0xc3, 0xd9, 0x57, 0xa0,
294 0x21, 0x93, 0xad, 0x5c, 0x75, 0x69, 0x88, 0x9e,
295 0x81, 0xdc, 0x7f, 0x1d, 0xd5, 0xbd, 0x1c, 0xc1,
296 0x30, 0x56, 0xa5, 0xda, 0x99, 0x46, 0xa6, 0x6d,
297 0x0e, 0x6f, 0x5e, 0x51, 0x34, 0x49, 0x73, 0xc3,
298 0x67, 0x49, 0x7e, 0x21, 0x2a, 0x20, 0xa7, 0x2b,
299 0x92, 0x73, 0x1d, 0xa5, 0x25, 0x2a, 0xd0, 0x3a,
300 0x89, 0x75, 0xb2, 0xbb, 0x19, 0x37, 0x78, 0x48,
301 0xd2, 0xf2, 0x2a, 0x6d, 0x9e, 0xc6, 0x26, 0xca,
302 0x46, 0x8c, 0xf1, 0x42, 0x2a, 0x31, 0xb2, 0xfc,
303 0xe7, 0x55, 0x51, 0xff, 0x07, 0x13, 0x5b, 0x36,
304 0x59, 0x2b, 0x43, 0x30, 0x4b, 0x05, 0x5c, 0xd2,
305 0x45, 0xa0, 0xa0, 0x7c, 0x17, 0x5b, 0x07, 0xbb,
306 0x5d, 0x83, 0x80, 0x92, 0x6d, 0x87, 0x1a, 0x43,
307 0xac, 0xc7, 0x6b, 0x8d, 0x11, 0x60, 0x27, 0xd2,
308 0xdf, 0xdb, 0x71, 0x02, 0x55, 0x6e, 0xb5, 0xca,
309 0x4d, 0xda, 0x59, 0x0d, 0xb8, 0x8c, 0xcd, 0xd3,
310 0x0e, 0x55, 0xa0, 0xa4, 0x8d, 0xa0, 0x14, 0x10,
311 0x48, 0x42, 0x35, 0x56, 0x08, 0xf7, 0x29, 0x5f,
312 0xa2, 0xea, 0xa4, 0x5e, 0x8e, 0x99, 0x56, 0xaa,
313 0x5a, 0x8c, 0x23, 0x8f, 0x35, 0x22, 0x8a, 0xff,
314 0xed, 0x02, 0x03, 0x01, 0x00, 0x01
317 static const uint8_t test_sha1_dgst[] = {
318 0x3c, 0x05, 0x19, 0x34, 0x29, 0x19, 0xc7, 0xe0,
319 0x87, 0xb6, 0x24, 0xf9, 0x58, 0xac, 0xa4, 0xd4,
320 0xb2, 0xd9, 0x03, 0x9e,
323 static const uint8_t exp_signature_rsa2048_pkcs1[] = {
324 0x4e, 0x82, 0x56, 0x4c, 0x84, 0x66, 0xca, 0x1e,
325 0xc6, 0x92, 0x46, 0x20, 0x02, 0x6b, 0x64, 0x46,
326 0x15, 0x6b, 0x24, 0xf2, 0xbb, 0xfa, 0x44, 0x3c,
327 0xaf, 0x42, 0xc8, 0x41, 0xfd, 0xce, 0xed, 0x95,
328 0x34, 0xaf, 0x25, 0x09, 0xd1, 0x06, 0x94, 0xaa,
329 0x52, 0xd4, 0x29, 0xc8, 0x52, 0x34, 0x67, 0x59,
330 0x4f, 0x5a, 0xfd, 0x23, 0x30, 0x5e, 0xc7, 0x1e,
331 0xa6, 0xe0, 0x1b, 0x23, 0xca, 0x82, 0x47, 0x9a,
332 0x2e, 0x2c, 0x66, 0x45, 0x5a, 0x12, 0xa9, 0x15,
333 0xbf, 0xd6, 0xd6, 0xfa, 0x8d, 0x60, 0x99, 0x89,
334 0x91, 0x39, 0x06, 0xb7, 0xd3, 0x9a, 0xef, 0x15,
335 0x7b, 0x95, 0x87, 0x77, 0x2c, 0x41, 0xd4, 0x71,
336 0xd5, 0xdf, 0x22, 0x7b, 0x01, 0xe2, 0xc1, 0xfb,
337 0xb9, 0x4e, 0x0c, 0x9b, 0xd5, 0x04, 0xed, 0x2b,
338 0x7e, 0x73, 0x53, 0xaa, 0x33, 0x89, 0x9d, 0x95,
339 0x28, 0x8f, 0x8b, 0x80, 0x34, 0x7a, 0xea, 0xe3,
340 0x66, 0x8a, 0xa8, 0xad, 0xed, 0x91, 0x43, 0xdd,
341 0x77, 0xe5, 0xd7, 0x16, 0xda, 0xa8, 0x00, 0x29,
342 0x3f, 0x9f, 0xe0, 0x1d, 0x42, 0x9d, 0x35, 0x5d,
343 0x0f, 0xf3, 0x90, 0x27, 0x3a, 0x8c, 0x46, 0x13,
344 0x53, 0x3e, 0x3b, 0x38, 0x77, 0xf8, 0x57, 0x61,
345 0xbc, 0xc4, 0x54, 0x68, 0x48, 0xae, 0x58, 0x03,
346 0x33, 0x94, 0x3f, 0x18, 0x1e, 0xb3, 0x3f, 0x79,
347 0xa7, 0x26, 0x92, 0x5d, 0x32, 0x2a, 0xdb, 0xe6,
348 0x3a, 0xe8, 0xd7, 0xaa, 0x91, 0xfe, 0x9f, 0x06,
349 0x26, 0x68, 0x8c, 0x27, 0x31, 0xb0, 0x04, 0x9e,
350 0x94, 0x79, 0x63, 0xa1, 0xc7, 0xe8, 0x5b, 0x8c,
351 0xd3, 0xf1, 0x88, 0x58, 0x31, 0x2f, 0x4e, 0x11,
352 0x00, 0xfe, 0x29, 0xad, 0x2c, 0xa9, 0x8e, 0x63,
353 0xd8, 0x7d, 0xc5, 0xa1, 0x71, 0xfa, 0x08, 0x29,
354 0xea, 0xd6, 0x6c, 0x53, 0x00, 0x52, 0xa0, 0xed,
355 0x6b, 0x7c, 0x67, 0x50, 0x71, 0x2d, 0x96, 0x7a,
358 static const uint8_t exp_signature_rsa1024_pkcs1[] = {
359 0x6b, 0x5b, 0xbb, 0x3b, 0x1f, 0x08, 0xd8, 0xc0,
360 0x4a, 0xf1, 0x5a, 0x12, 0xc2, 0x39, 0x14, 0x65,
361 0x4f, 0xda, 0x79, 0x67, 0xf2, 0x89, 0x25, 0xad,
362 0x9e, 0x7e, 0xba, 0xa8, 0x34, 0x15, 0x03, 0xdd,
363 0x80, 0x6b, 0x01, 0xd7, 0x4a, 0xf3, 0xd6, 0xef,
364 0x1e, 0x48, 0xf3, 0xbc, 0x75, 0x1a, 0xc4, 0x2c,
365 0x90, 0x15, 0x9f, 0x21, 0x24, 0x98, 0x21, 0xef,
366 0x6d, 0x3b, 0xf3, 0x82, 0x8f, 0x8d, 0xd8, 0x48,
367 0x37, 0x16, 0x19, 0x8e, 0x3c, 0x64, 0xa0, 0x9e,
368 0xf7, 0x0c, 0xd9, 0x5c, 0xc6, 0x13, 0xc4, 0x5f,
369 0xf8, 0xf3, 0x59, 0x5b, 0xd0, 0x33, 0x95, 0x98,
370 0xde, 0x67, 0x25, 0x58, 0x46, 0xba, 0xee, 0x0f,
371 0x47, 0x7a, 0x7f, 0xd0, 0xe4, 0x77, 0x09, 0x17,
372 0xe9, 0x81, 0x6e, 0x2d, 0x33, 0x9b, 0x13, 0x0b,
373 0xc9, 0xb2, 0x0c, 0x2c, 0xb5, 0xdf, 0x52, 0x8f,
374 0xab, 0x0d, 0xc6, 0x59, 0x1d, 0xc7, 0x33, 0x7b,
377 static const uint8_t test_plaintext[] = {
378 0x00, 0x44, 0xbc, 0x6f, 0x77, 0xfb, 0xe2, 0xa4,
379 0x98, 0x9e, 0xf5, 0x33, 0xa0, 0xbd, 0x81, 0xb9,
380 0xf1, 0x44, 0x7f, 0x79, 0x89, 0x23, 0xe5, 0x46,
381 0x66, 0x9f, 0x98, 0x95, 0x6f, 0x56, 0x78, 0xf6,
382 0xf5, 0xac, 0x9c, 0xda, 0xc2, 0x79, 0x59, 0xf0,
383 0x1b, 0x03, 0xfa, 0x46, 0x1c, 0x1f, 0x18, 0x07,
384 0xce, 0xad, 0xed, 0x3d, 0x11, 0xf9, 0x1b, 0x26,
385 0x4a, 0x97, 0x28, 0x71, 0x5f, 0x2c, 0x5e, 0x58,
386 0xf0, 0xd6, 0xbf, 0xa4, 0x12, 0xd0, 0x1d, 0x07,
387 0xcb, 0x73, 0x66, 0xb6, 0xa4, 0x09, 0xaf, 0x5d,
388 0xe9, 0x14, 0x14, 0xaf, 0x69, 0xd6, 0xee, 0x0a,
389 0xfc, 0xca, 0xac, 0x94, 0x47, 0xd5, 0x9d, 0x5b,
390 0x2b, 0xfb, 0xce, 0x9d, 0x04, 0xc1, 0xaf, 0xa5,
391 0xa1, 0x8d, 0xa9, 0x48, 0xa8, 0x65, 0xe6, 0x9f,
392 0x74, 0x78, 0x16, 0x32, 0x93, 0xb5, 0x21, 0xb9,
393 0x9f, 0x3f, 0xc1, 0xe5, 0xa2, 0x50, 0x8b, 0x12,
394 0xfb, 0x3e, 0xb0, 0x8a, 0x00, 0xc7, 0x20, 0x56,
395 0xb3, 0xb1, 0x29, 0x95, 0x89, 0xd6, 0x50, 0xf5,
396 0x37, 0x38, 0x8e, 0x12, 0xf1, 0xba, 0x82, 0x37,
397 0x34, 0x68, 0x4b, 0xe8, 0xe3, 0x11, 0x1c, 0x46,
398 0xf9, 0x63, 0x3a, 0xd6, 0xf3, 0x3f, 0x55, 0xa6,
399 0xbd, 0x89, 0xf1, 0x2d, 0x38, 0x91, 0x7c, 0xc2,
400 0x4d, 0xf1, 0x69, 0x82, 0x6d, 0x71, 0x77, 0xf4,
401 0xfc, 0x43, 0x20, 0x6f, 0x43, 0xb9, 0x43, 0xd1,
402 0x65, 0xbd, 0xca, 0xb1, 0x43, 0x87, 0xf8, 0xc8,
403 0x76, 0x21, 0xa9, 0xeb, 0x3e, 0x9a, 0xef, 0xc9,
404 0x0e, 0x79, 0xbc, 0xf0, 0xf8, 0xc8, 0xe2, 0xbc,
405 0x33, 0x35, 0x3e, 0xfc, 0xf9, 0x44, 0x69, 0x06,
406 0x7c, 0x7f, 0x5d, 0xa2, 0x9e, 0xab, 0xc2, 0x82,
407 0xa0, 0xfb, 0xc5, 0x79, 0x57, 0x8c, 0xf1, 0x1c,
408 0x51, 0x64, 0x4c, 0x56, 0x08, 0x80, 0x32, 0xf4,
409 0x97, 0x8f, 0x6f, 0xb2, 0x16, 0xa6, 0x9d, 0x71,
412 static const uint8_t exp_ciphertext_rsa1024_raw[] = {
413 0x01, 0xa0, 0xc2, 0x94, 0x9f, 0xd6, 0xbe, 0x8d,
414 0xe9, 0x24, 0xaa, 0x9c, 0x67, 0xd7, 0xe3, 0x04,
415 0x34, 0xbf, 0xd3, 0x27, 0xa1, 0x43, 0xeb, 0x60,
416 0x6b, 0x5b, 0x64, 0x15, 0x55, 0x16, 0x98, 0x35,
417 0xc2, 0x59, 0xa7, 0xf7, 0x24, 0xf7, 0x05, 0xb9,
418 0xe8, 0x56, 0x6f, 0xf2, 0x7d, 0x8b, 0x3c, 0xcb,
419 0xa6, 0xc2, 0xac, 0x0c, 0x37, 0x8c, 0x70, 0x70,
420 0x55, 0x05, 0x07, 0x0d, 0x63, 0x6b, 0x7d, 0x5f,
421 0xae, 0x03, 0x1e, 0x55, 0x05, 0xbb, 0xa8, 0xe7,
422 0xff, 0xa0, 0x8c, 0x5b, 0x6b, 0x01, 0x48, 0x2e,
423 0x4f, 0x7f, 0xe2, 0x74, 0xc6, 0x32, 0xa7, 0x2d,
424 0xdb, 0x91, 0x9b, 0x67, 0x4d, 0x71, 0xf9, 0x8c,
425 0x42, 0x43, 0x75, 0x4e, 0xd0, 0x0e, 0x7c, 0xa0,
426 0x97, 0x1a, 0x5f, 0x8e, 0x6f, 0xe4, 0xfa, 0x16,
427 0x1d, 0x59, 0x0e, 0x0b, 0x11, 0x12, 0xa3, 0x0c,
428 0xa6, 0x55, 0xe6, 0xdb, 0xa7, 0x71, 0xa6, 0xff,
431 static const uint8_t exp_ciphertext_rsa1024_pkcs1[] = {
432 0x93, 0x78, 0x6a, 0x76, 0xb8, 0x94, 0xea, 0xe4,
433 0x32, 0x79, 0x01, 0x8b, 0xc1, 0xcb, 0x2e, 0x2d,
434 0xfe, 0xdc, 0x9b, 0xe3, 0xe9, 0x23, 0xe4, 0x0a,
435 0xb0, 0x6b, 0x9f, 0x6b, 0x62, 0xf5, 0x3d, 0xf0,
436 0x78, 0x84, 0x77, 0x21, 0xad, 0x0b, 0x30, 0x30,
437 0x94, 0xe2, 0x18, 0xc4, 0x9b, 0x12, 0x06, 0xc8,
438 0xaa, 0xf7, 0x30, 0xe4, 0xc8, 0x64, 0xe7, 0x51,
439 0xf1, 0x6a, 0xe1, 0xa2, 0x58, 0x7a, 0x02, 0x9c,
440 0x8e, 0xf0, 0x2d, 0x25, 0x6b, 0xb7, 0x25, 0x5e,
441 0x05, 0xaf, 0x38, 0xb2, 0x69, 0x5e, 0x6c, 0x75,
442 0x6e, 0x27, 0xba, 0x5d, 0x7d, 0x35, 0x72, 0xb7,
443 0x25, 0xd4, 0xaa, 0xb2, 0x4b, 0x9e, 0x6b, 0x82,
444 0xb2, 0x32, 0xe2, 0x13, 0x1d, 0x00, 0x21, 0x08,
445 0xae, 0x14, 0xbb, 0xc0, 0x40, 0xb7, 0x0d, 0xd5,
446 0x0e, 0x4d, 0x6d, 0x9a, 0x70, 0x86, 0xe9, 0xfc,
447 0x67, 0x2b, 0xa4, 0x11, 0x45, 0xb6, 0xc4, 0x2f,
450 static const uint8_t exp_ciphertext_rsa2048_raw[] = {
451 0x09, 0x7b, 0x9e, 0x7c, 0x10, 0x1f, 0x73, 0xb4,
452 0x5f, 0xdb, 0x4f, 0x05, 0xe7, 0xfc, 0x9e, 0x35,
453 0x48, 0xd8, 0xc8, 0xf5, 0xac, 0x6d, 0xb4, 0xb0,
454 0xd4, 0xf7, 0x69, 0x0f, 0x30, 0x78, 0xbb, 0x55,
455 0x67, 0x66, 0x66, 0x05, 0xf4, 0x77, 0xe2, 0x30,
456 0xa5, 0x94, 0x10, 0xa3, 0xcb, 0xee, 0x13, 0x9f,
457 0x47, 0x1b, 0x2e, 0xf9, 0xfd, 0x94, 0x09, 0xbd,
458 0x26, 0x6e, 0x84, 0xc7, 0x5c, 0x42, 0x20, 0x76,
459 0x72, 0x83, 0x75, 0x68, 0xa4, 0x18, 0x2d, 0x76,
460 0x62, 0xc3, 0xab, 0xc0, 0xc9, 0x36, 0x59, 0xe0,
461 0xa9, 0x70, 0x1f, 0xff, 0x97, 0x07, 0x0d, 0x88,
462 0xc2, 0xd8, 0x51, 0x35, 0xf7, 0xb0, 0x50, 0xe4,
463 0x9f, 0x3d, 0xd4, 0x71, 0x8b, 0x40, 0x89, 0x71,
464 0x6c, 0xd8, 0xc2, 0x63, 0xb6, 0x3a, 0xce, 0xb1,
465 0x32, 0xf1, 0xc6, 0x11, 0x31, 0x25, 0x48, 0xcf,
466 0xeb, 0xbc, 0xd3, 0x9b, 0xc5, 0xbd, 0xd2, 0x57,
467 0x73, 0x9b, 0x20, 0xb8, 0xdf, 0xbe, 0xb8, 0x40,
468 0xb6, 0xac, 0x24, 0xdb, 0x94, 0x6a, 0x93, 0x43,
469 0x4a, 0xa8, 0xa3, 0xcf, 0xd5, 0x61, 0x1b, 0x46,
470 0x1d, 0x6f, 0x57, 0xec, 0xa6, 0xd0, 0x44, 0x05,
471 0x48, 0xb8, 0x90, 0x80, 0x23, 0x8e, 0x5f, 0xb0,
472 0x4b, 0x6f, 0xe3, 0xf9, 0xb0, 0x04, 0x60, 0xae,
473 0x80, 0xcf, 0xa5, 0x5c, 0x11, 0xe4, 0xce, 0x57,
474 0x5b, 0xbb, 0xde, 0x92, 0xfc, 0xe7, 0x3f, 0xe0,
475 0xfc, 0x06, 0xc8, 0xf3, 0x8c, 0xac, 0x86, 0x09,
476 0x31, 0xe5, 0x7e, 0xfb, 0x5d, 0xa7, 0x57, 0xf8,
477 0x1d, 0x23, 0x9d, 0xa3, 0xeb, 0x53, 0x28, 0xde,
478 0xbf, 0x53, 0xef, 0x35, 0x3c, 0x7e, 0x3c, 0x1b,
479 0x76, 0x9d, 0x09, 0x25, 0x43, 0xd4, 0x8b, 0xca,
480 0xda, 0x45, 0x5b, 0xdc, 0x9f, 0x57, 0x5a, 0x30,
481 0x2e, 0xe9, 0x73, 0x68, 0x28, 0xfa, 0x40, 0xb0,
482 0x7c, 0x31, 0xd7, 0x8b, 0x4e, 0x99, 0x94, 0xf1,
485 static const uint8_t exp_ciphertext_rsa2048_pkcs1[] = {
486 0xa5, 0x19, 0x19, 0x34, 0xad, 0xf6, 0xd2, 0xbe,
487 0xed, 0x8f, 0xe5, 0xfe, 0xa2, 0xa5, 0x20, 0x08,
488 0x15, 0x53, 0x7c, 0x68, 0x28, 0xae, 0x07, 0xb2,
489 0x4c, 0x5d, 0xee, 0xc1, 0xc6, 0xdc, 0xd6, 0x8b,
490 0xc6, 0xba, 0x46, 0xe1, 0x16, 0xa9, 0x04, 0x72,
491 0xdf, 0x8f, 0x1e, 0x97, 0x2a, 0x55, 0xe7, 0xac,
492 0x08, 0x0d, 0x61, 0xe8, 0x64, 0x8b, 0x6f, 0x96,
493 0x0e, 0xbb, 0x8a, 0x30, 0xb3, 0x73, 0x28, 0x61,
494 0x16, 0x89, 0x90, 0x88, 0x8e, 0xda, 0x22, 0xe6,
495 0x42, 0x16, 0xc7, 0xe8, 0x30, 0x0d, 0x7f, 0x44,
496 0x1e, 0xef, 0xe6, 0xdb, 0x78, 0x54, 0x89, 0xa5,
497 0x60, 0x67, 0xb3, 0x35, 0x2d, 0x79, 0x49, 0xcf,
498 0xe6, 0x8f, 0xf3, 0x64, 0x52, 0x1c, 0x6c, 0x43,
499 0x7e, 0xb0, 0xde, 0x55, 0xdf, 0xbe, 0xb7, 0xb1,
500 0xdb, 0x02, 0xee, 0x76, 0x96, 0xcc, 0x0b, 0x97,
501 0x8c, 0x23, 0xaa, 0x7d, 0x4c, 0x47, 0x28, 0x41,
502 0x7a, 0x20, 0x39, 0x1f, 0x64, 0x0b, 0xf1, 0x74,
503 0xf1, 0x29, 0xda, 0xe9, 0x3a, 0x36, 0xa6, 0x88,
504 0xb8, 0xc0, 0x21, 0xb8, 0x9b, 0x5d, 0x90, 0x85,
505 0xa3, 0x30, 0x61, 0x17, 0x8c, 0x74, 0x63, 0xd5,
506 0x0f, 0x95, 0xdc, 0xc8, 0x4f, 0xa7, 0x24, 0x55,
507 0x40, 0xe2, 0x84, 0x57, 0x65, 0x06, 0x11, 0x30,
508 0x2b, 0x9e, 0x32, 0x95, 0x39, 0xf2, 0x1a, 0x3f,
509 0xab, 0xcd, 0x7b, 0x7f, 0x9c, 0xf0, 0x00, 0x50,
510 0x7c, 0xf4, 0xbe, 0xcb, 0x80, 0xea, 0x66, 0xba,
511 0x0e, 0x7b, 0x46, 0x0b, 0x25, 0xe0, 0xc1, 0x03,
512 0x29, 0x11, 0x2d, 0x69, 0x4f, 0x21, 0xa2, 0x58,
513 0x37, 0x4b, 0x84, 0x15, 0xb3, 0x65, 0x3a, 0xac,
514 0xd4, 0xd0, 0xf6, 0xdf, 0x4b, 0x82, 0xca, 0x9e,
515 0xbb, 0xbe, 0x3c, 0x4d, 0xd5, 0xbf, 0x00, 0xd6,
516 0x12, 0x48, 0x72, 0x0b, 0xc7, 0xf8, 0xe1, 0xcd,
517 0xd0, 0x28, 0x03, 0x19, 0xa6, 0x06, 0x13, 0x45,
520 static const uint8_t rsa_private_key_lack_element[] = {
521 /* RSAPrivateKey, offset: 0, length: 176 */
523 /* version, offset: 4, length: 1 */
525 /* n, offset: 7, length: 65 */
527 0x00, 0xb9, 0xe1, 0x22, 0xdb, 0x56, 0x2f, 0xb6,
528 0xf7, 0xf0, 0x0a, 0x87, 0x43, 0x07, 0x12, 0xdb,
529 0x6d, 0xb6, 0x2b, 0x41, 0x8d, 0x2c, 0x3c, 0xa5,
530 0xdd, 0x78, 0x9a, 0x8f, 0xab, 0x8e, 0xf2, 0x4a,
531 0xc8, 0x34, 0x0c, 0x12, 0x4f, 0x11, 0x90, 0xc6,
532 0xc2, 0xa5, 0xd0, 0xcd, 0xfb, 0xfc, 0x2c, 0x95,
533 0x56, 0x82, 0xdf, 0x39, 0xf3, 0x3b, 0x1d, 0x62,
534 0x26, 0x97, 0xb7, 0x93, 0x25, 0xc7, 0xec, 0x7e,
536 /* e, offset: 74, length: 3 */
537 0x02, 0x03, 0x01, 0x00, 0x01,
538 /* d, offset: 79, length: 64 */
540 0x1e, 0x80, 0xfe, 0xda, 0x65, 0xdb, 0x70, 0xb8,
541 0x61, 0x91, 0x28, 0xbf, 0x6c, 0x32, 0xc1, 0x05,
542 0xd1, 0x26, 0x6a, 0x1c, 0x83, 0xcc, 0xf4, 0x1f,
543 0x53, 0x42, 0x72, 0x1f, 0x62, 0x57, 0x0a, 0xc4,
544 0x66, 0x76, 0x30, 0x87, 0xb9, 0xb1, 0xb9, 0x6a,
545 0x63, 0xfd, 0x8f, 0x3e, 0xfc, 0x35, 0x3f, 0xd6,
546 0x2e, 0x6c, 0xc8, 0x70, 0x8a, 0x17, 0xc1, 0x28,
547 0x6a, 0xfe, 0x51, 0x56, 0xb3, 0x92, 0x6f, 0x09,
548 /* p, offset: 145, length: 33 */
550 0x00, 0xe3, 0x2e, 0x2d, 0x8d, 0xba, 0x1c, 0x34,
551 0x4c, 0x49, 0x9f, 0xc1, 0xa6, 0xdd, 0xd7, 0x13,
552 0x8d, 0x05, 0x48, 0xdd, 0xff, 0x5c, 0x30, 0xbc,
553 0x6b, 0xc4, 0x18, 0x9d, 0xfc, 0xa2, 0xd0, 0x9b,
555 /* q, offset: 180, length: 33 */
557 0x00, 0xd1, 0x75, 0xaf, 0x4b, 0xc6, 0x1a, 0xb0,
558 0x98, 0x14, 0x42, 0xae, 0x33, 0xf3, 0x44, 0xde,
559 0x21, 0xcb, 0x04, 0xda, 0xfb, 0x1e, 0x35, 0x92,
560 0xcd, 0x69, 0xc0, 0x83, 0x06, 0x83, 0x8e, 0x39,
562 /* lack element: dp, dq, u */
565 static const uint8_t rsa_public_key_lack_element[] = {
566 /* RSAPublicKey, offset: 0, length: 67 */
568 /* n, offset: 7, length: 65 */
570 0x00, 0xb9, 0xe1, 0x22, 0xdb, 0x56, 0x2f, 0xb6,
571 0xf7, 0xf0, 0x0a, 0x87, 0x43, 0x07, 0x12, 0xdb,
572 0x6d, 0xb6, 0x2b, 0x41, 0x8d, 0x2c, 0x3c, 0xa5,
573 0xdd, 0x78, 0x9a, 0x8f, 0xab, 0x8e, 0xf2, 0x4a,
574 0xc8, 0x34, 0x0c, 0x12, 0x4f, 0x11, 0x90, 0xc6,
575 0xc2, 0xa5, 0xd0, 0xcd, 0xfb, 0xfc, 0x2c, 0x95,
576 0x56, 0x82, 0xdf, 0x39, 0xf3, 0x3b, 0x1d, 0x62,
577 0x26, 0x97, 0xb7, 0x93, 0x25, 0xc7, 0xec, 0x7e,
579 /* lack element: e */
582 static const uint8_t rsa_public_key_empty_element[] = {
583 /* RSAPublicKey, offset: 0, length: 69 */
585 /* n, offset: 7, length: 65 */
587 0x00, 0xb9, 0xe1, 0x22, 0xdb, 0x56, 0x2f, 0xb6,
588 0xf7, 0xf0, 0x0a, 0x87, 0x43, 0x07, 0x12, 0xdb,
589 0x6d, 0xb6, 0x2b, 0x41, 0x8d, 0x2c, 0x3c, 0xa5,
590 0xdd, 0x78, 0x9a, 0x8f, 0xab, 0x8e, 0xf2, 0x4a,
591 0xc8, 0x34, 0x0c, 0x12, 0x4f, 0x11, 0x90, 0xc6,
592 0xc2, 0xa5, 0xd0, 0xcd, 0xfb, 0xfc, 0x2c, 0x95,
593 0x56, 0x82, 0xdf, 0x39, 0xf3, 0x3b, 0x1d, 0x62,
594 0x26, 0x97, 0xb7, 0x93, 0x25, 0xc7, 0xec, 0x7e,
596 /* e: empty element */
600 static const uint8_t rsa_private_key_empty_element[] = {
601 /* RSAPrivateKey, offset: 0, length: 19 */
603 /* version, offset: 4, length: 1 */
605 /* n: empty element */
607 /* e: empty element */
609 /* d: empty element */
611 /* p: empty element */
613 /* q: empty element */
615 /* dp: empty element */
617 /* dq: empty element */
619 /* u: empty element */
623 static const uint8_t rsa_public_key_invalid_length_val[] = {
624 /* RSAPublicKey, INVALID length: 313 */
625 0x30, 0x82, 0x01, 0x39,
626 /* n, offset: 7, length: 65 */
628 0x00, 0xb9, 0xe1, 0x22, 0xdb, 0x56, 0x2f, 0xb6,
629 0xf7, 0xf0, 0x0a, 0x87, 0x43, 0x07, 0x12, 0xdb,
630 0x6d, 0xb6, 0x2b, 0x41, 0x8d, 0x2c, 0x3c, 0xa5,
631 0xdd, 0x78, 0x9a, 0x8f, 0xab, 0x8e, 0xf2, 0x4a,
632 0xc8, 0x34, 0x0c, 0x12, 0x4f, 0x11, 0x90, 0xc6,
633 0xc2, 0xa5, 0xd0, 0xcd, 0xfb, 0xfc, 0x2c, 0x95,
634 0x56, 0x82, 0xdf, 0x39, 0xf3, 0x3b, 0x1d, 0x62,
635 0x26, 0x97, 0xb7, 0x93, 0x25, 0xc7, 0xec, 0x7e,
638 0x02, 0x03, 0x01, 0x00, 0x01, /* INTEGER, offset: 74, length: 3 */
641 static const uint8_t rsa_public_key_extra_elem[] = {
642 /* RSAPublicKey, length: 80 */
644 /* n, offset: 7, length: 65 */
646 0x00, 0xb9, 0xe1, 0x22, 0xdb, 0x56, 0x2f, 0xb6,
647 0xf7, 0xf0, 0x0a, 0x87, 0x43, 0x07, 0x12, 0xdb,
648 0x6d, 0xb6, 0x2b, 0x41, 0x8d, 0x2c, 0x3c, 0xa5,
649 0xdd, 0x78, 0x9a, 0x8f, 0xab, 0x8e, 0xf2, 0x4a,
650 0xc8, 0x34, 0x0c, 0x12, 0x4f, 0x11, 0x90, 0xc6,
651 0xc2, 0xa5, 0xd0, 0xcd, 0xfb, 0xfc, 0x2c, 0x95,
652 0x56, 0x82, 0xdf, 0x39, 0xf3, 0x3b, 0x1d, 0x62,
653 0x26, 0x97, 0xb7, 0x93, 0x25, 0xc7, 0xec, 0x7e,
655 /* e, offset: 74, length: 3 */
656 0x02, 0x03, 0x01, 0x00, 0x01,
657 /* Additional integer field, length 3 */
658 0x02, 0x06, 0xe1, 0x22, 0xdb, 0xe1, 0x22, 0xdb,
661 typedef struct QCryptoRSAKeyTestData QCryptoRSAKeyTestData;
662 struct QCryptoRSAKeyTestData {
664 QCryptoAkCipherKeyType key_type;
665 QCryptoAkCipherOptions opt;
672 typedef struct QCryptoAkCipherTestData QCryptoAkCipherTestData;
673 struct QCryptoAkCipherTestData {
675 QCryptoAkCipherOptions opt;
677 const uint8_t *priv_key;
679 const uint8_t *pub_key;
682 const uint8_t *plaintext;
684 const uint8_t *ciphertext;
688 const uint8_t *signature;
692 static QCryptoRSAKeyTestData rsakey_test_data[] = {
694 .path = "/crypto/akcipher/rsakey-1024-public",
695 .key_type = QCRYPTO_AKCIPHER_KEY_TYPE_PUBLIC,
696 .key = rsa1024_public_key,
697 .keylen = sizeof(rsa1024_public_key),
698 .is_valid_key = true,
702 .path = "/crypto/akcipher/rsakey-1024-private",
703 .key_type = QCRYPTO_AKCIPHER_KEY_TYPE_PRIVATE,
704 .key = rsa1024_private_key,
705 .keylen = sizeof(rsa1024_private_key),
706 .is_valid_key = true,
710 .path = "/crypto/akcipher/rsakey-2048-public",
711 .key_type = QCRYPTO_AKCIPHER_KEY_TYPE_PUBLIC,
712 .key = rsa2048_public_key,
713 .keylen = sizeof(rsa2048_public_key),
714 .is_valid_key = true,
718 .path = "/crypto/akcipher/rsakey-2048-private",
719 .key_type = QCRYPTO_AKCIPHER_KEY_TYPE_PRIVATE,
720 .key = rsa2048_private_key,
721 .keylen = sizeof(rsa2048_private_key),
722 .is_valid_key = true,
726 .path = "/crypto/akcipher/rsakey-public-lack-elem",
727 .key_type = QCRYPTO_AKCIPHER_KEY_TYPE_PUBLIC,
728 .key = rsa_public_key_lack_element,
729 .keylen = sizeof(rsa_public_key_lack_element),
730 .is_valid_key = false,
733 .path = "/crypto/akcipher/rsakey-private-lack-elem",
734 .key_type = QCRYPTO_AKCIPHER_KEY_TYPE_PRIVATE,
735 .key = rsa_private_key_lack_element,
736 .keylen = sizeof(rsa_private_key_lack_element),
737 .is_valid_key = false,
740 .path = "/crypto/akcipher/rsakey-public-empty-elem",
741 .key_type = QCRYPTO_AKCIPHER_KEY_TYPE_PUBLIC,
742 .key = rsa_public_key_empty_element,
743 .keylen = sizeof(rsa_public_key_empty_element),
744 .is_valid_key = false,
747 .path = "/crypto/akcipher/rsakey-private-empty-elem",
748 .key_type = QCRYPTO_AKCIPHER_KEY_TYPE_PRIVATE,
749 .key = rsa_private_key_empty_element,
750 .keylen = sizeof(rsa_private_key_empty_element),
751 .is_valid_key = false,
754 .path = "/crypto/akcipher/rsakey-public-empty-key",
755 .key_type = QCRYPTO_AKCIPHER_KEY_TYPE_PUBLIC,
758 .is_valid_key = false,
761 .path = "/crypto/akcipher/rsakey-private-empty-key",
762 .key_type = QCRYPTO_AKCIPHER_KEY_TYPE_PRIVATE,
765 .is_valid_key = false,
768 .path = "/crypto/akcipher/rsakey-public-invalid-length-val",
769 .key_type = QCRYPTO_AKCIPHER_KEY_TYPE_PUBLIC,
770 .key = rsa_public_key_invalid_length_val,
771 .keylen = sizeof(rsa_public_key_invalid_length_val),
772 .is_valid_key = false,
775 .path = "/crypto/akcipher/rsakey-public-extra-elem",
776 .key_type = QCRYPTO_AKCIPHER_KEY_TYPE_PUBLIC,
777 .key = rsa_public_key_extra_elem,
778 .keylen = sizeof(rsa_public_key_extra_elem),
779 .is_valid_key = false,
783 static QCryptoAkCipherTestData akcipher_test_data[] = {
784 /* rsa1024 with raw padding */
786 .path = "/crypto/akcipher/rsa1024-raw",
788 .alg = QCRYPTO_AKCIPHER_ALG_RSA,
790 .padding_alg = QCRYPTO_RSA_PADDING_ALG_RAW,
793 .pub_key = rsa1024_public_key,
794 .pub_key_len = sizeof(rsa1024_public_key),
795 .priv_key = rsa1024_private_key,
796 .priv_key_len = sizeof(rsa1024_private_key),
798 .plaintext = test_plaintext,
800 .ciphertext = exp_ciphertext_rsa1024_raw,
801 .clen = sizeof(exp_ciphertext_rsa1024_raw),
804 /* rsa1024 with pkcs1 padding */
806 .path = "/crypto/akcipher/rsa1024-pkcs1",
808 .alg = QCRYPTO_AKCIPHER_ALG_RSA,
810 .padding_alg = QCRYPTO_RSA_PADDING_ALG_PKCS1,
811 .hash_alg = QCRYPTO_HASH_ALG_SHA1,
814 .pub_key = rsa1024_public_key,
815 .pub_key_len = sizeof(rsa1024_public_key),
816 .priv_key = rsa1024_private_key,
817 .priv_key_len = sizeof(rsa1024_private_key),
819 .plaintext = test_plaintext,
821 .ciphertext = exp_ciphertext_rsa1024_pkcs1,
822 .clen = sizeof(exp_ciphertext_rsa1024_pkcs1),
823 .dgst = test_sha1_dgst,
824 .dlen = sizeof(test_sha1_dgst),
825 .signature = exp_signature_rsa1024_pkcs1,
826 .slen = sizeof(exp_signature_rsa1024_pkcs1),
829 /* rsa2048 with raw padding */
831 .path = "/crypto/akcipher/rsa2048-raw",
833 .alg = QCRYPTO_AKCIPHER_ALG_RSA,
835 .padding_alg = QCRYPTO_RSA_PADDING_ALG_RAW,
838 .pub_key = rsa2048_public_key,
839 .pub_key_len = sizeof(rsa2048_public_key),
840 .priv_key = rsa2048_private_key,
841 .priv_key_len = sizeof(rsa2048_private_key),
843 .plaintext = test_plaintext,
845 .ciphertext = exp_ciphertext_rsa2048_raw,
846 .clen = sizeof(exp_ciphertext_rsa2048_raw),
849 /* rsa2048 with pkcs1 padding */
851 .path = "/crypto/akcipher/rsa2048-pkcs1",
853 .alg = QCRYPTO_AKCIPHER_ALG_RSA,
855 .padding_alg = QCRYPTO_RSA_PADDING_ALG_PKCS1,
856 .hash_alg = QCRYPTO_HASH_ALG_SHA1,
859 .pub_key = rsa2048_public_key,
860 .pub_key_len = sizeof(rsa2048_public_key),
861 .priv_key = rsa2048_private_key,
862 .priv_key_len = sizeof(rsa2048_private_key),
864 .plaintext = test_plaintext,
866 .ciphertext = exp_ciphertext_rsa2048_pkcs1,
867 .clen = sizeof(exp_ciphertext_rsa2048_pkcs1),
868 .dgst = test_sha1_dgst,
869 .dlen = sizeof(test_sha1_dgst),
870 .signature = exp_signature_rsa2048_pkcs1,
871 .slen = sizeof(exp_signature_rsa2048_pkcs1),
876 static void test_akcipher(const void *opaque)
878 const QCryptoAkCipherTestData *data = opaque;
879 g_autofree uint8_t *plaintext = NULL;
880 g_autofree uint8_t *ciphertext = NULL;
881 g_autofree uint8_t *signature = NULL;
882 QCryptoAkCipher *pub_key, *priv_key;
884 if (!qcrypto_akcipher_supports((QCryptoAkCipherOptions *)&data->opt)) {
887 pub_key = qcrypto_akcipher_new(&data->opt,
888 QCRYPTO_AKCIPHER_KEY_TYPE_PUBLIC,
889 data->pub_key, data->pub_key_len,
891 g_assert(pub_key != NULL);
892 priv_key = qcrypto_akcipher_new(&data->opt,
893 QCRYPTO_AKCIPHER_KEY_TYPE_PRIVATE,
894 data->priv_key, data->priv_key_len,
896 g_assert(priv_key != NULL);
898 if (data->plaintext != NULL) {
900 ciphertext = g_new0(uint8_t, data->clen);
901 g_assert(qcrypto_akcipher_encrypt(pub_key, data->plaintext, data->plen,
902 ciphertext, data->clen,
906 * In the asymmetric encryption algorithms, the ciphertext generated
907 * each time may be different, here only compare the decrypted
910 plaintext = g_new0(uint8_t, data->clen);
911 g_assert(qcrypto_akcipher_decrypt(priv_key, ciphertext,
912 data->clen, plaintext,
914 &error_abort) == data->plen);
915 g_assert(!memcmp(plaintext, data->plaintext, data->plen));
918 if (data->signature != NULL) {
919 signature = g_new(uint8_t, data->slen);
920 g_assert(qcrypto_akcipher_sign(priv_key, data->dgst, data->dlen,
921 signature, data->slen,
924 * The signature generated each time may be different, here only check
927 g_assert(qcrypto_akcipher_verify(pub_key, data->signature, data->slen,
928 data->dgst, data->dlen,
930 g_assert(qcrypto_akcipher_verify(pub_key, signature, data->slen,
931 data->dgst, data->dlen,
934 /* Here error should be ignored */
935 g_assert(qcrypto_akcipher_verify(pub_key, signature, data->slen,
936 data->dgst, data->dlen, NULL) != 0);
939 qcrypto_akcipher_free(pub_key);
940 qcrypto_akcipher_free(priv_key);
943 static void test_rsakey(const void *opaque)
945 const QCryptoRSAKeyTestData *data = (const QCryptoRSAKeyTestData *)opaque;
946 QCryptoAkCipherOptions opt = {
947 .alg = QCRYPTO_AKCIPHER_ALG_RSA,
949 .padding_alg = QCRYPTO_RSA_PADDING_ALG_PKCS1,
950 .hash_alg = QCRYPTO_HASH_ALG_SHA1,
953 g_autoptr(QCryptoAkCipher) key = qcrypto_akcipher_new(
954 &opt, data->key_type, data->key, data->keylen, NULL);
956 if (!qcrypto_akcipher_supports(&opt)) {
960 if (!data->is_valid_key) {
961 g_assert(key == NULL);
965 g_assert(key != NULL);
966 g_assert(qcrypto_akcipher_max_ciphertext_len(key) == data->exp_key_len);
967 g_assert(qcrypto_akcipher_max_plaintext_len(key) == data->exp_key_len);
968 g_assert(qcrypto_akcipher_max_signature_len(key) == data->exp_key_len);
969 g_assert(qcrypto_akcipher_max_dgst_len(key) == data->exp_key_len);
972 int main(int argc, char **argv)
975 g_test_init(&argc, &argv, NULL);
976 g_assert(qcrypto_init(NULL) == 0);
978 for (i = 0; i < G_N_ELEMENTS(akcipher_test_data); i++) {
979 g_test_add_data_func(akcipher_test_data[i].path,
980 &akcipher_test_data[i],
983 for (i = 0; i < G_N_ELEMENTS(rsakey_test_data); i++) {
984 g_test_add_data_func(rsakey_test_data[i].path,
985 &rsakey_test_data[i],