Computes \( A \) in the public key:

Receives the ciphertext \( (c_{1}, c_{2}) \)

Computes \( x \) and \( x^{-1} \):

Decrypts the ciphertext:

Enter the message (a sentence) or key (an integer between 1 and 280) that Bob wants to send encrypted to Alice:

Hit **enter** to generate the parameters and use the
**left** and **right** arrow keys to navigate.

A trusted third party publish a prime number \( p \) and a generator \( g \) of the group \( \mathbb{Z}_{p}^{*} \).

Alice chooses the secret key \( sk = a \) and computes the public key \( pk = (p, g, A) \) which she sends to Bob.

The ciphertext of the message \( m \) consists of the two values \( c_{1} \) and \( c_{2} \).

To compute \( c_{1} \) Bob needs an random ephemeral key \( k \) that is unique for this encryption.

Before Bob can encrypt the message \( m \) he needs to convert each letter into its corresponding ASCII value.

Bob uses Alice's public key \( pk = (p, g, A) \) to encrypt the message \( m \).

He then sends the ciphertext \( (c_{1}, c_{2}) \) to Alice.

Alice needs the inverse of \( x \) to decrypt the ciphertext \( c_{2} \).

First Alice computes the value of \( x \) using \( c_{1} \) and the secret key \( sk = a \) and then she uses the extended Euclidean algorithm to compute the inverse \( x^{-1} \) of \( x \).

Alice uses \( x^{-1} \) to decrypt the received ciphertext from Bob.

Receives the public key \( pk = (p, g, A) \)

Computes the first value \( c_{1} \) of the ciphertext

Converts the letters into ASCII values:

Encrypts the message \( m \):