Botan
1.11.15
|
Functions | |
secure_vector< byte > | decode (DataSource &source, std::string &label) |
secure_vector< byte > | decode (const std::string &pem, std::string &label) |
secure_vector< byte > | decode_check_label (DataSource &source, const std::string &label_want) |
secure_vector< byte > | decode_check_label (const std::string &pem, const std::string &label_want) |
std::string | encode (const byte der[], size_t length, const std::string &label, size_t width) |
std::string | encode (const std::vector< byte > &data, const std::string &label, size_t line_width=64) |
std::string | encode (const secure_vector< byte > &data, const std::string &label, size_t line_width=64) |
bool | matches (DataSource &source, const std::string &extra, size_t search_range) |
BOTAN_DLL secure_vector< byte > Botan::PEM_Code::decode | ( | DataSource & | pem, |
std::string & | label | ||
) |
Decode PEM data
pem | a datasource containing PEM encoded data |
label | is set to the PEM label found for later inspection |
Definition at line 47 of file pem.cpp.
References Botan::Pipe::end_msg(), Botan::Pipe::read_all(), Botan::DataSource::read_byte(), Botan::Pipe::start_msg(), and Botan::Pipe::write().
Referenced by decode(), decode_check_label(), and Botan::DL_Group::PEM_decode().
{ const size_t RANDOM_CHAR_LIMIT = 8; const std::string PEM_HEADER1 = "-----BEGIN "; const std::string PEM_HEADER2 = "-----"; size_t position = 0; while(position != PEM_HEADER1.length()) { byte b; if(!source.read_byte(b)) throw Decoding_Error("PEM: No PEM header found"); if(b == PEM_HEADER1[position]) ++position; else if(position >= RANDOM_CHAR_LIMIT) throw Decoding_Error("PEM: Malformed PEM header"); else position = 0; } position = 0; while(position != PEM_HEADER2.length()) { byte b; if(!source.read_byte(b)) throw Decoding_Error("PEM: No PEM header found"); if(b == PEM_HEADER2[position]) ++position; else if(position) throw Decoding_Error("PEM: Malformed PEM header"); if(position == 0) label += static_cast<char>(b); } Pipe base64(new Base64_Decoder); base64.start_msg(); const std::string PEM_TRAILER = "-----END " + label + "-----"; position = 0; while(position != PEM_TRAILER.length()) { byte b; if(!source.read_byte(b)) throw Decoding_Error("PEM: No PEM trailer found"); if(b == PEM_TRAILER[position]) ++position; else if(position) throw Decoding_Error("PEM: Malformed PEM trailer"); if(position == 0) base64.write(b); } base64.end_msg(); return base64.read_all(); }
BOTAN_DLL secure_vector< byte > Botan::PEM_Code::decode | ( | const std::string & | pem, |
std::string & | label | ||
) |
BOTAN_DLL secure_vector< byte > Botan::PEM_Code::decode_check_label | ( | DataSource & | pem, |
const std::string & | label | ||
) |
Decode PEM data
pem | a datasource containing PEM encoded data |
label | is what we expect the label to be |
Definition at line 33 of file pem.cpp.
References decode().
Referenced by decode_check_label(), Botan::CryptoBox::decrypt(), Botan::EC_Group::EC_Group(), Botan::X509::load_key(), Botan::PKCS10_Request::raw_public_key(), and Botan::TLS::Session::Session().
{ std::string label_got; secure_vector<byte> ber = decode(source, label_got); if(label_got != label_want) throw Decoding_Error("PEM: Label mismatch, wanted " + label_want + ", got " + label_got); return ber; }
BOTAN_DLL secure_vector< byte > Botan::PEM_Code::decode_check_label | ( | const std::string & | pem, |
const std::string & | label | ||
) |
Decode PEM data
pem | a string containing PEM encoded data |
label | is what we expect the label to be |
Definition at line 104 of file pem.cpp.
References decode_check_label().
{ DataSource_Memory src(pem); return decode_check_label(src, label_want); }
BOTAN_DLL std::string Botan::PEM_Code::encode | ( | const byte | data[], |
size_t | data_len, | ||
const std::string & | label, | ||
size_t | line_width = 64 |
||
) |
Encode some binary data in PEM format
Definition at line 19 of file pem.cpp.
References Botan::Pipe::process_msg(), and Botan::Pipe::read_all_as_string().
Referenced by Botan::X509::BER_encode(), Botan::PKCS8::BER_encode(), Botan::X509::create_cert_req(), Botan::CRL_Entry::decode_from(), encode(), Botan::DER_Encoder::encode_list(), Botan::DER_Encoder::encode_optional(), Botan::CryptoBox::encrypt(), Botan::X942_PRF::kdf(), Botan::X509_CA::make_cert(), Botan::X509::PEM_encode(), Botan::DL_Group::PEM_encode(), Botan::EC_Group::PEM_encode(), Botan::X509_Object::PEM_encode(), Botan::TLS::Session::PEM_encode(), Botan::PKCS8::PEM_encode(), Botan::McEliece_PrivateKey::pkcs8_private_key(), and Botan::McEliece_PublicKey::x509_subject_public_key().
{ const std::string PEM_HEADER = "-----BEGIN " + label + "-----\n"; const std::string PEM_TRAILER = "-----END " + label + "-----\n"; Pipe pipe(new Base64_Encoder(true, width)); pipe.process_msg(der, length); return (PEM_HEADER + pipe.read_all_as_string() + PEM_TRAILER); }
std::string Botan::PEM_Code::encode | ( | const std::vector< byte > & | data, |
const std::string & | label, | ||
size_t | line_width = 64 |
||
) | [inline] |
std::string Botan::PEM_Code::encode | ( | const secure_vector< byte > & | data, |
const std::string & | label, | ||
size_t | line_width = 64 |
||
) | [inline] |
BOTAN_DLL bool Botan::PEM_Code::matches | ( | DataSource & | source, |
const std::string & | extra = "" , |
||
size_t | search_range = 4096 |
||
) |
Heuristic test for PEM data.
Definition at line 120 of file pem.cpp.
References Botan::DataSource::peek().
Referenced by Botan::X509::load_key().
{ const std::string PEM_HEADER = "-----BEGIN " + extra; secure_vector<byte> search_buf(search_range); size_t got = source.peek(&search_buf[0], search_buf.size(), 0); if(got < PEM_HEADER.length()) return false; size_t index = 0; for(size_t j = 0; j != got; ++j) { if(search_buf[j] == PEM_HEADER[index]) ++index; else index = 0; if(index == PEM_HEADER.size()) return true; } return false; }