-
Notifications
You must be signed in to change notification settings - Fork 20
/
sec_sign_extension.h
152 lines (124 loc) · 3.39 KB
/
sec_sign_extension.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#ifndef _SEC_SIGN_EXTENSION_H
#define _SEC_SIGN_EXTENSION_H
#define MAX_VERITY_COUNT 32
#define SEC_EXTENSION_MAGIC (0x7A797A79)
#define SEC_EXTENSION_MAGIC_V4 (0x7B797B79)
#define SEC_EXTENSION_HEADER_MAGIC (0x45454545)
#define CRYPTO_SIZE_UNKNOWN 0
typedef enum
{
SEC_EXT_HDR_UNKNOWN = 0,
SEC_EXT_HDR_CRYPTO = 1,
SEC_EXT_HDR_FRAG_CFG = 2,
SEC_EXT_HDR_HASH_ONLY = 3,
SEC_EXT_HDR_HASH_SIG = 4,
SEC_EXT_HDR_SPARSE = 5,
SEC_EXT_HDR_HASH_ONLY_64 = 6,
SEC_EXT_HDR_END_MARK = 0xFFFFFFFF
} SEC_EXT_HEADER_TYPE;
typedef enum
{
SEC_CRYPTO_HASH_UNKNOWN = 0,
SEC_CRYPTO_HASH_MD5 = 1,
SEC_CRYPTO_HASH_SHA1 = 2,
SEC_CRYPTO_HASH_SHA256 = 3,
SEC_CRYPTO_HASH_SHA512 = 4,
} SEC_CRYPTO_HASH_TYPE;
typedef enum
{
SEC_CRYPTO_SIG_UNKNOWN = 0,
SEC_CRYPTO_SIG_RSA512 = 1,
SEC_CRYPTO_SIG_RSA1024 = 2,
SEC_CRYPTO_SIG_RSA2048 = 3,
} SEC_CRYPTO_SIGNATURE_TYPE;
typedef enum
{
SEC_CRYPTO_ENC_UNKNOWN = 0,
SEC_CRYPTO_ENC_RC4 = 1,
SEC_CRYPTO_ENC_AES128 = 2,
SEC_CRYPTO_ENC_AES192 = 3,
SEC_CRYPTO_ENC_AES256 = 4,
} SEC_CRYPTO_ENCRYPTION_TYPE;
typedef enum
{
SEC_SIZE_HASH_MD5 = 16,
SEC_SIZE_HASH_SHA1 = 20,
SEC_SIZE_HASH_SHA256 = 32,
SEC_SIZE_HASH_SHA512 = 64,
} SEC_CRYPTO_HASH_SIZE_BYTES;
typedef enum
{
SEC_SIZE_SIG_RSA512 = 64,
SEC_SIZE_SIG_RSA1024 = 128,
SEC_SIZE_SIG_RSA2048 = 256,
} SEC_CRYPTO_SIGNATURE_SIZE_BYTES;
typedef enum
{
SEC_CHUNK_SIZE_ZERO = 0,
SEC_CHUNK_SIZE_UNKNOWN = 0x00100000,
SEC_CHUNK_SIZE_1M = 0x00100000,
SEC_CHUNK_SIZE_2M = 0x00200000,
SEC_CHUNK_SIZE_4M = 0x00400000,
SEC_CHUNK_SIZE_8M = 0x00800000,
SEC_CHUNK_SIZE_16M = 0x01000000,
SEC_CHUNK_SIZE_32M = 0x02000000,
} SEC_FRAG_CHUNK_SIZE_BYTES;
typedef struct _SEC_EXTENSTION_CRYPTO
{
unsigned int magic;
unsigned int ext_type;
unsigned char hash_type;
unsigned char sig_type;
unsigned char enc_type;
unsigned char reserved;
} SEC_EXTENSTION_CRYPTO;
typedef struct _SEC_FRAGMENT_CFG
{
unsigned int magic;
unsigned int ext_type;
unsigned int chunk_size;
unsigned int frag_count;
} SEC_FRAGMENT_CFG;
typedef struct _SEC_EXTENSTION_HASH_ONLY
{
unsigned int magic;
unsigned int ext_type;
unsigned int sub_type; /* hash type */
unsigned int hash_offset;
unsigned int hash_len;
unsigned char hash_data[];
} SEC_EXTENSTION_HASH_ONLY;
typedef struct _SEC_EXTENSTION_HASH_ONLY_64
{
unsigned int magic;
unsigned int ext_type;
unsigned int sub_type; /* hash type */
unsigned int padding;
unsigned long long hash_offset_64;
unsigned long long hash_len_64;
unsigned char hash_data[];
} SEC_EXTENSTION_HASH_ONLY_64;
typedef struct _SEC_EXTENSTION_HASH_SIG
{
unsigned int magic;
unsigned int ext_type;
unsigned int sig_type; /* sig type */
unsigned int hash_type; /* hash type */
unsigned int auth_offset;
unsigned int auth_len;
unsigned char auth_data[]; /* sig + hash */
} SEC_EXTENSTION_HASH_SIG;
typedef struct _SEC_EXTENSTION_END_MARK
{
unsigned int magic;
unsigned int ext_type;
} SEC_EXTENSTION_END_MARK;
typedef struct _SEC_IMG_EXTENSTION_SET
{
SEC_EXTENSTION_CRYPTO *crypto;
SEC_FRAGMENT_CFG *frag;
SEC_EXTENSTION_END_MARK *end;
SEC_EXTENSTION_HASH_ONLY **hash_only;
SEC_EXTENSTION_HASH_ONLY_64 **hash_only_64;
} SEC_IMG_EXTENSTION_SET;
#endif