79 lines
1.7 KiB
Python
79 lines
1.7 KiB
Python
#! /usr/bin/env python3
|
|
# encoding: utf-8
|
|
|
|
# ----------------------------------------------------------------
|
|
|
|
def flatten_dict(root, glue=" ", prefix=[]):
|
|
lines = []
|
|
|
|
for k, v in root.items():
|
|
new_prefix = prefix + [k]
|
|
|
|
if type(v) == dict:
|
|
lines.extend(flatten_dict(v, glue, new_prefix))
|
|
else:
|
|
lines.append((glue.join(new_prefix), v))
|
|
|
|
return lines
|
|
|
|
# ----------------------------------------------------------------
|
|
|
|
import random
|
|
|
|
PASSPHRASE_VOWELS = "aeiuAEU"
|
|
PASSPHRASE_CONSONANTS = "bcdfghjkmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ23456789"
|
|
|
|
def random_bytes(length):
|
|
return open("/dev/urandom", "rb").read(length)
|
|
|
|
def random_syllable():
|
|
return random.choice(PASSPHRASE_CONSONANTS) + random.choice(PASSPHRASE_VOWELS) + random.choice(PASSPHRASE_CONSONANTS)
|
|
|
|
def random_word(syllables=3):
|
|
parts = []
|
|
|
|
for _ in range(syllables):
|
|
parts.append(random_syllable())
|
|
|
|
return "".join(parts)
|
|
|
|
# ----------------------------------------------------------------
|
|
|
|
import hashlib
|
|
|
|
def hash_password(p, hexdigest=True):
|
|
h = hashlib.blake2b()
|
|
|
|
h.update(p.encode("utf-8"))
|
|
|
|
return h.hexdigest() if hexdigest else h.digest()
|
|
|
|
# ----------------------------------------------------------------
|
|
|
|
def raw_to_hex(raw, separator=" "):
|
|
"""
|
|
Converts a bytearray (or bytes) into its textual hexadecimal representation.
|
|
"""
|
|
|
|
output = []
|
|
|
|
for o in raw:
|
|
output.append(hex(o)[2:].zfill(2))
|
|
|
|
return separator.join(output)
|
|
|
|
def hex_to_raw(text, separator=" "):
|
|
"""
|
|
Converts a hexadecimal representation of a byte array into a bytearray.
|
|
"""
|
|
|
|
output = []
|
|
|
|
text = text.replace(separator, "")
|
|
|
|
for i in range(len(text)//2):
|
|
output.append(int(text[2*i:2*i+2], 16))
|
|
|
|
return bytearray(output)
|
|
|
|
# ----------------------------------------------------------------
|