mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-08-02 04:04:39 +02:00
add set subject name from cert file
This commit is contained in:
@@ -93,6 +93,7 @@ CYASSL_API int SignCert(Cert*, byte* derBuffer, word32 derSz, RsaKey*, RNG*);
|
|||||||
CYASSL_API int MakeSelfCert(Cert*, byte* derBuffer, word32 derSz, RsaKey*,
|
CYASSL_API int MakeSelfCert(Cert*, byte* derBuffer, word32 derSz, RsaKey*,
|
||||||
RNG*);
|
RNG*);
|
||||||
CYASSL_API int SetIssuer(Cert*, const char*);
|
CYASSL_API int SetIssuer(Cert*, const char*);
|
||||||
|
CYASSL_API int SetSubject(Cert*, const char*);
|
||||||
|
|
||||||
#ifdef HAVE_NTRU
|
#ifdef HAVE_NTRU
|
||||||
CYASSL_API int MakeNtruCert(Cert*, byte* derBuffer, word32 derSz,
|
CYASSL_API int MakeNtruCert(Cert*, byte* derBuffer, word32 derSz,
|
||||||
|
@@ -3045,18 +3045,17 @@ int CyaSSL_PemCertToDer(const char* fileName, unsigned char* derBuf, int derSz);
|
|||||||
|
|
||||||
#ifndef NO_FILESYSTEM
|
#ifndef NO_FILESYSTEM
|
||||||
|
|
||||||
int SetIssuer(Cert* cert, const char* issuerCertFile)
|
static int SetNameFromCert(CertName* cn, const char* fromCertFile)
|
||||||
{
|
{
|
||||||
DecodedCert decoded;
|
DecodedCert decoded;
|
||||||
byte der[8192];
|
byte der[8192];
|
||||||
int derSz = CyaSSL_PemCertToDer(issuerCertFile, der, sizeof(der));
|
int derSz = CyaSSL_PemCertToDer(fromCertFile, der, sizeof(der));
|
||||||
int ret;
|
int ret;
|
||||||
int sz;
|
int sz;
|
||||||
|
|
||||||
if (derSz < 0)
|
if (derSz < 0)
|
||||||
return derSz;
|
return derSz;
|
||||||
|
|
||||||
cert->selfSigned = 0;
|
|
||||||
|
|
||||||
InitDecodedCert(&decoded, der, derSz, 0);
|
InitDecodedCert(&decoded, der, derSz, 0);
|
||||||
ret = ParseCertRelative(&decoded, CA_TYPE, NO_VERIFY, 0);
|
ret = ParseCertRelative(&decoded, CA_TYPE, NO_VERIFY, 0);
|
||||||
@@ -3067,50 +3066,50 @@ int SetIssuer(Cert* cert, const char* issuerCertFile)
|
|||||||
if (decoded.subjectCN) {
|
if (decoded.subjectCN) {
|
||||||
sz = (decoded.subjectCNLen < CTC_NAME_SIZE) ? decoded.subjectCNLen :
|
sz = (decoded.subjectCNLen < CTC_NAME_SIZE) ? decoded.subjectCNLen :
|
||||||
CTC_NAME_SIZE - 1;
|
CTC_NAME_SIZE - 1;
|
||||||
strncpy(cert->issuer.commonName, decoded.subjectCN, CTC_NAME_SIZE);
|
strncpy(cn->commonName, decoded.subjectCN, CTC_NAME_SIZE);
|
||||||
cert->issuer.commonName[sz] = 0;
|
cn->commonName[sz] = 0;
|
||||||
}
|
}
|
||||||
if (decoded.subjectC) {
|
if (decoded.subjectC) {
|
||||||
sz = (decoded.subjectCLen < CTC_NAME_SIZE) ? decoded.subjectCLen :
|
sz = (decoded.subjectCLen < CTC_NAME_SIZE) ? decoded.subjectCLen :
|
||||||
CTC_NAME_SIZE - 1;
|
CTC_NAME_SIZE - 1;
|
||||||
strncpy(cert->issuer.country, decoded.subjectC, CTC_NAME_SIZE);
|
strncpy(cn->country, decoded.subjectC, CTC_NAME_SIZE);
|
||||||
cert->issuer.country[sz] = 0;
|
cn->country[sz] = 0;
|
||||||
}
|
}
|
||||||
if (decoded.subjectST) {
|
if (decoded.subjectST) {
|
||||||
sz = (decoded.subjectSTLen < CTC_NAME_SIZE) ? decoded.subjectSTLen :
|
sz = (decoded.subjectSTLen < CTC_NAME_SIZE) ? decoded.subjectSTLen :
|
||||||
CTC_NAME_SIZE - 1;
|
CTC_NAME_SIZE - 1;
|
||||||
strncpy(cert->issuer.state, decoded.subjectST, CTC_NAME_SIZE);
|
strncpy(cn->state, decoded.subjectST, CTC_NAME_SIZE);
|
||||||
cert->issuer.state[sz] = 0;
|
cn->state[sz] = 0;
|
||||||
}
|
}
|
||||||
if (decoded.subjectL) {
|
if (decoded.subjectL) {
|
||||||
sz = (decoded.subjectLLen < CTC_NAME_SIZE) ? decoded.subjectLLen :
|
sz = (decoded.subjectLLen < CTC_NAME_SIZE) ? decoded.subjectLLen :
|
||||||
CTC_NAME_SIZE - 1;
|
CTC_NAME_SIZE - 1;
|
||||||
strncpy(cert->issuer.locality, decoded.subjectL, CTC_NAME_SIZE);
|
strncpy(cn->locality, decoded.subjectL, CTC_NAME_SIZE);
|
||||||
cert->issuer.locality[sz] = 0;
|
cn->locality[sz] = 0;
|
||||||
}
|
}
|
||||||
if (decoded.subjectO) {
|
if (decoded.subjectO) {
|
||||||
sz = (decoded.subjectOLen < CTC_NAME_SIZE) ? decoded.subjectOLen :
|
sz = (decoded.subjectOLen < CTC_NAME_SIZE) ? decoded.subjectOLen :
|
||||||
CTC_NAME_SIZE - 1;
|
CTC_NAME_SIZE - 1;
|
||||||
strncpy(cert->issuer.org, decoded.subjectO, CTC_NAME_SIZE);
|
strncpy(cn->org, decoded.subjectO, CTC_NAME_SIZE);
|
||||||
cert->issuer.org[sz] = 0;
|
cn->org[sz] = 0;
|
||||||
}
|
}
|
||||||
if (decoded.subjectOU) {
|
if (decoded.subjectOU) {
|
||||||
sz = (decoded.subjectOULen < CTC_NAME_SIZE) ? decoded.subjectOULen :
|
sz = (decoded.subjectOULen < CTC_NAME_SIZE) ? decoded.subjectOULen :
|
||||||
CTC_NAME_SIZE - 1;
|
CTC_NAME_SIZE - 1;
|
||||||
strncpy(cert->issuer.unit, decoded.subjectOU, CTC_NAME_SIZE);
|
strncpy(cn->unit, decoded.subjectOU, CTC_NAME_SIZE);
|
||||||
cert->issuer.unit[sz] = 0;
|
cn->unit[sz] = 0;
|
||||||
}
|
}
|
||||||
if (decoded.subjectSN) {
|
if (decoded.subjectSN) {
|
||||||
sz = (decoded.subjectSNLen < CTC_NAME_SIZE) ? decoded.subjectSNLen :
|
sz = (decoded.subjectSNLen < CTC_NAME_SIZE) ? decoded.subjectSNLen :
|
||||||
CTC_NAME_SIZE - 1;
|
CTC_NAME_SIZE - 1;
|
||||||
strncpy(cert->issuer.sur, decoded.subjectSN, CTC_NAME_SIZE);
|
strncpy(cn->sur, decoded.subjectSN, CTC_NAME_SIZE);
|
||||||
cert->issuer.sur[sz] = 0;
|
cn->sur[sz] = 0;
|
||||||
}
|
}
|
||||||
if (decoded.subjectEmail) {
|
if (decoded.subjectEmail) {
|
||||||
sz = (decoded.subjectEmailLen < CTC_NAME_SIZE) ?
|
sz = (decoded.subjectEmailLen < CTC_NAME_SIZE) ?
|
||||||
decoded.subjectEmailLen : CTC_NAME_SIZE - 1;
|
decoded.subjectEmailLen : CTC_NAME_SIZE - 1;
|
||||||
strncpy(cert->issuer.email, decoded.subjectEmail, CTC_NAME_SIZE);
|
strncpy(cn->email, decoded.subjectEmail, CTC_NAME_SIZE);
|
||||||
cert->issuer.email[sz] = 0;
|
cn->email[sz] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
FreeDecodedCert(&decoded);
|
FreeDecodedCert(&decoded);
|
||||||
@@ -3118,6 +3117,20 @@ int SetIssuer(Cert* cert, const char* issuerCertFile)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int SetIssuer(Cert* cert, const char* issuerFile)
|
||||||
|
{
|
||||||
|
cert->selfSigned = 0;
|
||||||
|
return SetNameFromCert(&cert->issuer, issuerFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int SetSubject(Cert* cert, const char* subjectFile)
|
||||||
|
{
|
||||||
|
return SetNameFromCert(&cert->subject, subjectFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif /* NO_FILESYSTEM */
|
#endif /* NO_FILESYSTEM */
|
||||||
#endif /* CYASSL_CERT_GEN */
|
#endif /* CYASSL_CERT_GEN */
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user