sec_sign_extension.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. #ifndef _SEC_SIGN_EXTENSION_H
  2. #define _SEC_SIGN_EXTENSION_H
  3. #define MAX_VERITY_COUNT 32
  4. #define SEC_EXTENSION_MAGIC (0x7A797A79)
  5. #define SEC_EXTENSION_MAGIC_V4 (0x7B797B79)
  6. #define SEC_EXTENSION_HEADER_MAGIC (0x45454545)
  7. #define CRYPTO_SIZE_UNKNOWN 0
  8. typedef enum {
  9. SEC_EXT_HDR_UNKNOWN = 0,
  10. SEC_EXT_HDR_CRYPTO = 1,
  11. SEC_EXT_HDR_FRAG_CFG = 2,
  12. SEC_EXT_HDR_HASH_ONLY = 3,
  13. SEC_EXT_HDR_HASH_SIG = 4,
  14. SEC_EXT_HDR_SPARSE = 5,
  15. SEC_EXT_HDR_HASH_ONLY_64 = 6,
  16. SEC_EXT_HDR_END_MARK = 0xFFFFFFFF
  17. } SEC_EXT_HEADER_TYPE;
  18. typedef enum {
  19. SEC_CRYPTO_HASH_UNKNOWN = 0,
  20. SEC_CRYPTO_HASH_MD5 = 1,
  21. SEC_CRYPTO_HASH_SHA1 = 2,
  22. SEC_CRYPTO_HASH_SHA256 = 3,
  23. SEC_CRYPTO_HASH_SHA512 = 4,
  24. } SEC_CRYPTO_HASH_TYPE;
  25. typedef enum {
  26. SEC_CRYPTO_SIG_UNKNOWN = 0,
  27. SEC_CRYPTO_SIG_RSA512 = 1,
  28. SEC_CRYPTO_SIG_RSA1024 = 2,
  29. SEC_CRYPTO_SIG_RSA2048 = 3,
  30. } SEC_CRYPTO_SIGNATURE_TYPE;
  31. typedef enum {
  32. SEC_CRYPTO_ENC_UNKNOWN = 0,
  33. SEC_CRYPTO_ENC_RC4 = 1,
  34. SEC_CRYPTO_ENC_AES128 = 2,
  35. SEC_CRYPTO_ENC_AES192 = 3,
  36. SEC_CRYPTO_ENC_AES256 = 4,
  37. } SEC_CRYPTO_ENCRYPTION_TYPE;
  38. typedef enum {
  39. SEC_SIZE_HASH_MD5 = 16,
  40. SEC_SIZE_HASH_SHA1 = 20,
  41. SEC_SIZE_HASH_SHA256 = 32,
  42. SEC_SIZE_HASH_SHA512 = 64,
  43. } SEC_CRYPTO_HASH_SIZE_BYTES;
  44. typedef enum {
  45. SEC_SIZE_SIG_RSA512 = 64,
  46. SEC_SIZE_SIG_RSA1024 = 128,
  47. SEC_SIZE_SIG_RSA2048 = 256,
  48. } SEC_CRYPTO_SIGNATURE_SIZE_BYTES;
  49. typedef enum {
  50. SEC_CHUNK_SIZE_ZERO = 0,
  51. SEC_CHUNK_SIZE_UNKNOWN = 0x00100000,
  52. SEC_CHUNK_SIZE_1M = 0x00100000,
  53. SEC_CHUNK_SIZE_2M = 0x00200000,
  54. SEC_CHUNK_SIZE_4M = 0x00400000,
  55. SEC_CHUNK_SIZE_8M = 0x00800000,
  56. SEC_CHUNK_SIZE_16M = 0x01000000,
  57. SEC_CHUNK_SIZE_32M = 0x02000000,
  58. } SEC_FRAG_CHUNK_SIZE_BYTES;
  59. typedef struct _SEC_EXTENSTION_CRYPTO {
  60. unsigned int magic;
  61. unsigned int ext_type;
  62. unsigned char hash_type;
  63. unsigned char sig_type;
  64. unsigned char enc_type;
  65. unsigned char reserved;
  66. } SEC_EXTENSTION_CRYPTO;
  67. typedef struct _SEC_FRAGMENT_CFG {
  68. unsigned int magic;
  69. unsigned int ext_type;
  70. unsigned int chunk_size;
  71. unsigned int frag_count;
  72. } SEC_FRAGMENT_CFG;
  73. typedef struct _SEC_EXTENSTION_HASH_ONLY {
  74. unsigned int magic;
  75. unsigned int ext_type;
  76. unsigned int sub_type; /* hash type */
  77. unsigned int hash_offset;
  78. unsigned int hash_len;
  79. unsigned char hash_data[];
  80. } SEC_EXTENSTION_HASH_ONLY;
  81. typedef struct _SEC_EXTENSTION_HASH_ONLY_64 {
  82. unsigned int magic;
  83. unsigned int ext_type;
  84. unsigned int sub_type; /* hash type */
  85. unsigned int padding;
  86. unsigned long long hash_offset_64;
  87. unsigned long long hash_len_64;
  88. unsigned char hash_data[];
  89. } SEC_EXTENSTION_HASH_ONLY_64;
  90. typedef struct _SEC_EXTENSTION_HASH_SIG {
  91. unsigned int magic;
  92. unsigned int ext_type;
  93. unsigned int sig_type; /* sig type */
  94. unsigned int hash_type; /* hash type */
  95. unsigned int auth_offset;
  96. unsigned int auth_len;
  97. unsigned char auth_data[]; /* sig + hash */
  98. } SEC_EXTENSTION_HASH_SIG;
  99. typedef struct _SEC_EXTENSTION_END_MARK {
  100. unsigned int magic;
  101. unsigned int ext_type;
  102. } SEC_EXTENSTION_END_MARK;
  103. typedef struct _SEC_IMG_EXTENSTION_SET {
  104. SEC_EXTENSTION_CRYPTO *crypto;
  105. SEC_FRAGMENT_CFG *frag;
  106. SEC_EXTENSTION_END_MARK *end;
  107. SEC_EXTENSTION_HASH_ONLY **hash_only;
  108. SEC_EXTENSTION_HASH_ONLY_64 **hash_only_64;
  109. } SEC_IMG_EXTENSTION_SET;
  110. #endif