| line |
true |
false |
branch |
|
76
|
0 |
0 |
for (i = 0; i < 16; i++) { |
|
82
|
0 |
0 |
for (i = 16; i < 64; i++) { |
|
89
|
0 |
0 |
for (i = 0; i < 64; i++) { |
|
122
|
0 |
0 |
if (len >= part_len) { |
|
126
|
0 |
0 |
for (j = part_len; j + 63 < len; j += 64) { |
|
140
|
0 |
0 |
size_t pad_len = (i < 56) ? (56 - i) : (120 - i); |
|
146
|
0 |
0 |
for (j = 0; j < 8; j++) { |
|
151
|
0 |
0 |
for (j = 0; j < 8; j++) { |
|
207
|
0 |
0 |
for (i = 0; i < 16; i++) { |
|
217
|
0 |
0 |
for (i = 16; i < 80; i++) { |
|
224
|
0 |
0 |
for (i = 0; i < 80; i++) { |
|
268
|
0 |
0 |
if (ctx->count[0] < ((uint64_t)len << 3)) { |
|
274
|
0 |
0 |
if (len >= part_len) { |
|
278
|
0 |
0 |
for (j = part_len; j + 127 < len; j += 128) { |
|
291
|
0 |
0 |
size_t pad_len = (i < 112) ? (112 - i) : (240 - i); |
|
297
|
0 |
0 |
for (j = 0; j < 8; j++) { |
|
303
|
0 |
0 |
for (j = 0; j < 8; j++) { |
|
352
|
0 |
0 |
for (i = 0; i < 16; i++) { |
|
358
|
0 |
0 |
for (i = 16; i < 80; i++) { |
|
364
|
0 |
0 |
for (i = 0; i < 80; i++) { |
|
365
|
0 |
0 |
if (i < 20) { |
|
368
|
0 |
0 |
} else if (i < 40) { |
|
371
|
0 |
0 |
} else if (i < 60) { |
|
395
|
0 |
0 |
if (len >= part_len) { |
|
399
|
0 |
0 |
for (j = part_len; j + 63 < len; j += 64) { |
|
413
|
0 |
0 |
size_t pad_len = (i < 56) ? (56 - i) : (120 - i); |
|
419
|
0 |
0 |
for (j = 0; j < 8; j++) { |
|
424
|
0 |
0 |
for (j = 0; j < 5; j++) { |
|
448
|
0 |
0 |
if (!ctx) return NULL; |
|
475
|
0 |
0 |
if (!ctx || !data) return; |
|
|
0 |
0 |
if (!ctx || !data) return; |
|
493
|
0 |
0 |
if (!ctx || !digest) return 0; |
|
|
0 |
0 |
if (!ctx || !digest) return 0; |
|
515
|
0 |
0 |
if (ctx) { |
|
529
|
0 |
0 |
if (!ctx) return 0; |
|
555
|
0 |
0 |
if (!config) return; |
|
611
|
0 |
0 |
if (!cert->tbs_certificate || cert->tbs_certificate_len == 0) return -1; |
|
|
0 |
0 |
if (!cert->tbs_certificate || cert->tbs_certificate_len == 0) return -1; |
|
613
|
0 |
0 |
if (!tbs) return -1; |
|
617
|
0 |
0 |
if (!first) return -1; |
|
619
|
0 |
0 |
if ((first->tag & ASN1_CLASS_MASK) == ASN1_CLASS_CONTEXT |
|
620
|
0 |
0 |
&& (first->tag & 0x1F) == 0) { |
|
625
|
0 |
0 |
if (!issuer) return -1; |
|
630
|
0 |
0 |
if (issuer->length >= 0x80) { |
|
631
|
0 |
0 |
if (issuer->length < 0x100) hdr = 3; |
|
632
|
0 |
0 |
else if (issuer->length < 0x10000) hdr = 4; |
|
695
|
0 |
0 |
if (cert_sha256) { |
|
731
|
0 |
0 |
if (pdfmake_buf_init(&sa_buf) != PDFMAKE_OK) return PDFMAKE_ENOMEM; |
|
739
|
0 |
0 |
if (!h) { pdfmake_buf_free(&sa_buf); return PDFMAKE_ENOMEM; } |
|
760
|
0 |
0 |
if (!tst_token || tst_token_len == 0) return; |
|
|
0 |
0 |
if (!tst_token || tst_token_len == 0) return; |
|
840
|
0 |
0 |
if (!arena || !config || !digest || !out) return PDFMAKE_EINVAL; |
|
|
0 |
0 |
if (!arena || !config || !digest || !out) return PDFMAKE_EINVAL; |
|
|
0 |
0 |
if (!arena || !config || !digest || !out) return PDFMAKE_EINVAL; |
|
|
0 |
0 |
if (!arena || !config || !digest || !out) return PDFMAKE_EINVAL; |
|
841
|
0 |
0 |
if (!config->identity || !config->identity->privkey || |
|
|
0 |
0 |
if (!config->identity || !config->identity->privkey || |
|
842
|
0 |
0 |
!config->identity->cert) return PDFMAKE_EINVAL; |
|
848
|
0 |
0 |
: PDFMAKE_HASH_SHA256; |
|
851
|
0 |
0 |
: time(NULL); |
|
856
|
0 |
0 |
if (!h) return PDFMAKE_ENOMEM; |
|
868
|
0 |
0 |
if (err != PDFMAKE_OK) return err; |
|
873
|
0 |
0 |
if (find_issuer_der(arena, cert, &issuer_der, &issuer_len) != 0) { |
|
933
|
0 |
0 |
if (!arena || !digest || !out) return PDFMAKE_EINVAL; |
|
|
0 |
0 |
if (!arena || !digest || !out) return PDFMAKE_EINVAL; |
|
|
0 |
0 |
if (!arena || !digest || !out) return PDFMAKE_EINVAL; |
|
948
|
0 |
0 |
if (cert_req) { |
|
967
|
0 |
0 |
if (!arena || !resp_der || !token || !token_len) return -1; |
|
|
0 |
0 |
if (!arena || !resp_der || !token || !token_len) return -1; |
|
|
0 |
0 |
if (!arena || !resp_der || !token || !token_len) return -1; |
|
|
0 |
0 |
if (!arena || !resp_der || !token || !token_len) return -1; |
|
979
|
0 |
0 |
if (!root) return -1; |
|
982
|
0 |
0 |
if (!status_info) return -1; |
|
986
|
0 |
0 |
if (status && pdfmake_asn1_get_int64(status, &status_value) != 0) { |
|
|
0 |
0 |
if (status && pdfmake_asn1_get_int64(status, &status_value) != 0) { |
|
990
|
0 |
0 |
if (status_value != 0 && status_value != 1) return -2; |
|
|
0 |
0 |
if (status_value != 0 && status_value != 1) return -2; |
|
993
|
0 |
0 |
if (!tst) return -1; |
|
999
|
0 |
0 |
if (tst->length >= 0x80) { |
|
1000
|
0 |
0 |
if (tst->length < 0x100) hdr = 3; |
|
1001
|
0 |
0 |
else if (tst->length < 0x10000) hdr = 4; |
|
1022
|
0 |
0 |
if (!arena || !cms_der || !sig_bytes || !sig_len) return -1; |
|
|
0 |
0 |
if (!arena || !cms_der || !sig_bytes || !sig_len) return -1; |
|
|
0 |
0 |
if (!arena || !cms_der || !sig_bytes || !sig_len) return -1; |
|
|
0 |
0 |
if (!arena || !cms_der || !sig_bytes || !sig_len) return -1; |
|
1043
|
0 |
0 |
if (!root) return -1; |
|
1046
|
0 |
0 |
if (!content) return -1; |
|
1048
|
0 |
0 |
if (!sd) return -1; |
|
1053
|
0 |
0 |
for (i = 0; i < nc; i++) { |
|
1055
|
0 |
0 |
if (c && (c->tag & 0x1F) == ASN1_TAG_SET) sinfos = c; |
|
|
0 |
0 |
if (c && (c->tag & 0x1F) == ASN1_TAG_SET) sinfos = c; |
|
1057
|
0 |
0 |
if (!sinfos) return -1; |
|
1060
|
0 |
0 |
if (!si) return -1; |
|
1066
|
0 |
0 |
for (i = 0; i < sic; i++) { |
|
1068
|
0 |
0 |
if (c && c->tag == ASN1_TAG_OCTET_STRING) { |
|
|
0 |
0 |
if (c && c->tag == ASN1_TAG_OCTET_STRING) { |
|
1079
|
0 |
0 |
if (content_len < 0x80) return 2; |
|
1080
|
0 |
0 |
if (content_len < 0x100) return 3; |
|
1081
|
0 |
0 |
if (content_len < 0x10000) return 4; |
|
1082
|
0 |
0 |
if (content_len < 0x1000000) return 5; |
|
1091
|
0 |
0 |
if (!der || der_len < 2 || !out_len) return -1; |
|
|
0 |
0 |
if (!der || der_len < 2 || !out_len) return -1; |
|
|
0 |
0 |
if (!der || der_len < 2 || !out_len) return -1; |
|
1093
|
0 |
0 |
if ((der[1] & 0x80) == 0) { |
|
1095
|
0 |
0 |
if (2 + content_len > der_len) return -1; |
|
1101
|
0 |
0 |
if (nbytes == 0 || nbytes > sizeof(size_t) || 2 + nbytes > der_len) return -1; |
|
|
0 |
0 |
if (nbytes == 0 || nbytes > sizeof(size_t) || 2 + nbytes > der_len) return -1; |
|
|
0 |
0 |
if (nbytes == 0 || nbytes > sizeof(size_t) || 2 + nbytes > der_len) return -1; |
|
1104
|
0 |
0 |
for (i = 0; i < nbytes; i++) { |
|
1107
|
0 |
0 |
if (2 + nbytes + content_len > der_len) return -1; |
|
1115
|
0 |
0 |
if (!oid_node || !out) return -1; |
|
|
0 |
0 |
if (!oid_node || !out) return -1; |
|
1116
|
0 |
0 |
if (pdfmake_asn1_oid_equals(oid_node, OID_SHA1)) { |
|
1120
|
0 |
0 |
if (pdfmake_asn1_oid_equals(oid_node, OID_SHA256)) { |
|
1124
|
0 |
0 |
if (pdfmake_asn1_oid_equals(oid_node, OID_SHA384)) { |
|
1128
|
0 |
0 |
if (pdfmake_asn1_oid_equals(oid_node, OID_SHA512)) { |
|
1138
|
0 |
0 |
while (a_len > 0 && *a == 0) { a++; a_len--; } |
|
|
0 |
0 |
while (a_len > 0 && *a == 0) { a++; a_len--; } |
|
1139
|
0 |
0 |
while (b_len > 0 && *b == 0) { b++; b_len--; } |
|
|
0 |
0 |
while (b_len > 0 && *b == 0) { b++; b_len--; } |
|
1140
|
0 |
0 |
if (a_len != b_len) return 0; |
|
1149
|
0 |
0 |
if (!si) return NULL; |
|
1151
|
0 |
0 |
for (i = 0; i < n; i++) { |
|
1153
|
0 |
0 |
if (c && (c->tag & ASN1_CLASS_MASK) == ASN1_CLASS_CONTEXT && |
|
|
0 |
0 |
if (c && (c->tag & ASN1_CLASS_MASK) == ASN1_CLASS_CONTEXT && |
|
1154
|
0 |
0 |
(c->tag & 0x1F) == 0) { |
|
1166
|
0 |
0 |
if (!si) return NULL; |
|
1168
|
0 |
0 |
for (i = 0; i < n; i++) { |
|
1170
|
0 |
0 |
if (c && (c->tag & ASN1_CLASS_MASK) == ASN1_CLASS_CONTEXT && |
|
|
0 |
0 |
if (c && (c->tag & ASN1_CLASS_MASK) == ASN1_CLASS_CONTEXT && |
|
1171
|
0 |
0 |
(c->tag & 0x1F) == 1) { |
|
1213
|
0 |
0 |
if (!arena || !der || len == 0) return NULL; |
|
|
0 |
0 |
if (!arena || !der || len == 0) return NULL; |
|
|
0 |
0 |
if (!arena || !der || len == 0) return NULL; |
|
1217
|
0 |
0 |
if (!root) return NULL; |
|
1220
|
0 |
0 |
if (!pkcs7) return NULL; |
|
1228
|
0 |
0 |
if (!content) return pkcs7; |
|
1230
|
0 |
0 |
if (!sd) return pkcs7; |
|
1234
|
0 |
0 |
if (das && pdfmake_asn1_is_set(das)) { |
|
|
0 |
0 |
if (das && pdfmake_asn1_is_set(das)) { |
|
1236
|
0 |
0 |
alg_oid = alg_seq ? pdfmake_asn1_child_at(alg_seq, 0) : NULL; |
|
1237
|
0 |
0 |
if (hash_alg_from_oid_node(alg_oid, &ha) == 0) { |
|
1250
|
0 |
0 |
for (i = 0; i < n; i++) { |
|
1252
|
0 |
0 |
if (!c) continue; |
|
1253
|
0 |
0 |
if ((c->tag & ASN1_CLASS_MASK) == ASN1_CLASS_CONTEXT && (c->tag & 0x1F) == 0) { |
|
|
0 |
0 |
if ((c->tag & ASN1_CLASS_MASK) == ASN1_CLASS_CONTEXT && (c->tag & 0x1F) == 0) { |
|
1256
|
0 |
0 |
if ((c->tag & ASN1_CLASS_MASK) == ASN1_CLASS_UNIVERSAL && |
|
1257
|
0 |
0 |
(c->tag & 0x1F) == ASN1_TAG_SET) { |
|
1263
|
0 |
0 |
if (chain) { |
|
1268
|
0 |
0 |
if (certs_ctx && chain) { |
|
|
0 |
0 |
if (certs_ctx && chain) { |
|
1270
|
0 |
0 |
while (c) { |
|
1275
|
0 |
0 |
if (cert) { |
|
1276
|
0 |
0 |
if (!chain->certs) chain->certs = cert; |
|
1277
|
0 |
0 |
if (tail) tail->next = cert; |
|
1286
|
0 |
0 |
si = sinfos ? pdfmake_asn1_child_at(sinfos, 0) : NULL; |
|
1287
|
0 |
0 |
if (!si) return pkcs7; |
|
1291
|
0 |
0 |
sid_serial = sid ? pdfmake_asn1_child_at(sid, 1) : NULL; |
|
1292
|
0 |
0 |
sid_serial_bytes = sid_serial ? sid_serial->data : NULL; |
|
1293
|
0 |
0 |
sid_serial_len = sid_serial ? sid_serial->length : 0; |
|
1297
|
0 |
0 |
for (i = 0; i < n; i++) { |
|
1299
|
0 |
0 |
if (c && c->tag == ASN1_TAG_OCTET_STRING) { |
|
|
0 |
0 |
if (c && c->tag == ASN1_TAG_OCTET_STRING) { |
|
1307
|
0 |
0 |
if (signed_attrs) { |
|
1309
|
0 |
0 |
while (attr) { |
|
1310
|
0 |
0 |
if (pdfmake_asn1_is_sequence(attr)) { |
|
1313
|
0 |
0 |
if (oid && vals && pdfmake_asn1_is_set(vals)) { |
|
|
0 |
0 |
if (oid && vals && pdfmake_asn1_is_set(vals)) { |
|
|
0 |
0 |
if (oid && vals && pdfmake_asn1_is_set(vals)) { |
|
1315
|
0 |
0 |
if (v && pdfmake_asn1_oid_equals(oid, OID_ID_MESSAGE_DIGEST) && |
|
|
0 |
0 |
if (v && pdfmake_asn1_oid_equals(oid, OID_ID_MESSAGE_DIGEST) && |
|
1316
|
0 |
0 |
v->tag == ASN1_TAG_OCTET_STRING) { |
|
1319
|
0 |
0 |
} else if (v && pdfmake_asn1_oid_equals(oid, OID_ID_SIGNING_TIME)) { |
|
|
0 |
0 |
} else if (v && pdfmake_asn1_oid_equals(oid, OID_ID_SIGNING_TIME)) { |
|
1321
|
0 |
0 |
if (pdfmake_asn1_get_time(v, &ts) == 0) { |
|
1333
|
0 |
0 |
if (unsigned_attrs) { |
|
1335
|
0 |
0 |
while (attr) { |
|
1336
|
0 |
0 |
if (pdfmake_asn1_is_sequence(attr)) { |
|
1339
|
0 |
0 |
if (oid && vals && pdfmake_asn1_is_set(vals) && |
|
|
0 |
0 |
if (oid && vals && pdfmake_asn1_is_set(vals) && |
|
1342
|
0 |
0 |
if (v) { |
|
1355
|
0 |
0 |
pkcs7->signer_cert = chain ? chain->certs : NULL; |
|
1356
|
0 |
0 |
cert = chain ? chain->certs : NULL; |
|
1357
|
0 |
0 |
while (cert) { |
|
1358
|
0 |
0 |
if (sid_serial_bytes && sid_serial_len > 0 && cert->serial && cert->serial_len > 0 && |
|
|
0 |
0 |
if (sid_serial_bytes && sid_serial_len > 0 && cert->serial && cert->serial_len > 0 && |
|
|
0 |
0 |
if (sid_serial_bytes && sid_serial_len > 0 && cert->serial && cert->serial_len > 0 && |
|
1391
|
0 |
0 |
if (!pkcs7 || !digest) return PDFMAKE_EINVAL; |
|
|
0 |
0 |
if (!pkcs7 || !digest) return PDFMAKE_EINVAL; |
|
1393
|
0 |
0 |
if (!pkcs7->signer_cert || !pkcs7->signature || pkcs7->signature_len == 0) { |
|
|
0 |
0 |
if (!pkcs7->signer_cert || !pkcs7->signature || pkcs7->signature_len == 0) { |
|
|
0 |
0 |
if (!pkcs7->signer_cert || !pkcs7->signature || pkcs7->signature_len == 0) { |
|
1398
|
0 |
0 |
if (!pkcs7->message_digest || pkcs7->message_digest_len != digest_len || |
|
|
0 |
0 |
if (!pkcs7->message_digest || pkcs7->message_digest_len != digest_len || |
|
1399
|
0 |
0 |
memcmp(pkcs7->message_digest, digest, digest_len) != 0) { |
|
1405
|
0 |
0 |
if (!root) return PDFMAKE_EINVAL; |
|
1407
|
0 |
0 |
if (!content) return PDFMAKE_EINVAL; |
|
1409
|
0 |
0 |
if (!sd) return PDFMAKE_EINVAL; |
|
1413
|
0 |
0 |
for (i = 0; i < n; i++) { |
|
1415
|
0 |
0 |
if (c && (c->tag & ASN1_CLASS_MASK) == ASN1_CLASS_UNIVERSAL && |
|
|
0 |
0 |
if (c && (c->tag & ASN1_CLASS_MASK) == ASN1_CLASS_UNIVERSAL && |
|
1416
|
0 |
0 |
(c->tag & 0x1F) == ASN1_TAG_SET) { |
|
1420
|
0 |
0 |
if (!sinfos) return PDFMAKE_EINVAL; |
|
1422
|
0 |
0 |
if (!si) return PDFMAKE_EINVAL; |
|
1424
|
0 |
0 |
if (!signed_attrs) return PDFMAKE_EINVAL; |
|
1429
|
0 |
0 |
if (!sa_der) return PDFMAKE_ENOMEM; |
|
1431
|
0 |
0 |
if (signed_attrs->length < 0x80) { |
|
1434
|
0 |
0 |
} else if (signed_attrs->length < 0x100) { |
|
1438
|
0 |
0 |
} else if (signed_attrs->length < 0x10000) { |
|
1452
|
0 |
0 |
if (!h) return PDFMAKE_ENOMEM; |
|
1458
|
0 |
0 |
if (pkcs7->signer_cert->pubkey.algorithm == PDFMAKE_PK_RSA) { |
|
1465
|
0 |
0 |
if (err != PDFMAKE_OK) return err; |
|
1466
|
0 |
0 |
} else if (pkcs7->signer_cert->pubkey.algorithm == PDFMAKE_PK_ECDSA) { |
|
1473
|
0 |
0 |
if (err != PDFMAKE_OK) return err; |
|
1483
|
0 |
0 |
if (pkcs7->certs && pdfmake_x509_verify_chain(pkcs7->certs, NULL) != PDFMAKE_OK) { |
|
|
0 |
0 |
if (pkcs7->certs && pdfmake_x509_verify_chain(pkcs7->certs, NULL) != PDFMAKE_OK) { |
|
1564
|
0 |
0 |
if (!arena || !key || !digest || !signature || !sig_len) { |
|
|
0 |
0 |
if (!arena || !key || !digest || !signature || !sig_len) { |
|
|
0 |
0 |
if (!arena || !key || !digest || !signature || !sig_len) { |
|
|
0 |
0 |
if (!arena || !key || !digest || !signature || !sig_len) { |
|
|
0 |
0 |
if (!arena || !key || !digest || !signature || !sig_len) { |
|
1567
|
0 |
0 |
if (key->algorithm != PDFMAKE_PK_RSA) return PDFMAKE_EINVAL; |
|
1569
|
0 |
0 |
if (rsa_digest_info(hash_alg, &di_prefix, &di_prefix_len, |
|
1573
|
0 |
0 |
if (digest_len != expected_digest_len) return PDFMAKE_EINVAL; |
|
1578
|
0 |
0 |
while (n_len > 0 && n_bytes[0] == 0) { n_bytes++; n_len--; } |
|
|
0 |
0 |
while (n_len > 0 && n_bytes[0] == 0) { n_bytes++; n_len--; } |
|
1579
|
0 |
0 |
if (n_len == 0) return PDFMAKE_EINVAL; |
|
1583
|
0 |
0 |
if (t + 11 > k) return PDFMAKE_EINVAL; /* RFC 8017 ยง9.2 */ |
|
1587
|
0 |
0 |
if (!em) return PDFMAKE_ENOMEM; |
|
1597
|
0 |
0 |
if (pdfmake_bn_from_bytes(&m, em, k) != 0) return PDFMAKE_EINVAL; |
|
1598
|
0 |
0 |
if (pdfmake_bn_from_bytes(&d, key->rsa.private_exponent, |
|
1601
|
0 |
0 |
if (pdfmake_bn_from_bytes(&n, n_bytes, n_len) != 0) return PDFMAKE_EINVAL; |
|
1602
|
0 |
0 |
if (pdfmake_bn_mod_exp(&sig_bn, &m, &d, &n) != 0) return PDFMAKE_EINVAL; |
|
1605
|
0 |
0 |
if (!sig_bytes) return PDFMAKE_ENOMEM; |
|
1606
|
0 |
0 |
if (pdfmake_bn_to_bytes(&sig_bn, sig_bytes, k) != 0) return PDFMAKE_EINVAL; |
|
1635
|
0 |
0 |
if (!key || !digest || !signature) return PDFMAKE_EINVAL; |
|
|
0 |
0 |
if (!key || !digest || !signature) return PDFMAKE_EINVAL; |
|
|
0 |
0 |
if (!key || !digest || !signature) return PDFMAKE_EINVAL; |
|
1636
|
0 |
0 |
if (key->algorithm != PDFMAKE_PK_RSA) return PDFMAKE_EINVAL; |
|
1638
|
0 |
0 |
if (rsa_digest_info(hash_alg, &di_prefix, &di_prefix_len, |
|
1642
|
0 |
0 |
if (digest_len != expected_digest_len) return PDFMAKE_EINVAL; |
|
1646
|
0 |
0 |
while (n_len > 0 && *n_bytes == 0) { n_bytes++; n_len--; } |
|
|
0 |
0 |
while (n_len > 0 && *n_bytes == 0) { n_bytes++; n_len--; } |
|
1647
|
0 |
0 |
if (n_len == 0) return PDFMAKE_EINVAL; |
|
1649
|
0 |
0 |
if (sig_len != k) return PDFMAKE_EINVAL; |
|
1651
|
0 |
0 |
if (pdfmake_bn_from_bytes(&sig_bn, signature, sig_len) != 0) return PDFMAKE_EINVAL; |
|
1652
|
0 |
0 |
if (pdfmake_bn_from_bytes(&e_bn, key->rsa.exponent, key->rsa.exponent_len) != 0) { |
|
1655
|
0 |
0 |
if (pdfmake_bn_from_bytes(&n_bn, n_bytes, n_len) != 0) return PDFMAKE_EINVAL; |
|
1656
|
0 |
0 |
if (pdfmake_bn_mod_exp(&m_bn, &sig_bn, &e_bn, &n_bn) != 0) return PDFMAKE_EINVAL; |
|
1659
|
0 |
0 |
if (!em) return PDFMAKE_ENOMEM; |
|
1660
|
0 |
0 |
if (pdfmake_bn_to_bytes(&m_bn, em, k) != 0) { |
|
1666
|
0 |
0 |
if (k < di_prefix_len + digest_len + 11 || em[0] != 0x00 || em[1] != 0x01) { |
|
|
0 |
0 |
if (k < di_prefix_len + digest_len + 11 || em[0] != 0x00 || em[1] != 0x01) { |
|
|
0 |
0 |
if (k < di_prefix_len + digest_len + 11 || em[0] != 0x00 || em[1] != 0x01) { |
|
1671
|
0 |
0 |
while (ps_end < k && em[ps_end] == 0xFF) ps_end++; |
|
|
0 |
0 |
while (ps_end < k && em[ps_end] == 0xFF) ps_end++; |
|
1672
|
0 |
0 |
if (ps_end < 10 || ps_end >= k || em[ps_end] != 0x00) { |
|
|
0 |
0 |
if (ps_end < 10 || ps_end >= k || em[ps_end] != 0x00) { |
|
|
0 |
0 |
if (ps_end < 10 || ps_end >= k || em[ps_end] != 0x00) { |
|
1679
|
0 |
0 |
if (ps_end + t_len != k) { |
|
1683
|
0 |
0 |
if (memcmp(em + ps_end, di_prefix, di_prefix_len) != 0) { |
|
1687
|
0 |
0 |
if (memcmp(em + ps_end + di_prefix_len, digest, digest_len) != 0) { |
|
1693
|
0 |
0 |
for (i = 0; i < k; i++) em[i] = 0; |
|
1714
|
0 |
0 |
if (!arena || !key || !digest || !signature || !sig_len) { |
|
|
0 |
0 |
if (!arena || !key || !digest || !signature || !sig_len) { |
|
|
0 |
0 |
if (!arena || !key || !digest || !signature || !sig_len) { |
|
|
0 |
0 |
if (!arena || !key || !digest || !signature || !sig_len) { |
|
|
0 |
0 |
if (!arena || !key || !digest || !signature || !sig_len) { |
|
1720
|
0 |
0 |
if (key->algorithm != PDFMAKE_PK_ECDSA) { |
|
1743
|
0 |
0 |
if (!*signature) return PDFMAKE_ENOMEM; |
|
1771
|
0 |
0 |
if (!key || !digest || !signature) return PDFMAKE_EINVAL; |
|
|
0 |
0 |
if (!key || !digest || !signature) return PDFMAKE_EINVAL; |
|
|
0 |
0 |
if (!key || !digest || !signature) return PDFMAKE_EINVAL; |
|
1772
|
0 |
0 |
if (key->algorithm != PDFMAKE_PK_ECDSA) return PDFMAKE_EINVAL; |
|
1800
|
0 |
0 |
if (!doc || !config) return NULL; |
|
|
0 |
0 |
if (!doc || !config) return NULL; |
|
1804
|
0 |
0 |
if (!field) return NULL; |
|
1806
|
0 |
0 |
field->name = strdup(name ? name : "Signature1"); |
|
1839
|
0 |
0 |
for (i = len; i >= tag_len; i--) { |
|
1840
|
0 |
0 |
if (memcmp(data + i - tag_len, tag, tag_len) == 0) { |
|
1842
|
0 |
0 |
while (p < len && (data[p] == '\n' || data[p] == '\r' || data[p] == ' ')) p++; |
|
|
0 |
0 |
while (p < len && (data[p] == '\n' || data[p] == '\r' || data[p] == ' ')) p++; |
|
|
0 |
0 |
while (p < len && (data[p] == '\n' || data[p] == '\r' || data[p] == ' ')) p++; |
|
|
0 |
0 |
while (p < len && (data[p] == '\n' || data[p] == '\r' || data[p] == ' ')) p++; |
|
1844
|
0 |
0 |
while (p < len && data[p] >= '0' && data[p] <= '9') { |
|
|
0 |
0 |
while (p < len && data[p] >= '0' && data[p] <= '9') { |
|
|
0 |
0 |
while (p < len && data[p] >= '0' && data[p] <= '9') { |
|
1902
|
0 |
0 |
if (config->ap_show_name && signer_name) { |
|
|
0 |
0 |
if (config->ap_show_name && signer_name) { |
|
1907
|
0 |
0 |
if (config->ap_show_date && date_str) { |
|
|
0 |
0 |
if (config->ap_show_date && date_str) { |
|
1908
|
0 |
0 |
if (first) pdfmake_buf_appendf(out, "%.2f %.2f Td (Date: %s) Tj\n", |
|
1913
|
0 |
0 |
if (config->ap_show_reason && config->reason && *config->reason) { |
|
|
0 |
0 |
if (config->ap_show_reason && config->reason && *config->reason) { |
|
|
0 |
0 |
if (config->ap_show_reason && config->reason && *config->reason) { |
|
1914
|
0 |
0 |
if (first) pdfmake_buf_appendf(out, "%.2f %.2f Td (Reason: %s) Tj\n", |
|
1961
|
0 |
0 |
if (default_helv) { |
|
1971
|
0 |
0 |
if (helv_num == 0) return 0; |
|
1975
|
0 |
0 |
for (i = 0; i < font_count; i++) { |
|
1976
|
0 |
0 |
if (!font_names[i] || !font_bases[i]) continue; |
|
|
0 |
0 |
if (!font_names[i] || !font_bases[i]) continue; |
|
1985
|
0 |
0 |
if (fn == 0) return 0; |
|
1998
|
0 |
0 |
if (xobject_count > 0 && xobject_names && xobject_nums) { |
|
|
0 |
0 |
if (xobject_count > 0 && xobject_names && xobject_nums) { |
|
|
0 |
0 |
if (xobject_count > 0 && xobject_names && xobject_nums) { |
|
2000
|
0 |
0 |
for (i = 0; i < xobject_count; i++) { |
|
2001
|
0 |
0 |
if (!xobject_names[i] || xobject_nums[i] == 0) continue; |
|
|
0 |
0 |
if (!xobject_names[i] || xobject_nums[i] == 0) continue; |
|
2020
|
0 |
0 |
if (form.kind != PDFMAKE_STREAM) return 0; |
|
2080
|
0 |
0 |
if (!doc || doc->page_count == 0) return PDFMAKE_EINVAL; |
|
|
0 |
0 |
if (!doc || doc->page_count == 0) return PDFMAKE_EINVAL; |
|
2085
|
0 |
0 |
if (config && config->visible && config->page > 0) { |
|
|
0 |
0 |
if (config && config->visible && config->page > 0) { |
|
|
0 |
0 |
if (config && config->visible && config->page > 0) { |
|
2087
|
0 |
0 |
if (p < doc->page_count) page_idx = p; |
|
2095
|
0 |
0 |
if (doc->sig_widget_num != 0 && doc->sig_obj_num_reserved != 0) { |
|
|
0 |
0 |
if (doc->sig_widget_num != 0 && doc->sig_obj_num_reserved != 0) { |
|
2103
|
0 |
0 |
if (widget_placeholder.kind != PDFMAKE_DICT) return PDFMAKE_ENOMEM; |
|
2105
|
0 |
0 |
if (widget_num == 0) return PDFMAKE_ENOMEM; |
|
2107
|
0 |
0 |
if (pdfmake_page_add_annot(target_page, widget_num) != PDFMAKE_OK) { |
|
2115
|
0 |
0 |
visible = config && config->visible |
|
2116
|
0 |
0 |
&& config->rect[2] > config->rect[0] |
|
2117
|
0 |
0 |
&& config->rect[3] > config->rect[1]; |
|
|
0 |
0 |
&& config->rect[3] > config->rect[1]; |
|
2118
|
0 |
0 |
if (visible) { |
|
2126
|
0 |
0 |
if (config->appearance_stream && config->appearance_stream_len > 0) { |
|
|
0 |
0 |
if (config->appearance_stream && config->appearance_stream_len > 0) { |
|
2133
|
0 |
0 |
? (time_t)config->signing_time : time(NULL); |
|
2140
|
0 |
0 |
if (!signer && config->identity && config->identity->cert |
|
|
0 |
0 |
if (!signer && config->identity && config->identity->cert |
|
|
0 |
0 |
if (!signer && config->identity && config->identity->cert |
|
2141
|
0 |
0 |
&& config->identity->cert->subject.common_name) { |
|
2144
|
0 |
0 |
if (!signer) signer = ""; |
|
2159
|
0 |
0 |
if (needs_free) pdfmake_buf_free(&default_buf); |
|
2160
|
0 |
0 |
if (ap_num == 0) return PDFMAKE_EINVAL; |
|
2165
|
0 |
0 |
if (err != PDFMAKE_OK) return err; |
|
2178
|
0 |
0 |
if (!widget || widget->kind != PDFMAKE_DICT) return PDFMAKE_EINVAL; |
|
|
0 |
0 |
if (!widget || widget->kind != PDFMAKE_DICT) return PDFMAKE_EINVAL; |
|
2203
|
0 |
0 |
if (visible) { |
|
2209
|
0 |
0 |
for (i = 0; i < 4; i++) pdfmake_array_push(arena, &rect, pdfmake_int(0)); |
|
2215
|
0 |
0 |
if (visible && ap_num != 0) { |
|
|
0 |
0 |
if (visible && ap_num != 0) { |
|
2224
|
0 |
0 |
if (target_page->page_num > 0) { |
|
2241
|
0 |
0 |
if (!catalog || catalog->kind != PDFMAKE_DICT) return PDFMAKE_EINVAL; |
|
|
0 |
0 |
if (!catalog || catalog->kind != PDFMAKE_DICT) return PDFMAKE_EINVAL; |
|
2244
|
0 |
0 |
if (acro.kind != PDFMAKE_DICT) return PDFMAKE_ENOMEM; |
|
2260
|
0 |
0 |
doc->sig_ap_num = visible ? ap_num : 0; |
|
2261
|
0 |
0 |
doc->sig_page_num = visible ? target_page->page_num : 0; |
|
2262
|
0 |
0 |
if (visible) { |
|
2263
|
0 |
0 |
for (i = 0; i < 4; i++) doc->sig_rect[i] = config->rect[i]; |
|
2318
|
0 |
0 |
if (!doc || !config || !out) return PDFMAKE_EINVAL; |
|
|
0 |
0 |
if (!doc || !config || !out) return PDFMAKE_EINVAL; |
|
|
0 |
0 |
if (!doc || !config || !out) return PDFMAKE_EINVAL; |
|
2319
|
0 |
0 |
if (!config->identity) return PDFMAKE_EINVAL; |
|
2323
|
0 |
0 |
? config->placeholder_size : SIG_PLACEHOLDER_SIZE; |
|
2332
|
0 |
0 |
if (err != PDFMAKE_OK) return err; |
|
2338
|
0 |
0 |
? (time_t)config->signing_time : time(NULL); |
|
2344
|
0 |
0 |
if (err != PDFMAKE_OK) { |
|
2358
|
0 |
0 |
if (err != PDFMAKE_OK) { pdfmake_buf_free(&pdf_buf); return err; } |
|
2376
|
0 |
0 |
if (config->name) { |
|
2379
|
0 |
0 |
if (config->reason) { |
|
2382
|
0 |
0 |
if (config->location) { |
|
2385
|
0 |
0 |
if (config->contact_info) { |
|
2391
|
0 |
0 |
: time(NULL); |
|
2408
|
0 |
0 |
for (i = 0; i < placeholder_size; i++) { |
|
2422
|
0 |
0 |
if (doc->sig_visible && doc->sig_ap_num != 0) { |
|
|
0 |
0 |
if (doc->sig_visible && doc->sig_ap_num != 0) { |
|
2457
|
0 |
0 |
if (nums[0] > nums[1]) { |
|
2461
|
0 |
0 |
if (nums[1] == nums[0] + 1) { |
|
2464
|
0 |
0 |
for (i = 0; i < 2; i++) { |
|
2471
|
0 |
0 |
for (i = 0; i < 2; i++) { |
|
2481
|
0 |
0 |
if (doc->root_num > 0) { |
|
2485
|
0 |
0 |
if (doc->info_num > 0) { |
|
2491
|
0 |
0 |
for (i = 0; i < 16; i++) pdfmake_buf_appendf(out, "%02X", doc->id1[i]); |
|
2493
|
0 |
0 |
for (i = 0; i < 16; i++) pdfmake_buf_appendf(out, "%02X", doc->id2[i]); |
|
2495
|
0 |
0 |
if (prev_xref > 0) { |
|
2524
|
0 |
0 |
if (br_new_len == br_len) { |
|
2531
|
0 |
0 |
for (pad_i = copy; pad_i < br_len; pad_i++) out_data[br_offset + pad_i] = ' '; |
|
2537
|
0 |
0 |
? config->hash_algorithm : PDFMAKE_HASH_SHA256; |
|
2539
|
0 |
0 |
if (!h) { pdfmake_buf_free(&pdf_buf); return PDFMAKE_ENOMEM; } |
|
2547
|
0 |
0 |
if (err != PDFMAKE_OK) { |
|
2555
|
0 |
0 |
if (pkcs7_len * 2 > placeholder_size) { |
|
2562
|
0 |
0 |
for (i = 0; i < pkcs7_len; i++) { |
|
2607
|
4 |
0 |
if (!arena || !pdf || len == 0 || field_index < 0) return NULL; |
|
|
4 |
0 |
if (!arena || !pdf || len == 0 || field_index < 0) return NULL; |
|
|
4 |
0 |
if (!arena || !pdf || len == 0 || field_index < 0) return NULL; |
|
|
0 |
4 |
if (!arena || !pdf || len == 0 || field_index < 0) return NULL; |
|
2610
|
0 |
4 |
if (!r) return NULL; |
|
2613
|
0 |
4 |
if (!parser) { |
|
2620
|
4 |
0 |
if (err != PDFMAKE_OK || !doc) { |
|
|
0 |
4 |
if (err != PDFMAKE_OK || !doc) { |
|
2623
|
0 |
0 |
if (doc) pdfmake_doc_free(doc); |
|
2628
|
0 |
4 |
if (!catalog || catalog->kind != PDFMAKE_DICT) { |
|
|
0 |
0 |
if (!catalog || catalog->kind != PDFMAKE_DICT) { |
|
2643
|
0 |
0 |
if (acro && acro->kind == PDFMAKE_REF) acro = pdfmake_parser_resolve(parser, acro->as.ref); |
|
|
0 |
0 |
if (acro && acro->kind == PDFMAKE_REF) acro = pdfmake_parser_resolve(parser, acro->as.ref); |
|
2644
|
0 |
0 |
if (!acro || acro->kind != PDFMAKE_DICT) { |
|
|
0 |
0 |
if (!acro || acro->kind != PDFMAKE_DICT) { |
|
2652
|
0 |
0 |
if (fields && fields->kind == PDFMAKE_REF) fields = pdfmake_parser_resolve(parser, fields->as.ref); |
|
|
0 |
0 |
if (fields && fields->kind == PDFMAKE_REF) fields = pdfmake_parser_resolve(parser, fields->as.ref); |
|
2653
|
0 |
0 |
if (!fields || fields->kind != PDFMAKE_ARRAY) { |
|
|
0 |
0 |
if (!fields || fields->kind != PDFMAKE_ARRAY) { |
|
2662
|
0 |
0 |
for (i = 0; i < pdfmake_array_len(fields); i++) { |
|
2664
|
0 |
0 |
if (!field) continue; |
|
2665
|
0 |
0 |
if (field->kind == PDFMAKE_REF) field = pdfmake_parser_resolve(parser, field->as.ref); |
|
2666
|
0 |
0 |
if (!field || field->kind != PDFMAKE_DICT) continue; |
|
|
0 |
0 |
if (!field || field->kind != PDFMAKE_DICT) continue; |
|
2669
|
0 |
0 |
if (ft && ft->kind == PDFMAKE_REF) ft = pdfmake_parser_resolve(parser, ft->as.ref); |
|
|
0 |
0 |
if (ft && ft->kind == PDFMAKE_REF) ft = pdfmake_parser_resolve(parser, ft->as.ref); |
|
2670
|
0 |
0 |
if (!ft || ft->kind != PDFMAKE_NAME) continue; |
|
|
0 |
0 |
if (!ft || ft->kind != PDFMAKE_NAME) continue; |
|
2672
|
0 |
0 |
if (!ft_name || strcmp(ft_name, "Sig") != 0) continue; |
|
|
0 |
0 |
if (!ft_name || strcmp(ft_name, "Sig") != 0) continue; |
|
2675
|
0 |
0 |
if (sig_seen != field_index) continue; |
|
2678
|
0 |
0 |
if (v && v->kind == PDFMAKE_REF) v = pdfmake_parser_resolve(parser, v->as.ref); |
|
|
0 |
0 |
if (v && v->kind == PDFMAKE_REF) v = pdfmake_parser_resolve(parser, v->as.ref); |
|
2679
|
0 |
0 |
if (v && v->kind == PDFMAKE_DICT) { |
|
|
0 |
0 |
if (v && v->kind == PDFMAKE_DICT) { |
|
2685
|
0 |
0 |
if (!sig_dict) { |
|
2693
|
0 |
0 |
if (br && br->kind == PDFMAKE_REF) br = pdfmake_parser_resolve(parser, br->as.ref); |
|
|
0 |
0 |
if (br && br->kind == PDFMAKE_REF) br = pdfmake_parser_resolve(parser, br->as.ref); |
|
2695
|
0 |
0 |
if (contents && contents->kind == PDFMAKE_REF) contents = pdfmake_parser_resolve(parser, contents->as.ref); |
|
|
0 |
0 |
if (contents && contents->kind == PDFMAKE_REF) contents = pdfmake_parser_resolve(parser, contents->as.ref); |
|
2696
|
0 |
0 |
if (!br || br->kind != PDFMAKE_ARRAY || pdfmake_array_len(br) < 4 || |
|
|
0 |
0 |
if (!br || br->kind != PDFMAKE_ARRAY || pdfmake_array_len(br) < 4 || |
|
|
0 |
0 |
if (!br || br->kind != PDFMAKE_ARRAY || pdfmake_array_len(br) < 4 || |
|
|
0 |
0 |
if (!br || br->kind != PDFMAKE_ARRAY || pdfmake_array_len(br) < 4 || |
|
2697
|
0 |
0 |
!contents || contents->kind != PDFMAKE_STR) { |
|
2708
|
0 |
0 |
if (br0 > len || br1 > len || br2 > len || br3 > len || br0 + br1 > len || br2 + br3 > len) { |
|
|
0 |
0 |
if (br0 > len || br1 > len || br2 > len || br3 > len || br0 + br1 > len || br2 + br3 > len) { |
|
|
0 |
0 |
if (br0 > len || br1 > len || br2 > len || br3 > len || br0 + br1 > len || br2 + br3 > len) { |
|
|
0 |
0 |
if (br0 > len || br1 > len || br2 > len || br3 > len || br0 + br1 > len || br2 + br3 > len) { |
|
|
0 |
0 |
if (br0 > len || br1 > len || br2 > len || br3 > len || br0 + br1 > len || br2 + br3 > len) { |
|
|
0 |
0 |
if (br0 > len || br1 > len || br2 > len || br3 > len || br0 + br1 > len || br2 + br3 > len) { |
|
2716
|
0 |
0 |
if (cms_len > 0) { |
|
2718
|
0 |
0 |
while (t > 0 && contents->as.str.bytes[t - 1] == 0) t--; |
|
|
0 |
0 |
while (t > 0 && contents->as.str.bytes[t - 1] == 0) t--; |
|
2720
|
0 |
0 |
if (cms_len > 0) { |
|
2722
|
0 |
0 |
if (asn1_der_object_len(contents->as.str.bytes, cms_len, &der_obj_len) == 0) { |
|
2727
|
0 |
0 |
if (cms_len == 0) { |
|
2735
|
0 |
0 |
if (!pkcs7) { |
|
2742
|
0 |
0 |
h = pdfmake_hash_new(pkcs7->hash_alg ? pkcs7->hash_alg : PDFMAKE_HASH_SHA256); |
|
2743
|
0 |
0 |
if (!h) { |
|
2755
|
0 |
0 |
pkcs7->message_digest_len == digest_len && |
|
|
0 |
0 |
pkcs7->message_digest_len == digest_len && |
|
2756
|
0 |
0 |
memcmp(pkcs7->message_digest, digest, digest_len) == 0); |
|
2761
|
0 |
0 |
r->cert_valid = (pkcs7->signer_cert && pdfmake_x509_is_valid(pkcs7->signer_cert, 0) && |
|
2762
|
0 |
0 |
pdfmake_x509_can_sign_documents(pkcs7->signer_cert)) ? 1 : 0; |
|
|
0 |
0 |
pdfmake_x509_can_sign_documents(pkcs7->signer_cert)) ? 1 : 0; |
|
2767
|
0 |
0 |
if (pkcs7->signer_cert) { |
|
2772
|
0 |
0 |
r->valid = (r->signature_valid && r->digest_valid && r->cert_valid) ? 1 : 0; |
|
|
0 |
0 |
r->valid = (r->signature_valid && r->digest_valid && r->cert_valid) ? 1 : 0; |
|
|
0 |
0 |
r->valid = (r->signature_valid && r->digest_valid && r->cert_valid) ? 1 : 0; |
|
2773
|
0 |
0 |
if (!r->valid && !r->error) { |
|
|
0 |
0 |
if (!r->valid && !r->error) { |
|
2774
|
0 |
0 |
if (!r->digest_valid) { |
|
2776
|
0 |
0 |
} else if (!r->signature_valid) { |
|
2778
|
0 |
0 |
} else if (!r->cert_valid) { |
|
2804
|
4 |
0 |
if (!pdf || len == 0) return 0; |
|
|
0 |
4 |
if (!pdf || len == 0) return 0; |
|
2807
|
0 |
4 |
if (!parser) return 0; |
|
2811
|
4 |
0 |
if (err != PDFMAKE_OK || !doc) { |
|
|
0 |
4 |
if (err != PDFMAKE_OK || !doc) { |
|
2813
|
0 |
0 |
if (doc) pdfmake_doc_free(doc); |
|
2818
|
0 |
4 |
if (!catalog || catalog->kind != PDFMAKE_DICT) { |
|
|
0 |
0 |
if (!catalog || catalog->kind != PDFMAKE_DICT) { |
|
2828
|
0 |
0 |
if (acro && acro->kind == PDFMAKE_REF) acro = pdfmake_parser_resolve(parser, acro->as.ref); |
|
|
0 |
0 |
if (acro && acro->kind == PDFMAKE_REF) acro = pdfmake_parser_resolve(parser, acro->as.ref); |
|
2829
|
0 |
0 |
if (!acro || acro->kind != PDFMAKE_DICT) { |
|
|
0 |
0 |
if (!acro || acro->kind != PDFMAKE_DICT) { |
|
2836
|
0 |
0 |
if (fields && fields->kind == PDFMAKE_REF) fields = pdfmake_parser_resolve(parser, fields->as.ref); |
|
|
0 |
0 |
if (fields && fields->kind == PDFMAKE_REF) fields = pdfmake_parser_resolve(parser, fields->as.ref); |
|
2837
|
0 |
0 |
if (!fields || fields->kind != PDFMAKE_ARRAY) { |
|
|
0 |
0 |
if (!fields || fields->kind != PDFMAKE_ARRAY) { |
|
2844
|
0 |
0 |
for (i = 0; i < pdfmake_array_len(fields); i++) { |
|
2846
|
0 |
0 |
if (!field) continue; |
|
2847
|
0 |
0 |
if (field->kind == PDFMAKE_REF) field = pdfmake_parser_resolve(parser, field->as.ref); |
|
2848
|
0 |
0 |
if (!field || field->kind != PDFMAKE_DICT) continue; |
|
|
0 |
0 |
if (!field || field->kind != PDFMAKE_DICT) continue; |
|
2850
|
0 |
0 |
if (ft && ft->kind == PDFMAKE_REF) ft = pdfmake_parser_resolve(parser, ft->as.ref); |
|
|
0 |
0 |
if (ft && ft->kind == PDFMAKE_REF) ft = pdfmake_parser_resolve(parser, ft->as.ref); |
|
2851
|
0 |
0 |
if (!ft || ft->kind != PDFMAKE_NAME) continue; |
|
|
0 |
0 |
if (!ft || ft->kind != PDFMAKE_NAME) continue; |
|
2853
|
0 |
0 |
if (ft_name && strcmp(ft_name, "Sig") == 0) count++; |
|
|
0 |
0 |
if (ft_name && strcmp(ft_name, "Sig") == 0) count++; |