You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

des.h 7.9 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. /*
  2. * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
  3. *
  4. * Licensed under the Apache License 2.0 (the "License"). You may not use
  5. * this file except in compliance with the License. You can obtain a copy
  6. * in the file LICENSE in the source distribution or at
  7. * https://www.openssl.org/source/license.html
  8. */
  9. #ifndef OPENSSL_DES_H
  10. #define OPENSSL_DES_H
  11. #pragma once
  12. #include <openssl/macros.h>
  13. #ifndef OPENSSL_NO_DEPRECATED_3_0
  14. #define HEADER_DES_H
  15. #endif
  16. #include <openssl/opensslconf.h>
  17. #ifndef OPENSSL_NO_DES
  18. #ifdef __cplusplus
  19. extern "C"
  20. {
  21. #endif
  22. #include <openssl/e_os2.h>
  23. #ifndef OPENSSL_NO_DEPRECATED_3_0
  24. typedef unsigned int DES_LONG;
  25. #ifdef OPENSSL_BUILD_SHLIBCRYPTO
  26. #undef OPENSSL_EXTERN
  27. #define OPENSSL_EXTERN OPENSSL_EXPORT
  28. #endif
  29. typedef unsigned char DES_cblock[8];
  30. typedef /* const */ unsigned char const_DES_cblock[8];
  31. /*
  32. * With "const", gcc 2.8.1 on Solaris thinks that DES_cblock * and
  33. * const_DES_cblock * are incompatible pointer types.
  34. */
  35. typedef struct DES_ks
  36. {
  37. union
  38. {
  39. DES_cblock cblock;
  40. /*
  41. * make sure things are correct size on machines with 8 byte longs
  42. */
  43. DES_LONG deslong[2];
  44. } ks[16];
  45. } DES_key_schedule;
  46. #define DES_KEY_SZ (sizeof(DES_cblock))
  47. #define DES_SCHEDULE_SZ (sizeof(DES_key_schedule))
  48. #define DES_ENCRYPT 1
  49. #define DES_DECRYPT 0
  50. #define DES_CBC_MODE 0
  51. #define DES_PCBC_MODE 1
  52. #define DES_ecb2_encrypt(i, o, k1, k2, e) \
  53. DES_ecb3_encrypt((i), (o), (k1), (k2), (k1), (e))
  54. #define DES_ede2_cbc_encrypt(i, o, l, k1, k2, iv, e) \
  55. DES_ede3_cbc_encrypt((i), (o), (l), (k1), (k2), (k1), (iv), (e))
  56. #define DES_ede2_cfb64_encrypt(i, o, l, k1, k2, iv, n, e) \
  57. DES_ede3_cfb64_encrypt((i), (o), (l), (k1), (k2), (k1), (iv), (n), (e))
  58. #define DES_ede2_ofb64_encrypt(i, o, l, k1, k2, iv, n) \
  59. DES_ede3_ofb64_encrypt((i), (o), (l), (k1), (k2), (k1), (iv), (n))
  60. #define DES_fixup_key_parity DES_set_odd_parity
  61. #endif
  62. #ifndef OPENSSL_NO_DEPRECATED_3_0
  63. OSSL_DEPRECATEDIN_3_0 const char* DES_options(void);
  64. OSSL_DEPRECATEDIN_3_0
  65. void DES_ecb3_encrypt(const_DES_cblock* input, DES_cblock* output, DES_key_schedule* ks1, DES_key_schedule* ks2, DES_key_schedule* ks3, int enc);
  66. OSSL_DEPRECATEDIN_3_0
  67. DES_LONG DES_cbc_cksum(const unsigned char* input, DES_cblock* output, long length, DES_key_schedule* schedule, const_DES_cblock* ivec);
  68. #endif
  69. /* DES_cbc_encrypt does not update the IV! Use DES_ncbc_encrypt instead. */
  70. #ifndef OPENSSL_NO_DEPRECATED_3_0
  71. OSSL_DEPRECATEDIN_3_0
  72. void DES_cbc_encrypt(const unsigned char* input, unsigned char* output, long length, DES_key_schedule* schedule, DES_cblock* ivec, int enc);
  73. OSSL_DEPRECATEDIN_3_0
  74. void DES_ncbc_encrypt(const unsigned char* input, unsigned char* output, long length, DES_key_schedule* schedule, DES_cblock* ivec, int enc);
  75. OSSL_DEPRECATEDIN_3_0
  76. void DES_xcbc_encrypt(const unsigned char* input, unsigned char* output, long length, DES_key_schedule* schedule, DES_cblock* ivec, const_DES_cblock* inw, const_DES_cblock* outw, int enc);
  77. OSSL_DEPRECATEDIN_3_0
  78. void DES_cfb_encrypt(const unsigned char* in, unsigned char* out, int numbits, long length, DES_key_schedule* schedule, DES_cblock* ivec, int enc);
  79. OSSL_DEPRECATEDIN_3_0
  80. void DES_ecb_encrypt(const_DES_cblock* input, DES_cblock* output, DES_key_schedule* ks, int enc);
  81. #endif
  82. /*
  83. * This is the DES encryption function that gets called by just about every
  84. * other DES routine in the library. You should not use this function except
  85. * to implement 'modes' of DES. I say this because the functions that call
  86. * this routine do the conversion from 'char *' to long, and this needs to be
  87. * done to make sure 'non-aligned' memory access do not occur. The
  88. * characters are loaded 'little endian'. Data is a pointer to 2 unsigned
  89. * long's and ks is the DES_key_schedule to use. enc, is non zero specifies
  90. * encryption, zero if decryption.
  91. */
  92. #ifndef OPENSSL_NO_DEPRECATED_3_0
  93. OSSL_DEPRECATEDIN_3_0
  94. void DES_encrypt1(DES_LONG* data, DES_key_schedule* ks, int enc);
  95. #endif
  96. /*
  97. * This functions is the same as DES_encrypt1() except that the DES initial
  98. * permutation (IP) and final permutation (FP) have been left out. As for
  99. * DES_encrypt1(), you should not use this function. It is used by the
  100. * routines in the library that implement triple DES. IP() DES_encrypt2()
  101. * DES_encrypt2() DES_encrypt2() FP() is the same as DES_encrypt1()
  102. * DES_encrypt1() DES_encrypt1() except faster :-).
  103. */
  104. #ifndef OPENSSL_NO_DEPRECATED_3_0
  105. OSSL_DEPRECATEDIN_3_0
  106. void DES_encrypt2(DES_LONG* data, DES_key_schedule* ks, int enc);
  107. OSSL_DEPRECATEDIN_3_0
  108. void DES_encrypt3(DES_LONG* data, DES_key_schedule* ks1, DES_key_schedule* ks2, DES_key_schedule* ks3);
  109. OSSL_DEPRECATEDIN_3_0
  110. void DES_decrypt3(DES_LONG* data, DES_key_schedule* ks1, DES_key_schedule* ks2, DES_key_schedule* ks3);
  111. OSSL_DEPRECATEDIN_3_0
  112. void DES_ede3_cbc_encrypt(const unsigned char* input, unsigned char* output, long length, DES_key_schedule* ks1, DES_key_schedule* ks2, DES_key_schedule* ks3, DES_cblock* ivec, int enc);
  113. OSSL_DEPRECATEDIN_3_0
  114. void DES_ede3_cfb64_encrypt(const unsigned char* in, unsigned char* out, long length, DES_key_schedule* ks1, DES_key_schedule* ks2, DES_key_schedule* ks3, DES_cblock* ivec, int* num, int enc);
  115. OSSL_DEPRECATEDIN_3_0
  116. void DES_ede3_cfb_encrypt(const unsigned char* in, unsigned char* out, int numbits, long length, DES_key_schedule* ks1, DES_key_schedule* ks2, DES_key_schedule* ks3, DES_cblock* ivec, int enc);
  117. OSSL_DEPRECATEDIN_3_0
  118. void DES_ede3_ofb64_encrypt(const unsigned char* in, unsigned char* out, long length, DES_key_schedule* ks1, DES_key_schedule* ks2, DES_key_schedule* ks3, DES_cblock* ivec, int* num);
  119. OSSL_DEPRECATEDIN_3_0
  120. char* DES_fcrypt(const char* buf, const char* salt, char* ret);
  121. OSSL_DEPRECATEDIN_3_0
  122. char* DES_crypt(const char* buf, const char* salt);
  123. OSSL_DEPRECATEDIN_3_0
  124. void DES_ofb_encrypt(const unsigned char* in, unsigned char* out, int numbits, long length, DES_key_schedule* schedule, DES_cblock* ivec);
  125. OSSL_DEPRECATEDIN_3_0
  126. void DES_pcbc_encrypt(const unsigned char* input, unsigned char* output, long length, DES_key_schedule* schedule, DES_cblock* ivec, int enc);
  127. OSSL_DEPRECATEDIN_3_0
  128. DES_LONG DES_quad_cksum(const unsigned char* input, DES_cblock output[], long length, int out_count, DES_cblock* seed);
  129. OSSL_DEPRECATEDIN_3_0 int DES_random_key(DES_cblock* ret);
  130. OSSL_DEPRECATEDIN_3_0 void DES_set_odd_parity(DES_cblock* key);
  131. OSSL_DEPRECATEDIN_3_0 int DES_check_key_parity(const_DES_cblock* key);
  132. OSSL_DEPRECATEDIN_3_0 int DES_is_weak_key(const_DES_cblock* key);
  133. #endif
  134. /*
  135. * DES_set_key (= set_key = DES_key_sched = key_sched) calls
  136. * DES_set_key_checked
  137. */
  138. #ifndef OPENSSL_NO_DEPRECATED_3_0
  139. OSSL_DEPRECATEDIN_3_0
  140. int DES_set_key(const_DES_cblock* key, DES_key_schedule* schedule);
  141. OSSL_DEPRECATEDIN_3_0
  142. int DES_key_sched(const_DES_cblock* key, DES_key_schedule* schedule);
  143. OSSL_DEPRECATEDIN_3_0
  144. int DES_set_key_checked(const_DES_cblock* key, DES_key_schedule* schedule);
  145. OSSL_DEPRECATEDIN_3_0
  146. void DES_set_key_unchecked(const_DES_cblock* key, DES_key_schedule* schedule);
  147. OSSL_DEPRECATEDIN_3_0 void DES_string_to_key(const char* str, DES_cblock* key);
  148. OSSL_DEPRECATEDIN_3_0
  149. void DES_string_to_2keys(const char* str, DES_cblock* key1, DES_cblock* key2);
  150. OSSL_DEPRECATEDIN_3_0
  151. void DES_cfb64_encrypt(const unsigned char* in, unsigned char* out, long length, DES_key_schedule* schedule, DES_cblock* ivec, int* num, int enc);
  152. OSSL_DEPRECATEDIN_3_0
  153. void DES_ofb64_encrypt(const unsigned char* in, unsigned char* out, long length, DES_key_schedule* schedule, DES_cblock* ivec, int* num);
  154. #endif
  155. #ifdef __cplusplus
  156. }
  157. #endif
  158. #endif
  159. #endif