LIEF: Library to Instrument Executable Formats Version 1.0.0
Loading...
Searching...
No Matches
SignatureParser.hpp
Go to the documentation of this file.
1/* Copyright 2017 - 2026 R. Thomas
2 * Copyright 2017 - 2026 Quarkslab
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16#ifndef LIEF_PE_SIGNATURE_PARSER_H
17#define LIEF_PE_SIGNATURE_PARSER_H
18#include <memory>
19#include <string>
20#include <array>
21
22#include "LIEF/errors.hpp"
23
25
26namespace LIEF {
27class BinaryStream;
28class VectorStream;
29
30namespace PE {
31class Parser;
32class Attribute;
33class SpcIndirectData;
34class PKCS9TSTInfo;
35
37 friend class Parser;
38 struct SpcPeImageData {
39 uint32_t flags;
40 std::string file;
41 };
42
43 struct SpcSpOpusInfo {
44 std::string program_name;
45 std::string more_info;
46 };
47 struct range_t {
48 uint64_t start = 0;
49 uint64_t end = 0;
50 };
51
52 public:
53 using attributes_t = std::vector<std::unique_ptr<Attribute>>;
54 using signer_infos_t = std::vector<SignerInfo>;
55 using x509_certificates_t = std::vector<x509>;
56 using time_t = std::array<int32_t, 6>;
57
59 static result<Signature> parse(std::vector<uint8_t> data,
60 bool skip_header = false);
61
63 static result<Signature> parse(BinaryStream& stream, bool skip_header = false);
64
66 static result<Signature> parse(const std::string& path);
69
70 private:
71 ~SignatureParser() = default;
72 SignatureParser() = default;
73
74 static result<Signature> parse_signature(BinaryStream& stream);
75
76 static result<ContentInfo> parse_content_info(BinaryStream& stream,
77 range_t& range);
78 static result<x509_certificates_t> parse_certificates(BinaryStream& stream);
79 static result<signer_infos_t> parse_signer_infos(BinaryStream& stream);
80 static result<attributes_t> parse_attributes(BinaryStream& stream);
82 parse_content_type(BinaryStream& stream);
83
84 static result<signer_infos_t> parse_pkcs9_counter_sign(BinaryStream& stream);
86 parse_pkcs9_message_digest(BinaryStream& stream);
87 static result<int32_t> parse_pkcs9_at_sequence_number(BinaryStream& stream);
88 static result<time_t> parse_pkcs9_signing_time(BinaryStream& stream);
90 parse_pkcs9_tstinfo(BinaryStream& stream);
91
93 parse_ms_counter_sign(BinaryStream& stream);
94 static result<Signature> parse_ms_spc_nested_signature(BinaryStream& stream);
95 static result<oid_t> parse_ms_spc_statement_type(BinaryStream& stream);
96 static result<SpcSpOpusInfo> parse_spc_sp_opus_info(BinaryStream& stream);
97 static result<std::string> parse_spc_string(BinaryStream& stream);
98 static result<std::string> parse_spc_link(BinaryStream& stream);
100 parse_spc_relaxed_pe_marker_check(BinaryStream& stream);
101 static result<SpcPeImageData> parse_spc_pe_image_data(BinaryStream& stream);
103 parse_spc_indirect_data(BinaryStream& stream, range_t& range);
105 parse_ms_platform_manifest_binary_id(BinaryStream& stream);
106
108 parse_signing_certificate_v2(BinaryStream& stream);
109};
110
111}
112}
113
114#endif
Class that is used to a read stream of data from different sources.
Definition BinaryStream.hpp:35
Interface over PKCS #7 attribute.
Definition PE/signature/Attribute.hpp:29
Interface over the structure described by the OID 1.2.840.113549.1.9.16.1.4 (PKCS #9).
Definition PKCS9TSTInfo.hpp:60
Main interface to parse PE binaries. In particular, the static Parser::parse functions should be used...
Definition PE/Parser.hpp:53
static result< Signature > parse(std::vector< uint8_t > data, bool skip_header=false)
Parse a PKCS #7 signature given a raw blob.
std::vector< x509 > x509_certificates_t
Definition SignatureParser.hpp:55
static result< Signature > parse(BinaryStream &stream, bool skip_header=false)
Parse a PKCS #7 signature given a BinaryStream.
std::vector< SignerInfo > signer_infos_t
Definition SignatureParser.hpp:54
std::vector< std::unique_ptr< Attribute > > attributes_t
Definition SignatureParser.hpp:53
std::array< int32_t, 6 > time_t
Definition SignatureParser.hpp:56
static result< Signature > parse(const std::string &path)
Parse a PKCS #7 signature from a file path.
SignatureParser & operator=(const SignatureParser &)=delete
SignatureParser(const SignatureParser &)=delete
friend class Parser
Definition SignatureParser.hpp:37
Definition SpcIndirectData.hpp:31
Interface over the structure described by the OID 1.3.6.1.4.1.311.2.1.12.
Definition SpcSpOpusInfo.hpp:40
Definition VectorStream.hpp:29
Wrapper that contains an Object (T) or an error.
Definition errors.hpp:79
Namespace related to the LIEF's PE module.
Definition Abstract/Header.hpp:32
LIEF namespace.
Definition Abstract/Binary.hpp:41
Definition range.hpp:23
#define LIEF_API
Definition visibility.h:45