BeeCrypt 4.2.1
elgamal.h File Reference

ElGamal algorithm. More...

Include dependency graph for elgamal.h:

Go to the source code of this file.

Functions

int elgv1sign (const mpbarrett *p, const mpbarrett *n, const mpnumber *g, randomGeneratorContext *, const mpnumber *hm, const mpnumber *x, mpnumber *r, mpnumber *s)
 This function performs raw ElGamal signing, variant 1.
 
int elgv3sign (const mpbarrett *p, const mpbarrett *n, const mpnumber *g, randomGeneratorContext *, const mpnumber *hm, const mpnumber *x, mpnumber *r, mpnumber *s)
 This function performs raw ElGamal signing, variant 3.
 
int elgv1vrfy (const mpbarrett *p, const mpbarrett *n, const mpnumber *g, const mpnumber *hm, const mpnumber *y, const mpnumber *r, const mpnumber *s)
 This function performs raw ElGamal verification, variant 1.
 
int elgv3vrfy (const mpbarrett *p, const mpbarrett *n, const mpnumber *g, const mpnumber *hm, const mpnumber *y, const mpnumber *r, const mpnumber *s)
 This function performs raw ElGamal verification, variant 3.
 

Detailed Description

ElGamal algorithm.

For more information on this algorithm, see: "Handbook of Applied Cryptography", 11.5.2: "The ElGamal signature scheme", p. 454-459

Two of the signature variants in Note 11.70 are implemented.

Todo
Implement ElGamal encryption and decryption.
Todo
Explore the possibility of using simultaneous multiple exponentiation, as described in HAC, 14.87 (iii).
Author
Bob Deblier bob.d.nosp@m.ebli.nosp@m.er@te.nosp@m.lene.nosp@m.t.be

Function Documentation

◆ elgv1sign()

int elgv1sign ( const mpbarrett * p,
const mpbarrett * n,
const mpnumber * g,
randomGeneratorContext * rgc,
const mpnumber * hm,
const mpnumber * x,
mpnumber * r,
mpnumber * s )

This function performs raw ElGamal signing, variant 1.

Signing equations:

  • $r=g^{k}\ \textrm{mod}\ p$
  • $s=k^{-1}(h(m)-xr)\ \textrm{mod}\ (p-1)$
Parameters
pThe prime.
nThe reducer mod (p-1).
gThe generator.
rgcThe pseudo-random generat
hmThe hash to be signed.
xThe private key value.
rThe signature's r value.
sThe signature's s value.
Return values
0on success.
-1on failure.

References BEECRYPTAPI.

◆ elgv1vrfy()

int elgv1vrfy ( const mpbarrett * p,
const mpbarrett * n,
const mpnumber * g,
const mpnumber * hm,
const mpnumber * y,
const mpnumber * r,
const mpnumber * s )

This function performs raw ElGamal verification, variant 1.

Verifying equations:

  • Check $0<r<p$ and $0<s<(p-1)$
  • $v_1=y^{r}r^{s}\ \textrm{mod}\ p$
  • $v_2=g^{h(m)}\ \textrm{mod}\ p$
  • Check $v_1=v_2$
Parameters
pThe prime.
nThe reducer mod (p-1).
gThe generator.
hmThe hash to be signed.
yThe public key value.
rThe signature's r value.
sThe signature's s value.
Return values
1on success.
0on failure.

References BEECRYPTAPI.

◆ elgv3sign()

int elgv3sign ( const mpbarrett * p,
const mpbarrett * n,
const mpnumber * g,
randomGeneratorContext * rgc,
const mpnumber * hm,
const mpnumber * x,
mpnumber * r,
mpnumber * s )

This function performs raw ElGamal signing, variant 3.

Signing equations:

  • $r=g^{k}\ \textrm{mod}\ p$
  • $s=xr+kh(m)\ \textrm{mod}\ (p-1)$
Parameters
pThe prime.
nThe reducer mod (p-1).
gThe generator.
rgcThe pseudo-random generat
hmThe hash to be signed.
xThe private key value.
rThe signature's r value.
sThe signature's s value.
Return values
0on success.
-1on failure.

References BEECRYPTAPI.

◆ elgv3vrfy()

int elgv3vrfy ( const mpbarrett * p,
const mpbarrett * n,
const mpnumber * g,
const mpnumber * hm,
const mpnumber * y,
const mpnumber * r,
const mpnumber * s )

This function performs raw ElGamal verification, variant 3.

Verifying equations:

  • Check $0<r<p$ and $0<s<(p-1)$
  • $v_1=g^{s}\ \textrm{mod}\ p$
  • $v_2=y^{r}r^{h(m)}\ \textrm{mod}\ p$
  • Check $v_1=v_2$
Parameters
pThe prime.
nThe reducer mod (p-1).
gThe generator.
hmThe hash to be signed.
yThe public key value.
rThe signature's r value.
sThe signature's s value.
Return values
1on success.
0on failure.