xform_sha2.c 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. /* $OpenBSD: xform.c,v 1.16 2001/08/28 12:20:43 ben Exp $ */
  2. /*-
  3. * The authors of this code are John Ioannidis (ji@tla.org),
  4. * Angelos D. Keromytis (kermit@csd.uch.gr),
  5. * Niels Provos (provos@physnet.uni-hamburg.de) and
  6. * Damien Miller (djm@mindrot.org).
  7. *
  8. * This code was written by John Ioannidis for BSD/OS in Athens, Greece,
  9. * in November 1995.
  10. *
  11. * Ported to OpenBSD and NetBSD, with additional transforms, in December 1996,
  12. * by Angelos D. Keromytis.
  13. *
  14. * Additional transforms and features in 1997 and 1998 by Angelos D. Keromytis
  15. * and Niels Provos.
  16. *
  17. * Additional features in 1999 by Angelos D. Keromytis.
  18. *
  19. * AES XTS implementation in 2008 by Damien Miller
  20. *
  21. * Copyright (C) 1995, 1996, 1997, 1998, 1999 by John Ioannidis,
  22. * Angelos D. Keromytis and Niels Provos.
  23. *
  24. * Copyright (C) 2001, Angelos D. Keromytis.
  25. *
  26. * Copyright (C) 2008, Damien Miller
  27. * Copyright (c) 2014 The FreeBSD Foundation
  28. * All rights reserved.
  29. *
  30. * Portions of this software were developed by John-Mark Gurney
  31. * under sponsorship of the FreeBSD Foundation and
  32. * Rubicon Communications, LLC (Netgate).
  33. *
  34. * Permission to use, copy, and modify this software with or without fee
  35. * is hereby granted, provided that this entire notice is included in
  36. * all copies of any software which is or includes a copy or
  37. * modification of this software.
  38. * You may use this code under the GNU public license if you so wish. Please
  39. * contribute changes back to the authors under this freer than GPL license
  40. * so that we may further the use of strong encryption without limitations to
  41. * all.
  42. *
  43. * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR
  44. * IMPLIED WARRANTY. IN PARTICULAR, NONE OF THE AUTHORS MAKES ANY
  45. * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE
  46. * MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR
  47. * PURPOSE.
  48. */
  49. #include <sys/cdefs.h>
  50. __FBSDID("$FreeBSD$");
  51. #include <crypto/sha2/sha224.h>
  52. #include <crypto/sha2/sha256.h>
  53. #include <crypto/sha2/sha384.h>
  54. #include <crypto/sha2/sha512.h>
  55. #include <opencrypto/xform_auth.h>
  56. static int SHA224Update_int(void *, const void *, u_int);
  57. static int SHA256Update_int(void *, const void *, u_int);
  58. static int SHA384Update_int(void *, const void *, u_int);
  59. static int SHA512Update_int(void *, const void *, u_int);
  60. /* Plain hashes */
  61. struct auth_hash auth_hash_sha2_224 = {
  62. .type = CRYPTO_SHA2_224,
  63. .name = "SHA2-224",
  64. .hashsize = SHA2_224_HASH_LEN,
  65. .ctxsize = sizeof(SHA224_CTX),
  66. .blocksize = SHA2_224_BLOCK_LEN,
  67. .Init = (void (*)(void *)) SHA224_Init,
  68. .Update = SHA224Update_int,
  69. .Final = (void (*)(uint8_t *, void *)) SHA224_Final,
  70. };
  71. struct auth_hash auth_hash_sha2_256 = {
  72. .type = CRYPTO_SHA2_256,
  73. .name = "SHA2-256",
  74. .keysize = SHA2_256_BLOCK_LEN,
  75. .hashsize = SHA2_256_HASH_LEN,
  76. .ctxsize = sizeof(SHA256_CTX),
  77. .blocksize = SHA2_256_BLOCK_LEN,
  78. .Init = (void (*)(void *)) SHA256_Init,
  79. .Update = SHA256Update_int,
  80. .Final = (void (*)(uint8_t *, void *)) SHA256_Final,
  81. };
  82. struct auth_hash auth_hash_sha2_384 = {
  83. .type = CRYPTO_SHA2_384,
  84. .name = "SHA2-384",
  85. .keysize = SHA2_384_BLOCK_LEN,
  86. .hashsize = SHA2_384_HASH_LEN,
  87. .ctxsize = sizeof(SHA384_CTX),
  88. .blocksize = SHA2_384_BLOCK_LEN,
  89. .Init = (void (*)(void *)) SHA384_Init,
  90. .Update = SHA384Update_int,
  91. .Final = (void (*)(uint8_t *, void *)) SHA384_Final,
  92. };
  93. struct auth_hash auth_hash_sha2_512 = {
  94. .type = CRYPTO_SHA2_512,
  95. .name = "SHA2-512",
  96. .keysize = SHA2_512_BLOCK_LEN,
  97. .hashsize = SHA2_512_HASH_LEN,
  98. .ctxsize = sizeof(SHA512_CTX),
  99. .blocksize = SHA2_512_BLOCK_LEN,
  100. .Init = (void (*)(void *)) SHA512_Init,
  101. .Update = SHA512Update_int,
  102. .Final = (void (*)(uint8_t *, void *)) SHA512_Final,
  103. };
  104. /* Authentication instances */
  105. struct auth_hash auth_hash_hmac_sha2_224 = {
  106. .type = CRYPTO_SHA2_224_HMAC,
  107. .name = "HMAC-SHA2-224",
  108. .keysize = SHA2_224_BLOCK_LEN,
  109. .hashsize = SHA2_224_HASH_LEN,
  110. .ctxsize = sizeof(SHA224_CTX),
  111. .blocksize = SHA2_224_BLOCK_LEN,
  112. .Init = (void (*)(void *)) SHA224_Init,
  113. .Update = SHA224Update_int,
  114. .Final = (void (*)(uint8_t *, void *)) SHA224_Final,
  115. };
  116. struct auth_hash auth_hash_hmac_sha2_256 = {
  117. .type = CRYPTO_SHA2_256_HMAC,
  118. .name = "HMAC-SHA2-256",
  119. .keysize = SHA2_256_BLOCK_LEN,
  120. .hashsize = SHA2_256_HASH_LEN,
  121. .ctxsize = sizeof(SHA256_CTX),
  122. .blocksize = SHA2_256_BLOCK_LEN,
  123. .Init = (void (*)(void *)) SHA256_Init,
  124. .Update = SHA256Update_int,
  125. .Final = (void (*)(uint8_t *, void *)) SHA256_Final,
  126. };
  127. struct auth_hash auth_hash_hmac_sha2_384 = {
  128. .type = CRYPTO_SHA2_384_HMAC,
  129. .name = "HMAC-SHA2-384",
  130. .keysize = SHA2_384_BLOCK_LEN,
  131. .hashsize = SHA2_384_HASH_LEN,
  132. .ctxsize = sizeof(SHA384_CTX),
  133. .blocksize = SHA2_384_BLOCK_LEN,
  134. .Init = (void (*)(void *)) SHA384_Init,
  135. .Update = SHA384Update_int,
  136. .Final = (void (*)(uint8_t *, void *)) SHA384_Final,
  137. };
  138. struct auth_hash auth_hash_hmac_sha2_512 = {
  139. .type = CRYPTO_SHA2_512_HMAC,
  140. .name = "HMAC-SHA2-512",
  141. .keysize = SHA2_512_BLOCK_LEN,
  142. .hashsize = SHA2_512_HASH_LEN,
  143. .ctxsize = sizeof(SHA512_CTX),
  144. .blocksize = SHA2_512_BLOCK_LEN,
  145. .Init = (void (*)(void *)) SHA512_Init,
  146. .Update = SHA512Update_int,
  147. .Final = (void (*)(uint8_t *, void *)) SHA512_Final,
  148. };
  149. /*
  150. * And now for auth.
  151. */
  152. static int
  153. SHA224Update_int(void *ctx, const void *buf, u_int len)
  154. {
  155. SHA224_Update(ctx, buf, len);
  156. return 0;
  157. }
  158. static int
  159. SHA256Update_int(void *ctx, const void *buf, u_int len)
  160. {
  161. SHA256_Update(ctx, buf, len);
  162. return 0;
  163. }
  164. static int
  165. SHA384Update_int(void *ctx, const void *buf, u_int len)
  166. {
  167. SHA384_Update(ctx, buf, len);
  168. return 0;
  169. }
  170. static int
  171. SHA512Update_int(void *ctx, const void *buf, u_int len)
  172. {
  173. SHA512_Update(ctx, buf, len);
  174. return 0;
  175. }