50 lines
1.3 KiB
Python
50 lines
1.3 KiB
Python
|
import hashlib
|
||
|
import json
|
||
|
import uuid
|
||
|
from random import randint
|
||
|
from secrets import choice
|
||
|
from string import ascii_letters, digits
|
||
|
|
||
|
from configuration import Configuration
|
||
|
|
||
|
|
||
|
class Credentials:
|
||
|
def __init__(self):
|
||
|
with open(Configuration().get_keyfilename(), mode="r+") as keydata:
|
||
|
self.keys = json.load(keydata)
|
||
|
|
||
|
def get_keys(self):
|
||
|
return self.keys
|
||
|
|
||
|
def add_key(self, service, username, password):
|
||
|
|
||
|
pass
|
||
|
|
||
|
def get_key_by_service(self, service):
|
||
|
return self.keys[service]
|
||
|
|
||
|
@staticmethod
|
||
|
def gen_password(mn=12, mx=64):
|
||
|
return [
|
||
|
''.join(choice(ascii_letters + digits)
|
||
|
for _ in range(randint(mn, mx)))
|
||
|
]
|
||
|
|
||
|
@staticmethod
|
||
|
def hash_password(password):
|
||
|
salt = uuid.uuid4().hex
|
||
|
return hashlib.sha512(
|
||
|
salt.encode() + password.encode()).hexdigest() + ':' + salt
|
||
|
|
||
|
@staticmethod
|
||
|
def check_password(hashed_password, user_password):
|
||
|
password, salt = hashed_password.split(':')
|
||
|
return password == hashlib.sha512(
|
||
|
salt.encode() + user_password.encode()).hexdigest()
|
||
|
|
||
|
@staticmethod
|
||
|
def dsa_encode(password):
|
||
|
hash_object = hashlib.new('DSA')
|
||
|
hash_object.update(password)
|
||
|
return hash_object.h
|