summaryrefslogtreecommitdiff
path: root/src/leap/common/keymanager/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/leap/common/keymanager/__init__.py')
-rw-r--r--src/leap/common/keymanager/__init__.py116
1 files changed, 12 insertions, 104 deletions
diff --git a/src/leap/common/keymanager/__init__.py b/src/leap/common/keymanager/__init__.py
index 71aaddd..10acb36 100644
--- a/src/leap/common/keymanager/__init__.py
+++ b/src/leap/common/keymanager/__init__.py
@@ -27,114 +27,22 @@ except ImportError:
import json # noqa
-from abc import ABCMeta, abstractmethod
from u1db.errors import HTTPError
-#
-# Key types
-#
-
-class EncryptionKey(object):
- """
- Abstract class for encryption keys.
-
- A key is "validated" if the nicknym agent has bound the user address to a
- public key. Nicknym supports three different levels of key validation:
-
- * Level 3 - path trusted: A path of cryptographic signatures can be traced
- from a trusted key to the key under evaluation. By default, only the
- provider key from the user's provider is a "trusted key".
- * level 2 - provider signed: The key has been signed by a provider key for
- the same domain, but the provider key is not validated using a trust
- path (i.e. it is only registered)
- * level 1 - registered: The key has been encountered and saved, it has no
- signatures (that are meaningful to the nicknym agent).
- """
-
- __metaclass__ = ABCMeta
-
- def __init__(self, address, key_id=None, fingerprint=None,
- key_data=None, length=None, expiry_date=None,
- validation=None, first_seen_at=None,
- last_audited_at=None):
- self.address = address
- self.key_id = key_id
- self.fingerprint = fingerprint
- self.key_data = key_data
- self.length = length
- self.expiry_date = expiry_date
- self.validation = validation
- self.first_seen_at = first_seen_at
- self.last_audited_at = last_audited_at
-
- @abstractmethod
- def get_json(self):
- """
- Return a JSON string describing this key.
-
- @return: The JSON string describing this key.
- @rtype: str
- """
-
-
-#
-# Key wrappers
-#
-
-class KeyTypeWrapper(object):
- """
- Abstract class for Key Type Wrappers.
-
- A wrapper for a certain key type should know how to get and put keys in
- local storage using Soledad and also how to generate new keys.
- """
-
- __metaclass__ = ABCMeta
-
- @abstractmethod
- def get_key(self, address):
- """
- Get key from local storage.
-
- @param address: The address bound to the key.
- @type address: str
-
- @return: The key bound to C{address}.
- @rtype: EncryptionKey
- @raise KeyNotFound: If the key was not found on local storage.
- """
-
- @abstractmethod
- def put_key(self, key):
- """
- Put a key in local storage.
-
- @param key: The key to be stored.
- @type key: EncryptionKey
- """
-
- @abstractmethod
- def gen_key(self, address):
- """
- Generate a new key.
-
- @param address: The address bound to the key.
- @type address: str
- @return: The key bound to C{address}.
- @rtype: EncryptionKey
- """
-
-
-#
-# Key manager
-#
+from leap.common.keymanager.errors import (
+ KeyNotFound,
+ KeyAlreadyExists,
+)
+from leap.common.keymanager.openpgp import (
+ OpenPGPKey,
+ OpenPGPWrapper,
+)
-class KeyNotFound(Exception):
- """
- Raised when key was no found on keyserver.
- """
+wrapper_map = {
+ OpenPGPKey: OpenPGPWrapper(),
+}
class KeyManager(object):
@@ -195,7 +103,7 @@ class KeyManager(object):
except KeyNotFound:
key = filter(lambda k: isinstance(k, ktype),
self._fetch_keys(address))
- if key is None
+ if key is None:
raise KeyNotFound()
wrapper_map[ktype].put_key(key)
return key