Botan 1.10.17

Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
Botan::X509_Object Class Referenceabstract

`#include <x509_obj.h>`

Inheritance diagram for Botan::X509_Object:

## Public Member Functions
MemoryVector< byte > | BER_encode () const
bool | check_signature (class Public_Key &key) const
bool | check_signature (class Public_Key *key) const
void | encode (Pipe &out, X509_Encoding encoding=PEM) const
std::string | hash_used_for_signature () const
std::string | PEM_encode () const
MemoryVector< byte > | signature () const
AlgorithmIdentifier | signature_algorithm () const
MemoryVector< byte > | tbs_data () const
virtual | ~X509_Object ()

## Static Public Member Functions
static MemoryVector< byte > | make_signed (class PK_Signer *signer, RandomNumberGenerator &rng, const AlgorithmIdentifier &alg_id, const MemoryRegion< byte > &tbs)

## Protected Member Functions
void | do_decode ()
| X509_Object (DataSource &src, const std::string &pem_labels)
| X509_Object (const std::string &file, const std::string &pem_labels)
| X509_Object ()

## Protected Attributes
MemoryVector< byte > | sig
AlgorithmIdentifier | sig_algo
MemoryVector< byte > | tbs_bits

## Detailed Description

This class represents abstract X.509 signed objects as in the X.500 SIGNED macro

Definition at line 23 of file x509_obj.h.

## Constructor & Destructor Documentation

## ◆ ~X509_Object()

virtual Botan::X509_Object::~X509_Object | ( |  | ) |
| inline virtual

Definition at line 94 of file x509_obj.h.

94 {}

## ◆ X509_Object() [1/3]

Botan::X509_Object::X509_Object | ( | DataSource & | src,
|  | const std::string & | pem_labels
| ) |  |
| protected

Definition at line 24 of file x509_obj.cpp.

25 {
26 init(stream, labels);
27 }

## ◆ X509_Object() [2/3]

Botan::X509_Object::X509_Object | ( | const std::string & | file,
|  | const std::string & | pem_labels
| ) |  |
| protected

Definition at line 32 of file x509_obj.cpp.

33 {
34 DataSource_Stream stream(file, true);
35 init(stream, labels);
36 }

## ◆ X509_Object() [3/3]

Botan::X509_Object::X509_Object | ( |  | ) |
| inline protected

Definition at line 100 of file x509_obj.h.

100 {}

## Member Function Documentation

## ◆ BER_encode()

MemoryVector< byte > Botan::X509_Object::BER_encode | ( |  | ) | const

Returns
  BER encoding of this

Definition at line 100 of file x509_obj.cpp.

References Botan::BIT_STRING, Botan::DER_Encoder::encode(), Botan::DER_Encoder::end_cons(), Botan::DER_Encoder::get_contents(), Botan::DER_Encoder::raw_bytes(), Botan::SEQUENCE, sig, sig_algo, Botan::DER_Encoder::start_cons(), and tbs_bits.

Referenced by encode(), and PEM_encode().

101 {
102 return DER_Encoder()
103 .start_cons(SEQUENCE)
104 .start_cons(SEQUENCE)
105 .raw_bytes(tbs_bits)
106 .end_cons()
107 .encode(sig_algo)
108 .encode(sig, BIT_STRING)
109 .end_cons()
110 .get_contents();
111 }
Botan::X509_Object::tbs_bits
MemoryVector< byte > tbs_bits
Definition: x509_obj.h:102
Botan::X509_Object::sig_algo
AlgorithmIdentifier sig_algo
Definition: x509_obj.h:101
Botan::SEQUENCE
Definition: asn1_int.h:35
Botan::X509_Object::sig
MemoryVector< byte > sig
Definition: x509_obj.h:102
Botan::BIT_STRING
Definition: asn1_int.h:30

## ◆ check_signature() [1/2]

bool Botan::X509_Object::check_signature | ( | class Public_Key & | key | ) | const

Check the signature on this data

Parameters

  key | the public key purportedly used to sign this data

Returns
  true if the signature is valid, otherwise false

Definition at line 178 of file x509_obj.cpp.

References Botan::Public_Key::algo_name(), Botan::DER_SEQUENCE, Botan::IEEE_1363, Botan::OIDS::lookup(), Botan::Public_Key::message_parts(), Botan::AlgorithmIdentifier::oid, sig_algo, signature(), Botan::split_on(), tbs_data(), and Botan::PK_Verifier::verify_message().

Referenced by check_signature().

179 {
180 try {
181 std::vector<std::string> sig_info =
182 split_on(OIDS::lookup(sig_algo.oid), '/');
183
184 if(sig_info.size() != 2 || sig_info[0] != pub_key.algo_name())
185 return false;
186
187 std::string padding = sig_info[1];
188 Signature_Format format =
189 (pub_key.message_parts() >= 2) ? DER_SEQUENCE : IEEE_1363;
190
191 PK_Verifier verifier(pub_key, padding, format);
192
193 return verifier.verify_message(tbs_data(), signature());
194 }
195 catch(...)
196 {
197 return false;
198 }
199 }
Botan::X509_Object::tbs_data
MemoryVector< byte > tbs_data() const
Definition: x509_obj.cpp:124
Botan::Signature_Format
Signature_Format
Definition: pubkey.h:24
Botan::split_on
std::vector< std::string > split_on(const std::string &str, char delim)
Definition: parsing.cpp:152
Botan::X509_Object::sig_algo
AlgorithmIdentifier sig_algo
Definition: x509_obj.h:101
Botan::OIDS::lookup
std::string lookup(const OID &oid)
Definition: oids.cpp:31
Botan::AlgorithmIdentifier::oid
OID oid
Definition: alg_id.h:35
Botan::X509_Object::signature
MemoryVector< byte > signature() const
Definition: x509_obj.cpp:132
Botan::IEEE_1363
Definition: pubkey.h:24
Botan::DER_SEQUENCE
Definition: pubkey.h:24

## ◆ check_signature() [2/2]

bool Botan::X509_Object::check_signature | ( | class Public_Key * | key | ) | const

Check the signature on this data

Parameters

  key | the public key purportedly used to sign this data the pointer will be deleted after use

Returns
  true if the signature is valid, otherwise false

Definition at line 169 of file x509_obj.cpp.

References check_signature().

170 {
171 std::auto_ptr<Public_Key> key(pub_key);
172 return check_signature(*key);
173 }
Botan::X509_Object::check_signature
bool check_signature(class Public_Key &key) const
Definition: x509_obj.cpp:178

## ◆ do_decode()

void Botan::X509_Object::do_decode | ( |  | ) |
| protected

Definition at line 221 of file x509_obj.cpp.

Referenced by Botan::PKCS10_Request::PKCS10_Request(), Botan::X509_Certificate::X509_Certificate(), and Botan::X509_CRL::X509_CRL().

222 {
223 try {
224 force_decode();
225 }
226 catch(Decoding_Error& e)
227 {
228 throw Decoding_Error(PEM_label_pref + " decoding failed (" +
229 e.what() + ")");
230 }
231 catch(Invalid_Argument& e)
232 {
233 throw Decoding_Error(PEM_label_pref + " decoding failed (" +
234 e.what() + ")");
235 }
236 }
Botan::Invalid_Argument
std::invalid_argument Invalid_Argument
Definition: exceptn.h:20

## ◆ encode()

void Botan::X509_Object::encode | ( | Pipe & | out,
|  | X509_Encoding | encoding = `PEM`
| ) |  | const

Encode this to a pipe

Deprecated:
  use BER_encode or PEM_encode instead

Parameters

  out | the pipe to write to
  encoding | the encoding to use

Definition at line 89 of file x509_obj.cpp.

References BER_encode(), Botan::PEM, PEM_encode(), and Botan::Pipe::write().

90 {
91 if(encoding == PEM)
92 out.write(this->PEM_encode());
93 else
94 out.write(this->BER_encode());
95 }
Botan::X509_Object::BER_encode
MemoryVector< byte > BER_encode() const
Definition: x509_obj.cpp:100
Botan::PEM
Definition: pubkey_enums.h:67
Botan::X509_Object::PEM_encode
std::string PEM_encode() const
Definition: x509_obj.cpp:116

## ◆ hash_used_for_signature()

std::string Botan::X509_Object::hash_used_for_signature | ( |  | ) | const

Returns
  hash algorithm that was used to generate signature

Definition at line 148 of file x509_obj.cpp.

References Botan::OID::as_string(), Botan::OIDS::lookup(), Botan::AlgorithmIdentifier::oid, Botan::parse_algorithm_name(), sig_algo, and Botan::split_on().

149 {
150 std::vector<std::string> sig_info =
151 split_on(OIDS::lookup(sig_algo.oid), '/');
152
153 if(sig_info.size() != 2)
154 throw Internal_Error("Invalid name format found for " +
155 sig_algo.oid.as_string());
156
157 std::vector<std::string> pad_and_hash =
158 parse_algorithm_name(sig_info[1]);
159
160 if(pad_and_hash.size() != 2)
161 throw Internal_Error("Invalid name format " + sig_info[1]);
162
163 return pad_and_hash[1];
164 }
Botan::parse_algorithm_name
std::vector< std::string > parse_algorithm_name(const std::string &namex)
Definition: parsing.cpp:96
Botan::OID::as_string
std::string as_string() const
Definition: asn1_oid.cpp:50
Botan::split_on
std::vector< std::string > split_on(const std::string &str, char delim)
Definition: parsing.cpp:152
Botan::X509_Object::sig_algo
AlgorithmIdentifier sig_algo
Definition: x509_obj.h:101
Botan::OIDS::lookup
std::string lookup(const OID &oid)
Definition: oids.cpp:31
Botan::AlgorithmIdentifier::oid
OID oid
Definition: alg_id.h:35

## ◆ make_signed()

MemoryVector< byte > Botan::X509_Object::make_signed | ( | class PK_Signer * | signer,
|  | RandomNumberGenerator & | rng,
|  | const AlgorithmIdentifier & | alg_id,
|  | const MemoryRegion< byte > & | tbs
| ) |  |
| static

Create a signed X509 object.

Parameters

  signer | the signer used to sign the object
  rng | the random number generator to use
  alg_id | the algorithm identifier of the signature scheme
  tbs | the tbs bits to be signed

Returns
  signed X509 object

Definition at line 204 of file x509_obj.cpp.

208 {
209 return DER_Encoder()
210 .start_cons(SEQUENCE)
211 .raw_bytes(tbs_bits)
212 .encode(algo)
213 .encode(signer->sign_message(tbs_bits, rng), BIT_STRING)
214 .end_cons()
215 .get_contents();
216 }
Botan::X509_Object::tbs_bits
MemoryVector< byte > tbs_bits
Definition: x509_obj.h:102
Botan::SEQUENCE
Definition: asn1_int.h:35
Botan::BIT_STRING
Definition: asn1_int.h:30

## ◆ PEM_encode()

std::string Botan::X509_Object::PEM_encode | ( |  | ) | const

Returns
  PEM encoding of this

Definition at line 116 of file x509_obj.cpp.

References BER_encode(), and Botan::PEM_Code::encode().

Referenced by encode().

117 {
118 return PEM_Code::encode(BER_encode(), PEM_label_pref);
119 }
Botan::X509_Object::BER_encode
MemoryVector< byte > BER_encode() const
Definition: x509_obj.cpp:100
Botan::PEM_Code::encode
std::string encode(const byte der[], size_t length, const std::string &label, size_t width)
Definition: pem.cpp:19

## ◆ signature()

MemoryVector< byte > Botan::X509_Object::signature | ( |  | ) | const

Returns
  signature on tbs_data()

Definition at line 132 of file x509_obj.cpp.

References sig.

Referenced by check_signature().

133 {
134 return sig;
135 }
Botan::X509_Object::sig
MemoryVector< byte > sig
Definition: x509_obj.h:102

## ◆ signature_algorithm()

AlgorithmIdentifier Botan::X509_Object::signature_algorithm | ( |  | ) | const

Returns
  signature algorithm that was used to generate signature

Definition at line 140 of file x509_obj.cpp.

References sig_algo.

Referenced by Botan::X509_Certificate::to_string().

141 {
142 return sig_algo;
143 }
Botan::X509_Object::sig_algo
AlgorithmIdentifier sig_algo
Definition: x509_obj.h:101

## ◆ tbs_data()

MemoryVector< byte > Botan::X509_Object::tbs_data | ( |  | ) | const

The underlying data that is to be or was signed

Returns
  data that is or was signed

Definition at line 124 of file x509_obj.cpp.

References Botan::ASN1::put_in_sequence(), and tbs_bits.

Referenced by check_signature().

125 {
126 return ASN1::put_in_sequence(tbs_bits);
127 }
Botan::X509_Object::tbs_bits
MemoryVector< byte > tbs_bits
Definition: x509_obj.h:102
Botan::ASN1::put_in_sequence
SecureVector< byte > put_in_sequence(const MemoryRegion< byte > &contents)
Definition: asn1_int.cpp:34

## Member Data Documentation

## ◆ sig

MemoryVector<byte> Botan::X509_Object::sig
| protected

Definition at line 102 of file x509_obj.h.

Referenced by BER_encode(), Botan::X509_Certificate::operator==(), and signature().

## ◆ sig_algo

AlgorithmIdentifier Botan::X509_Object::sig_algo
| protected

Definition at line 101 of file x509_obj.h.

Referenced by BER_encode(), check_signature(), hash_used_for_signature(), Botan::X509_Certificate::operator==(), and signature_algorithm().

## ◆ tbs_bits

MemoryVector<byte> Botan::X509_Object::tbs_bits
| protected

Definition at line 102 of file x509_obj.h.

Referenced by BER_encode(), and tbs_data().

The documentation for this class was generated from the following files:

- src/cert/x509cert/x509_obj.h
- src/cert/x509cert/x509_obj.cpp