Bitcoin Core
31.1.0
P2P Digital Currency
Toggle main menu visibility
Loading...
Searching...
No Matches
src
util
bip32.cpp
Go to the documentation of this file.
1
// Copyright (c) 2019-present The Bitcoin Core developers
2
// Distributed under the MIT software license, see the accompanying
3
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5
#include <
tinyformat.h
>
6
#include <
util/bip32.h
>
7
#include <
util/strencodings.h
>
8
9
#include <cstdint>
10
#include <cstdio>
11
#include <sstream>
12
13
bool
ParseHDKeypath
(
const
std::string& keypath_str, std::vector<uint32_t>& keypath)
14
{
15
std::stringstream
ss
(keypath_str);
16
std::string item;
17
bool
first =
true
;
18
while
(std::getline(
ss
, item,
'/'
)) {
19
if
(item.compare(
"m"
) == 0) {
20
if
(first) {
21
first =
false
;
22
continue
;
23
}
24
return
false
;
25
}
26
// Finds whether it is hardened
27
uint32_t path = 0;
28
size_t
pos = item.find(
'\''
);
29
if
(pos != std::string::npos) {
30
// The hardened tick can only be in the last index of the string
31
if
(pos != item.size() - 1) {
32
return
false
;
33
}
34
path |= 0x80000000;
35
item = item.substr(0, item.size() - 1);
// Drop the last character which is the hardened tick
36
}
37
38
// Ensure this is only numbers
39
const
auto
number{
ToIntegral<uint32_t>
(item)};
40
if
(!number) {
41
return
false
;
42
}
43
path |= *number;
44
45
keypath.push_back(path);
46
first =
false
;
47
}
48
return
true
;
49
}
50
51
std::string
FormatHDKeypath
(
const
std::vector<uint32_t>& path,
bool
apostrophe)
52
{
53
std::string
ret
;
54
for
(
auto
i : path) {
55
ret
+=
strprintf
(
"/%i"
, (i << 1) >> 1);
56
if
(i >> 31)
ret
+= apostrophe ?
'\''
:
'h'
;
57
}
58
return
ret
;
59
}
60
61
std::string
WriteHDKeypath
(
const
std::vector<uint32_t>& keypath,
bool
apostrophe)
62
{
63
return
"m"
+
FormatHDKeypath
(keypath, apostrophe);
64
}
ParseHDKeypath
bool ParseHDKeypath(const std::string &keypath_str, std::vector< uint32_t > &keypath)
Parse an HD keypaths like "m/7/0'/2000".
Definition
bip32.cpp:13
FormatHDKeypath
std::string FormatHDKeypath(const std::vector< uint32_t > &path, bool apostrophe)
Definition
bip32.cpp:51
WriteHDKeypath
std::string WriteHDKeypath(const std::vector< uint32_t > &keypath, bool apostrophe)
Write HD keypaths as strings.
Definition
bip32.cpp:61
bip32.h
ret
int ret
Definition
bitcoin-cli.cpp:1350
strencodings.h
ToIntegral
std::optional< T > ToIntegral(std::string_view str, size_t base=10)
Convert string to integral type T.
Definition
strencodings.h:180
tinyformat.h
strprintf
#define strprintf
Format arguments and return the string or write to given std::ostream (see tinyformat::format doc for...
Definition
tinyformat.h:1172
ss
DataStream ss
Definition
uint256_tests.cpp:181
Generated on
for Bitcoin Core by
1.17.0