(password, key_len, iv_len)
| 45 | |
| 46 | |
| 47 | def EVP_BytesToKey(password, key_len, iv_len): |
| 48 | # equivalent to OpenSSL's EVP_BytesToKey() with count 1 |
| 49 | # so that we make the same key and iv as nodejs version |
| 50 | cached_key = '%s-%d-%d' % (password, key_len, iv_len) |
| 51 | r = cached_keys.get(cached_key, None) |
| 52 | if r: |
| 53 | return r |
| 54 | m = [] |
| 55 | i = 0 |
| 56 | while len(b''.join(m)) < (key_len + iv_len): |
| 57 | md5 = hashlib.md5() |
| 58 | data = password |
| 59 | if i > 0: |
| 60 | data = m[i - 1] + password |
| 61 | md5.update(data) |
| 62 | m.append(md5.digest()) |
| 63 | i += 1 |
| 64 | ms = b''.join(m) |
| 65 | key = ms[:key_len] |
| 66 | iv = ms[key_len:key_len + iv_len] |
| 67 | cached_keys[cached_key] = (key, iv) |
| 68 | return key, iv |
| 69 | |
| 70 | |
| 71 | class Encryptor(object): |
no test coverage detected