elgamal.elgamal_additive module¶
Base implementation of the Asymmetric Encryption Scheme known as additive ElGamal.
- class elgamal.elgamal_additive.ElGamalAdditive(public_key, secret_key, share_secret_key=False, debug=False)[source]¶
Bases:
ElGamalBase
[ElGamalAdditiveCiphertext
]Construct ElGamalAdditive encryption scheme that is additively homomorphic.
- CipherTextConstructor¶
alias of
ElGamalAdditiveCiphertext
- __init__(public_key, secret_key, share_secret_key=False, debug=False)[source]¶
Construct a new additively homomorphic ElGamal encryption scheme with the given keypair.
- Parameters:
public_key (
ElGamalPublicKey
) – Public key for this ElGamalAdditive scheme.secret_key (
ElGamalSecretKey
|None
) – Optional Secret Key for this ElGamalAdditive scheme (None when unknown).share_secret_key (
bool
) – Boolean value stating whether or not the secret key should be included in serialization. This should only be set to True if one is really sure of it.debug (
bool
) – flag to determine whether debug information should be displayed.
- add(ciphertext_1, ciphertext_2)[source]¶
Secure addition.
If ciphertext_2 is another ElGamalAdditiveCiphertext, add the underlying plaintext value of ciphertext_1 to the underlying plaintext value of ciphertext_2. If it is a Plaintext, add the plaintext value to the underlying value of ciphertext_1.
The resulting ciphertext is fresh only if at least one of the inputs was fresh. Both inputs are marked as non-fresh after the operation.
- Parameters:
ciphertext_1 (
ElGamalAdditiveCiphertext
) – ElGamalAdditiveCiphertext of which the underlying plaintext is added.ciphertext_2 (
ElGamalAdditiveCiphertext
|int
) – Either an ElGamalAdditiveCiphertext of which the underlying plaintext is used for addition or a Plaintext that is used for addition.
- Raises:
AttributeError – When ciphertext does not have the same public key as this ciphertext object.
- Return type:
- Returns:
An ElGamalAdditiveCiphertext containing the encryption of the addition.
- decode(encoded_plaintext)[source]¶
Decode an EncodedPlaintext using Pollard’s rho algorithm for discrete logarithms.
- Parameters:
encoded_plaintext (
EncodedPlaintext
[int
]) – Encoded plaintext to be decoded.- Raises:
ValueError – When ciphertext cannot be decoded because it is out of range.
- Return type:
int
- Returns:
Decoded plaintext value.
- static deserialize(obj, *, origin=None, **_kwargs)[source]¶
Deserialization function for ElGamalAdditive schemes, which will be passed to the communication module.
- Parameters:
obj (
SerializedElGamalBase
) – serialized version of a ElGamalAdditive scheme.origin (
HTTPClient
|None
) – HTTPClient representing where the message came from if applicable**_kwargs (
Any
) – optional extra keyword arguments
- Raises:
SerializationError – When communication library is not installed.
ValueError – When a scheme is sent through ID without any prior communication of the scheme
- Return type:
- Returns:
Deserialized ElGamalAdditive scheme from the given dict. Might not have a secret key when that was not included in the received serialization.
- encode(plaintext)[source]¶
Encode message $m$ (int) as $g^m mod p$ (int).
- Parameters:
plaintext (
int
) – Plaintext to be encoded.- Raises:
ValueError – If the plaintext is outside the supported range of this ElGamal scheme.
- Return type:
EncodedPlaintext
[int
]- Returns:
EncodedPlaintext object containing the encoded value.
- mul(ciphertext, scalar)[source]¶
Multiply the underlying plaintext value of this ciphertext with a scalar.
The resulting ciphertext is fresh only if the original ciphertext was fresh. The original ciphertext is marked as non-fresh after the operation.
- Parameters:
ciphertext (
ElGamalAdditiveCiphertext
) – ElGamalAdditiveCiphertext of which the underlying plaintext is multiplied.scalar (
int
) – A scalar with which the plaintext underlying this ciphertext should be multiplied.
- Raises:
TypeError – When the scalar is not an integer.
- Return type:
- Returns:
ElGamalAdditiveCiphertext containing the encryption of the product.
- neg(ciphertext)[source]¶
Negate the underlying plaintext of this ciphertext.
The resulting ciphertext is fresh only if the original ciphertext was fresh. The original ciphertext is marked as non-fresh after the operation.
- Parameters:
ciphertext (
ElGamalAdditiveCiphertext
) – ElGamalAdditiveCiphertext of which the underlying plaintext should be negated.- Return type:
- Returns:
ElGamalAdditiveCiphertext object corresponding to the negated plaintext.
- class elgamal.elgamal_additive.ElGamalAdditiveCiphertext(raw_value, scheme, fresh=False)[source]¶
Bases:
ElGamalBaseCipherText
Ciphertext for the ElGamal encryption scheme that is additively homomorphic.
- static deserialize(obj, **_kwargs)[source]¶
Deserialization function for ElGamalAdditive ciphertexts, which will be passed to the communication module.
- Parameters:
obj (
SerializedElGamalBaseCipherText
) – serialized version of a ElGamalAdditiveCipherText.**_kwargs (
Any
) – Optional extra keyword arguments.
- Raises:
SerializationError – When communication library is not installed.
- Return type:
- Returns:
Deserialized ElGamalAdditiveCiphertext from the given dict.
- scheme:
ElGamalAdditive
¶