Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F10615077
keystore.h
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
3 KB
Subscribers
None
keystore.h
View Options
// Copyright (c) 2009-2010 Satoshi Nakamoto
// Copyright (c) 2009-2014 The Bitcoin Core developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#ifndef BITCOIN_KEYSTORE_H
#define BITCOIN_KEYSTORE_H
#include
"key.h"
#include
"pubkey.h"
#include
"script/script.h"
#include
"script/standard.h"
#include
"sync.h"
#include
<boost/signals2/signal.hpp>
#include
<boost/variant.hpp>
/** A virtual base class for key stores */
class
CKeyStore
{
protected
:
mutable
CCriticalSection
cs_KeyStore
;
public
:
virtual
~
CKeyStore
()
{}
//! Add a key to the store.
virtual
bool
AddKeyPubKey
(
const
CKey
&
key
,
const
CPubKey
&
pubkey
)
=
0
;
virtual
bool
AddKey
(
const
CKey
&
key
);
//! Check whether a key corresponding to a given address is present in the store.
virtual
bool
HaveKey
(
const
CKeyID
&
address
)
const
=
0
;
virtual
bool
GetKey
(
const
CKeyID
&
address
,
CKey
&
keyOut
)
const
=
0
;
virtual
void
GetKeys
(
std
::
set
<
CKeyID
>
&
setAddress
)
const
=
0
;
virtual
bool
GetPubKey
(
const
CKeyID
&
address
,
CPubKey
&
vchPubKeyOut
)
const
=
0
;
//! Support for BIP 0013 : see https://github.com/bitcoin/bips/blob/master/bip-0013.mediawiki
virtual
bool
AddCScript
(
const
CScript
&
redeemScript
)
=
0
;
virtual
bool
HaveCScript
(
const
CScriptID
&
hash
)
const
=
0
;
virtual
bool
GetCScript
(
const
CScriptID
&
hash
,
CScript
&
redeemScriptOut
)
const
=
0
;
//! Support for Watch-only addresses
virtual
bool
AddWatchOnly
(
const
CScript
&
dest
)
=
0
;
virtual
bool
RemoveWatchOnly
(
const
CScript
&
dest
)
=
0
;
virtual
bool
HaveWatchOnly
(
const
CScript
&
dest
)
const
=
0
;
virtual
bool
HaveWatchOnly
()
const
=
0
;
};
typedef
std
::
map
<
CKeyID
,
CKey
>
KeyMap
;
typedef
std
::
map
<
CKeyID
,
CPubKey
>
WatchKeyMap
;
typedef
std
::
map
<
CScriptID
,
CScript
>
ScriptMap
;
typedef
std
::
set
<
CScript
>
WatchOnlySet
;
/** Basic key store, that keeps keys in an address->secret map */
class
CBasicKeyStore
:
public
CKeyStore
{
protected
:
KeyMap
mapKeys
;
WatchKeyMap
mapWatchKeys
;
ScriptMap
mapScripts
;
WatchOnlySet
setWatchOnly
;
public
:
bool
AddKeyPubKey
(
const
CKey
&
key
,
const
CPubKey
&
pubkey
);
bool
GetPubKey
(
const
CKeyID
&
address
,
CPubKey
&
vchPubKeyOut
)
const
;
bool
HaveKey
(
const
CKeyID
&
address
)
const
{
bool
result
;
{
LOCK
(
cs_KeyStore
);
result
=
(
mapKeys
.
count
(
address
)
>
0
);
}
return
result
;
}
void
GetKeys
(
std
::
set
<
CKeyID
>
&
setAddress
)
const
{
setAddress
.
clear
();
{
LOCK
(
cs_KeyStore
);
KeyMap
::
const_iterator
mi
=
mapKeys
.
begin
();
while
(
mi
!=
mapKeys
.
end
())
{
setAddress
.
insert
((
*
mi
).
first
);
mi
++
;
}
}
}
bool
GetKey
(
const
CKeyID
&
address
,
CKey
&
keyOut
)
const
{
{
LOCK
(
cs_KeyStore
);
KeyMap
::
const_iterator
mi
=
mapKeys
.
find
(
address
);
if
(
mi
!=
mapKeys
.
end
())
{
keyOut
=
mi
->
second
;
return
true
;
}
}
return
false
;
}
virtual
bool
AddCScript
(
const
CScript
&
redeemScript
);
virtual
bool
HaveCScript
(
const
CScriptID
&
hash
)
const
;
virtual
bool
GetCScript
(
const
CScriptID
&
hash
,
CScript
&
redeemScriptOut
)
const
;
virtual
bool
AddWatchOnly
(
const
CScript
&
dest
);
virtual
bool
RemoveWatchOnly
(
const
CScript
&
dest
);
virtual
bool
HaveWatchOnly
(
const
CScript
&
dest
)
const
;
virtual
bool
HaveWatchOnly
()
const
;
};
typedef
std
::
vector
<
unsigned
char
,
secure_allocator
<
unsigned
char
>
>
CKeyingMaterial
;
typedef
std
::
map
<
CKeyID
,
std
::
pair
<
CPubKey
,
std
::
vector
<
unsigned
char
>
>
>
CryptedKeyMap
;
#endif
// BITCOIN_KEYSTORE_H
File Metadata
Details
Attached
Mime Type
text/x-c++
Expires
Sat, Nov 23, 09:56 (1 d, 5 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
4510185
Default Alt Text
keystore.h (3 KB)
Attached To
rSTAGING Bitcoin ABC staging
Event Timeline
Log In to Comment