Skip to content

Commit f2aeb70

Browse files
committed
[x509] Add issuer name DER data to certificate class to allow issuer name hash computation
1 parent 959edad commit f2aeb70

File tree

4 files changed

+19
-2
lines changed

4 files changed

+19
-2
lines changed

src/chargepoint/iso15118/Iso15118Manager.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -453,7 +453,7 @@ void Iso15118Manager::fillHashInfo(const ocpp::x509::Certificate& certificate, o
453453
// Compute hashes with SHA-256 algorithm
454454
Sha2 sha256;
455455
info.hashAlgorithm = HashAlgorithmEnumType::SHA256;
456-
sha256.compute(certificate.issuerString().c_str(), certificate.issuerString().size());
456+
sha256.compute(certificate.issuerDer().data(), certificate.issuerDer().size());
457457
info.issuerNameHash.assign(sha256.resultString());
458458
sha256.compute(&certificate.publicKey()[0], certificate.publicKey().size());
459459
info.issuerKeyHash.assign(sha256.resultString());

src/chargepoint/security/SecurityManager.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -774,7 +774,7 @@ void SecurityManager::fillHashInfo(const ocpp::x509::Certificate& certificate, o
774774
// Compute hashes with SHA-256 algorithm
775775
Sha2 sha256;
776776
info.hashAlgorithm = HashAlgorithmEnumType::SHA256;
777-
sha256.compute(certificate.issuerString().c_str(), certificate.issuerString().size());
777+
sha256.compute(certificate.issuerDer().data(), certificate.issuerDer().size());
778778
info.issuerNameHash.assign(sha256.resultString());
779779
sha256.compute(&certificate.publicKey()[0], certificate.publicKey().size());
780780
info.issuerKeyHash.assign(sha256.resultString());

src/tools/x509/Certificate.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ along with OpenOCPP. If not, see <http://www.gnu.org/licenses/>.
2222
#include "openssl.h"
2323
#include "sign.h"
2424

25+
#include <cstring>
2526
#include <ctime>
2627
#include <iomanip>
2728
#include <sstream>
@@ -360,6 +361,14 @@ void Certificate::readInfos(Certificate& certificate)
360361
X509_NAME* issuer = X509_get_issuer_name(cert);
361362
certificate.m_issuer_string = convertX509Name(issuer);
362363
parseSubjectString(issuer, certificate.m_issuer);
364+
const unsigned char* issuer_der = nullptr;
365+
size_t issuer_der_size = 0;
366+
X509_NAME_get0_der(issuer, &issuer_der, &issuer_der_size);
367+
if (issuer_der)
368+
{
369+
certificate.m_issuer_der.resize(issuer_der_size);
370+
memcpy(certificate.m_issuer_der.data(), issuer_der, issuer_der_size);
371+
}
363372
X509_NAME* subject = X509_get_subject_name(cert);
364373
certificate.m_subject_string = convertX509Name(subject);
365374
parseSubjectString(subject, certificate.m_subject);

src/tools/x509/Certificate.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,12 @@ class Certificate : public X509Document
167167
*/
168168
const std::string& issuerString() const { return m_issuer_string; }
169169

170+
/**
171+
* @brief Get the issuer raw data
172+
* @return Issuer raw data
173+
*/
174+
const std::vector<uint8_t>& issuerDer() const { return m_issuer_der; }
175+
170176
/**
171177
* @brief Get the issuer alternate names
172178
* @return Issuer alternate names
@@ -199,6 +205,8 @@ class Certificate : public X509Document
199205
Subject m_issuer;
200206
/** @brief Issuer string */
201207
std::string m_issuer_string;
208+
/** @brief Issuer raw data */
209+
std::vector<uint8_t> m_issuer_der;
202210
/** @brief Indicate if it is a self-signed certificate */
203211
bool m_is_self_signed;
204212

0 commit comments

Comments
 (0)