sha2_internal.h 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  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 <stddef.h>
  44. #include <inttypes.h>
  45. #endif /* SHA2_USE_INTTYPES_H */
  46. /*** SHA-256/384/512 Various Length Definitions ***********************/
  47. #define SHA256_BLOCK_LENGTH 64
  48. #define SHA256_DIGEST_LENGTH 32
  49. #define SHA256_DIGEST_STRING_LENGTH (SHA256_DIGEST_LENGTH * 2 + 1)
  50. #define SHA384_BLOCK_LENGTH 128
  51. #define SHA384_DIGEST_LENGTH 48
  52. #define SHA384_DIGEST_STRING_LENGTH (SHA384_DIGEST_LENGTH * 2 + 1)
  53. #define SHA512_BLOCK_LENGTH 128
  54. #define SHA512_DIGEST_LENGTH 64
  55. #define SHA512_DIGEST_STRING_LENGTH (SHA512_DIGEST_LENGTH * 2 + 1)
  56. /*** SHA-256/384/512 Context Structures *******************************/
  57. /* NOTE: If your architecture does not define either u_intXX_t types or
  58. * uintXX_t (from inttypes.h), you may need to define things by hand
  59. * for your system:
  60. */
  61. #if 0
  62. typedef unsigned char u_int8_t; /* 1-byte (8-bits) */
  63. typedef unsigned int u_int32_t; /* 4-bytes (32-bits) */
  64. typedef unsigned long long u_int64_t; /* 8-bytes (64-bits) */
  65. #endif
  66. /*
  67. * Most BSD systems already define u_intXX_t types, as does Linux.
  68. * Some systems, however, like Compaq's Tru64 Unix instead can use
  69. * uintXX_t types defined by very recent ANSI C standards and included
  70. * in the file:
  71. *
  72. * #include <inttypes.h>
  73. *
  74. * If you choose to use <inttypes.h> then please define:
  75. *
  76. * #define SHA2_USE_INTTYPES_H
  77. *
  78. * Or on the command line during compile:
  79. *
  80. * cc -DSHA2_USE_INTTYPES_H ...
  81. */
  82. #ifdef SHA2_USE_INTTYPES_H
  83. typedef struct _SHA256_CTX {
  84. uint32_t state[8];
  85. uint64_t bitcount;
  86. uint8_t buffer[SHA256_BLOCK_LENGTH];
  87. } SHA256_CTX;
  88. typedef struct _SHA512_CTX {
  89. uint64_t state[8];
  90. uint64_t bitcount[2];
  91. uint8_t buffer[SHA512_BLOCK_LENGTH];
  92. } SHA512_CTX;
  93. #else /* SHA2_USE_INTTYPES_H */
  94. typedef struct _SHA256_CTX {
  95. u_int32_t state[8];
  96. u_int64_t bitcount;
  97. u_int8_t buffer[SHA256_BLOCK_LENGTH];
  98. } SHA256_CTX;
  99. typedef struct _SHA512_CTX {
  100. u_int64_t state[8];
  101. u_int64_t bitcount[2];
  102. u_int8_t buffer[SHA512_BLOCK_LENGTH];
  103. } SHA512_CTX;
  104. #endif /* SHA2_USE_INTTYPES_H */
  105. typedef SHA512_CTX SHA384_CTX;
  106. /*** SHA-256/384/512 Function Prototypes ******************************/
  107. #ifndef NOPROTO
  108. #ifdef SHA2_USE_INTTYPES_H
  109. void SHA256_Init(SHA256_CTX *);
  110. void SHA256_Update(SHA256_CTX*, const uint8_t*, size_t);
  111. void SHA256_Final(uint8_t[SHA256_DIGEST_LENGTH], SHA256_CTX*);
  112. char* SHA256_End(SHA256_CTX*, char[SHA256_DIGEST_STRING_LENGTH]);
  113. char* SHA256_Data(const uint8_t*, size_t, char[SHA256_DIGEST_STRING_LENGTH]);
  114. void SHA384_Init(SHA384_CTX*);
  115. void SHA384_Update(SHA384_CTX*, const uint8_t*, size_t);
  116. void SHA384_Final(uint8_t[SHA384_DIGEST_LENGTH], SHA384_CTX*);
  117. char* SHA384_End(SHA384_CTX*, char[SHA384_DIGEST_STRING_LENGTH]);
  118. char* SHA384_Data(const uint8_t*, size_t, char[SHA384_DIGEST_STRING_LENGTH]);
  119. void SHA512_Init(SHA512_CTX*);
  120. void SHA512_Update(SHA512_CTX*, const uint8_t*, size_t);
  121. void SHA512_Final(uint8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*);
  122. char* SHA512_End(SHA512_CTX*, char[SHA512_DIGEST_STRING_LENGTH]);
  123. char* SHA512_Data(const uint8_t*, size_t, char[SHA512_DIGEST_STRING_LENGTH]);
  124. #else /* SHA2_USE_INTTYPES_H */
  125. void SHA256_Init(SHA256_CTX *);
  126. void SHA256_Update(SHA256_CTX*, const u_int8_t*, size_t);
  127. void SHA256_Final(u_int8_t[SHA256_DIGEST_LENGTH], SHA256_CTX*);
  128. char* SHA256_End(SHA256_CTX*, char[SHA256_DIGEST_STRING_LENGTH]);
  129. char* SHA256_Data(const u_int8_t*, size_t, char[SHA256_DIGEST_STRING_LENGTH]);
  130. void SHA384_Init(SHA384_CTX*);
  131. void SHA384_Update(SHA384_CTX*, const u_int8_t*, size_t);
  132. void SHA384_Final(u_int8_t[SHA384_DIGEST_LENGTH], SHA384_CTX*);
  133. char* SHA384_End(SHA384_CTX*, char[SHA384_DIGEST_STRING_LENGTH]);
  134. char* SHA384_Data(const u_int8_t*, size_t, char[SHA384_DIGEST_STRING_LENGTH]);
  135. void SHA512_Init(SHA512_CTX*);
  136. void SHA512_Update(SHA512_CTX*, const u_int8_t*, size_t);
  137. void SHA512_Final(u_int8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*);
  138. char* SHA512_End(SHA512_CTX*, char[SHA512_DIGEST_STRING_LENGTH]);
  139. char* SHA512_Data(const u_int8_t*, size_t, char[SHA512_DIGEST_STRING_LENGTH]);
  140. #endif /* SHA2_USE_INTTYPES_H */
  141. #else /* NOPROTO */
  142. void SHA256_Init();
  143. void SHA256_Update();
  144. void SHA256_Final();
  145. char* SHA256_End();
  146. char* SHA256_Data();
  147. void SHA384_Init();
  148. void SHA384_Update();
  149. void SHA384_Final();
  150. char* SHA384_End();
  151. char* SHA384_Data();
  152. void SHA512_Init();
  153. void SHA512_Update();
  154. void SHA512_Final();
  155. char* SHA512_End();
  156. char* SHA512_Data();
  157. #endif /* NOPROTO */
  158. #endif /* __SHA2_H__ */