Rev445, Fix and test random fail in CryptMessage decrypt
This commit is contained in:
parent
8aa4e27938
commit
64e5e0c80e
3 changed files with 39 additions and 7 deletions
|
@ -1,13 +1,13 @@
|
||||||
import hashlib
|
import hashlib
|
||||||
import base64
|
import base64
|
||||||
import binascii
|
import struct
|
||||||
|
|
||||||
import lib.pybitcointools as btctools
|
import lib.pybitcointools as btctools
|
||||||
from util import ThreadPool
|
|
||||||
from Crypt import Crypt
|
from Crypt import Crypt
|
||||||
|
|
||||||
ecc_cache = {}
|
ecc_cache = {}
|
||||||
|
|
||||||
|
|
||||||
def eciesEncrypt(data, pubkey, ephemcurve=None, ciphername='aes-256-cbc'):
|
def eciesEncrypt(data, pubkey, ephemcurve=None, ciphername='aes-256-cbc'):
|
||||||
from lib import pyelliptic
|
from lib import pyelliptic
|
||||||
pubkey_openssl = toOpensslPublickey(base64.b64decode(pubkey))
|
pubkey_openssl = toOpensslPublickey(base64.b64decode(pubkey))
|
||||||
|
@ -32,7 +32,7 @@ def eciesDecryptMulti(encrypted_datas, privatekey):
|
||||||
try:
|
try:
|
||||||
text = eciesDecrypt(encrypted_data, privatekey).decode("utf8")
|
text = eciesDecrypt(encrypted_data, privatekey).decode("utf8")
|
||||||
texts.append(text)
|
texts.append(text)
|
||||||
except:
|
except Exception:
|
||||||
texts.append(None)
|
texts.append(None)
|
||||||
return texts
|
return texts
|
||||||
|
|
||||||
|
@ -41,9 +41,26 @@ def eciesDecrypt(encrypted_data, privatekey):
|
||||||
ecc_key = getEcc(privatekey)
|
ecc_key = getEcc(privatekey)
|
||||||
return ecc_key.decrypt(base64.b64decode(encrypted_data))
|
return ecc_key.decrypt(base64.b64decode(encrypted_data))
|
||||||
|
|
||||||
|
|
||||||
|
def decodePubkey(pubkey):
|
||||||
|
i = 0
|
||||||
|
curve = struct.unpack('!H', pubkey[i:i + 2])[0]
|
||||||
|
i += 2
|
||||||
|
tmplen = struct.unpack('!H', pubkey[i:i + 2])[0]
|
||||||
|
i += 2
|
||||||
|
pubkey_x = pubkey[i:i + tmplen]
|
||||||
|
i += tmplen
|
||||||
|
tmplen = struct.unpack('!H', pubkey[i:i + 2])[0]
|
||||||
|
i += 2
|
||||||
|
pubkey_y = pubkey[i:i + tmplen]
|
||||||
|
i += tmplen
|
||||||
|
return curve, pubkey_x, pubkey_y, i
|
||||||
|
|
||||||
|
|
||||||
def split(encrypted):
|
def split(encrypted):
|
||||||
iv = encrypted[0:16]
|
iv = encrypted[0:16]
|
||||||
ciphertext = encrypted[16 + 70:-32]
|
curve, pubkey_x, pubkey_y, i = decodePubkey(encrypted[16:])
|
||||||
|
ciphertext = encrypted[16 + i:-32]
|
||||||
|
|
||||||
return iv, ciphertext
|
return iv, ciphertext
|
||||||
|
|
||||||
|
|
|
@ -57,12 +57,12 @@ class TestCrypt:
|
||||||
assert decrypted != "hello"
|
assert decrypted != "hello"
|
||||||
|
|
||||||
# Decrypt using correct privatekey
|
# Decrypt using correct privatekey
|
||||||
decrypted = ui_websocket.testAction("EciesDecrypt", encrypted)
|
decrypted = ui_websocket.testAction("EciesDecrypt", encrypted)
|
||||||
assert decrypted == "hello"
|
assert decrypted == "hello"
|
||||||
|
|
||||||
# Decrypt incorrect text
|
# Decrypt incorrect text
|
||||||
decrypted = ui_websocket.testAction("EciesDecrypt", "baad")
|
decrypted = ui_websocket.testAction("EciesDecrypt", "baad")
|
||||||
assert decrypted == None
|
assert decrypted is None
|
||||||
|
|
||||||
# Decrypt batch
|
# Decrypt batch
|
||||||
decrypted = ui_websocket.testAction("EciesDecrypt", [encrypted, "baad", encrypted])
|
decrypted = ui_websocket.testAction("EciesDecrypt", [encrypted, "baad", encrypted])
|
||||||
|
@ -90,6 +90,21 @@ class TestCrypt:
|
||||||
ui_websocket.actionAesDecrypt(0, base64.b64encode(aes_iv), base64.b64encode(aes_encrypted), aes_key)
|
ui_websocket.actionAesDecrypt(0, base64.b64encode(aes_iv), base64.b64encode(aes_encrypted), aes_key)
|
||||||
assert ui_websocket.ws.getResult() == "hello"
|
assert ui_websocket.ws.getResult() == "hello"
|
||||||
|
|
||||||
|
def testEciesAesLongpubkey(self, ui_websocket):
|
||||||
|
privatekey = "5HwVS1bTFnveNk9EeGaRenWS1QFzLFb5kuncNbiY3RiHZrVR6ok"
|
||||||
|
|
||||||
|
ecies_encrypted, aes_key = ["lWiXfEikIjw1ac3J/RaY/gLKACALRUfksc9rXYRFyKDSaxhwcSFBYCgAdIyYlY294g/6VgAf/68PYBVMD3xKH1n7Zbo+ge8b4i/XTKmCZRJvy0eutMKWckYCMVcxgIYNa/ZL1BY1kvvH7omgzg1wBraoLfdbNmVtQgdAZ9XS8PwRy6OB2Q==", "Rvlf7zsMuBFHZIGHcbT1rb4If+YTmsWDv6kGwcvSeMM="]
|
||||||
|
|
||||||
|
# Decrypt using Ecies
|
||||||
|
ui_websocket.actionEciesDecrypt(0, ecies_encrypted, privatekey)
|
||||||
|
assert ui_websocket.ws.getResult() == "hello"
|
||||||
|
|
||||||
|
# Decrypt using AES
|
||||||
|
aes_iv, aes_encrypted = CryptMessage.split(base64.b64decode(ecies_encrypted))
|
||||||
|
|
||||||
|
ui_websocket.actionAesDecrypt(0, base64.b64encode(aes_iv), base64.b64encode(aes_encrypted), aes_key)
|
||||||
|
assert ui_websocket.ws.getResult() == "hello"
|
||||||
|
|
||||||
def testAes(self, ui_websocket):
|
def testAes(self, ui_websocket):
|
||||||
ui_websocket.actionAesEncrypt(0, "hello")
|
ui_websocket.actionAesEncrypt(0, "hello")
|
||||||
key, iv, encrypted = ui_websocket.ws.getResult()
|
key, iv, encrypted = ui_websocket.ws.getResult()
|
||||||
|
|
|
@ -13,7 +13,7 @@ class Config(object):
|
||||||
|
|
||||||
def __init__(self, argv):
|
def __init__(self, argv):
|
||||||
self.version = "0.7.1"
|
self.version = "0.7.1"
|
||||||
self.rev = 4411
|
self.rev = 4445
|
||||||
self.argv = argv
|
self.argv = argv
|
||||||
self.action = None
|
self.action = None
|
||||||
self.test_parser = None
|
self.test_parser = None
|
||||||
|
|
Loading…
Reference in a new issue