blob: a659381b6e39b687c8eaba95a73671901f48aaa6 [file] [log] [blame]
# The|dkLen| parameter is given implicitly as the length of |DK|.
# PBKDF2 HMAC-SHA256 Test Vectors from
# https://stackoverflow.com/questions/5130513/pbkdf2-hmac-sha2-test-vectors
Hash = SHA256
P = "password"
S = "salt"
c = 1
DK = 120fb6cffcf8b32c43e7225256c4f837a86548c92ccc35480805987cb70be17b
Verify = OK
Hash = SHA256
P = "password"
S = "salt"
c = 2
DK = ae4d0c95af6b46d32d0adff928f06dd02a303f8ef3c251dfd6e2d85a95474c43
Verify = OK
Hash = SHA256
P = "password"
S = "salt"
c = 4096
DK = c5e478d59288c841aa530db6845c4c8d962893a001ce4e11a4963873aa98134a
Verify = OK
# Skipped because of the large number of iterations and the amount of time
# it would add to the test suite.
# Hash = SHA256
# P = "password"
# S = "salt"
# c = 16777216
# DK = cf81c66fe8cfc04d1f31ecb65dab4089f7f179e89b3b0bcb17ad10e3ac6eba46
# Verify = OK
Hash = SHA256
P = "passwordPASSWORDpassword"
S = "saltSALTsaltSALTsaltSALTsaltSALTsalt"
c = 4096
DK = 348c89dbcbd32b2f32d814b8116e84cf2b17347ebc1800181c4e2a1fb8dd53e1c635518c7dac47e9
Verify = OK
# P is "pass\0word" S is "sa\0lt"
Hash = SHA256
P = 7061737300776f7264
S = 7361006c74
c = 4096
DK = 89b69d0516f829893c696226650a8687
Verify = OK
# PBKDF2 HMAC-SHA512 Test Vectors from
# https://stackoverflow.com/questions/15593184/pbkdf2-hmac-sha-512-test-vectors
Hash = SHA512
P = "password"
S = "salt"
c = 1
DK = 867f70cf1ade02cff3752599a3a53dc4af34c7a669815ae5d513554e1c8cf252c02d470a285a0501bad999bfe943c08f050235d7d68b1da55e63f73b60a57fce
Verify = OK
Hash = SHA512
P = "password"
S = "salt"
c = 2
DK = e1d9c16aa681708a45f5c7c4e215ceb66e011a2e9f0040713f18aefdb866d53cf76cab2868a39b9f7840edce4fef5a82be67335c77a6068e04112754f27ccf4e
Verify = OK
Hash = SHA512
P = "password"
S = "salt"
c = 4096
DK = d197b1b33db0143e018b12f3d1d1479e6cdebdcc97c5c0f87f6902e072f457b5143f30602641b3d55cd335988cb36b84376060ecd532e039b742a239434af2d5
Verify = OK
Hash = SHA512
P = "passwordPASSWORDpassword"
S = "saltSALTsaltSALTsaltSALTsaltSALTsalt"
c = 4096
DK = 8c0511f4c6e597c6ac6315d8f0362e225f3c501495ba23b868c005174dc4ee71115b59f9e60cd9532fa33e0f75aefe30225c583a186cd82bd4daea9724a3d3b8
Verify = OK
# PBKDF2 test vectors from Ruby OpenSSL
#
# Ruby code used to generate each test vector given in comments (be sure to
# `require "openssl"`)
# Example with 1 byte output
#
# digest = OpenSSL::Digest::SHA256.new
# OpenSSL::PKCS5.pbkdf2_hmac("1byteboundarytest", "salt", 8, 1, digest).unpack("H*")
Hash = SHA256
P = "1byteboundarytest"
S = "salt"
c = 8
DK = 68
Verify = OK
# Same as the previous test case, but with a bit flipped.
Hash = SHA256
P = "1byteboundarytest"
S = "salt"
c = 8
DK = 69
Verify = Err
# Example with 31 byte output
#
# digest = OpenSSL::Digest::SHA256.new
# OpenSSL::PKCS5.pbkdf2_hmac("31byteboundarytest", "salt", 8, 31, digest).unpack("H*")
Hash = SHA256
P = "31byteboundarytest"
S = "salt"
c = 8
DK = cb84e165acfa5bfab1b5aa8c78d62e86deb608b983a102cb843c7ecad886e9
Verify = OK
# Same as the previous test case, bit with a bit flipped in the first byte.
Hash = SHA256
P = "31byteboundarytest"
S = "salt"
c = 8
DK = cc84e165acfa5bfab1b5aa8c78d62e86deb608b983a102cb843c7ecad886e9
Verify = Err
# Example with 32 byte output
#
# digest = OpenSSL::Digest::SHA256.new
# OpenSSL::PKCS5.pbkdf2_hmac("32byteboundarytest", "salt", 8, 32, digest).unpack("H*")
Hash = SHA256
P = "32byteboundarytest"
S = "salt"
c = 8
DK = 2e0a6832b70598815e6d1350a1705291bc58fc9a66e08a9fb2d89e0b2db26285
Verify = OK
# Same as the previous test case, but with a bit flipped in the middle.
Hash = SHA256
P = "32byteboundarytest"
S = "salt"
c = 8
DK = 2e0a6832b70598815e6d1350a1715291bc58fc9a66e08a9fb2d89e0b2db26285
Verify = Err
# Example with 33 byte output
#
# digest = OpenSSL::Digest::SHA256.new
# OpenSSL::PKCS5.pbkdf2_hmac("33byteboundarytest", "salt", 8, 33, digest).unpack("H*")
Hash = SHA256
P = "33byteboundarytest"
S = "salt"
c = 8
DK = b7c1a3d23a03b1d29ebcb46b3e422251bae8d649e45ab00f8815553c76efe5cdeb
Verify = OK
# Same as the previous test case, but with the first bit flipped.
Hash = SHA256
P = "33byteboundarytest"
S = "salt"
c = 8
DK = 37c1a3d23a03b1d29ebcb46b3e422251bae8d649e45ab00f8815553c76efe5cdeb
Verify = Err
# Same as previous test case, but last bit is flipped.
Hash = SHA256
P = "33byteboundarytest"
S = "salt"
c = 8
DK = b7c1a3d23a03b1d29ebcb46b3e422251bae8d649e45ab00f8815553c76efe5cdea
Verify = Err
# Example with 63 byte output
#
# digest = OpenSSL::Digest::SHA256.new
# OpenSSL::PKCS5.pbkdf2_hmac("63byteboundarytest", "salt", 8, 63, digest).unpack("H*")
Hash = SHA256
P = "63byteboundarytest"
S = "salt"
c = 8
DK = d10fa19eefabe3b543e90394934173547747a1d38e9d5d8f62bf1f49c9e5d306bc8a4e483b855fb6d7c6a2f2f2dcb5d25340ce87b82661f1185c24313723be
Verify = OK
# Example with 64 byte output
#
# digest = OpenSSL::Digest::SHA256.new
# OpenSSL::PKCS5.pbkdf2_hmac("64byteboundarytest", "salt", 8, 64, digest).unpack("H*")
Hash = SHA256
P = "64byteboundarytest"
S = "salt"
c = 8
DK = 76d44b557a1e3062fff1c9035e30e0d3352a21fa9bb0bef446e792a75a6211fe7943e156ea32b2bbba68298792e710971e754e1e9e443f167194c957cdcaa95e
Verify = OK
# Example with 65 byte output
#
# digest = OpenSSL::Digest::SHA256.new
# OpenSSL::PKCS5.pbkdf2_hmac("65byteboundarytest", "salt", 8, 65, digest).unpack("H*")
Hash = SHA256
P = "65byteboundarytest"
S = "salt"
c = 8
DK = 28f8f2177c828fb447b439548603d9b3b3a455bbd339d6186772b9e7b1dfec5be27bfb5713c51181720bed046bb2d162003edb2c4f5c54722d0f68c8d597b7fa52
Verify = OK
# Same as the previous test case, but the last bit in the middle block was
# flipped.
Hash = SHA256
P = "65byteboundarytest"
S = "salt"
c = 8
DK = 28f8f2177c828fb447b439548603d9b3b3a455bbd339d6186772b9e7b1dfec5be27bfb5713c51181720bed046bb2d162003edb2c4f5c54722d0f68c8d597b7fb52
Verify = Err
# Example with 255 SHA-256 blocks
#
# digest = OpenSSL::Digest::SHA256.new
# OpenSSL::PKCS5.pbkdf2_hmac("255blockboundarytest", "salt", 8, 32 * 255, digest).unpack("H*")
Hash = SHA256
P = "255blockboundarytest"
S = "salt"
c = 8
DK = 092c7b59d56a3ccc3d02dc145e8500648f4eb6e6ed6b5c78841fefc8f873e580e4e07ab1895f1cbef00cc2d0e52242bd02a2e35a2b243fafa988bf0d4b394c4d257c6b6dadad614d060840c57875dc553b152ff8ff66cfebb3f8d18429522dcc887e2aee80ca9cdfa8b1d775b39f46356bde051c5085d069b5a62fe334fe8c4f2a7605bc4a7e307ccf94069a874a4c0b898e381c69494b2b950fb819cbb7b1f4ea07c33e70e5e4b9d0bca28f6f45a63cedf9cf9db01e969dcdc70af0bc79e18d70f19bbc53d9590c6f5288063f165f32afa92c5548760117d9207528a2b1cd272439e36267302203d58b70c3cf292c8753c02104d2cf0074ca863dc39c5cc3822bee5b2d7dab6d3fe1bf90b43e955ccf3d7775bcbd3a40d60d474a11713ad4bb748e49b0831f13a565f3704f662187db408e7902448c3532956a7bf0c3cd7264e1f79b55cdc42e26af92de4cf2cc876c31cbff64876e7656037a3f1b783c0be71a81e71fe5a4a8da2cdcc217d36b9157effb28b52169aab6d9f0b4b6b1e8de377a66b9af5dfb17836664b09ddc3022223654f1960309953d807b50e46a12ae2179413509ae78461d0930a58ea55ed96cf4285383368d14341dc29d2507d1af2400f8f637d0118305c5faee69a0099e901dcdfe2d28ecc4511a955b073ebf9dea593d934782fa898ffe12d2973174ba78f919e059f452e97dec18e815fb66b968d0be0541cb087f3ae312941c58ecd372d8ff3dacf80dfd327e20fafaae67aae786f2d720c3c7e08d01479142fc36446b52f1ec02043497eb43389ed200b104f0488f10518ece2e041ec54f272e63fa02cd823e011611853bfd2de9e57a14a38a6172bef54c50a021b6e4a426f1d771ee9d2ab185411ade2c667e9245949f0e942abf9b21e6139e8299bfd7837aa5c9a26fd3a894faf066c6c863eca04c903ad3276c47cea80439b96e20881e9b717e9fd570aa03126e4ae0474c2a0d7c22921cd20e0c602941a2a15108f9324d782ecc3d62409653ab9c936943907645843122417cb0210e6320d66b25e64c3f3a18d7c339d6cf3591ee95e92ca4b9e409f622a12a577d905ee1ccdbc645487a67454a357a898906a9f8a55ceabeb41b09041351ff91e41e4e0863fdbdc406d8a7acacbc743691227d4d7c50b7c0e2f4d98fff1427ede0454b025fc83c8dde62cd1842b8f15002a995b16edd9ac4073e28dfb405de0d847061ce5f154ff0c19d56485a7bcc9eb84f7f04bf13f43951bae41c011c7459de18270670c7df424341ab105cfc3b1d10df9262e23425e8d00e410a5d27f6d9f82aad2881198d098a94f05fc2eb99f72d3fcaa68c5fef8e4b0e1f284a451e5a68574dc770e69255a030ec631691cc90a0ea3ff862d84b34632838e7b3c2ff5af544d476136b9dd62b58646b9f614af9fc3d48d66088a7f63c1186d033f6afa9e01f2037aad14bd2404f79c394cd51ee751014b6905600a0ce9dcf9cc2eb816d081eda3d28afc288fcb35e51bbc1832d76d6b97b6761f75b8f908570ea23823bb7bdd8a57f8c431b7fcb7b88837b26f4d3af523ef684a3875636da46e6008737ca1a85f2569b23908736613c381b555198d7a433bee146273eede269a0443157cc1d31cfe42bb58bad9e5523e9d87a2cb5eb16a82f9b84b51b8fb0540daf3f65b4799916fbf218da9fa742d92616f55fc303d339a52c87eef57fca8468118fe195cd458c2bc43cca66724acb968e88f81a679988ae7a4478674f7003a9c3f76fa9a580fb5b976ce51544ad33aa86bd5bc722d00f84fdebab3a8e19584ef6e5865afebe22207d1bf62167923c78f1e4c9fbda21fb23a3e5956b766f2ed5775482606084b1d0fdce41deb5ba0fdae5fdeee63405e47139cb10a15593cfa037595512e15360897577cc62ce634c3976b1e8f50d276736689d39b8eca4a7871b0d16200a5b191789d4dc5ca42831238dc0833457031419174697dea92e14b9c61eba542dd07038d52782e58845bd988ce14951e2e426c43d9c29ac08e893d93c074d54b500bf7b0c1e6f1f85d0aedb8f96ec07622e919dc856313a44e212597685189fb263daac6039222ab25f46d68f995c1ba74f4b9443f55f0030418cfc39b25be3c3722039364ddb451353a8fc2128969bbdbbb36c4570692143ededb9c0c5c47374deb39a1771d24e688afebd363c381d3a0842822390dd97864c92c42f67f363026cc8116ce5e556437af472eef07e58f52a557df9278e94e505c74dcbfd85611ccf40655cba234ac92f47e8d464934a8a6b1c5a6706da8c9514cc133a938798fa474f8c8cbfbfbebd8c077f22fefaae074720fb2e85ea13dda03c083a9ce202f1c7bc532a39dee3cdb6b3692a61e4bcaad58adb79c178277d17887b7de304ad190cf94dda073a19d6c398384cdebd2d46bb38ee0dd367cb0a089c876580878f52fdc49908f210ebf2ddc0ea076636126c0e84018c9522aa5a68eafd566cc247f841742c4a53665879e3c42af53fd03eb5c525695c62de2a09360729334c04a6b3aa59d3489e1423cade10413b057801caf35756e42b85464c8d24ca3876ddff1ff9ced03968f63500f567aa6023dbe90983a5f57991c61da85c7fd0629bc7f684a6174ff39225d929437c2c9a49493dce56034c975b8220d0aae11edf3dc65658d3fd3e1e6386937d97f7c6053c849e9869fe2080619dcf65fee396ad7d42f1db3a580929ed03667f7537709a85f4dc88d911d7a59b688e4a06c8b7057c1ec9cec7acf3549e8c813a8316221f6f45c9ff1b5c8201e853a295bef0fa48923672879d7a3f3417978cb6821d525e69a05620ba3a73de121ecbfe24f0a308e3c0336f5867cb299c1c39857592b59a44cbefdf49ac22f1295562dcf7fc7dad08453af0637095224a71317d07cf1a84d78601883d87845971756814a7a4b79f382c7c5eac96c0404bcd57190e097c6cdbed81ac6a7fdfb9c15f6b1f435e64cb234154e93ecd72e84bf9ec9e5463ad135914066522f8faadc41dfa20b1e0544002138f286305f7ed28c33724ab022d5f10ecc5766ef112bf4fa883e75bb919faf23200cfed0233d914659df5f93caf0a56dafb4aa98d742f52a848a49f3bc9ad36722b21dd40d0e5a03ffa7b89a73a203984c321b26515ed117a30d70d4daa99308e19f916200dd1bf4dd45333d22fe9e95a35f681ed752255a1e26d9df1b1fce3e4fbbfc95f14400c689914c91182855aefc1ca6f89e229a8764dd22af12cebdd224fe0f8cab04afd5d59d2fe858964f7dd0fa2a7bd94a81464010885a3bbb19a0fb5572b2ceb63d21a6a9804608fa18891edf7c69ad5fdd10d2b34592454eef94dd07b337e1cfdbebd9e3603e590e77165442735a6136eaa661c0e0bf451c8c2fd4caef0445d43cf970fcb9d2e181f7db522fb4555021b24af2b7dd6dee025214b4d5802d1333b228cda450633b5a2a304cb9f46d03a2e1df4ca826488b82d5ad79fecb000fe2633adc01cd03d25beb4fff5adbb3d55769d265e9f3a10f2bc21371c17d139110c8e18058c9c3baa67e483c3548baf0ac95e9740f052c3984a855725a3d49ddadee48eaadc50dc7233debe234c8efd41217998b02034efaacdef456fd5bb560fb54b11c62ce080626509e13278bacd24894373cb90f04eb44a68f9ec58d76c64483148175af6acd0eea6cb473a6eaa5b1e106641c5913d1133bb236090065eb275aed77dea90910c84afea2dc22cd79c192ad1f53e712633a5cad5c85e8e3aad0f30508c759f1c15e7c5d20b95b32c66d32e7b19c2ddebef26725fb96694e5349aa2e679bee20f6132236fe4dfbb1da95a5f7c8512f58d040d6bec97f3385fc886db5d83b989a6d31268049117f56e316ccc23395e032a0477096ca38ad60c34ae16f4e4d329da4f04a0ec002d38084c008b9c6453a5ed70aecfb10b2924b04935be21b7cb7fb05f25530d2cecb9d11cd0eaa73a622757a7fa46d19276b519414fcaa7794f71b6fd489ada9f7b4a9f9ccf8dd4db29e4bca623f48a41d0355c6c011bc30834ff882d41bd4fb6ea232b777c49157d36b0e9a1c51e943a3cf328d45a96f21abbaab1e494ba5adceb428966ffa7ede68e1f4b6e817a9502044617192a1f1079af7800acec0921ce5a123a1b12a82bbf86a2ead639a32c2740c36b1c730196e08d8661fa4679b4e056d2c390ed2b4f22a598b86124f11d046618ac36ecdbc1e7d303a3a798d068ccbc63c9432747dc0c1b8017ae98439c2e5843c4dc3ace66ca7dfa828135533db07bb1bd93a82349966968ad0321edbb5277064baff06c4c104d1c64c75b8f36e2563fa15304178354c218ca9b2fe0b3c6c688312506d4ae714ecbe14e1f6f2115e09fbc8829193eb7599e204c0dec8f032445d94741172ca458df0bf71826fa18143f3cc78a11afe2109adb40647138e2fa6c15aa13a4ba92651210003c0656d8554439124f21367ae4a58f4f970e0da60a083e09938370ee9582a944f5481b3935a0100addf3bf7ebf6b4e91be38755ca143284ffc8aa8cde6e293603a894b6379322175e960abc0bd1684d462bcd2327b477593e515df8eb4dfc8d3d700ea965cce24b7e84b2aa2cb3b7b67f45c81e730c02fe2c151e9bd7564c58a740a15e54ab1c3e333a71aa8fb481f304db1d26e874a84314026a654ab1998671525f22fc2cef3bdc8b0a59f2c1a807e10d062993eec589d61a587911a8f66851774949a333ae8e5e98dae248f0225d4008df783cbc608e2f71fc5af609e058fd22e284e3b8e4b3bce312eac704510e8aa70d73729163b1a544f32cac58534a041c46eb41438e09d03e0dc76677fd62d49d87a0757b6d6f4bcc6f9b551be66196acb58dce7e5360baedfe53861f83c2f05240d28dd4de1882f535e1e9d6410f3eeb320bb3e55c53d5d35b6012cb20c110719aed2a53a8e8779abc6b503711657fb4a4e10c1c6ee1f4e2f13728bc2d10ef28788ac50e61e37ac628679141a56d5a7ea9b21aca604abcbb8992cb9532c87119778dbeeeeb95c812d9fc791e13272cfad80db27b20584add19243a5a26606163c047677aee6f65a83ea1f93fd6c82fb5eee717f7b6257f11e5bc441b9178c5671f59d9511b2af6974d76d85994293483cd3869ab7ea6910b12a5431a81d5dd440ba33bd5adfb29404253243916910d9ece9ff93cbdc95d4f64aad2b0f6e2addfc4dfc0639233dd969a4e25606545533c1d1ecd3ce9542d6cc8a0e77733f8f1bf1aefab3ba697c79f5f5c9e182802e83132fbe8919ebc2f93719389aafc80f750151e06b126d35ac1987c061e4d7b652fe2660c57f9912b681ac7338204cde7e6372e509c29187863a762f504923ecd073ff2ad065fe92d5a324a709e97343e18dd3aa5a9e9f2a5511628af65ba38794dbebb7a5568f71515721dd26e5a59b98ad5d725fd20043d2b856ffc21bed8406bb1a5e2cca14a35306beeb68cbabe31dad783377b00f316062bc5b26492e5f226beace8d0c1017318df728ab4b9aacb84b870fff642cc7d3502604515e1658b1df5ac93d655a6fda063529dd58cd28ea5adb91b07657470d2dee39381ad31e21e6bdaea76a95f33d8e51991a803abcf881b7a5940395bdfd4327da5a5e8ee65af23cd19ef7a3a01b8c09a1ef78d5d7194b174c44bc7ce1e5a2cbe9637b47704dcc6b1ed4cbfe9d48072bf175a2fccba68fce6e10b6190b1721382e65e6ecfb34adca72064b44badec5179bf1bca616beb43cb5d644162ffd00857f1b86c9e59a149577b0dd8abad46aabf58f0a6ec0460dbc6386467c47d29fa15caa707f333ed84e603d77429dd92f4dcdaaf4639dbc8c236dfbb6a77d275e2dd0b6f196346f014d31532716e4f304ec494bc5621c46fcc82b0616f6b305037281ad46cdf8c8d97caaf73189bfb103b753e0fb5a78f886a58f509f09d89b9d1cd407dadb9a979715ff32d21efd8fef8b72bbc3ab26d3da1db2c7069b85967a68ebc1ac534721a8b7530fdf50bb0d00a9e0682f95e0e3134bdfb64f0722dfcbaa75ced56560c15090e3960592d4d4da939fc930b91c75abef23120550e6a74442740fdf631774bec0ad3164b6d3218c998e25ae1d807a96772f9c5cd8e5de469602f4287477660b7403661b560e80a790d57eb2a03f878cf757563d9776daa2747218bfb5c988fc1af5ba000404b76540610b197334ca0edc2cb1eb5957c4eab038d2a72012d9371545e2e6d3e3a9c9edfb350c6d03768c6751a97dc7c63320853df87fb6c0996881ef897a07bfd26d43c854318e54cd83e25af3c3fd85ff5c56fab53383bbf874bfb0a90266a167168a3b8fbb96a3a044b99f17c49e99b305afb7ea4a82329d5d57569c2b062f76b056cfc3afbada04332500cd0b671dd7ef8f7a328e77ac42d174fd310bfb90c5c7ea26740d13bae76a365c1004dd7e91f5e60872ba6d2134046dab707d3d9469c5921d0ddd1104555381bf03da83cc3fea32e6badfa9d51800ca551f3a65a70c402462866eebc02f70a4896a98049329498e270da1b961c4c16ce6121449c58bb059abb018391086374ca2ef1f99d3f0f4f6d5d07eec07db704bea365be1b3a1643b17492be541217e7e53aa1473c32af939a26ba6c4720ec845fe97dc2f7401eca818227ecb87fdeac6837b3eb85222ba6b7a20453a680a7796068195f5f901333ff173da8a9b9c59ff2dd2441b0fc39bc02a3b8b09aa50f76fd1e16bf51700683cd485fc1dbefc272ab4f9a26eb124c3ef804a7cb5e5a1b412a0ff2a55aa4cb48a7edc04fde968542ca685576d0cf49eef082d5773f9c21ff5cb41e889a12e36ddb0fc648951e71aa1a7b8424e733c380eeb2419d6a441088850583029506092d8e7e0851fe79ece3562a6c3842ca326a1b8be5f60235362f2250407f526a65245f964e6f3eef0b4b11d678995a49d1119eb6222a46c8a175fd6d3566dda57df56a28dd6309302cb33b47823edf2cb48483752bec788d4185b54e803c7ed4bb23f70d3b261bd8c9e9523bdf13fd2cf3dae992ec2666bd0a53f9971db67627fc22e4057916014625c35b8016133c3ef25d17d6ad11892b0f619caff8da058ee3718afa66affa6fa0d90e8ff855ddd4b15595798e5a09d4f08e4058f397b4b7323738afbf9f171cf058e06919b298fbc8814ada64ff426cd44ca6d6fafd358ff1f38bc340e1206449da3609a39c90dab6b7f4eab8c4b979e0cb85e13f916d80eb97b5097e46bfd2ae10c872e7e70f5f09f83eea91d30a4b3ceda239e05241a1844eea6532cd3e3168ea3507ef9fc4686aa37f1e9c1362d00c6b9e89ba564dd9cae9a38e9323023e5ba07436911fd3e2d3b1d6259d433a4a1bae7d2ab716e3847162d23525355bc826c5ec7cb117d197d83d1aadf934e5dd36b3c8c52dd10514e31e8d2b2e4565e11d052a2976954915fd4bd38f729eba48ff0a57bd302e506e8e450cbef9a8ee8ca4ae53ea56320bd9ae45ec3e2fe11d2f837106c80744c3e7d523ce2eef4714e8392a412cfc1959566f515944981dea89c80a6fd3fc91b79055bb06befb2b33ac4dbb1d0a213fdecf7afbd208459ddd878bc5e5db380c1ecfec6f53d394304355f8a8f0968037f7a4d4740e12ae5c39575a9c4cad4e5f3a59413b97d83b8f32de8413cacde2895f6e5355f9dc8cbdafeaeff32c84074df35d46570adb6fcec8ce556db0393cbc770191553e240c9cc3b164e954b0db7e255b03f8bb6a35b15b7c95a3f658a6c6ac112601a06a108956d3e7a0303befeb66f637fa63c8446069cd2052947e284097e9aeab292bb806efd4c0ffad56c6c67fdb66169b5fc2b8a191089aa34d7b10ada97d7ce3138560f439330e4ed6037d8acdf22fdc3ebda14a1e97c01e7e60f26e9ae2ffbd5ba592f68ce4d9358d598c4760f40c5aa3b7340fc981e6d45802868444ef54d3803266bc865ef7b5a3e8e607a5514c04139a396b358788ac4c8b38c5e3efe759e3d7cbc43cb42c0e18857c0cd1f5f8eb07ce2ceeb9abf5030184550c309226bb4c711f4a9c1bf4ba1d12620066f3180fa3729df635ed51772829f5bb2c5b530a88917e518058877dbeceba5a26f1e1b7ec75fb863c97f5a81f0dbf41043fb9be593e1cb3036abce075236c4d72273d1c04e58cf815e42a79e9f64804a6704396182444e13bf3fed17e81c79e3623cf75fbc5d5bb394027fe45050a1dc4e034e812b5c6074b3d15c6c0504c0876464fc2d15813f0eee0f6c4a7fb7890f4737bd3da478ab329a0b3580f2121c07ae0a293535526709d16bcaf7def4294147a0062181bdfa2ea32d052bf18daa6e1a1b8207db9b78411884f09c36f0d8f6e6e91a0e5290a4b45e9163ea6f18bb84eb304c9f0cc563af46a10d714c32c096943a29da69f634b9e98ecb302f886240e3ec99cb6b47acf5e084d57da0eec5ee31daf8e9e4337d337d676769910b779f730fe5fbfd7f0bb1e7090e0f1c8592d845eb63a42ef4e69899dadbafc6213605a6d22558ab59490d94667281251ee7621662a1a45ee312d1b7ea9b3a0d4bf25bba61c510de32405a3315aaf3f2ed7e02270e90cb91e323e85dac0316c6fa259e97a1e4710b235db509c3384f89ec00247182e5d5288e4895d9e33dcf56bfd0511debb3f923a2940d1116b852fca180a0a9f6e48fa1a3f795ff88e98f18c1fe4f669a0f60daa9637817de6aa3b8d00df9901fdb9cc259cf3d2449d113aecd8e93afeb1a9af4e8b373836e5a9c9664e9245cc9ee6d00bbc78e191872b2fb112164d2e9fb852e65ada5cae0fd4ba9c177af161760337c99f4f05c58e418de35d824ad300d6409b82476aa22e8039dceda726dbd4a9a9d1fc03d009bace1c9a4769a8c5bd54a6dbf409234a3eca478f3ababc4c972c1d3604ee4635e3d41a5c92e52af2ddf7419f7bc9b10b83742c52c924f3d029238ef636dd68060a9933024dbae1a2b178d749fd139c81ca4cf6025a95d4f6a2c9f09493c68f45592f5b6d3dd741a2d2e88f860f349c4fcd7fc024ec57ca60b23f024625b12a747c432e9f583e192784fb1091fbd5e307d5586ac053d4be4c76632895bbf41e540c29fce4b6abdf337f5e1a960b386958dad96318504de3a0451f9ccd110d8f2337b33f523f2fa8d931df8502b0f0034d8daa17495b9820d3591860698d8bcc1944ca002a139e8df1cc2655e547f8e3444650b62a83bc3746cc55ca7093f3152978e64de46e2ae3b59af83c9dc91da3cc4fb805be717064297264936fca83b53ba4df14f346fb17d5c9273722ca742b7505d100c55210060156ed52eaac24cb2bc97777b9b81bf59941127e60eaca89d0ee02b8c629024dffd738f86f51375a20faf0881a9c0599cfc693f9de5a027c2192ffab49b252a21b5fe0564a71cad0d57b287463a7bcb371f4e317645468a25e168219ea6b2579a82751c18e1922d7f5c30173ed1864ca77403ee9466502889d77d7bb7956e659d7be7fc36ae59b59dedcfc7d3ed6d793655d04c33b1eb6f215f44f23e57a8266fb6d234a8beae54381e64dfdae47b070f905ace092f5c213d1d8cb2fdb2914a6071d6663bc68139bc2a1d6dbd58fd84d5568d811a146f6ed2372afaf4aca312a66bb711d69d0b771796bc4fd9e5e4765c75cd0c863e6a6f0aa2244618ed807ae53410c60fd2a663fb2534f1bc550ae0b659435aa142c5a24c448ea8d771fa0e671f446775d1d21c927b0f61ab570ac60f060c4035548819b821c592846ab8d474649adc3972b0cdcb1bee96f16943d736cd7cbde238208eb7b8a48ebd17608d1e3a75129c6d6e8be35e008305d69525dfd8b0db442f1b405c717b7d949981f8a12f358032525ef084a1c998ff9448ffded7285f6d2523aa155a72bd8eb1bde486a8e4590c0bb7c3ab3684c3c53f9a245713e6064112aa98bc6403292a2e6fbd2bf30c132e42fb1ea79593ee9ba65afbe06d2f8c81a00a6bcaaa22cfc0b7a330687b492580aa64d8c4fa7977aa11800fd1510c5c0a17e48830116a5e35e67a013d59841df849d04d86810399a50224e7f8fc2207cf30775a5fd042c62edf2ff3a3698a305d279f0c9c8b577683637b1040715a2aa3c8089e49caea999ef6ab13b562dbef326e96d710d12387661ff198802177770c7b3adca1b9264582b8ca6bb78ae496e7fa4fa6182260eb44980b3cbfa9ac1bcec8cd2a70bee4fcf7f98be0d93dfd4f0fdae41e6334b1afd8766f3bb9296c01f0d17d60c5c1efd7a926476535e856c36eb24879025cf5a3f1ccb7f8277c5c94aa30d30435d60583d00f2b8efdb1b37a3dd47c83ba2bbf9bcd755b1467825a33c75cbb7c1d52c9832b307cf6f35a9b2ff996573b6ae5bb0e52199ea9249dc4938d8b9d033952fa9eb752e2af5afc693647a1fa28d961ae2888741c6c2c36bfdf7153705464105957ca29a04287fcd28af6d41fd61f3d6b1e7b07af41fe37a066c731361b24104fd7de79b11dc848d6fddce156830e0e2d7b4a6da22f5af689bfa442870ec37e8bb6611f68ecc3453fae14eee94d9b904a6b8fad2564f2d31e88a64226f6099781a4167989d87f9bf704f1108279a0011ace8baab9518365a6de0a69675f218e428c10510187412bfd1c4aab5799eb570b140c5e417627a136358a1438e31f052e80f6da4ee5aed1ea95f2654ad87c5ca8d3550d9d4a64fc013bc1bea7c03b432b4d1976685769d0dc0c53984a0f79bc43af48cd45bc8b3ab3491a4c2c69ce81c6a276a75fc6c5925914724eac1553d684ea3ec7232fee6334ab93bcc2083bea5d136d9795b5872d00761b73bea63bac5560df5341cd825641dda95d8c04a4fd24155008e1caf7ec374e9c6a66c87e93e525f9221e9516018dc872cbe1c71725ce15f603f12a0ddf5813fd57a53a16f5d56dac91ee8fa12c5d8313bbe47d3fdfada6a9d5892744b7d9af7a70c958159f36365d11e3603195f5e3561014642c5bf035d610dc2ed8f8765585a844f82b15a509b40f97fb5d1568367bfea81b759314dd3b9751a6177a49e2bb6dc1dfc9d320ef02504fee836aa66b772d100e4b900002428c021223a6a610ac2b96cf42f1099059026ee5719b9d8cf8ee00bc836ac5e4e0e4544c61e38abf3e0b70151a82baae287c468c400124729bb9435685ef90877a803e97db88227f8fc038cb31791203f8d9392c5a26121b22bfabfb82d3ca7ade3ab3e021ad46eb3e9db01116e02c2306f573e1f02571f6c5d4003d67ae971034030ed38cc64dd8beae01bfc114c9a709667680d992b130f1b0b5843dbf72dc4916b18c0f3dc1ed2e86da6b1bb100f85737a59ed70ceeda3fb9645255566f85bc0d8eab38562d2e6765faf5cc45f8a246da218f6f0d2b966556433ff22b348695bb7e6df8ef81e2de8fbe89a0ab500accb4caea339d06b80d515604416f87906606429a162928b6433eb45a37591ce84e31fb781627c625fe0f4a042de6e1638c6b402e9a5541bdaec1954a09e518a665e4843af96b135398301890f07fa43707575d96b3f49d5f36d1de80a4e670b881b5f6000c590143d7901a45
Verify = OK
# Example with 256 SHA-256 blocks
#
# digest = OpenSSL::Digest::SHA256.new
# OpenSSL::PKCS5.pbkdf2_hmac("256blockboundarytest", "salt", 8, 32 * 256, digest).unpack("H*")
Hash = SHA256
P = "256blockboundarytest"
S = "salt"
c = 8
DK = eb64bac8e24ae1b54266d757f0fabbc72a57f5dc5d03b8c39e65f2062939bc594d82acdd144120b322ca12fba07e113ea83b1ed2c1b33603d72c67c6ef31ddcf6a9547b5fab0655bf5a7c220a307a21491932dbbffb54f99ac997ec6bf898ff9005a88c72c7ee49126397f368f704e779dc25687af9b419b6ba8cc4e177f805f55242b627e980c0898a1ea46ba633e6c0db0a14f7fb323d26bed1a524387041f8c5f6e9edd0a4ea51e0fbae1b04b009d41049eeccbfa45702716fb57b9f4167082368a36f55e7aac656b3677595868415e9e57e7a5cafdf60eb7a8d66098f0be8f012caf9a78cf2f5c0b4d153f9fd067d781f39b9acd730b6fdc9d27f93946c0e0b184d86f7eaced5a8b734f5beab2b930789c18934296c6c86e28845607e9f6d1035c30a7ef5003b19336a56aea507e3c58360f091e70ff59c5869a9e0bd14d2dca4d0a144bcb607bdf583ef4230edaad75e4db16a8275eb74c4a4cf6163e6aa293ebd6ea10b5be8179693687c2cf9ff038ded9a5a32917bbd2c4a703b0500ee0a0373bb324b409358bbc30bedbb405875eb281e9a7dd58b89ca12a9dc8505c524a2d10cfe120250bd22b9b340a29256b58548dee0da72a16084a130fe6d734bb70811e855d20b85d85f662c9574be68238a88165c22194e4942cab792184050abb3a7e22fec3f58537af84ebfa8d858dc879115b2e71c34aad0f6591c64e11e2ff8218c6841ec9b81dd9affc3ea70cdeb09423e712251f4022fbc4d54e0c5d174e198ddd9c6c8587d0c8f3bdbec79b10d46fda6e354c0a8b3b59ba82dfa164369f3075d1ad93c69a716ba8a377c626b9f44e9591c530e72a65abddb15e3766ecd068fcfe046efb86bbc00bfc24fa50fa6ffdf1f84e6e0c0d335c00637f14414a7369f5d2288bc04f284c0730766b3f9fe8464559b61c2f3f4d6e08b1cbf578f186605601533860d5f69aad06dc993d4f0ad7142249f68e1531c60fb3791ede647dc499a6b9bdfc1efd7bc0b40b95c3caeeba615d0a9c2564151598db35a7752953a7b2a40162359b69a4cf9a591d05f38dce8968dd6b6f16f57609fde9a8af9f16ec3b8a40311aec06a5bbae97e77edf32d22772b72fd61c4bf9cf34049830270653be365cd24b46fb7894150fd9e84ae211493b4ce4a95e7d0aa1f12709ba65f7bd7d8c904a9f967ced8e30789616242f7f9054e596f610d7bed0e55c3c91546b8283d965cbc2a79d5ddc4224e1db662d97bbf35847ecca83ee9e4c23d5b30ac8e2608186930e621e8cfa316dcd02b9dc17d59bcbe7fbdfcb6ecf882ce0c122ac82dd305ee7fc08b18fd2d7f1fab397038b84f9bed0d6aff490d720764aaa32a6f5b73ec6ba2083a5fb0a9e1d97bca1038f235d7b13f1baafea051ae898a3b92dc15bc3f7fd87db77a00dbefb9601157ae806e23386f64683992de57bfa37c8e4bc72ca7894ddeb16b833619f430e7da701859608f609d93044283841154da70b62f9267e15c741d5dd0e86ef58bc3cdc4f64c8fc63b9f466cd5415dd8650f7f400cd5c53544bdfbb6fe68c239e4d8d2c07f6affd864802c495b6b4fd0f1fb968c90934f93ba25d21cd7249dc4e3ef1301746d37e67ba34a861bbfd5ae7ea9ed8d7e853855f0f7bd0314b04697980191f448d71d7aed082781b04e3c01c46cce86ee1b8807bd8cf64988370925305f59814bbcecf0e9d39a8c0daa85625ddea187d19f7e3d970b0739a56f3b5c8de17c946c5692dd0503f8b20a3fc401d6fc6990c2a42e81daa46df79727e6a5f03d5c5a616e33b077f68939df7f9ae8a09599cc3a0e0e36b23ff5df4eca1ea1c8b5223a0cf2abb96808adcdeaf68a49e767ac5f934f499b82d775e995a69cee0822d13492a3038bf78faf01d9f4d87ba1f3311c002b4e603671a2cf007352fca16c30ad307c030d70e5f9c091b2035e164dfd6b9014c9bb365a694f5198566a9d58eed322f6d71b6148c1191f9f8ed4c58c03c403fcc5a1de5ace76fa1c1a42aab81e3be73d312513f278d5de7d67e24c961d709a3bc252e11eb067ea98583543675119f21fbf264024f4d33b2f6f17e98aa06dfb409f16a8692d9c7bf0fa340b13c4826cff8b07efa5ba69defb90870b43f27b632c1b76ea7129865e18d7fc597007530852d307708b51287a85d1d6395b489156f18fcde58157f5100c7c8d595ffe37fb8c1077fa204e97a721d45be4dce7b473a5d02cc31b4346f534d52a7ae7461d12fe12fb80dd7124d95e7683d3ee6b521094c1181a4c84e0272d2e0359bf6615121838c0e7da6b344b479efe17e86b52999fc7de81852bb89e335ee54123c408d9cbca031a5b4d01cb736108f9aa1dae4775d1e970ce179c565bbde3bab82f8bd883afb25a66db21fec824db6f4a140c5008acb4cc3e518b6ca77e446cdc82b4d4d6792a9e1c8fe151e84d531d8e2d1c751967f9b3ea7a2387fe53711fc48ee7524f487a3c1af2590be648f6965869a97b88729ccc6578c3aeab055f16998c1750ee8c9358875ef48c37400d4adca39ed81a0bec5e43f4a5819dca470dc86bcbcd932c8bb4017880b3934844bb76c04e4a65285fda9fc0e4e4622b3b13f1ffbad3754fdff8a3705ad370ad089e590cc8b57c2e5618041042e808dfa003bb19d229cd60a849f345f9bf85f53496b1498caada27565312b909afef165d40d82bbe3405a404ded080ece28834129c2b199a4301d6c4ee6f0502afe3dbb3d7be80da9e6b5cb2188fbb73605b31ed4e6846e75d875ab586d995cb6e20b41765e86ece82db4ce6fc1c3e63fa9bb2d2a273e217a0235e97c7750c5a543757de8759009e243d847f79a1aaba097d540573c2fe0d9fe611fe1d30484b5ae60834206b9fb7ed8fe86813f661eeb01bb608965fd6f91501210cbd17ebe1c1f5965bde456c74b96faa771bcf293a544f862689f2972444b7ae83f536c86ff21b8d8abfe8f3274fcd5d86b3f189546f927cc92196722d2e3cf4a1cd54352ecaa4466b801217200b8b981398e08209f3d597dd4726eb8f3360e757613bfded0b02853cee281b45791d3ae996bbefca334cc35f3d0dfc6f53a3defffbbc4f620e65e916171c0511678ecc512f48a230548aa88dc3886ee91a9d6d6df6d3912fd64dfc80ecc5fa1ebd9a715ad846e0bbe41b09bd33f50fcacb1984ed5610ff1c898d9cb9e948929f3f9d26b8d48ce0014a5f7840d7e85a0f61ed764587e382cb9bb23e5476dd7904e062c66fdc62f26212f66b1f8f9fcf061a2de063a6e510680d7689c05740cb62ac66b97f4060a491aeca2f485d1c1575d85f495bec1619acd001547b05d2e55c661019f67fe2525730e535a235b4e5d1126a66f27c4a9ed3bdba43b94b4bca662731613629dfa088f615cfd4eac538cbe8f137653a9e47a0a6f4c86937f0bcc4a287319f5bd81bb3e187ec84b248005383a955540216385a8efcaa6ea1ad487a01405a636b76c09bd76157a4358fe5326735e0d68c53792d37b26d894e5149d9afd4fe8a18aff58c94d37659cfd1fda6af60cf8dca192bab99336638a4e82ee2e1559571b22bcceb3b2c83e105c526f36abe6deb90d0aa1e8828778e98da0b3e1b24a2ab43851edc6ac887ed3878b764a5da26aafb6269ed3dce51595823ee6d7a4242498159d50417a26a2915492e265a14e9bd3a339f9aaf064da98d8888cd13cd7d13dc18a1431d3ff973c46ef0d487ab619d3cbe5d4acdc658aaea89c02a8255bbc1a824e0df48f2775355be55419edac6c9edce3eed5c2025b8734d0602583b14a573b7236f21dd8dbafa6104b2c49bd2c7179e9e934bd2ecb52b55df6e54aff822b594c8f73dfadcce73727ffc68a4512a3be2f4e28557a6e8262192dc4f83971d4a366c4476d4415b33c6448d6261e69f7563eb1e0d30490f1ef6ae44321fbb291ab2eb8a120094231ef14a4c9caf84cceda7b8f8d3488010e566b8a526fd5ddad414e9f2f14c94a4fb48e4abbf4ea866a48054ab49440fb4d83ca1312f9a3eb82580c1842e8b497e9303bd4b0bce65c63977f3d8dca4b6d55c3b7d67cb4e28f37b469523d3fc1640dead462618806062a703127fdad1fde5e5f5d364c12ada00e306e9592b7f54f9c0e69a32985403f2ee4d33cc37c8709ae05e02f36bcf8d2b92c89a5b29c70fabec2c840dbd5f5adb63434a059c847b163bd79827d1f9af7b47f89f845f31a5d5a6a2f8eca15fb9874d5b6e14d91832d4004cdd59a26c75767d482f565126fb710347930360df8febc3e3566aff94c795d8e7d22e99eb0f8b9696d88ad95b53b74df9b181c5d35103dde3de068141c7d0fa89da6d92cb90012ab815efd7c8481be262987c4dc8db2bb851813988f1ad197f8e5e2c4222c1f0ba0220c5ca2b9abb21ecc4dd0dc21341870f3bcc5597dd6ecb7a7a003434d5cb8f97ebf2c026176e5b3fd14b4eee95c036062a92d19220a341fe0dd73facee271e474d2e43354a03a97ee2096da987e52023f573a703bfef64935e2f5ee5cb692cba060436fe703e0af1abfb19cd85ed8571b051696ff9698368fbcc7695407a479e859b8857520a17f702b45e88440d385ff7dbebfae69e2223e068c87c584041fa7896e864d4c793f3aa3097b3be2c267f73d15c8a37b19fcd658640aed95d1682abdb4933d38c4fd8f057b28a3d31a1c4efab41378cbcf0a08762e27d82979d6b9e6ba717f8e67f6c7e9924a021feea2023b0e8c77a782634d441d8def322151b8415ecda2fb3be81619dabca2e12404d309436b9820cd6a8c186669c678ecfb9591b5fa7651f21fe4efbf4953a5b718618896677fab8762c630a4ef7d37859c89a1395fb926af55bd58b561283e69fcddcb57d3d757005750cfa0aca71f08b44be90725f3670b845298ed96b8584e5615cfc79e6ca295abc9641fca7039253bd4b1b677e230251bf4e6a23465ff595ca740801962f124d6cb658aadbc4e4bd3323f251ac4347f5a71300e2a814cfeb0d52e26f5de00fa5e20cb88490273ade48623afefdd0d8311cc254cb76bff3ce1f6464bff0c610bbe76d96ca96b72d1046b3982fc81f8a0335a448ff423c3932cac3b6b52e3eca4779cdda85838b9f5737eb1ac0ea7e8d788882b18c2fa2753bab41046a5719d14fad1b892258f6a680779546797c7e93d00d3cbafbf8360888233686ab3e60bb556479c9022279435602ce0454c9db189a835eba32b7ec9a722fcb83120f7614939a211d6c7f43c25c5a61abb55ee37999a382139f0e373e6aaa4ee45f095f50de6f636b100452d20be72362fd52bb62bae54c9c4d333efae647e85f21057706a862d6e6a3215181fb42168d4db56fd4d55da007798099e7a5229bb0a50e2f0a6a91f9182d86afaa1317ba0e17b4446f3a64cd44e7904e70dde3faced7a78baadb1d410a63faac63f107b6ca692a6b568bb5bf49b7d8249466c338f1004f0029280ae1d20fc31f0baf884ac6faf8806934391be9fc7f2ea67bf1a69cefd92d2571b7ecba0e8629ffa5eb39a7f3b896a5f201ed6e87112fe710d9a82983f899fd7222e737c8ac2831c002800321cae79702b5e010c4a2e117bc316da9056474d587919cf8c1e1e64731b649968810858dd108ca918e9439945e7ca73497776e1fa8428c92ca4766a9d91660e3b88f890460bfff3086cfe4bb9de117790080299f6f88c0ab0fe080626f1765906c150a1758b14ee5ad28d630f7167d5f14a0ed1c7014b6faf32c482c0c44463712b8dcbdadd5e1e14102faf80c4a5580172249956419cab486a37db73bbb0e5ae322ced6c1f1d5b44ccec14387a1f4e7becf5680ed63e1355c2c895f9eef74c9f8dc6de7051f2e06b555edc92764246390080dc084383d9f52afb23191dd1aa1ce5787dcdd3619c06e00a1506e41a0ddcdd98572dc830797d0ab691c96da19fa7cb5eb415f86fd560b3ea8afb19ec30ad89deb484ef8917b7b36652aefdd18629147bd654be1d444b61a1ef78f833b6beb5169237da428fe1a3322e815e5429e15dd79a09475bd852ed75f4d686ca6fd9ae9b8c9bb592f89382c490d4eb9e29be291e733d85b0dc8a3c7b33f8bb141a3072d8f76b81bdb93fd04a901978f2378512e2b56bef1faae0645cc25ae33a69465161b766f7b8e6db360cfd89b0c6df0922111dc8488e1e871c91c4e660175556d9d3a373fe32677c75d8abd10abaca367c4c2bde573b26b9a667586868a4ed2c11212afc8538577bde92e0c7521f4385ae4ec910b3d46ffa91228b20188e173154c5b3302735c15539c1b1b8999547cfaa76406c18566c9fc26eea88332e8355c18c19464f2f9715640825ccf2081058229265f599b0871c18088a4c69766e65e3cdcae800466045c8eeb46baa6b254abaeb9881581ead324038ec55d341088b0cffaa3dbe62595cc5d70fdf8fda6f0dd704f91c3918ae0e55d0c9bacb00fbd25ae50bf9ae6e2c6b39a7f0eb83e7e65ff71c03fadd5cf0f019afff1d13af69ca52a135e48252997b305d471a81345673f153c25e72a0d5ef5bb432b11f5fa6d655544a6f09be377c0d9a02ed88d6b1aab40545df0392d3c184df739d86d003d0dafb816a6c1d59f54defec6481e875c33a3a620b7ca09207727e7c4458c86f4eefdf1f98b25cbc22d0b9126ac328e52695df3c053b361dad8266ee10444c53545481344fce9a3e6e7265d4f5ab0bf2931029e90741b3e06c95b2ca4b286460695b654cbd0f860fac5f9691d3e7c9440b11210733c8cd6fd1509000d9b96790c3996e4214774419ee338b6d657220aec02a92a4244520124bcf4aab91fea08a8f5a448a6b020098f3eb8be280765159d492607061d1507e7ca1d086406d363deffa149784db21eeae341cef225b79ac9f509f6b3234161d71443c3802f612ffb95a744d9af753714a57fe7dd6832ddfa7d817872a8b21959c1da51e0264d6ab6dfebc532445b485bc9256bb941b8ae2f68f2698804ce8b454f856bfbf68cb87cf47efe5b305bbbd05b35cfff4926e2f29cd2fc5dc79e19623745900a0f381437e5359dc728b3d5a7159abe4395282744d57cd7dba2c9c3dc92a1cc245a18ccc6aee7371c99bde2777619030918875759fa9e3e9d39695544ab43bcdd407d00e818d53c7d6476c4fde7106c6568a6e098f50f27b91a0b7511beaaba617080a8cc252ad6df2dfe36bcfdd4e48dfc985df72424323e0e733b94778fe93a793e7608190d0d3ee0fd70b26adc9ce5110ee579b35a3e9dd0634d532e9131ca7b81f75d0c4f6018449f9e831dbfabe13b8b95562c3f16ff6c767c7db568782027745668bcb1f68e5b2d5f57067e62bce76aa07d7abddeeb4f3d844f0289e16a433f72d979916d44d5dd7917dfc8c79ffbedf4829e5c941d4f094433371a1661b967d62eaf34c11edafadb61cb7cad97221b1def5f757b520d232e8a87eabae2b9c98595b7710861541bc03206bd37b20eafd66a7ec9a8a1acf530de3ad02a11b5c168a06f7238a31185f04548ce2ccfba960b86106c04d441333c2f0a9b1a034fedc3d525b28971ade46af0a612faf10ee0a4ebf72f4cbc3df046f354f7289eb93fcd4a7adb84c1e3d17bdcb2a52bcde29b6056cf73e919e4b09ec0cdea6d4c2ad316d8635aab2ae27a5e6709b0397c9e4f14750ed01f01f1042b8cf5bac1a7f71b937f17bbadefb939461d3109836653e57eaa4b444f501800f399adff23a8a0c571161c9ef952337fdc6f6816125c8223eedfad059d33d6b61f3a976e7cd08abfa46b462083747e8ae250482d0a196ca2a9e3e5abf1541f14aa94faacf1a1c3cc95281774c587fc085bbeccba8565c966941841c0cf05eb2b3dac6e2e340c8f5d658d20d6d4ba6380358d52491609a035774cd5a60c7049afa43dd797db51028b60c550d855c18e1fa80d9da21453e6e7973ff2dbd40ac828ff4e2026dcfc6d1d0b5d8c82a2aa77fccd6d29e218e0524acd9d28f0a1d3073292f4e487af8dffc6dcd1fa20a2918820324e201ac81cda06f52dbbfae9635468f587f7fc2d36dce0891986006a3da26f7db6cf29af463ebd54c05c917ac1e8dcdf5e1a05eb78a56e231b65aacd9784c10deed1668bd293d38b5916ee3f5dfdb1d20f72f138c56cd9e5fb65652b7da41e9c1370ce9abdcbc5c75f41f1a1ddf78392c3af22f29d470d3ff0a3e933ae734c6192f0a9923fc19923253b8ef43e02fc445d2968f5162e56709fd687fdfeee4be2b5362af6d780b025959763bc37dce741909a6ad557e4278ab8656661659e16379df6f6929f4bc0c439d91b320b5fd6ab32369bdb981bad524f305079196b9b9035cae7c818050c68ba6123e5e8a24978d16983753ee1066bd96368467cf26d63107769618946068689bb163e406a7aeded78afda092b3f13ed0a607c8941371579e43bc6913fdb8ff5ef4041778cc52990da86b38fcc99a1e7c2a04cd243f2ecbb8fe2874916741ccd6af8de7aef7aaa8f57a851fc3fca5c6132e3f980417f15c55bb80a429746028f028e1c09057ac370964aedfd0784f8caf4f378c2d7a8adb4124540535dd823968ab6707aa4ae062fff41361cb1b8f23805c262a25c81f4649a8dde4295e8f6649640d6a033da3a5814e47933f56052a19c27add21b009bf4d371972c72138f13511cc3ce647ab9736fe8542557c159b9f8c67db4a99aa9b3de34460ae922cb4e9ca58252dd945f82c5ff382e1c708883793a123d018039b144f7d7da1a86f7af1bfc6eb4bc8c889c2f87dd0bc17b276e1f6d32dd06b87b348c78bcea20e866c42c6984454101d93f1d41378a1664b3f48fc124a385641118e8fad1d5dcbf182b92e4ec0d37fd16cf6f6d77f288be41e90a18c1f284c5fff61cd315097628c894b14284ee5953cb205909648fcf9665cd406cfbae9976f010bc1eaeb6fe62b9eeb3df7522ce31753eac60ea0bd533477fe54052f2af96798cdfa24c801cf2bff25715f52da9e467b59309701ba129b7454c592cbb931b6944d423dac07b41341047e3d7614592945ddf48bf5207deb2bfc59e41514d775e974d86704cfe61c9ba73d279f18f4107c662d49c602f1c041e1d32de6b742bdcb4250273f41a9b304e6bdef2cbcc271d32071c4ab3281ee7e8abf94d128059381bcfd3b113f6dfc59a848f6f47b9a33695ce46e5956ee8d15849acd17720f28d34b7faad46d5d8d8027e76c69c425175eb564d28e748c71dfacec3baa4e8d8bc34b89b64c51ae04e5f44008bdb86149213fe4521587a8a396433f7f09ffaaa603e178131fb628e0122f5f829ce517521c8dd783d0c170f2d945ea8b7721c790b8d8320610e64fbb4ccd6a099566342b7a355ac4bfae8603f005f3ce923a7d54b99b2a4b44aa9f7db887d7bcc655dc1b23bbfec3739bd14947181577ed2561495c9f14229141e3df79ea968e05ffa191ee2d89662a792e479a5d5a7b3cc23f9fa991243caa9b5860f8913739913151ddb1242b7c61a658cfc0e28bd2a058715175046e6a341873f386d97e52f43060c13e961eb577196b4a226a1b57e90a2e6448b319726c28424c232181a1411ac1fbcf241082774e854b6ac0511658bdd679e43feedea2b7f9d609bf7020a6136d766008c8fab7608bf259c2da25069e1e5fcbdbc1b52e0095b3ce136d7f8e844681f5f8aeb3a2b979cdc64b704a9cc0ec68bb09fa9ea22ae4ad9070152da2f305ee6dce978e638c2781db8f4ff20bf56130e8037b92f164c55eaa971c1a58966dffd66e3971afd1212bbe597f36d3be08a7045e5dfabcadd7b830cb2f55d10b83d0ffbc5492cf05d33b1046cfb92a4dfa8ab719548bdd98243ca15ca2e3d5cd956bee98bc0608250c583488f7c1d4ac7abae43b1c49452c352d168ec94b570ca465a358d7c145a6f9d03a2cbb1d4be9c506abced9493cdb4a087de79616bc7ffa74f5a6699bfa83500ccebdb2619a0b485c6ca8a77d0dba45a20d92d44f5f3c0638f6acb457238e0860aa33db923237fcbc91551a44ee71197ed3427faaa51e4ca48a8bf2144e81b5bd97cbfef5093ef204c5945067b7223fcaabf51ee170cdf7c9f2d2f3988341054856703e0f78cc0d3cb264d47d507e1b7c28e1674cd0099a40b73e14c42ad3ca3683fbd13e155d446be2ac05a826cb194d4d564a49064bb1e4d11ed77598c5bcd189755384c94c2ca2002445570245ffda888c0ae1b22feb1c474f79faeb73921590ce1c82c442f11baedef2fe59e4006f6637e046cfc24475b53d0742570abdab779e60a7bade19f01b57bd3e82fd15542b051085e78c323935c6eacd9f18f3a9724ca686b525b189497d1e43df902b4040f63e18d19b8134a32b14685f4b99fef0b98df8d01965a996282a84ea5f27ffb828c899bebbba32827a41caa763beba7aa9237f7e8ccbdbd0bc6ff250c40f7e573c34dc7cf4f8caf53a2ec1c3c3fe5d7233177ba3a25df5b903151381721e7d7fb9cfadb2de316eec54854d971f0230dc2f388d6871985770c0c7b1de30c1fc69fdb88fbdd1df6d5d44278a8f9c3df86dced494dab31c71bdde66a21e6d9ef62962384969d02a578d61ff8717d1a73417a4526f4fb2c90428ace62f17dc84f8438f66f97d1cede7855f7a3d3d9d0383266a1036e1ef1cfb3ebb654f731acab25c922687a239c5759c3d09d457a0bfcb872106427fa5bbc0f1b9f031f97970f05812aafe998d30b7cb6c5704170267a8647b4a4565dc4396a9580c1035bc71cb2ba0569388b69ffa3ae11dd3722d922cbdc318b2f39676a5df27f7066497779059cd997395102c7a29b54a5d2fb2641e0ff8537259e6aabfb5a8c68e1472c2d8b9c72c23a0841f360e8590ad968ce3d0ff99902e20f28eb3c3edba19efa9ac46e630e99b7b54f29366a3cdaa6964608c6cbfb12166656488772b20b64b6ccb6e46b9083adcc850b5bc3c7935500434e75e95313ee15a24650da33e9e3ebaecf8669289c564eb424cc423e894625a11de6094fbb29a59785c9169e2f9a143002c4fb809fc5bfef8ffd9c26a2315f79f6a0b0af1f89d77f114c4c50cb5e02a77692542688dce8c4a39bfb9692623380de001e9751352e2a896d312494adbbf7c8a505145f41c49957077f6452c93b9068ac446430c527399a318995a62cad56d4e2af5cb0579f6d45fa9d56b0d9b43856aea9d394be825a6e182e71e4cfc7a537f86806f6e771cab58de282f12290807460eacc1358e67694e00afc7b93e67d7faf90cd050721302a35fa169c17e1982130c7112a5f3e024bd2ebcd4329ce54f0eb97eab59c5e1599ffb1b61c4f60903f2c8aeba51e5b09fe1c1e8e2306cc11c409fa02f65a90d33383ba70ba0256cac802303e95ba3401bd4667f5461651738d164e890d2b23972e14b675f7c209638a55eacaba3d1874eed6a0605a502a49880fe9cfcf5b0ea99bb731916071a3bed26a4a4309368c8dc9dd23e85c23de846f451b89ba1a7ab5d4e1aa8461775aa4cdddaebc31123860d402332e14fcd415fd139e8cb3be5371bdb79b3bf10f691319b320d28f189de215290ba53617acfc4b1122c8bb5f538b3a24a007b6b6a00c75ebc8aded4d2f874ab909b34ba40a662fa90219c447d85a7
Verify = OK
# Same as the previous test case, but the last bit is flipped.
Hash = SHA256
P = "256blockboundarytest"
S = "salt"
c = 8
DK = eb64bac8e24ae1b54266d757f0fabbc72a57f5dc5d03b8c39e65f2062939bc594d82acdd144120b322ca12fba07e113ea83b1ed2c1b33603d72c67c6ef31ddcf6a9547b5fab0655bf5a7c220a307a21491932dbbffb54f99ac997ec6bf898ff9005a88c72c7ee49126397f368f704e779dc25687af9b419b6ba8cc4e177f805f55242b627e980c0898a1ea46ba633e6c0db0a14f7fb323d26bed1a524387041f8c5f6e9edd0a4ea51e0fbae1b04b009d41049eeccbfa45702716fb57b9f4167082368a36f55e7aac656b3677595868415e9e57e7a5cafdf60eb7a8d66098f0be8f012caf9a78cf2f5c0b4d153f9fd067d781f39b9acd730b6fdc9d27f93946c0e0b184d86f7eaced5a8b734f5beab2b930789c18934296c6c86e28845607e9f6d1035c30a7ef5003b19336a56aea507e3c58360f091e70ff59c5869a9e0bd14d2dca4d0a144bcb607bdf583ef4230edaad75e4db16a8275eb74c4a4cf6163e6aa293ebd6ea10b5be8179693687c2cf9ff038ded9a5a32917bbd2c4a703b0500ee0a0373bb324b409358bbc30bedbb405875eb281e9a7dd58b89ca12a9dc8505c524a2d10cfe120250bd22b9b340a29256b58548dee0da72a16084a130fe6d734bb70811e855d20b85d85f662c9574be68238a88165c22194e4942cab792184050abb3a7e22fec3f58537af84ebfa8d858dc879115b2e71c34aad0f6591c64e11e2ff8218c6841ec9b81dd9affc3ea70cdeb09423e712251f4022fbc4d54e0c5d174e198ddd9c6c8587d0c8f3bdbec79b10d46fda6e354c0a8b3b59ba82dfa164369f3075d1ad93c69a716ba8a377c626b9f44e9591c530e72a65abddb15e3766ecd068fcfe046efb86bbc00bfc24fa50fa6ffdf1f84e6e0c0d335c00637f14414a7369f5d2288bc04f284c0730766b3f9fe8464559b61c2f3f4d6e08b1cbf578f186605601533860d5f69aad06dc993d4f0ad7142249f68e1531c60fb3791ede647dc499a6b9bdfc1efd7bc0b40b95c3caeeba615d0a9c2564151598db35a7752953a7b2a40162359b69a4cf9a591d05f38dce8968dd6b6f16f57609fde9a8af9f16ec3b8a40311aec06a5bbae97e77edf32d22772b72fd61c4bf9cf34049830270653be365cd24b46fb7894150fd9e84ae211493b4ce4a95e7d0aa1f12709ba65f7bd7d8c904a9f967ced8e30789616242f7f9054e596f610d7bed0e55c3c91546b8283d965cbc2a79d5ddc4224e1db662d97bbf35847ecca83ee9e4c23d5b30ac8e2608186930e621e8cfa316dcd02b9dc17d59bcbe7fbdfcb6ecf882ce0c122ac82dd305ee7fc08b18fd2d7f1fab397038b84f9bed0d6aff490d720764aaa32a6f5b73ec6ba2083a5fb0a9e1d97bca1038f235d7b13f1baafea051ae898a3b92dc15bc3f7fd87db77a00dbefb9601157ae806e23386f64683992de57bfa37c8e4bc72ca7894ddeb16b833619f430e7da701859608f609d93044283841154da70b62f9267e15c741d5dd0e86ef58bc3cdc4f64c8fc63b9f466cd5415dd8650f7f400cd5c53544bdfbb6fe68c239e4d8d2c07f6affd864802c495b6b4fd0f1fb968c90934f93ba25d21cd7249dc4e3ef1301746d37e67ba34a861bbfd5ae7ea9ed8d7e853855f0f7bd0314b04697980191f448d71d7aed082781b04e3c01c46cce86ee1b8807bd8cf64988370925305f59814bbcecf0e9d39a8c0daa85625ddea187d19f7e3d970b0739a56f3b5c8de17c946c5692dd0503f8b20a3fc401d6fc6990c2a42e81daa46df79727e6a5f03d5c5a616e33b077f68939df7f9ae8a09599cc3a0e0e36b23ff5df4eca1ea1c8b5223a0cf2abb96808adcdeaf68a49e767ac5f934f499b82d775e995a69cee0822d13492a3038bf78faf01d9f4d87ba1f3311c002b4e603671a2cf007352fca16c30ad307c030d70e5f9c091b2035e164dfd6b9014c9bb365a694f5198566a9d58eed322f6d71b6148c1191f9f8ed4c58c03c403fcc5a1de5ace76fa1c1a42aab81e3be73d312513f278d5de7d67e24c961d709a3bc252e11eb067ea98583543675119f21fbf264024f4d33b2f6f17e98aa06dfb409f16a8692d9c7bf0fa340b13c4826cff8b07efa5ba69defb90870b43f27b632c1b76ea7129865e18d7fc597007530852d307708b51287a85d1d6395b489156f18fcde58157f5100c7c8d595ffe37fb8c1077fa204e97a721d45be4dce7b473a5d02cc31b4346f534d52a7ae7461d12fe12fb80dd7124d95e7683d3ee6b521094c1181a4c84e0272d2e0359bf6615121838c0e7da6b344b479efe17e86b52999fc7de81852bb89e335ee54123c408d9cbca031a5b4d01cb736108f9aa1dae4775d1e970ce179c565bbde3bab82f8bd883afb25a66db21fec824db6f4a140c5008acb4cc3e518b6ca77e446cdc82b4d4d6792a9e1c8fe151e84d531d8e2d1c751967f9b3ea7a2387fe53711fc48ee7524f487a3c1af2590be648f6965869a97b88729ccc6578c3aeab055f16998c1750ee8c9358875ef48c37400d4adca39ed81a0bec5e43f4a5819dca470dc86bcbcd932c8bb4017880b3934844bb76c04e4a65285fda9fc0e4e4622b3b13f1ffbad3754fdff8a3705ad370ad089e590cc8b57c2e5618041042e808dfa003bb19d229cd60a849f345f9bf85f53496b1498caada27565312b909afef165d40d82bbe3405a404ded080ece28834129c2b199a4301d6c4ee6f0502afe3dbb3d7be80da9e6b5cb2188fbb73605b31ed4e6846e75d875ab586d995cb6e20b41765e86ece82db4ce6fc1c3e63fa9bb2d2a273e217a0235e97c7750c5a543757de8759009e243d847f79a1aaba097d540573c2fe0d9fe611fe1d30484b5ae60834206b9fb7ed8fe86813f661eeb01bb608965fd6f91501210cbd17ebe1c1f5965bde456c74b96faa771bcf293a544f862689f2972444b7ae83f536c86ff21b8d8abfe8f3274fcd5d86b3f189546f927cc92196722d2e3cf4a1cd54352ecaa4466b801217200b8b981398e08209f3d597dd4726eb8f3360e757613bfded0b02853cee281b45791d3ae996bbefca334cc35f3d0dfc6f53a3defffbbc4f620e65e916171c0511678ecc512f48a230548aa88dc3886ee91a9d6d6df6d3912fd64dfc80ecc5fa1ebd9a715ad846e0bbe41b09bd33f50fcacb1984ed5610ff1c898d9cb9e948929f3f9d26b8d48ce0014a5f7840d7e85a0f61ed764587e382cb9bb23e5476dd7904e062c66fdc62f26212f66b1f8f9fcf061a2de063a6e510680d7689c05740cb62ac66b97f4060a491aeca2f485d1c1575d85f495bec1619acd001547b05d2e55c661019f67fe2525730e535a235b4e5d1126a66f27c4a9ed3bdba43b94b4bca662731613629dfa088f615cfd4eac538cbe8f137653a9e47a0a6f4c86937f0bcc4a287319f5bd81bb3e187ec84b248005383a955540216385a8efcaa6ea1ad487a01405a636b76c09bd76157a4358fe5326735e0d68c53792d37b26d894e5149d9afd4fe8a18aff58c94d37659cfd1fda6af60cf8dca192bab99336638a4e82ee2e1559571b22bcceb3b2c83e105c526f36abe6deb90d0aa1e8828778e98da0b3e1b24a2ab43851edc6ac887ed3878b764a5da26aafb6269ed3dce51595823ee6d7a4242498159d50417a26a2915492e265a14e9bd3a339f9aaf064da98d8888cd13cd7d13dc18a1431d3ff973c46ef0d487ab619d3cbe5d4acdc658aaea89c02a8255bbc1a824e0df48f2775355be55419edac6c9edce3eed5c2025b8734d0602583b14a573b7236f21dd8dbafa6104b2c49bd2c7179e9e934bd2ecb52b55df6e54aff822b594c8f73dfadcce73727ffc68a4512a3be2f4e28557a6e8262192dc4f83971d4a366c4476d4415b33c6448d6261e69f7563eb1e0d30490f1ef6ae44321fbb291ab2eb8a120094231ef14a4c9caf84cceda7b8f8d3488010e566b8a526fd5ddad414e9f2f14c94a4fb48e4abbf4ea866a48054ab49440fb4d83ca1312f9a3eb82580c1842e8b497e9303bd4b0bce65c63977f3d8dca4b6d55c3b7d67cb4e28f37b469523d3fc1640dead462618806062a703127fdad1fde5e5f5d364c12ada00e306e9592b7f54f9c0e69a32985403f2ee4d33cc37c8709ae05e02f36bcf8d2b92c89a5b29c70fabec2c840dbd5f5adb63434a059c847b163bd79827d1f9af7b47f89f845f31a5d5a6a2f8eca15fb9874d5b6e14d91832d4004cdd59a26c75767d482f565126fb710347930360df8febc3e3566aff94c795d8e7d22e99eb0f8b9696d88ad95b53b74df9b181c5d35103dde3de068141c7d0fa89da6d92cb90012ab815efd7c8481be262987c4dc8db2bb851813988f1ad197f8e5e2c4222c1f0ba0220c5ca2b9abb21ecc4dd0dc21341870f3bcc5597dd6ecb7a7a003434d5cb8f97ebf2c026176e5b3fd14b4eee95c036062a92d19220a341fe0dd73facee271e474d2e43354a03a97ee2096da987e52023f573a703bfef64935e2f5ee5cb692cba060436fe703e0af1abfb19cd85ed8571b051696ff9698368fbcc7695407a479e859b8857520a17f702b45e88440d385ff7dbebfae69e2223e068c87c584041fa7896e864d4c793f3aa3097b3be2c267f73d15c8a37b19fcd658640aed95d1682abdb4933d38c4fd8f057b28a3d31a1c4efab41378cbcf0a08762e27d82979d6b9e6ba717f8e67f6c7e9924a021feea2023b0e8c77a782634d441d8def322151b8415ecda2fb3be81619dabca2e12404d309436b9820cd6a8c186669c678ecfb9591b5fa7651f21fe4efbf4953a5b718618896677fab8762c630a4ef7d37859c89a1395fb926af55bd58b561283e69fcddcb57d3d757005750cfa0aca71f08b44be90725f3670b845298ed96b8584e5615cfc79e6ca295abc9641fca7039253bd4b1b677e230251bf4e6a23465ff595ca740801962f124d6cb658aadbc4e4bd3323f251ac4347f5a71300e2a814cfeb0d52e26f5de00fa5e20cb88490273ade48623afefdd0d8311cc254cb76bff3ce1f6464bff0c610bbe76d96ca96b72d1046b3982fc81f8a0335a448ff423c3932cac3b6b52e3eca4779cdda85838b9f5737eb1ac0ea7e8d788882b18c2fa2753bab41046a5719d14fad1b892258f6a680779546797c7e93d00d3cbafbf8360888233686ab3e60bb556479c9022279435602ce0454c9db189a835eba32b7ec9a722fcb83120f7614939a211d6c7f43c25c5a61abb55ee37999a382139f0e373e6aaa4ee45f095f50de6f636b100452d20be72362fd52bb62bae54c9c4d333efae647e85f21057706a862d6e6a3215181fb42168d4db56fd4d55da007798099e7a5229bb0a50e2f0a6a91f9182d86afaa1317ba0e17b4446f3a64cd44e7904e70dde3faced7a78baadb1d410a63faac63f107b6ca692a6b568bb5bf49b7d8249466c338f1004f0029280ae1d20fc31f0baf884ac6faf8806934391be9fc7f2ea67bf1a69cefd92d2571b7ecba0e8629ffa5eb39a7f3b896a5f201ed6e87112fe710d9a82983f899fd7222e737c8ac2831c002800321cae79702b5e010c4a2e117bc316da9056474d587919cf8c1e1e64731b649968810858dd108ca918e9439945e7ca73497776e1fa8428c92ca4766a9d91660e3b88f890460bfff3086cfe4bb9de117790080299f6f88c0ab0fe080626f1765906c150a1758b14ee5ad28d630f7167d5f14a0ed1c7014b6faf32c482c0c44463712b8dcbdadd5e1e14102faf80c4a5580172249956419cab486a37db73bbb0e5ae322ced6c1f1d5b44ccec14387a1f4e7becf5680ed63e1355c2c895f9eef74c9f8dc6de7051f2e06b555edc92764246390080dc084383d9f52afb23191dd1aa1ce5787dcdd3619c06e00a1506e41a0ddcdd98572dc830797d0ab691c96da19fa7cb5eb415f86fd560b3ea8afb19ec30ad89deb484ef8917b7b36652aefdd18629147bd654be1d444b61a1ef78f833b6beb5169237da428fe1a3322e815e5429e15dd79a09475bd852ed75f4d686ca6fd9ae9b8c9bb592f89382c490d4eb9e29be291e733d85b0dc8a3c7b33f8bb141a3072d8f76b81bdb93fd04a901978f2378512e2b56bef1faae0645cc25ae33a69465161b766f7b8e6db360cfd89b0c6df0922111dc8488e1e871c91c4e660175556d9d3a373fe32677c75d8abd10abaca367c4c2bde573b26b9a667586868a4ed2c11212afc8538577bde92e0c7521f4385ae4ec910b3d46ffa91228b20188e173154c5b3302735c15539c1b1b8999547cfaa76406c18566c9fc26eea88332e8355c18c19464f2f9715640825ccf2081058229265f599b0871c18088a4c69766e65e3cdcae800466045c8eeb46baa6b254abaeb9881581ead324038ec55d341088b0cffaa3dbe62595cc5d70fdf8fda6f0dd704f91c3918ae0e55d0c9bacb00fbd25ae50bf9ae6e2c6b39a7f0eb83e7e65ff71c03fadd5cf0f019afff1d13af69ca52a135e48252997b305d471a81345673f153c25e72a0d5ef5bb432b11f5fa6d655544a6f09be377c0d9a02ed88d6b1aab40545df0392d3c184df739d86d003d0dafb816a6c1d59f54defec6481e875c33a3a620b7ca09207727e7c4458c86f4eefdf1f98b25cbc22d0b9126ac328e52695df3c053b361dad8266ee10444c53545481344fce9a3e6e7265d4f5ab0bf2931029e90741b3e06c95b2ca4b286460695b654cbd0f860fac5f9691d3e7c9440b11210733c8cd6fd1509000d9b96790c3996e4214774419ee338b6d657220aec02a92a4244520124bcf4aab91fea08a8f5a448a6b020098f3eb8be280765159d492607061d1507e7ca1d086406d363deffa149784db21eeae341cef225b79ac9f509f6b3234161d71443c3802f612ffb95a744d9af753714a57fe7dd6832ddfa7d817872a8b21959c1da51e0264d6ab6dfebc532445b485bc9256bb941b8ae2f68f2698804ce8b454f856bfbf68cb87cf47efe5b305bbbd05b35cfff4926e2f29cd2fc5dc79e19623745900a0f381437e5359dc728b3d5a7159abe4395282744d57cd7dba2c9c3dc92a1cc245a18ccc6aee7371c99bde2777619030918875759fa9e3e9d39695544ab43bcdd407d00e818d53c7d6476c4fde7106c6568a6e098f50f27b91a0b7511beaaba617080a8cc252ad6df2dfe36bcfdd4e48dfc985df72424323e0e733b94778fe93a793e7608190d0d3ee0fd70b26adc9ce5110ee579b35a3e9dd0634d532e9131ca7b81f75d0c4f6018449f9e831dbfabe13b8b95562c3f16ff6c767c7db568782027745668bcb1f68e5b2d5f57067e62bce76aa07d7abddeeb4f3d844f0289e16a433f72d979916d44d5dd7917dfc8c79ffbedf4829e5c941d4f094433371a1661b967d62eaf34c11edafadb61cb7cad97221b1def5f757b520d232e8a87eabae2b9c98595b7710861541bc03206bd37b20eafd66a7ec9a8a1acf530de3ad02a11b5c168a06f7238a31185f04548ce2ccfba960b86106c04d441333c2f0a9b1a034fedc3d525b28971ade46af0a612faf10ee0a4ebf72f4cbc3df046f354f7289eb93fcd4a7adb84c1e3d17bdcb2a52bcde29b6056cf73e919e4b09ec0cdea6d4c2ad316d8635aab2ae27a5e6709b0397c9e4f14750ed01f01f1042b8cf5bac1a7f71b937f17bbadefb939461d3109836653e57eaa4b444f501800f399adff23a8a0c571161c9ef952337fdc6f6816125c8223eedfad059d33d6b61f3a976e7cd08abfa46b462083747e8ae250482d0a196ca2a9e3e5abf1541f14aa94faacf1a1c3cc95281774c587fc085bbeccba8565c966941841c0cf05eb2b3dac6e2e340c8f5d658d20d6d4ba6380358d52491609a035774cd5a60c7049afa43dd797db51028b60c550d855c18e1fa80d9da21453e6e7973ff2dbd40ac828ff4e2026dcfc6d1d0b5d8c82a2aa77fccd6d29e218e0524acd9d28f0a1d3073292f4e487af8dffc6dcd1fa20a2918820324e201ac81cda06f52dbbfae9635468f587f7fc2d36dce0891986006a3da26f7db6cf29af463ebd54c05c917ac1e8dcdf5e1a05eb78a56e231b65aacd9784c10deed1668bd293d38b5916ee3f5dfdb1d20f72f138c56cd9e5fb65652b7da41e9c1370ce9abdcbc5c75f41f1a1ddf78392c3af22f29d470d3ff0a3e933ae734c6192f0a9923fc19923253b8ef43e02fc445d2968f5162e56709fd687fdfeee4be2b5362af6d780b025959763bc37dce741909a6ad557e4278ab8656661659e16379df6f6929f4bc0c439d91b320b5fd6ab32369bdb981bad524f305079196b9b9035cae7c818050c68ba6123e5e8a24978d16983753ee1066bd96368467cf26d63107769618946068689bb163e406a7aeded78afda092b3f13ed0a607c8941371579e43bc6913fdb8ff5ef4041778cc52990da86b38fcc99a1e7c2a04cd243f2ecbb8fe2874916741ccd6af8de7aef7aaa8f57a851fc3fca5c6132e3f980417f15c55bb80a429746028f028e1c09057ac370964aedfd0784f8caf4f378c2d7a8adb4124540535dd823968ab6707aa4ae062fff41361cb1b8f23805c262a25c81f4649a8dde4295e8f6649640d6a033da3a5814e47933f56052a19c27add21b009bf4d371972c72138f13511cc3ce647ab9736fe8542557c159b9f8c67db4a99aa9b3de34460ae922cb4e9ca58252dd945f82c5ff382e1c708883793a123d018039b144f7d7da1a86f7af1bfc6eb4bc8c889c2f87dd0bc17b276e1f6d32dd06b87b348c78bcea20e866c42c6984454101d93f1d41378a1664b3f48fc124a385641118e8fad1d5dcbf182b92e4ec0d37fd16cf6f6d77f288be41e90a18c1f284c5fff61cd315097628c894b14284ee5953cb205909648fcf9665cd406cfbae9976f010bc1eaeb6fe62b9eeb3df7522ce31753eac60ea0bd533477fe54052f2af96798cdfa24c801cf2bff25715f52da9e467b59309701ba129b7454c592cbb931b6944d423dac07b41341047e3d7614592945ddf48bf5207deb2bfc59e41514d775e974d86704cfe61c9ba73d279f18f4107c662d49c602f1c041e1d32de6b742bdcb4250273f41a9b304e6bdef2cbcc271d32071c4ab3281ee7e8abf94d128059381bcfd3b113f6dfc59a848f6f47b9a33695ce46e5956ee8d15849acd17720f28d34b7faad46d5d8d8027e76c69c425175eb564d28e748c71dfacec3baa4e8d8bc34b89b64c51ae04e5f44008bdb86149213fe4521587a8a396433f7f09ffaaa603e178131fb628e0122f5f829ce517521c8dd783d0c170f2d945ea8b7721c790b8d8320610e64fbb4ccd6a099566342b7a355ac4bfae8603f005f3ce923a7d54b99b2a4b44aa9f7db887d7bcc655dc1b23bbfec3739bd14947181577ed2561495c9f14229141e3df79ea968e05ffa191ee2d89662a792e479a5d5a7b3cc23f9fa991243caa9b5860f8913739913151ddb1242b7c61a658cfc0e28bd2a058715175046e6a341873f386d97e52f43060c13e961eb577196b4a226a1b57e90a2e6448b319726c28424c232181a1411ac1fbcf241082774e854b6ac0511658bdd679e43feedea2b7f9d609bf7020a6136d766008c8fab7608bf259c2da25069e1e5fcbdbc1b52e0095b3ce136d7f8e844681f5f8aeb3a2b979cdc64b704a9cc0ec68bb09fa9ea22ae4ad9070152da2f305ee6dce978e638c2781db8f4ff20bf56130e8037b92f164c55eaa971c1a58966dffd66e3971afd1212bbe597f36d3be08a7045e5dfabcadd7b830cb2f55d10b83d0ffbc5492cf05d33b1046cfb92a4dfa8ab719548bdd98243ca15ca2e3d5cd956bee98bc0608250c583488f7c1d4ac7abae43b1c49452c352d168ec94b570ca465a358d7c145a6f9d03a2cbb1d4be9c506abced9493cdb4a087de79616bc7ffa74f5a6699bfa83500ccebdb2619a0b485c6ca8a77d0dba45a20d92d44f5f3c0638f6acb457238e0860aa33db923237fcbc91551a44ee71197ed3427faaa51e4ca48a8bf2144e81b5bd97cbfef5093ef204c5945067b7223fcaabf51ee170cdf7c9f2d2f3988341054856703e0f78cc0d3cb264d47d507e1b7c28e1674cd0099a40b73e14c42ad3ca3683fbd13e155d446be2ac05a826cb194d4d564a49064bb1e4d11ed77598c5bcd189755384c94c2ca2002445570245ffda888c0ae1b22feb1c474f79faeb73921590ce1c82c442f11baedef2fe59e4006f6637e046cfc24475b53d0742570abdab779e60a7bade19f01b57bd3e82fd15542b051085e78c323935c6eacd9f18f3a9724ca686b525b189497d1e43df902b4040f63e18d19b8134a32b14685f4b99fef0b98df8d01965a996282a84ea5f27ffb828c899bebbba32827a41caa763beba7aa9237f7e8ccbdbd0bc6ff250c40f7e573c34dc7cf4f8caf53a2ec1c3c3fe5d7233177ba3a25df5b903151381721e7d7fb9cfadb2de316eec54854d971f0230dc2f388d6871985770c0c7b1de30c1fc69fdb88fbdd1df6d5d44278a8f9c3df86dced494dab31c71bdde66a21e6d9ef62962384969d02a578d61ff8717d1a73417a4526f4fb2c90428ace62f17dc84f8438f66f97d1cede7855f7a3d3d9d0383266a1036e1ef1cfb3ebb654f731acab25c922687a239c5759c3d09d457a0bfcb872106427fa5bbc0f1b9f031f97970f05812aafe998d30b7cb6c5704170267a8647b4a4565dc4396a9580c1035bc71cb2ba0569388b69ffa3ae11dd3722d922cbdc318b2f39676a5df27f7066497779059cd997395102c7a29b54a5d2fb2641e0ff8537259e6aabfb5a8c68e1472c2d8b9c72c23a0841f360e8590ad968ce3d0ff99902e20f28eb3c3edba19efa9ac46e630e99b7b54f29366a3cdaa6964608c6cbfb12166656488772b20b64b6ccb6e46b9083adcc850b5bc3c7935500434e75e95313ee15a24650da33e9e3ebaecf8669289c564eb424cc423e894625a11de6094fbb29a59785c9169e2f9a143002c4fb809fc5bfef8ffd9c26a2315f79f6a0b0af1f89d77f114c4c50cb5e02a77692542688dce8c4a39bfb9692623380de001e9751352e2a896d312494adbbf7c8a505145f41c49957077f6452c93b9068ac446430c527399a318995a62cad56d4e2af5cb0579f6d45fa9d56b0d9b43856aea9d394be825a6e182e71e4cfc7a537f86806f6e771cab58de282f12290807460eacc1358e67694e00afc7b93e67d7faf90cd050721302a35fa169c17e1982130c7112a5f3e024bd2ebcd4329ce54f0eb97eab59c5e1599ffb1b61c4f60903f2c8aeba51e5b09fe1c1e8e2306cc11c409fa02f65a90d33383ba70ba0256cac802303e95ba3401bd4667f5461651738d164e890d2b23972e14b675f7c209638a55eacaba3d1874eed6a0605a502a49880fe9cfcf5b0ea99bb731916071a3bed26a4a4309368c8dc9dd23e85c23de846f451b89ba1a7ab5d4e1aa8461775aa4cdddaebc31123860d402332e14fcd415fd139e8cb3be5371bdb79b3bf10f691319b320d28f189de215290ba53617acfc4b1122c8bb5f538b3a24a007b6b6a00c75ebc8aded4d2f874ab909b34ba40a662fa90219c447d85a6
Verify = Err
Hash = SHA256
P = "EmptyDKTest"
S = "salt"
c = 8
DK = ""
Verify = Err
# PBKDF2 test vectors from RFC 7914
Hash = SHA256
P = "passwd"
S = "salt"
c = 1
DK = 55ac046e56e3089fec1691c22544b605f94185216dde0465e68b9d57c20dacbc49ca9cccf179b645991664b39d77ef317c71b845b1e30bd509112041d3a19783
Verify = OK
Hash = SHA256
P = "Password"
S = "NaCl"
c = 80000
DK = 4ddcd8f60b98be21830cee5ef22701f9641a4418d04c0414aeff08876b34ab56a1d425a1225833549adb841b51c9b3176a272bdebba1d078478f62b397f33c8d
Verify = OK