Class to manage creation and maintenance of keys and biscuits.
| 14 | #### SXT KEY MANAGER |
| 15 | #### |
| 16 | class SXTKeyManager(): |
| 17 | """Class to manage creation and maintenance of keys and biscuits.""" |
| 18 | |
| 19 | biscuits:list = [] |
| 20 | logger:logging.Logger = None |
| 21 | warning_for_biscuit_length = 1800 |
| 22 | keychange_callback_func_list = [] |
| 23 | __pv:bytes = bytes(''.encode()) |
| 24 | __pb:bytes = bytes(''.encode()) |
| 25 | __en:SXTKeyEncodings = SXTKeyEncodings.HEX |
| 26 | ENCODINGS = SXTKeyEncodings |
| 27 | |
| 28 | |
| 29 | def __init__(self, private_key:str = None, new_keypair: bool = False, encoding:SXTKeyEncodings = None, keychange_callback_func = None, logger:logging.Logger = None) -> None: |
| 30 | """Class to manage creation and maintenance of keys and biscuits.""" |
| 31 | if logger: |
| 32 | self.logger = logger |
| 33 | else: |
| 34 | self.logger = logging.getLogger() |
| 35 | self.logger.setLevel(logging.INFO) |
| 36 | if len(self.logger.handlers) == 0: |
| 37 | self.logger.addHandler( logging.StreamHandler() ) |
| 38 | self.logger.info('new SXT KeyManager initiated') |
| 39 | self.keychange_callback_func_list = [] |
| 40 | if keychange_callback_func: self.add_keychange_callback(keychange_callback_func) |
| 41 | |
| 42 | if encoding: self.encoding = encoding |
| 43 | if new_keypair: |
| 44 | self.new_keypair() |
| 45 | return None |
| 46 | if private_key: self.private_key = private_key |
| 47 | return None |
| 48 | |
| 49 | |
| 50 | def __str__(self): |
| 51 | flds = self.__keydict__() |
| 52 | flds['private_key'] = flds['private_key'][:6]+'...' |
| 53 | return '\n'.join( [ f'\t{n} = {v}' for n,v in flds.items() ] ) |
| 54 | |
| 55 | def __repr__(self): |
| 56 | return '\n'.join( [ f'\t{n} = {v}' for n,v in self.__keydict__().items() ] ) |
| 57 | |
| 58 | def __keydict__(self, keychanged:str = None) -> dict: |
| 59 | rtn = {'private_key': self.private_key, |
| 60 | 'public_key': self.public_key, |
| 61 | 'encoding': self.encoding.name } |
| 62 | if keychanged: rtn['key_changed'] = keychanged |
| 63 | return rtn |
| 64 | |
| 65 | def __callback__(self, keychanged:str ) -> None: |
| 66 | for func in self.keychange_callback_func_list: |
| 67 | func( self.__keydict__(keychanged) ) |
| 68 | |
| 69 | @property |
| 70 | def private_key(self): |
| 71 | return self.convert_key(self.__pv, SXTKeyEncodings.BYTES, self.encoding) |
| 72 | @private_key.setter |
| 73 | def private_key(self, value): |
no outgoing calls