diff --git a/src/helper_ackPayload.py b/src/helper_ackPayload.py index d30f4c0d..1c5ddf98 100644 --- a/src/helper_ackPayload.py +++ b/src/helper_ackPayload.py @@ -22,26 +22,26 @@ def genAckPayload(streamNumber=1, stealthLevel=0): - level 1: a getpubkey request for a (random) dummy key hash - level 2: a standard message, encrypted to a random pubkey """ - if stealthLevel == 2: # Generate privacy-enhanced payload + if stealthLevel == 2: # Generate privacy-enhanced payload # Generate a dummy privkey and derive the pubkey dummyPubKeyHex = highlevelcrypto.privToPub( - hexlify(helper_random.randomBytes(32))) + hexlify(highlevelcrypto.randomBytes(32))) # Generate a dummy message of random length # (the smallest possible standard-formatted message is 234 bytes) - dummyMessage = helper_random.randomBytes( + dummyMessage = highlevelcrypto.randomBytes( helper_random.randomrandrange(234, 801)) # Encrypt the message using standard BM encryption (ECIES) ackdata = highlevelcrypto.encrypt(dummyMessage, dummyPubKeyHex) acktype = 2 # message version = 1 - elif stealthLevel == 1: # Basic privacy payload (random getpubkey) - ackdata = helper_random.randomBytes(32) + elif stealthLevel == 1: # Basic privacy payload (random getpubkey) + ackdata = highlevelcrypto.randomBytes(32) acktype = 0 # getpubkey version = 4 else: # Minimum viable payload (non stealth) - ackdata = helper_random.randomBytes(32) + ackdata = highlevelcrypto.randomBytes(32) acktype = 2 # message version = 1 diff --git a/src/helper_random.py b/src/helper_random.py index 2e6a151b..e6da707e 100644 --- a/src/helper_random.py +++ b/src/helper_random.py @@ -1,12 +1,7 @@ """Convenience functions for random operations. Not suitable for security / cryptography operations.""" -import os import random -try: - from pyelliptic.openssl import OpenSSL -except ImportError: - from .pyelliptic.openssl import OpenSSL NoneType = type(None) @@ -16,14 +11,6 @@ def seed(): random.seed() -def randomBytes(n): - """Method randomBytes.""" - try: - return os.urandom(n) - except NotImplementedError: - return OpenSSL.rand(n) - - def randomshuffle(population): """Method randomShuffle. diff --git a/src/highlevelcrypto.py b/src/highlevelcrypto.py index a52ac77f..2604594e 100644 --- a/src/highlevelcrypto.py +++ b/src/highlevelcrypto.py @@ -8,6 +8,7 @@ High level cryptographic functions based on `.pyelliptic` OpenSSL bindings. """ import hashlib +import os from binascii import hexlify import pyelliptic @@ -17,7 +18,8 @@ from pyelliptic import arithmetic as a __all__ = [ 'decodeWalletImportFormat', 'encodeWalletImportFormat', - 'encrypt', 'makeCryptor', 'pointMult', 'privToPub', 'sign', 'verify'] + 'encrypt', 'makeCryptor', 'pointMult', 'privToPub', 'randomBytes', + 'sign', 'verify'] # WIF (uses arithmetic ): @@ -49,6 +51,16 @@ def encodeWalletImportFormat(privKey): return a.changebase(privKey + checksum, 256, 58) +# Random + +def randomBytes(n): + """Get n random bytes""" + try: + return os.urandom(n) + except NotImplementedError: + return OpenSSL.rand(n) + + def makeCryptor(privkey, curve='secp256k1'): """Return a private `.pyelliptic.ECC` instance""" private_key = a.changebase(privkey, 16, 256, minlen=32) diff --git a/src/network/tcp.py b/src/network/tcp.py index 0bfde3bb..2d0b26fa 100644 --- a/src/network/tcp.py +++ b/src/network/tcp.py @@ -16,7 +16,7 @@ import l10n import protocol import state from bmconfigparser import config -from helper_random import randomBytes +from highlevelcrypto import randomBytes from inventory import Inventory from queues import invQueue, receiveDataQueue, UISignalQueue from tr import _translate