You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

hmac_drbg_test.c 59KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386
  1. /*
  2. * Copyright (C) 2012 Michael Brown <mbrown@fensystems.co.uk>.
  3. *
  4. * This program is free software; you can redistribute it and/or
  5. * modify it under the terms of the GNU General Public License as
  6. * published by the Free Software Foundation; either version 2 of the
  7. * License, or any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful, but
  10. * WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  12. * General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU General Public License
  15. * along with this program; if not, write to the Free Software
  16. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  17. * 02110-1301, USA.
  18. */
  19. FILE_LICENCE ( GPL2_OR_LATER );
  20. /** @file
  21. *
  22. * HMAC_DRBG tests
  23. *
  24. * These test vectors are provided by NIST as part of the
  25. * Cryptographic Toolkit Examples, downloadable from:
  26. *
  27. * http://csrc.nist.gov/groups/ST/toolkit/documents/Examples/HMAC_DRBG.pdf
  28. *
  29. */
  30. /* Forcibly enable assertions */
  31. #undef NDEBUG
  32. #include <assert.h>
  33. #include <string.h>
  34. #include <ipxe/hmac_drbg.h>
  35. #include <ipxe/sha1.h>
  36. #include <ipxe/sha256.h>
  37. #include <ipxe/test.h>
  38. /** Define inline expected data */
  39. #define EXPECT(...) { __VA_ARGS__ }
  40. /** An HMAC_DRBG instantiation test */
  41. struct hmac_drbg_test_instantiate {
  42. /** Underlying hash algorithm */
  43. struct digest_algorithm *hash;
  44. /** Output block length */
  45. size_t out_len;
  46. /** Entropy */
  47. const void *entropy;
  48. /** Length of entropy */
  49. size_t entropy_len;
  50. /** Nonce */
  51. const void *nonce;
  52. /** Length of nonce */
  53. size_t nonce_len;
  54. /** Personalisation string */
  55. const void *personal;
  56. /** Length of personalisation string */
  57. size_t personal_len;
  58. /** Expected key */
  59. const void *expected_key;
  60. /** Length of expected key */
  61. size_t expected_key_len;
  62. /** Expected value */
  63. const void *expected_value;
  64. /** Length of expected value */
  65. size_t expected_value_len;
  66. };
  67. /**
  68. * Define an HMAC_DRBG instantiation test
  69. *
  70. * @v name Test name
  71. * @v hmac_drbg HMAC_DRBG algorithm
  72. * @v entropy_array Entropy input
  73. * @v nonce_array Nonce
  74. * @v personal_array Personalisation string
  75. * @v key Expected key
  76. * @v value Expected value
  77. * @ret test Instantiation test
  78. */
  79. #define HMAC_DRBG_TEST_INSTANTIATE( name, hmac_drbg, entropy_array, \
  80. nonce_array, personal_array, \
  81. key, value ) \
  82. static const uint8_t name ## _key [] = key; \
  83. static const uint8_t name ## _value [] = value; \
  84. static struct hmac_drbg_test_instantiate name = { \
  85. .hash = HMAC_DRBG_HASH ( hmac_drbg ), \
  86. .out_len = HMAC_DRBG_OUTLEN_BYTES ( hmac_drbg ), \
  87. .entropy = entropy_array, \
  88. .entropy_len = sizeof ( entropy_array ), \
  89. .nonce = nonce_array, \
  90. .nonce_len = sizeof ( nonce_array ), \
  91. .personal = personal_array, \
  92. .personal_len = sizeof ( personal_array ), \
  93. .expected_key = name ## _key, \
  94. .expected_key_len = sizeof ( name ## _key ), \
  95. .expected_value = name ## _value, \
  96. .expected_value_len = sizeof ( name ## _value ), \
  97. }
  98. /**
  99. * Report instantiation test result
  100. *
  101. * @v state HMAC_DRBG internal state
  102. * @v test Instantiation test
  103. */
  104. #define instantiate_ok( state, test ) do { \
  105. struct { \
  106. uint8_t entropy[(test)->entropy_len]; \
  107. uint8_t nonce[(test)->nonce_len]; \
  108. } __attribute__ (( packed )) entropy_nonce; \
  109. \
  110. assert ( (test)->expected_key_len == (test)->out_len ); \
  111. assert ( (test)->expected_value_len == (test)->out_len ); \
  112. memcpy ( entropy_nonce.entropy, (test)->entropy, \
  113. sizeof ( entropy_nonce.entropy ) ); \
  114. memcpy ( entropy_nonce.nonce, (test)->nonce, \
  115. sizeof ( entropy_nonce.nonce ) ); \
  116. hmac_drbg_instantiate ( (test)->hash, (state), &entropy_nonce, \
  117. sizeof ( entropy_nonce ), \
  118. (test)->personal, \
  119. (test)->personal_len ); \
  120. ok ( memcmp ( (state)->key, (test)->expected_key, \
  121. (test)->expected_key_len ) == 0 ); \
  122. ok ( memcmp ( (state)->value, (test)->expected_value, \
  123. (test)->expected_value_len ) == 0 ); \
  124. } while ( 0 )
  125. /** An HMAC_DRBG reseed test */
  126. struct hmac_drbg_test_reseed {
  127. /** Underlying hash algorithm */
  128. struct digest_algorithm *hash;
  129. /** Output block length */
  130. size_t out_len;
  131. /** Entropy */
  132. const void *entropy;
  133. /** Length of entropy */
  134. size_t entropy_len;
  135. /** Additional input */
  136. const void *additional;
  137. /** Length of additional_input */
  138. size_t additional_len;
  139. /** Expected key */
  140. const void *expected_key;
  141. /** Length of expected key */
  142. size_t expected_key_len;
  143. /** Expected value */
  144. const void *expected_value;
  145. /** Length of expected value */
  146. size_t expected_value_len;
  147. };
  148. /**
  149. * Define an HMAC_DRBG reseed test
  150. *
  151. * @v name Test name
  152. * @v hmac_drbg HMAC_DRBG algorithm
  153. * @v entropy_array Entropy input
  154. * @v additional_array Additional input
  155. * @v key Expected key
  156. * @v value Expected value
  157. * @ret test Reseed test
  158. */
  159. #define HMAC_DRBG_TEST_RESEED( name, hmac_drbg, entropy_array, \
  160. additional_array, key, value ) \
  161. static const uint8_t name ## _key [] = key; \
  162. static const uint8_t name ## _value [] = value; \
  163. static struct hmac_drbg_test_reseed name = { \
  164. .hash = HMAC_DRBG_HASH ( hmac_drbg ), \
  165. .out_len = HMAC_DRBG_OUTLEN_BYTES ( hmac_drbg ), \
  166. .entropy = entropy_array, \
  167. .entropy_len = sizeof ( entropy_array ), \
  168. .additional = additional_array, \
  169. .additional_len = sizeof ( additional_array ), \
  170. .expected_key = name ## _key, \
  171. .expected_key_len = sizeof ( name ## _key ), \
  172. .expected_value = name ## _value, \
  173. .expected_value_len = sizeof ( name ## _value ), \
  174. }
  175. /**
  176. * Report reseed test result
  177. *
  178. * @v state HMAC_DRBG internal state
  179. * @v test Reseed test
  180. */
  181. #define reseed_ok( state, test ) do { \
  182. assert ( (test)->expected_key_len == (test)->out_len ); \
  183. assert ( (test)->expected_value_len == (test)->out_len ); \
  184. hmac_drbg_reseed ( (test)->hash, (state), (test)->entropy, \
  185. (test)->entropy_len, (test)->additional, \
  186. (test)->additional_len ); \
  187. ok ( memcmp ( (state)->key, (test)->expected_key, \
  188. (test)->expected_key_len ) == 0 ); \
  189. ok ( memcmp ( (state)->value, (test)->expected_value, \
  190. (test)->expected_value_len ) == 0 ); \
  191. } while ( 0 )
  192. /** An HMAC_DRBG generation test */
  193. struct hmac_drbg_test_generate {
  194. /** Underlying hash algorithm */
  195. struct digest_algorithm *hash;
  196. /** Output block length */
  197. size_t out_len;
  198. /** Additional input */
  199. const void *additional;
  200. /** Length of additional_input */
  201. size_t additional_len;
  202. /** Expected key */
  203. const void *expected_key;
  204. /** Length of expected key */
  205. size_t expected_key_len;
  206. /** Expected value */
  207. const void *expected_value;
  208. /** Length of expected value */
  209. size_t expected_value_len;
  210. /** Expected pseudorandom data */
  211. const void *expected_data;
  212. /** Length of data */
  213. size_t expected_data_len;
  214. };
  215. /**
  216. * Define an HMAC_DRBG generation test
  217. *
  218. * @v name Test name
  219. * @v hmac_drbg HMAC_DRBG algorithm
  220. * @v additional_array Additional input
  221. * @v key Expected key
  222. * @v value Expected value
  223. * @v data Expected pseudorandom data
  224. * @ret test Generation test
  225. */
  226. #define HMAC_DRBG_TEST_GENERATE( name, hmac_drbg, additional_array, \
  227. key, value, data ) \
  228. static const uint8_t name ## _key [] = key; \
  229. static const uint8_t name ## _value [] = value; \
  230. static const uint8_t name ## _data [] = data; \
  231. static struct hmac_drbg_test_generate name = { \
  232. .hash = HMAC_DRBG_HASH ( hmac_drbg ), \
  233. .out_len = HMAC_DRBG_OUTLEN_BYTES ( hmac_drbg ), \
  234. .additional = additional_array, \
  235. .additional_len = sizeof ( additional_array ), \
  236. .expected_key = name ## _key, \
  237. .expected_key_len = sizeof ( name ## _key ), \
  238. .expected_value = name ## _value, \
  239. .expected_value_len = sizeof ( name ## _value ), \
  240. .expected_data = name ## _data, \
  241. .expected_data_len = sizeof ( name ## _data ), \
  242. }
  243. /**
  244. * Report generation test result
  245. *
  246. * @v state HMAC_DRBG internal state
  247. * @v test Generation test
  248. */
  249. #define generate_ok( state, test ) do { \
  250. uint8_t data[ (test)->expected_data_len ]; \
  251. int rc; \
  252. \
  253. assert ( (test)->expected_key_len == (test)->out_len ); \
  254. assert ( (test)->expected_value_len == (test)->out_len ); \
  255. rc = hmac_drbg_generate ( (test)->hash, (state), \
  256. (test)->additional, \
  257. (test)->additional_len, \
  258. data, sizeof ( data ) ); \
  259. ok ( rc == 0 ); \
  260. ok ( memcmp ( (state)->key, (test)->expected_key, \
  261. (test)->expected_key_len ) == 0 ); \
  262. ok ( memcmp ( (state)->value, (test)->expected_value, \
  263. (test)->expected_value_len ) == 0 ); \
  264. ok ( memcmp ( data, (test)->expected_data, \
  265. (test)->expected_data_len ) == 0 ); \
  266. } while ( 0 )
  267. /** An HMAC_DRBG generation failure test */
  268. struct hmac_drbg_test_generate_fail {
  269. /** Underlying hash algorithm */
  270. struct digest_algorithm *hash;
  271. /** Additional input */
  272. const void *additional;
  273. /** Length of additional_input */
  274. size_t additional_len;
  275. /** Length of requested data */
  276. size_t requested_len;
  277. };
  278. /**
  279. * Define an HMAC_DRBG generation failure test
  280. *
  281. * @v name Test name
  282. * @v hmac_drbg HMAC_DRBG algorithm
  283. * @v additional_array Additional input
  284. * @ret test Generation failure test
  285. */
  286. #define HMAC_DRBG_TEST_GENERATE_FAIL( name, hmac_drbg, \
  287. additional_array, len ) \
  288. static struct hmac_drbg_test_generate_fail name = { \
  289. .hash = HMAC_DRBG_HASH ( hmac_drbg ), \
  290. .additional = additional_array, \
  291. .additional_len = sizeof ( additional_array ), \
  292. .requested_len = len, \
  293. }
  294. /**
  295. * Report generation failure test result
  296. *
  297. * @v state HMAC_DRBG internal state
  298. * @v test Generation failure test
  299. */
  300. #define generate_fail_ok( state, test ) do { \
  301. uint8_t data[ (test)->requested_len ]; \
  302. int rc; \
  303. \
  304. rc = hmac_drbg_generate ( (test)->hash, (state), \
  305. (test)->additional, \
  306. (test)->additional_len, data, \
  307. sizeof ( data ) ); \
  308. ok ( rc != 0 ); \
  309. } while ( 0 )
  310. /** "EntropyInput" */
  311. static const uint8_t entropy_input[] = {
  312. 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
  313. 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
  314. 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23,
  315. 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
  316. 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36
  317. };
  318. /** "Nonce" for SHA-1 */
  319. static const uint8_t nonce_sha1[] = {
  320. 0x20, 0x21, 0x22, 0x23, 0x24
  321. };
  322. /** "Nonce" for SHA-256 */
  323. static const uint8_t nonce_sha256[] = {
  324. 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27
  325. };
  326. /** "EntropyInput1 (for Reseed1) */
  327. static const uint8_t entropy_input_1[] = {
  328. 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b,
  329. 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
  330. 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3,
  331. 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
  332. 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6
  333. };
  334. /** "EntropyInput2 (for Reseed2) */
  335. static const uint8_t entropy_input_2[] = {
  336. 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb,
  337. 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
  338. 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3,
  339. 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
  340. 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6
  341. };
  342. /** "PersonalizationString = <empty>" */
  343. static const uint8_t personalisation_string_empty[] = {};
  344. /** "PersonalizationString" */
  345. static const uint8_t personalisation_string[] = {
  346. 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b,
  347. 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
  348. 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63,
  349. 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
  350. 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76
  351. };
  352. /** "AdditionalInput = <empty>" */
  353. static const uint8_t additional_input_empty[] = {};
  354. /** "AdditionalInput1" */
  355. static const uint8_t additional_input_1[] = {
  356. 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b,
  357. 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
  358. 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83,
  359. 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
  360. 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96
  361. };
  362. /** "AdditionalInput2" */
  363. static const uint8_t additional_input_2[] = {
  364. 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab,
  365. 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
  366. 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3,
  367. 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
  368. 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6
  369. };
  370. /** SHA-1 Test 1 : Instantiation */
  371. HMAC_DRBG_TEST_INSTANTIATE ( sha1_instantiate_1, HMAC_DRBG_SHA1,
  372. entropy_input, nonce_sha1, personalisation_string_empty,
  373. EXPECT ( 0xab, 0x16, 0x0d, 0xd2, 0x1c, 0x30, 0x98, 0x0c, 0xa3, 0xca,
  374. 0x5a, 0x9c, 0x77, 0xb7, 0xbd, 0xf0, 0x50, 0xe6, 0x4e, 0xe9 ),
  375. EXPECT ( 0x61, 0x44, 0x99, 0xea, 0x98, 0x0c, 0xfb, 0x3d, 0xaa, 0x2c,
  376. 0xa8, 0x6d, 0x65, 0xa4, 0x6b, 0xf4, 0x48, 0x8d, 0x8c, 0xc5 ) );
  377. /** SHA-1 Test 1.1 : First call to Generate */
  378. HMAC_DRBG_TEST_GENERATE ( sha1_generate_1_1, HMAC_DRBG_SHA1,
  379. additional_input_empty,
  380. EXPECT ( 0x7b, 0xb1, 0x80, 0x28, 0xe0, 0x1d, 0x03, 0x42, 0xdf, 0x4f,
  381. 0x54, 0xda, 0x51, 0x22, 0xfa, 0x5f, 0x2c, 0x3a, 0x05, 0xe4 ),
  382. EXPECT ( 0x2f, 0x89, 0x4f, 0x28, 0xcc, 0x2f, 0x53, 0x82, 0x96, 0x40,
  383. 0x64, 0x3a, 0xd1, 0x7b, 0x84, 0xb0, 0xcd, 0x3c, 0x79, 0x79 ),
  384. EXPECT ( 0x5a, 0x7d, 0x3b, 0x44, 0x9f, 0x48, 0x1c, 0xb3, 0x8d, 0xf7,
  385. 0x9a, 0xd2, 0xb1, 0xfc, 0xc0, 0x1e, 0x57, 0xf8, 0x13, 0x5e,
  386. 0x8c, 0x0b, 0x22, 0xcd, 0x06, 0x30, 0xbf, 0xb0, 0x12, 0x7f,
  387. 0xb5, 0x40, 0x8c, 0x8e, 0xfc, 0x17, 0xa9, 0x29, 0x89, 0x6e ) );
  388. /** SHA-1 Test 1.2 : Second call to Generate */
  389. HMAC_DRBG_TEST_GENERATE ( sha1_generate_1_2, HMAC_DRBG_SHA1,
  390. additional_input_empty,
  391. EXPECT ( 0x3d, 0x4d, 0x73, 0x77, 0xe9, 0x17, 0x2a, 0xaf, 0xa7, 0x76,
  392. 0xb0, 0xdd, 0xcb, 0x89, 0x42, 0x00, 0x4a, 0x44, 0xb7, 0xfd ),
  393. EXPECT ( 0x1a, 0x26, 0xbd, 0x9b, 0xfc, 0x97, 0x44, 0xbd, 0x29, 0xf6,
  394. 0xae, 0xbe, 0x24, 0x37, 0xe2, 0x09, 0xf1, 0xf7, 0x16, 0x25 ),
  395. EXPECT ( 0x82, 0xcf, 0x77, 0x2e, 0xc3, 0xe8, 0x4b, 0x00, 0xfc, 0x74,
  396. 0xf5, 0xdf, 0x10, 0x4e, 0xfb, 0xfb, 0x24, 0x28, 0x55, 0x4e,
  397. 0x9c, 0xe3, 0x67, 0xd0, 0x3a, 0xea, 0xde, 0x37, 0x82, 0x7f,
  398. 0xa8, 0xe9, 0xcb, 0x6a, 0x08, 0x19, 0x61, 0x15, 0xd9, 0x48 ) );
  399. /** SHA-1 Test 2 : Instantiation */
  400. #define sha1_instantiate_2 sha1_instantiate_1
  401. /** SHA-1 Test 2.1 : First call to Generate */
  402. HMAC_DRBG_TEST_GENERATE ( sha1_generate_2_1, HMAC_DRBG_SHA1,
  403. additional_input_1,
  404. EXPECT ( 0x3a, 0x06, 0x2e, 0x6b, 0x79, 0xfe, 0x70, 0xdb, 0xff, 0xeb,
  405. 0x3a, 0x2b, 0x6b, 0xe8, 0x03, 0x23, 0xf7, 0xd6, 0x74, 0xc5 ),
  406. EXPECT ( 0xbd, 0x36, 0x31, 0x28, 0xbf, 0x58, 0x0d, 0x7a, 0x54, 0x42,
  407. 0x9d, 0xdd, 0x58, 0xe8, 0x19, 0x3b, 0x98, 0x43, 0xbd, 0x2b ),
  408. EXPECT ( 0xc7, 0xaa, 0xac, 0x58, 0x3c, 0x6e, 0xf6, 0x30, 0x07, 0x14,
  409. 0xc2, 0xcc, 0x5d, 0x06, 0xc1, 0x48, 0xcf, 0xfb, 0x40, 0x44,
  410. 0x9a, 0xd0, 0xbb, 0x26, 0xfa, 0xc0, 0x49, 0x7b, 0x5c, 0x57,
  411. 0xe1, 0x61, 0xe3, 0x66, 0x81, 0xbc, 0xc9, 0x30, 0xce, 0x80 ) );
  412. /** SHA-1 Test 2.2 : Second call to Generate */
  413. HMAC_DRBG_TEST_GENERATE ( sha1_generate_2_2, HMAC_DRBG_SHA1,
  414. additional_input_2,
  415. EXPECT ( 0x8a, 0xd7, 0xe3, 0x47, 0x72, 0xb5, 0xfc, 0x7c, 0x3b, 0x3b,
  416. 0x27, 0x62, 0x4f, 0x0b, 0x91, 0x77, 0x6a, 0x8a, 0x71, 0x12 ),
  417. EXPECT ( 0xd7, 0x13, 0x76, 0xa4, 0x6d, 0x76, 0x4b, 0x17, 0xc3, 0xb7,
  418. 0x39, 0x34, 0x7b, 0x38, 0x4e, 0x51, 0x51, 0xe8, 0x7e, 0x88 ),
  419. EXPECT ( 0x6e, 0xbd, 0x2b, 0x7b, 0x5e, 0x0a, 0x2a, 0xd7, 0xa2, 0x4b,
  420. 0x1b, 0xf9, 0xa1, 0xdb, 0xa4, 0x7d, 0x43, 0x27, 0x17, 0x19,
  421. 0xb9, 0xc3, 0x7b, 0x7f, 0xe8, 0x1b, 0xa9, 0x40, 0x45, 0xa1,
  422. 0x4a, 0x7c, 0xb5, 0x14, 0xb4, 0x46, 0x66, 0x6e, 0xa5, 0xa7 ) );
  423. /** SHA-1 Test 3 : Instantiation */
  424. HMAC_DRBG_TEST_INSTANTIATE ( sha1_instantiate_3, HMAC_DRBG_SHA1,
  425. entropy_input, nonce_sha1, personalisation_string,
  426. EXPECT ( 0xb7, 0xd9, 0x66, 0xd7, 0x0d, 0x4e, 0x27, 0xa7, 0xfa, 0x83,
  427. 0x8f, 0x7d, 0x61, 0x12, 0x6c, 0x0e, 0xdc, 0x84, 0x76, 0x1c ),
  428. EXPECT ( 0xda, 0xb2, 0xa7, 0x18, 0x83, 0xf1, 0x00, 0x5c, 0x5d, 0xd0,
  429. 0x39, 0x32, 0x4d, 0x3c, 0x36, 0x4d, 0x6e, 0x18, 0xf9, 0x54 ) );
  430. /** SHA-1 Test 3.1 : First call to Generate */
  431. HMAC_DRBG_TEST_GENERATE ( sha1_generate_3_1, HMAC_DRBG_SHA1,
  432. additional_input_empty,
  433. EXPECT ( 0x87, 0xd3, 0x82, 0x8b, 0xe0, 0x3a, 0x80, 0x7d, 0xd3, 0x40,
  434. 0x29, 0x41, 0xbe, 0xd6, 0xde, 0x98, 0x6e, 0xe7, 0xa2, 0x86 ),
  435. EXPECT ( 0x6a, 0xe1, 0xd0, 0x08, 0x6f, 0x53, 0xb1, 0xb7, 0x63, 0xa4,
  436. 0x51, 0x5b, 0x19, 0x06, 0xfe, 0xe4, 0x76, 0x61, 0xfd, 0x47 ),
  437. EXPECT ( 0xb3, 0xbd, 0x05, 0x24, 0x6c, 0xba, 0x12, 0xa6, 0x47, 0x35,
  438. 0xa4, 0xe3, 0xfd, 0xe5, 0x99, 0xbc, 0x1b, 0xe3, 0x0f, 0x43,
  439. 0x9b, 0xd0, 0x60, 0x20, 0x8e, 0xea, 0x7d, 0x71, 0xf9, 0xd1,
  440. 0x23, 0xdf, 0x47, 0xb3, 0xce, 0x06, 0x9d, 0x98, 0xed, 0xe6 ) );
  441. /** SHA-1 Test 3.2 : Second call to Generate */
  442. HMAC_DRBG_TEST_GENERATE ( sha1_generate_3_2, HMAC_DRBG_SHA1,
  443. additional_input_empty,
  444. EXPECT ( 0x26, 0xab, 0xbf, 0x54, 0xb2, 0x8b, 0x93, 0xff, 0x90, 0x08,
  445. 0x67, 0x0e, 0xbf, 0xee, 0x86, 0xcd, 0xd7, 0x22, 0x8e, 0xd5 ),
  446. EXPECT ( 0xe9, 0x25, 0x47, 0x29, 0xe0, 0x02, 0x04, 0xa1, 0xb6, 0xc0,
  447. 0x21, 0x58, 0xa6, 0xc7, 0x27, 0x86, 0x47, 0x14, 0xf1, 0xf7 ),
  448. EXPECT ( 0xb5, 0xda, 0xda, 0x38, 0x0e, 0x28, 0x72, 0xdf, 0x93, 0x5b,
  449. 0xca, 0x55, 0xb8, 0x82, 0xc8, 0xc9, 0x37, 0x69, 0x02, 0xab,
  450. 0x63, 0x97, 0x65, 0x47, 0x2b, 0x71, 0xac, 0xeb, 0xe2, 0xea,
  451. 0x8b, 0x1b, 0x6b, 0x49, 0x62, 0x9c, 0xb6, 0x73, 0x17, 0xe0 ) );
  452. /** SHA-1 Test 4 : Instantiation */
  453. #define sha1_instantiate_4 sha1_instantiate_3
  454. /** SHA-1 Test 4.1 : First call to Generate */
  455. HMAC_DRBG_TEST_GENERATE ( sha1_generate_4_1, HMAC_DRBG_SHA1,
  456. additional_input_1,
  457. EXPECT ( 0x17, 0xa5, 0xd7, 0x9f, 0x07, 0x67, 0x87, 0x6f, 0x3a, 0x45,
  458. 0xe0, 0xc9, 0xc3, 0x3e, 0xc8, 0x8b, 0x03, 0xce, 0xea, 0x13 ),
  459. EXPECT ( 0x4d, 0x2f, 0x3b, 0xc7, 0x77, 0x50, 0x5c, 0x45, 0xf7, 0xe1,
  460. 0x7d, 0xcd, 0x3d, 0x86, 0xbf, 0x37, 0x9c, 0xb6, 0x02, 0x5e ),
  461. EXPECT ( 0x1f, 0x8f, 0xec, 0x7b, 0xc7, 0xcf, 0xa9, 0xa8, 0x80, 0x34,
  462. 0x5d, 0x28, 0x0b, 0x13, 0xc6, 0x32, 0xb8, 0x52, 0x77, 0x0a,
  463. 0x6d, 0xfc, 0x30, 0x2e, 0xad, 0x4c, 0xe3, 0xf5, 0x54, 0xc7,
  464. 0x9b, 0x0d, 0x44, 0x23, 0x9e, 0xba, 0x56, 0xa7, 0xea, 0x2d ) );
  465. /** SHA-1 Test 4.2 : Second call to Generate */
  466. HMAC_DRBG_TEST_GENERATE ( sha1_generate_4_2, HMAC_DRBG_SHA1,
  467. additional_input_2,
  468. EXPECT ( 0x07, 0x9b, 0x57, 0xd9, 0x40, 0x6e, 0x11, 0xc2, 0xf8, 0x7c,
  469. 0x8c, 0x82, 0x8c, 0x8c, 0x6f, 0xa7, 0x6e, 0x40, 0xea, 0x01 ),
  470. EXPECT ( 0xa6, 0x54, 0xfe, 0x72, 0xf8, 0xa7, 0x7b, 0xb8, 0xf0, 0x3d,
  471. 0xff, 0x07, 0xc7, 0x9a, 0x51, 0x53, 0x00, 0x9e, 0xdd, 0xda ),
  472. EXPECT ( 0xaf, 0x97, 0xcd, 0xe1, 0xe8, 0xab, 0x32, 0x2a, 0x2e, 0xac,
  473. 0xa8, 0xe6, 0xf4, 0xe5, 0xbf, 0x78, 0xa1, 0x1b, 0xde, 0xf7,
  474. 0xdc, 0x91, 0x21, 0x5d, 0x44, 0xb1, 0x07, 0xb4, 0xd5, 0xa7,
  475. 0x79, 0x01, 0x59, 0x25, 0x09, 0x76, 0x52, 0x80, 0xf9, 0x69 ) );
  476. /** SHA-1 Test 5 : Instantiation */
  477. #define sha1_instantiate_5 sha1_instantiate_1
  478. /** SHA-1 Test 5.1 : First call to Generate */
  479. HMAC_DRBG_TEST_GENERATE_FAIL ( sha1_generate_fail_5_1, HMAC_DRBG_SHA1,
  480. additional_input_empty, ( 320 / 8 ) );
  481. /** SHA-1 Test 5.2 : Reseed */
  482. HMAC_DRBG_TEST_RESEED ( sha1_reseed_5_2, HMAC_DRBG_SHA1,
  483. entropy_input_1, additional_input_empty,
  484. EXPECT ( 0xcd, 0x4c, 0xab, 0x38, 0xc8, 0xad, 0x65, 0x71, 0x22, 0xbf,
  485. 0x5d, 0x3d, 0x00, 0xd0, 0xac, 0x9b, 0x13, 0xd6, 0x29, 0xbb ),
  486. EXPECT ( 0xf6, 0x60, 0xe2, 0x3e, 0x91, 0x00, 0x6b, 0x62, 0xc6, 0x54,
  487. 0x3a, 0xb1, 0x34, 0x4d, 0x23, 0xa3, 0x1a, 0xb4, 0xcf, 0x2c ) );
  488. /** SHA-1 Test 5.3 : Retried first call to Generate */
  489. HMAC_DRBG_TEST_GENERATE ( sha1_generate_5_3, HMAC_DRBG_SHA1,
  490. additional_input_empty,
  491. EXPECT ( 0x58, 0x7f, 0xd8, 0x21, 0xef, 0x6c, 0x9d, 0xa4, 0xa8, 0x3c,
  492. 0x19, 0x21, 0x1f, 0x10, 0x56, 0xca, 0xcd, 0x23, 0xfc, 0x1a ),
  493. EXPECT ( 0x84, 0x8f, 0xd1, 0x4c, 0x13, 0xb7, 0xea, 0x93, 0x72, 0x0c,
  494. 0xcf, 0xde, 0x71, 0xf2, 0xf6, 0x44, 0x39, 0xdb, 0x79, 0x5d ),
  495. EXPECT ( 0xfe, 0xc4, 0x59, 0x7f, 0x06, 0xa3, 0xa8, 0xcc, 0x85, 0x29,
  496. 0xd5, 0x95, 0x57, 0xb9, 0xe6, 0x61, 0x05, 0x38, 0x09, 0xc0,
  497. 0xbc, 0x0e, 0xfc, 0x28, 0x2a, 0xbd, 0x87, 0x60, 0x5c, 0xc9,
  498. 0x0c, 0xba, 0x9b, 0x86, 0x33, 0xdc, 0xb1, 0xda, 0xe0, 0x2e ) );
  499. /** SHA-1 Test 5.4 : Second call to Generate */
  500. HMAC_DRBG_TEST_GENERATE_FAIL ( sha1_generate_fail_5_4, HMAC_DRBG_SHA1,
  501. additional_input_empty, ( 320 / 8 ) );
  502. /** SHA-1 Test 5.5 : Reseed */
  503. HMAC_DRBG_TEST_RESEED ( sha1_reseed_5_5, HMAC_DRBG_SHA1,
  504. entropy_input_2, additional_input_empty,
  505. EXPECT ( 0xdb, 0xa1, 0xcf, 0xf4, 0x87, 0x95, 0x46, 0xa0, 0x38, 0xa5,
  506. 0x59, 0xb2, 0xa2, 0x4d, 0xf2, 0xc0, 0x30, 0x08, 0x9a, 0x41 ),
  507. EXPECT ( 0x2f, 0x88, 0x3c, 0x46, 0x48, 0xe1, 0x31, 0xe8, 0x6d, 0xdf,
  508. 0x9d, 0xca, 0x0d, 0x74, 0xf3, 0x0c, 0xa1, 0xce, 0x6e, 0xfb ) );
  509. /** SHA-1 Test 5.6 : Retried second call to Generate */
  510. HMAC_DRBG_TEST_GENERATE ( sha1_generate_5_6, HMAC_DRBG_SHA1,
  511. additional_input_empty,
  512. EXPECT ( 0xf9, 0x39, 0xa5, 0xab, 0x08, 0xa3, 0x9f, 0x23, 0x10, 0x70,
  513. 0xb0, 0xd4, 0xc9, 0x6d, 0xc2, 0x37, 0x90, 0xba, 0x01, 0x53 ),
  514. EXPECT ( 0xce, 0x6d, 0x08, 0xb4, 0xae, 0x2c, 0xe3, 0x83, 0xfd, 0xab,
  515. 0xb0, 0x1e, 0xaa, 0xfc, 0x9c, 0x8e, 0x76, 0xa0, 0xd4, 0x72 ),
  516. EXPECT ( 0x84, 0xad, 0xd5, 0xe2, 0xd2, 0x04, 0x1c, 0x01, 0x72, 0x3a,
  517. 0x4d, 0xe4, 0x33, 0x5b, 0x13, 0xef, 0xdf, 0x16, 0xb0, 0xe5,
  518. 0x1a, 0x0a, 0xd3, 0x9b, 0xd1, 0x5e, 0x86, 0x2e, 0x64, 0x4f,
  519. 0x31, 0xe4, 0xa2, 0xd7, 0xd8, 0x43, 0xe5, 0x7c, 0x59, 0x68 ) );
  520. /** SHA-1 Test 6 : Instantiate */
  521. #define sha1_instantiate_6 sha1_instantiate_1
  522. /** SHA-1 Test 6.1 : First call to Generate */
  523. HMAC_DRBG_TEST_GENERATE_FAIL ( sha1_generate_fail_6_1, HMAC_DRBG_SHA1,
  524. additional_input_1, ( 320 / 8 ) );
  525. /** SHA-1 Test 6.2 : Reseed */
  526. HMAC_DRBG_TEST_RESEED ( sha1_reseed_6_2, HMAC_DRBG_SHA1,
  527. entropy_input_1, additional_input_1,
  528. EXPECT ( 0x52, 0x28, 0xa4, 0xb6, 0xa4, 0x46, 0x92, 0x90, 0x5e, 0xc0,
  529. 0x44, 0xbf, 0xf0, 0xbb, 0x4e, 0x25, 0xa3, 0x87, 0xca, 0xc1 ),
  530. EXPECT ( 0x24, 0x77, 0x32, 0xd0, 0x4c, 0xb8, 0x4e, 0xd4, 0x1a, 0xdd,
  531. 0x95, 0xa4, 0xb7, 0x8b, 0x50, 0xcd, 0x9b, 0x3d, 0x3f, 0x32 ) );
  532. /** SHA-1 Test 6.3 : Retried first call to Generate */
  533. HMAC_DRBG_TEST_GENERATE ( sha1_generate_6_3, HMAC_DRBG_SHA1,
  534. additional_input_empty,
  535. EXPECT ( 0xab, 0x3d, 0xd4, 0x89, 0x5b, 0xc8, 0xcd, 0x22, 0x71, 0xde,
  536. 0xba, 0x5f, 0x3c, 0x13, 0x63, 0x52, 0x6b, 0x8b, 0x74, 0x52 ),
  537. EXPECT ( 0xa8, 0x66, 0xc5, 0xef, 0xf2, 0xaf, 0x04, 0x2b, 0x11, 0x86,
  538. 0x44, 0x94, 0x45, 0x23, 0x7f, 0x9c, 0x02, 0x44, 0x98, 0x64 ),
  539. EXPECT ( 0xa1, 0xba, 0x8f, 0xa5, 0x8b, 0xb5, 0x01, 0x3f, 0x43, 0xf7,
  540. 0xb6, 0xed, 0x52, 0xb4, 0x53, 0x9f, 0xa1, 0x6d, 0xc7, 0x79,
  541. 0x57, 0xae, 0xe8, 0x15, 0xb9, 0xc0, 0x70, 0x04, 0xc7, 0xe9,
  542. 0x92, 0xeb, 0x8c, 0x7e, 0x59, 0x19, 0x64, 0xaf, 0xee, 0xa2 ) );
  543. /** SHA-1 Test 6.4 : Second call to Generate */
  544. HMAC_DRBG_TEST_GENERATE_FAIL ( sha1_generate_fail_6_4, HMAC_DRBG_SHA1,
  545. additional_input_2, ( 320 / 8 ) );
  546. /** SHA-1 Test 6.5 : Reseed */
  547. HMAC_DRBG_TEST_RESEED ( sha1_reseed_6_5, HMAC_DRBG_SHA1,
  548. entropy_input_2, additional_input_2,
  549. EXPECT ( 0xe5, 0x73, 0x9f, 0x9c, 0xf7, 0xff, 0x43, 0x84, 0xd1, 0x27,
  550. 0x3e, 0x02, 0x6b, 0x45, 0x31, 0x21, 0x36, 0x49, 0x4f, 0x41 ),
  551. EXPECT ( 0x30, 0xc3, 0x43, 0x05, 0xc2, 0xc6, 0x48, 0xb0, 0x57, 0xa6,
  552. 0x40, 0x22, 0x1b, 0x5c, 0x56, 0x57, 0x26, 0xcd, 0x32, 0xb2 ) );
  553. /** SHA-1 Test 6.6 : Retried second call to Generate */
  554. HMAC_DRBG_TEST_GENERATE ( sha1_generate_6_6, HMAC_DRBG_SHA1,
  555. additional_input_empty,
  556. EXPECT ( 0x61, 0x91, 0xca, 0x9b, 0xf0, 0x00, 0xd1, 0x0a, 0x71, 0x69,
  557. 0x0a, 0xc1, 0x0e, 0x09, 0xff, 0xc8, 0x92, 0xab, 0xde, 0x9a ),
  558. EXPECT ( 0x1e, 0xc0, 0x49, 0x0f, 0xa0, 0xb7, 0x65, 0x52, 0x7e, 0x5e,
  559. 0xa1, 0x8b, 0x53, 0x22, 0xb2, 0x8b, 0xdd, 0x0e, 0x7b, 0xc0 ),
  560. EXPECT ( 0x84, 0x26, 0x4a, 0x73, 0xa8, 0x18, 0xc9, 0x5c, 0x2f, 0x42,
  561. 0x4b, 0x37, 0xd3, 0xcc, 0x99, 0x0b, 0x04, 0x6f, 0xb5, 0x0c,
  562. 0x2d, 0xc6, 0x4a, 0x16, 0x42, 0x11, 0x88, 0x9a, 0x01, 0x0f,
  563. 0x24, 0x71, 0xa0, 0x91, 0x2f, 0xfe, 0xa1, 0xbf, 0x01, 0x95 ) );
  564. /** SHA-1 Test 7 : Instantiation */
  565. #define sha1_instantiate_7 sha1_instantiate_3
  566. /** SHA-1 Test 7.1 : First call to Generate */
  567. HMAC_DRBG_TEST_GENERATE_FAIL ( sha1_generate_fail_7_1, HMAC_DRBG_SHA1,
  568. additional_input_empty, ( 320 / 8 ) );
  569. /** SHA-1 Test 7.2 : Reseed */
  570. HMAC_DRBG_TEST_RESEED ( sha1_reseed_7_2, HMAC_DRBG_SHA1,
  571. entropy_input_1, additional_input_empty,
  572. EXPECT ( 0xb9, 0x25, 0x4d, 0x8a, 0xac, 0xba, 0x43, 0xfb, 0xda, 0xe6,
  573. 0x39, 0x4f, 0x2b, 0x3a, 0xfc, 0x5d, 0x58, 0x08, 0x00, 0xbf ),
  574. EXPECT ( 0x28, 0x40, 0x3b, 0x60, 0x36, 0x38, 0xd0, 0x7d, 0x79, 0x66,
  575. 0x66, 0x1e, 0xf6, 0x7b, 0x9d, 0x39, 0x05, 0xf4, 0x6d, 0xb9 ) );
  576. /** SHA-1 Test 7.3 : Retried first call to Generate */
  577. HMAC_DRBG_TEST_GENERATE ( sha1_generate_7_3, HMAC_DRBG_SHA1,
  578. additional_input_empty,
  579. EXPECT ( 0x64, 0xfe, 0x07, 0x4a, 0x6e, 0x77, 0x97, 0xd1, 0xa4, 0x35,
  580. 0xda, 0x89, 0x64, 0x48, 0x4d, 0x6c, 0xf8, 0xbd, 0xc0, 0x1b ),
  581. EXPECT ( 0x43, 0xe0, 0xc0, 0x52, 0x15, 0x86, 0xe9, 0x47, 0x3b, 0x06,
  582. 0x0d, 0x87, 0xd0, 0x8a, 0x23, 0x25, 0xfa, 0xe1, 0x49, 0xd1 ),
  583. EXPECT ( 0x6c, 0x37, 0xfd, 0xd7, 0x29, 0xaa, 0x40, 0xf8, 0x0b, 0xc6,
  584. 0xab, 0x08, 0xca, 0x7c, 0xc6, 0x49, 0x79, 0x4f, 0x69, 0x98,
  585. 0xb5, 0x70, 0x81, 0xe4, 0x22, 0x0f, 0x22, 0xc5, 0xc2, 0x83,
  586. 0xe2, 0xc9, 0x1b, 0x8e, 0x30, 0x5a, 0xb8, 0x69, 0xc6, 0x25 ) );
  587. /** SHA-1 Test 7.4 : Second call to Generate */
  588. HMAC_DRBG_TEST_GENERATE_FAIL ( sha1_generate_fail_7_4, HMAC_DRBG_SHA1,
  589. additional_input_empty, ( 320 / 8 ) );
  590. /** SHA-1 Test 7.5 : Reseed */
  591. HMAC_DRBG_TEST_RESEED ( sha1_reseed_7_5, HMAC_DRBG_SHA1,
  592. entropy_input_2, additional_input_empty,
  593. EXPECT ( 0x02, 0xbc, 0x57, 0x7f, 0xd1, 0x0e, 0xf7, 0x19, 0x3c, 0x1d,
  594. 0xb0, 0x98, 0xbd, 0x5b, 0x75, 0xc7, 0xc4, 0xb6, 0x79, 0x59 ),
  595. EXPECT ( 0xbc, 0xbd, 0xf0, 0x52, 0xe0, 0xe0, 0x2a, 0xe8, 0x9a, 0x77,
  596. 0x67, 0x94, 0x3f, 0x98, 0x65, 0xb8, 0xb7, 0x22, 0x90, 0x2d ) );
  597. /** SHA-1 Test 7.6 : Retried second call to Generate */
  598. HMAC_DRBG_TEST_GENERATE ( sha1_generate_7_6, HMAC_DRBG_SHA1,
  599. additional_input_empty,
  600. EXPECT ( 0x1a, 0xa4, 0x24, 0x1c, 0x69, 0x5e, 0x29, 0xc0, 0xa5, 0x9a,
  601. 0xd1, 0x8a, 0x60, 0x70, 0xe3, 0x38, 0xa5, 0x48, 0xbe, 0x92 ),
  602. EXPECT ( 0x03, 0x47, 0x35, 0x9b, 0xc9, 0xc7, 0xf8, 0x8c, 0xc8, 0x33,
  603. 0x0d, 0x4f, 0x59, 0xfb, 0xc7, 0x70, 0xb0, 0xb7, 0x7b, 0x03 ),
  604. EXPECT ( 0xca, 0xf5, 0x7d, 0xcf, 0xea, 0x39, 0x3b, 0x92, 0x36, 0xbf,
  605. 0x69, 0x1f, 0xa4, 0x56, 0xfe, 0xa7, 0xfd, 0xf1, 0xdf, 0x83,
  606. 0x61, 0x48, 0x2c, 0xa5, 0x4d, 0x5f, 0xa7, 0x23, 0xf4, 0xc8,
  607. 0x8b, 0x4f, 0xa5, 0x04, 0xbf, 0x03, 0x27, 0x7f, 0xa7, 0x83 ) );
  608. /** SHA-1 Test 8 : Instantiate */
  609. #define sha1_instantiate_8 sha1_instantiate_3
  610. /** SHA-1 Test 8.1 : First call to Generate */
  611. HMAC_DRBG_TEST_GENERATE_FAIL ( sha1_generate_fail_8_1, HMAC_DRBG_SHA1,
  612. additional_input_1, ( 320 / 8 ) );
  613. /** SHA-1 Test 8.2 : Reseed */
  614. HMAC_DRBG_TEST_RESEED ( sha1_reseed_8_2, HMAC_DRBG_SHA1,
  615. entropy_input_1, additional_input_1,
  616. EXPECT ( 0xc0, 0x95, 0x48, 0xc0, 0xd3, 0xc8, 0x61, 0xd7, 0x40, 0xf2,
  617. 0x83, 0x7d, 0x72, 0xb5, 0x07, 0x23, 0x5c, 0x26, 0xdb, 0x82 ),
  618. EXPECT ( 0x17, 0x4b, 0x3f, 0x84, 0xc3, 0x53, 0x1f, 0x7c, 0x0a, 0x2e,
  619. 0x54, 0x21, 0x23, 0x4e, 0xa1, 0x6b, 0x70, 0x8d, 0xdf, 0x0d ) );
  620. /** SHA-1 Test 8.3 : Retried first call to Generate */
  621. HMAC_DRBG_TEST_GENERATE ( sha1_generate_8_3, HMAC_DRBG_SHA1,
  622. additional_input_empty,
  623. EXPECT ( 0x60, 0x3f, 0x09, 0x49, 0x27, 0x9c, 0x70, 0xe8, 0xc6, 0x6c,
  624. 0x0f, 0x56, 0x37, 0xc0, 0xf3, 0x75, 0x60, 0x07, 0xe5, 0xac ),
  625. EXPECT ( 0xf2, 0xb3, 0x3b, 0x21, 0x15, 0x1f, 0xaf, 0x61, 0x20, 0x01,
  626. 0x83, 0x10, 0xf4, 0x4e, 0x4c, 0xd0, 0xbf, 0xe3, 0x68, 0xea ),
  627. EXPECT ( 0xbd, 0x07, 0xc2, 0x5c, 0xfd, 0x7c, 0x5e, 0x3a, 0x4e, 0xaa,
  628. 0x6e, 0x2e, 0xdc, 0x5a, 0xb7, 0xea, 0x49, 0x42, 0xa0, 0x91,
  629. 0x34, 0x71, 0xfd, 0xa5, 0x5c, 0x6d, 0xdd, 0x2c, 0x03, 0xef,
  630. 0xa3, 0xb9, 0x64, 0x3a, 0xb3, 0xbb, 0x22, 0xf6, 0xc9, 0xf2 ) );
  631. /** SHA-1 Test 8.4 : Second call to Generate */
  632. HMAC_DRBG_TEST_GENERATE_FAIL ( sha1_generate_fail_8_4, HMAC_DRBG_SHA1,
  633. additional_input_2, ( 320 / 8 ) );
  634. /** SHA-1 Test 8.5 : Reseed */
  635. HMAC_DRBG_TEST_RESEED ( sha1_reseed_8_5, HMAC_DRBG_SHA1,
  636. entropy_input_2, additional_input_2,
  637. EXPECT ( 0x89, 0x42, 0xa5, 0x4f, 0x34, 0x9e, 0x28, 0x1b, 0x84, 0xaa,
  638. 0x46, 0x95, 0x87, 0xfb, 0xdd, 0xaf, 0x9d, 0x11, 0x40, 0x82 ),
  639. EXPECT ( 0x07, 0x73, 0x0e, 0x3c, 0xbf, 0xfd, 0x3c, 0xaf, 0xd7, 0xa8,
  640. 0xaa, 0xe2, 0xbf, 0x01, 0xd6, 0x01, 0x43, 0x01, 0xe2, 0x4d ) );
  641. /** SHA-1 Test 8.6 : Retried second call to Generate */
  642. HMAC_DRBG_TEST_GENERATE ( sha1_generate_8_6, HMAC_DRBG_SHA1,
  643. additional_input_empty,
  644. EXPECT ( 0xbd, 0xe1, 0xb4, 0x6c, 0xdc, 0x54, 0x13, 0xb3, 0xd9, 0xf7,
  645. 0x35, 0xac, 0xdb, 0x80, 0xb1, 0x3c, 0x57, 0xbf, 0xe4, 0x73 ),
  646. EXPECT ( 0x72, 0x5a, 0x3c, 0x78, 0x20, 0xde, 0x1a, 0x06, 0xd0, 0x95,
  647. 0x81, 0x9c, 0xcf, 0x6f, 0x2c, 0x9b, 0x3a, 0x67, 0xf2, 0xce ),
  648. EXPECT ( 0xd1, 0xa9, 0xc1, 0xa2, 0x2c, 0x84, 0xfc, 0x23, 0xff, 0x22,
  649. 0x27, 0xef, 0x98, 0xec, 0x8b, 0xa9, 0xdf, 0x2a, 0x20, 0x9b,
  650. 0xa1, 0xdb, 0x09, 0x80, 0x9f, 0x57, 0xbf, 0xea, 0xe5, 0xb3,
  651. 0xe5, 0xf1, 0x46, 0xc7, 0x5f, 0x2d, 0x8d, 0xbb, 0x5e, 0x4a ) );
  652. /** SHA-256 Test 1 : Instantiation */
  653. HMAC_DRBG_TEST_INSTANTIATE ( sha256_instantiate_1, HMAC_DRBG_SHA256,
  654. entropy_input, nonce_sha256, personalisation_string_empty,
  655. EXPECT ( 0x3d, 0xda, 0x54, 0x3e, 0x7e, 0xef, 0x14, 0xf9, 0x36, 0x23,
  656. 0x7b, 0xe6, 0x5d, 0x09, 0x4b, 0x4d, 0xdc, 0x96, 0x9c, 0x0b,
  657. 0x2b, 0x5e, 0xaf, 0xb5, 0xd8, 0x05, 0xe8, 0x6c, 0xfa, 0x64,
  658. 0xd7, 0x41 ),
  659. EXPECT ( 0x2d, 0x02, 0xc2, 0xf8, 0x22, 0x51, 0x7d, 0x54, 0xb8, 0x17,
  660. 0x27, 0x9a, 0x59, 0x49, 0x1c, 0x41, 0xa1, 0x98, 0x9b, 0x3e,
  661. 0x38, 0x2d, 0xeb, 0xe8, 0x0d, 0x2c, 0x7f, 0x66, 0x0f, 0x44,
  662. 0x76, 0xc4 ) );
  663. /** SHA-256 Test 1.1 : First call to Generate */
  664. HMAC_DRBG_TEST_GENERATE ( sha256_generate_1_1, HMAC_DRBG_SHA256,
  665. additional_input_empty,
  666. EXPECT ( 0xdd, 0x30, 0x95, 0x79, 0x35, 0x38, 0x02, 0xcc, 0xdd, 0x43,
  667. 0x99, 0xc3, 0x69, 0x1c, 0x9d, 0xd9, 0x09, 0xdd, 0x3b, 0x2d,
  668. 0xd0, 0x03, 0xcc, 0xd5, 0x9d, 0x6f, 0x08, 0xd8, 0x5f, 0x2e,
  669. 0x35, 0x09 ),
  670. EXPECT ( 0xa1, 0xc2, 0x0f, 0xf2, 0x70, 0xa3, 0x9d, 0x2b, 0x8d, 0x03,
  671. 0xd6, 0x59, 0xb9, 0xdd, 0xd0, 0x11, 0xc2, 0xcc, 0xdf, 0x24,
  672. 0x48, 0x55, 0x7e, 0xf6, 0xa1, 0xa9, 0x15, 0xd1, 0x89, 0x40,
  673. 0xa6, 0x88 ),
  674. EXPECT ( 0xd6, 0x7b, 0x8c, 0x17, 0x34, 0xf4, 0x6f, 0xa3, 0xf7, 0x63,
  675. 0xcf, 0x57, 0xc6, 0xf9, 0xf4, 0xf2, 0xdc, 0x10, 0x89, 0xbd,
  676. 0x8b, 0xc1, 0xf6, 0xf0, 0x23, 0x95, 0x0b, 0xfc, 0x56, 0x17,
  677. 0x63, 0x52, 0x08, 0xc8, 0x50, 0x12, 0x38, 0xad, 0x7a, 0x44,
  678. 0x00, 0xde, 0xfe, 0xe4, 0x6c, 0x64, 0x0b, 0x61, 0xaf, 0x77,
  679. 0xc2, 0xd1, 0xa3, 0xbf, 0xaa, 0x90, 0xed, 0xe5, 0xd2, 0x07,
  680. 0x40, 0x6e, 0x54, 0x03 ) );
  681. /** SHA-256 Test 1.2 : Second call to Generate */
  682. HMAC_DRBG_TEST_GENERATE ( sha256_generate_1_2, HMAC_DRBG_SHA256,
  683. additional_input_empty,
  684. EXPECT ( 0x5c, 0xd5, 0xe5, 0x0a, 0x3e, 0x44, 0x8a, 0x07, 0xc3, 0xd2,
  685. 0xf2, 0xa3, 0xf9, 0xde, 0xbc, 0xc0, 0x46, 0x5f, 0x9c, 0xf1,
  686. 0x1c, 0xa1, 0x36, 0xe9, 0xb5, 0x04, 0xb4, 0xd3, 0x1c, 0x7f,
  687. 0xf1, 0xb8 ),
  688. EXPECT ( 0x33, 0xb3, 0x09, 0xf2, 0xff, 0x01, 0xce, 0x10, 0x4b, 0x44,
  689. 0x29, 0xb6, 0x75, 0xfa, 0xfa, 0x19, 0x01, 0x1e, 0x34, 0x8b,
  690. 0x28, 0x12, 0x71, 0x5a, 0x76, 0x37, 0xf6, 0xa6, 0xe6, 0x3b,
  691. 0x5d, 0x57 ),
  692. EXPECT ( 0x8f, 0xda, 0xec, 0x20, 0xf8, 0xb4, 0x21, 0x40, 0x70, 0x59,
  693. 0xe3, 0x58, 0x89, 0x20, 0xda, 0x7e, 0xda, 0x9d, 0xce, 0x3c,
  694. 0xf8, 0x27, 0x4d, 0xfa, 0x1c, 0x59, 0xc1, 0x08, 0xc1, 0xd0,
  695. 0xaa, 0x9b, 0x0f, 0xa3, 0x8d, 0xa5, 0xc7, 0x92, 0x03, 0x7c,
  696. 0x4d, 0x33, 0xcd, 0x07, 0x0c, 0xa7, 0xcd, 0x0c, 0x56, 0x08,
  697. 0xdb, 0xa8, 0xb8, 0x85, 0x65, 0x46, 0x39, 0xde, 0x21, 0x87,
  698. 0xb7, 0x4c, 0xb2, 0x63 ) );
  699. /** SHA-256 Test 2 : Instantiation */
  700. #define sha256_instantiate_2 sha256_instantiate_1
  701. /** SHA-256 Test 2.1 : First call to Generate */
  702. HMAC_DRBG_TEST_GENERATE ( sha256_generate_2_1, HMAC_DRBG_SHA256,
  703. additional_input_1,
  704. EXPECT ( 0x79, 0x1d, 0x31, 0x44, 0xb3, 0x02, 0xad, 0x6c, 0xe4, 0x32,
  705. 0x41, 0x34, 0x42, 0x10, 0xaa, 0xd0, 0xd3, 0x99, 0xed, 0xb7,
  706. 0xb5, 0x90, 0x6f, 0xb2, 0x51, 0xdb, 0x1c, 0xb6, 0x00, 0x04,
  707. 0xea, 0x51 ),
  708. EXPECT ( 0x58, 0xfd, 0x96, 0x5f, 0x4f, 0x99, 0x89, 0x3c, 0x17, 0xe6,
  709. 0xa3, 0x3c, 0xb8, 0xe9, 0x04, 0x15, 0xb5, 0x16, 0xd0, 0x06,
  710. 0x14, 0xa4, 0x49, 0xd4, 0x06, 0xe0, 0x3c, 0x68, 0x5b, 0xd8,
  711. 0x59, 0xbd ),
  712. EXPECT ( 0x41, 0x87, 0x87, 0x35, 0x81, 0x35, 0x41, 0x9b, 0x93, 0x81,
  713. 0x33, 0x53, 0x53, 0x06, 0x17, 0x6a, 0xfb, 0x25, 0x1c, 0xdd,
  714. 0x2b, 0xa3, 0x79, 0x88, 0x59, 0xb5, 0x66, 0xa0, 0x5c, 0xfb,
  715. 0x1d, 0x68, 0x0e, 0xa9, 0x25, 0x85, 0x6d, 0x5b, 0x84, 0xd5,
  716. 0x6a, 0xda, 0xe8, 0x70, 0x45, 0xa6, 0xba, 0x28, 0xd2, 0xc9,
  717. 0x08, 0xab, 0x75, 0xb7, 0xcc, 0x41, 0x43, 0x1f, 0xac, 0x59,
  718. 0xf3, 0x89, 0x18, 0xa3 ) );
  719. /** SHA-256 Test 2.2 : Second call to Generate */
  720. HMAC_DRBG_TEST_GENERATE ( sha256_generate_2_2, HMAC_DRBG_SHA256,
  721. additional_input_2,
  722. EXPECT ( 0xe7, 0x45, 0x8f, 0xb4, 0x4a, 0x36, 0x9a, 0x65, 0x3f, 0x2f,
  723. 0x8f, 0x57, 0x7b, 0xf9, 0x75, 0xc4, 0xb3, 0x62, 0xc4, 0xfe,
  724. 0x61, 0x8b, 0x2f, 0x1f, 0xf6, 0x76, 0x9b, 0x13, 0xc9, 0x4d,
  725. 0xec, 0xf4 ),
  726. EXPECT ( 0x19, 0x33, 0x4b, 0x8c, 0x31, 0xb7, 0x49, 0x32, 0xdd, 0xd7,
  727. 0xb2, 0xa4, 0x68, 0xf6, 0x43, 0x6d, 0xf9, 0x2e, 0x10, 0x0d,
  728. 0x39, 0xd3, 0xac, 0xb3, 0x68, 0xc7, 0x02, 0x9c, 0xb8, 0x83,
  729. 0xec, 0x89 ),
  730. EXPECT ( 0x7c, 0x06, 0x7b, 0xdd, 0xca, 0x81, 0x72, 0x48, 0x23, 0xd6,
  731. 0x4c, 0x69, 0x82, 0x92, 0x85, 0xbd, 0xbf, 0xf5, 0x37, 0x71,
  732. 0x61, 0x02, 0xc1, 0x88, 0x2e, 0x20, 0x22, 0x50, 0xe0, 0xfa,
  733. 0x5e, 0xf3, 0xa3, 0x84, 0xcd, 0x34, 0xa2, 0x0f, 0xfd, 0x1f,
  734. 0xbc, 0x91, 0xe0, 0xc5, 0x32, 0xa8, 0xa4, 0x21, 0xbc, 0x4a,
  735. 0xfe, 0x3c, 0xd4, 0x7f, 0x22, 0x32, 0x3e, 0xb4, 0xba, 0xe1,
  736. 0xa0, 0x07, 0x89, 0x81 ) );
  737. /** SHA-256 Test 3 : Instantiation */
  738. HMAC_DRBG_TEST_INSTANTIATE ( sha256_instantiate_3, HMAC_DRBG_SHA256,
  739. entropy_input, nonce_sha256, personalisation_string,
  740. EXPECT ( 0x65, 0x67, 0x3c, 0x34, 0x8e, 0x51, 0xcf, 0xac, 0xc4, 0x10,
  741. 0xbd, 0x20, 0x02, 0x49, 0xa5, 0x9a, 0x9d, 0x6b, 0xae, 0x77,
  742. 0x69, 0x04, 0x27, 0x1b, 0xb1, 0xf7, 0x18, 0xda, 0x1d, 0x18,
  743. 0x20, 0x42 ),
  744. EXPECT ( 0xe0, 0xf9, 0x1a, 0xc9, 0x96, 0x30, 0xee, 0xe6, 0x7c, 0xf8,
  745. 0x30, 0xcf, 0xd5, 0x04, 0x4f, 0xeb, 0xf5, 0x5c, 0x0c, 0x11,
  746. 0x50, 0x07, 0x99, 0x7a, 0xda, 0x11, 0x29, 0x6f, 0xc4, 0x16,
  747. 0x4a, 0x9a ) );
  748. /** SHA-256 Test 3.1 : First call to Generate */
  749. HMAC_DRBG_TEST_GENERATE ( sha256_generate_3_1, HMAC_DRBG_SHA256,
  750. additional_input_empty,
  751. EXPECT ( 0xf0, 0xb2, 0xf2, 0x42, 0xca, 0xd9, 0x92, 0xa7, 0x24, 0xf7,
  752. 0xe5, 0x59, 0x1d, 0x2f, 0x3b, 0x0c, 0x21, 0x57, 0xae, 0x70,
  753. 0xd5, 0x32, 0x78, 0x99, 0x40, 0xf1, 0x64, 0x45, 0x9b, 0x00,
  754. 0xc7, 0x49 ),
  755. EXPECT ( 0x1a, 0x03, 0xf9, 0x1c, 0x51, 0x20, 0xba, 0xca, 0x2b, 0xf6,
  756. 0xc6, 0x4d, 0xd7, 0x3a, 0xb1, 0x1d, 0xf6, 0xfd, 0x3f, 0xf1,
  757. 0xac, 0x3b, 0x57, 0x20, 0xa3, 0xf7, 0xfb, 0xe3, 0x9e, 0x7e,
  758. 0x7f, 0xe9 ),
  759. EXPECT ( 0x0d, 0xd9, 0xc8, 0x55, 0x89, 0xf3, 0x57, 0xc3, 0x89, 0xd6,
  760. 0xaf, 0x8d, 0xe9, 0xd7, 0x34, 0xa9, 0x17, 0xc7, 0x71, 0xef,
  761. 0x2d, 0x88, 0x16, 0xb9, 0x82, 0x59, 0x6e, 0xd1, 0x2d, 0xb4,
  762. 0x5d, 0x73, 0x4a, 0x62, 0x68, 0x08, 0x35, 0xc0, 0x2f, 0xda,
  763. 0x66, 0xb0, 0x8e, 0x1a, 0x36, 0x9a, 0xe2, 0x18, 0xf2, 0x6d,
  764. 0x52, 0x10, 0xad, 0x56, 0x42, 0x48, 0x87, 0x2d, 0x7a, 0x28,
  765. 0x78, 0x41, 0x59, 0xc3 ) );
  766. /** SHA-256 Test 3.2 : Second call to Generate */
  767. HMAC_DRBG_TEST_GENERATE ( sha256_generate_3_2, HMAC_DRBG_SHA256,
  768. additional_input_empty,
  769. EXPECT ( 0x5c, 0x0d, 0xec, 0x09, 0x37, 0x08, 0xc1, 0x7c, 0xa7, 0x6b,
  770. 0x57, 0xc0, 0xcb, 0x60, 0xcf, 0x88, 0x9d, 0xcc, 0x47, 0xad,
  771. 0x10, 0xbd, 0x64, 0xbc, 0x6a, 0x14, 0xb2, 0x3f, 0x20, 0x26,
  772. 0x07, 0x8a ),
  773. EXPECT ( 0x45, 0x67, 0x52, 0xa5, 0x11, 0xb8, 0x48, 0xbd, 0x05, 0xf1,
  774. 0x81, 0x9b, 0x9f, 0x6b, 0x15, 0x42, 0xc7, 0xd5, 0xec, 0xf9,
  775. 0x32, 0x73, 0x39, 0x26, 0x7a, 0x0c, 0x77, 0x23, 0x5b, 0x87,
  776. 0xdc, 0x5a ),
  777. EXPECT ( 0x46, 0xb4, 0xf4, 0x75, 0x6a, 0xe7, 0x15, 0xe0, 0xe5, 0x16,
  778. 0x81, 0xab, 0x29, 0x32, 0xde, 0x15, 0x23, 0xbe, 0x5d, 0x13,
  779. 0xba, 0xf0, 0xf4, 0x58, 0x8b, 0x11, 0xfe, 0x37, 0x2f, 0xda,
  780. 0x37, 0xab, 0xe3, 0x68, 0x31, 0x73, 0x41, 0xbc, 0x8b, 0xa9,
  781. 0x1f, 0xc5, 0xd8, 0x5b, 0x7f, 0xb8, 0xca, 0x8f, 0xbc, 0x30,
  782. 0x9a, 0x75, 0x8f, 0xd6, 0xfc, 0xa9, 0xdf, 0x43, 0xc7, 0x66,
  783. 0x0b, 0x22, 0x13, 0x22 ) );
  784. /** SHA-256 Test 4 : Instantiation */
  785. #define sha256_instantiate_4 sha256_instantiate_3
  786. /** SHA-256 Test 4.1 : First call to Generate */
  787. HMAC_DRBG_TEST_GENERATE ( sha256_generate_4_1, HMAC_DRBG_SHA256,
  788. additional_input_1,
  789. EXPECT ( 0x57, 0x2c, 0x03, 0x74, 0xc1, 0xa1, 0x01, 0x25, 0xbf, 0xa6,
  790. 0xae, 0xcd, 0x7c, 0xeb, 0xfe, 0x32, 0xf7, 0x52, 0xc3, 0xfb,
  791. 0x31, 0x67, 0x31, 0xb7, 0xcf, 0xdb, 0xde, 0xc2, 0x63, 0x56,
  792. 0x93, 0x2b ),
  793. EXPECT ( 0xd6, 0x8b, 0xf0, 0x41, 0xf3, 0xeb, 0x50, 0x88, 0x08, 0x8d,
  794. 0x8b, 0x8e, 0x71, 0x2c, 0x36, 0xae, 0x95, 0x83, 0xbb, 0x08,
  795. 0xfd, 0x1f, 0x90, 0x34, 0xa4, 0xe9, 0x42, 0xe9, 0xa6, 0x74,
  796. 0x7c, 0xe7 ),
  797. EXPECT ( 0x14, 0x78, 0xf2, 0x9e, 0x94, 0xb0, 0x2c, 0xb4, 0x0d, 0x3a,
  798. 0xab, 0x86, 0x24, 0x55, 0x57, 0xce, 0x13, 0xa8, 0xca, 0x2f,
  799. 0xdb, 0x65, 0x7d, 0x98, 0xef, 0xc1, 0x92, 0x34, 0x6b, 0x9f,
  800. 0xac, 0x33, 0xea, 0x58, 0xad, 0xa2, 0xcc, 0xa4, 0x32, 0xcc,
  801. 0xde, 0xfb, 0xcd, 0xaa, 0x8b, 0x82, 0xf5, 0x53, 0xef, 0x96,
  802. 0x61, 0x34, 0xe2, 0xcd, 0x13, 0x9f, 0x15, 0xf0, 0x1c, 0xad,
  803. 0x56, 0x85, 0x65, 0xa8 ) );
  804. /** SHA-256 Test 4.2 : Second call to Generate */
  805. HMAC_DRBG_TEST_GENERATE ( sha256_generate_4_2, HMAC_DRBG_SHA256,
  806. additional_input_2,
  807. EXPECT ( 0x28, 0x2e, 0x07, 0x34, 0x80, 0x80, 0x93, 0x75, 0x58, 0xb1,
  808. 0x39, 0x2e, 0x95, 0xab, 0x91, 0xe7, 0xc1, 0xf6, 0x22, 0xb2,
  809. 0x4f, 0xfb, 0x87, 0x20, 0xa5, 0xf0, 0xa5, 0xe0, 0x75, 0x50,
  810. 0xc7, 0xc2 ),
  811. EXPECT ( 0xdf, 0xc3, 0xbd, 0xb5, 0xf3, 0xbc, 0xf1, 0xaa, 0x68, 0x29,
  812. 0x8e, 0x79, 0x0d, 0x72, 0x0a, 0x67, 0xa7, 0x6e, 0x31, 0xb9,
  813. 0x2b, 0x9b, 0x35, 0xa8, 0xe5, 0x47, 0x1b, 0xb1, 0x7e, 0x30,
  814. 0x3c, 0x6b ),
  815. EXPECT ( 0x49, 0x7c, 0x7a, 0x16, 0xe8, 0x8a, 0x64, 0x11, 0xf8, 0xfc,
  816. 0xe1, 0x0e, 0xf5, 0x67, 0x63, 0xc6, 0x10, 0x25, 0x80, 0x1d,
  817. 0x8f, 0x51, 0xa7, 0x43, 0x52, 0xd6, 0x82, 0xcc, 0x23, 0xa0,
  818. 0xa8, 0xe6, 0x73, 0xca, 0xe0, 0x32, 0x28, 0x93, 0x90, 0x64,
  819. 0x7d, 0xc6, 0x83, 0xb7, 0x34, 0x28, 0x85, 0xd6, 0xb7, 0x6a,
  820. 0xb1, 0xda, 0x69, 0x6d, 0x3e, 0x97, 0xe2, 0x2d, 0xff, 0xdd,
  821. 0xff, 0xfd, 0x8d, 0xf0 ) );
  822. /** SHA-256 Test 5 : Instantiation */
  823. #define sha256_instantiate_5 sha256_instantiate_1
  824. /** SHA-256 Test 5.1 : First call to Generate */
  825. HMAC_DRBG_TEST_GENERATE_FAIL ( sha256_generate_fail_5_1, HMAC_DRBG_SHA256,
  826. additional_input_empty, ( 512 / 8 ) );
  827. /** SHA-256 Test 5.2 : Reseed */
  828. HMAC_DRBG_TEST_RESEED ( sha256_reseed_5_2, HMAC_DRBG_SHA256,
  829. entropy_input_1, additional_input_empty,
  830. EXPECT ( 0xb8, 0x40, 0x07, 0xe3, 0xe2, 0x7f, 0x34, 0xf9, 0xa7, 0x82,
  831. 0x0b, 0x7a, 0xb5, 0x9b, 0xbe, 0xfc, 0xd0, 0xc4, 0xac, 0xae,
  832. 0xde, 0x4b, 0x0b, 0x36, 0xb1, 0x47, 0xb8, 0x97, 0x79, 0xfd,
  833. 0x74, 0x9d ),
  834. EXPECT ( 0xa7, 0x2b, 0x8f, 0xee, 0x92, 0x39, 0x2f, 0x0a, 0x9d, 0x2d,
  835. 0x61, 0xbf, 0x09, 0xa4, 0xdf, 0xcc, 0x9d, 0xe6, 0x9a, 0x16,
  836. 0xa5, 0xf1, 0x50, 0x22, 0x4c, 0x3e, 0xf6, 0x04, 0x2d, 0x15,
  837. 0x21, 0xfc ) );
  838. /** SHA-256 Test 5.3 : Retried first call to Generate */
  839. HMAC_DRBG_TEST_GENERATE ( sha256_generate_5_3, HMAC_DRBG_SHA256,
  840. additional_input_empty,
  841. EXPECT ( 0x43, 0x48, 0xaf, 0x84, 0x20, 0x84, 0x2f, 0xa0, 0x77, 0xb9,
  842. 0xd3, 0xdb, 0xa8, 0xdc, 0xe9, 0xb3, 0xe1, 0xdf, 0x73, 0x4f,
  843. 0xfc, 0xe1, 0xbe, 0xa5, 0xb9, 0xe2, 0xb1, 0x54, 0xdc, 0x5e,
  844. 0xc6, 0x15 ),
  845. EXPECT ( 0xd2, 0xc1, 0xac, 0x27, 0x88, 0x5d, 0x43, 0x32, 0x76, 0x71,
  846. 0x31, 0x46, 0x32, 0xea, 0x60, 0x43, 0x3c, 0xca, 0x72, 0x73,
  847. 0x04, 0x56, 0x9e, 0xa7, 0xd4, 0x71, 0xfe, 0xa7, 0xdb, 0x7d,
  848. 0x31, 0x5d ),
  849. EXPECT ( 0xfa, 0xbd, 0x0a, 0xe2, 0x5c, 0x69, 0xdc, 0x2e, 0xfd, 0xef,
  850. 0xb7, 0xf2, 0x0c, 0x5a, 0x31, 0xb5, 0x7a, 0xc9, 0x38, 0xab,
  851. 0x77, 0x1a, 0xa1, 0x9b, 0xf8, 0xf5, 0xf1, 0x46, 0x8f, 0x66,
  852. 0x5c, 0x93, 0x8c, 0x9a, 0x1a, 0x5d, 0xf0, 0x62, 0x8a, 0x56,
  853. 0x90, 0xf1, 0x5a, 0x1a, 0xd8, 0xa6, 0x13, 0xf3, 0x1b, 0xbd,
  854. 0x65, 0xee, 0xad, 0x54, 0x57, 0xd5, 0xd2, 0x69, 0x47, 0xf2,
  855. 0x9f, 0xe9, 0x1a, 0xa7 ) );
  856. /** SHA-256 Test 5.4 : Second call to Generate */
  857. HMAC_DRBG_TEST_GENERATE_FAIL ( sha256_generate_fail_5_4, HMAC_DRBG_SHA256,
  858. additional_input_empty, ( 512 / 8 ) );
  859. /** SHA-256 Test 5.5 : Reseed */
  860. HMAC_DRBG_TEST_RESEED ( sha256_reseed_5_5, HMAC_DRBG_SHA256,
  861. entropy_input_2, additional_input_empty,
  862. EXPECT ( 0xbf, 0xa0, 0x2c, 0xe7, 0xe9, 0x2d, 0xe9, 0x2b, 0x18, 0x24,
  863. 0x28, 0x86, 0x89, 0x0e, 0x58, 0x6f, 0x83, 0x69, 0x06, 0xac,
  864. 0xe9, 0xe5, 0x54, 0xf1, 0xb0, 0xed, 0x63, 0x57, 0x3c, 0xb8,
  865. 0xb5, 0x03 ),
  866. EXPECT ( 0xd3, 0x24, 0x03, 0xee, 0xa9, 0xdc, 0xe1, 0x61, 0x6e, 0x4e,
  867. 0x11, 0x55, 0xb9, 0x23, 0xd8, 0x84, 0x2c, 0xc6, 0xe7, 0x84,
  868. 0xc6, 0x7a, 0x93, 0x85, 0xb2, 0xa6, 0x37, 0xf1, 0x02, 0xfa,
  869. 0x45, 0xd5 ) );
  870. /** SHA-256 Test 5.6 : Retried second call to Generate */
  871. HMAC_DRBG_TEST_GENERATE ( sha256_generate_5_6, HMAC_DRBG_SHA256,
  872. additional_input_empty,
  873. EXPECT ( 0x81, 0x21, 0xf7, 0x76, 0x4c, 0x08, 0x1e, 0xe9, 0xd1, 0x17,
  874. 0x1e, 0xd1, 0x87, 0xba, 0xe0, 0x88, 0x95, 0xca, 0xe2, 0x30,
  875. 0xd0, 0xa2, 0x5e, 0x37, 0x39, 0xc5, 0x7d, 0x54, 0x16, 0x10,
  876. 0x9b, 0x82 ),
  877. EXPECT ( 0x37, 0x84, 0x97, 0x7c, 0xc0, 0xe5, 0x9f, 0xbc, 0x9c, 0xda,
  878. 0x4e, 0x11, 0x92, 0x47, 0x5c, 0x6e, 0xfa, 0xf8, 0x07, 0x20,
  879. 0x19, 0x86, 0x21, 0x22, 0xcb, 0x6b, 0xce, 0xaa, 0xcc, 0x4a,
  880. 0x17, 0x5e ),
  881. EXPECT ( 0x6b, 0xd9, 0x25, 0xb0, 0xe1, 0xc2, 0x32, 0xef, 0xd6, 0x7c,
  882. 0xcd, 0x84, 0xf7, 0x22, 0xe9, 0x27, 0xec, 0xb4, 0x6a, 0xb2,
  883. 0xb7, 0x40, 0x01, 0x47, 0x77, 0xaf, 0x14, 0xba, 0x0b, 0xbf,
  884. 0x53, 0xa4, 0x5b, 0xdb, 0xb6, 0x2b, 0x3f, 0x7d, 0x0b, 0x9c,
  885. 0x8e, 0xea, 0xd0, 0x57, 0xc0, 0xec, 0x75, 0x4e, 0xf8, 0xb5,
  886. 0x3e, 0x60, 0xa1, 0xf4, 0x34, 0xf0, 0x59, 0x46, 0xa8, 0xb6,
  887. 0x86, 0xaf, 0xbc, 0x7a ) );
  888. /** SHA-256 Test 6 : Instantiate */
  889. #define sha256_instantiate_6 sha256_instantiate_1
  890. /** SHA-256 Test 6.1 : First call to Generate */
  891. HMAC_DRBG_TEST_GENERATE_FAIL ( sha256_generate_fail_6_1, HMAC_DRBG_SHA256,
  892. additional_input_1, ( 512 / 8 ) );
  893. /** SHA-256 Test 6.2 : Reseed */
  894. HMAC_DRBG_TEST_RESEED ( sha256_reseed_6_2, HMAC_DRBG_SHA256,
  895. entropy_input_1, additional_input_1,
  896. EXPECT ( 0xc1, 0x25, 0xea, 0x99, 0x75, 0x8e, 0xbb, 0x9a, 0x6f, 0x69,
  897. 0xae, 0x31, 0x2a, 0xc2, 0x04, 0xb5, 0x94, 0xc0, 0x0a, 0xb6,
  898. 0x8b, 0x81, 0x6e, 0x3a, 0x52, 0x12, 0x8e, 0x02, 0x78, 0xa5,
  899. 0x84, 0xac ),
  900. EXPECT ( 0xb2, 0xcb, 0x2b, 0x89, 0x12, 0x3f, 0x5b, 0x4a, 0xf5, 0x87,
  901. 0xb8, 0xf6, 0xbd, 0xc5, 0x42, 0x7a, 0x99, 0x14, 0x19, 0xd3,
  902. 0x53, 0x07, 0x7c, 0x68, 0x5e, 0x70, 0x7a, 0xcd, 0xf8, 0xe9,
  903. 0xfd, 0xa9 ) );
  904. /** SHA-256 Test 6.3 : Retried first call to Generate */
  905. HMAC_DRBG_TEST_GENERATE ( sha256_generate_6_3, HMAC_DRBG_SHA256,
  906. additional_input_empty,
  907. EXPECT ( 0xc6, 0xed, 0x8f, 0xed, 0x71, 0x57, 0xa4, 0xd0, 0x9e, 0xa1,
  908. 0xdd, 0xe8, 0x94, 0x6b, 0x54, 0x43, 0x3e, 0xcc, 0x54, 0x49,
  909. 0xa4, 0xa3, 0x52, 0xaf, 0x45, 0x76, 0x4e, 0xe6, 0x73, 0x4b,
  910. 0xbb, 0x04 ),
  911. EXPECT ( 0xeb, 0xc7, 0x75, 0x25, 0x6b, 0xb7, 0x81, 0x24, 0x1e, 0x9c,
  912. 0x70, 0xbb, 0xcf, 0x73, 0x2b, 0xdc, 0x90, 0xad, 0x10, 0xd9,
  913. 0xdd, 0x3a, 0x89, 0x6e, 0xcc, 0x12, 0xb9, 0x2f, 0xfb, 0x63,
  914. 0x45, 0xab ),
  915. EXPECT ( 0x08, 0x5d, 0x57, 0xaf, 0x6b, 0xab, 0xcf, 0x2b, 0x9a, 0xee,
  916. 0xf3, 0x87, 0xd5, 0x31, 0x65, 0x0e, 0x6a, 0x50, 0x5c, 0x54,
  917. 0x40, 0x6a, 0xb3, 0x7a, 0x52, 0x89, 0x9e, 0x0e, 0xca, 0xb3,
  918. 0x63, 0x2b, 0x7a, 0x06, 0x8a, 0x28, 0x14, 0xc6, 0xdf, 0x6a,
  919. 0xe5, 0x32, 0xb6, 0x58, 0xd0, 0xd9, 0x74, 0x1c, 0x84, 0x77,
  920. 0x5f, 0xee, 0x45, 0xb6, 0x84, 0xcd, 0xbd, 0xc2, 0x5f, 0xbc,
  921. 0xb4, 0xd8, 0xf3, 0x10 ) );
  922. /** SHA-256 Test 6.4 : Second call to Generate */
  923. HMAC_DRBG_TEST_GENERATE_FAIL ( sha256_generate_fail_6_4, HMAC_DRBG_SHA256,
  924. additional_input_2, ( 512 / 8 ) );
  925. /** SHA-256 Test 6.5 : Reseed */
  926. HMAC_DRBG_TEST_RESEED ( sha256_reseed_6_5, HMAC_DRBG_SHA256,
  927. entropy_input_2, additional_input_2,
  928. EXPECT ( 0xfc, 0x51, 0xda, 0x84, 0xf9, 0x69, 0x6b, 0xcc, 0x84, 0xc8,
  929. 0xf2, 0xac, 0xb9, 0x24, 0xbc, 0xdf, 0x72, 0xf8, 0x2e, 0xa2,
  930. 0xca, 0x64, 0x3f, 0x08, 0x3b, 0x0c, 0x16, 0xc3, 0x63, 0x4e,
  931. 0xfc, 0x62 ),
  932. EXPECT ( 0xb9, 0x74, 0xe4, 0x37, 0x0a, 0xd5, 0x76, 0xbb, 0x99, 0xc4,
  933. 0xe4, 0x9e, 0xa6, 0x80, 0xbf, 0xf9, 0x8d, 0xe9, 0xe1, 0x2f,
  934. 0xec, 0xd0, 0x13, 0xde, 0xd4, 0x3c, 0x80, 0xf6, 0x9a, 0x7a,
  935. 0xde, 0x8a ) );
  936. /** SHA-256 Test 6.6 : Retried second call to Generate */
  937. HMAC_DRBG_TEST_GENERATE ( sha256_generate_6_6, HMAC_DRBG_SHA256,
  938. additional_input_empty,
  939. EXPECT ( 0x56, 0xa2, 0xb4, 0x46, 0x32, 0xcb, 0x8f, 0xc3, 0xa6, 0x40,
  940. 0x09, 0xbf, 0xd6, 0xec, 0x95, 0xe5, 0x6c, 0xef, 0x8e, 0x7c,
  941. 0x91, 0x2a, 0xa8, 0x2b, 0x16, 0xf6, 0x14, 0x91, 0x5d, 0x9c,
  942. 0xd6, 0xe3 ),
  943. EXPECT ( 0xb5, 0xb3, 0x96, 0xa0, 0x15, 0x76, 0xb0, 0xfe, 0x42, 0xf4,
  944. 0x08, 0x44, 0x55, 0x6c, 0x4c, 0xf4, 0xb6, 0x80, 0x4c, 0x94,
  945. 0xde, 0x9d, 0x62, 0x38, 0xf1, 0xf7, 0xe7, 0xaf, 0x5c, 0x72,
  946. 0x57, 0xf3 ),
  947. EXPECT ( 0x9b, 0x21, 0x9f, 0xd9, 0x0d, 0xe2, 0xa0, 0x8e, 0x49, 0x34,
  948. 0x05, 0xcf, 0x87, 0x44, 0x17, 0xb5, 0x82, 0x67, 0x70, 0xf3,
  949. 0x94, 0x48, 0x15, 0x55, 0xdc, 0x66, 0x8a, 0xcd, 0x96, 0xb9,
  950. 0xa3, 0xe5, 0x6f, 0x9d, 0x2c, 0x32, 0x5e, 0x26, 0xd4, 0x7c,
  951. 0x1d, 0xfc, 0xfc, 0x8f, 0xbf, 0x86, 0x12, 0x6f, 0x40, 0xa1,
  952. 0xe6, 0x39, 0x60, 0xf6, 0x27, 0x49, 0x34, 0x2e, 0xcd, 0xb7,
  953. 0x1b, 0x24, 0x0d, 0xc6 ) );
  954. /** SHA-256 Test 7 : Instantiation */
  955. #define sha256_instantiate_7 sha256_instantiate_3
  956. /** SHA-256 Test 7.1 : First call to Generate */
  957. HMAC_DRBG_TEST_GENERATE_FAIL ( sha256_generate_fail_7_1, HMAC_DRBG_SHA256,
  958. additional_input_empty, ( 512 / 8 ) );
  959. /** SHA-256 Test 7.2 : Reseed */
  960. HMAC_DRBG_TEST_RESEED ( sha256_reseed_7_2, HMAC_DRBG_SHA256,
  961. entropy_input_1, additional_input_empty,
  962. EXPECT ( 0x44, 0x76, 0xc6, 0xd1, 0x1f, 0xc3, 0x5d, 0x44, 0x09, 0xd9,
  963. 0x03, 0x2e, 0x45, 0x3b, 0x0f, 0x0d, 0xc3, 0x31, 0x4d, 0xb8,
  964. 0x62, 0xcb, 0xdb, 0x60, 0x9c, 0x56, 0x02, 0x20, 0x8d, 0x4c,
  965. 0x88, 0xd8 ),
  966. EXPECT ( 0x95, 0xef, 0x78, 0x5a, 0x61, 0xc2, 0xf7, 0xb3, 0x6b, 0xc5,
  967. 0x96, 0xba, 0x4b, 0xa2, 0x08, 0xa5, 0x2c, 0x6d, 0xc2, 0x03,
  968. 0x63, 0x6d, 0x8f, 0x17, 0x87, 0x45, 0x3b, 0x85, 0x2b, 0x7e,
  969. 0x49, 0xec ) );
  970. /** SHA-256 Test 7.3 : Retried first call to Generate */
  971. HMAC_DRBG_TEST_GENERATE ( sha256_generate_7_3, HMAC_DRBG_SHA256,
  972. additional_input_empty,
  973. EXPECT ( 0x0d, 0xf9, 0x11, 0x0e, 0x2f, 0x22, 0x58, 0x98, 0x24, 0xa9,
  974. 0x47, 0x6c, 0x8e, 0x32, 0x08, 0x8e, 0x51, 0xa0, 0xda, 0x36,
  975. 0x63, 0x3f, 0x8c, 0xd1, 0xf7, 0x54, 0x7d, 0xff, 0x69, 0x6e,
  976. 0x4b, 0x29 ),
  977. EXPECT ( 0xc0, 0xe3, 0xc8, 0xed, 0x5a, 0x8b, 0x57, 0x9e, 0x3f, 0xef,
  978. 0x9d, 0xf3, 0xb7, 0xc2, 0xc2, 0x12, 0x98, 0x07, 0x17, 0xcc,
  979. 0x91, 0xae, 0x18, 0x66, 0x45, 0xfa, 0xbb, 0x2c, 0xc7, 0x84,
  980. 0xd5, 0xd7 ),
  981. EXPECT ( 0xd8, 0xb6, 0x71, 0x30, 0x71, 0x41, 0x94, 0xff, 0xe5, 0xb2,
  982. 0xa3, 0x5d, 0xbc, 0xd5, 0xe1, 0xa2, 0x99, 0x42, 0xad, 0x5c,
  983. 0x68, 0xf3, 0xde, 0xb9, 0x4a, 0xdd, 0x9e, 0x9e, 0xba, 0xd8,
  984. 0x60, 0x67, 0xed, 0xf0, 0x49, 0x15, 0xfb, 0x40, 0xc3, 0x91,
  985. 0xea, 0xe7, 0x0c, 0x65, 0x9e, 0xaa, 0xe7, 0xef, 0x11, 0xa3,
  986. 0xd4, 0x6a, 0x5b, 0x08, 0x5e, 0xdd, 0x90, 0xcc, 0x72, 0xce,
  987. 0xa9, 0x89, 0x21, 0x0b ) );
  988. /** SHA-256 Test 7.4 : Second call to Generate */
  989. HMAC_DRBG_TEST_GENERATE_FAIL ( sha256_generate_fail_7_4, HMAC_DRBG_SHA256,
  990. additional_input_empty, ( 512 / 8 ) );
  991. /** SHA-256 Test 7.5 : Reseed */
  992. HMAC_DRBG_TEST_RESEED ( sha256_reseed_7_5, HMAC_DRBG_SHA256,
  993. entropy_input_2, additional_input_empty,
  994. EXPECT ( 0x3d, 0x77, 0x63, 0xe5, 0x30, 0x3d, 0xb5, 0x4b, 0xe2, 0x05,
  995. 0x44, 0xa8, 0x1e, 0x9f, 0x00, 0xca, 0xdc, 0xfc, 0x1c, 0xb2,
  996. 0x8d, 0xec, 0xb9, 0xcf, 0xc6, 0x99, 0xf6, 0x1d, 0xba, 0xf8,
  997. 0x80, 0x21 ),
  998. EXPECT ( 0xfe, 0xbc, 0x02, 0x79, 0xb7, 0x71, 0x0d, 0xec, 0x5c, 0x06,
  999. 0x7e, 0xbe, 0xfa, 0x06, 0x8e, 0x4b, 0x59, 0x67, 0x49, 0x1b,
  1000. 0x7e, 0xef, 0x94, 0x75, 0x83, 0x50, 0x6d, 0x04, 0x97, 0xce,
  1001. 0x67, 0xba ) );
  1002. /** SHA-256 Test 7.6 : Retried second call to Generate */
  1003. HMAC_DRBG_TEST_GENERATE ( sha256_generate_7_6, HMAC_DRBG_SHA256,
  1004. additional_input_empty,
  1005. EXPECT ( 0x2d, 0x21, 0xac, 0x94, 0x99, 0x2f, 0xd8, 0x2b, 0x09, 0x80,
  1006. 0xd3, 0xd5, 0x95, 0x51, 0xb9, 0xd0, 0x7c, 0x8d, 0x54, 0xb2,
  1007. 0x52, 0xb6, 0x16, 0x28, 0x93, 0x44, 0xf8, 0xac, 0x86, 0x9e,
  1008. 0xd3, 0x5b ),
  1009. EXPECT ( 0x61, 0x0c, 0x34, 0xcd, 0xbf, 0x6f, 0x75, 0x33, 0x54, 0x7f,
  1010. 0x23, 0x32, 0xea, 0xc5, 0x7e, 0xe3, 0x1e, 0x72, 0x4f, 0xb2,
  1011. 0x92, 0x55, 0x56, 0x6b, 0x59, 0x78, 0x33, 0x16, 0x6c, 0xd0,
  1012. 0x39, 0x9f ),
  1013. EXPECT ( 0x8b, 0xba, 0x71, 0xc2, 0x58, 0x3f, 0x25, 0x30, 0xc2, 0x59,
  1014. 0xc9, 0x07, 0x84, 0xa5, 0x9a, 0xc4, 0x4d, 0x1c, 0x80, 0x56,
  1015. 0x91, 0x7c, 0xcf, 0x38, 0x87, 0x88, 0x10, 0x2d, 0x73, 0x82,
  1016. 0x4c, 0x6c, 0x11, 0xd5, 0xd6, 0x3b, 0xe1, 0xf0, 0x10, 0x17,
  1017. 0xd8, 0x84, 0xcd, 0x69, 0xd9, 0x33, 0x4b, 0x9e, 0xbc, 0x01,
  1018. 0xe7, 0xbd, 0x8f, 0xdf, 0x2a, 0x8e, 0x52, 0x57, 0x22, 0x93,
  1019. 0xdc, 0x21, 0xc0, 0xe1 ) );
  1020. /** SHA-256 Test 8 : Instantiate */
  1021. #define sha256_instantiate_8 sha256_instantiate_3
  1022. /** SHA-256 Test 8.1 : First call to Generate */
  1023. HMAC_DRBG_TEST_GENERATE_FAIL ( sha256_generate_fail_8_1, HMAC_DRBG_SHA256,
  1024. additional_input_1, ( 512 / 8 ) );
  1025. /** SHA-256 Test 8.2 : Reseed */
  1026. HMAC_DRBG_TEST_RESEED ( sha256_reseed_8_2, HMAC_DRBG_SHA256,
  1027. entropy_input_1, additional_input_1,
  1028. EXPECT ( 0xb3, 0x81, 0x38, 0x8c, 0x1d, 0x7c, 0xfd, 0x56, 0x59, 0x30,
  1029. 0x99, 0x3b, 0xd9, 0x26, 0x90, 0x66, 0x50, 0x88, 0xd9, 0xb8,
  1030. 0x39, 0x96, 0x9b, 0x87, 0xf1, 0x6d, 0xb6, 0xdf, 0x4e, 0x43,
  1031. 0x00, 0xd7 ),
  1032. EXPECT ( 0xfa, 0x04, 0x25, 0x64, 0x00, 0xe3, 0x42, 0xe6, 0x55, 0xf4,
  1033. 0x33, 0x26, 0x94, 0xe3, 0xb2, 0x4c, 0x04, 0xfb, 0x85, 0xbf,
  1034. 0x87, 0x80, 0x21, 0xe4, 0x52, 0xe7, 0x3b, 0x8f, 0x46, 0xd4,
  1035. 0xbd, 0xc6 ) );
  1036. /** SHA-256 Test 8.3 : Retried first call to Generate */
  1037. HMAC_DRBG_TEST_GENERATE ( sha256_generate_8_3, HMAC_DRBG_SHA256,
  1038. additional_input_empty,
  1039. EXPECT ( 0xd4, 0x1f, 0x6f, 0x33, 0x65, 0x82, 0x21, 0x70, 0x50, 0xb1,
  1040. 0xf6, 0x59, 0x28, 0xfd, 0x6e, 0x94, 0xcb, 0xc9, 0x45, 0x68,
  1041. 0xfe, 0x3b, 0x6b, 0x53, 0x38, 0x9e, 0x1e, 0x3a, 0x5b, 0x49,
  1042. 0xe1, 0x01 ),
  1043. EXPECT ( 0xa6, 0x55, 0xc9, 0xe7, 0xd1, 0x33, 0xf1, 0xcd, 0x8b, 0x11,
  1044. 0x61, 0xf2, 0x7d, 0x54, 0xe7, 0x5a, 0x7e, 0x7c, 0x80, 0x42,
  1045. 0xbf, 0x74, 0xd4, 0x7f, 0x9f, 0xfd, 0x60, 0xe2, 0x45, 0xeb,
  1046. 0xa5, 0x7e ),
  1047. EXPECT ( 0x44, 0xd7, 0x8b, 0xbc, 0x3e, 0xb6, 0x7c, 0x59, 0xc2, 0x2f,
  1048. 0x6c, 0x31, 0x00, 0x3d, 0x21, 0x2a, 0x78, 0x37, 0xcc, 0xd8,
  1049. 0x4c, 0x43, 0x8b, 0x55, 0x15, 0x0f, 0xd0, 0x13, 0xa8, 0xa7,
  1050. 0x8f, 0xe8, 0xed, 0xea, 0x81, 0xc6, 0x72, 0xe4, 0xb8, 0xdd,
  1051. 0xc8, 0x18, 0x38, 0x86, 0xe6, 0x9c, 0x2e, 0x17, 0x7d, 0xf5,
  1052. 0x74, 0xc1, 0xf1, 0x90, 0xdf, 0x27, 0x18, 0x50, 0xf8, 0xce,
  1053. 0x55, 0xef, 0x20, 0xb8 ) );
  1054. /** SHA-256 Test 8.4 : Second call to Generate */
  1055. HMAC_DRBG_TEST_GENERATE_FAIL ( sha256_generate_fail_8_4, HMAC_DRBG_SHA256,
  1056. additional_input_2, ( 512 / 8 ) );
  1057. /** SHA-256 Test 8.5 : Reseed */
  1058. HMAC_DRBG_TEST_RESEED ( sha256_reseed_8_5, HMAC_DRBG_SHA256,
  1059. entropy_input_2, additional_input_2,
  1060. EXPECT ( 0xfb, 0xa8, 0x05, 0x45, 0x3e, 0x3c, 0x9a, 0x73, 0x64, 0x58,
  1061. 0x5c, 0xed, 0xbc, 0xd2, 0x92, 0x30, 0xfb, 0xc9, 0x3d, 0x6f,
  1062. 0x12, 0x9d, 0x21, 0xed, 0xdd, 0xf6, 0x61, 0x3b, 0x3a, 0x8f,
  1063. 0xf2, 0x83 ),
  1064. EXPECT ( 0x83, 0x64, 0x7a, 0x33, 0x8c, 0x15, 0x3c, 0xba, 0xf0, 0xe4,
  1065. 0x9a, 0x54, 0xa4, 0x4f, 0xea, 0x66, 0x70, 0xcf, 0xd7, 0xc1,
  1066. 0x71, 0x4d, 0x4a, 0xb3, 0x5f, 0x11, 0x12, 0x3d, 0xf2, 0x7b,
  1067. 0x69, 0xcf ) );
  1068. /** SHA-256 Test 8.6 : Retried second call to Generate */
  1069. HMAC_DRBG_TEST_GENERATE ( sha256_generate_8_6, HMAC_DRBG_SHA256,
  1070. additional_input_empty,
  1071. EXPECT ( 0xae, 0x59, 0xc7, 0x0a, 0x7c, 0x60, 0xed, 0x49, 0x83, 0x78,
  1072. 0xea, 0x84, 0x5b, 0xe9, 0x7d, 0x8f, 0xf8, 0x81, 0xe0, 0xea,
  1073. 0x37, 0x2e, 0x26, 0x5f, 0xa6, 0x72, 0x84, 0x29, 0x3e, 0x1a,
  1074. 0x46, 0xac ),
  1075. EXPECT ( 0xe2, 0xf0, 0x4d, 0xe3, 0xce, 0x21, 0x79, 0x61, 0xae, 0x2b,
  1076. 0x2d, 0x20, 0xa7, 0xba, 0x7c, 0x6c, 0x82, 0x0b, 0x5b, 0x14,
  1077. 0x92, 0x6e, 0x59, 0x56, 0xae, 0x6d, 0xfa, 0x2e, 0xd1, 0xd6,
  1078. 0x39, 0x93 ),
  1079. EXPECT ( 0x91, 0x77, 0x80, 0xdc, 0x0c, 0xe9, 0x98, 0x9f, 0xee, 0x6c,
  1080. 0x08, 0x06, 0xd6, 0xda, 0x12, 0x3a, 0x18, 0x25, 0x29, 0x47,
  1081. 0x58, 0xd4, 0xe1, 0xb5, 0x82, 0x68, 0x72, 0x31, 0x78, 0x0a,
  1082. 0x2a, 0x9c, 0x33, 0xf1, 0xd1, 0x56, 0xcc, 0xad, 0x32, 0x77,
  1083. 0x64, 0xb2, 0x9a, 0x4c, 0xb2, 0x69, 0x01, 0x77, 0xae, 0x96,
  1084. 0xef, 0x9e, 0xe9, 0x2a, 0xd0, 0xc3, 0x40, 0xba, 0x0f, 0xd1,
  1085. 0x20, 0x3c, 0x02, 0xc6 ) );
  1086. /**
  1087. * Force a "reseed required" state
  1088. *
  1089. * @v state HMAC_DRBG internal state
  1090. */
  1091. static inline void force_reseed_required ( struct hmac_drbg_state *state ) {
  1092. state->reseed_counter = ( HMAC_DRBG_RESEED_INTERVAL + 1 );
  1093. }
  1094. /**
  1095. * Perform HMAC_DRBG self-test
  1096. *
  1097. */
  1098. static void hmac_drbg_test_exec ( void ) {
  1099. struct hmac_drbg_state state;
  1100. /*
  1101. * IMPORTANT NOTE
  1102. *
  1103. * The NIST test vector set includes several calls to
  1104. * HMAC_DRBG_Generate() that are expected to fail with a
  1105. * status of "Reseed required". The pattern seems to be that
  1106. * when prediction resistance is requested, any call to
  1107. * HMAC_DRBG_Generate() is at first expected to fail. After
  1108. * an explicit reseeding, the call to HMAC_DRBG_Generate() is
  1109. * retried, and on this second time it is expected to succeed.
  1110. *
  1111. * This pattern does not match the specifications for
  1112. * HMAC_DRBG_Generate(): neither HMAC_DRBG_Generate_algorithm
  1113. * (defined in ANS X9.82 Part 3-2007 Section 10.2.2.2.5 (NIST
  1114. * SP 800-90 Section 10.1.2.5)) nor the higher-level wrapper
  1115. * Generate_function defined in ANS X9.82 Part 3-2007 Section
  1116. * 9.4 (NIST SP 800-90 Section 9.3)) can possibly exhibit this
  1117. * behaviour:
  1118. *
  1119. * a) HMAC_DRBG_Generate_algorithm can return a "reseed
  1120. * required" status only as a result of the test
  1121. *
  1122. * "1. If reseed_counter > reseed_interval, then return
  1123. * an indication that a reseed is required."
  1124. *
  1125. * Since the reseed interval is independent of any request
  1126. * for prediction resistance, and since the reseed interval
  1127. * is not specified as part of the NIST test vector set,
  1128. * then this cannot be the source of the "Reseed required"
  1129. * failure expected by the NIST test vector set.
  1130. *
  1131. * b) Generate_function cannot return a "reseed required"
  1132. * status under any circumstances. If the underlying
  1133. * HMAC_DRBG_Generate_algorithm call returns "reseed
  1134. * required", then Generate_function will automatically
  1135. * reseed and try again.
  1136. *
  1137. * To produce the behaviour expected by the NIST test vector
  1138. * set, we therefore contrive to produce a "reseed required"
  1139. * state where necessary by setting the reseed_counter to
  1140. * greater than the reseed_interval.
  1141. */
  1142. /* SHA-1 Test 1 */
  1143. instantiate_ok ( &state, &sha1_instantiate_1 );
  1144. generate_ok ( &state, &sha1_generate_1_1 );
  1145. generate_ok ( &state, &sha1_generate_1_2 );
  1146. /* SHA-1 Test 2 */
  1147. instantiate_ok ( &state, &sha1_instantiate_2 );
  1148. generate_ok ( &state, &sha1_generate_2_1 );
  1149. generate_ok ( &state, &sha1_generate_2_2 );
  1150. /* SHA-1 Test 3 */
  1151. instantiate_ok ( &state, &sha1_instantiate_3 );
  1152. generate_ok ( &state, &sha1_generate_3_1 );
  1153. generate_ok ( &state, &sha1_generate_3_2 );
  1154. /* SHA-1 Test 4 */
  1155. instantiate_ok ( &state, &sha1_instantiate_4 );
  1156. generate_ok ( &state, &sha1_generate_4_1 );
  1157. generate_ok ( &state, &sha1_generate_4_2 );
  1158. /* SHA-1 Test 5 */
  1159. instantiate_ok ( &state, &sha1_instantiate_5 );
  1160. force_reseed_required ( &state ); /* See above comments */
  1161. generate_fail_ok ( &state, &sha1_generate_fail_5_1 );
  1162. reseed_ok ( &state, &sha1_reseed_5_2 );
  1163. generate_ok ( &state, &sha1_generate_5_3 );
  1164. force_reseed_required ( &state ); /* See above comments */
  1165. generate_fail_ok ( &state, &sha1_generate_fail_5_4 );
  1166. reseed_ok ( &state, &sha1_reseed_5_5 );
  1167. generate_ok ( &state, &sha1_generate_5_6 );
  1168. /* SHA-1 Test 6 */
  1169. instantiate_ok ( &state, &sha1_instantiate_6 );
  1170. force_reseed_required ( &state ); /* See above comments */
  1171. generate_fail_ok ( &state, &sha1_generate_fail_6_1 );
  1172. reseed_ok ( &state, &sha1_reseed_6_2 );
  1173. generate_ok ( &state, &sha1_generate_6_3 );
  1174. force_reseed_required ( &state ); /* See above comments */
  1175. generate_fail_ok ( &state, &sha1_generate_fail_6_4 );
  1176. reseed_ok ( &state, &sha1_reseed_6_5 );
  1177. generate_ok ( &state, &sha1_generate_6_6 );
  1178. /* SHA-1 Test 7 */
  1179. instantiate_ok ( &state, &sha1_instantiate_7 );
  1180. force_reseed_required ( &state ); /* See above comments */
  1181. generate_fail_ok ( &state, &sha1_generate_fail_7_1 );
  1182. reseed_ok ( &state, &sha1_reseed_7_2 );
  1183. generate_ok ( &state, &sha1_generate_7_3 );
  1184. force_reseed_required ( &state ); /* See above comments */
  1185. generate_fail_ok ( &state, &sha1_generate_fail_7_4 );
  1186. reseed_ok ( &state, &sha1_reseed_7_5 );
  1187. generate_ok ( &state, &sha1_generate_7_6 );
  1188. /* SHA-1 Test 8 */
  1189. instantiate_ok ( &state, &sha1_instantiate_8 );
  1190. force_reseed_required ( &state ); /* See above comments */
  1191. generate_fail_ok ( &state, &sha1_generate_fail_8_1 );
  1192. reseed_ok ( &state, &sha1_reseed_8_2 );
  1193. generate_ok ( &state, &sha1_generate_8_3 );
  1194. force_reseed_required ( &state ); /* See above comments */
  1195. generate_fail_ok ( &state, &sha1_generate_fail_8_4 );
  1196. reseed_ok ( &state, &sha1_reseed_8_5 );
  1197. generate_ok ( &state, &sha1_generate_8_6 );
  1198. /* SHA-256 Test 1 */
  1199. instantiate_ok ( &state, &sha256_instantiate_1 );
  1200. generate_ok ( &state, &sha256_generate_1_1 );
  1201. generate_ok ( &state, &sha256_generate_1_2 );
  1202. /* SHA-256 Test 2 */
  1203. instantiate_ok ( &state, &sha256_instantiate_2 );
  1204. generate_ok ( &state, &sha256_generate_2_1 );
  1205. generate_ok ( &state, &sha256_generate_2_2 );
  1206. /* SHA-256 Test 3 */
  1207. instantiate_ok ( &state, &sha256_instantiate_3 );
  1208. generate_ok ( &state, &sha256_generate_3_1 );
  1209. generate_ok ( &state, &sha256_generate_3_2 );
  1210. /* SHA-256 Test 4 */
  1211. instantiate_ok ( &state, &sha256_instantiate_4 );
  1212. generate_ok ( &state, &sha256_generate_4_1 );
  1213. generate_ok ( &state, &sha256_generate_4_2 );
  1214. /* SHA-256 Test 5 */
  1215. instantiate_ok ( &state, &sha256_instantiate_5 );
  1216. force_reseed_required ( &state ); /* See above comments */
  1217. generate_fail_ok ( &state, &sha256_generate_fail_5_1 );
  1218. reseed_ok ( &state, &sha256_reseed_5_2 );
  1219. generate_ok ( &state, &sha256_generate_5_3 );
  1220. force_reseed_required ( &state ); /* See above comments */
  1221. generate_fail_ok ( &state, &sha256_generate_fail_5_4 );
  1222. reseed_ok ( &state, &sha256_reseed_5_5 );
  1223. generate_ok ( &state, &sha256_generate_5_6 );
  1224. /* SHA-256 Test 6 */
  1225. instantiate_ok ( &state, &sha256_instantiate_6 );
  1226. force_reseed_required ( &state ); /* See above comments */
  1227. generate_fail_ok ( &state, &sha256_generate_fail_6_1 );
  1228. reseed_ok ( &state, &sha256_reseed_6_2 );
  1229. generate_ok ( &state, &sha256_generate_6_3 );
  1230. force_reseed_required ( &state ); /* See above comments */
  1231. generate_fail_ok ( &state, &sha256_generate_fail_6_4 );
  1232. reseed_ok ( &state, &sha256_reseed_6_5 );
  1233. generate_ok ( &state, &sha256_generate_6_6 );
  1234. /* SHA-256 Test 7 */
  1235. instantiate_ok ( &state, &sha256_instantiate_7 );
  1236. force_reseed_required ( &state ); /* See above comments */
  1237. generate_fail_ok ( &state, &sha256_generate_fail_7_1 );
  1238. reseed_ok ( &state, &sha256_reseed_7_2 );
  1239. generate_ok ( &state, &sha256_generate_7_3 );
  1240. force_reseed_required ( &state ); /* See above comments */
  1241. generate_fail_ok ( &state, &sha256_generate_fail_7_4 );
  1242. reseed_ok ( &state, &sha256_reseed_7_5 );
  1243. generate_ok ( &state, &sha256_generate_7_6 );
  1244. /* SHA-256 Test 8 */
  1245. instantiate_ok ( &state, &sha256_instantiate_8 );
  1246. force_reseed_required ( &state ); /* See above comments */
  1247. generate_fail_ok ( &state, &sha256_generate_fail_8_1 );
  1248. reseed_ok ( &state, &sha256_reseed_8_2 );
  1249. generate_ok ( &state, &sha256_generate_8_3 );
  1250. force_reseed_required ( &state ); /* See above comments */
  1251. generate_fail_ok ( &state, &sha256_generate_fail_8_4 );
  1252. reseed_ok ( &state, &sha256_reseed_8_5 );
  1253. generate_ok ( &state, &sha256_generate_8_6 );
  1254. }
  1255. /** HMAC_DRBG self-test */
  1256. struct self_test hmac_drbg_test __self_test = {
  1257. .name = "hmac_drbg",
  1258. .exec = hmac_drbg_test_exec,
  1259. };