OLD | NEW |
| (Empty) |
1 """Class for storing shared keys.""" | |
2 | |
3 from utils.cryptomath import * | |
4 from utils.compat import * | |
5 from mathtls import * | |
6 from session import Session | |
7 from basedb import BaseDB | |
8 | |
9 class SharedKeyDB(BaseDB): | |
10 """This class represent an in-memory or on-disk database of shared | |
11 keys. | |
12 | |
13 A SharedKeyDB can be passed to a server handshake function to | |
14 authenticate a client based on one of the shared keys. | |
15 | |
16 This class is thread-safe. | |
17 """ | |
18 | |
19 def __init__(self, filename=None): | |
20 """Create a new SharedKeyDB. | |
21 | |
22 @type filename: str | |
23 @param filename: Filename for an on-disk database, or None for | |
24 an in-memory database. If the filename already exists, follow | |
25 this with a call to open(). To create a new on-disk database, | |
26 follow this with a call to create(). | |
27 """ | |
28 BaseDB.__init__(self, filename, "shared key") | |
29 | |
30 def _getItem(self, username, valueStr): | |
31 session = Session() | |
32 session._createSharedKey(username, valueStr) | |
33 return session | |
34 | |
35 def __setitem__(self, username, sharedKey): | |
36 """Add a shared key to the database. | |
37 | |
38 @type username: str | |
39 @param username: The username to associate the shared key with. | |
40 Must be less than or equal to 16 characters in length, and must | |
41 not already be in the database. | |
42 | |
43 @type sharedKey: str | |
44 @param sharedKey: The shared key to add. Must be less than 48 | |
45 characters in length. | |
46 """ | |
47 BaseDB.__setitem__(self, username, sharedKey) | |
48 | |
49 def _setItem(self, username, value): | |
50 if len(username)>16: | |
51 raise ValueError("username too long") | |
52 if len(value)>=48: | |
53 raise ValueError("shared key too long") | |
54 return value | |
55 | |
56 def _checkItem(self, value, username, param): | |
57 newSession = self._getItem(username, param) | |
58 return value.masterSecret == newSession.masterSecret | |
OLD | NEW |