25#include <rtl/ustring.hxx>
26#include <com/sun/star/security/ExtAltNameType.hpp>
27#include <com/sun/star/security/CertAltNameEntry.hpp>
28#include <com/sun/star/beans/NamedValue.hpp>
38using ::com::sun::star::security::XCertificateExtension ;
70 CryptDecodeObjectEx(X509_ASN_ENCODING, X509_ALTERNATE_NAME,
reinterpret_cast<unsigned char*
>(
m_xExtnValue.getArray()),
m_xExtnValue.getLength(), CRYPT_DECODE_ALLOC_FLAG | CRYPT_DECODE_NOCOPY_FLAG,
nullptr,&
subjectName, &
size);
72 auto arrCertAltNameEntry = std::make_unique<CertAltNameEntry[]>(
subjectName->cAltEntry);
74 for (
unsigned int i = 0; i < static_cast<unsigned int>(
subjectName->cAltEntry);
i++){
75 PCERT_ALT_NAME_ENTRY pEntry = &
subjectName->rgAltEntry[
i];
77 switch(pEntry->dwAltNameChoice) {
78 case CERT_ALT_NAME_OTHER_NAME :
80 arrCertAltNameEntry[
i].Type = ExtAltNameType_OTHER_NAME;
81 PCERT_OTHER_NAME pOtherName = pEntry->pOtherName;
83 css::beans::NamedValue otherNameProp;
84 otherNameProp.Name = OUString::createFromAscii(pOtherName->pszObjId);
87 pOtherName->Value.pbData, pOtherName->Value.cbData) );
88 otherNameProp.Value <<= otherName;
90 arrCertAltNameEntry[
i].Value <<= otherNameProp;
93 case CERT_ALT_NAME_RFC822_NAME :
94 arrCertAltNameEntry[
i].Type = ExtAltNameType_RFC822_NAME;
95 arrCertAltNameEntry[
i].Value <<= OUString(o3tl::toU(pEntry->pwszRfc822Name));
97 case CERT_ALT_NAME_DNS_NAME :
98 arrCertAltNameEntry[
i].Type = ExtAltNameType_DNS_NAME;
99 arrCertAltNameEntry[
i].Value <<= OUString(o3tl::toU(pEntry->pwszDNSName));
101 case CERT_ALT_NAME_DIRECTORY_NAME :
103 arrCertAltNameEntry[
i].Type = ExtAltNameType_DIRECTORY_NAME;
106 case CERT_ALT_NAME_URL :
107 arrCertAltNameEntry[
i].Type = ExtAltNameType_URL;
108 arrCertAltNameEntry[
i].Value <<= OUString(o3tl::toU(pEntry->pwszURL));
110 case CERT_ALT_NAME_IP_ADDRESS :
112 arrCertAltNameEntry[
i].Type = ExtAltNameType_IP_ADDRESS;
115 pEntry->IPAddress.pbData, pEntry->IPAddress.cbData) );
116 arrCertAltNameEntry[
i].Value <<= ipAddress;
119 case CERT_ALT_NAME_REGISTERED_ID :
120 arrCertAltNameEntry[
i].Type = ExtAltNameType_REGISTERED_ID;
121 arrCertAltNameEntry[
i].Value <<= OUString::createFromAscii(pEntry->pszRegisteredID);
125 m_Entries = ::comphelper::arrayToSequence< css::security::CertAltNameEntry >(arrCertAltNameEntry.get(),
subjectName->cAltEntry);
virtual css::uno::Sequence< sal_Int8 > SAL_CALL getExtensionId() override
virtual ~SanExtensionImpl() override
css::uno::Sequence< sal_Int8 > m_xExtnValue
virtual sal_Bool SAL_CALL isCritical() override
virtual css::uno::Sequence< css::security::CertAltNameEntry > SAL_CALL getAlternativeNames() override
css::uno::Sequence< sal_Int8 > m_xExtnId
virtual css::uno::Sequence< sal_Int8 > SAL_CALL getExtensionValue() override
css::uno::Sequence< css::security::CertAltNameEntry > m_Entries