Onionr/static-data/official-plugins/wot/wot/crypto/encryption.py

63 lines
1.8 KiB
Python

from typing import TYPE_CHECKING, Union
from ..identity import Identity
import result
import nacl.exceptions
import nacl.public
import nacl.utils
@result.as_result(nacl.exceptions.CryptoError, AttributeError)
def encrypt_to_identity_anonymously(
identity: 'Identity',
message: Union[bytes, str]) -> nacl.utils.EncryptedMessage:
their_public_key = identity.key.to_curve25519_public_key()
box = nacl.public.SealedBox(their_public_key)
try:
message = message.encode('utf-8')
except AttributeError:
pass
return box.encrypt(message)
@result.as_result(nacl.exceptions.CryptoError, AttributeError)
def decrypt_from_identity_anonymously(
our_identity: 'Identity', message: bytes) -> bytes:
our_private_key = our_identity.private_key.to_curve25519_private_key()
box = nacl.public.SealedBox(our_private_key)
return box.decrypt(message)
@result.as_result(nacl.exceptions.CryptoError, AttributeError)
def encrypt_to_identity(
our_identity: 'Identity',
identity: 'Identity',
message: Union[bytes, str]) -> nacl.utils.EncryptedMessage:
our_private_key = our_identity.private_key.to_curve25519_private_key()
their_public_key = identity.key.to_curve25519_public_key()
box = nacl.public.Box(our_private_key, their_public_key)
try:
message = message.encode('utf-8')
except AttributeError:
pass
return box.encrypt(message)
@result.as_result(nacl.exceptions.CryptoError, AttributeError)
def decrypt_from_identity(
our_identity: 'Identity',
identity: 'Identity',
message: bytes) -> bytes:
our_private_key = our_identity.private_key.to_curve25519_private_key()
their_public_key = identity.key.to_curve25519_public_key()
box = nacl.public.Box(our_private_key, their_public_key)
return box.decrypt(message)