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 74 RSAPublicKey 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 114 char* 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 131 char* 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 151 char *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 163 char* 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 183 char* 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 201 char* 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 221 char* 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 227 char* 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 247 char* message_5 = 248 "bd a3 a1 c7 90 59 ea e5 98 30 8d 3d f6 09 "; 249 250 char* 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 270 char* 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 279 char* 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 299 char* 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 309 char* 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 329 char* 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 345 char* 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 365 char* 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 379 char* 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 399 char* 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 406 char* 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 426 char* 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 437 char* 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 457 char* 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 475 char* 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 495 char* 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 501 char* 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 521 char* 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 534 char* 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 554 char* 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 570 char* 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 590 char* 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 608 char* 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 628 char* 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 634 char* 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 654 char* 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 661 char* 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 681 char* 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 695 char* 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 715 char* 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 729 char* 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 748 unsigned 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 798 int 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