Source code pulled from OpenBSD for OpenNTPD. The place to contribute to this code is via the OpenBSD CVS tree.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

156 lines
7.2 KiB

  1. /* $OpenBSD: sha2.h,v 1.10 2016/09/03 17:00:29 tedu Exp $ */
  2. /*
  3. * FILE: sha2.h
  4. * AUTHOR: Aaron D. Gifford <me@aarongifford.com>
  5. *
  6. * Copyright (c) 2000-2001, Aaron D. Gifford
  7. * All rights reserved.
  8. *
  9. * Redistribution and use in source and binary forms, with or without
  10. * modification, are permitted provided that the following conditions
  11. * are met:
  12. * 1. Redistributions of source code must retain the above copyright
  13. * notice, this list of conditions and the following disclaimer.
  14. * 2. Redistributions in binary form must reproduce the above copyright
  15. * notice, this list of conditions and the following disclaimer in the
  16. * documentation and/or other materials provided with the distribution.
  17. * 3. Neither the name of the copyright holder nor the names of contributors
  18. * may be used to endorse or promote products derived from this software
  19. * without specific prior written permission.
  20. *
  21. * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``AS IS'' AND
  22. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24. * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTOR(S) BE LIABLE
  25. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30. * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31. * SUCH DAMAGE.
  32. *
  33. * $From: sha2.h,v 1.1 2001/11/08 00:02:01 adg Exp adg $
  34. */
  35. #ifndef _SHA2_H
  36. #define _SHA2_H
  37. /*** SHA-256/384/512 Various Length Definitions ***********************/
  38. #define SHA224_BLOCK_LENGTH 64
  39. #define SHA224_DIGEST_LENGTH 28
  40. #define SHA224_DIGEST_STRING_LENGTH (SHA224_DIGEST_LENGTH * 2 + 1)
  41. #define SHA256_BLOCK_LENGTH 64
  42. #define SHA256_DIGEST_LENGTH 32
  43. #define SHA256_DIGEST_STRING_LENGTH (SHA256_DIGEST_LENGTH * 2 + 1)
  44. #define SHA384_BLOCK_LENGTH 128
  45. #define SHA384_DIGEST_LENGTH 48
  46. #define SHA384_DIGEST_STRING_LENGTH (SHA384_DIGEST_LENGTH * 2 + 1)
  47. #define SHA512_BLOCK_LENGTH 128
  48. #define SHA512_DIGEST_LENGTH 64
  49. #define SHA512_DIGEST_STRING_LENGTH (SHA512_DIGEST_LENGTH * 2 + 1)
  50. #define SHA512_256_BLOCK_LENGTH 128
  51. #define SHA512_256_DIGEST_LENGTH 32
  52. #define SHA512_256_DIGEST_STRING_LENGTH (SHA512_256_DIGEST_LENGTH * 2 + 1)
  53. /*** SHA-224/256/384/512 Context Structure *******************************/
  54. typedef struct _SHA2_CTX {
  55. union {
  56. u_int32_t st32[8];
  57. u_int64_t st64[8];
  58. } state;
  59. u_int64_t bitcount[2];
  60. u_int8_t buffer[SHA512_BLOCK_LENGTH];
  61. } SHA2_CTX;
  62. __BEGIN_DECLS
  63. void SHA224Init(SHA2_CTX *);
  64. void SHA224Transform(u_int32_t state[8], const u_int8_t [SHA224_BLOCK_LENGTH]);
  65. void SHA224Update(SHA2_CTX *, const u_int8_t *, size_t)
  66. __attribute__((__bounded__(__string__,2,3)));
  67. void SHA224Pad(SHA2_CTX *);
  68. void SHA224Final(u_int8_t [SHA224_DIGEST_LENGTH], SHA2_CTX *)
  69. __attribute__((__bounded__(__minbytes__,1,SHA224_DIGEST_LENGTH)));
  70. char *SHA224End(SHA2_CTX *, char *)
  71. __attribute__((__bounded__(__minbytes__,2,SHA224_DIGEST_STRING_LENGTH)));
  72. char *SHA224File(const char *, char *)
  73. __attribute__((__bounded__(__minbytes__,2,SHA224_DIGEST_STRING_LENGTH)));
  74. char *SHA224FileChunk(const char *, char *, off_t, off_t)
  75. __attribute__((__bounded__(__minbytes__,2,SHA224_DIGEST_STRING_LENGTH)));
  76. char *SHA224Data(const u_int8_t *, size_t, char *)
  77. __attribute__((__bounded__(__string__,1,2)))
  78. __attribute__((__bounded__(__minbytes__,3,SHA224_DIGEST_STRING_LENGTH)));
  79. void SHA256Init(SHA2_CTX *);
  80. void SHA256Transform(u_int32_t state[8], const u_int8_t [SHA256_BLOCK_LENGTH]);
  81. void SHA256Update(SHA2_CTX *, const u_int8_t *, size_t)
  82. __attribute__((__bounded__(__string__,2,3)));
  83. void SHA256Pad(SHA2_CTX *);
  84. void SHA256Final(u_int8_t [SHA256_DIGEST_LENGTH], SHA2_CTX *)
  85. __attribute__((__bounded__(__minbytes__,1,SHA256_DIGEST_LENGTH)));
  86. char *SHA256End(SHA2_CTX *, char *)
  87. __attribute__((__bounded__(__minbytes__,2,SHA256_DIGEST_STRING_LENGTH)));
  88. char *SHA256File(const char *, char *)
  89. __attribute__((__bounded__(__minbytes__,2,SHA256_DIGEST_STRING_LENGTH)));
  90. char *SHA256FileChunk(const char *, char *, off_t, off_t)
  91. __attribute__((__bounded__(__minbytes__,2,SHA256_DIGEST_STRING_LENGTH)));
  92. char *SHA256Data(const u_int8_t *, size_t, char *)
  93. __attribute__((__bounded__(__string__,1,2)))
  94. __attribute__((__bounded__(__minbytes__,3,SHA256_DIGEST_STRING_LENGTH)));
  95. void SHA384Init(SHA2_CTX *);
  96. void SHA384Transform(u_int64_t state[8], const u_int8_t [SHA384_BLOCK_LENGTH]);
  97. void SHA384Update(SHA2_CTX *, const u_int8_t *, size_t)
  98. __attribute__((__bounded__(__string__,2,3)));
  99. void SHA384Pad(SHA2_CTX *);
  100. void SHA384Final(u_int8_t [SHA384_DIGEST_LENGTH], SHA2_CTX *)
  101. __attribute__((__bounded__(__minbytes__,1,SHA384_DIGEST_LENGTH)));
  102. char *SHA384End(SHA2_CTX *, char *)
  103. __attribute__((__bounded__(__minbytes__,2,SHA384_DIGEST_STRING_LENGTH)));
  104. char *SHA384File(const char *, char *)
  105. __attribute__((__bounded__(__minbytes__,2,SHA384_DIGEST_STRING_LENGTH)));
  106. char *SHA384FileChunk(const char *, char *, off_t, off_t)
  107. __attribute__((__bounded__(__minbytes__,2,SHA384_DIGEST_STRING_LENGTH)));
  108. char *SHA384Data(const u_int8_t *, size_t, char *)
  109. __attribute__((__bounded__(__string__,1,2)))
  110. __attribute__((__bounded__(__minbytes__,3,SHA384_DIGEST_STRING_LENGTH)));
  111. void SHA512Init(SHA2_CTX *);
  112. void SHA512Transform(u_int64_t state[8], const u_int8_t [SHA512_BLOCK_LENGTH]);
  113. void SHA512Update(SHA2_CTX *, const u_int8_t *, size_t)
  114. __attribute__((__bounded__(__string__,2,3)));
  115. void SHA512Pad(SHA2_CTX *);
  116. void SHA512Final(u_int8_t [SHA512_DIGEST_LENGTH], SHA2_CTX *)
  117. __attribute__((__bounded__(__minbytes__,1,SHA512_DIGEST_LENGTH)));
  118. char *SHA512End(SHA2_CTX *, char *)
  119. __attribute__((__bounded__(__minbytes__,2,SHA512_DIGEST_STRING_LENGTH)));
  120. char *SHA512File(const char *, char *)
  121. __attribute__((__bounded__(__minbytes__,2,SHA512_DIGEST_STRING_LENGTH)));
  122. char *SHA512FileChunk(const char *, char *, off_t, off_t)
  123. __attribute__((__bounded__(__minbytes__,2,SHA512_DIGEST_STRING_LENGTH)));
  124. char *SHA512Data(const u_int8_t *, size_t, char *)
  125. __attribute__((__bounded__(__string__,1,2)))
  126. __attribute__((__bounded__(__minbytes__,3,SHA512_DIGEST_STRING_LENGTH)));
  127. void SHA512_256Init(SHA2_CTX *);
  128. void SHA512_256Transform(u_int64_t state[8], const u_int8_t [SHA512_256_BLOCK_LENGTH]);
  129. void SHA512_256Update(SHA2_CTX *, const u_int8_t *, size_t)
  130. __attribute__((__bounded__(__string__,2,3)));
  131. void SHA512_256Pad(SHA2_CTX *);
  132. void SHA512_256Final(u_int8_t [SHA512_256_DIGEST_LENGTH], SHA2_CTX *)
  133. __attribute__((__bounded__(__minbytes__,1,SHA512_256_DIGEST_LENGTH)));
  134. char *SHA512_256End(SHA2_CTX *, char *)
  135. __attribute__((__bounded__(__minbytes__,2,SHA512_256_DIGEST_STRING_LENGTH)));
  136. char *SHA512_256File(const char *, char *)
  137. __attribute__((__bounded__(__minbytes__,2,SHA512_256_DIGEST_STRING_LENGTH)));
  138. char *SHA512_256FileChunk(const char *, char *, off_t, off_t)
  139. __attribute__((__bounded__(__minbytes__,2,SHA512_256_DIGEST_STRING_LENGTH)));
  140. char *SHA512_256Data(const u_int8_t *, size_t, char *)
  141. __attribute__((__bounded__(__string__,1,2)))
  142. __attribute__((__bounded__(__minbytes__,3,SHA512_256_DIGEST_STRING_LENGTH)));
  143. __END_DECLS
  144. #endif /* _SHA2_H */