plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

elgamal.3 (2160B)


      1 .TH ELGAMAL 3
      2 .SH NAME
      3 eggen, egencrypt, egdecrypt, egsign, egverify, egpuballoc, egpubfree, egprivalloc, egprivfree, egsigalloc, egsigfree, egprivtopub - elgamal encryption
      4 .SH SYNOPSIS
      5 .B #include <u.h>
      6 .br
      7 .B #include <libc.h>
      8 .br
      9 .B #include <mp.h>
     10 .br
     11 .B #include <libsec.h>
     12 .PP
     13 .B
     14 EGpriv*	eggen(int nlen, int nrep)
     15 .PP
     16 .B
     17 mpint*	egencrypt(EGpub *k, mpint *in, mpint *out)
     18 .PP
     19 .B
     20 mpint*	egdecrypt(EGpriv *k, mpint *in, mpint *out)
     21 .PP
     22 .B
     23 EGsig*	egsign(EGpriv *k, mpint *m)
     24 .PP
     25 .B
     26 int		egverify(EGpub *k, EGsig *sig, mpint *m)
     27 .PP
     28 .B
     29 EGpub*	egpuballoc(void)
     30 .PP
     31 .B
     32 void		egpubfree(EGpub*)
     33 .PP
     34 .B
     35 EGpriv*	egprivalloc(void)
     36 .PP
     37 .B
     38 void		egprivfree(EGpriv*)
     39 .PP
     40 .B
     41 EGsig*	egsigalloc(void)
     42 .PP
     43 .B
     44 void		egsigfree(EGsig*)
     45 .PP
     46 .B
     47 EGpub*	egprivtopub(EGpriv*)
     48 .SH DESCRIPTION
     49 .PP
     50 Elgamal is a public key encryption and signature algorithm.  The owner of a key publishes
     51 the public part of the key:
     52 .EX
     53 	struct EGpub
     54 	{
     55 		mpint	*p;	// modulus
     56 		mpint	*alpha;	// generator
     57 		mpint	*key;	// (encryption key) alpha**secret mod p
     58 	};
     59 .EE
     60 This part can be used for encrypting data (with
     61 .IR egencrypt )
     62 to be sent to the owner.
     63 The owner decrypts (with
     64 .IR egdecrypt )
     65 using his private key:
     66 .EX
     67 	struct EGpriv
     68 	{
     69 		EGpub	pub;
     70 		mpint	*secret; // (decryption key)
     71 	};
     72 .EE
     73 .PP
     74 Keys are generated using
     75 .IR eggen .
     76 .I Eggen
     77 takes both bit length of the modulus
     78 and the number of repetitions of the Miller-Rabin
     79 primality test to run.  If the latter is 0, it does the default number
     80 of rounds.
     81 .I Egprivtopub
     82 returns a newly allocated copy of the public key
     83 corresponding to the private key.
     84 .PP
     85 The routines
     86 .IR egpuballoc ,
     87 .IR egpubfree ,
     88 .IR egprivalloc ,
     89 and
     90 .I egprivfree
     91 are provided to manage key storage.
     92 .PP
     93 .I Egsign
     94 signs message
     95 .I m
     96 using a private key
     97 .I k
     98 yielding a
     99 .EX
    100 	struct EGsig
    101 	{
    102 		mpint	*r, *s;
    103 	};
    104 .EE
    105 .I Egverify
    106 returns 0 if the signature is valid and \-1 if not.
    107 .PP
    108 The routines
    109 .I egsigalloc
    110 and
    111 .I egsigfree
    112 are provided to manage signature storage.
    113 .SH SOURCE
    114 .B \*9/src/libsec
    115 .SH SEE ALSO
    116 .MR mp (3) ,
    117 .MR aes (3) ,
    118 .MR blowfish (3) ,
    119 .MR des (3) ,
    120 .MR dsa (3) ,
    121 .MR rc4 (3) ,
    122 .MR rsa (3) ,
    123 .MR sechash (3) ,
    124 .MR prime (3) ,
    125 .MR rand (3)