diff options
author | Wladimir J. van der Laan <laanwj@gmail.com> | 2018-04-25 15:56:33 +0200 |
---|---|---|
committer | Wladimir J. van der Laan <laanwj@gmail.com> | 2018-04-25 15:56:47 +0200 |
commit | 106d9297801c8d63a961d36ed03f2efb20ff65f7 (patch) | |
tree | a51daa1c0aae9b22799d0503e3f0eac588b414b9 /share/rpcauth/rpcauth.py | |
parent | e074097c1ba334e5ecefa734fe0da28f42b5afb0 (diff) | |
parent | 6674a75bfbdf680d0a3648f44c6591ff5fc983cf (diff) |
Merge #13056: [tests] Make rpcauth.py testable and add unit tests
6674a75 [tests] Make rpcauth.py testable and add unit tests (Qasim Javed)
Pull request description:
refs #12995
Tree-SHA512: 609a85a75dafe46723f050db1e96098f6859519afd5e1b141a332f34ab715144d32fdd8f10d245d6dc0765e77f82158fe7b8aa2e4317f0e893de491d2e0acf1f
Diffstat (limited to 'share/rpcauth/rpcauth.py')
-rwxr-xr-x | share/rpcauth/rpcauth.py | 46 |
1 files changed, 28 insertions, 18 deletions
diff --git a/share/rpcauth/rpcauth.py b/share/rpcauth/rpcauth.py index f9b9787514..da84deb5e2 100755 --- a/share/rpcauth/rpcauth.py +++ b/share/rpcauth/rpcauth.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 # Copyright (c) 2015-2017 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying +# Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. import sys @@ -9,26 +9,36 @@ from random import SystemRandom import base64 import hmac -if len(sys.argv) < 2: - sys.stderr.write('Please include username as an argument.\n') - sys.exit(0) +def generate_salt(): + # This uses os.urandom() underneath + cryptogen = SystemRandom() -username = sys.argv[1] + # Create 16 byte hex salt + salt_sequence = [cryptogen.randrange(256) for _ in range(16)] + return ''.join([format(r, 'x') for r in salt_sequence]) -#This uses os.urandom() underneath -cryptogen = SystemRandom() +def generate_password(salt): + """Create 32 byte b64 password""" + password = base64.urlsafe_b64encode(os.urandom(32)).decode('utf-8') -#Create 16 byte hex salt -salt_sequence = [cryptogen.randrange(256) for i in range(16)] -hexseq = list(map(hex, salt_sequence)) -salt = "".join([x[2:] for x in hexseq]) + m = hmac.new(bytearray(salt, 'utf-8'), bytearray(password, 'utf-8'), 'SHA256') + password_hmac = m.hexdigest() -#Create 32 byte b64 password -password = base64.urlsafe_b64encode(os.urandom(32)).decode("utf-8") + return password, password_hmac -m = hmac.new(bytearray(salt, 'utf-8'), bytearray(password, 'utf-8'), "SHA256") -result = m.hexdigest() +def main(): + if len(sys.argv) < 2: + sys.stderr.write('Please include username as an argument.\n') + sys.exit(0) -print("String to be appended to bitcoin.conf:") -print("rpcauth="+username+":"+salt+"$"+result) -print("Your password:\n"+password) + username = sys.argv[1] + + salt = generate_salt() + password, password_hmac = generate_password(salt) + + print('String to be appended to bitcoin.conf:') + print('rpcauth={0}:{1}${2}'.format(username, salt, password_hmac)) + print('Your password:\n{0}'.format(password)) + +if __name__ == '__main__': + main() |