aboutsummaryrefslogtreecommitdiffstats
path: root/src/asn1/der_enc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/asn1/der_enc.cpp')
-rw-r--r--src/asn1/der_enc.cpp190
1 files changed, 96 insertions, 94 deletions
diff --git a/src/asn1/der_enc.cpp b/src/asn1/der_enc.cpp
index 1ab5ddd4e..bee269431 100644
--- a/src/asn1/der_enc.cpp
+++ b/src/asn1/der_enc.cpp
@@ -1,7 +1,9 @@
-/*************************************************
-* DER Encoder Source File *
-* (C) 1999-2007 Jack Lloyd *
-*************************************************/
+/*
+* DER Encoder
+* (C) 1999-2007 Jack Lloyd
+*
+* Distributed under the terms of the Botan license
+*/
#include <botan/der_enc.h>
#include <botan/asn1_int.h>
@@ -15,9 +17,9 @@ namespace Botan {
namespace {
-/*************************************************
-* DER encode an ASN.1 type tag *
-*************************************************/
+/*
+* DER encode an ASN.1 type tag
+*/
SecureVector<byte> encode_tag(ASN1_Tag type_tag, ASN1_Tag class_tag)
{
if((class_tag | 0xE0) != 0xE0)
@@ -41,9 +43,9 @@ SecureVector<byte> encode_tag(ASN1_Tag type_tag, ASN1_Tag class_tag)
return encoded_tag;
}
-/*************************************************
-* DER encode an ASN.1 length field *
-*************************************************/
+/*
+* DER encode an ASN.1 length field
+*/
SecureVector<byte> encode_length(u32bit length)
{
SecureVector<byte> encoded_length;
@@ -61,9 +63,9 @@ SecureVector<byte> encode_length(u32bit length)
}
-/*************************************************
-* Return the encoded SEQUENCE/SET *
-*************************************************/
+/*
+* Return the encoded SEQUENCE/SET
+*/
SecureVector<byte> DER_Encoder::DER_Sequence::get_contents()
{
const ASN1_Tag real_class_tag = ASN1_Tag(class_tag | CONSTRUCTED);
@@ -88,9 +90,9 @@ SecureVector<byte> DER_Encoder::DER_Sequence::get_contents()
return retval;
}
-/*************************************************
-* Add an encoded value to the SEQUENCE/SET *
-*************************************************/
+/*
+* Add an encoded value to the SEQUENCE/SET
+*/
void DER_Encoder::DER_Sequence::add_bytes(const byte data[], u32bit length)
{
if(type_tag == SET)
@@ -99,25 +101,25 @@ void DER_Encoder::DER_Sequence::add_bytes(const byte data[], u32bit length)
contents.append(data, length);
}
-/*************************************************
-* Return the type and class taggings *
-*************************************************/
+/*
+* Return the type and class taggings
+*/
ASN1_Tag DER_Encoder::DER_Sequence::tag_of() const
{
return ASN1_Tag(type_tag | class_tag);
}
-/*************************************************
-* DER_Sequence Constructor *
-*************************************************/
+/*
+* DER_Sequence Constructor
+*/
DER_Encoder::DER_Sequence::DER_Sequence(ASN1_Tag t1, ASN1_Tag t2) :
type_tag(t1), class_tag(t2)
{
}
-/*************************************************
-* Return the encoded contents *
-*************************************************/
+/*
+* Return the encoded contents
+*/
SecureVector<byte> DER_Encoder::get_contents()
{
if(subsequences.size() != 0)
@@ -129,9 +131,9 @@ SecureVector<byte> DER_Encoder::get_contents()
return retval;
}
-/*************************************************
-* Start a new ASN.1 SEQUENCE/SET/EXPLICIT *
-*************************************************/
+/*
+* Start a new ASN.1 SEQUENCE/SET/EXPLICIT
+*/
DER_Encoder& DER_Encoder::start_cons(ASN1_Tag type_tag,
ASN1_Tag class_tag)
{
@@ -139,9 +141,9 @@ DER_Encoder& DER_Encoder::start_cons(ASN1_Tag type_tag,
return (*this);
}
-/*************************************************
-* Finish the current ASN.1 SEQUENCE/SET/EXPLICIT *
-*************************************************/
+/*
+* Finish the current ASN.1 SEQUENCE/SET/EXPLICIT
+*/
DER_Encoder& DER_Encoder::end_cons()
{
if(subsequences.empty())
@@ -153,9 +155,9 @@ DER_Encoder& DER_Encoder::end_cons()
return (*this);
}
-/*************************************************
-* Start a new ASN.1 EXPLICIT encoding *
-*************************************************/
+/*
+* Start a new ASN.1 EXPLICIT encoding
+*/
DER_Encoder& DER_Encoder::start_explicit(u16bit type_no)
{
ASN1_Tag type_tag = static_cast<ASN1_Tag>(type_no);
@@ -166,25 +168,25 @@ DER_Encoder& DER_Encoder::start_explicit(u16bit type_no)
return start_cons(type_tag, CONTEXT_SPECIFIC);
}
-/*************************************************
-* Finish the current ASN.1 EXPLICIT encoding *
-*************************************************/
+/*
+* Finish the current ASN.1 EXPLICIT encoding
+*/
DER_Encoder& DER_Encoder::end_explicit()
{
return end_cons();
}
-/*************************************************
-* Write raw bytes into the stream *
-*************************************************/
+/*
+* Write raw bytes into the stream
+*/
DER_Encoder& DER_Encoder::raw_bytes(const MemoryRegion<byte>& val)
{
return raw_bytes(val.begin(), val.size());
}
-/*************************************************
-* Write raw bytes into the stream *
-*************************************************/
+/*
+* Write raw bytes into the stream
+*/
DER_Encoder& DER_Encoder::raw_bytes(const byte bytes[], u32bit length)
{
if(subsequences.size())
@@ -195,41 +197,41 @@ DER_Encoder& DER_Encoder::raw_bytes(const byte bytes[], u32bit length)
return (*this);
}
-/*************************************************
-* Encode a NULL object *
-*************************************************/
+/*
+* Encode a NULL object
+*/
DER_Encoder& DER_Encoder::encode_null()
{
return add_object(NULL_TAG, UNIVERSAL, 0, 0);
}
-/*************************************************
-* DER encode a BOOLEAN *
-*************************************************/
+/*
+* DER encode a BOOLEAN
+*/
DER_Encoder& DER_Encoder::encode(bool is_true)
{
return encode(is_true, BOOLEAN, UNIVERSAL);
}
-/*************************************************
-* DER encode a small INTEGER *
-*************************************************/
+/*
+* DER encode a small INTEGER
+*/
DER_Encoder& DER_Encoder::encode(u32bit n)
{
return encode(BigInt(n), INTEGER, UNIVERSAL);
}
-/*************************************************
-* DER encode a small INTEGER *
-*************************************************/
+/*
+* DER encode a small INTEGER
+*/
DER_Encoder& DER_Encoder::encode(const BigInt& n)
{
return encode(n, INTEGER, UNIVERSAL);
}
-/*************************************************
-* DER encode an OCTET STRING or BIT STRING *
-*************************************************/
+/*
+* DER encode an OCTET STRING or BIT STRING
+*/
DER_Encoder& DER_Encoder::encode(const MemoryRegion<byte>& bytes,
ASN1_Tag real_type)
{
@@ -237,18 +239,18 @@ DER_Encoder& DER_Encoder::encode(const MemoryRegion<byte>& bytes,
real_type, real_type, UNIVERSAL);
}
-/*************************************************
-* Encode this object *
-*************************************************/
+/*
+* Encode this object
+*/
DER_Encoder& DER_Encoder::encode(const byte bytes[], u32bit length,
ASN1_Tag real_type)
{
return encode(bytes, length, real_type, real_type, UNIVERSAL);
}
-/*************************************************
-* DER encode a BOOLEAN *
-*************************************************/
+/*
+* DER encode a BOOLEAN
+*/
DER_Encoder& DER_Encoder::encode(bool is_true,
ASN1_Tag type_tag, ASN1_Tag class_tag)
{
@@ -256,18 +258,18 @@ DER_Encoder& DER_Encoder::encode(bool is_true,
return add_object(type_tag, class_tag, &val, 1);
}
-/*************************************************
-* DER encode a small INTEGER *
-*************************************************/
+/*
+* DER encode a small INTEGER
+*/
DER_Encoder& DER_Encoder::encode(u32bit n,
ASN1_Tag type_tag, ASN1_Tag class_tag)
{
return encode(BigInt(n), type_tag, class_tag);
}
-/*************************************************
-* DER encode an INTEGER *
-*************************************************/
+/*
+* DER encode an INTEGER
+*/
DER_Encoder& DER_Encoder::encode(const BigInt& n,
ASN1_Tag type_tag, ASN1_Tag class_tag)
{
@@ -289,9 +291,9 @@ DER_Encoder& DER_Encoder::encode(const BigInt& n,
return add_object(type_tag, class_tag, contents);
}
-/*************************************************
-* DER encode an OCTET STRING or BIT STRING *
-*************************************************/
+/*
+* DER encode an OCTET STRING or BIT STRING
+*/
DER_Encoder& DER_Encoder::encode(const MemoryRegion<byte>& bytes,
ASN1_Tag real_type,
ASN1_Tag type_tag, ASN1_Tag class_tag)
@@ -300,9 +302,9 @@ DER_Encoder& DER_Encoder::encode(const MemoryRegion<byte>& bytes,
real_type, type_tag, class_tag);
}
-/*************************************************
-* DER encode an OCTET STRING or BIT STRING *
-*************************************************/
+/*
+* DER encode an OCTET STRING or BIT STRING
+*/
DER_Encoder& DER_Encoder::encode(const byte bytes[], u32bit length,
ASN1_Tag real_type,
ASN1_Tag type_tag, ASN1_Tag class_tag)
@@ -321,9 +323,9 @@ DER_Encoder& DER_Encoder::encode(const byte bytes[], u32bit length,
return add_object(type_tag, class_tag, bytes, length);
}
-/*************************************************
-* Conditionally write some values to the stream *
-*************************************************/
+/*
+* Conditionally write some values to the stream
+*/
DER_Encoder& DER_Encoder::encode_if(bool cond, DER_Encoder& codec)
{
if(cond)
@@ -331,18 +333,18 @@ DER_Encoder& DER_Encoder::encode_if(bool cond, DER_Encoder& codec)
return (*this);
}
-/*************************************************
-* Request for an object to encode itself *
-*************************************************/
+/*
+* Request for an object to encode itself
+*/
DER_Encoder& DER_Encoder::encode(const ASN1_Object& obj)
{
obj.encode_into(*this);
return (*this);
}
-/*************************************************
-* Write the encoding of the byte(s) *
-*************************************************/
+/*
+* Write the encoding of the byte(s)
+*/
DER_Encoder& DER_Encoder::add_object(ASN1_Tag type_tag, ASN1_Tag class_tag,
const byte rep[], u32bit length)
{
@@ -357,9 +359,9 @@ DER_Encoder& DER_Encoder::add_object(ASN1_Tag type_tag, ASN1_Tag class_tag,
return raw_bytes(buffer);
}
-/*************************************************
-* Write the encoding of the byte(s) *
-*************************************************/
+/*
+* Write the encoding of the byte(s)
+*/
DER_Encoder& DER_Encoder::add_object(ASN1_Tag type_tag, ASN1_Tag class_tag,
const MemoryRegion<byte>& rep_buf)
{
@@ -368,9 +370,9 @@ DER_Encoder& DER_Encoder::add_object(ASN1_Tag type_tag, ASN1_Tag class_tag,
return add_object(type_tag, class_tag, rep, rep_len);
}
-/*************************************************
-* Write the encoding of the byte(s) *
-*************************************************/
+/*
+* Write the encoding of the byte(s)
+*/
DER_Encoder& DER_Encoder::add_object(ASN1_Tag type_tag, ASN1_Tag class_tag,
const std::string& rep_str)
{
@@ -379,9 +381,9 @@ DER_Encoder& DER_Encoder::add_object(ASN1_Tag type_tag, ASN1_Tag class_tag,
return add_object(type_tag, class_tag, rep, rep_len);
}
-/*************************************************
-* Write the encoding of the byte *
-*************************************************/
+/*
+* Write the encoding of the byte
+*/
DER_Encoder& DER_Encoder::add_object(ASN1_Tag type_tag,
ASN1_Tag class_tag, byte rep)
{