### Samantha

##### Parameters known by Samantha:

Computes $v$ in the public key:

Computes the fingerprint and the ephemeral key:

Computes the signature of the message:

### Step y/x

Enter the message (or integer) that Samantha wants to sign:

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}^{*}$.

Samantha chooses the secret key $sk = s$ and computes $v$. She then sends the public key $pk = (p, g, v)$ to Victor.

Samantha computes the fingerprint $\mathcal{H}(m)$ of the message $m$ by using a public known hash function $\mathcal{H}$.

To compute the signature, which consists of the two values $\sigma_{1}$ and $\sigma_{2}$, she needs a random ephemeral key $e$ that is unique for this signature and its inverse $e^{-1}$.

She randomly choose a $1 \leq e \leq p-1$ until $\gcd(e, p-1) = 1$ and the inverse $e^{-1}$ is computed with the extended Euclidean algorithm.

Samantha computes the signature of the fingerprint $\mathcal{H}(m)$ which consists of the two values $\sigma_{1}$ and $\sigma_{2}$.

She then sends the message $m$ and the signature $(\sigma_{1}, \sigma_{2})$ to Victor.

Victor uses the same hash function $\mathcal{H}$ as Samantha to compute the fingerprint $\mathcal{H}(m)$ of the message $m$.

If nobody has tampered with the content of the message Victor gets the same fingerprint as Samantha.

Victor verifies the signature of the fingerprint $\mathcal{H}(m)$.

If the two computed values are equals, the message was signed by Samantha and nobody has tampered with the content of the message.

### Victor

##### Parameters known by Victor:

Receives the public key $pk = (p, g, v)$

Receives the signature $(\sigma_{1}, \sigma_{2})$ and the message $m$

Computes the fingerprint $\mathcal{H}(m)$:

Verifies the signature of the fingerprint: