LIEF: Library to Instrument Executable Formats Version 1.0.0
Loading...
Searching...
No Matches
SignerInfo.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_SIGNER_INFO_H
17#define LIEF_PE_SIGNER_INFO_H
18#include <memory>
19
20#include "LIEF/Object.hpp"
22#include "LIEF/visibility.h"
23#include "LIEF/span.hpp"
24
26#include "LIEF/iterators.hpp"
27#include "LIEF/PE/enums.hpp"
29
30namespace LIEF {
31namespace PE {
32
33class Signature;
34class Attribute;
35class Parser;
36class SignatureParser;
37class x509;
38
56class LIEF_API SignerInfo : public Object {
57 friend class Parser;
58 friend class SignatureParser;
59 friend class Signature;
60
61 public:
62 using encrypted_digest_t = std::vector<uint8_t>;
63
66 using attributes_t = std::vector<std::unique_ptr<Attribute>>;
67
71
73
74 SignerInfo(const SignerInfo& other);
76
79
80 void swap(SignerInfo& other);
81
83 uint32_t version() const {
84 return version_;
85 }
86
94 return serialno_;
95 }
96
98 const std::string& issuer() const {
99 return issuer_;
100 }
101
107 return digest_algorithm_;
108 }
109
113 return digest_enc_algorithm_;
114 }
115
119 return encrypted_digest_;
120 }
121
124 return authenticated_attributes_;
125 }
126
129 return unauthenticated_attributes_;
130 }
131
138
144 const Attribute*
146
152 const Attribute*
154
157 const x509* cert() const LIEF_LIFETIMEBOUND {
158 return cert_.get();
159 }
160
164 return cert_.get();
165 }
166
169 return raw_auth_data_;
170 }
171
172 void accept(Visitor& visitor) const override;
173
174 ~SignerInfo() override;
175
176 LIEF_API friend std::ostream& operator<<(std::ostream& os,
177 const SignerInfo& signer_info);
178
179 private:
180 uint32_t version_ = 0;
181 std::string issuer_;
182 std::vector<uint8_t> serialno_;
183
184 ALGORITHMS digest_algorithm_ = ALGORITHMS::UNKNOWN;
185 ALGORITHMS digest_enc_algorithm_ = ALGORITHMS::UNKNOWN;
186
187 encrypted_digest_t encrypted_digest_;
188
189 std::vector<uint8_t> raw_auth_data_;
190
191 attributes_t authenticated_attributes_;
192 attributes_t unauthenticated_attributes_;
193
194 std::unique_ptr<x509> cert_;
195};
196
197}
198}
199
200#endif
Interface over PKCS #7 attribute.
Definition PE/signature/Attribute.hpp:29
TYPE
Definition PE/signature/Attribute.hpp:35
Main interface to parse PE binaries. In particular, the static Parser::parse functions should be used...
Definition PE/Parser.hpp:52
Definition SignatureParser.hpp:37
Main interface for the PKCS #7 signature scheme.
Definition Signature.hpp:40
friend class Signature
Definition SignerInfo.hpp:59
const Attribute * get_attribute(Attribute::TYPE type) const
Return the authenticated or un-authenticated attribute matching the given PE::SIG_ATTRIBUTE_TYPES.
const Attribute * get_auth_attribute(Attribute::TYPE type) const
Return the authenticated attribute matching the given PE::SIG_ATTRIBUTE_TYPES.
SignerInfo & operator=(SignerInfo other)
const Attribute * get_unauth_attribute(Attribute::TYPE type) const
Return the un-authenticated attribute matching the given PE::SIG_ATTRIBUTE_TYPES.
it_const_attributes_t unauthenticated_attributes() const
Iterator over LIEF::PE::Attribute for unauthenticated attributes.
Definition SignerInfo.hpp:128
SignerInfo(const SignerInfo &other)
void accept(Visitor &visitor) const override
const x509 * cert() const
x509 certificate used by this signer. If it can't be found, it returns a nullptr
Definition SignerInfo.hpp:157
span< const uint8_t > raw_auth_data() const
Raw blob that is signed by the signer certificate.
Definition SignerInfo.hpp:168
std::vector< std::unique_ptr< Attribute > > attributes_t
Internal container used to store both authenticated and unauthenticated attributes.
Definition SignerInfo.hpp:66
friend class SignatureParser
Definition SignerInfo.hpp:58
void swap(SignerInfo &other)
std::vector< uint8_t > encrypted_digest_t
Definition SignerInfo.hpp:62
span< const uint8_t > serial_number() const
Return the serial number associated with the x509 certificate used by this signer.
Definition SignerInfo.hpp:93
friend std::ostream & operator<<(std::ostream &os, const SignerInfo &signer_info)
SignerInfo & operator=(SignerInfo &&)
const std::string & issuer() const
Return the x509::issuer used by this signer.
Definition SignerInfo.hpp:98
friend class Parser
Definition SignerInfo.hpp:57
~SignerInfo() override
it_const_attributes_t authenticated_attributes() const
Iterator over LIEF::PE::Attribute for authenticated attributes.
Definition SignerInfo.hpp:123
const encrypted_digest_t & encrypted_digest() const
Return the signature created by the signing certificate's private key.
Definition SignerInfo.hpp:118
uint32_t version() const
Should be 1.
Definition SignerInfo.hpp:83
ALGORITHMS digest_algorithm() const
Algorithm (OID) used to hash the file.
Definition SignerInfo.hpp:106
ALGORITHMS encryption_algorithm() const
Return the (public-key) algorithm used to encrypt the signature.
Definition SignerInfo.hpp:112
const_ref_iterator< const attributes_t &, const Attribute * > it_const_attributes_t
Iterator which outputs const Attribute&.
Definition SignerInfo.hpp:69
x509 * cert()
x509 certificate used by this signer. If it can't be found, it returns a nullptr
Definition SignerInfo.hpp:163
SignerInfo(SignerInfo &&)
Interface over a x509 certificate.
Definition x509.hpp:43
Definition Visitor.hpp:212
#define LIEF_LIFETIMEBOUND
Definition compiler_attributes.hpp:72
Namespace related to the LIEF's PE module.
Definition Abstract/Header.hpp:32
ALGORITHMS
Cryptography algorithms.
Definition PE/enums.hpp:28
@ UNKNOWN
Definition PE/enums.hpp:29
LIEF namespace.
Definition Abstract/Binary.hpp:41
tcb::span< ElementType, Extent > span
Definition span.hpp:22
ref_iterator< CT, U, typename decay_t< CT >::const_iterator > const_ref_iterator
Iterator which returns a const ref on container's values.
Definition iterators.hpp:320
#define LIEF_API
Definition visibility.h:45