Botan  1.11.11
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:
Botan::EAC1_1_obj< EAC1_1_ADO > Botan::EAC_Signed_Object

Public Member Functions

std::vector< byteBER_encode () const
 
bool check_signature (class Public_Key &key) const
 
bool check_signature (class Public_Key &key, const std::vector< 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
 
std::vector< byteget_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
 
std::vector< bytetbs_data () const
 
virtual ~EAC1_1_ADO ()
 

Static Public Member Functions

static std::vector< bytemake_signed (PK_Signer &signer, const std::vector< 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
 
std::vector< bytetbs_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

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
strthe path to the DER encoded file

Definition at line 20 of file cvc_ado.cpp.

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

21  {
22  DataSource_Stream stream(in, true);
23  init(stream);
24  do_decode();
25  }
void init(DataSource &in)
Definition: eac_obj.h:38
Botan::EAC1_1_ADO::EAC1_1_ADO ( DataSource source)

Construct a CVC ADO request from a data source

Parameters
sourcethe 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  }
void init(DataSource &in)
Definition: eac_obj.h:38
virtual Botan::EAC1_1_ADO::~EAC1_1_ADO ( )
inlinevirtual

Definition at line 78 of file cvc_ado.h.

78 {}

Member Function Documentation

std::vector< 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 18 of file signed_obj.cpp.

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

Referenced by Botan::CVC_EAC::create_ado_req().

19  {
20  Pipe ber;
21  ber.start_msg();
22  encode(ber, RAW_BER);
23  ber.end_msg();
24  return unlock(ber.read_all());
25  }
virtual void encode(Pipe &pipe, X509_Encoding encoding=PEM) const =0
std::vector< T > unlock(const secure_vector< T > &in)
Definition: secmem.h:95
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  }
std::vector< byte > DER_encode() const
Definition: ecdsa_sig.cpp:23
bool Botan::EAC_Signed_Object::check_signature ( class Public_Key key,
const std::vector< byte > &  sig 
) const
inherited

Check the signature of this object.

Parameters
keythe public key associated with this signed object
sigthe signature we are checking
Returns
true if the signature was created by the private key associated with this public key

Definition at line 47 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().

49  {
50  try
51  {
52  std::vector<std::string> sig_info =
54 
55  if(sig_info.size() != 2 || sig_info[0] != pub_key.algo_name())
56  {
57  return false;
58  }
59 
60  std::string padding = sig_info[1];
61  Signature_Format format =
62  (pub_key.message_parts() >= 2) ? DER_SEQUENCE : IEEE_1363;
63 
64  std::vector<byte> to_sign = tbs_data();
65 
66  PK_Verifier verifier(pub_key, padding, format);
67  return verifier.verify_message(to_sign, sig);
68  }
69  catch(...)
70  {
71  return false;
72  }
73  }
virtual std::vector< byte > tbs_data() const =0
AlgorithmIdentifier sig_algo
Definition: signed_obj.h:86
Signature_Format
Definition: pubkey.h:24
std::vector< std::string > split_on(const std::string &str, char delim)
Definition: parsing.cpp:108
std::string lookup(const OID &oid)
Definition: oids.cpp:111
void Botan::EAC_Signed_Object::do_decode ( )
protectedinherited

Definition at line 78 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().

79  {
80  try {
81  force_decode();
82  }
83  catch(Decoding_Error& e)
84  {
85  const std::string what = e.what();
86  throw Decoding_Error(PEM_label_pref + " decoding failed (" + what + ")");
87  }
88  catch(Invalid_Argument& e)
89  {
90  const std::string what = e.what();
91  throw Decoding_Error(PEM_label_pref + " decoding failed (" + what + ")");
92  }
93  }
std::invalid_argument Invalid_Argument
Definition: exceptn.h:20
std::string PEM_label_pref
Definition: signed_obj.h:88
void Botan::EAC1_1_ADO::encode ( Pipe out,
X509_Encoding  encoding 
) const
virtual

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

Parameters
outthe pipe to encode this object into
encodingthe 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 
101 
102  out.write(DER_Encoder()
103  .start_cons(ASN1_Tag(7), APPLICATION)
104  .raw_bytes(tbs_bits)
105  .encode(concat_sig, OCTET_STRING, ASN1_Tag(55), APPLICATION)
106  .end_cons()
107  .get_contents());
108  }
std::invalid_argument Invalid_Argument
Definition: exceptn.h:20
void encode(Pipe &out, X509_Encoding encoding) const
Definition: cvc_ado.cpp:95
ASN1_Tag
Definition: asn1_obj.h:19
std::vector< byte > get_concatenation() const
Definition: ecdsa_sig.cpp:33
std::vector< byte > tbs_bits
Definition: signed_obj.h:87
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.

Referenced by operator==().

63  {
64  return m_car;
65  }
std::vector<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(); }
std::vector< byte > get_concatenation() const
Definition: ecdsa_sig.cpp:33
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 122 of file cvc_ado.cpp.

123  {
124  return m_req;
125  }
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  }
std::string PEM_label_pref
Definition: signed_obj.h:88
std::vector< byte > tbs_bits
Definition: signed_obj.h:87
std::vector< byte > Botan::EAC1_1_ADO::make_signed ( PK_Signer signer,
const std::vector< byte > &  tbs_bits,
RandomNumberGenerator rng 
)
static

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

Parameters
signerthe signer used to sign the CVC ADO request
tbs_bitsthe TBS data to sign
rnga random number generator

Definition at line 48 of file cvc_ado.cpp.

References Botan::APPLICATION, Botan::DER_Encoder::encode(), Botan::DER_Encoder::end_cons(), Botan::DER_Encoder::get_contents_unlocked(), Botan::OCTET_STRING, Botan::DER_Encoder::raw_bytes(), Botan::PK_Signer::sign_message(), and Botan::DER_Encoder::start_cons().

Referenced by Botan::CVC_EAC::create_ado_req().

51  {
52  const std::vector<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_unlocked();
60  }
ASN1_Tag
Definition: asn1_obj.h:19
std::vector< byte > tbs_bits
Definition: signed_obj.h:87
bool Botan::EAC1_1_ADO::operator== ( EAC1_1_ADO const &  rhs) const

Definition at line 115 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().

116  {
117  return (this->get_concat_sig() == rhs.get_concat_sig()
118  && this->tbs_data() == rhs.tbs_data()
119  && this->get_car() == rhs.get_car());
120  }
std::vector< byte > tbs_data() const
Definition: cvc_ado.cpp:110
ASN1_Car get_car() const
Definition: cvc_ado.cpp:62
std::vector< byte > get_concat_sig() const
Definition: eac_obj.h:27
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 30 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().

31  {
32  Pipe pem;
33  pem.start_msg();
34  encode(pem, PEM);
35  pem.end_msg();
36  return pem.read_all_as_string();
37  }
virtual void encode(Pipe &pipe, X509_Encoding encoding=PEM) const =0
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 42 of file signed_obj.cpp.

References Botan::EAC_Signed_Object::sig_algo.

Referenced by Botan::CVC_EAC::create_ado_req(), Botan::DE_EAC::link_cvca(), and Botan::DE_EAC::sign_request().

43  {
44  return sig_algo;
45  }
AlgorithmIdentifier sig_algo
Definition: signed_obj.h:86
std::vector< 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 110 of file cvc_ado.cpp.

References Botan::EAC_Signed_Object::tbs_bits.

Referenced by operator==().

111  {
112  return tbs_bits;
113  }
std::vector< byte > tbs_bits
Definition: signed_obj.h:87

Friends And Related Function Documentation

friend class EAC1_1_obj< EAC1_1_ADO >
friend

Definition at line 26 of file cvc_ado.h.

Member Data Documentation

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

Definition at line 36 of file eac_obj.h.

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

Definition at line 89 of file signed_obj.h.

AlgorithmIdentifier Botan::EAC_Signed_Object::sig_algo
protectedinherited
std::vector<byte> Botan::EAC_Signed_Object::tbs_bits
protectedinherited

Definition at line 87 of file signed_obj.h.

Referenced by encode(), Botan::EAC1_1_obj< EAC1_1_Req >::init(), and tbs_data().


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