X-Git-Url: http://plrg.eecs.uci.edu/git/?p=folly.git;a=blobdiff_plain;f=folly%2Fssl%2FOpenSSLCertUtils.cpp;h=ac7cd7414f2159e68be9ce587e0624080cd9aa2e;hp=d45daa6d2aef34e5b2638df47883f3249baa1fe5;hb=192d78d40551ec5d9aade5ca72dd6e33ad700a2b;hpb=ba690cad3c4138fce4e55b319237bb9e01ca030f diff --git a/folly/ssl/OpenSSLCertUtils.cpp b/folly/ssl/OpenSSLCertUtils.cpp index d45daa6d..ac7cd741 100644 --- a/folly/ssl/OpenSSLCertUtils.cpp +++ b/folly/ssl/OpenSSLCertUtils.cpp @@ -196,5 +196,50 @@ std::unique_ptr OpenSSLCertUtils::derEncode(X509& x509) { buf->append(len); return buf; } -} // ssl -} // folly + +std::vector OpenSSLCertUtils::readCertsFromBuffer( + ByteRange range) { + BioUniquePtr b( + BIO_new_mem_buf(const_cast(range.data()), range.size())); + if (!b) { + throw std::runtime_error("failed to create BIO"); + } + std::vector certs; + while (true) { + X509UniquePtr x509(PEM_read_bio_X509(b.get(), nullptr, nullptr, nullptr)); + if (!x509) { + break; + } + certs.push_back(std::move(x509)); + } + + return certs; +} + +std::array OpenSSLCertUtils::getDigestSha1( + X509& x509) { + unsigned int len; + std::array md; + int rc = X509_digest(&x509, EVP_sha1(), md.data(), &len); + + if (rc <= 0) { + throw std::runtime_error("Could not calculate SHA1 digest for cert"); + } + return md; +} + +std::array OpenSSLCertUtils::getDigestSha256( + X509& x509) { + unsigned int len; + std::array md; + int rc = X509_digest(&x509, EVP_sha256(), md.data(), &len); + + if (rc <= 0) { + throw std::runtime_error("Could not calculate SHA256 digest for cert"); + } + return md; +} + + +} // namespace ssl +} // namespace folly