aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/3rdparty/botan/src/lib/asn1/alg_id.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/3rdparty/botan/src/lib/asn1/alg_id.cpp')
-rw-r--r--src/libs/3rdparty/botan/src/lib/asn1/alg_id.cpp117
1 files changed, 117 insertions, 0 deletions
diff --git a/src/libs/3rdparty/botan/src/lib/asn1/alg_id.cpp b/src/libs/3rdparty/botan/src/lib/asn1/alg_id.cpp
new file mode 100644
index 0000000000..0637a8f8d1
--- /dev/null
+++ b/src/libs/3rdparty/botan/src/lib/asn1/alg_id.cpp
@@ -0,0 +1,117 @@
+/*
+* Algorithm Identifier
+* (C) 1999-2007 Jack Lloyd
+*
+* Botan is released under the Simplified BSD License (see license.txt)
+*/
+
+#include <botan/alg_id.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) :
+ oid(OIDS::lookup(alg_id)),
+ parameters(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(OIDS::lookup(alg_id)),
+ parameters()
+ {
+ const uint8_t DER_NULL[] = { 0x05, 0x00 };
+
+ if(option == USE_NULL_PARAM)
+ parameters.assign(DER_NULL, DER_NULL + 2);
+ }
+
+/*
+* Compare two AlgorithmIdentifiers
+*/
+namespace {
+
+bool param_null_or_empty(const std::vector<uint8_t>& p)
+ {
+ if(p.size() == 2 && (p[0] == 0x05) && (p[1] == 0x00))
+ return true;
+ return p.empty();
+ }
+
+}
+
+bool operator==(const AlgorithmIdentifier& a1, const AlgorithmIdentifier& a2)
+ {
+ if(a1.get_oid() != a2.get_oid())
+ return false;
+
+ if(param_null_or_empty(a1.get_parameters()) &&
+ param_null_or_empty(a2.get_parameters()))
+ return true;
+
+ return (a1.get_parameters() == a2.get_parameters());
+ }
+
+/*
+* Compare two AlgorithmIdentifiers
+*/
+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();
+ }
+
+}