1
0

elgamal 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. .TH ELGAMAL 2
  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 /sys/src/libsec
  115. .SH SEE ALSO
  116. .IR mp (2),
  117. .IR aes (2),
  118. .IR blowfish (2),
  119. .IR des (2),
  120. .IR dsa (2),
  121. .IR rc4 (2),
  122. .IR rsa (2),
  123. .IR sechash (2),
  124. .IR prime (2),
  125. .IR rand (2)