Branch Coverage

src/pdfmake_signature.c
Criterion Covered Total %
branch 15 970 1.5


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++;