summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorelie <elie>2005-06-27 07:46:22 +0000
committerelie <elie>2005-06-27 07:46:22 +0000
commitaf6648f5122af33c3690ac3e20d5a826fb8bfab7 (patch)
tree19cc39c71737babd3d3c9df68f4f0de900155633
parent0504c7a2debc00307dc8376d21c21ff106b55756 (diff)
downloadpysnmp-af6648f5122af33c3690ac3e20d5a826fb8bfab7.tar.gz
hashPassphrase() re-designed for performance
-rw-r--r--pysnmp/proto/secmod/rfc3414/localkey.py40
1 files changed, 15 insertions, 25 deletions
diff --git a/pysnmp/proto/secmod/rfc3414/localkey.py b/pysnmp/proto/secmod/rfc3414/localkey.py
index a5b923f..b699e8d 100644
--- a/pysnmp/proto/secmod/rfc3414/localkey.py
+++ b/pysnmp/proto/secmod/rfc3414/localkey.py
@@ -4,15 +4,21 @@ import md5
# RFC3414: A.2.1
def hashPassphrase(passphrase):
md = md5.new()
- passLen = len(passphrase)
- count = passIndex = 0
- while count < 1048575: # why rfc says 1048576?
- i = 0; passBuf = ''
- while i < 64:
- passBuf = passBuf + passphrase[passIndex % passLen]
- i = i + 1; passIndex = passIndex + 1;
- md.update(passBuf)
- count = count + 64
+ ringBuffer = passphrase * (64/len(passphrase)+1)
+ ringBufferLen = len(ringBuffer)
+ count = 0
+ mark = 0
+ while count < 16384:
+ e = mark + 64
+ if e < ringBufferLen:
+ md.update(ringBuffer[mark:e])
+ mark = e
+ else:
+ md.update(
+ ringBuffer[mark:ringBufferLen] + ringBuffer[0:e-ringBufferLen]
+ )
+ mark = e-ringBufferLen
+ count = count + 1
return md.digest()
def localizeKey(passKey, snmpEngineId):
@@ -20,19 +26,3 @@ def localizeKey(passKey, snmpEngineId):
def passwordToKeyMD5(passphrase, snmpEngineId):
return localizeKey(hashPassphrase(passphrase), snmpEngineId)
-
-# XXX
-# d, m = divmod(len(password))
-# prevM = count = 0
-# while count < 1048576:
-# i = 0
-# while i < 64:
-# md.update(password[prevM:] + password * (d-1) + \
-# password[:prevM] + password[prevM:prevM+m])
-# prevM = m
-
-#print map(lambda x: '%x' % ord(x), passwordToKeyMD5('maplesyrup', '\x00'*11+'\x02'))
-import string
-
-#print repr(passwordToKeyMD5('12345678', '\x80\x00\x07\xe5\x80<\x93eE\xdb_\x88B'))
-#print string.join(map(lambda x: x, passwordToKeyMD5('12345678', '\x80\x00\x07\xe5\x80<\x93eE\xdb_\x88B')), '')