|
1 | | -use super::{ |
| 1 | +use bip0032::{ |
2 | 2 | DerivationPath, ExtendedKeyPayload, ExtendedPrivateKey, ExtendedPublicKey, KnownVersion, |
3 | 3 | backend::*, |
4 | 4 | }; |
@@ -224,25 +224,43 @@ fn assert_invalid_case_for_all_backends(xpub_keys: &[&str], xprv_keys: &[&str]) |
224 | 224 | } |
225 | 225 |
|
226 | 226 | #[test] |
227 | | -fn test_invalid_extended_keys() { |
| 227 | +fn test_vector_5_invalid_extended_keys() { |
228 | 228 | let invalid_xpub = [ |
| 229 | + // pubkey version / prvkey mismatch |
229 | 230 | "xpub661MyMwAqRbcEYS8w7XLSVeEsBXy79zSzH1J8vCdxAZningWLdN3zgtU6LBpB85b3D2yc8sfvZU521AAwdZafEz7mnzBBsz4wKY5fTtTQBm", |
| 231 | + // invalid pubkey prefix 04 |
230 | 232 | "xpub661MyMwAqRbcEYS8w7XLSVeEsBXy79zSzH1J8vCdxAZningWLdN3zgtU6Txnt3siSujt9RCVYsx4qHZGc62TG4McvMGcAUjeuwZdduYEvFn", |
| 233 | + // invalid pubkey prefix 01 |
231 | 234 | "xpub661MyMwAqRbcEYS8w7XLSVeEsBXy79zSzH1J8vCdxAZningWLdN3zgtU6N8ZMMXctdiCjxTNq964yKkwrkBJJwpzZS4HS2fxvyYUA4q2Xe4", |
| 235 | + // zero depth with non-zero parent fingerprint |
232 | 236 | "xpub661no6RGEX3uJkY4bNnPcw4URcQTrSibUZ4NqJEw5eBkv7ovTwgiT91XX27VbEXGENhYRCf7hyEbWrR3FewATdCEebj6znwMfQkhRYHRLpJ", |
| 237 | + // zero depth with non-zero index |
233 | 238 | "xpub661MyMwAuDcm6CRQ5N4qiHKrJ39Xe1R1NyfouMKTTWcguwVcfrZJaNvhpebzGerh7gucBvzEQWRugZDuDXjNDRmXzSZe4c7mnTK97pTvGS8", |
| 239 | + // unknown extended key version |
234 | 240 | "DMwo58pR1QLEFihHiXPVykYB6fJmsTeHvyTp7hRThAtCX8CvYzgPcn8XnmdfHGMQzT7ayAmfo4z3gY5KfbrZWZ6St24UVf2Qgo6oujFktLHdHY4", |
| 241 | + // invalid pubkey 020000000000000000000000000000000000000000000000000000000000000007 |
235 | 242 | "xpub661MyMwAqRbcEYS8w7XLSVeEsBXy79zSzH1J8vCdxAZningWLdN3zgtU6Q5JXayek4PRsn35jii4veMimro1xefsM58PgBMrvdYre8QyULY", |
236 | 243 | ]; |
237 | 244 |
|
238 | 245 | let invalid_xprv = [ |
| 246 | + // prvkey version / pubkey mismatch |
239 | 247 | "xprv9s21ZrQH143K24Mfq5zL5MhWK9hUhhGbd45hLXo2Pq2oqzMMo63oStZzFGTQQD3dC4H2D5GBj7vWvSQaaBv5cxi9gafk7NF3pnBju6dwKvH", |
| 248 | + // invalid prvkey prefix 04 |
240 | 249 | "xprv9s21ZrQH143K24Mfq5zL5MhWK9hUhhGbd45hLXo2Pq2oqzMMo63oStZzFGpWnsj83BHtEy5Zt8CcDr1UiRXuWCmTQLxEK9vbz5gPstX92JQ", |
| 250 | + // invalid prvkey prefix 01 |
241 | 251 | "xprv9s21ZrQH143K24Mfq5zL5MhWK9hUhhGbd45hLXo2Pq2oqzMMo63oStZzFAzHGBP2UuGCqWLTAPLcMtD9y5gkZ6Eq3Rjuahrv17fEQ3Qen6J", |
| 252 | + // zero depth with non-zero parent fingerprint |
242 | 253 | "xprv9s2SPatNQ9Vc6GTbVMFPFo7jsaZySyzk7L8n2uqKXJen3KUmvQNTuLh3fhZMBoG3G4ZW1N2kZuHEPY53qmbZzCHshoQnNf4GvELZfqTUrcv", |
| 254 | + // zero depth with non-zero index |
243 | 255 | "xprv9s21ZrQH4r4TsiLvyLXqM9P7k1K3EYhA1kkD6xuquB5i39AU8KF42acDyL3qsDbU9NmZn6MsGSUYZEsuoePmjzsB3eFKSUEh3Gu1N3cqVUN", |
| 256 | + // unknown extended key version |
244 | 257 | "DMwo58pR1QLEFihHiXPVykYB6fJmsTeHvyTp7hRThAtCX8CvYzgPcn8XnmdfHPmHJiEDXkTiJTVV9rHEBUem2mwVbbNfvT2MTcAqj3nesx8uBf9", |
| 258 | + // private key 0 not in 1..n-1 |
245 | 259 | "xprv9s21ZrQH143K24Mfq5zL5MhWK9hUhhGbd45hLXo2Pq2oqzMMo63oStZzF93Y5wvzdUayhgkkFoicQZcP3y52uPPxFnfoLZB21Teqt1VvEHx", |
| 260 | + // private key n not in 1..n-1 |
| 261 | + "xprv9s21ZrQH143K24Mfq5zL5MhWK9hUhhGbd45hLXo2Pq2oqzMMo63oStZzFAzHGBP2UuGCqWLTAPLcMtD5SDKr24z3aiUvKr9bJpdrcLg1y3G", |
| 262 | + // invalid checksum |
| 263 | + "xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHL", |
246 | 264 | ]; |
247 | 265 |
|
248 | 266 | assert_invalid_case_for_all_backends(&invalid_xpub, &invalid_xprv); |
|
0 commit comments