ELGAMAL(2)
NAME
eggen, egencrypt, egdecrypt, egsign, egverify, egpuballoc, egpubfree, egprivalloc, egprivfree, egsigalloc, egsigfree, egprivtopub - elgamal encryption
SYNOPSIS
#include <u.h>
#include <libc.h>
#include <mp.h>
#include <libsec.h>
EGpriv∗eggen(int nlen, int nrep)
mpint∗egencrypt(EGpub ∗k, mpint ∗in, mpint ∗out)
mpint∗egdecrypt(EGpriv ∗k, mpint ∗in, mpint ∗out)
EGsig∗egsign(EGpriv ∗k, mpint ∗m)
integverify(EGpub ∗k, EGsig ∗sig, mpint ∗m)
EGpub∗egpuballoc(void)
voidegpubfree(EGpub∗)
EGpriv∗egprivalloc(void)
voidegprivfree(EGpriv∗)
EGsig∗egsigalloc(void)
voidegsigfree(EGsig∗)
EGpub∗egprivtopub(EGpriv∗)
DESCRIPTION
Elgamal is a public key encryption and signature algorithm. The owner of a key publishes the public part of the key:
struct EGpub
{
mpint∗p;// modulus
mpint∗alpha;// generator
mpint∗key;// (encryption key) alpha∗∗secret mod p
};
This part can be used for encrypting data (with egencrypt) to be sent to the owner. The owner decrypts (with egdecrypt) using his private key:
struct EGpriv
{
EGpubpub;
mpint∗secret; // (decryption key)
};
Keys are generated using eggen. Eggen takes both bit length of the modulus and the number of repetitions of the Miller-Rabin primality test to run. If the latter is 0, it does the default number of rounds. Egprivtopub returns a newly allocated copy of the public key corresponding to the private key.
The routines egpuballoc, egpubfree, egprivalloc, and egprivfree are provided to manage key storage.
Egsign signs message m using a private key k yielding a
struct EGsig
{
mpint∗r, ∗s;
};
Egverify returns 0 if the signature is valid and −1 if not.
The routines egsigalloc and egsigfree are provided to manage signature storage.
SOURCE
/sys/src/libsec
SEE ALSO
mp(2), aes(2), blowfish(2), des(2), dsa(2), rc4(2), rsa(2), sechash(2), prime(2), rand(2)
Plan 9 — July 25, 2002