|
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;
}
1.7.6.1