des 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. .TH DES 2
  2. .SH NAME
  3. setupDESstate, des_key_setup, block_cipher, desCBCencrypt, desCBCdecrypt, desECBencrypt, desECBdecrypt, des3CBCencrypt, des3CBCdecrypt, des3ECBencrypt, des3ECBdecrypt, key_setup, des56to64, des64to56, setupDES3state, triple_block_cipher, - single and triple digital encryption standard
  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. void des_key_setup(uchar key[8], ulong schedule[32])
  15. .PP
  16. .B
  17. void block_cipher(ulong *schedule, uchar *data,
  18. .B
  19. int decrypting)
  20. .PP
  21. .B
  22. void setupDESstate(DESstate *s, uchar key[8], uchar *ivec)
  23. .PP
  24. .B
  25. void desCBCencrypt(uchar*, int, DESstate*)
  26. .PP
  27. .B
  28. void desCBCdecrypt(uchar*, int, DESstate*)
  29. .PP
  30. .B
  31. void desECBencrypt(uchar*, int, DESstate*)
  32. .PP
  33. .B
  34. void desECBdecrypt(uchar*, int, DESstate*)
  35. .PP
  36. .B
  37. void triple_block_cipher(ulong keys[3][32], uchar*, int)
  38. .PP
  39. .B
  40. void setupDES3state(DES3state *s, uchar key[3][8],
  41. .B
  42. uchar *ivec)
  43. .PP
  44. .B
  45. void des3CBCencrypt(uchar*, int, DES3state*)
  46. .PP
  47. .B
  48. void des3CBCdecrypt(uchar*, int, DES3state*)
  49. .PP
  50. .B
  51. void des3ECBencrypt(uchar*, int, DES3state*)
  52. .PP
  53. .B
  54. void des3ECBdecrypt(uchar*, int, DES3state*)
  55. .PP
  56. .B
  57. void key_setup(uchar[7], ulong[32])
  58. .PP
  59. .B
  60. void des56to64(uchar *k56, uchar *k64)
  61. .PP
  62. .B
  63. void des64to56(uchar *k64, uchar *k56)
  64. .SH DESCRIPTION
  65. .PP
  66. The Digital Encryption Standard (DES)
  67. is a shared key or symmetric encryption using either
  68. a 56 bit key for single DES or three 56 bit keys for triple des.
  69. The keys are encoded into 64 bits where every eight bit
  70. is parity.
  71. .PP
  72. The basic DES function,
  73. .IR block_cipher ,
  74. works on a block of 8 bytes, converting them in place.
  75. It takes a key schedule, a pointer to the block, and
  76. a flag indicating encrypting (0) or decrypting (1).
  77. The key schedule is created from the key using
  78. .IR des_key_setup .
  79. .PP
  80. Since it is a bit awkward,
  81. .I block_cipher
  82. is rarely called directly. Instead, one normally uses
  83. routines that encrypt larger buffers of data and
  84. which may chain the encryption state from one buffer
  85. to the next.
  86. These routines keep track of the state of the
  87. encryption using a
  88. .B DESstate
  89. structure that contains the key schedule and any chained
  90. state.
  91. .I SetupDESstate
  92. sets up the
  93. .B DESstate
  94. structure using the key and an 8 byte initialization vector.
  95. .PP
  96. Electronic code book, using
  97. .I desECBencrypt
  98. and
  99. .IR desECBdecrypt ,
  100. is the less secure mode. The encryption of each 8 bytes
  101. does not depend on the encryption of any other.
  102. Hence the encryption is a substitution
  103. cipher using 64 bit characters.
  104. .PP
  105. Cipher block chaining mode, using
  106. .I desCBCencrypt
  107. and
  108. .IR desCBCdecrypt ,
  109. is more secure. Every block encrypted depends on the initialization
  110. vector and all blocks encrypted before it.
  111. .PP
  112. For both CBC and ECB modes, a stream of data can be encrypted as
  113. multiple buffers. However, all buffers except the last must
  114. be a multiple of 8 bytes to ensure successful decryption of
  115. the stream.
  116. .PP
  117. There are equivalent triple DES functions for each of the
  118. DES functions.
  119. .PP
  120. In the past Plan 9 used a 56 bit or 7 byte
  121. format for DES keys. To be compatible with the rest
  122. of the world, we've abandoned this format.
  123. There are two functions:
  124. .I des56to64
  125. and
  126. .I des64to56
  127. to convert back and forth between the two formats.
  128. Also a key schedule can be set up from the 7 byte format
  129. using
  130. .IR key_setup .
  131. .PP
  132. .SH SOURCE
  133. .B /sys/src/libsec
  134. .SH SEE ALSO
  135. .IR mp (2),
  136. .IR aes (2),
  137. .IR blowfish (2),
  138. .IR dsa (2),
  139. .IR elgamal (2),
  140. .IR rc4 (2),
  141. .IR rsa (2),
  142. .IR sechash (2),
  143. .IR prime (2),
  144. .IR rand (2)