1 # 2 # Copyright 2001-2024 The OpenSSL Project Authors. All Rights Reserved. 3 # 4 # Licensed under the Apache License 2.0 (the "License"). You may not use 5 # this file except in compliance with the License. You can obtain a copy 6 # in the file LICENSE in the source distribution or at 7 # https://www.openssl.org/source/license.html 8 9 # Tests start with one of these keywords 10 # Cipher Decrypt Derive Digest Encoding KDF MAC PBE 11 # PrivPubKeyPair Sign Verify VerifyRecover 12 # and continue until a blank line. Lines starting with a pound sign are ignored. 13 14 Title = HKDF tests (from RFC5869 test vectors) 15 16 KDF = HKDF 17 Ctrl.digest = digest:SHA256 18 Ctrl.IKM = hexkey:0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b 19 Ctrl.salt = hexsalt:000102030405060708090a0b0c 20 Ctrl.info = hexinfo:f0f1f2f3f4f5f6f7f8f9 21 Output = 3cb25f25faacd57a90434f64d0362f2a2d2d0a90cf1a5a4c5db02d56ecc4c5bf34007208d5b887185865 22 23 KDF = HKDF 24 Ctrl.mode = mode:EXTRACT_ONLY 25 Ctrl.digest = digest:SHA256 26 Ctrl.IKM = hexkey:0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b 27 Ctrl.salt = hexsalt:000102030405060708090a0b0c 28 Output = 077709362c2e32df0ddc3f0dc47bba6390b6c73bb50f9c3122ec844ad7c2b3e5 29 30 KDF = HKDF 31 Ctrl.mode = mode:EXPAND_ONLY 32 Ctrl.digest = digest:SHA256 33 Ctrl.IKM = hexkey:077709362c2e32df0ddc3f0dc47bba6390b6c73bb50f9c3122ec844ad7c2b3e5 34 Ctrl.info = hexinfo:f0f1f2f3f4f5f6f7f8f9 35 Output = 3cb25f25faacd57a90434f64d0362f2a2d2d0a90cf1a5a4c5db02d56ecc4c5bf34007208d5b887185865 36 37 KDF = HKDF 38 Ctrl.digest = digest:SHA256 39 Ctrl.IKM = hexkey:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f 40 Ctrl.salt = hexsalt:606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf 41 Ctrl.info = hexinfo:b0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff 42 Output = b11e398dc80327a1c8e7f78c596a49344f012eda2d4efad8a050cc4c19afa97c59045a99cac7827271cb41c65e590e09da3275600c2f09b8367793a9aca3db71cc30c58179ec3e87c14c01d5c1f3434f1d87 43 44 KDF = HKDF 45 Ctrl.mode = mode:EXTRACT_ONLY 46 Ctrl.digest = digest:SHA256 47 Ctrl.IKM = hexkey:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f 48 Ctrl.salt = hexsalt:606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf 49 Output = 06a6b88c5853361a06104c9ceb35b45cef760014904671014a193f40c15fc244 50 51 KDF = HKDF 52 Ctrl.mode = mode:EXPAND_ONLY 53 Ctrl.digest = digest:SHA256 54 Ctrl.IKM = hexkey:06a6b88c5853361a06104c9ceb35b45cef760014904671014a193f40c15fc244 55 Ctrl.info = hexinfo:b0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff 56 Output = b11e398dc80327a1c8e7f78c596a49344f012eda2d4efad8a050cc4c19afa97c59045a99cac7827271cb41c65e590e09da3275600c2f09b8367793a9aca3db71cc30c58179ec3e87c14c01d5c1f3434f1d87 57 58 KDF = HKDF 59 Ctrl.digest = digest:SHA256 60 Ctrl.IKM = hexkey:0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b 61 Ctrl.salt = salt: 62 Ctrl.info = info: 63 Output = 8da4e775a563c18f715f802a063c5a31b8a11f5c5ee1879ec3454e5f3c738d2d9d201395faa4b61a96c8 64 65 KDF = HKDF 66 Ctrl.mode = mode:EXTRACT_ONLY 67 Ctrl.digest = digest:SHA256 68 Ctrl.IKM = hexkey:0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b 69 Ctrl.salt = salt: 70 Ctrl.info = info: 71 Output = 19ef24a32c717b167f33a91d6f648bdf96596776afdb6377ac434c1c293ccb04 72 73 KDF = HKDF 74 Ctrl.mode = mode:EXPAND_ONLY 75 Ctrl.digest = digest:SHA256 76 Ctrl.IKM = hexkey:19ef24a32c717b167f33a91d6f648bdf96596776afdb6377ac434c1c293ccb04 77 Ctrl.info = info: 78 Output = 8da4e775a563c18f715f802a063c5a31b8a11f5c5ee1879ec3454e5f3c738d2d9d201395faa4b61a96c8 79 80 Availablein = default 81 KDF = HKDF 82 Ctrl.digest = digest:SHA1 83 Ctrl.IKM = hexkey:0b0b0b0b0b0b0b0b0b0b0b 84 Ctrl.salt = hexsalt:000102030405060708090a0b0c 85 Ctrl.info = hexinfo:f0f1f2f3f4f5f6f7f8f9 86 Output = 085a01ea1b10f36933068b56efa5ad81a4f14b822f5b091568a9cdd4f155fda2c22e422478d305f3f896 87 88 Availablein = default 89 KDF = HKDF 90 Ctrl.mode = mode:EXTRACT_ONLY 91 Ctrl.digest = digest:SHA1 92 Ctrl.IKM = hexkey:0b0b0b0b0b0b0b0b0b0b0b 93 Ctrl.salt = hexsalt:000102030405060708090a0b0c 94 Output = 9b6c18c432a7bf8f0e71c8eb88f4b30baa2ba243 95 96 KDF = HKDF 97 Ctrl.mode = mode:EXPAND_ONLY 98 Ctrl.digest = digest:SHA1 99 Ctrl.IKM = hexkey:9b6c18c432a7bf8f0e71c8eb88f4b30baa2ba243 100 Ctrl.info = hexinfo:f0f1f2f3f4f5f6f7f8f9 101 Output = 085a01ea1b10f36933068b56efa5ad81a4f14b822f5b091568a9cdd4f155fda2c22e422478d305f3f896 102 103 KDF = HKDF 104 Ctrl.digest = digest:SHA1 105 Ctrl.IKM = hexkey:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f 106 Ctrl.salt = hexsalt:606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf 107 Ctrl.info = hexinfo:b0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff 108 Output = 0bd770a74d1160f7c9f12cd5912a06ebff6adcae899d92191fe4305673ba2ffe8fa3f1a4e5ad79f3f334b3b202b2173c486ea37ce3d397ed034c7f9dfeb15c5e927336d0441f4c4300e2cff0d0900b52d3b4 109 110 KDF = HKDF 111 Ctrl.mode = mode:EXTRACT_ONLY 112 Ctrl.digest = digest:SHA1 113 Ctrl.IKM = hexkey:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f 114 Ctrl.salt = hexsalt:606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf 115 Output = 8adae09a2a307059478d309b26c4115a224cfaf6 116 117 KDF = HKDF 118 Ctrl.mode = mode:EXPAND_ONLY 119 Ctrl.digest = digest:SHA1 120 Ctrl.IKM = hexkey:8adae09a2a307059478d309b26c4115a224cfaf6 121 Ctrl.info = hexinfo:b0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff 122 Output = 0bd770a74d1160f7c9f12cd5912a06ebff6adcae899d92191fe4305673ba2ffe8fa3f1a4e5ad79f3f334b3b202b2173c486ea37ce3d397ed034c7f9dfeb15c5e927336d0441f4c4300e2cff0d0900b52d3b4 123 124 KDF = HKDF 125 Ctrl.digest = digest:SHA1 126 Ctrl.IKM = hexkey:0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b 127 Ctrl.salt = salt: 128 Ctrl.info = info: 129 Output = 0ac1af7002b3d761d1e55298da9d0506b9ae52057220a306e07b6b87e8df21d0ea00033de03984d34918 130 131 KDF = HKDF 132 Ctrl.mode = mode:EXTRACT_ONLY 133 Ctrl.digest = digest:SHA1 134 Ctrl.IKM = hexkey:0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b 135 Ctrl.salt = salt: 136 Output = da8c8a73c7fa77288ec6f5e7c297786aa0d32d01 137 138 KDF = HKDF 139 Ctrl.mode = mode:EXPAND_ONLY 140 Ctrl.digest = digest:SHA1 141 Ctrl.IKM = hexkey:da8c8a73c7fa77288ec6f5e7c297786aa0d32d01 142 Ctrl.info = info: 143 Output = 0ac1af7002b3d761d1e55298da9d0506b9ae52057220a306e07b6b87e8df21d0ea00033de03984d34918 144 145 KDF = HKDF 146 Ctrl.digest = digest:SHA1 147 Ctrl.IKM = hexkey:0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c 148 Ctrl.salt = salt: 149 Ctrl.info = info: 150 Output = 2c91117204d745f3500d636a62f64f0ab3bae548aa53d423b0d1f27ebba6f5e5673a081d70cce7acfc48 151 152 KDF = HKDF 153 Ctrl.mode = mode:EXTRACT_ONLY 154 Ctrl.digest = digest:SHA1 155 Ctrl.IKM = hexkey:0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c 156 Ctrl.salt = salt: 157 Output = 2adccada18779e7c2077ad2eb19d3f3e731385dd 158 159 KDF = HKDF 160 Ctrl.mode = mode:EXPAND_ONLY 161 Ctrl.digest = digest:SHA1 162 Ctrl.IKM = hexkey:2adccada18779e7c2077ad2eb19d3f3e731385dd 163 Ctrl.info = info: 164 Output = 2c91117204d745f3500d636a62f64f0ab3bae548aa53d423b0d1f27ebba6f5e5673a081d70cce7acfc48 165 166 KDF = HKDF 167 Ctrl.IKM = hexkey:0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c 168 Ctrl.salt = salt: 169 Ctrl.info = info: 170 Output = 00 171 Result = KDF_DERIVE_ERROR 172 173 KDF = HKDF 174 Ctrl.digest = digest:SHA1 175 Ctrl.salt = salt: 176 Ctrl.info = info: 177 Output = 00 178 Result = KDF_DERIVE_ERROR 179 180 KDF = HKDF 181 Ctrl.digest = digest:SHA1 182 Ctrl.IKM = hexkey:0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c 183 Ctrl.info = info: 184 Output = 2c91117204d745f3500d636a62f64f0ab3bae548aa53d423b0d1f27ebba6f5e5673a081d70cce7acfc48 185 186 KDF = HKDF 187 Ctrl.digest = digest:SHA1 188 Ctrl.IKM = hexkey:0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c 189 Ctrl.salt = salt: 190 Output = 2c91117204d745f3500d636a62f64f0ab3bae548aa53d423b0d1f27ebba6f5e5673a081d70cce7acfc48 191 192 KDF = HKDF 193 Ctrl.mode = mode:EXTRACT_AND_EXPAND 194 Ctrl.digest = digest:SHA1 195 Ctrl.IKM = hexkey:0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c 196 Ctrl.salt = salt: 197 Output = 2c91117204d745f3500d636a62f64f0ab3bae548aa53d423b0d1f27ebba6f5e5673a081d70cce7acfc48 198 199 # The output key size should match the digest size for EXTRACT_ONLY mode 200 KDF = HKDF 201 Ctrl.mode = mode:EXTRACT_ONLY 202 Ctrl.digest = digest:SHA1 203 Ctrl.IKM = hexkey:0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b 204 Ctrl.salt = salt: 205 Output = da8c8a73 206 Result = KDF_DERIVE_ERROR 207 208 # Test concat of multiple info (Uses existing test data, and just splits the info into separate fields) 209 KDF = HKDF 210 Ctrl.mode = mode:EXPAND_ONLY 211 Ctrl.digest = digest:SHA1 212 Ctrl.IKM = hexkey:8adae09a2a307059478d309b26c4115a224cfaf6 213 Ctrl.info = hexinfo:b0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0 214 Ctrl.info = hexinfo:c1c2c3 215 Ctrl.info = hexinfo:c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9 216 Ctrl.info = hexinfo:dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff 217 Output = 0bd770a74d1160f7c9f12cd5912a06ebff6adcae899d92191fe4305673ba2ffe8fa3f1a4e5ad79f3f334b3b202b2173c486ea37ce3d397ed034c7f9dfeb15c5e927336d0441f4c4300e2cff0d0900b52d3b4 218 219 Availablein = default 220 KDF = HKDF 221 Ctrl.digest = digest:BLAKE2S-256 222 Ctrl.IKM = hexkey:1a2d 223 Ctrl.salt = hexsalt:000000000000000000000000000000000000000000000000000000000000000000 224 Ctrl.info = info: 225 Output = 62f99231760bedd72319cc6cad 226 227 # Test that the operation with XOF digest function is rejected 228 FIPSversion = >=3.4.0 229 KDF = HKDF 230 Ctrl.digest = digest:SHAKE-256 231 Ctrl.IKM = hexkey:0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b 232 Ctrl.salt = hexsalt:000102030405060708090a0b0c 233 Ctrl.info = hexinfo:f0f1f2f3f4f5f6f7f8f9 234 Result = KDF_CTRL_ERROR 235 Reason = xof digests not allowed 236 237 Title = FIPS indicator tests 238 239 # Test that the key whose length is shorter than 112 bits is rejected 240 Availablein = fips 241 FIPSversion = >=3.4.0 242 KDF = HKDF 243 Ctrl.digest = digest:SHA1 244 Ctrl.IKM = hexkey:0b0b0b0b0b0b0b0b0b0b0b 245 Ctrl.salt = hexsalt:000102030405060708090a0b0c 246 Ctrl.info = hexinfo:f0f1f2f3f4f5f6f7f8f9 247 Result = KDF_CTRL_ERROR 248 Reason = invalid key length 249 250 # Test that the key whose length is shorter than 112 bits is reported as 251 # unapproved 252 Availablein = fips 253 FIPSversion = >=3.4.0 254 KDF = HKDF 255 Unapproved = 1 256 Ctrl.key-check = key-check:0 257 Ctrl.digest = digest:SHA1 258 Ctrl.IKM = hexkey:0b0b0b0b0b0b0b0b0b0b0b 259 Ctrl.salt = hexsalt:000102030405060708090a0b0c 260 Ctrl.info = hexinfo:f0f1f2f3f4f5f6f7f8f9 261 Output = 085a01ea1b10f36933068b56efa5ad81a4f14b822f5b091568a9cdd4f155fda2c22e422478d305f3f896 262