blob: d579e2f5e38352fa6a4b11bb0271f104a69a14ac [file] [log] [blame]
Mark Salyzyn60927432014-04-30 14:12:23 -07001/*
Doug Zongker5137d832013-04-10 15:08:28 -07002** Copyright 2013, The Android Open Source Project
3**
4** Redistribution and use in source and binary forms, with or without
5** modification, are permitted provided that the following conditions are met:
6** * Redistributions of source code must retain the above copyright
7** notice, this list of conditions and the following disclaimer.
8** * Redistributions in binary form must reproduce the above copyright
9** notice, this list of conditions and the following disclaimer in the
10** documentation and/or other materials provided with the distribution.
11** * Neither the name of Google Inc. nor the names of its contributors may
12** be used to endorse or promote products derived from this software
13** without specific prior written permission.
14**
15** THIS SOFTWARE IS PROVIDED BY Google Inc. ``AS IS'' AND ANY EXPRESS OR
16** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
17** MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
18** EVENT SHALL Google Inc. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
19** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
21** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
22** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
23** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
24** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25*/
26
Doug Zongker5137d832013-04-10 15:08:28 -070027#include <ctype.h>
Mark Salyzyn60927432014-04-30 14:12:23 -070028#include <stdio.h>
Doug Zongker5137d832013-04-10 15:08:28 -070029#include <stdlib.h>
30#include <string.h>
Mark Salyzyn60927432014-04-30 14:12:23 -070031#include <sys/cdefs.h>
Doug Zongker5137d832013-04-10 15:08:28 -070032
Mattias Nisslerfca75c82016-03-22 15:27:15 +010033#include "constrainedcrypto/rsa.h"
34#include "constrainedcrypto/sha.h"
Doug Zongker5137d832013-04-10 15:08:28 -070035
Mark Salyzyn60927432014-04-30 14:12:23 -070036#ifndef __unused
37#define __unused __attribute__((unused))
38#endif
39
Doug Zongker5137d832013-04-10 15:08:28 -070040// RSA test data taken from:
41//
42// ftp://ftp.rsa.com/pub/rsalabs/tmp/pkcs1v15sign-vectors.txt
43
44// This is the result (reformatted) of running DumpPublicKey on:
45//
46// # Example 15: A 2048-bit RSA key pair
47// # -----------------------------------
48//
49//
50// # Public key
51// # ----------
52//
53// # Modulus:
54// df 27 1f d2 5f 86 44 49 6b 0c 81 be 4b d5 02 97
55// ef 09 9b 00 2a 6f d6 77 27 eb 44 9c ea 56 6e d6
56// a3 98 1a 71 31 2a 14 1c ab c9 81 5c 12 09 e3 20
57// a2 5b 32 46 4e 99 99 f1 8c a1 3a 9f d3 89 25 58
58// f9 e0 ad ef dd 36 50 dd 23 a3 f0 36 d6 0f e3 98
59// 84 37 06 a4 0b 0b 84 62 c8 be e3 bc e1 2f 1f 28
60// 60 c2 44 4c dc 6a 44 47 6a 75 ff 4a a2 42 73 cc
61// be 3b f8 02 48 46 5f 8f f8 c3 a7 f3 36 7d fc 0d
62// f5 b6 50 9a 4f 82 81 1c ed d8 1c da aa 73 c4 91
63// da 41 21 70 d5 44 d4 ba 96 b9 7f 0a fc 80 65 49
64// 8d 3a 49 fd 91 09 92 a1 f0 72 5b e2 4f 46 5c fe
65// 7e 0e ab f6 78 99 6c 50 bc 5e 75 24 ab f7 3f 15
66// e5 be f7 d5 18 39 4e 31 38 ce 49 44 50 6a aa af
67// 3f 9b 23 6d ca b8 fc 00 f8 7a f5 96 fd c3 d9 d6
68// c7 5c d5 08 36 2f ae 2c be dd cc 4c 74 50 b1 7b
69// 77 6c 07 9e cc a1 f2 56 35 1a 43 b9 7d be 21 53
70//
71// # Exponent:
72// 01 00 01
73
74RSAPublicKey key_15 = {
75 .len = 64,
76 .n0inv = 0xf0053525,
77 .n = {2109612371u,890913721u,3433165398u,2003568542u,
78 1951445371u,3202206796u,909094444u,3344749832u,
79 4257470934u,4168807830u,3401120768u,1067131757u,
80 1349167791u,953043268u,406408753u,3854497749u,
81 2885107477u,3160306980u,2023320656u,2114890742u,
82 1330011390u,4034026466u,2433323681u,2369407485u,
83 4236272969u,2528739082u,3578057914u,3661701488u,
84 2859713681u,3990363354u,1333952796u,4122366106u,
85 914226189u,4173572083u,1212571535u,3191601154u,
86 2722264012u,1786117962u,3697951815u,1623344204u,
87 3777961768u,3367953340u,185304162u,2218198692u,
88 3591365528u,597946422u,3711324381u,4192251375u,
89 3548980568u,2359376543u,1318689265u,2723885638u,
90 302637856u,2882109788u,824841244u,2744654449u,
91 3931533014u,669729948u,711972471u,4010384128u,
92 1272251031u,1795981758u,1602634825u,3743883218u},
93 .rr = {820482522u,2494434288u,1082168230u,731376296u,
94 1306039452u,3139792975u,2575869288u,3874938710u,
95 3198185181u,153506080u,1236489694u,1061859740u,
96 1174461268u,115279508u,1782749185u,238124145u,
97 3587596076u,2259236093u,1112265915u,4048059865u,
98 3890381098u,999426242u,794481771u,3804065613u,
99 2786019148u,461403875u,3072256692u,4079652654u,
100 3056719901u,1871565394u,212974856u,3359008174u,
101 1397773937u,3796256698u,914342841u,1097174457u,
102 3322220191u,3170814748u,2439215020u,618719336u,
103 3629353460u,496817177u,317052742u,380264245u,
104 1976007217u,2697736152u,312540864u,4291855337u,
105 697006561u,4234182488u,3904590917u,2609582216u,
106 451424084u,1805773827u,776344974u,1064489733u,
107 2633377036u,1954826648u,3202815814u,2240368662u,
108 2618582484u,2211196815u,4107362845u,3640258615u},
109 .exponent = 65537,
110};
111
112// PKCS#1 v1.5 Signature Example 15.1
113
114char* message_1 =
115 "f4 5d 55 f3 55 51 e9 75 d6 a8 dc 7e a9 f4 88 59"
116 "39 40 cc 75 69 4a 27 8f 27 e5 78 a1 63 d8 39 b3"
117 "40 40 84 18 08 cf 9c 58 c9 b8 72 8b f5 f9 ce 8e"
118 "e8 11 ea 91 71 4f 47 ba b9 2d 0f 6d 5a 26 fc fe"
119 "ea 6c d9 3b 91 0c 0a 2c 96 3e 64 eb 18 23 f1 02"
120 "75 3d 41 f0 33 59 10 ad 3a 97 71 04 f1 aa f6 c3"
121 "74 27 16 a9 75 5d 11 b8 ee d6 90 47 7f 44 5c 5d"
122 "27 20 8b 2e 28 43 30 fa 3d 30 14 23 fa 7f 2d 08"
123 "6e 0a d0 b8 92 b9 db 54 4e 45 6d 3f 0d ab 85 d9"
124 "53 c1 2d 34 0a a8 73 ed a7 27 c8 a6 49 db 7f a6"
125 "37 40 e2 5e 9a f1 53 3b 30 7e 61 32 99 93 11 0e"
126 "95 19 4e 03 93 99 c3 82 4d 24 c5 1f 22 b2 6b de"
127 "10 24 cd 39 59 58 a2 df eb 48 16 a6 e8 ad ed b5"
128 "0b 1f 6b 56 d0 b3 06 0f f0 f1 c4 cb 0d 0e 00 1d"
129 "d5 9d 73 be 12";
130
131char* signature_1 =
132 "b7 5a 54 66 b6 5d 0f 30 0e f5 38 33 f2 17 5c 8a"
133 "34 7a 38 04 fc 63 45 1d c9 02 f0 b7 1f 90 83 45"
134 "9e d3 7a 51 79 a3 b7 23 a5 3f 10 51 64 2d 77 37"
135 "4c 4c 6c 8d bb 1c a2 05 25 f5 c9 f3 2d b7 76 95"
136 "35 56 da 31 29 0e 22 19 74 82 ce b6 99 06 c4 6a"
137 "75 8f b0 e7 40 9b a8 01 07 7d 2a 0a 20 ea e7 d1"
138 "d6 d3 92 ab 49 57 e8 6b 76 f0 65 2d 68 b8 39 88"
139 "a7 8f 26 e1 11 72 ea 60 9b f8 49 fb bd 78 ad 7e"
140 "dc e2 1d e6 62 a0 81 36 8c 04 06 07 ce e2 9d b0"
141 "62 72 27 f4 49 63 ad 17 1d 22 93 b6 33 a3 92 e3"
142 "31 dc a5 4f e3 08 27 52 f4 3f 63 c1 61 b4 47 a4"
143 "c6 5a 68 75 67 0d 5f 66 00 fc c8 60 a1 ca eb 0a"
144 "88 f8 fd ec 4e 56 43 98 a5 c4 6c 87 f6 8c e0 70"
145 "01 f6 21 3a be 0a b5 62 5f 87 d1 90 25 f0 8d 81"
146 "da c7 bd 45 86 bc 93 82 19 1f 6d 28 80 f6 22 7e"
147 "5d f3 ee d2 1e 77 92 d2 49 48 04 87 f3 65 52 61";
148
149// PKCS#1 v1.5 Signature Example 15.2
150
151char *message_2 =
152 "c1 4b 4c 60 75 b2 f9 aa d6 61 de f4 ec fd 3c b9 "
153 "33 c6 23 f4 e6 3b f5 34 10 d2 f0 16 d1 ab 98 e2 "
154 "72 9e cc f8 00 6c d8 e0 80 50 73 7d 95 fd bf 29 "
155 "6b 66 f5 b9 79 2a 90 29 36 c4 f7 ac 69 f5 14 53 "
156 "ce 43 69 45 2d c2 2d 96 f0 37 74 81 14 66 20 00 "
157 "dd 9c d3 a5 e1 79 f4 e0 f8 1f a6 a0 31 1c a1 ae "
158 "e6 51 9a 0f 63 ce c7 8d 27 bb 72 63 93 fb 7f 1f "
159 "88 cd e7 c9 7f 8a 66 cd 66 30 12 81 da c3 f3 a4 "
160 "33 24 8c 75 d6 c2 dc d7 08 b6 a9 7b 0a 3f 32 5e "
161 "0b 29 64 f8 a5 81 9e 47 9b ";
162
163char* signature_2 =
164 "af a7 34 34 62 be a1 22 cc 14 9f ca 70 ab da e7"
165 "94 46 67 7d b5 37 36 66 af 7d c3 13 01 5f 4d e7"
166 "86 e6 e3 94 94 6f ad 3c c0 e2 b0 2b ed ba 50 47"
167 "fe 9e 2d 7d 09 97 05 e4 a3 9f 28 68 32 79 cf 0a"
168 "c8 5c 15 30 41 22 42 c0 e9 18 95 3b e0 00 e9 39"
169 "cf 3b f1 82 52 5e 19 93 70 fa 79 07 eb a6 9d 5d"
170 "b4 63 10 17 c0 e3 6d f7 03 79 b5 db 8d 4c 69 5a"
171 "97 9a 8e 61 73 22 40 65 d7 dc 15 13 2e f2 8c d8"
172 "22 79 51 63 06 3b 54 c6 51 14 1b e8 6d 36 e3 67"
173 "35 bc 61 f3 1f ca 57 4e 53 09 f3 a3 bb df 91 ef"
174 "f1 2b 99 e9 cc 17 44 f1 ee 9a 1b d2 2c 5b ad 96"
175 "ad 48 19 29 25 1f 03 43 fd 36 bc f0 ac de 7f 11"
176 "e5 ad 60 97 77 21 20 27 96 fe 06 1f 9a da 1f c4"
177 "c8 e0 0d 60 22 a8 35 75 85 ff e9 fd d5 93 31 a2"
178 "8c 4a a3 12 15 88 fb 6c f6 83 96 d8 ac 05 46 59"
179 "95 00 c9 70 85 00 a5 97 2b d5 4f 72 cf 8d b0 c8";
180
181// PKCS#1 v1.5 Signature Example 15.3
182
183char* message_3 =
184 "d0 23 71 ad 7e e4 8b bf db 27 63 de 7a 84 3b 94 "
185 "08 ce 5e b5 ab f8 47 ca 3d 73 59 86 df 84 e9 06 "
186 "0b db cd d3 a5 5b a5 5d de 20 d4 76 1e 1a 21 d2 "
187 "25 c1 a1 86 f4 ac 4b 30 19 d3 ad f7 8f e6 33 46 "
188 "67 f5 6f 70 c9 01 a0 a2 70 0c 6f 0d 56 ad d7 19 "
189 "59 2d c8 8f 6d 23 06 c7 00 9f 6e 7a 63 5b 4c b3 "
190 "a5 02 df e6 8d dc 58 d0 3b e1 0a 11 70 00 4f e7 "
191 "4d d3 e4 6b 82 59 1f f7 54 14 f0 c4 a0 3e 60 5e "
192 "20 52 4f 24 16 f1 2e ca 58 9f 11 1b 75 d6 39 c6 "
193 "1b aa 80 ca fd 05 cf 35 00 24 4a 21 9e d9 ce d9 "
194 "f0 b1 02 97 18 2b 65 3b 52 6f 40 0f 29 53 ba 21 "
195 "4d 5b cd 47 88 41 32 87 2a e9 0d 4d 6b 1f 42 15 "
196 "39 f9 f3 46 62 a5 6d c0 e7 b4 b9 23 b6 23 1e 30 "
197 "d2 67 67 97 81 7f 7c 33 7b 5a c8 24 ba 93 14 3b "
198 "33 81 fa 3d ce 0e 6a eb d3 8e 67 73 51 87 b1 eb "
199 "d9 5c 02 ";
200
201char* signature_3 =
202 "3b ac 63 f8 6e 3b 70 27 12 03 10 6b 9c 79 aa bd"
203 "9f 47 7c 56 e4 ee 58 a4 fc e5 ba f2 ca b4 96 0f"
204 "88 39 1c 9c 23 69 8b e7 5c 99 ae df 9e 1a bf 17"
205 "05 be 1d ac 33 14 0a db 48 eb 31 f4 50 bb 9e fe"
206 "83 b7 b9 0d b7 f1 57 6d 33 f4 0c 1c ba 4b 8d 6b"
207 "1d 33 23 56 4b 0f 17 74 11 4f a7 c0 8e 6d 1e 20"
208 "dd 8f bb a9 b6 ac 7a d4 1e 26 b4 56 8f 4a 8a ac"
209 "bf d1 78 a8 f8 d2 c9 d5 f5 b8 81 12 93 5a 8b c9"
210 "ae 32 cd a4 0b 8d 20 37 55 10 73 50 96 53 68 18"
211 "ce 2b 2d b7 1a 97 72 c9 b0 dd a0 9a e1 01 52 fa"
212 "11 46 62 18 d0 91 b5 3d 92 54 30 61 b7 29 4a 55"
213 "be 82 ff 35 d5 c3 2f a2 33 f0 5a aa c7 58 50 30"
214 "7e cf 81 38 3c 11 16 74 39 7b 1a 1b 9d 3b f7 61"
215 "2c cb e5 ba cd 2b 38 f0 a9 83 97 b2 4c 83 65 8f"
216 "b6 c0 b4 14 0e f1 19 70 c4 63 0d 44 34 4e 76 ea"
217 "ed 74 dc be e8 11 db f6 57 59 41 f0 8a 65 23 b8";
218
219// PKCS#1 v1.5 Signature Example 15.4
220
221char* message_4 =
222 "29 03 55 84 ab 7e 02 26 a9 ec 4b 02 e8 dc f1 27 "
223 "2d c9 a4 1d 73 e2 82 00 07 b0 f6 e2 1f ec cd 5b "
224 "d9 db b9 ef 88 cd 67 58 76 9e e1 f9 56 da 7a d1 "
225 "84 41 de 6f ab 83 86 db c6 93 ";
226
227char* signature_4 =
228 "28 d8 e3 fc d5 dd db 21 ff bd 8d f1 63 0d 73 77"
229 "aa 26 51 e1 4c ad 1c 0e 43 cc c5 2f 90 7f 94 6d"
230 "66 de 72 54 e2 7a 6c 19 0e b0 22 ee 89 ec f6 22"
231 "4b 09 7b 71 06 8c d6 07 28 a1 ae d6 4b 80 e5 45"
232 "7b d3 10 6d d9 17 06 c9 37 c9 79 5f 2b 36 36 7f"
233 "f1 53 dc 25 19 a8 db 9b df 2c 80 74 30 c4 51 de"
234 "17 bb cd 0c e7 82 b3 e8 f1 02 4d 90 62 4d ea 7f"
235 "1e ed c7 42 0b 7e 7c aa 65 77 ce f4 31 41 a7 26"
236 "42 06 58 0e 44 a1 67 df 5e 41 ee a0 e6 9a 80 54"
237 "54 c4 0e ef c1 3f 48 e4 23 d7 a3 2d 02 ed 42 c0"
238 "ab 03 d0 a7 cf 70 c5 86 0a c9 2e 03 ee 00 5b 60"
239 "ff 35 03 42 4b 98 cc 89 45 68 c7 c5 6a 02 33 55"
240 "1c eb e5 88 cf 8b 01 67 b7 df 13 ad ca d8 28 67"
241 "68 10 49 9c 70 4d a7 ae 23 41 4d 69 e3 c0 d2 db"
242 "5d cb c2 61 3b c1 20 42 1f 9e 36 53 c5 a8 76 72"
243 "97 64 3c 7e 07 40 de 01 63 55 45 3d 6c 95 ae 72";
244
245// PKCS#1 v1.5 Signature Example 15.5
246
247char* message_5 =
248 "bd a3 a1 c7 90 59 ea e5 98 30 8d 3d f6 09 ";
249
250char* signature_5 =
251 "a1 56 17 6c b9 67 77 c7 fb 96 10 5d bd 91 3b c4"
252 "f7 40 54 f6 80 7c 60 08 a1 a9 56 ea 92 c1 f8 1c"
253 "b8 97 dc 4b 92 ef 9f 4e 40 66 8d c7 c5 56 90 1a"
254 "cb 6c f2 69 fe 61 5b 0f b7 2b 30 a5 13 38 69 23"
255 "14 b0 e5 87 8a 88 c2 c7 77 4b d1 69 39 b5 ab d8"
256 "2b 44 29 d6 7b d7 ac 8e 5e a7 fe 92 4e 20 a6 ec"
257 "66 22 91 f2 54 8d 73 4f 66 34 86 8b 03 9a a5 f9"
258 "d4 d9 06 b2 d0 cb 85 85 bf 42 85 47 af c9 1c 6e"
259 "20 52 dd cd 00 1c 3e f8 c8 ee fc 3b 6b 2a 82 b6"
260 "f9 c8 8c 56 f2 e2 c3 cb 0b e4 b8 0d a9 5e ba 37"
261 "1d 8b 5f 60 f9 25 38 74 3d db b5 da 29 72 c7 1f"
262 "e7 b9 f1 b7 90 26 8a 0e 77 0f c5 eb 4d 5d d8 52"
263 "47 d4 8a e2 ec 3f 26 25 5a 39 85 52 02 06 a1 f2"
264 "68 e4 83 e9 db b1 d5 ca b1 90 91 76 06 de 31 e7"
265 "c5 18 2d 8f 15 1b f4 1d fe cc ae d7 cd e6 90 b2"
266 "16 47 10 6b 49 0c 72 9d 54 a8 fe 28 02 a6 d1 26";
267
268// PKCS#1 v1.5 Signature Example 15.6
269
270char* message_6 =
271 "c1 87 91 5e 4e 87 da 81 c0 8e d4 35 6a 0c ce ac "
272 "1c 4f b5 c0 46 b4 52 81 b3 87 ec 28 f1 ab fd 56 "
273 "7e 54 6b 23 6b 37 d0 1a e7 1d 3b 28 34 36 5d 3d "
274 "f3 80 b7 50 61 b7 36 b0 13 0b 07 0b e5 8a e8 a4 "
275 "6d 12 16 63 61 b6 13 db c4 7d fa eb 4c a7 46 45 "
276 "6c 2e 88 83 85 52 5c ca 9d d1 c3 c7 a9 ad a7 6d "
277 "6c ";;
278
279char* signature_6 =
280 "9c ab 74 16 36 08 66 9f 75 55 a3 33 cf 19 6f e3"
281 "a0 e9 e5 eb 1a 32 d3 4b b5 c8 5f f6 89 aa ab 0e"
282 "3e 65 66 8e d3 b1 15 3f 94 eb 3d 8b e3 79 b8 ee"
283 "f0 07 c4 a0 2c 70 71 ce 30 d8 bb 34 1e 58 c6 20"
284 "f7 3d 37 b4 ec bf 48 be 29 4f 6c 9e 0e cb 5e 63"
285 "fe c4 1f 12 0e 55 53 df a0 eb eb bb 72 64 0a 95"
286 "37 ba dc b4 51 33 02 29 d9 f7 10 f6 2e 3e d8 ec"
287 "78 4e 50 ee 1d 92 62 b4 26 71 34 00 11 d7 d0 98"
288 "c6 f2 55 7b 21 31 fa 9b d0 25 46 36 59 7e 88 ec"
289 "b3 5a 24 0e f0 fd 85 95 71 24 df 80 80 fe e1 e1"
290 "49 af 93 99 89 e8 6b 26 c8 5a 58 81 fa e8 67 3d"
291 "9f d4 08 00 dd 13 4e b9 bd b6 41 0f 42 0b 0a a9"
292 "7b 20 ef cf 2e b0 c8 07 fa eb 83 a3 cc d9 b5 1d"
293 "45 53 e4 1d fc 0d f6 ca 80 a1 e8 1d c2 34 bb 83"
294 "89 dd 19 5a 38 b4 2d e4 ed c4 9d 34 64 78 b9 f1"
295 "1f 05 57 20 5f 5b 0b d7 ff e9 c8 50 f3 96 d7 c4";;
296
297// PKCS#1 v1.5 Signature Example 15.7
298
299char* message_7 =
300 "ab fa 2e cb 7d 29 bd 5b cb 99 31 ce 2b ad 2f 74 "
301 "38 3e 95 68 3c ee 11 02 2f 08 e8 e7 d0 b8 fa 05 "
302 "8b f9 eb 7e b5 f9 88 68 b5 bb 1f b5 c3 1c ed a3 "
303 "a6 4f 1a 12 cd f2 0f cd 0e 5a 24 6d 7a 17 73 d8 "
304 "db a0 e3 b2 77 54 5b ab e5 8f 2b 96 e3 f4 ed c1 "
305 "8e ab f5 cd 2a 56 0f ca 75 fe 96 e0 7d 85 9d ef "
306 "b2 56 4f 3a 34 f1 6f 11 e9 1b 3a 71 7b 41 af 53 "
307 "f6 60 53 23 00 1a a4 06 c6 ";
308
309char* signature_7 =
310 "c4 b4 37 bc f7 03 f3 52 e1 fa f7 4e b9 62 20 39"
311 "42 6b 56 72 ca f2 a7 b3 81 c6 c4 f0 19 1e 7e 4a"
312 "98 f0 ee bc d6 f4 17 84 c2 53 7f f0 f9 9e 74 98"
313 "2c 87 20 1b fb c6 5e ae 83 2d b7 1d 16 da ca db"
314 "09 77 e5 c5 04 67 9e 40 be 0f 9d b0 6f fd 84 8d"
315 "d2 e5 c3 8a 7e c0 21 e7 f6 8c 47 df d3 8c c3 54"
316 "49 3d 53 39 b4 59 5a 5b f3 1e 3f 8f 13 81 68 07"
317 "37 3d f6 ad 0d c7 e7 31 e5 1a d1 9e b4 75 4b 13"
318 "44 85 84 2f e7 09 d3 78 44 4d 8e 36 b1 72 4a 4f"
319 "da 21 ca fe e6 53 ab 80 74 7f 79 52 ee 80 4d ea"
320 "b1 03 9d 84 13 99 45 bb f4 be 82 00 87 53 f3 c5"
321 "4c 78 21 a1 d2 41 f4 21 79 c7 94 ef 70 42 bb f9"
322 "95 56 56 22 2e 45 c3 43 69 a3 84 69 7b 6a e7 42"
323 "e1 8f a5 ca 7a ba d2 7d 9f e7 10 52 e3 31 0d 0f"
324 "52 c8 d1 2e a3 3b f0 53 a3 00 f4 af c4 f0 98 df"
325 "4e 6d 88 67 79 d6 45 94 d3 69 15 8f db c1 f6 94";
326
327// PKCS#1 v1.5 Signature Example 15.8
328
329char* message_8 =
330 "df 40 44 a8 9a 83 e9 fc bf 12 62 54 0a e3 03 8b "
331 "bc 90 f2 b2 62 8b f2 a4 46 7a c6 77 22 d8 54 6b "
332 "3a 71 cb 0e a4 16 69 d5 b4 d6 18 59 c1 b4 e4 7c "
333 "ec c5 93 3f 75 7e c8 6d b0 64 4e 31 18 12 d0 0f "
334 "b8 02 f0 34 00 63 9c 0e 36 4d ae 5a eb c5 79 1b "
335 "c6 55 76 23 61 bc 43 c5 3d 3c 78 86 76 8f 79 68 "
336 "c1 c5 44 c6 f7 9f 7b e8 20 c7 e2 bd 2f 9d 73 e6 "
337 "2d ed 6d 2e 93 7e 6a 6d ae f9 0e e3 7a 1a 52 a5 "
338 "4f 00 e3 1a dd d6 48 94 cf 4c 02 e1 60 99 e2 9f "
339 "9e b7 f1 a7 bb 7f 84 c4 7a 2b 59 48 13 be 02 a1 "
340 "7b 7f c4 3b 34 c2 2c 91 92 52 64 12 6c 89 f8 6b "
341 "b4 d8 7f 3e f1 31 29 6c 53 a3 08 e0 33 1d ac 8b "
342 "af 3b 63 42 22 66 ec ef 2b 90 78 15 35 db da 41 "
343 "cb d0 cf 22 a8 cb fb 53 2e c6 8f c6 af b2 ac 06 ";
344
345char* signature_8 =
346 "14 14 b3 85 67 ae 6d 97 3e de 4a 06 84 2d cc 0e"
347 "05 59 b1 9e 65 a4 88 9b db ab d0 fd 02 80 68 29"
348 "13 ba cd 5d c2 f0 1b 30 bb 19 eb 81 0b 7d 9d ed"
349 "32 b2 84 f1 47 bb e7 71 c9 30 c6 05 2a a7 34 13"
350 "90 a8 49 f8 1d a9 cd 11 e5 ec cf 24 6d ba e9 5f"
351 "a9 58 28 e9 ae 0c a3 55 03 25 32 6d ee f9 f4 95"
352 "30 ba 44 1b ed 4a c2 9c 02 9c 9a 27 36 b1 a4 19"
353 "0b 85 08 4a d1 50 42 6b 46 d7 f8 5b d7 02 f4 8d"
354 "ac 5f 71 33 0b c4 23 a7 66 c6 5c c1 dc ab 20 d3"
355 "d3 bb a7 2b 63 b3 ef 82 44 d4 2f 15 7c b7 e3 a8"
356 "ba 5c 05 27 2c 64 cc 1a d2 1a 13 49 3c 39 11 f6"
357 "0b 4e 9f 4e cc 99 00 eb 05 6e e5 9d 6f e4 b8 ff"
358 "6e 80 48 cc c0 f3 8f 28 36 fd 3d fe 91 bf 4a 38"
359 "6e 1e cc 2c 32 83 9f 0c a4 d1 b2 7a 56 8f a9 40"
360 "dd 64 ad 16 bd 01 25 d0 34 8e 38 30 85 f0 88 94"
361 "86 1c a1 89 87 22 7d 37 b4 2b 58 4a 83 57 cb 04";
362
363// PKCS#1 v1.5 Signature Example 15.9
364
365char* message_9 =
366 "ea 94 1f f0 6f 86 c2 26 92 7f cf 0e 3b 11 b0 87 "
367 "26 76 17 0c 1b fc 33 bd a8 e2 65 c7 77 71 f9 d0 "
368 "85 01 64 a5 ee cb cc 5c e8 27 fb fa 07 c8 52 14 "
369 "79 6d 81 27 e8 ca a8 18 94 ea 61 ce b1 44 9e 72 "
370 "fe a0 a4 c9 43 b2 da 6d 9b 10 5f e0 53 b9 03 9a "
371 "9c c5 3d 42 0b 75 39 fa b2 23 9c 6b 51 d1 7e 69 "
372 "4c 95 7d 4b 0f 09 84 46 18 79 a0 75 9c 44 01 be "
373 "ec d4 c6 06 a0 af bd 7a 07 6f 50 a2 df c2 80 7f "
374 "24 f1 91 9b aa 77 46 d3 a6 4e 26 8e d3 f5 f8 e6 "
375 "da 83 a2 a5 c9 15 2f 83 7c b0 78 12 bd 5b a7 d3 "
376 "a0 79 85 de 88 11 3c 17 96 e9 b4 66 ec 29 9c 5a "
377 "c1 05 9e 27 f0 94 15 ";
378
379char* signature_9 =
380 "ce eb 84 cc b4 e9 09 92 65 65 07 21 ee a0 e8 ec"
381 "89 ca 25 bd 35 4d 4f 64 56 49 67 be 9d 4b 08 b3"
382 "f1 c0 18 53 9c 9d 37 1c f8 96 1f 22 91 fb e0 dc"
383 "2f 2f 95 fe a4 7b 63 9f 1e 12 f4 bc 38 1c ef 0c"
384 "2b 7a 7b 95 c3 ad f2 76 05 b7 f6 39 98 c3 cb ad"
385 "54 28 08 c3 82 2e 06 4d 4a d1 40 93 67 9e 6e 01"
386 "41 8a 6d 5c 05 96 84 cd 56 e3 4e d6 5a b6 05 b8"
387 "de 4f cf a6 40 47 4a 54 a8 25 1b bb 73 26 a4 2d"
388 "08 58 5c fc fc 95 67 69 b1 5b 6d 7f df 7d a8 4f"
389 "81 97 6e aa 41 d6 92 38 0f f1 0e ae cf e0 a5 79"
390 "68 29 09 b5 52 1f ad e8 54 d7 97 b8 a0 34 5b 9a"
391 "86 4e 05 88 f6 ca dd bf 65 f1 77 99 8e 18 0d 1f"
392 "10 24 43 e6 dc a5 3a 94 82 3c aa 9c 3b 35 f3 22"
393 "58 3c 70 3a f6 74 76 15 9e c7 ec 93 d1 76 9b 30"
394 "0a f0 e7 15 7d c2 98 c6 cd 2d ee 22 62 f8 cd dc"
395 "10 f1 1e 01 74 14 71 bb fd 65 18 a1 75 73 45 75";
396
397// PKCS#1 v1.5 Signature Example 15.10
398
399char* message_10 =
400 "d8 b8 16 45 c1 3c d7 ec f5 d0 0e d2 c9 1b 9a cd "
401 "46 c1 55 68 e5 30 3c 4a 97 75 ed e7 6b 48 40 3d "
402 "6b e5 6c 05 b6 b1 cf 77 c6 e7 5d e0 96 c5 cb 35 "
403 "51 cb 6f a9 64 f3 c8 79 cf 58 9d 28 e1 da 2f 9d "
404 "ec ";
405
406char* signature_10 =
407 "27 45 07 4c a9 71 75 d9 92 e2 b4 47 91 c3 23 c5"
408 "71 67 16 5c dd 8d a5 79 cd ef 46 86 b9 bb 40 4b"
409 "d3 6a 56 50 4e b1 fd 77 0f 60 bf a1 88 a7 b2 4b"
410 "0c 91 e8 81 c2 4e 35 b0 4d c4 dd 4c e3 85 66 bc"
411 "c9 ce 54 f4 9a 17 5f c9 d0 b2 25 22 d9 57 90 47"
412 "f9 ed 42 ec a8 3f 76 4a 10 16 39 97 94 7e 7d 2b"
413 "52 ff 08 98 0e 7e 7c 22 57 93 7b 23 f3 d2 79 d4"
414 "cd 17 d6 f4 95 54 63 73 d9 83 d5 36 ef d7 d1 b6"
415 "71 81 ca 2c b5 0a c6 16 c5 c7 ab fb b9 26 0b 91"
416 "b1 a3 8e 47 24 20 01 ff 45 2f 8d e1 0c a6 ea ea"
417 "dc af 9e dc 28 95 6f 28 a7 11 29 1f c9 a8 08 78"
418 "b8 ba 4c fe 25 b8 28 1c b8 0b c9 cd 6d 2b d1 82"
419 "52 46 ee be 25 2d 99 57 ef 93 70 73 52 08 4e 6d"
420 "36 d4 23 55 1b f2 66 a8 53 40 fb 4a 6a f3 70 88"
421 "0a ab 07 15 3d 01 f4 8d 08 6d f0 bf be c0 5e 7b"
422 "44 3b 97 e7 17 18 97 0e 2f 4b f6 20 23 e9 5b 67";
423
424// PKCS#1 v1.5 Signature Example 15.11
425
426char* message_11 =
427 "e5 73 9b 6c 14 c9 2d 51 0d 95 b8 26 93 33 37 ff "
428 "0d 24 ef 72 1a c4 ef 64 c2 ba d2 64 be 8b 44 ef "
429 "a1 51 6e 08 a2 7e b6 b6 11 d3 30 1d f0 06 2d ae "
430 "fc 73 a8 c0 d9 2e 2c 52 1f ac bc 7b 26 47 38 76 "
431 "7e a6 fc 97 d5 88 a0 ba f6 ce 50 ad f7 9e 60 0b "
432 "d2 9e 34 5f cb 1d ba 71 ac 5c 02 89 02 3f e4 a8 "
433 "2b 46 a5 40 77 19 19 7d 2e 95 8e 35 31 fd 54 ae "
434 "f9 03 aa bb 43 55 f8 83 18 99 4e d3 c3 dd 62 f4 "
435 "20 a7 ";
436
437char* signature_11 =
438 "be 40 a5 fb 94 f1 13 e1 b3 ef f6 b6 a3 39 86 f2"
439 "02 e3 63 f0 74 83 b7 92 e6 8d fa 55 54 df 04 66"
440 "cc 32 15 09 50 78 3b 4d 96 8b 63 9a 04 fd 2f b9"
441 "7f 6e b9 67 02 1f 5a dc cb 9f ca 95 ac c8 f2 cd"
442 "88 5a 38 0b 0a 4e 82 bc 76 07 64 db ab 88 c1 e6"
443 "c0 25 5c aa 94 f2 32 19 9d 6f 59 7c c9 14 5b 00"
444 "e3 d4 ba 34 6b 55 9a 88 33 ad 15 16 ad 51 63 f0"
445 "16 af 6a 59 83 1c 82 ea 13 c8 22 4d 84 d0 76 5a"
446 "9d 12 38 4d a4 60 a8 53 1b 4c 40 7e 04 f4 f3 50"
447 "70 9e b9 f0 8f 5b 22 0f fb 45 ab f6 b7 5d 15 79"
448 "fd 3f 1e b5 5f c7 5b 00 af 8b a3 b0 87 82 7f e9"
449 "ae 9f b4 f6 c5 fa 63 03 1f e5 82 85 2f e2 83 4f"
450 "9c 89 bf f5 3e 25 52 21 6b c7 c1 d4 a3 d5 dc 2b"
451 "a6 95 5c d9 b1 7d 13 63 e7 fe e8 ed 76 29 75 3f"
452 "f3 12 5e dd 48 52 1a e3 b9 b0 32 17 f4 49 6d 0d"
453 "8e de 57 ac bc 5b d4 de ae 74 a5 6f 86 67 1d e2";
454
455// PKCS#1 v1.5 Signature Example 15.12
456
457char* message_12 =
458 "7a f4 28 35 91 7a 88 d6 b3 c6 71 6b a2 f5 b0 d5 "
459 "b2 0b d4 e2 e6 e5 74 e0 6a f1 ee f7 c8 11 31 be "
460 "22 bf 81 28 b9 cb c6 ec 00 27 5b a8 02 94 a5 d1 "
461 "17 2d 08 24 a7 9e 8f dd 83 01 83 e4 c0 0b 96 78 "
462 "28 67 b1 22 7f ea 24 9a ad 32 ff c5 fe 00 7b c5 "
463 "1f 21 79 2f 72 8d ed a8 b5 70 8a a9 9c ab ab 20 "
464 "a4 aa 78 3e d8 6f 0f 27 b5 d5 63 f4 2e 07 15 8c "
465 "ea 72 d0 97 aa 68 87 ec 41 1d d0 12 91 2a 5e 03 "
466 "2b bf a6 78 50 71 44 bc c9 5f 39 b5 8b e7 bf d1 "
467 "75 9a db 9a 91 fa 1d 6d 82 26 a8 34 3a 8b 84 9d "
468 "ae 76 f7 b9 82 24 d5 9e 28 f7 81 f1 3e ce 60 5f "
469 "84 f6 c9 0b ae 5f 8c f3 78 81 6f 40 20 a7 dd a1 "
470 "be d9 0c 92 a2 36 34 d2 03 fa c3 fc d8 6d 68 d3 "
471 "18 2a 7d 9c ca be 7b 07 95 f5 c6 55 e9 ac c4 e3 "
472 "ec 18 51 40 d1 0c ef 05 34 64 ab 17 5c 83 bd 83 "
473 "93 5e 3d ab af 34 62 ee be 63 d1 5f 57 3d 26 9a ";
474
475char* signature_12 =
476 "4e 78 c5 90 2b 80 79 14 d1 2f a5 37 ae 68 71 c8"
477 "6d b8 02 1e 55 d1 ad b8 eb 0c cf 1b 8f 36 ab 7d"
478 "ad 1f 68 2e 94 7a 62 70 72 f0 3e 62 73 71 78 1d"
479 "33 22 1d 17 4a be 46 0d bd 88 56 0c 22 f6 90 11"
480 "6e 2f bb e6 e9 64 36 3a 3e 52 83 bb 5d 94 6e f1"
481 "c0 04 7e ba 03 8c 75 6c 40 be 79 23 05 58 09 b0"
482 "e9 f3 4a 03 a5 88 15 eb dd e7 67 93 1f 01 8f 6f"
483 "18 78 f2 ef 4f 47 dd 37 40 51 dd 48 68 5d ed 6e"
484 "fb 3e a8 02 1f 44 be 1d 7d 14 93 98 f9 8e a9 c0"
485 "8d 62 88 8e bb 56 19 2d 17 74 7b 6b 8e 17 09 54"
486 "31 f1 25 a8 a8 e9 96 2a a3 1c 28 52 64 e0 8f b2"
487 "1a ac 33 6c e6 c3 8a a3 75 e4 2b c9 2a b0 ab 91"
488 "03 84 31 e1 f9 2c 39 d2 af 5d ed 7e 43 bc 15 1e"
489 "6e be a4 c3 e2 58 3a f3 43 7e 82 c4 3c 5e 3b 5b"
490 "07 cf 03 59 68 3d 22 98 e3 59 48 ed 80 6c 06 3c"
491 "60 6e a1 78 15 0b 1e fc 15 85 69 34 c7 25 5c fe";
492
493// PKCS#1 v1.5 Signature Example 15.13
494
495char* message_13 =
496 "eb ae f3 f9 f2 3b df e5 fa 6b 8a f4 c2 08 c1 89 "
497 "f2 25 1b f3 2f 5f 13 7b 9d e4 40 63 78 68 6b 3f "
498 "07 21 f6 2d 24 cb 86 88 d6 fc 41 a2 7c ba e2 1d "
499 "30 e4 29 fe ac c7 11 19 41 c2 77 ";
500
501char* signature_13 =
502 "c4 8d be f5 07 11 4f 03 c9 5f af be b4 df 1b fa"
503 "88 e0 18 4a 33 cc 4f 8a 9a 10 35 ff 7f 82 2a 5e"
504 "38 cd a1 87 23 91 5f f0 78 24 44 29 e0 f6 08 1c"
505 "14 fd 83 33 1f a6 5c 6b a7 bb 9a 12 db f6 62 23"
506 "74 cd 0c a5 7d e3 77 4e 2b d7 ae 82 36 77 d0 61"
507 "d5 3a e9 c4 04 0d 2d a7 ef 70 14 f3 bb dc 95 a3"
508 "61 a4 38 55 c8 ce 9b 97 ec ab ce 17 4d 92 62 85"
509 "14 2b 53 4a 30 87 f9 f4 ef 74 51 1e c7 42 b0 d5"
510 "68 56 03 fa f4 03 b5 07 2b 98 5d f4 6a df 2d 25"
511 "29 a0 2d 40 71 1e 21 90 91 70 52 37 1b 79 b7 49"
512 "b8 3a bf 0a e2 94 86 c3 f2 f6 24 77 b2 bd 36 2b"
513 "03 9c 01 3c 0c 50 76 ef 52 0d bb 40 5f 42 ce e9"
514 "54 25 c3 73 a9 75 e1 cd d0 32 c4 96 22 c8 50 79"
515 "b0 9e 88 da b2 b1 39 69 ef 7a 72 39 73 78 10 40"
516 "45 9f 57 d5 01 36 38 48 3d e2 d9 1c b3 c4 90 da"
517 "81 c4 6d e6 cd 76 ea 8a 0c 8f 6f e3 31 71 2d 24";
518
519// PKCS#1 v1.5 Signature Example 15.14
520
521char* message_14 =
522 "c5 a2 71 12 78 76 1d fc dd 4f 0c 99 e6 f5 61 9d "
523 "6c 48 b5 d4 c1 a8 09 82 fa a6 b4 cf 1c f7 a6 0f "
524 "f3 27 ab ef 93 c8 01 42 9e fd e0 86 40 85 81 46 "
525 "10 56 ac c3 3f 3d 04 f5 ad a2 12 16 ca cd 5f d1 "
526 "f9 ed 83 20 3e 0e 2f e6 13 8e 3e ae 84 24 e5 91 "
527 "5a 08 3f 3f 7a b7 60 52 c8 be 55 ae 88 2d 6e c1 "
528 "48 2b 1e 45 c5 da e9 f4 10 15 40 53 27 02 2e c3 "
529 "2f 0e a2 42 97 63 b2 55 04 3b 19 58 ee 3c f6 d6 "
530 "39 83 59 6e b3 85 84 4f 85 28 cc 9a 98 65 83 5d "
531 "c5 11 3c 02 b8 0d 0f ca 68 aa 25 e7 2b ca ae b3 "
532 "cf 9d 79 d8 4f 98 4f d4 17 ";
533
534char* signature_14 =
535 "6b d5 25 7a a0 66 11 fb 46 60 08 7c b4 bc 4a 9e"
536 "44 91 59 d3 16 52 bd 98 08 44 da f3 b1 c7 b3 53"
537 "f8 e5 61 42 f7 ea 98 57 43 3b 18 57 3b 4d ee de"
538 "81 8a 93 b0 29 02 97 78 3f 1a 2f 23 cb c7 27 97"
539 "a6 72 53 7f 01 f6 24 84 cd 41 62 c3 21 4b 9a c6"
540 "28 22 4c 5d e0 1f 32 bb 9b 76 b2 73 54 f2 b1 51"
541 "d0 e8 c4 21 3e 46 15 ad 0b c7 1f 51 5e 30 0d 6a"
542 "64 c6 74 34 11 ff fd e8 e5 ff 19 0e 54 92 30 43"
543 "12 6e cf c4 c4 53 90 22 66 8f b6 75 f2 5c 07 e2"
544 "00 99 ee 31 5b 98 d6 af ec 4b 1a 9a 93 dc 33 49"
545 "6a 15 bd 6f de 16 63 a7 d4 9b 9f 1e 63 9d 38 66"
546 "4b 37 a0 10 b1 f3 5e 65 86 82 d9 cd 63 e5 7d e0"
547 "f1 5e 8b dd 09 65 58 f0 7e c0 ca a2 18 a8 c0 6f"
548 "47 88 45 39 40 28 7c 9d 34 b6 d4 0a 3f 09 bf 77"
549 "99 fe 98 ae 4e b4 9f 3f f4 1c 50 40 a5 0c ef c9"
550 "bd f2 39 4b 74 9c f1 64 48 0d f1 ab 68 80 27 3b";
551
552// PKCS#1 v1.5 Signature Example 15.15
553
554char* message_15 =
555 "9b f8 aa 25 3b 87 2e a7 7a 7e 23 47 6b e2 6b 23 "
556 "29 57 8c f6 ac 9e a2 80 5b 35 7f 6f c3 ad 13 0d "
557 "ba eb 3d 86 9a 13 cc e7 a8 08 bb bb c9 69 85 7e "
558 "03 94 5c 7b b6 1d f1 b5 c2 58 9b 8e 04 6c 2a 5d "
559 "7e 40 57 b1 a7 4f 24 c7 11 21 63 64 28 85 29 ec "
560 "95 70 f2 51 97 21 3b e1 f5 c2 e5 96 f8 bf 8b 2c "
561 "f3 cb 38 aa 56 ff e5 e3 1d f7 39 58 20 e9 4e cf "
562 "3b 11 89 a9 65 dc f9 a9 cb 42 98 d3 c8 8b 29 23 "
563 "c1 9f c6 bc 34 aa ce ca d4 e0 93 1a 7c 4e 5d 73 "
564 "dc 86 df a7 98 a8 47 6d 82 46 3e ef aa 90 a8 a9 "
565 "19 2a b0 8b 23 08 8d d5 8e 12 80 f7 d7 2e 45 48 "
566 "39 6b aa c1 12 25 2d d5 c5 34 6a db 20 04 a2 f7 "
567 "10 1c cc 89 9c c7 fa fa e8 bb e2 95 73 88 96 a5 "
568 "b2 01 22 85 01 4e f6 ";
569
570char* signature_15 =
571 "27 f7 f4 da 9b d6 10 10 6e f5 7d 32 38 3a 44 8a"
572 "8a 62 45 c8 3d c1 30 9c 6d 77 0d 35 7b a8 9e 73"
573 "f2 ad 08 32 06 2e b0 fe 0a c9 15 57 5b cd 6b 8b"
574 "ca db 4e 2b a6 fa 9d a7 3a 59 17 51 52 b2 d4 fe"
575 "72 b0 70 c9 b7 37 9e 50 00 0e 55 e6 c2 69 f6 65"
576 "8c 93 79 72 79 7d 3a dd 69 f1 30 e3 4b 85 bd ec"
577 "9f 3a 9b 39 22 02 d6 f3 e4 30 d0 9c ac a8 22 77"
578 "59 ab 82 5f 70 12 d2 ff 4b 5b 62 c8 50 4d ba d8"
579 "55 c0 5e dd 5c ab 5a 4c cc dc 67 f0 1d d6 51 7c"
580 "7d 41 c4 3e 2a 49 57 af f1 9d b6 f1 8b 17 85 9a"
581 "f0 bc 84 ab 67 14 6e c1 a4 a6 0a 17 d7 e0 5f 8b"
582 "4f 9c ed 6a d1 09 08 d8 d7 8f 7f c8 8b 76 ad c8"
583 "29 0f 87 da f2 a7 be 10 ae 40 85 21 39 5d 54 ed"
584 "25 56 fb 76 61 85 4a 73 0c e3 d8 2c 71 a8 d4 93"
585 "ec 49 a3 78 ac 8a 3c 74 43 9f 7c c5 55 ba 13 f8"
586 "59 07 08 90 ee 18 ff 65 8f a4 d7 41 96 9d 70 a5";
587
588// PKCS#1 v1.5 Signature Example 15.16
589
590char* message_16 =
591 "32 47 48 30 e2 20 37 54 c8 bf 06 81 dc 4f 84 2a "
592 "fe 36 09 30 37 86 16 c1 08 e8 33 65 6e 56 40 c8 "
593 "68 56 88 5b b0 5d 1e b9 43 8e fe de 67 92 63 de "
594 "07 cb 39 55 3f 6a 25 e0 06 b0 a5 23 11 a0 63 ca "
595 "08 82 66 d2 56 4f f6 49 0c 46 b5 60 98 18 54 8f "
596 "88 76 4d ad 34 a2 5e 3a 85 d5 75 02 3f 0b 9e 66 "
597 "50 48 a0 3c 35 05 79 a9 d3 24 46 c7 bb 96 cc 92 "
598 "e0 65 ab 94 d3 c8 95 2e 8d f6 8e f0 d9 fa 45 6b "
599 "3a 06 bb 80 e3 bb c4 b2 8e 6a 94 b6 d0 ff 76 96 "
600 "a6 4e fe 05 e7 35 fe a0 25 d7 bd bc 41 39 f3 a3 "
601 "b5 46 07 5c ba 7e fa 94 73 74 d3 f0 ac 80 a6 8d "
602 "76 5f 5d f6 21 0b ca 06 9a 2d 88 64 7a f7 ea 04 "
603 "2d ac 69 0c b5 73 78 ec 07 77 61 4f b8 b6 5f f4 "
604 "53 ca 6b 7d ce 60 98 45 1a 2f 8c 0d a9 bf ec f1 "
605 "fd f3 91 bb aa 4e 2a 91 ca 18 a1 12 1a 75 23 a2 "
606 "ab d4 25 14 f4 89 e8 ";
607
608char* signature_16 =
609 "69 17 43 72 57 c2 2c cb 54 03 29 0c 3d ee 82 d9"
610 "cf 75 50 b3 1b d3 1c 51 bd 57 bf d3 5d 45 2a b4"
611 "db 7c 4b e6 b2 e2 5a c9 a5 9a 1d 2a 7f eb 62 7f"
612 "0a fd 49 76 b3 00 3c c9 cf fd 88 96 50 5e c3 82"
613 "f2 65 10 4d 4c f8 c9 32 fa 9f e8 6e 00 87 07 95"
614 "99 12 38 9d a4 b2 d6 b3 69 b3 6a 5e 72 e2 9d 24"
615 "c9 a9 8c 9d 31 a3 ab 44 e6 43 e6 94 12 66 a4 7a"
616 "45 e3 44 6c e8 77 6a be 24 1a 8f 5f c6 42 3b 24"
617 "b1 ff 25 0d c2 c3 a8 17 23 53 56 10 77 e8 50 a7"
618 "69 b2 5f 03 25 da c8 89 65 a3 b9 b4 72 c4 94 e9"
619 "5f 71 9b 4e ac 33 2c aa 7a 65 c7 df e4 6d 9a a7"
620 "e6 e0 0f 52 5f 30 3d d6 3a b7 91 92 18 90 18 68"
621 "f9 33 7f 8c d2 6a af e6 f3 3b 7f b2 c9 88 10 af"
622 "19 f7 fc b2 82 ba 15 77 91 2c 1d 36 89 75 fd 5d"
623 "44 0b 86 e1 0c 19 97 15 fa 0b 6f 42 50 b5 33 73"
624 "2d 0b ef e1 54 51 50 fc 47 b8 76 de 09 b0 0a 94";
625
626// PKCS#1 v1.5 Signature Example 15.17
627
628char* message_17 =
629 "00 8e 59 50 5e af b5 50 aa e5 e8 45 58 4c eb b0 "
630 "0b 6d e1 73 3e 9f 95 d4 2c 88 2a 5b be b5 ce 1c "
631 "57 e1 19 e7 c0 d4 da ca 9f 1f f7 87 02 17 f7 cf "
632 "d8 a6 b3 73 97 7c ac 9c ab 8e 71 e4 20 ";
633
634char* signature_17 =
635 "92 25 03 b6 73 ee 5f 3e 69 1e 1c a8 5e 9f f4 17"
636 "3c f7 2b 05 ac 2c 13 1d a5 60 35 93 e3 bc 25 9c"
637 "94 c1 f7 d3 a0 6a 5b 98 91 bf 11 3f a3 9e 59 ff"
638 "7c 1e d6 46 5e 90 80 49 cb 89 e4 e1 25 cd 37 d2"
639 "ff d9 22 7a 41 b4 a0 a1 9c 0a 44 fb bf 3d e5 5b"
640 "ab 80 20 87 a3 bb 8d 4f f6 68 ee 6b bb 8a d8 9e"
641 "68 57 a7 9a 9c 72 78 19 90 df cf 92 cd 51 94 04"
642 "c9 50 f1 3d 11 43 c3 18 4f 1d 25 0c 90 e1 7a c6"
643 "ce 36 16 3b 98 95 62 7a d6 ff ec 14 22 44 1f 55"
644 "e4 49 9d ba 9b e8 95 46 ae 8b c6 3c ca 01 dd 08"
645 "46 3a e7 f1 fc e3 d8 93 99 69 38 77 8c 18 12 e6"
646 "74 ad 9c 30 9c 5a cc a3 fd e4 4e 7d d8 69 59 93"
647 "e9 c1 fa 87 ac da 99 ec e5 c8 49 9e 46 89 57 ad"
648 "66 35 9b f1 2a 51 ad be 78 d3 a2 13 b4 49 bf 0b"
649 "5f 8d 4d 49 6a cf 03 d3 03 3b 7c cd 19 6b c2 2f"
650 "68 fb 7b ef 4f 69 7c 5e a2 b3 50 62 f4 8a 36 dd";
651
652// PKCS#1 v1.5 Signature Example 15.18
653
654char* message_18 =
655 "6a bc 54 cf 8d 1d ff 1f 53 b1 7d 81 60 36 88 78 "
656 "a8 78 8c c6 d2 2f a5 c2 25 8c 88 e6 60 b0 9a 89 "
657 "33 f9 f2 c0 50 4d da dc 21 f6 e7 5e 0b 83 3b eb "
658 "55 52 29 de e6 56 b9 04 7b 92 f6 2e 76 b8 ff cc "
659 "60 da b0 6b 80 ";
660
661char* signature_18 =
662 "0b 6d af 42 f7 a8 62 14 7e 41 74 93 c2 c4 01 ef"
663 "ae 32 63 6a b4 cb d4 41 92 bb f5 f1 95 b5 0a e0"
664 "96 a4 75 a1 61 4f 0a 9f a8 f7 a0 26 cb 46 c6 50"
665 "6e 51 8e 33 d8 3e 56 47 7a 87 5a ca 8c 7e 71 4c"
666 "e1 bd bd 61 ef 5d 53 52 39 b3 3f 2b fd d6 17 71"
667 "ba b6 27 76 d7 81 71 a1 42 3c ea 87 31 f8 2e 60"
668 "76 6d 64 54 26 56 20 b1 5f 5c 5a 58 4f 55 f9 5b"
669 "80 2f e7 8c 57 4e d5 da cf c8 31 f3 cf 2b 05 02"
670 "c0 b2 98 f2 5c cf 11 f9 73 b3 1f 85 e4 74 42 19"
671 "85 f3 cf f7 02 df 39 46 ef 0a 66 05 68 21 11 b2"
672 "f5 5b 1f 8a b0 d2 ea 3a 68 3c 69 98 5e ad 93 ed"
673 "44 9e a4 8f 03 58 dd f7 08 02 cb 41 de 2f d8 3f"
674 "3c 80 80 82 d8 49 36 94 8e 0c 84 a1 31 b4 92 78"
675 "27 46 05 27 bb 5c d2 4b fa b7 b4 8e 07 1b 24 17"
676 "19 30 f9 97 63 27 2f 97 97 bc b7 6f 1d 24 81 57"
677 "55 58 fc f2 60 b1 f0 e5 54 eb b3 df 3c fc b9 58";
678
679// PKCS#1 v1.5 Signature Example 15.19
680
681char* message_19 =
682 "af 2d 78 15 2c f1 0e fe 01 d2 74 f2 17 b1 77 f6 "
683 "b0 1b 5e 74 9f 15 67 71 5d a3 24 85 9c d3 dd 88 "
684 "db 84 8e c7 9f 48 db ba 7b 6f 1d 33 11 1e f3 1b "
685 "64 89 9e 73 91 c2 bf fd 69 f4 90 25 cf 20 1f c5 "
686 "85 db d1 54 2c 1c 77 8a 2c e7 a7 ee 10 8a 30 9f "
687 "ec a2 6d 13 3a 5f fe dc 4e 86 9d cd 76 56 59 6a "
688 "c8 42 7e a3 ef 6e 3f d7 8f e9 9d 8d dc 71 d8 39 "
689 "f6 78 6e 0d a6 e7 86 bd 62 b3 a4 f1 9b 89 1a 56 "
690 "15 7a 55 4e c2 a2 b3 9e 25 a1 d7 c7 d3 73 21 c7 "
691 "a1 d9 46 cf 4f be 75 8d 92 76 f0 85 63 44 9d 67 "
692 "41 4a 2c 03 0f 42 51 cf e2 21 3d 04 a5 41 06 37 "
693 "87 ";
694
695char* signature_19 =
696 "20 9c 61 15 78 57 38 7b 71 e2 4b f3 dd 56 41 45"
697 "50 50 3b ec 18 0f f5 3b dd 9b ac 06 2a 2d 49 95"
698 "09 bf 99 12 81 b7 95 27 df 91 36 61 5b 7a 6d 9d"
699 "b3 a1 03 b5 35 e0 20 2a 2c ac a1 97 a7 b7 4e 53"
700 "56 f3 dd 59 5b 49 ac fd 9d 30 04 9a 98 ca 88 f6"
701 "25 bc a1 d5 f2 2a 39 2d 8a 74 9e fb 6e ed 9b 78"
702 "21 d3 11 0a c0 d2 44 19 9e cb 4a a3 d7 35 a8 3a"
703 "2e 88 93 c6 bf 85 81 38 3c ca ee 83 46 35 b7 fa"
704 "1f af fa 45 b1 3d 15 c1 da 33 af 71 e8 93 03 d6"
705 "80 90 ff 62 ee 61 5f df 5a 84 d1 20 71 1d a5 3c"
706 "28 89 19 8a b3 83 17 a9 73 4a b2 7d 67 92 4c ea"
707 "74 15 6f f9 9b ef 98 76 bb 5c 33 9e 93 74 52 83"
708 "e1 b3 4e 07 22 26 b8 80 45 e0 17 e9 f0 5b 2a 8c"
709 "41 67 40 25 8e 22 3b 26 90 02 74 91 73 22 73 f3"
710 "22 9d 9e f2 b1 b3 80 7e 32 10 18 92 0a d3 e5 3d"
711 "ae 47 e6 d9 39 5c 18 4b 93 a3 74 c6 71 fa a2 ce";
712
713// PKCS#1 v1.5 Signature Example 15.20
714
715char* message_20 =
716 "40 ee 99 24 58 d6 f6 14 86 d2 56 76 a9 6d d2 cb "
717 "93 a3 7f 04 b1 78 48 2f 2b 18 6c f8 82 15 27 0d "
718 "ba 29 d7 86 d7 74 b0 c5 e7 8c 7f 6e 56 a9 56 e7 "
719 "f7 39 50 a2 b0 c0 c1 0a 08 db cd 67 e5 b2 10 bb "
720 "21 c5 8e 27 67 d4 4f 7d d4 01 4e 39 66 14 3b f7 "
721 "e3 d6 6f f0 c0 9b e4 c5 5f 93 b3 99 94 b8 51 8d "
722 "9c 1d 76 d5 b4 73 74 de a0 8f 15 7d 57 d7 06 34 "
723 "97 8f 38 56 e0 e5 b4 81 af bb db 5a 3a c4 8d 48 "
724 "4b e9 2c 93 de 22 91 78 35 4c 2d e5 26 e9 c6 5a "
725 "31 ed e1 ef 68 cb 63 98 d7 91 16 84 fe c0 ba bc "
726 "3a 78 1a 66 66 07 83 50 69 74 d0 e1 48 25 10 1c "
727 "3b fa ea ";
728
729char* signature_20 =
730 "92 75 02 b8 24 af c4 25 13 ca 65 70 de 33 8b 8a"
731 "64 c3 a8 5e b8 28 d3 19 36 24 f2 7e 8b 10 29 c5"
732 "5c 11 9c 97 33 b1 8f 58 49 b3 50 09 18 bc c0 05"
733 "51 d9 a8 fd f5 3a 97 74 9f a8 dc 48 0d 6f e9 74"
734 "2a 58 71 f9 73 92 65 28 97 2a 1a f4 9e 39 25 b0"
735 "ad f1 4a 84 27 19 b4 a5 a2 d8 9f a9 c0 b6 60 5d"
736 "21 2b ed 1e 67 23 b9 34 06 ad 30 e8 68 29 a5 c7"
737 "19 b8 90 b3 89 30 6d c5 50 64 86 ee 2f 36 a8 df"
738 "e0 a9 6a f6 78 c9 cb d6 af f3 97 ca 20 0e 3e dc"
739 "1e 36 bd 2f 08 b3 1d 54 0c 0c b2 82 a9 55 9e 4a"
740 "dd 4f c9 e6 49 2e ed 0c cb d3 a6 98 2e 5f aa 2d"
741 "dd 17 be 47 41 7c 80 b4 e5 45 2d 31 f7 24 01 a0"
742 "42 32 51 09 54 4d 95 4c 01 93 90 79 d4 09 a5 c3"
743 "78 d7 51 2d fc 2d 2a 71 ef cc 34 32 a7 65 d1 c6"
744 "a5 2c fc e8 99 cd 79 b1 5b 4f c3 72 36 41 ef 6b"
745 "d0 0a cc 10 40 7e 5d f5 8d d1 c3 c5 c5 59 a5 06";
746
747
748unsigned char* parsehex(char* str, int* len) {
749 // result can't be longer than input
750 unsigned char* result = malloc(strlen(str));
751
752 unsigned char* p = result;
753 *len = 0;
754
755 while (*str) {
756 int b;
757
758 while (isspace(*str)) str++;
759
760 switch (*str) {
761 case '0': case '1': case '2': case '3': case '4':
762 case '5': case '6': case '7': case '8': case '9':
763 b = (*str - '0') << 4; break;
764 case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
765 b = (*str - 'a' + 10) << 4; break;
766 case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
767 b = (*str - 'A' + 10) << 4; break;
768 case '\0':
769 return result;
770 default:
771 return NULL;
772 }
773 str++;
774
775 while (isspace(*str)) str++;
776
777 switch (*str) {
778 case '0': case '1': case '2': case '3': case '4':
779 case '5': case '6': case '7': case '8': case '9':
780 b |= *str - '0'; break;
781 case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
782 b |= *str - 'a' + 10; break;
783 case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
784 b |= *str - 'A' + 10; break;
785 default:
786 return NULL;
787 }
788 str++;
789
790 *p++ = b;
791 ++*len;
792 }
793
794 return result;
795}
796
797
Mark Salyzyn60927432014-04-30 14:12:23 -0700798int main(int arg __unused, char** argv __unused) {
Doug Zongker5137d832013-04-10 15:08:28 -0700799
800 unsigned char hash[SHA_DIGEST_SIZE];
801
802 unsigned char* message;
803 int mlen;
804 unsigned char* signature;
805 int slen;
806
807#define TEST_MESSAGE(n) do {\
808 message = parsehex(message_##n, &mlen); \
809 SHA_hash(message, mlen, hash); \
810 signature = parsehex(signature_##n, &slen); \
811 int result = RSA_verify(&key_15, signature, slen, hash, sizeof(hash)); \
812 printf("message %d: %s\n", n, result ? "verified" : "not verified"); \
813 success = success && result; \
814 } while(0)
815
816 int success = 1;
817
818 TEST_MESSAGE(1);
819 TEST_MESSAGE(2);
820 TEST_MESSAGE(3);
821 TEST_MESSAGE(4);
822 TEST_MESSAGE(5);
823 TEST_MESSAGE(6);
824 TEST_MESSAGE(7);
825 TEST_MESSAGE(8);
826 TEST_MESSAGE(9);
827 TEST_MESSAGE(10);
828 TEST_MESSAGE(11);
829 TEST_MESSAGE(12);
830 TEST_MESSAGE(13);
831 TEST_MESSAGE(14);
832 TEST_MESSAGE(15);
833 TEST_MESSAGE(16);
834 TEST_MESSAGE(17);
835 TEST_MESSAGE(18);
836 TEST_MESSAGE(19);
837 TEST_MESSAGE(20);
838
839 printf("\n%s\n\n", success ? "PASS" : "FAIL");
840
841 return !success;
842}