Factory

The “factory” is responsible for managing Crypto providers. It is available within the Crypto-Factory interface through the services property.

Its principal duties are:

  • register and initialize Crypto services through their associated builders.
  • get a Crypto service to provide implementation of an interface method (encrypt/decrypt).
  • maintain index of active Crypto providers and associated tags.
  • provide helpers to list built-in providers, and get active service details.

Usage:

Helpers for built-in providers:

>>> cf.services._builtins                               
{'AESServiceBuilder': <class '...AESServiceBuilder'>,
 'DummyServiceBuilder': <class '...DummyServiceBuilder'>,
 'FernetServiceBuilder': <class '...FernetServiceBuilder'>}
>>> help(cf.services._builtins.FernetServiceBuilder)    
Help on class FernetServiceBuilder in module crypto_factory.providers:
...

Crypto provider registration:

>>> cf.services.register(config={'key' : b'...='}, sid='fernet',
...                      builder='FernetServiceBuilder', tag='FERNET')
>>> # or
>>> conf_Fernet = {'id'      : 'fernet',
...                'builder': 'FernetServiceBuilder',
...                'tag'     : 'FERNET',
...                'key'     : b'...=',
...                }
>>> cf.services.register(conf_Fernet)

Index of active providers:

>>> cf.services.providers
{'fernet':
  {'id': 'fernet',
   'builder': <FernetServiceBuilder object at 0x...>,
   'tag': 'FERNET'}, ...
}
>>> cf.services.providers.fernet.tag
'FERNET'
>>> cf.services.providers.fernet.builder.args_in_fct
['key']
>>> cf.services.providers.fernet.builder.features
['decrypt', 'encrypt']

Index of tags:

>>> cf.services.tags
{'FERNET': {'id': 'fernet}, ...}

Deregister a provider:

>>> cf.services.register(sid='fernet')
>>> cf.services.providers.fernet
{'id': 'fernet', 'builder': None, 'tag': None}

For details, check relative API documentation.