Viewing file: SharedKeyDB.py (1.87 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
"""Class for storing shared keys."""
from utils.cryptomath import * from utils.compat import * from mathtls import * from Session import Session from BaseDB import BaseDB
class SharedKeyDB(BaseDB): """This class represent an in-memory or on-disk database of shared keys.
A SharedKeyDB can be passed to a server handshake function to authenticate a client based on one of the shared keys.
This class is thread-safe. """
def __init__(self, filename=None): """Create a new SharedKeyDB.
@type filename: str @param filename: Filename for an on-disk database, or None for an in-memory database. If the filename already exists, follow this with a call to open(). To create a new on-disk database, follow this with a call to create(). """ BaseDB.__init__(self, filename, "shared key")
def _getItem(self, username, valueStr): session = Session() session._createSharedKey(username, valueStr) return session
def __setitem__(self, username, sharedKey): """Add a shared key to the database.
@type username: str @param username: The username to associate the shared key with. Must be less than or equal to 16 characters in length, and must not already be in the database.
@type sharedKey: str @param sharedKey: The shared key to add. Must be less than 48 characters in length. """ BaseDB.__setitem__(self, username, sharedKey)
def _setItem(self, username, value): if len(username)>16: raise ValueError("username too long") if len(value)>=48: raise ValueError("shared key too long") return value
def _checkItem(self, value, username, param): newSession = self._getItem(username, param) return value.masterSecret == newSession.masterSecret
|