faset over fra Z3950 til google books
This commit is contained in:
58
python/gdata/tlslite/SharedKeyDB.py
Normal file
58
python/gdata/tlslite/SharedKeyDB.py
Normal file
@@ -0,0 +1,58 @@
|
||||
"""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
|
Reference in New Issue
Block a user