1/* 2** 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 27#include <ctype.h> 28#include <stdio.h> 29#include <stdlib.h> 30#include <string.h> 31#include <sys/cdefs.h> 32 33#include "mincrypt/rsa.h" 34#include "mincrypt/sha.h" 35 36#ifndef __unused 37#define __unused __attribute__((unused)) 38#endif 39 40// 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 798int main(int arg __unused, char** argv __unused) { 799 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} 843