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

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