Botan  2.18.1
Crypto and TLS for C++11
alg_id.cpp
Go to the documentation of this file.
1 /*
2 * Algorithm Identifier
3 * (C) 1999-2007 Jack Lloyd
4 *
5 * Botan is released under the Simplified BSD License (see license.txt)
6 */
7 
8 #include <botan/asn1_obj.h>
9 #include <botan/der_enc.h>
10 #include <botan/ber_dec.h>
11 #include <botan/oids.h>
12 
13 namespace Botan {
14 
15 /*
16 * Create an AlgorithmIdentifier
17 */
19  const std::vector<uint8_t>& param) :
20  oid(alg_id),
21  parameters(param)
22  {}
23 
24 /*
25 * Create an AlgorithmIdentifier
26 */
27 AlgorithmIdentifier::AlgorithmIdentifier(const std::string& alg_id,
28  const std::vector<uint8_t>& param) :
29  AlgorithmIdentifier(OID::from_string(alg_id), param)
30  {}
31 
32 /*
33 * Create an AlgorithmIdentifier
34 */
36  Encoding_Option option) :
37  oid(alg_id),
38  parameters()
39  {
40  const uint8_t DER_NULL[] = { 0x05, 0x00 };
41 
42  if(option == USE_NULL_PARAM)
43  parameters.assign(DER_NULL, DER_NULL + 2);
44  }
45 
46 /*
47 * Create an AlgorithmIdentifier
48 */
49 AlgorithmIdentifier::AlgorithmIdentifier(const std::string& alg_id,
50  Encoding_Option option) :
51  oid(OID::from_string(alg_id)),
52  parameters()
53  {
54  const uint8_t DER_NULL[] = { 0x05, 0x00 };
55 
56  if(option == USE_NULL_PARAM)
57  parameters.assign(DER_NULL, DER_NULL + 2);
58  }
59 
61  {
62  return (parameters.size() == 2 && (parameters[0] == 0x05) && (parameters[1] == 0x00));
63  }
64 
66  {
67  if(a1.get_oid() != a2.get_oid())
68  return false;
69 
70  /*
71  * Treat NULL and empty as equivalent
72  */
75  {
76  return true;
77  }
78 
79  return (a1.get_parameters() == a2.get_parameters());
80  }
81 
83  {
84  return !(a1 == a2);
85  }
86 
87 /*
88 * DER encode an AlgorithmIdentifier
89 */
91  {
92  codec.start_cons(SEQUENCE)
93  .encode(get_oid())
95  .end_cons();
96  }
97 
98 /*
99 * Decode a BER encoded AlgorithmIdentifier
100 */
102  {
103  codec.start_cons(SEQUENCE)
104  .decode(oid)
106  .end_cons();
107  }
108 
109 }
bool operator!=(const AlgorithmIdentifier &a1, const AlgorithmIdentifier &a2)
Definition: alg_id.cpp:82
std::vector< uint8_t > parameters
Definition: asn1_obj.h:462
void decode_from(class BER_Decoder &) override
Definition: alg_id.cpp:101
BER_Decoder & raw_bytes(std::vector< uint8_t, Alloc > &out)
Definition: ber_dec.h:156
DER_Encoder & end_cons()
Definition: der_enc.cpp:191
BER_Decoder & decode(bool &out)
Definition: ber_dec.h:170
DER_Encoder & raw_bytes(const uint8_t val[], size_t len)
Definition: der_enc.cpp:228
DER_Encoder & encode(bool b)
Definition: der_enc.cpp:285
BER_Decoder & end_cons()
Definition: ber_dec.cpp:300
BER_Decoder start_cons(ASN1_Tag type_tag, ASN1_Tag class_tag=UNIVERSAL)
Definition: ber_dec.cpp:290
Definition: alg_id.cpp:13
const std::vector< uint8_t > & get_parameters() const
Definition: asn1_obj.h:446
bool parameters_are_null() const
Definition: alg_id.cpp:60
const OID & get_oid() const
Definition: asn1_obj.h:445
DER_Encoder & start_cons(ASN1_Tag type_tag, ASN1_Tag class_tag=UNIVERSAL)
Definition: der_enc.cpp:181
void encode_into(class DER_Encoder &) const override
Definition: alg_id.cpp:90
bool operator==(const AlgorithmIdentifier &a1, const AlgorithmIdentifier &a2)
Definition: alg_id.cpp:65
bool parameters_are_null_or_empty() const
Definition: asn1_obj.h:451