Home | History | Annotate | Download | only in test
      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