mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-09 09:08:15 -06:00
Fix #2473: Switch to using a separate code path for py2 or py3
for the plaintext length indicator field. Py2.7 cannot encode code points > 128 so fall back to chr(code_point) without the "encode()" attribute when Python 2.x is detected. This does not change the existing decrypt/unpad code paths. So whatever is currently broken in the DB due to bug #2473 will remain broken.
This commit is contained in:
parent
11b85e5247
commit
21b75fe4dd
@ -1,6 +1,7 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
from Crypto.Cipher import AES, PKCS1_OAEP
|
from Crypto.Cipher import AES, PKCS1_OAEP
|
||||||
from Crypto.PublicKey import RSA
|
from Crypto.PublicKey import RSA
|
||||||
@ -399,10 +400,16 @@ class Secret(ChangeLoggedModel, CustomFieldModel):
|
|||||||
pad_length = 16 - ((len(s) + 2) % 16)
|
pad_length = 16 - ((len(s) + 2) % 16)
|
||||||
else:
|
else:
|
||||||
pad_length = 0
|
pad_length = 0
|
||||||
|
|
||||||
|
if sys.version_info[0] < 3:
|
||||||
|
b1 = chr(len(s) >> 8)
|
||||||
|
b2 = chr(len(s) % 256)
|
||||||
|
else:
|
||||||
|
b1 = chr(len(s) >> 8).encode('latin-1')
|
||||||
|
b2 = chr(len(s) % 256).encode('latin-1')
|
||||||
|
|
||||||
return (
|
return (
|
||||||
chr(len(s) >> 8).encode('latin-1') +
|
b1 + b2 + s +
|
||||||
chr(len(s) % 256).encode('latin-1') +
|
|
||||||
s +
|
|
||||||
os.urandom(pad_length)
|
os.urandom(pad_length)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user