Botan 2.19.5 Crypto and TLS for C&

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*/
18 AlgorithmIdentifier::AlgorithmIdentifier(const OID& alg_id,
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*/
35 AlgorithmIdentifier::AlgorithmIdentifier(const OID& alg_id,
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
60 bool AlgorithmIdentifier::parameters_are_null() const
61 {
62 return (parameters.size() == 2 && (parameters[0] == 0x05) && (parameters[1] == 0x00));
63 }
64
65 bool operator==(const AlgorithmIdentifier& a1, const AlgorithmIdentifier& a2)
66 {
67 if(a1.get_oid() != a2.get_oid())
68 return false;
69
70 /*
71 * Treat NULL and empty as equivalent
72 */
73 if(a1.parameters_are_null_or_empty() &&
74 a2.parameters_are_null_or_empty())
75 {
76 return true;
77 }
78
79 return (a1.get_parameters() == a2.get_parameters());
80 }
81
82 bool operator!=(const AlgorithmIdentifier& a1, const AlgorithmIdentifier& a2)
83 {
84 return !(a1 == a2);
85 }
86
87/*
88* DER encode an AlgorithmIdentifier
89*/
90 void AlgorithmIdentifier::encode_into(DER_Encoder& codec) const
91 {
92 codec.start_cons(SEQUENCE)
93 .encode(get_oid())
94 .raw_bytes(get_parameters())
95 .end_cons();
96 }
97
98/*
99* Decode a BER encoded AlgorithmIdentifier
100*/
101 void AlgorithmIdentifier::decode_from(BER_Decoder& codec)
102 {
103 codec.start_cons(SEQUENCE)
104 .decode(oid)
105 .raw_bytes(parameters)
106 .end_cons();
107 }
108
109}
Botan::AlgorithmIdentifier
Definition: asn1_obj.h:430
Botan::AlgorithmIdentifier::decode_from
void decode_from(class BER_Decoder &) override
Definition: alg_id.cpp:101
Botan::AlgorithmIdentifier::encode_into
void encode_into(class DER_Encoder &) const override
Definition: alg_id.cpp:90
Botan::AlgorithmIdentifier::parameters_are_null_or_empty
bool parameters_are_null_or_empty() const
Definition: asn1_obj.h:451
Botan::AlgorithmIdentifier::parameters_are_null
bool parameters_are_null() const
Definition: alg_id.cpp:60
Botan::AlgorithmIdentifier::AlgorithmIdentifier
AlgorithmIdentifier()=default
Botan::AlgorithmIdentifier::Encoding_Option
Encoding_Option
Definition: asn1_obj.h:432
Botan::AlgorithmIdentifier::USE_NULL_PARAM
@ USE_NULL_PARAM
Definition: asn1_obj.h:432
Botan::AlgorithmIdentifier::get_parameters
const std::vector< uint8_t > & get_parameters() const
Definition: asn1_obj.h:446
Botan::AlgorithmIdentifier::get_oid
const OID & get_oid() const
Definition: asn1_obj.h:445
Botan::AlgorithmIdentifier::parameters
std::vector< uint8_t > parameters
Definition: asn1_obj.h:462
Botan::BER_Decoder
Definition: ber_dec.h:22
Botan::BER_Decoder::start_cons
BER_Decoder start_cons(ASN1_Tag type_tag, ASN1_Tag class_tag=UNIVERSAL)
Definition: ber_dec.cpp:290
Botan::BER_Decoder::decode
BER_Decoder & decode(bool &out)
Definition: ber_dec.h:170
Botan::BER_Decoder::raw_bytes
BER_Decoder & raw_bytes(std::vector< uint8_t, Alloc > &out)
Definition: ber_dec.h:156
Botan::BER_Decoder::end_cons
BER_Decoder & end_cons()
Definition: ber_dec.cpp:300
Botan::DER_Encoder
Definition: der_enc.h:23
Botan::DER_Encoder::start_cons
DER_Encoder & start_cons(ASN1_Tag type_tag, ASN1_Tag class_tag=UNIVERSAL)
Definition: der_enc.cpp:181
Botan::DER_Encoder::raw_bytes
DER_Encoder & raw_bytes(const uint8_t val[], size_t len)
Definition: der_enc.cpp:228
Botan::DER_Encoder::end_cons
DER_Encoder & end_cons()
Definition: der_enc.cpp:191
Botan::DER_Encoder::encode
DER_Encoder & encode(bool b)
Definition: der_enc.cpp:285
Botan::OID
Definition: asn1_obj.h:194
Botan
Definition: alg_id.cpp:13
Botan::operator!=
bool operator!=(const AlgorithmIdentifier &a1, const AlgorithmIdentifier &a2)
Definition: alg_id.cpp:82
Botan::operator==
bool operator==(const AlgorithmIdentifier &a1, const AlgorithmIdentifier &a2)
Definition: alg_id.cpp:65
Botan::SEQUENCE
@ SEQUENCE
Definition: asn1_obj.h:42