BeeCrypt  4.2.1
Functions

ElGamal algorithm. More...

#include "beecrypt/mpbarrett.h"
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. More...
 
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. More...
 
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. More...
 
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. More...
 

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

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.
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.
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.
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.