Test for distinguished encoding rules. Validates some pre-generated certificates.
#include <gtest/gtest.h>
#include <string>
#include <fstream>
#include <memory>
#include <sstream>
#include <cstdlib>
using std::cout;
using std::endl;
using std::string;
using std::ifstream;
using std::shared_ptr;
using std::stringstream;
struct DerCertTest : public testing::Test
{
string reldir;
DerCertTest()
{
auto sd = getenv("TEST_SRCDIR");
auto wd = getenv("TEST_WORKSPACE");
if (sd)
{
dir << sd <<
"/" << wd <<
"/crypto/unittest/openssl/";
}
else
{
}
}
static shared_ptr<PemDocument> pem_doc()
{
shared_ptr<PemDocument> ret(new PemDocument);
return ret;
}
static shared_ptr<DerDocument> der_doc()
{
shared_ptr<DerDocument> ret(new DerDocument);
return ret;
}
void parse(shared_ptr<PemDocument> doc,
const string&
name)
{
string infile = reldir+
name;
cout << "opening " << infile << endl;
ifstream f(infile);
ASSERT_TRUE(f.is_open());
ASSERT_NO_THROW(doc->parse(f));
cout << "***** PEM " << infile << " label=" << doc->label() << " chars=" << doc->chars_per_line() << ":" << endl;
cout << *doc << endl;
}
void parse(shared_ptr<DerDocument> doc,
const string&
name)
{
string infile = reldir+
name;
cout << "opening " << infile << endl;
ifstream f(infile);
ASSERT_TRUE(f.is_open());
ASSERT_NO_THROW(doc->parse(f));
cout << "***** DER " << infile << ":" << endl;
cout << *doc << endl;
}
};
TEST_F(DerCertTest, rsapriv)
{
auto pem = pem_doc();
parse(pem, "rsapriv.pem");
auto der = der_doc();
parse(der, "rsapriv.crt");
ASSERT_TRUE(pem->equal(*der));
}
TEST_F(DerCertTest, rsapub)
{
auto pem = pem_doc();
parse(pem, "rsapub.pem");
auto der = der_doc();
parse(der, "rsapub.crt");
ASSERT_TRUE(pem->equal(*der));
}
TEST_F(DerCertTest, rsacert)
{
auto pem = pem_doc();
parse(pem, "rsacert.pem");
auto der = der_doc();
parse(der, "rsacert.crt");
ASSERT_TRUE(pem->equal(*der));
}
TEST_F(DerCertTest, ecpriv)
{
auto pem = pem_doc();
parse(pem, "ecpriv.pem");
}
TEST_F(DerCertTest, ecpub)
{
auto pem = pem_doc();
parse(pem, "ecpub.pem");
}
TEST_F(DerCertTest, eccert)
{
auto pem = pem_doc();
parse(pem, "eccert.pem");
}
TEST_F(DerCertTest, rsacert_dumptest)
{
auto pem = pem_doc();
parse(pem, "rsacert.pem");
stringstream outs;
pem->dump(outs);
cout << "**** NEW CERT:" << endl;
cout << outs.str() << endl;
auto newpem = pem_doc();
ASSERT_NO_THROW(newpem->parse(outs));
ASSERT_EQ(pem->chars_per_line(), newpem->chars_per_line());
ASSERT_EQ(pem->label(), newpem->label());
ASSERT_TRUE(pem->equal(*newpem));
}
PEM formatted DER document.
Distinguished encoding rules (DER).