Botan: Botan::EAC1_1_ADO Class Reference

Botan 1.10.16

Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Friends | List of all members
Botan::EAC1_1_ADO Class Reference

`#include <cvc_ado.h>`

Inheritance diagram for Botan::EAC1_1_ADO:

## Public Member Functions
SecureVector< byte > | BER_encode () const
bool | check_signature (class Public_Key &key) const
bool | check_signature (class Public_Key &key, const MemoryRegion< byte > &sig) const
| EAC1_1_ADO (const std::string &str)
| EAC1_1_ADO (DataSource &source)
void | encode (Pipe &out, X509_Encoding encoding) const
ASN1_Car | get_car () const
SecureVector< byte > | get_concat_sig () const
EAC1_1_Req | get_request () const
bool | operator== (EAC1_1_ADO const &rhs) const
std::string | PEM_encode () const
AlgorithmIdentifier | signature_algorithm () const
SecureVector< byte > | tbs_data () const
virtual | ~EAC1_1_ADO ()

## Static Public Member Functions
static MemoryVector< byte > | make_signed (PK_Signer &signer, const MemoryRegion< byte > &tbs_bits, RandomNumberGenerator &rng)

## Protected Member Functions
void | do_decode ()
void | init (DataSource &in)

## Protected Attributes
ECDSA_Signature | m_sig
std::string | PEM_label_pref
std::vector< std::string > | PEM_labels_allowed
AlgorithmIdentifier | sig_algo
SecureVector< byte > | tbs_bits

## Friends
class | EAC1_1_obj< EAC1_1_ADO >

## Detailed Description

This class represents a TR03110 (EAC) v1.1 CVC ADO request

Definition at line 23 of file cvc_ado.h.

## Constructor & Destructor Documentation

## ◆ EAC1_1_ADO() [1/2]

Botan::EAC1_1_ADO::EAC1_1_ADO | ( | const std::string & | str | ) |

Construct a CVC ADO request from a DER encoded CVC ADO request file.

Parameters

  str | the path to the DER encoded file

Definition at line 20 of file cvc_ado.cpp.

References Botan::APPLICATION, Botan::BER_Decoder::decode(), Botan::EAC_Signed_Object::do_decode(), Botan::DER_Encoder::end_cons(), Botan::BER_Decoder::end_cons(), Botan::DER_Encoder::get_contents(), Botan::EAC1_1_obj< EAC1_1_ADO >::init(), Botan::BER_Decoder::raw_bytes(), Botan::DER_Encoder::raw_bytes(), Botan::EAC_Signed_Object::sig_algo, Botan::DER_Encoder::start_cons(), Botan::BER_Decoder::start_cons(), Botan::EAC_Signed_Object::tbs_bits, and Botan::BER_Decoder::verify_end().

21 {
22 DataSource_Stream stream(in, true);
23 init(stream);
24 do_decode();
25 }
Botan::EAC1_1_obj< EAC1_1_ADO >::init
void init(DataSource &in)
Definition: eac_obj.h:38
Botan::EAC_Signed_Object::do_decode
void do_decode()
Definition: signed_obj.cpp:79

## ◆ EAC1_1_ADO() [2/2]

Botan::EAC1_1_ADO::EAC1_1_ADO | ( | DataSource & | source | ) |

Construct a CVC ADO request from a data source

Parameters

  source | the data source

Definition at line 14 of file cvc_ado.cpp.

References Botan::EAC_Signed_Object::do_decode(), and Botan::EAC1_1_obj< EAC1_1_ADO >::init().

15 {
16 init(in);
17 do_decode();
18 }
Botan::EAC1_1_obj< EAC1_1_ADO >::init
void init(DataSource &in)
Definition: eac_obj.h:38
Botan::EAC_Signed_Object::do_decode
void do_decode()
Definition: signed_obj.cpp:79

## ◆ ~EAC1_1_ADO()

virtual Botan::EAC1_1_ADO::~EAC1_1_ADO | ( |  | ) |
| inlinevirtual

Definition at line 78 of file cvc_ado.h.

78 {}

## Member Function Documentation

## ◆ BER_encode()

SecureVector< byte > Botan::EAC_Signed_Object::BER_encode | ( |  | ) | const
| inherited

BER encode this object.

Returns
  result containing the BER representation of this object.

Definition at line 19 of file signed_obj.cpp.

References Botan::EAC_Signed_Object::encode(), Botan::Pipe::end_msg(), Botan::RAW_BER, Botan::Pipe::read_all(), and Botan::Pipe::start_msg().

20 {
21 Pipe ber;
22 ber.start_msg();
23 encode(ber, RAW_BER);
24 ber.end_msg();
25 return ber.read_all();
26 }
Botan::EAC_Signed_Object::encode
virtual void encode(Pipe &pipe, X509_Encoding encoding=PEM) const =0
Botan::RAW_BER
Definition: pubkey_enums.h:67

## ◆ check_signature() [1/2]

bool Botan::EAC1_1_obj< EAC1_1_ADO >::check_signature | ( | class Public_Key & | key | ) | const
| inlineinherited

Definition at line 30 of file eac_obj.h.

31 {
32 return EAC_Signed_Object::check_signature(key, m_sig.DER_encode());
33 }
Botan::EAC1_1_obj< EAC1_1_ADO >::m_sig
ECDSA_Signature m_sig
Definition: eac_obj.h:36
Botan::ECDSA_Signature::DER_encode
MemoryVector< byte > DER_encode() const
Definition: ecdsa_sig.cpp:23

## ◆ check_signature() [2/2]

bool Botan::EAC_Signed_Object::check_signature | ( | class Public_Key & | key,
|  | const MemoryRegion< byte > & | sig
| ) |  | const
| inherited

Check the signature of this object.

Parameters

  key | the public key associated with this signed object
  sig | the signature we are checking

Returns
  true if the signature was created by the private key associated with this public key

Definition at line 48 of file signed_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, Botan::EAC_Signed_Object::sig_algo, Botan::split_on(), Botan::EAC_Signed_Object::tbs_data(), and Botan::PK_Verifier::verify_message().

Referenced by Botan::EAC1_1_obj< EAC1_1_Req >::check_signature().

50 {
51 try
52 {
53 std::vector<std::string> sig_info =
54 split_on(OIDS::lookup(sig_algo.oid), '/');
55
56 if(sig_info.size() != 2 || sig_info[0] != pub_key.algo_name())
57 {
58 return false;
59 }
60
61 std::string padding = sig_info[1];
62 Signature_Format format =
63 (pub_key.message_parts() >= 2) ? DER_SEQUENCE : IEEE_1363;
64
65 SecureVector<byte> to_sign = tbs_data();
66
67 PK_Verifier verifier(pub_key, padding, format);
68 return verifier.verify_message(to_sign, sig);
69 }
70 catch(...)
71 {
72 return false;
73 }
74 }
Botan::EAC_Signed_Object::tbs_data
virtual SecureVector< byte > tbs_data() const =0
Botan::EAC_Signed_Object::sig_algo
AlgorithmIdentifier sig_algo
Definition: signed_obj.h:85
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::OIDS::lookup
std::string lookup(const OID &oid)
Definition: oids.cpp:31
Botan::AlgorithmIdentifier::oid
OID oid
Definition: alg_id.h:35
Botan::IEEE_1363
Definition: pubkey.h:24
Botan::DER_SEQUENCE
Definition: pubkey.h:24

## ◆ do_decode()

void Botan::EAC_Signed_Object::do_decode | ( |  | ) |
| protectedinherited

Definition at line 79 of file signed_obj.cpp.

References Botan::EAC_Signed_Object::PEM_label_pref.

Referenced by EAC1_1_ADO(), Botan::EAC1_1_CVC::EAC1_1_CVC(), and Botan::EAC1_1_Req::EAC1_1_Req().

80 {
81 try {
82 force_decode();
83 }
84 catch(Decoding_Error& e)
85 {
86 const std::string what = e.what();
87 throw Decoding_Error(PEM_label_pref + " decoding failed (" + what + ")");
88 }
89 catch(Invalid_Argument& e)
90 {
91 const std::string what = e.what();
92 throw Decoding_Error(PEM_label_pref + " decoding failed (" + what + ")");
93 }
94 }
Botan::Invalid_Argument
std::invalid_argument Invalid_Argument
Definition: exceptn.h:20
Botan::EAC_Signed_Object::PEM_label_pref
std::string PEM_label_pref
Definition: signed_obj.h:87

## ◆ encode()

void Botan::EAC1_1_ADO::encode | ( | Pipe & | out,
|  | X509_Encoding | encoding
| ) |  | const
| virtual

Encode this object into a pipe. Only DER is supported.

Parameters

  out | the pipe to encode this object into
  encoding | the encoding type to use, must be DER

Implements Botan::EAC_Signed_Object.

Definition at line 95 of file cvc_ado.cpp.

References Botan::APPLICATION, Botan::OCTET_STRING, Botan::PEM, Botan::EAC_Signed_Object::tbs_bits, and Botan::Pipe::write().

96 {
97 if(encoding == PEM)
98 throw Invalid_Argument("EAC1_1_ADO::encode() cannot PEM encode an EAC object");
99
100 SecureVector<byte> concat_sig(
101 EAC1_1_obj<EAC1_1_ADO>::m_sig.get_concatenation());
102
103 out.write(DER_Encoder()
104 .start_cons(ASN1_Tag(7), APPLICATION)
105 .raw_bytes(tbs_bits)
106 .encode(concat_sig, OCTET_STRING, ASN1_Tag(55), APPLICATION)
107 .end_cons()
108 .get_contents());
109 }
Botan::EAC1_1_obj< EAC1_1_ADO >::m_sig
ECDSA_Signature m_sig
Definition: eac_obj.h:36
Botan::Invalid_Argument
std::invalid_argument Invalid_Argument
Definition: exceptn.h:20
Botan::OCTET_STRING
Definition: asn1_int.h:31
Botan::EAC1_1_ADO::encode
void encode(Pipe &out, X509_Encoding encoding) const
Definition: cvc_ado.cpp:95
Botan::ASN1_Tag
ASN1_Tag
Definition: asn1_int.h:19
Botan::PEM
Definition: pubkey_enums.h:67
Botan::APPLICATION
Definition: asn1_int.h:21
Botan::EAC_Signed_Object::tbs_bits
SecureVector< byte > tbs_bits
Definition: signed_obj.h:86

## ◆ get_car()

ASN1_Car Botan::EAC1_1_ADO::get_car | ( |  | ) | const

Get the CAR of this CVC ADO request

Returns
  the CAR of this CVC ADO request

Definition at line 62 of file cvc_ado.cpp.

References Botan::APPLICATION, Botan::BER_Decoder::decode(), Botan::decode_concatenation(), Botan::DER_Encoder::encode(), Botan::DER_Encoder::end_cons(), Botan::BER_Decoder::end_cons(), Botan::DER_Encoder::get_contents(), Botan::OCTET_STRING, Botan::BER_Decoder::raw_bytes(), Botan::DER_Encoder::raw_bytes(), Botan::DER_Encoder::start_cons(), and Botan::BER_Decoder::start_cons().

Referenced by operator==().

63 {
64 return m_car;
65 }

## ◆ get_concat_sig()

SecureVector<byte> Botan::EAC1_1_obj< EAC1_1_ADO >::get_concat_sig | ( |  | ) | const
| inlinevirtualinherited

Return the signature as a concatenation of the encoded parts.

Returns
  the concatenated signature

Implements Botan::EAC_Signed_Object.

Definition at line 27 of file eac_obj.h.

Referenced by operator==().

28 { return m_sig.get_concatenation(); }
Botan::EAC1_1_obj< EAC1_1_ADO >::m_sig
ECDSA_Signature m_sig
Definition: eac_obj.h:36
Botan::ECDSA_Signature::get_concatenation
MemoryVector< byte > get_concatenation() const
Definition: ecdsa_sig.cpp:33

## ◆ get_request()

EAC1_1_Req Botan::EAC1_1_ADO::get_request | ( |  | ) | const

Get the CVC request contained in this object.

Returns
  the CVC request inside this CVC ADO request

Definition at line 123 of file cvc_ado.cpp.

124 {
125 return m_req;
126 }

## ◆ init()

void Botan::EAC1_1_obj< EAC1_1_ADO >::init | ( | DataSource & | in | ) |
| inlineprotectedinherited

Definition at line 38 of file eac_obj.h.

Referenced by EAC1_1_ADO().

39 {
40 try
41 {
42 Derived::decode_info(in, tbs_bits, m_sig);
43 }
44 catch(Decoding_Error)
45 {
46 throw Decoding_Error(PEM_label_pref + " decoding failed");
47 }
48 }
Botan::EAC1_1_obj< EAC1_1_ADO >::m_sig
ECDSA_Signature m_sig
Definition: eac_obj.h:36
Botan::EAC_Signed_Object::PEM_label_pref
std::string PEM_label_pref
Definition: signed_obj.h:87
Botan::EAC_Signed_Object::tbs_bits
SecureVector< byte > tbs_bits
Definition: signed_obj.h:86

## ◆ make_signed()

MemoryVector< byte > Botan::EAC1_1_ADO::make_signed | ( | PK_Signer & | signer,
|  | const MemoryRegion< byte > & | tbs_bits,
|  | RandomNumberGenerator & | rng
| ) |  |
| static

Create a signed CVC ADO request from to be signed (TBS) data

Parameters

  signer | the signer used to sign the CVC ADO request
  tbs_bits | the TBS data to sign
  rng | a random number generator

Definition at line 48 of file cvc_ado.cpp.

51 {
52 SecureVector<byte> concat_sig = signer.sign_message(tbs_bits, rng);
53
54 return DER_Encoder()
55 .start_cons(ASN1_Tag(7), APPLICATION)
56 .raw_bytes(tbs_bits)
57 .encode(concat_sig, OCTET_STRING, ASN1_Tag(55), APPLICATION)
58 .end_cons()
59 .get_contents();
60 }
Botan::OCTET_STRING
Definition: asn1_int.h:31
Botan::ASN1_Tag
ASN1_Tag
Definition: asn1_int.h:19
Botan::APPLICATION
Definition: asn1_int.h:21

## ◆ operator==()

bool Botan::EAC1_1_ADO::operator== | ( | EAC1_1_ADO const & | rhs | ) | const

Definition at line 116 of file cvc_ado.cpp.

References get_car(), Botan::EAC1_1_obj< Derived >::get_concat_sig(), Botan::EAC1_1_obj< EAC1_1_ADO >::get_concat_sig(), and tbs_data().

117 {
118 return (this->get_concat_sig() == rhs.get_concat_sig()
119 && this->tbs_data() == rhs.tbs_data()
120 && this->get_car() == rhs.get_car());
121 }
Botan::EAC1_1_obj< EAC1_1_ADO >::get_concat_sig
SecureVector< byte > get_concat_sig() const
Definition: eac_obj.h:27
Botan::EAC1_1_ADO::tbs_data
SecureVector< byte > tbs_data() const
Definition: cvc_ado.cpp:111
Botan::EAC1_1_ADO::get_car
ASN1_Car get_car() const
Definition: cvc_ado.cpp:62

## ◆ PEM_encode()

std::string Botan::EAC_Signed_Object::PEM_encode | ( |  | ) | const
| inherited

PEM encode this object.

Returns
  result containing the PEM representation of this object.

Definition at line 31 of file signed_obj.cpp.

References Botan::EAC_Signed_Object::encode(), Botan::Pipe::end_msg(), Botan::PEM, Botan::Pipe::read_all_as_string(), and Botan::Pipe::start_msg().

32 {
33 Pipe pem;
34 pem.start_msg();
35 encode(pem, PEM);
36 pem.end_msg();
37 return pem.read_all_as_string();
38 }
Botan::EAC_Signed_Object::encode
virtual void encode(Pipe &pipe, X509_Encoding encoding=PEM) const =0
Botan::PEM
Definition: pubkey_enums.h:67

## ◆ signature_algorithm()

AlgorithmIdentifier Botan::EAC_Signed_Object::signature_algorithm | ( |  | ) | const
| inherited

Get the signature algorithm identifier used to sign this object.

Returns
  the signature algorithm identifier

Definition at line 43 of file signed_obj.cpp.

References Botan::EAC_Signed_Object::sig_algo.

44 {
45 return sig_algo;
46 }
Botan::EAC_Signed_Object::sig_algo
AlgorithmIdentifier sig_algo
Definition: signed_obj.h:85

## ◆ tbs_data()

SecureVector< byte > Botan::EAC1_1_ADO::tbs_data | ( |  | ) | const
| virtual

Get the TBS data of this CVC ADO request.

Returns
  the TBS data

Implements Botan::EAC_Signed_Object.

Definition at line 111 of file cvc_ado.cpp.

References Botan::EAC_Signed_Object::tbs_bits.

Referenced by operator==().

112 {
113 return tbs_bits;
114 }
Botan::EAC_Signed_Object::tbs_bits
SecureVector< byte > tbs_bits
Definition: signed_obj.h:86

## Friends And Related Function Documentation

## ◆ EAC1_1_obj< EAC1_1_ADO >

friend class EAC1_1_obj< EAC1_1_ADO >
| friend

Definition at line 26 of file cvc_ado.h.

## Member Data Documentation

## ◆ m_sig

ECDSA_Signature Botan::EAC1_1_obj< EAC1_1_ADO >::m_sig
| protectedinherited

Definition at line 36 of file eac_obj.h.

## ◆ PEM_label_pref

std::string Botan::EAC_Signed_Object::PEM_label_pref
| protectedinherited

Definition at line 87 of file signed_obj.h.

Referenced by Botan::EAC_Signed_Object::do_decode(), and Botan::EAC1_1_obj< EAC1_1_Req >::init().

## ◆ PEM_labels_allowed

std::vector<std::string> Botan::EAC_Signed_Object::PEM_labels_allowed
| protectedinherited

Definition at line 88 of file signed_obj.h.

## ◆ sig_algo

AlgorithmIdentifier Botan::EAC_Signed_Object::sig_algo
| protectedinherited

Definition at line 85 of file signed_obj.h.

Referenced by Botan::EAC_Signed_Object::check_signature(), EAC1_1_ADO(), Botan::EAC1_1_CVC::get_chat_value(), Botan::EAC1_1_Req::operator==(), and Botan::EAC_Signed_Object::signature_algorithm().

## ◆ tbs_bits

SecureVector<byte> Botan::EAC_Signed_Object::tbs_bits
| protectedinherited

Definition at line 86 of file signed_obj.h.

Referenced by EAC1_1_ADO(), encode(), Botan::EAC1_1_CVC::get_chat_value(), Botan::EAC1_1_obj< EAC1_1_Req >::init(), Botan::EAC1_1_Req::operator==(), and tbs_data().

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

- src/cert/cvc/cvc_ado.h
- src/cert/cvc/cvc_ado.cpp