Module jumpscale.data.nacl.jsnacl
Expand source code
import binascii
import nacl.utils
from nacl.public import PrivateKey, PublicKey, Box
from nacl.secret import SecretBox
from nacl.signing import SigningKey, VerifyKey
from nacl.exceptions import BadSignatureError
class NACL:
KEY_SIZE = 32
def __init__(self, private_key=None, symmetric_key=None):
"""Constructor for nacl object
Args:
private_key (bytes, optional): The private key used to sign and encrypt the data. Generated randomly if not given.
symmetric_key (bytes, optional): The key used for symmetric encryption. Generated randomly if not given.
"""
self.signing_key = SigningKey(private_key) if private_key else SigningKey.generate()
self.verify_key = self.signing_key.verify_key
self.private_key = self.signing_key.to_curve25519_private_key()
self.public_key = self.private_key.public_key
self.symmetric_key = nacl.utils.random(NACL.KEY_SIZE) if symmetric_key is None else symmetric_key
self.symmetric_box = SecretBox(self.symmetric_key)
def encrypt(self, message, reciever_public_key):
"""Encrypt the message to send to a receiver. (public key encryption)
Args:
message (bytes): The message to be encrypted.
reciever_public_key (bytes): The receiver's public key.
Returns:
bytes: The encrypted message
"""
return Box(self.private_key, PublicKey(reciever_public_key)).encrypt(message)
def decrypt(self, message, sender_public_key):
"""Decrypt a received message. (public key encryption)
Args:
message (bytes): The encrypted message.
sender_public_key (bytes): The public key of the sender.
Returns:
bytes: The decrypted message
"""
return Box(self.private_key, PublicKey(sender_public_key)).decrypt(message)
def encrypt_symmetric(self, message):
"""Encrypt the message to send to a receiver. (secret key encryption)
Args:
message (bytes): The message to be encrypted.
Returns:
bytes: The encrypted message
"""
return self.symmetric_box.encrypt(message)
def decrypt_symmetric(self, message, symmetric_key):
"""Decrypt the receiver message. (secret key encryption)
Args:
message (bytes): The message to be decrypted.
Returns:
bytes: The decrypted message
"""
return SecretBox(symmetric_key).decrypt(message)
def sign(self, message):
"""Sign the message and return the messsage and the signature.
Args:
message (bytes): The message to be signed
Returns:
bytes, bytes: The message and the signature.
"""
signed = self.signing_key.sign(message)
return message, signed.signature
def sign_hex(self, message):
"""Sign the message and return the messsage and the signature.
Args:
message (bytes): The message to be signed
Returns:
bytes: The message and the signature.
"""
signed = self.signing_key.sign(message)
signedhex = binascii.hexlify(signed.signature)
return signedhex
def verify(self, message, signature, verification_key):
"""Verify that the signature using the verification key
Args:
message (bytes): The received message.
signature (bytes): The recieved signature.
verification_key (bytes): The verification key.
Returns:
bool: True if the verification succeeds.
"""
try:
VerifyKey(verification_key).verify(message, signature)
return True
except BadSignatureError:
return False
def get_signing_seed(self):
"""Returns the signing seed (same as the private key).
Returns:
bytes: The 32-bit signing key.
"""
return bytes(self.signing_key._seed)
def get_verification_key(self):
"""Returns the verification key.
Returns:
bytes: The verification key.
"""
return bytes(self.verify_key)
def get_verify_key_hex(self):
return binascii.hexlify(self.verify_key.encode()).decode()
def get_public_key_hex(self):
return binascii.hexlify(self.public_key.encode()).decode()
def get_public_key(self):
"""Getter for the public key.
Returns:
bytes: The public key.
"""
return bytes(self.public_key)
def get_private_key(self):
"""Getter for the private key.
Returns:
bytes: The private key.
"""
return bytes(self.private_key)
def get_symmetric_key(self):
"""Getter for the symmetric key.
Returns:
bytes: The symmetric key.
"""
return bytes(self.symmetric_key)
Classes
class NACL (private_key=None, symmetric_key=None)
-
Constructor for nacl object
Args
private_key
:bytes
, optional- The private key used to sign and encrypt the data. Generated randomly if not given.
symmetric_key
:bytes
, optional- The key used for symmetric encryption. Generated randomly if not given.
Expand source code
class NACL: KEY_SIZE = 32 def __init__(self, private_key=None, symmetric_key=None): """Constructor for nacl object Args: private_key (bytes, optional): The private key used to sign and encrypt the data. Generated randomly if not given. symmetric_key (bytes, optional): The key used for symmetric encryption. Generated randomly if not given. """ self.signing_key = SigningKey(private_key) if private_key else SigningKey.generate() self.verify_key = self.signing_key.verify_key self.private_key = self.signing_key.to_curve25519_private_key() self.public_key = self.private_key.public_key self.symmetric_key = nacl.utils.random(NACL.KEY_SIZE) if symmetric_key is None else symmetric_key self.symmetric_box = SecretBox(self.symmetric_key) def encrypt(self, message, reciever_public_key): """Encrypt the message to send to a receiver. (public key encryption) Args: message (bytes): The message to be encrypted. reciever_public_key (bytes): The receiver's public key. Returns: bytes: The encrypted message """ return Box(self.private_key, PublicKey(reciever_public_key)).encrypt(message) def decrypt(self, message, sender_public_key): """Decrypt a received message. (public key encryption) Args: message (bytes): The encrypted message. sender_public_key (bytes): The public key of the sender. Returns: bytes: The decrypted message """ return Box(self.private_key, PublicKey(sender_public_key)).decrypt(message) def encrypt_symmetric(self, message): """Encrypt the message to send to a receiver. (secret key encryption) Args: message (bytes): The message to be encrypted. Returns: bytes: The encrypted message """ return self.symmetric_box.encrypt(message) def decrypt_symmetric(self, message, symmetric_key): """Decrypt the receiver message. (secret key encryption) Args: message (bytes): The message to be decrypted. Returns: bytes: The decrypted message """ return SecretBox(symmetric_key).decrypt(message) def sign(self, message): """Sign the message and return the messsage and the signature. Args: message (bytes): The message to be signed Returns: bytes, bytes: The message and the signature. """ signed = self.signing_key.sign(message) return message, signed.signature def sign_hex(self, message): """Sign the message and return the messsage and the signature. Args: message (bytes): The message to be signed Returns: bytes: The message and the signature. """ signed = self.signing_key.sign(message) signedhex = binascii.hexlify(signed.signature) return signedhex def verify(self, message, signature, verification_key): """Verify that the signature using the verification key Args: message (bytes): The received message. signature (bytes): The recieved signature. verification_key (bytes): The verification key. Returns: bool: True if the verification succeeds. """ try: VerifyKey(verification_key).verify(message, signature) return True except BadSignatureError: return False def get_signing_seed(self): """Returns the signing seed (same as the private key). Returns: bytes: The 32-bit signing key. """ return bytes(self.signing_key._seed) def get_verification_key(self): """Returns the verification key. Returns: bytes: The verification key. """ return bytes(self.verify_key) def get_verify_key_hex(self): return binascii.hexlify(self.verify_key.encode()).decode() def get_public_key_hex(self): return binascii.hexlify(self.public_key.encode()).decode() def get_public_key(self): """Getter for the public key. Returns: bytes: The public key. """ return bytes(self.public_key) def get_private_key(self): """Getter for the private key. Returns: bytes: The private key. """ return bytes(self.private_key) def get_symmetric_key(self): """Getter for the symmetric key. Returns: bytes: The symmetric key. """ return bytes(self.symmetric_key)
Class variables
var KEY_SIZE
Methods
def decrypt(self, message, sender_public_key)
-
Decrypt a received message. (public key encryption)
Args
message
:bytes
- The encrypted message.
sender_public_key
:bytes
- The public key of the sender.
Returns
bytes
- The decrypted message
Expand source code
def decrypt(self, message, sender_public_key): """Decrypt a received message. (public key encryption) Args: message (bytes): The encrypted message. sender_public_key (bytes): The public key of the sender. Returns: bytes: The decrypted message """ return Box(self.private_key, PublicKey(sender_public_key)).decrypt(message)
def decrypt_symmetric(self, message, symmetric_key)
-
Decrypt the receiver message. (secret key encryption)
Args
message
:bytes
- The message to be decrypted.
Returns
bytes
- The decrypted message
Expand source code
def decrypt_symmetric(self, message, symmetric_key): """Decrypt the receiver message. (secret key encryption) Args: message (bytes): The message to be decrypted. Returns: bytes: The decrypted message """ return SecretBox(symmetric_key).decrypt(message)
def encrypt(self, message, reciever_public_key)
-
Encrypt the message to send to a receiver. (public key encryption)
Args
message
:bytes
- The message to be encrypted.
reciever_public_key
:bytes
- The receiver's public key.
Returns
bytes
- The encrypted message
Expand source code
def encrypt(self, message, reciever_public_key): """Encrypt the message to send to a receiver. (public key encryption) Args: message (bytes): The message to be encrypted. reciever_public_key (bytes): The receiver's public key. Returns: bytes: The encrypted message """ return Box(self.private_key, PublicKey(reciever_public_key)).encrypt(message)
def encrypt_symmetric(self, message)
-
Encrypt the message to send to a receiver. (secret key encryption)
Args
message
:bytes
- The message to be encrypted.
Returns
bytes
- The encrypted message
Expand source code
def encrypt_symmetric(self, message): """Encrypt the message to send to a receiver. (secret key encryption) Args: message (bytes): The message to be encrypted. Returns: bytes: The encrypted message """ return self.symmetric_box.encrypt(message)
def get_private_key(self)
-
Getter for the private key.
Returns
bytes
- The private key.
Expand source code
def get_private_key(self): """Getter for the private key. Returns: bytes: The private key. """ return bytes(self.private_key)
def get_public_key(self)
-
Getter for the public key.
Returns
bytes
- The public key.
Expand source code
def get_public_key(self): """Getter for the public key. Returns: bytes: The public key. """ return bytes(self.public_key)
def get_public_key_hex(self)
-
Expand source code
def get_public_key_hex(self): return binascii.hexlify(self.public_key.encode()).decode()
def get_signing_seed(self)
-
Returns the signing seed (same as the private key).
Returns
bytes
- The 32-bit signing key.
Expand source code
def get_signing_seed(self): """Returns the signing seed (same as the private key). Returns: bytes: The 32-bit signing key. """ return bytes(self.signing_key._seed)
def get_symmetric_key(self)
-
Getter for the symmetric key.
Returns
bytes
- The symmetric key.
Expand source code
def get_symmetric_key(self): """Getter for the symmetric key. Returns: bytes: The symmetric key. """ return bytes(self.symmetric_key)
def get_verification_key(self)
-
Returns the verification key.
Returns
bytes
- The verification key.
Expand source code
def get_verification_key(self): """Returns the verification key. Returns: bytes: The verification key. """ return bytes(self.verify_key)
def get_verify_key_hex(self)
-
Expand source code
def get_verify_key_hex(self): return binascii.hexlify(self.verify_key.encode()).decode()
def sign(self, message)
-
Sign the message and return the messsage and the signature.
Args
message
:bytes
- The message to be signed
Returns
bytes, bytes
- The message and the signature.
Expand source code
def sign(self, message): """Sign the message and return the messsage and the signature. Args: message (bytes): The message to be signed Returns: bytes, bytes: The message and the signature. """ signed = self.signing_key.sign(message) return message, signed.signature
def sign_hex(self, message)
-
Sign the message and return the messsage and the signature.
Args
message
:bytes
- The message to be signed
Returns
bytes
- The message and the signature.
Expand source code
def sign_hex(self, message): """Sign the message and return the messsage and the signature. Args: message (bytes): The message to be signed Returns: bytes: The message and the signature. """ signed = self.signing_key.sign(message) signedhex = binascii.hexlify(signed.signature) return signedhex
def verify(self, message, signature, verification_key)
-
Verify that the signature using the verification key
Args
message
:bytes
- The received message.
signature
:bytes
- The recieved signature.
verification_key
:bytes
- The verification key.
Returns
bool
- True if the verification succeeds.
Expand source code
def verify(self, message, signature, verification_key): """Verify that the signature using the verification key Args: message (bytes): The received message. signature (bytes): The recieved signature. verification_key (bytes): The verification key. Returns: bool: True if the verification succeeds. """ try: VerifyKey(verification_key).verify(message, signature) return True except BadSignatureError: return False