Permalink
Cannot retrieve contributors at this time
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
executable file
45 lines (35 sloc)
1.5 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
# Copyright (c) 2015-2021 The Bitcoin Core developers | |
# Distributed under the MIT software license, see the accompanying | |
# file COPYING or http://www.opensource.org/licenses/mit-license.php. | |
from argparse import ArgumentParser | |
from base64 import urlsafe_b64encode | |
from getpass import getpass | |
from os import urandom | |
import hmac | |
def generate_salt(size): | |
"""Create size byte hex salt""" | |
return urandom(size).hex() | |
def generate_password(): | |
"""Create 32 byte b64 password""" | |
return urlsafe_b64encode(urandom(32)).decode('utf-8') | |
def password_to_hmac(salt, password): | |
m = hmac.new(bytearray(salt, 'utf-8'), bytearray(password, 'utf-8'), 'SHA256') | |
return m.hexdigest() | |
def main(): | |
parser = ArgumentParser(description='Create login credentials for a JSON-RPC user') | |
parser.add_argument('username', help='the username for authentication') | |
parser.add_argument('password', help='leave empty to generate a random password or specify "-" to prompt for password', nargs='?') | |
args = parser.parse_args() | |
if not args.password: | |
args.password = generate_password() | |
elif args.password == '-': | |
args.password = getpass() | |
# Create 16 byte hex salt | |
salt = generate_salt(16) | |
password_hmac = password_to_hmac(salt, args.password) | |
print('String to be appended to bitcoin.conf:') | |
print('rpcauth={0}:{1}${2}'.format(args.username, salt, password_hmac)) | |
print('Your password:\n{0}'.format(args.password)) | |
if __name__ == '__main__': | |
main() |