From c1c6de6ad4f92c6628dccc271fe4c661e450d130 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Wed, 25 Jan 2012 03:05:16 +0100 Subject: Check consistency of private keys Reported by onlineproof on IRC: Bitcoin does not verify whether private keys and public keys correspond, when loading a wallet. --- src/db.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/db.cpp') diff --git a/src/db.cpp b/src/db.cpp index f9a7d6c90a..bd31bd7943 100644 --- a/src/db.cpp +++ b/src/db.cpp @@ -879,6 +879,8 @@ int CWalletDB::LoadWallet(CWallet* pwallet) CPrivKey pkey; ssValue >> pkey; key.SetPrivKey(pkey); + if (key.GetPubKey() != vchPubKey) + return DB_CORRUPT; } else { -- cgit v1.2.3 From d841fc969a3a300ebeaa4279320235f2ff2b0533 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Thu, 26 Jan 2012 19:26:34 +0100 Subject: Full checking of all loaded keys --- src/db.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/db.cpp') diff --git a/src/db.cpp b/src/db.cpp index bd31bd7943..600afe383d 100644 --- a/src/db.cpp +++ b/src/db.cpp @@ -879,7 +879,7 @@ int CWalletDB::LoadWallet(CWallet* pwallet) CPrivKey pkey; ssValue >> pkey; key.SetPrivKey(pkey); - if (key.GetPubKey() != vchPubKey) + if (key.GetPubKey() != vchPubKey || !key.IsValid()) return DB_CORRUPT; } else @@ -887,6 +887,8 @@ int CWalletDB::LoadWallet(CWallet* pwallet) CWalletKey wkey; ssValue >> wkey; key.SetPrivKey(wkey.vchPrivKey); + if (key.GetPubKey() != vchPubKey || !key.IsValid()) + return DB_CORRUPT; } if (!pwallet->LoadKey(key)) return DB_CORRUPT; -- cgit v1.2.3