|
Lines 19-24
Link Here
|
| 19 |
|
19 |
|
| 20 |
#include "pesign.h" |
20 |
#include "pesign.h" |
| 21 |
|
21 |
|
|
|
22 |
#define EXTRA_OFFSET(offset,align) ((align - (offset % align)) % align) |
| 23 |
|
| 22 |
struct cert_list_entry { |
24 |
struct cert_list_entry { |
| 23 |
win_certificate wc; |
25 |
win_certificate wc; |
| 24 |
uint8_t data[]; |
26 |
uint8_t data[]; |
|
Lines 32-37
generate_cert_list(SECItem **signatures, int num_signatures,
Link Here
|
| 32 |
for (int i = 0; i < num_signatures; i++) { |
34 |
for (int i = 0; i < num_signatures; i++) { |
| 33 |
cl_size += sizeof (win_certificate); |
35 |
cl_size += sizeof (win_certificate); |
| 34 |
cl_size += signatures[i]->len; |
36 |
cl_size += signatures[i]->len; |
|
|
37 |
cl_size += EXTRA_OFFSET(cl_size, 8); |
| 35 |
} |
38 |
} |
| 36 |
|
39 |
|
| 37 |
uint8_t *data = malloc(cl_size); |
40 |
uint8_t *data = malloc(cl_size); |
|
Lines 44-55
generate_cert_list(SECItem **signatures, int num_signatures,
Link Here
|
| 44 |
for (int i = 0; i < num_signatures; i++) { |
47 |
for (int i = 0; i < num_signatures; i++) { |
| 45 |
struct cert_list_entry *cle = (struct cert_list_entry *)data; |
48 |
struct cert_list_entry *cle = (struct cert_list_entry *)data; |
| 46 |
cle->wc.length = signatures[i]->len + |
49 |
cle->wc.length = signatures[i]->len + |
|
|
50 |
EXTRA_OFFSET(signatures[i]->len, 8) + |
| 47 |
sizeof (win_certificate); |
51 |
sizeof (win_certificate); |
| 48 |
cle->wc.revision = WIN_CERT_REVISION_2_0; |
52 |
cle->wc.revision = WIN_CERT_REVISION_2_0; |
| 49 |
cle->wc.cert_type = WIN_CERT_TYPE_PKCS_SIGNED_DATA; |
53 |
cle->wc.cert_type = WIN_CERT_TYPE_PKCS_SIGNED_DATA; |
| 50 |
memcpy(&cle->data[0], signatures[i]->data, |
54 |
memcpy(&cle->data[0], signatures[i]->data, |
| 51 |
signatures[i]->len); |
55 |
signatures[i]->len); |
| 52 |
data += sizeof (win_certificate) + signatures[i]->len; |
56 |
data += sizeof (win_certificate) + signatures[i]->len; |
|
|
57 |
data += EXTRA_OFFSET(signatures[i]->len, 8); |
| 53 |
} |
58 |
} |
| 54 |
|
59 |
|
| 55 |
return 0; |
60 |
return 0; |
|
Lines 208-215
size_t
Link Here
|
| 208 |
get_reserved_sig_space(cms_context *cms, Pe *pe) |
213 |
get_reserved_sig_space(cms_context *cms, Pe *pe) |
| 209 |
{ |
214 |
{ |
| 210 |
size_t ret = 0; |
215 |
size_t ret = 0; |
| 211 |
for (int i = 0; i < cms->num_signatures; i++) |
216 |
for (int i = 0; i < cms->num_signatures; i++) { |
| 212 |
ret += cms->signatures[i]->len + sizeof (win_certificate); |
217 |
ret += cms->signatures[i]->len + sizeof (win_certificate); |
|
|
218 |
ret += EXTRA_OFFSET(ret, 8); |
| 219 |
} |
| 213 |
return ret; |
220 |
return ret; |
| 214 |
} |
221 |
} |
| 215 |
|
222 |
|
|
Lines 240-245
err:
Link Here
|
| 240 |
|
247 |
|
| 241 |
ssize_t ret = res + sig.len + sizeof(win_certificate) - |
248 |
ssize_t ret = res + sig.len + sizeof(win_certificate) - |
| 242 |
available_cert_space(pe); |
249 |
available_cert_space(pe); |
|
|
250 |
ret += EXTRA_OFFSET(ret, 8); |
| 243 |
|
251 |
|
| 244 |
//free(sig.data); |
252 |
//free(sig.data); |
| 245 |
|
253 |
|