sha.h 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. /*
  2. * Copyright (c) 2010-2014, The Linux Foundation. All rights reserved.
  3. *
  4. * This program is free software; you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License version 2 and
  6. * only version 2 as published by the Free Software Foundation.
  7. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU General Public License for more details.
  12. */
  13. #ifndef _SHA_H_
  14. #define _SHA_H_
  15. #include <crypto/scatterwalk.h>
  16. #include <crypto/sha.h>
  17. #include "common.h"
  18. #include "core.h"
  19. #define QCE_SHA_MAX_BLOCKSIZE SHA256_BLOCK_SIZE
  20. #define QCE_SHA_MAX_DIGESTSIZE SHA256_DIGEST_SIZE
  21. struct qce_sha_ctx {
  22. u8 authkey[QCE_SHA_MAX_BLOCKSIZE];
  23. };
  24. /**
  25. * struct qce_sha_reqctx - holds private ahash objects per request
  26. * @buf: used during update, import and export
  27. * @tmpbuf: buffer for internal use
  28. * @digest: calculated digest buffer
  29. * @buflen: length of the buffer
  30. * @flags: operation flags
  31. * @src_orig: original request sg list
  32. * @nbytes_orig: original request number of bytes
  33. * @src_nents: source number of entries
  34. * @byte_count: byte count
  35. * @count: save count in states during update, import and export
  36. * @first_blk: is it the first block
  37. * @last_blk: is it the last block
  38. * @sg: used to chain sg lists
  39. * @authkey: pointer to auth key in sha ctx
  40. * @authklen: auth key length
  41. * @result_sg: scatterlist used for result buffer
  42. */
  43. struct qce_sha_reqctx {
  44. u8 buf[QCE_SHA_MAX_BLOCKSIZE];
  45. u8 tmpbuf[QCE_SHA_MAX_BLOCKSIZE];
  46. u8 digest[QCE_SHA_MAX_DIGESTSIZE];
  47. unsigned int buflen;
  48. unsigned long flags;
  49. struct scatterlist *src_orig;
  50. unsigned int nbytes_orig;
  51. int src_nents;
  52. __be32 byte_count[2];
  53. u64 count;
  54. bool first_blk;
  55. bool last_blk;
  56. struct scatterlist sg[2];
  57. u8 *authkey;
  58. unsigned int authklen;
  59. struct scatterlist result_sg;
  60. };
  61. static inline struct qce_alg_template *to_ahash_tmpl(struct crypto_tfm *tfm)
  62. {
  63. struct crypto_ahash *ahash = __crypto_ahash_cast(tfm);
  64. struct ahash_alg *alg = container_of(crypto_hash_alg_common(ahash),
  65. struct ahash_alg, halg);
  66. return container_of(alg, struct qce_alg_template, alg.ahash);
  67. }
  68. extern const struct qce_algo_ops ahash_ops;
  69. #endif /* _SHA_H_ */