16#ifndef LIEF_PE_SIGNATURE_H
17#define LIEF_PE_SIGNATURE_H
19#include "LIEF/Object.hpp"
20#include "LIEF/visibility.h"
21#include "LIEF/span.hpp"
23#include "LIEF/PE/signature/x509.hpp"
24#include "LIEF/PE/signature/SignerInfo.hpp"
25#include "LIEF/PE/signature/ContentInfo.hpp"
27#include "LIEF/PE/enums.hpp"
29#include "LIEF/iterators.hpp"
30#include "LIEF/enums.hpp"
47 static std::vector<uint8_t>
hash(
const std::vector<uint8_t>& input,
ALGORITHMS algo) {
48 return hash(input.data(), input.size(), algo);
50 static std::vector<uint8_t> hash(
const uint8_t* buffer,
size_t size,
ALGORITHMS algo);
69 INVALID_SIGNER = 1 << 0,
70 UNSUPPORTED_ALGORITHM = 1 << 1,
71 INCONSISTENT_DIGEST_ALGORITHM = 1 << 2,
72 CERT_NOT_FOUND = 1 << 3,
73 CORRUPTED_CONTENT_INFO = 1 << 4,
74 CORRUPTED_AUTH_DATA = 1 << 5,
75 MISSING_PKCS9_MESSAGE_DIGEST = 1 << 6,
77 BAD_SIGNATURE = 1 << 8,
78 NO_SIGNATURE = 1 << 9,
79 CERT_EXPIRED = 1 << 10,
80 CERT_FUTURE = 1 << 11,
93 LIFETIME_SIGNING = 1 << 2,
94 SKIP_CERT_TIME = 1 << 3,
113 return digest_algorithm_;
118 return content_info_;
123 return certificates_;
126 it_crt certificates() {
127 return certificates_;
135 it_signers_t signers() {
141 return original_raw_signature_;
181 void accept(
Visitor& visitor)
const override;
185 LIEF_API
friend std::ostream& operator<<(std::ostream& os,
const Signature& signature);
188 uint32_t version_ = 0;
189 ALGORITHMS digest_algorithm_ = ALGORITHMS::UNKNOWN;
191 std::vector<x509> certificates_;
192 std::vector<SignerInfo> signers_;
194 uint64_t content_info_start_ = 0;
195 uint64_t content_info_end_ = 0;
197 std::vector<uint8_t> original_raw_signature_;
205ENABLE_BITMASK_OPERATORS(
LIEF::PE::Signature::VERIFICATION_CHECKS)
Class which represents a PE binary This is the main interface to manage and modify a PE executable.
Definition PE/Binary.hpp:52
Definition ContentInfo.hpp:78
Main interface to parse PE binaries. In particular the static functions: Parser::parse should be used...
Definition PE/Parser.hpp:47
Definition SignatureParser.hpp:37
Main interface for the PKCS #7 signature scheme.
Definition Signature.hpp:39
const x509 * find_crt_issuer(const std::string &issuer, const std::vector< uint8_t > &serialno) const
Find x509 certificate according to its issuer AND serial number.
const x509 * find_crt(const std::vector< uint8_t > &serialno) const
Find x509 certificate according to its serial number.
VERIFICATION_FLAGS check(VERIFICATION_CHECKS checks=VERIFICATION_CHECKS::DEFAULT) const
Check if this signature is valid according to the Authenticode/PKCS #7 verification scheme.
span< const uint8_t > raw_der() const
Return the raw original PKCS7 signature.
Definition Signature.hpp:140
static std::string flag_to_string(VERIFICATION_FLAGS flag)
Convert a verification flag into a humman representation. e.g VERIFICATION_FLAGS.BAD_DIGEST | VERIFIC...
const ContentInfo & content_info() const
Return the ContentInfo.
Definition Signature.hpp:117
const x509 * find_crt_issuer(const std::string &issuer) const
Find x509 certificate according to its issuer.
static std::vector< uint8_t > hash(const std::vector< uint8_t > &input, ALGORITHMS algo)
Hash the input given the algorithm.
Definition Signature.hpp:47
const x509 * find_crt_subject(const std::string &subject) const
Find x509 certificate according to its subject.
VERIFICATION_CHECKS
Flags to tweak the verification process of the signature.
Definition Signature.hpp:90
it_const_signers_t signers() const
Return an iterator over the signers (SignerInfo) defined in the PKCS #7 signature.
Definition Signature.hpp:131
it_const_crt certificates() const
Return an iterator over x509 certificates.
Definition Signature.hpp:122
const x509 * find_crt_subject(const std::string &subject, const std::vector< uint8_t > &serialno) const
Find x509 certificate according to its subject AND serial number.
uint32_t version() const
Should be 1.
Definition Signature.hpp:105
ALGORITHMS digest_algorithm() const
Algorithm used to digest the file.
Definition Signature.hpp:112
VERIFICATION_FLAGS
Flags returned by the verification functions.
Definition Signature.hpp:67
Interface over a x509 certificate.
Definition x509.hpp:43
Definition Visitor.hpp:221
Iterator which returns reference on container's values.
Definition iterators.hpp:48
ALGORITHMS
Cryptography algorithms.
Definition PE/enums.hpp:686
LIEF namespace.
Definition Abstract/Binary.hpp:31