/gdata/tlslite/SharedKeyDB.py
http://radioappz.googlecode.com/ · Python · 58 lines · 23 code · 7 blank · 28 comment · 2 complexity · 542ece8c3690716ac3b9ced5505a59a4 MD5 · raw file
- """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