summaryrefslogtreecommitdiffstats
path: root/comm/third_party/botan/src/lib/asn1/alg_id.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'comm/third_party/botan/src/lib/asn1/alg_id.cpp')
-rw-r--r--comm/third_party/botan/src/lib/asn1/alg_id.cpp109
1 files changed, 109 insertions, 0 deletions
diff --git a/comm/third_party/botan/src/lib/asn1/alg_id.cpp b/comm/third_party/botan/src/lib/asn1/alg_id.cpp
new file mode 100644
index 0000000000..1e82f29955
--- /dev/null
+++ b/comm/third_party/botan/src/lib/asn1/alg_id.cpp
@@ -0,0 +1,109 @@
+/*
+* Algorithm Identifier
+* (C) 1999-2007 Jack Lloyd
+*
+* Botan is released under the Simplified BSD License (see license.txt)
+*/
+
+#include <botan/asn1_obj.h>
+#include <botan/der_enc.h>
+#include <botan/ber_dec.h>
+#include <botan/oids.h>
+
+namespace Botan {
+
+/*
+* Create an AlgorithmIdentifier
+*/
+AlgorithmIdentifier::AlgorithmIdentifier(const OID& alg_id,
+ const std::vector<uint8_t>& param) :
+ oid(alg_id),
+ parameters(param)
+ {}
+
+/*
+* Create an AlgorithmIdentifier
+*/
+AlgorithmIdentifier::AlgorithmIdentifier(const std::string& alg_id,
+ const std::vector<uint8_t>& param) :
+ AlgorithmIdentifier(OID::from_string(alg_id), param)
+ {}
+
+/*
+* Create an AlgorithmIdentifier
+*/
+AlgorithmIdentifier::AlgorithmIdentifier(const OID& alg_id,
+ Encoding_Option option) :
+ oid(alg_id),
+ parameters()
+ {
+ const uint8_t DER_NULL[] = { 0x05, 0x00 };
+
+ if(option == USE_NULL_PARAM)
+ parameters.assign(DER_NULL, DER_NULL + 2);
+ }
+
+/*
+* Create an AlgorithmIdentifier
+*/
+AlgorithmIdentifier::AlgorithmIdentifier(const std::string& alg_id,
+ Encoding_Option option) :
+ oid(OID::from_string(alg_id)),
+ parameters()
+ {
+ const uint8_t DER_NULL[] = { 0x05, 0x00 };
+
+ if(option == USE_NULL_PARAM)
+ parameters.assign(DER_NULL, DER_NULL + 2);
+ }
+
+bool AlgorithmIdentifier::parameters_are_null() const
+ {
+ return (parameters.size() == 2 && (parameters[0] == 0x05) && (parameters[1] == 0x00));
+ }
+
+bool operator==(const AlgorithmIdentifier& a1, const AlgorithmIdentifier& a2)
+ {
+ if(a1.get_oid() != a2.get_oid())
+ return false;
+
+ /*
+ * Treat NULL and empty as equivalent
+ */
+ if(a1.parameters_are_null_or_empty() &&
+ a2.parameters_are_null_or_empty())
+ {
+ return true;
+ }
+
+ return (a1.get_parameters() == a2.get_parameters());
+ }
+
+bool operator!=(const AlgorithmIdentifier& a1, const AlgorithmIdentifier& a2)
+ {
+ return !(a1 == a2);
+ }
+
+/*
+* DER encode an AlgorithmIdentifier
+*/
+void AlgorithmIdentifier::encode_into(DER_Encoder& codec) const
+ {
+ codec.start_cons(SEQUENCE)
+ .encode(get_oid())
+ .raw_bytes(get_parameters())
+ .end_cons();
+ }
+
+/*
+* Decode a BER encoded AlgorithmIdentifier
+*/
+void AlgorithmIdentifier::decode_from(BER_Decoder& codec)
+ {
+ codec.start_cons(SEQUENCE)
+ .decode(oid)
+ .raw_bytes(parameters)
+ .end_cons();
+ }
+
+}