tls1.h 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. /* ssl/tls1.h */
  2. /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
  3. * All rights reserved.
  4. *
  5. * This package is an SSL implementation written
  6. * by Eric Young (eay@cryptsoft.com).
  7. * The implementation was written so as to conform with Netscapes SSL.
  8. *
  9. * This library is free for commercial and non-commercial use as long as
  10. * the following conditions are aheared to. The following conditions
  11. * apply to all code found in this distribution, be it the RC4, RSA,
  12. * lhash, DES, etc., code; not just the SSL code. The SSL documentation
  13. * included with this distribution is covered by the same copyright terms
  14. * except that the holder is Tim Hudson (tjh@cryptsoft.com).
  15. *
  16. * Copyright remains Eric Young's, and as such any Copyright notices in
  17. * the code are not to be removed.
  18. * If this package is used in a product, Eric Young should be given attribution
  19. * as the author of the parts of the library used.
  20. * This can be in the form of a textual message at program startup or
  21. * in documentation (online or textual) provided with the package.
  22. *
  23. * Redistribution and use in source and binary forms, with or without
  24. * modification, are permitted provided that the following conditions
  25. * are met:
  26. * 1. Redistributions of source code must retain the copyright
  27. * notice, this list of conditions and the following disclaimer.
  28. * 2. Redistributions in binary form must reproduce the above copyright
  29. * notice, this list of conditions and the following disclaimer in the
  30. * documentation and/or other materials provided with the distribution.
  31. * 3. All advertising materials mentioning features or use of this software
  32. * must display the following acknowledgement:
  33. * "This product includes cryptographic software written by
  34. * Eric Young (eay@cryptsoft.com)"
  35. * The word 'cryptographic' can be left out if the rouines from the library
  36. * being used are not cryptographic related :-).
  37. * 4. If you include any Windows specific code (or a derivative thereof) from
  38. * the apps directory (application code) you must include an acknowledgement:
  39. * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
  40. *
  41. * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
  42. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  43. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  44. * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
  45. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  46. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  47. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  48. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  49. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  50. * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  51. * SUCH DAMAGE.
  52. *
  53. * The licence and distribution terms for any publically available version or
  54. * derivative of this code cannot be changed. i.e. this code cannot simply be
  55. * copied and put under another distribution licence
  56. * [including the GNU Public Licence.]
  57. */
  58. #ifndef HEADER_TLS1_H
  59. #define HEADER_TLS1_H
  60. #include <openssl/buffer.h>
  61. #ifdef __cplusplus
  62. extern "C" {
  63. #endif
  64. #define TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES 1
  65. #define TLS1_VERSION 0x0301
  66. #define TLS1_VERSION_MAJOR 0x03
  67. #define TLS1_VERSION_MINOR 0x01
  68. #define TLS1_AD_DECRYPTION_FAILED 21
  69. #define TLS1_AD_RECORD_OVERFLOW 22
  70. #define TLS1_AD_UNKNOWN_CA 48 /* fatal */
  71. #define TLS1_AD_ACCESS_DENIED 49 /* fatal */
  72. #define TLS1_AD_DECODE_ERROR 50 /* fatal */
  73. #define TLS1_AD_DECRYPT_ERROR 51
  74. #define TLS1_AD_EXPORT_RESTRICTION 60 /* fatal */
  75. #define TLS1_AD_PROTOCOL_VERSION 70 /* fatal */
  76. #define TLS1_AD_INSUFFICIENT_SECURITY 71 /* fatal */
  77. #define TLS1_AD_INTERNAL_ERROR 80 /* fatal */
  78. #define TLS1_AD_USER_CANCELLED 90
  79. #define TLS1_AD_NO_RENEGOTIATION 100
  80. /* Additional TLS ciphersuites from draft-ietf-tls-56-bit-ciphersuites-00.txt
  81. * (available if TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES is defined, see
  82. * s3_lib.c). We actually treat them like SSL 3.0 ciphers, which we probably
  83. * shouldn't. */
  84. #define TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5 0x03000060
  85. #define TLS1_CK_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5 0x03000061
  86. #define TLS1_CK_RSA_EXPORT1024_WITH_DES_CBC_SHA 0x03000062
  87. #define TLS1_CK_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA 0x03000063
  88. #define TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_SHA 0x03000064
  89. #define TLS1_CK_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA 0x03000065
  90. #define TLS1_CK_DHE_DSS_WITH_RC4_128_SHA 0x03000066
  91. /* AES ciphersuites from RFC3268 */
  92. #define TLS1_CK_RSA_WITH_AES_128_SHA 0x0300002F
  93. #define TLS1_CK_DH_DSS_WITH_AES_128_SHA 0x03000030
  94. #define TLS1_CK_DH_RSA_WITH_AES_128_SHA 0x03000031
  95. #define TLS1_CK_DHE_DSS_WITH_AES_128_SHA 0x03000032
  96. #define TLS1_CK_DHE_RSA_WITH_AES_128_SHA 0x03000033
  97. #define TLS1_CK_ADH_WITH_AES_128_SHA 0x03000034
  98. #define TLS1_CK_RSA_WITH_AES_256_SHA 0x03000035
  99. #define TLS1_CK_DH_DSS_WITH_AES_256_SHA 0x03000036
  100. #define TLS1_CK_DH_RSA_WITH_AES_256_SHA 0x03000037
  101. #define TLS1_CK_DHE_DSS_WITH_AES_256_SHA 0x03000038
  102. #define TLS1_CK_DHE_RSA_WITH_AES_256_SHA 0x03000039
  103. #define TLS1_CK_ADH_WITH_AES_256_SHA 0x0300003A
  104. /* XXX
  105. * Inconsistency alert:
  106. * The OpenSSL names of ciphers with ephemeral DH here include the string
  107. * "DHE", while elsewhere it has always been "EDH".
  108. * (The alias for the list of all such ciphers also is "EDH".)
  109. * The specifications speak of "EDH"; maybe we should allow both forms
  110. * for everything. */
  111. #define TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_MD5 "EXP1024-RC4-MD5"
  112. #define TLS1_TXT_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5 "EXP1024-RC2-CBC-MD5"
  113. #define TLS1_TXT_RSA_EXPORT1024_WITH_DES_CBC_SHA "EXP1024-DES-CBC-SHA"
  114. #define TLS1_TXT_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA "EXP1024-DHE-DSS-DES-CBC-SHA"
  115. #define TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_SHA "EXP1024-RC4-SHA"
  116. #define TLS1_TXT_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA "EXP1024-DHE-DSS-RC4-SHA"
  117. #define TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA "DHE-DSS-RC4-SHA"
  118. /* AES ciphersuites from RFC3268 */
  119. #define TLS1_TXT_RSA_WITH_AES_128_SHA "AES128-SHA"
  120. #define TLS1_TXT_DH_DSS_WITH_AES_128_SHA "DH-DSS-AES128-SHA"
  121. #define TLS1_TXT_DH_RSA_WITH_AES_128_SHA "DH-RSA-AES128-SHA"
  122. #define TLS1_TXT_DHE_DSS_WITH_AES_128_SHA "DHE-DSS-AES128-SHA"
  123. #define TLS1_TXT_DHE_RSA_WITH_AES_128_SHA "DHE-RSA-AES128-SHA"
  124. #define TLS1_TXT_ADH_WITH_AES_128_SHA "ADH-AES128-SHA"
  125. #define TLS1_TXT_RSA_WITH_AES_256_SHA "AES256-SHA"
  126. #define TLS1_TXT_DH_DSS_WITH_AES_256_SHA "DH-DSS-AES256-SHA"
  127. #define TLS1_TXT_DH_RSA_WITH_AES_256_SHA "DH-RSA-AES256-SHA"
  128. #define TLS1_TXT_DHE_DSS_WITH_AES_256_SHA "DHE-DSS-AES256-SHA"
  129. #define TLS1_TXT_DHE_RSA_WITH_AES_256_SHA "DHE-RSA-AES256-SHA"
  130. #define TLS1_TXT_ADH_WITH_AES_256_SHA "ADH-AES256-SHA"
  131. #define TLS_CT_RSA_SIGN 1
  132. #define TLS_CT_DSS_SIGN 2
  133. #define TLS_CT_RSA_FIXED_DH 3
  134. #define TLS_CT_DSS_FIXED_DH 4
  135. #define TLS_CT_NUMBER 4
  136. #define TLS1_FINISH_MAC_LENGTH 12
  137. #define TLS_MD_MAX_CONST_SIZE 20
  138. #define TLS_MD_CLIENT_FINISH_CONST "client finished"
  139. #define TLS_MD_CLIENT_FINISH_CONST_SIZE 15
  140. #define TLS_MD_SERVER_FINISH_CONST "server finished"
  141. #define TLS_MD_SERVER_FINISH_CONST_SIZE 15
  142. #define TLS_MD_SERVER_WRITE_KEY_CONST "server write key"
  143. #define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE 16
  144. #define TLS_MD_KEY_EXPANSION_CONST "key expansion"
  145. #define TLS_MD_KEY_EXPANSION_CONST_SIZE 13
  146. #define TLS_MD_CLIENT_WRITE_KEY_CONST "client write key"
  147. #define TLS_MD_CLIENT_WRITE_KEY_CONST_SIZE 16
  148. #define TLS_MD_SERVER_WRITE_KEY_CONST "server write key"
  149. #define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE 16
  150. #define TLS_MD_IV_BLOCK_CONST "IV block"
  151. #define TLS_MD_IV_BLOCK_CONST_SIZE 8
  152. #define TLS_MD_MASTER_SECRET_CONST "master secret"
  153. #define TLS_MD_MASTER_SECRET_CONST_SIZE 13
  154. #ifdef CHARSET_EBCDIC
  155. #undef TLS_MD_CLIENT_FINISH_CONST
  156. #define TLS_MD_CLIENT_FINISH_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x66\x69\x6e\x69\x73\x68\x65\x64" /*client finished*/
  157. #undef TLS_MD_SERVER_FINISH_CONST
  158. #define TLS_MD_SERVER_FINISH_CONST "\x73\x65\x72\x76\x65\x72\x20\x66\x69\x6e\x69\x73\x68\x65\x64" /*server finished*/
  159. #undef TLS_MD_SERVER_WRITE_KEY_CONST
  160. #define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" /*server write key*/
  161. #undef TLS_MD_KEY_EXPANSION_CONST
  162. #define TLS_MD_KEY_EXPANSION_CONST "\x6b\x65\x79\x20\x65\x78\x70\x61\x6e\x73\x69\x6f\x6e" /*key expansion*/
  163. #undef TLS_MD_CLIENT_WRITE_KEY_CONST
  164. #define TLS_MD_CLIENT_WRITE_KEY_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" /*client write key*/
  165. #undef TLS_MD_SERVER_WRITE_KEY_CONST
  166. #define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" /*server write key*/
  167. #undef TLS_MD_IV_BLOCK_CONST
  168. #define TLS_MD_IV_BLOCK_CONST "\x49\x56\x20\x62\x6c\x6f\x63\x6b" /*IV block*/
  169. #undef TLS_MD_MASTER_SECRET_CONST
  170. #define TLS_MD_MASTER_SECRET_CONST "\x6d\x61\x73\x74\x65\x72\x20\x73\x65\x63\x72\x65\x74" /*master secret*/
  171. #endif
  172. #ifdef __cplusplus
  173. }
  174. #endif
  175. #endif