aboutsummaryrefslogtreecommitdiffstats
path: root/src/asn1/x509_dn.cpp
diff options
context:
space:
mode:
authorlloyd <[email protected]>2010-11-19 20:00:34 +0000
committerlloyd <[email protected]>2010-11-19 20:00:34 +0000
commitfda988f9f6f44d87c384a56dce590ca1121b5ab7 (patch)
treee8ef2c93dfe6c74cdf9cab63b26153b2af124493 /src/asn1/x509_dn.cpp
parentdb9f18deb5ba7c091b8389e1243a200eff135903 (diff)
Fix pr 127 and pr 128. Don't require the common name and country codes
in newly generated DNs, there are reasonable cases where you do not need or want either. Also fix the saving of dn_bits, and remove X509_DN::do_decode and inline it into its only caller (decode_from).
Diffstat (limited to 'src/asn1/x509_dn.cpp')
-rw-r--r--src/asn1/x509_dn.cpp60
1 files changed, 26 insertions, 34 deletions
diff --git a/src/asn1/x509_dn.cpp b/src/asn1/x509_dn.cpp
index 0a4760391..58bfc450d 100644
--- a/src/asn1/x509_dn.cpp
+++ b/src/asn1/x509_dn.cpp
@@ -113,35 +113,6 @@ std::vector<std::string> X509_DN::get_attribute(const std::string& attr) const
}
/*
-* Handle the decoding operation of a DN
-*/
-void X509_DN::do_decode(const MemoryRegion<byte>& bits)
- {
- BER_Decoder sequence(bits);
-
- while(sequence.more_items())
- {
- BER_Decoder rdn = sequence.start_cons(SET);
-
- while(rdn.more_items())
- {
- OID oid;
- ASN1_String str;
-
- rdn.start_cons(SEQUENCE)
- .decode(oid)
- .decode(str)
- .verify_end()
- .end_cons();
-
- add_attribute(oid, str.value());
- }
- }
-
- dn_bits = bits;
- }
-
-/*
* Return the BER encoded data, if any
*/
MemoryVector<byte> X509_DN::get_bits() const
@@ -275,12 +246,12 @@ void X509_DN::encode_into(DER_Encoder& der) const
der.raw_bytes(dn_bits);
else
{
- do_ava(der, dn_info, PRINTABLE_STRING, "X520.Country", true);
+ do_ava(der, dn_info, PRINTABLE_STRING, "X520.Country");
do_ava(der, dn_info, DIRECTORY_STRING, "X520.State");
do_ava(der, dn_info, DIRECTORY_STRING, "X520.Locality");
do_ava(der, dn_info, DIRECTORY_STRING, "X520.Organization");
do_ava(der, dn_info, DIRECTORY_STRING, "X520.OrganizationalUnit");
- do_ava(der, dn_info, DIRECTORY_STRING, "X520.CommonName", true);
+ do_ava(der, dn_info, DIRECTORY_STRING, "X520.CommonName");
do_ava(der, dn_info, PRINTABLE_STRING, "X520.SerialNumber");
}
@@ -292,13 +263,34 @@ void X509_DN::encode_into(DER_Encoder& der) const
*/
void X509_DN::decode_from(BER_Decoder& source)
{
- dn_info.clear();
+ MemoryVector<byte> bits;
source.start_cons(SEQUENCE)
- .raw_bytes(dn_bits)
+ .raw_bytes(bits)
.end_cons();
- do_decode(dn_bits);
+ BER_Decoder sequence(bits);
+
+ while(sequence.more_items())
+ {
+ BER_Decoder rdn = sequence.start_cons(SET);
+
+ while(rdn.more_items())
+ {
+ OID oid;
+ ASN1_String str;
+
+ rdn.start_cons(SEQUENCE)
+ .decode(oid)
+ .decode(str)
+ .verify_end()
+ .end_cons();
+
+ add_attribute(oid, str.value());
+ }
+ }
+
+ dn_info = bits;
}
}