citadel-core/scripts/lib/rpcauth.py
2021-10-22 16:56:27 +01:00

43 lines
1.3 KiB
Python

# Copyright (c) 2015-2018 The Bitcoin Core developers
# Distributed under the MIT software license, see the accompanying
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
# SPDX-FileCopyrightText: 2015-2018 The Bitcoin Core developers
#
# SPDX-License-Identifier: AGPL-3.0-or-later
from argparse import ArgumentParser
from base64 import urlsafe_b64encode
from binascii import hexlify
from getpass import getpass
from os import urandom
import hmac
def generate_salt(size):
"""Create size byte hex salt"""
return hexlify(urandom(size)).decode()
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 get_data(username: str, password=None):
# If no password is given, then get it from generate_password()
if password is None:
password = generate_password()
# Create 16 byte hex salt
salt = generate_salt(16)
password_hmac = password_to_hmac(salt, password)
return {
'conf_data': 'rpcauth={0}:{1}${2}'.format(username, salt, password_hmac),
'auth': '{0}:{1}${2}'.format(username, salt, password_hmac),
'password': password
}