sha2_internal.h 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. /*
  2. * FILE: sha2.h
  3. * AUTHOR: Aaron D. Gifford - http://www.aarongifford.com/
  4. *
  5. * Copyright (c) 2000-2001, Aaron D. Gifford
  6. * All rights reserved.
  7. *
  8. * Redistribution and use in source and binary forms, with or without
  9. * modification, are permitted provided that the following conditions
  10. * are met:
  11. * 1. Redistributions of source code must retain the above copyright
  12. * notice, this list of conditions and the following disclaimer.
  13. * 2. Redistributions in binary form must reproduce the above copyright
  14. * notice, this list of conditions and the following disclaimer in the
  15. * documentation and/or other materials provided with the distribution.
  16. * 3. Neither the name of the copyright holder nor the names of contributors
  17. * may be used to endorse or promote products derived from this software
  18. * without specific prior written permission.
  19. *
  20. * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``AS IS'' AND
  21. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  22. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  23. * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTOR(S) BE LIABLE
  24. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  25. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  26. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  27. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  28. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  29. * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  30. * SUCH DAMAGE.
  31. *
  32. * $Id: sha2.h,v 1.1 2001/11/08 00:02:01 adg Exp adg $
  33. */
  34. #ifndef __SHA2_H__
  35. #define __SHA2_H__
  36. /*
  37. * Import u_intXX_t size_t type definitions from system headers. You
  38. * may need to change this, or define these things yourself in this
  39. * file.
  40. */
  41. #include <sys/types.h>
  42. #ifdef SHA2_USE_INTTYPES_H
  43. #include <inttypes.h>
  44. #endif /* SHA2_USE_INTTYPES_H */
  45. /*** SHA-256/384/512 Various Length Definitions ***********************/
  46. #define SHA256_BLOCK_LENGTH 64
  47. #define SHA256_DIGEST_LENGTH 32
  48. #define SHA256_DIGEST_STRING_LENGTH (SHA256_DIGEST_LENGTH * 2 + 1)
  49. #define SHA384_BLOCK_LENGTH 128
  50. #define SHA384_DIGEST_LENGTH 48
  51. #define SHA384_DIGEST_STRING_LENGTH (SHA384_DIGEST_LENGTH * 2 + 1)
  52. #define SHA512_BLOCK_LENGTH 128
  53. #define SHA512_DIGEST_LENGTH 64
  54. #define SHA512_DIGEST_STRING_LENGTH (SHA512_DIGEST_LENGTH * 2 + 1)
  55. /*** SHA-256/384/512 Context Structures *******************************/
  56. /* NOTE: If your architecture does not define either u_intXX_t types or
  57. * uintXX_t (from inttypes.h), you may need to define things by hand
  58. * for your system:
  59. */
  60. #if 0
  61. typedef unsigned char u_int8_t; /* 1-byte (8-bits) */
  62. typedef unsigned int u_int32_t; /* 4-bytes (32-bits) */
  63. typedef unsigned long long u_int64_t; /* 8-bytes (64-bits) */
  64. #endif
  65. /*
  66. * Most BSD systems already define u_intXX_t types, as does Linux.
  67. * Some systems, however, like Compaq's Tru64 Unix instead can use
  68. * uintXX_t types defined by very recent ANSI C standards and included
  69. * in the file:
  70. *
  71. * #include <inttypes.h>
  72. *
  73. * If you choose to use <inttypes.h> then please define:
  74. *
  75. * #define SHA2_USE_INTTYPES_H
  76. *
  77. * Or on the command line during compile:
  78. *
  79. * cc -DSHA2_USE_INTTYPES_H ...
  80. */
  81. #ifdef SHA2_USE_INTTYPES_H
  82. typedef struct _SHA256_CTX {
  83. uint32_t state[8];
  84. uint64_t bitcount;
  85. uint8_t buffer[SHA256_BLOCK_LENGTH];
  86. } SHA256_CTX;
  87. typedef struct _SHA512_CTX {
  88. uint64_t state[8];
  89. uint64_t bitcount[2];
  90. uint8_t buffer[SHA512_BLOCK_LENGTH];
  91. } SHA512_CTX;
  92. #else /* SHA2_USE_INTTYPES_H */
  93. typedef struct _SHA256_CTX {
  94. u_int32_t state[8];
  95. u_int64_t bitcount;
  96. u_int8_t buffer[SHA256_BLOCK_LENGTH];
  97. } SHA256_CTX;
  98. typedef struct _SHA512_CTX {
  99. u_int64_t state[8];
  100. u_int64_t bitcount[2];
  101. u_int8_t buffer[SHA512_BLOCK_LENGTH];
  102. } SHA512_CTX;
  103. #endif /* SHA2_USE_INTTYPES_H */
  104. typedef SHA512_CTX SHA384_CTX;
  105. /*** SHA-256/384/512 Function Prototypes ******************************/
  106. #ifndef NOPROTO
  107. #ifdef SHA2_USE_INTTYPES_H
  108. void SHA256_Init(SHA256_CTX *);
  109. void SHA256_Update(SHA256_CTX*, const uint8_t*, size_t);
  110. void SHA256_Final(uint8_t[SHA256_DIGEST_LENGTH], SHA256_CTX*);
  111. char* SHA256_End(SHA256_CTX*, char[SHA256_DIGEST_STRING_LENGTH]);
  112. char* SHA256_Data(const uint8_t*, size_t, char[SHA256_DIGEST_STRING_LENGTH]);
  113. void SHA384_Init(SHA384_CTX*);
  114. void SHA384_Update(SHA384_CTX*, const uint8_t*, size_t);
  115. void SHA384_Final(uint8_t[SHA384_DIGEST_LENGTH], SHA384_CTX*);
  116. char* SHA384_End(SHA384_CTX*, char[SHA384_DIGEST_STRING_LENGTH]);
  117. char* SHA384_Data(const uint8_t*, size_t, char[SHA384_DIGEST_STRING_LENGTH]);
  118. void SHA512_Init(SHA512_CTX*);
  119. void SHA512_Update(SHA512_CTX*, const uint8_t*, size_t);
  120. void SHA512_Final(uint8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*);
  121. char* SHA512_End(SHA512_CTX*, char[SHA512_DIGEST_STRING_LENGTH]);
  122. char* SHA512_Data(const uint8_t*, size_t, char[SHA512_DIGEST_STRING_LENGTH]);
  123. #else /* SHA2_USE_INTTYPES_H */
  124. void SHA256_Init(SHA256_CTX *);
  125. void SHA256_Update(SHA256_CTX*, const u_int8_t*, size_t);
  126. void SHA256_Final(u_int8_t[SHA256_DIGEST_LENGTH], SHA256_CTX*);
  127. char* SHA256_End(SHA256_CTX*, char[SHA256_DIGEST_STRING_LENGTH]);
  128. char* SHA256_Data(const u_int8_t*, size_t, char[SHA256_DIGEST_STRING_LENGTH]);
  129. void SHA384_Init(SHA384_CTX*);
  130. void SHA384_Update(SHA384_CTX*, const u_int8_t*, size_t);
  131. void SHA384_Final(u_int8_t[SHA384_DIGEST_LENGTH], SHA384_CTX*);
  132. char* SHA384_End(SHA384_CTX*, char[SHA384_DIGEST_STRING_LENGTH]);
  133. char* SHA384_Data(const u_int8_t*, size_t, char[SHA384_DIGEST_STRING_LENGTH]);
  134. void SHA512_Init(SHA512_CTX*);
  135. void SHA512_Update(SHA512_CTX*, const u_int8_t*, size_t);
  136. void SHA512_Final(u_int8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*);
  137. char* SHA512_End(SHA512_CTX*, char[SHA512_DIGEST_STRING_LENGTH]);
  138. char* SHA512_Data(const u_int8_t*, size_t, char[SHA512_DIGEST_STRING_LENGTH]);
  139. #endif /* SHA2_USE_INTTYPES_H */
  140. #else /* NOPROTO */
  141. void SHA256_Init();
  142. void SHA256_Update();
  143. void SHA256_Final();
  144. char* SHA256_End();
  145. char* SHA256_Data();
  146. void SHA384_Init();
  147. void SHA384_Update();
  148. void SHA384_Final();
  149. char* SHA384_End();
  150. char* SHA384_Data();
  151. void SHA512_Init();
  152. void SHA512_Update();
  153. void SHA512_Final();
  154. char* SHA512_End();
  155. char* SHA512_Data();
  156. #endif /* NOPROTO */
  157. #endif /* __SHA2_H__ */