/* * Decode a BER encoded CRL_Entry */ void CRL_Entry::decode_from(BER_Decoder& source) { BigInt serial_number_bn; std::unique_ptr<CRL_Entry_Data> data(new CRL_Entry_Data); BER_Decoder entry = source.start_cons(SEQUENCE); entry.decode(serial_number_bn).decode(data->m_time); data->m_serial = BigInt::encode(serial_number_bn); if(entry.more_items()) { entry.decode(data->m_extensions); if(auto ext = data->m_extensions.get_extension_object_as<Cert_Extension::CRL_ReasonCode>()) { data->m_reason = ext->get_reason(); } else { data->m_reason = UNSPECIFIED; } } entry.end_cons(); m_data.reset(data.release()); }
/* * Decode a BER encoded CRL_Entry */ void CRL_Entry::decode_from(BER_Decoder& source) { BigInt serial_number_bn; reason = UNSPECIFIED; BER_Decoder entry = source.start_cons(SEQUENCE); entry.decode(serial_number_bn).decode(time); if(entry.more_items()) { Extensions extensions(throw_on_unknown_critical); entry.decode(extensions); Data_Store info; extensions.contents_to(info, info); reason = CRL_Code(info.get1_u32bit("X509v3.CRLReasonCode")); } entry.end_cons(); serial = BigInt::encode(serial_number_bn); }