|
8 | 8 | from pysnmp.proto.secmod.rfc3414.priv import base |
9 | 9 | from pysnmp.proto.secmod.rfc3414.auth import hmacmd5, hmacsha |
10 | 10 | from pysnmp.proto.secmod.rfc3414 import localkey |
| 11 | +from pysnmp.proto.secmod.rfc7860.auth import hmacsha2 |
11 | 12 | from pysnmp.proto import errind, error |
12 | 13 | from pyasn1.type import univ |
13 | 14 | from pyasn1.compat.octets import null |
@@ -43,31 +44,30 @@ class Des3(base.AbstractEncryptionService): |
43 | 44 |
|
44 | 45 | def hashPassphrase(self, authProtocol, privKey): |
45 | 46 | if authProtocol == hmacmd5.HmacMd5.serviceID: |
46 | | - return localkey.hashPassphraseMD5(privKey) |
| 47 | + hashAlgo = md5 |
47 | 48 | elif authProtocol == hmacsha.HmacSha.serviceID: |
48 | | - return localkey.hashPassphraseSHA(privKey) |
| 49 | + hashAlgo = sha1 |
| 50 | + elif authProtocol in hmacsha2.HmacSha2.hashAlgo: |
| 51 | + hashAlgo = hmacsha2.HmacSha2.hashAlgo[authProtocol] |
49 | 52 | else: |
50 | 53 | raise error.ProtocolError( |
51 | 54 | 'Unknown auth protocol %s' % (authProtocol,) |
52 | 55 | ) |
| 56 | + return localkey.hashPassphrase(privKey, hashAlgo) |
53 | 57 |
|
54 | 58 | # 2.1 |
55 | 59 | def localizeKey(self, authProtocol, privKey, snmpEngineID): |
56 | 60 | if authProtocol == hmacmd5.HmacMd5.serviceID: |
57 | | - localPrivKey = localkey.localizeKeyMD5(privKey, snmpEngineID) |
58 | | - # now extend this key if too short by repeating steps that includes the hashPassphrase step |
59 | | - while len(localPrivKey) < self.keySize: |
60 | | - newKey = localkey.hashPassphraseMD5(localPrivKey) |
61 | | - localPrivKey += localkey.localizeKeyMD5(newKey, snmpEngineID) |
| 61 | + hashAlgo = md5 |
62 | 62 | elif authProtocol == hmacsha.HmacSha.serviceID: |
63 | | - localPrivKey = localkey.localizeKeySHA(privKey, snmpEngineID) |
64 | | - while len(localPrivKey) < self.keySize: |
65 | | - newKey = localkey.hashPassphraseSHA(localPrivKey) |
66 | | - localPrivKey += localkey.localizeKeySHA(newKey, snmpEngineID) |
| 63 | + hashAlgo = sha1 |
| 64 | + elif authProtocol in hmacsha2.HmacSha2.hashAlgo: |
| 65 | + hashAlgo = hmacsha2.HmacSha2.hashAlgo[authProtocol] |
67 | 66 | else: |
68 | 67 | raise error.ProtocolError( |
69 | 68 | 'Unknown auth protocol %s' % (authProtocol,) |
70 | 69 | ) |
| 70 | + localPrivKey = localkey.localizeKey(privKey, snmpEngineID, hashAlgo) |
71 | 71 | return localPrivKey[:self.keySize] |
72 | 72 |
|
73 | 73 | # 5.1.1.1 |
|
0 commit comments