verification.h 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /* SPDX-License-Identifier: GPL-2.0-or-later */
  2. /* Signature verification
  3. *
  4. * Copyright (C) 2014 Red Hat, Inc. All Rights Reserved.
  5. * Written by David Howells ([email protected])
  6. */
  7. #ifndef _LINUX_VERIFICATION_H
  8. #define _LINUX_VERIFICATION_H
  9. #include <linux/errno.h>
  10. #include <linux/types.h>
  11. /*
  12. * Indicate that both builtin trusted keys and secondary trusted keys
  13. * should be used.
  14. */
  15. #define VERIFY_USE_SECONDARY_KEYRING ((struct key *)1UL)
  16. #define VERIFY_USE_PLATFORM_KEYRING ((struct key *)2UL)
  17. static inline int system_keyring_id_check(u64 id)
  18. {
  19. if (id > (unsigned long)VERIFY_USE_PLATFORM_KEYRING)
  20. return -EINVAL;
  21. return 0;
  22. }
  23. /*
  24. * The use to which an asymmetric key is being put.
  25. */
  26. enum key_being_used_for {
  27. VERIFYING_MODULE_SIGNATURE,
  28. VERIFYING_FIRMWARE_SIGNATURE,
  29. VERIFYING_KEXEC_PE_SIGNATURE,
  30. VERIFYING_KEY_SIGNATURE,
  31. VERIFYING_KEY_SELF_SIGNATURE,
  32. VERIFYING_UNSPECIFIED_SIGNATURE,
  33. NR__KEY_BEING_USED_FOR
  34. };
  35. extern const char *const key_being_used_for[NR__KEY_BEING_USED_FOR];
  36. #ifdef CONFIG_SYSTEM_DATA_VERIFICATION
  37. struct key;
  38. struct pkcs7_message;
  39. extern int verify_pkcs7_signature(const void *data, size_t len,
  40. const void *raw_pkcs7, size_t pkcs7_len,
  41. struct key *trusted_keys,
  42. enum key_being_used_for usage,
  43. int (*view_content)(void *ctx,
  44. const void *data, size_t len,
  45. size_t asn1hdrlen),
  46. void *ctx);
  47. extern int verify_pkcs7_message_sig(const void *data, size_t len,
  48. struct pkcs7_message *pkcs7,
  49. struct key *trusted_keys,
  50. enum key_being_used_for usage,
  51. int (*view_content)(void *ctx,
  52. const void *data,
  53. size_t len,
  54. size_t asn1hdrlen),
  55. void *ctx);
  56. #ifdef CONFIG_SIGNED_PE_FILE_VERIFICATION
  57. extern int verify_pefile_signature(const void *pebuf, unsigned pelen,
  58. struct key *trusted_keys,
  59. enum key_being_used_for usage);
  60. #endif
  61. #endif /* CONFIG_SYSTEM_DATA_VERIFICATION */
  62. #endif /* _LINUX_VERIFY_PEFILE_H */