| 659 | } |
| 660 | |
| 661 | int check_signature(struct signature_check *sigc, |
| 662 | const char *signature, size_t slen) |
| 663 | { |
| 664 | struct gpg_format *fmt; |
| 665 | int status; |
| 666 | |
| 667 | gpg_interface_lazy_init(); |
| 668 | |
| 669 | sigc->result = 'N'; |
| 670 | sigc->trust_level = TRUST_UNDEFINED; |
| 671 | |
| 672 | fmt = get_format_by_sig(signature); |
| 673 | if (!fmt) |
| 674 | die(_("bad/incompatible signature '%s'"), signature); |
| 675 | |
| 676 | if (parse_payload_metadata(sigc)) |
| 677 | return 1; |
| 678 | |
| 679 | status = fmt->verify_signed_buffer(sigc, fmt, signature, slen); |
| 680 | |
| 681 | if (status && !sigc->output) |
| 682 | return !!status; |
| 683 | |
| 684 | status |= sigc->result != 'G' && sigc->result != 'Y'; |
| 685 | status |= sigc->trust_level < configured_min_trust_level; |
| 686 | |
| 687 | return !!status; |
| 688 | } |
| 689 | |
| 690 | void print_signature_buffer(const struct signature_check *sigc, unsigned flags) |
| 691 | { |
no test coverage detected