diff options
author | elie <elie> | 2005-06-27 07:46:22 +0000 |
---|---|---|
committer | elie <elie> | 2005-06-27 07:46:22 +0000 |
commit | af6648f5122af33c3690ac3e20d5a826fb8bfab7 (patch) | |
tree | 19cc39c71737babd3d3c9df68f4f0de900155633 | |
parent | 0504c7a2debc00307dc8376d21c21ff106b55756 (diff) | |
download | pysnmp-af6648f5122af33c3690ac3e20d5a826fb8bfab7.tar.gz |
hashPassphrase() re-designed for performance
-rw-r--r-- | pysnmp/proto/secmod/rfc3414/localkey.py | 40 |
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')), '') |