25#if !defined WIN32_LEAN_AND_MEAN
26# define WIN32_LEAN_AND_MEAN
31#include <osl/thread.h>
36#include <com/sun/star/lang/XMultiServiceFactory.hpp>
37#include <com/sun/star/uno/XComponentContext.hpp>
47#include <rtl/locale.h>
49#include <osl/nlsupport.h>
50#include <osl/process.h>
57using ::com::sun::star::xml::crypto::XSecurityEnvironment ;
58using ::com::sun::star::security::XCertificate ;
64struct CertErrorToString{
73 { 0x00000000,
"CERT_TRUST_NO_ERROR"},
74 { 0x00000001,
"CERT_TRUST_IS_NOT_TIME_VALID"},
75 { 0x00000002,
"CERT_TRUST_IS_NOT_TIME_NESTED"},
76 { 0x00000004,
"CERT_TRUST_IS_REVOKED" },
77 { 0x00000008,
"CERT_TRUST_IS_NOT_SIGNATURE_VALID" },
78 { 0x00000010,
"CERT_TRUST_IS_NOT_SIGNATURE_VALID"},
79 { 0x00000020,
"CERT_TRUST_IS_UNTRUSTED_ROOT"},
80 { 0x00000040,
"CERT_TRUST_REVOCATION_STATUS_UNKNOWN"},
81 { 0x00000080,
"CERT_TRUST_IS_CYCLIC"},
82 { 0x00000100,
"CERT_TRUST_INVALID_EXTENSION"},
83 { 0x00000200,
"CERT_TRUST_INVALID_POLICY_CONSTRAINTS"},
84 { 0x00000400,
"CERT_TRUST_INVALID_BASIC_CONSTRAINTS"},
85 { 0x00000800,
"CERT_TRUST_INVALID_NAME_CONSTRAINTS"},
86 { 0x00001000,
"CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT"},
87 { 0x00002000,
"CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT"},
88 { 0x00004000,
"CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT"},
89 { 0x00008000,
"CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT"},
90 { 0x01000000,
"CERT_TRUST_IS_OFFLINE_REVOCATION"},
91 { 0x02000000,
"CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY"},
92 { 0x04000000,
"CERT_TRUST_IS_EXPLICIT_DISTRUST"},
93 { 0x08000000,
"CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT"},
95 { 0x00010000,
"CERT_TRUST_IS_PARTIAL_CHAIN"},
96 { 0x00020000,
"CERT_TRUST_CTL_IS_NOT_TIME_VALID"},
97 { 0x00040000,
"CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID"},
98 { 0x00080000,
"CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE"}
107 if (arErrStringIter.error &
err)
108 SAL_INFO(
"xmlsecurity.xmlsec",
" " << arErrStringIter.name);
112SecurityEnvironment_MSCryptImpl::SecurityEnvironment_MSCryptImpl(
const uno::Reference< uno::XComponentContext >& xContext ) : m_hProv( 0 ) , m_pszContainer( nullptr ) , m_hKeyStore( nullptr ), m_hCertStore( nullptr ), m_hMySystemStore(nullptr), m_hRootSystemStore(nullptr), m_hTrustSystemStore(nullptr), m_hCaSystemStore(nullptr), m_bEnableDefault( false ){
120 CryptReleaseContext(
m_hProv, 0 ) ;
130 CertCloseStore(
m_hCertStore, CERT_CLOSE_STORE_FORCE_FLAG ) ;
135 CertCloseStore(
m_hKeyStore, CERT_CLOSE_STORE_FORCE_FLAG ) ;
163 return "com.sun.star.xml.crypto.SecurityEnvironment";
172 return {
"com.sun.star.xml.crypto.SecurityEnvironment" };
181 CryptReleaseContext(
m_hProv, 0 ) ;
206 CertCloseStore(
m_hKeyStore, CERT_CLOSE_STORE_FORCE_FLAG ) ;
210 if( aSlot !=
nullptr ) {
221 CertCloseStore(
m_hCertStore, CERT_CLOSE_STORE_FORCE_FLAG ) ;
225 if( aCertDb !=
nullptr ) {
234static OUString get_system_name(
const void *pvSystemStore,
237 LPCWSTR ppwszSystemName;
238 if (dwFlags & CERT_SYSTEM_STORE_RELOCATE_FLAG)
240 _CERT_SYSTEM_STORE_RELOCATE_PARA
const * pRelocatePara;
241 pRelocatePara =
static_cast<_CERT_SYSTEM_STORE_RELOCATE_PARA
const *
>(pvSystemStore);
242 ppwszSystemName = pRelocatePara->pwszSystemStore;
246 ppwszSystemName =
static_cast<LPCWSTR
>(pvSystemStore);
248 return OUString(o3tl::toU(ppwszSystemName));
253static BOOL WINAPI cert_enum_physical_store_callback(
const void *,
255 LPCWSTR pwszStoreName,
256 PCERT_PHYSICAL_STORE_INFO,
260 OUString
name(o3tl::toU(pwszStoreName));
261 if (dwFlags & CERT_PHYSICAL_STORE_PREDEFINED_ENUM_FLAG)
262 name +=
" (implicitly created)";
263 SAL_INFO(
"xmlsecurity.xmlsec",
" Physical store: " << name);
268static BOOL WINAPI cert_enum_system_store_callback(
const void *pvSystemStore,
270 PCERT_SYSTEM_STORE_INFO,
274 SAL_INFO(
"xmlsecurity.xmlsec",
"System store: " << get_system_name(pvSystemStore, dwFlags));
276 if (!CertEnumPhysicalStore(pvSystemStore,
279 cert_enum_physical_store_callback))
281 DWORD dwErr = GetLastError();
282 if (!(ERROR_FILE_NOT_FOUND == dwErr ||
283 ERROR_NOT_SUPPORTED == dwErr))
285 SAL_WARN(
"xmlsecurity.xmlsec",
"CertEnumPhysicalStore failed:" << WindowsErrorString(GetLastError()));
300 std::vector< rtl::Reference<X509Certificate_MSCryptImpl> > certsList ;
301 PCCERT_CONTEXT pCertContext =
nullptr;
305 pCertContext = CertEnumCertificatesInStore(
m_hKeyStore, pCertContext );
310 certsList.push_back( xcert ) ;
311 pCertContext = CertEnumCertificatesInStore(
m_hKeyStore, pCertContext );
317 HCERTSTORE hSystemKeyStore ;
319 NCRYPT_KEY_HANDLE hCryptKey;
322 CertEnumSystemStore(CERT_SYSTEM_STORE_CURRENT_USER,
nullptr,
nullptr, cert_enum_system_store_callback);
325 hSystemKeyStore = CertOpenSystemStoreW( 0, L
"MY" ) ;
326 if( hSystemKeyStore !=
nullptr ) {
327 pCertContext = CertEnumCertificatesInStore( hSystemKeyStore, pCertContext );
331 DWORD dwFlags = CRYPT_ACQUIRE_COMPARE_KEY_FLAG | CRYPT_ACQUIRE_ONLY_NCRYPT_KEY_FLAG;
332 HCRYPTPROV_OR_NCRYPT_KEY_HANDLE* phCryptProvOrNCryptKey = &hCryptKey;
333 if(!(CryptAcquireCertificatePrivateKey(pCertContext,
336 phCryptProvOrNCryptKey,
341 pCertContext = CertEnumCertificatesInStore( hSystemKeyStore, pCertContext );
348 certsList.push_back( xcert ) ;
349 pCertContext = CertEnumCertificatesInStore( hSystemKeyStore, pCertContext );
353 CertCloseStore( hSystemKeyStore, CERT_CLOSE_STORE_CHECK_FLAG ) ;
356 length = certsList.size() ;
359 uno::Sequence< uno::Reference< XCertificate > > certSeq(
length ) ;
360 auto pcertSeq = certSeq.getArray();
362 for(
const auto& rXCert : certsList ) {
363 pcertSeq[
i] = rXCert ;
370 return uno::Sequence< uno::Reference< XCertificate > >() ;
377 PCCERT_CONTEXT pCertContext = nullptr ;
378 HCERTSTORE hCertStore = nullptr ;
379 CRYPT_INTEGER_BLOB cryptSerialNumber ;
383 rtl_Locale *
pLocale = nullptr ;
384 osl_getProcessLocale( &pLocale ) ;
387 LPCWSTR pszName = o3tl::toW( issuerName.getStr() );
389 if( ! ( CertStrToNameW(
390 X509_ASN_ENCODING | PKCS_7_ASN_ENCODING ,
392 CERT_X500_NAME_STR | CERT_NAME_STR_REVERSE_FLAG | CERT_NAME_STR_ENABLE_UTF8_UNICODE_FLAG,
395 &certInfo.Issuer.cbData,
nullptr ) )
400 certInfo.Issuer.pbData =
static_cast<BYTE*
>(malloc( certInfo.Issuer.cbData ));
401 if(!certInfo.Issuer.pbData)
402 throw uno::RuntimeException() ;
404 if( ! ( CertStrToNameW(
405 X509_ASN_ENCODING | PKCS_7_ASN_ENCODING ,
407 CERT_X500_NAME_STR | CERT_NAME_STR_REVERSE_FLAG | CERT_NAME_STR_ENABLE_UTF8_UNICODE_FLAG,
409 certInfo.Issuer.pbData ,
410 &certInfo.Issuer.cbData,
nullptr ) )
412 free( certInfo.Issuer.pbData ) ;
417 cryptSerialNumber.cbData = serialNumber.getLength() ;
418 cryptSerialNumber.pbData =
static_cast<BYTE*
>(malloc( cryptSerialNumber.cbData));
419 if (!cryptSerialNumber.pbData)
421 free( certInfo.Issuer.pbData ) ;
422 throw uno::RuntimeException() ;
424 for( i = 0;
i < cryptSerialNumber.cbData;
i ++ )
425 cryptSerialNumber.pbData[i] = serialNumber[ cryptSerialNumber.cbData - i - 1 ] ;
427 certInfo.SerialNumber.cbData = cryptSerialNumber.cbData ;
428 certInfo.SerialNumber.pbData = cryptSerialNumber.pbData ;
431 for( i = 0 ; i < 6 ; i ++ )
444 hCertStore = CertOpenSystemStoreW( 0, L
"MY" ) ;
448 hCertStore = CertOpenSystemStoreW( 0, L
"Root" ) ;
452 hCertStore = CertOpenSystemStoreW( 0, L
"Trust" ) ;
456 hCertStore = CertOpenSystemStoreW( 0, L
"CA" ) ;
540 pCertContext = CertFindCertificateInStore(
542 X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
544 CERT_FIND_SUBJECT_CERT,
549 if(i != 0 && i != 1) CertCloseStore( hCertStore, CERT_CLOSE_STORE_CHECK_FLAG ) ;
550 if( pCertContext !=
nullptr ) break ;
554 free(cryptSerialNumber.pbData);
555 free(certInfo.Issuer.pbData);
557 if( pCertContext !=
nullptr ) {
559 CertFreeCertificateContext(pCertContext);
571 PCCERT_CHAIN_CONTEXT pChainContext ;
572 PCCERT_CONTEXT pCertContext ;
574 CERT_ENHKEY_USAGE enhKeyUsage ;
575 CERT_USAGE_MATCH certUsage ;
576 CERT_CHAIN_PARA chainPara ;
578 enhKeyUsage.cUsageIdentifier = 0 ;
579 enhKeyUsage.rgpszUsageIdentifier = nullptr ;
580 certUsage.dwType = USAGE_MATCH_TYPE_AND ;
581 certUsage.Usage = enhKeyUsage ;
582 chainPara.cbSize =
sizeof( CERT_CHAIN_PARA ) ;
583 chainPara.RequestedUsage = certUsage ;
586 if( xcert ==
nullptr ) {
587 throw uno::RuntimeException() ;
590 pCertContext = xcert->getMswcryCert() ;
592 pChainContext = nullptr ;
595 if( pCertContext !=
nullptr )
597 HCERTSTORE hAdditionalStore =
nullptr;
598 HCERTSTORE hCollectionStore =
nullptr;
602 hCollectionStore = CertOpenStore(
603 CERT_STORE_PROV_COLLECTION ,
609 if (hCollectionStore !=
nullptr)
611 CertAddStoreToCollection (
614 CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG ,
616 CertAddStoreToCollection (
619 CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG ,
621 hAdditionalStore = hCollectionStore;
629 else if (hAdditionalStore ==
nullptr &&
m_hKeyStore)
632 hAdditionalStore =
nullptr;
635 bChain = CertGetCertificateChain(
641 CERT_CHAIN_REVOCATION_CHECK_CHAIN | CERT_CHAIN_TIMESTAMP_TIME ,
645 pChainContext =
nullptr;
648 CertCloseStore(hCollectionStore, CERT_CLOSE_STORE_CHECK_FLAG);
651 if(bChain && pChainContext !=
nullptr && pChainContext->cChain > 0 )
653 PCCERT_CONTEXT pCertInChain ;
654 PCERT_SIMPLE_CHAIN pCertChain ;
657 pCertChain = pChainContext->rgpChain[0] ;
658 if( pCertChain->cElement ) {
659 uno::Sequence< uno::Reference< XCertificate > > xCertChain( pCertChain->cElement ) ;
660 auto pxCertChain = xCertChain.getArray();
662 for(
unsigned int i = 0 ;
i < pCertChain->cElement ;
i ++ ) {
663 if( pCertChain->rgpElement[
i] )
664 pCertInChain = pCertChain->rgpElement[
i]->pCertContext ;
666 pCertInChain = nullptr ;
668 if( pCertInChain !=
nullptr ) {
671 pxCertChain[
i] = pCert ;
675 CertFreeCertificateChain( pChainContext ) ;
676 pChainContext = nullptr ;
682 CertFreeCertificateChain(pChainContext);
684 return uno::Sequence< uno::Reference < XCertificate > >();
690 if( rawCertificate.getLength() > 0 ) {
692 xcert->setRawCert( rawCertificate ) ;
700 OString oscert =
OUStringToOString( asciiCertificate , RTL_TEXTENCODING_ASCII_US ) ;
701 xmlChar* chCert = xmlStrndup(
reinterpret_cast<const xmlChar*
>(oscert.getStr()),
static_cast<int>(oscert.getLength()) ) ;
703 int nRet = xmlSecBase64Decode_ex( chCert,
reinterpret_cast<xmlSecByte*
>(chCert), xmlStrlen( chCert ), &certSize ) ;
704 if (nRet < 0 || certSize == 0)
710 uno::Sequence<sal_Int8> rawCert(comphelper::arrayToSequence<sal_Int8>(chCert, certSize));
718 const uno::Sequence< uno::Reference< css::security::XCertificate > >& seqCerts)
720 HCERTSTORE
store = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, 0, 0,
nullptr);
721 if (
store ==
nullptr)
724 for (
int i = 0;
i < seqCerts.getLength();
i++)
726 SAL_INFO(
"xmlsecurity.xmlsec",
"Added temporary certificate: " << seqCerts[
i]->getSubjectName());
728 uno::Sequence<sal_Int8> data = seqCerts[
i]->getEncoded();
729 PCCERT_CONTEXT cert = CertCreateCertificateContext(
730 X509_ASN_ENCODING,
reinterpret_cast<const BYTE*
>(&data[0]), data.getLength());
733 CertAddCertificateContextToStore(
store, cert, CERT_STORE_ADD_ALWAYS,
nullptr);
734 CertFreeCertificateContext(cert);
742 static char const*
const pVar = getenv(
"LIBO_TEST_CRYPTOAPI_PKCS7");
747 if (pChainContext->cChain == 0)
751 PCERT_SIMPLE_CHAIN pSimpleChain = pChainContext->rgpChain[0];
753 if (pSimpleChain->TrustStatus.dwErrorStatus & ~(CERT_TRUST_IS_UNTRUSTED_ROOT | ignoreFlags))
759 static HCERTSTORE
const hExtra = CertOpenStore(
760 CERT_STORE_PROV_FILENAME_A,
761 PKCS_7_ASN_ENCODING | X509_ASN_ENCODING,
763 CERT_STORE_OPEN_EXISTING_FLAG | CERT_STORE_READONLY_FLAG,
764 OString(OString::Concat(pVar) +
"/test.p7b").getStr());
765 assert(hExtra !=
nullptr);
766 if (pSimpleChain->cElement < 1)
768 SAL_WARN(
"xmlsecurity.xmlsec",
"unexpected empty chain");
771 PCCERT_CONTEXT
const pRoot(pSimpleChain->rgpElement[pSimpleChain->cElement-1]->pCertContext);
772 PCCERT_CONTEXT
const pIssuerCert = CertFindCertificateInStore(
774 PKCS_7_ASN_ENCODING | X509_ASN_ENCODING,
776 CERT_FIND_SUBJECT_NAME,
777 &pRoot->pCertInfo->Subject,
782 DWORD flags = CERT_STORE_SIGNATURE_FLAG;
783 bool result = CertVerifySubjectCertificateContext(pRoot, pIssuerCert, &flags);
789 CertFreeCertificateContext(pIssuerCert);
798 const uno::Reference< css::security::XCertificate >& aCert,
799 const uno::Sequence< uno::Reference< css::security::XCertificate > >& seqCerts)
801 sal_Int32 validity = css::security::CertificateValidity::INVALID;
802 PCCERT_CHAIN_CONTEXT pChainContext =
nullptr;
803 PCCERT_CONTEXT pCertContext =
nullptr;
805 SAL_INFO(
"xmlsecurity.xmlsec",
"Start verification of certificate: " << aCert->getSubjectName());
808 if( xcert ==
nullptr ) {
809 throw uno::RuntimeException() ;
812 pCertContext = xcert->getMswcryCert() ;
814 CERT_ENHKEY_USAGE enhKeyUsage ;
815 CERT_USAGE_MATCH certUsage ;
816 CERT_CHAIN_PARA chainPara = {};
819 enhKeyUsage.cUsageIdentifier = 0 ;
820 enhKeyUsage.rgpszUsageIdentifier = nullptr ;
821 certUsage.dwType = USAGE_MATCH_TYPE_AND ;
822 certUsage.Usage = enhKeyUsage ;
823 chainPara.cbSize =
sizeof( CERT_CHAIN_PARA ) ;
824 chainPara.RequestedUsage = certUsage ;
827 HCERTSTORE hCollectionStore =
nullptr;
828 HCERTSTORE hIntermediateCertsStore =
nullptr;
830 if( pCertContext !=
nullptr )
832 hIntermediateCertsStore =
837 hCollectionStore = CertOpenStore(
838 CERT_STORE_PROV_COLLECTION ,
844 if (hCollectionStore !=
nullptr)
846 CertAddStoreToCollection (
849 CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG ,
851 CertAddStoreToCollection (
854 CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG ,
856 CertAddStoreToCollection (
858 hIntermediateCertsStore,
859 CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG,
867 SAL_INFO(
"xmlsecurity.xmlsec",
"Verifying cert using revocation information.");
868 bChain = CertGetCertificateChain(
874 CERT_CHAIN_REVOCATION_CHECK_CHAIN | CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT,
878 if (bChain && pChainContext->cChain > 0)
880 SAL_INFO(
"xmlsecurity.xmlsec",
"Overall error status (all chains):");
883 PCERT_SIMPLE_CHAIN pSimpleChain = pChainContext->rgpChain[0];
884 SAL_INFO(
"xmlsecurity.xmlsec",
"Error status of first chain:");
889 DWORD revocationFlags = CERT_TRUST_REVOCATION_STATUS_UNKNOWN |
890 CERT_TRUST_IS_OFFLINE_REVOCATION;
891 DWORD otherErrorsMask = ~revocationFlags;
892 if (!(pSimpleChain->TrustStatus.dwErrorStatus & otherErrorsMask)
898 if ( pSimpleChain->TrustStatus.dwErrorStatus & revocationFlags)
903 CertFreeCertificateChain(pChainContext);
904 pChainContext =
nullptr;
905 SAL_INFO(
"xmlsecurity.xmlsec",
"Checking again but without requiring revocation information.");
906 bChain = CertGetCertificateChain(
916 && pChainContext->cChain > 0
917 && pChainContext->rgpChain[0]->TrustStatus.dwErrorStatus == CERT_TRUST_NO_ERROR)
919 SAL_INFO(
"xmlsecurity.xmlsec",
"Certificate is valid.");
920 validity = css::security::CertificateValidity::VALID;
924 SAL_INFO(
"xmlsecurity.xmlsec",
"root certificate found in extra test store");
925 validity = css::security::CertificateValidity::VALID;
929 SAL_INFO(
"xmlsecurity.xmlsec",
"Certificate is invalid.");
935 SAL_INFO(
"xmlsecurity.xmlsec",
"Certificate is valid.");
936 validity = css::security::CertificateValidity::VALID;
942 SAL_INFO(
"xmlsecurity.xmlsec",
"Certificate is invalid.");
943 validity = css::security::CertificateValidity::INVALID ;
948 SAL_INFO(
"xmlsecurity.xmlsec",
"CertGetCertificateChain failed.");
954 CertFreeCertificateChain(pChainContext);
955 pChainContext =
nullptr;
959 CertCloseStore(hCollectionStore, CERT_CLOSE_STORE_CHECK_FLAG);
962 CertCloseStore(hIntermediateCertsStore, CERT_CLOSE_STORE_CHECK_FLAG);
968 sal_Int32 characters ;
969 PCCERT_CONTEXT pCertContext ;
972 if( xcert ==
nullptr ) {
973 throw uno::RuntimeException() ;
976 pCertContext = xcert->getMswcryCert() ;
978 characters = 0x00000000 ;
981 if( CertCompareCertificateName( X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, &(pCertContext->pCertInfo->Subject), &(pCertContext->pCertInfo->Issuer) ) ) {
982 characters |= css::security::CertificateCharacters::SELF_SIGNED ;
984 characters &= ~ css::security::CertificateCharacters::SELF_SIGNED ;
989 BOOL fCallerFreeProv ;
991 NCRYPT_KEY_HANDLE hKey = 0;
992 DWORD dwFlags = CRYPT_ACQUIRE_ONLY_NCRYPT_KEY_FLAG;
993 HCRYPTPROV_OR_NCRYPT_KEY_HANDLE* phCryptProvOrNCryptKey = &hKey;
994 if( CryptAcquireCertificatePrivateKey( pCertContext ,
997 phCryptProvOrNCryptKey,
1001 characters |= css::security::CertificateCharacters::HAS_PRIVATE_KEY ;
1003 if (hKey && fCallerFreeProv)
1004 NCryptFreeObject(hKey);
1006 characters &= ~ css::security::CertificateCharacters::HAS_PRIVATE_KEY ;
1024 if( cert !=
nullptr ) {
1026 xcert->setMswcryCert( cert ) ;
1034 return "Microsoft Crypto API";
1043 if( pKeysMngr ==
nullptr )
1044 throw uno::RuntimeException() ;
1056 throw uno::RuntimeException() ;
1067 throw uno::RuntimeException() ;
1078 throw uno::RuntimeException() ;
1089 throw uno::RuntimeException() ;
1098 if( pKeysMngr !=
nullptr ) {
1099 xmlSecKeysMngrDestroy( pKeysMngr ) ;
1103extern "C" SAL_DLLPUBLIC_EXPORT uno::XInterface*
1105 uno::XComponentContext* pCtx, uno::Sequence<uno::Any>
const& )
void setCertDb(HCERTSTORE aCertDb)
SecurityEnvironment_MSCryptImpl(const css::uno::Reference< css::uno::XComponentContext > &xContext)
virtual OUString SAL_CALL getImplementationName() override
HCERTSTORE m_hRootSystemStore
LPCTSTR getKeyContainer()
virtual OUString SAL_CALL getSecurityEnvironmentInformation() override
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
void setKeyContainer(LPCTSTR aKeyContainer)
static void destroyKeysManager(xmlSecKeysMngrPtr pKeysMngr)
virtual css::uno::Sequence< css::uno::Reference< css::security::XCertificate > > SAL_CALL getPersonalCertificates() override
virtual css::uno::Reference< css::security::XCertificate > SAL_CALL createCertificateFromRaw(const css::uno::Sequence< sal_Int8 > &rawCertificate) override
HCERTSTORE getCryptoSlot()
virtual ::sal_Int32 SAL_CALL verifyCertificate(const css::uno::Reference< css::security::XCertificate > &xCert, const css::uno::Sequence< css::uno::Reference< css::security::XCertificate > > &intermediateCertificates) override
virtual css::uno::Reference< css::security::XCertificate > SAL_CALL createCertificateFromAscii(const OUString &asciiCertificate) override
virtual css::uno::Sequence< css::uno::Reference< css::security::XCertificate > > SAL_CALL buildCertificatePath(const css::uno::Reference< css::security::XCertificate > &beginCert) override
virtual sal_Bool SAL_CALL supportsService(const OUString &ServiceName) override
void setCryptoProvider(HCRYPTPROV aProv)
HCERTSTORE m_hTrustSystemStore
HCERTSTORE m_hMySystemStore
HCERTSTORE m_hCaSystemStore
void setCryptoSlot(HCERTSTORE aKeyStore)
void enableDefaultCrypt(bool enable)
virtual css::uno::Reference< css::security::XCertificate > SAL_CALL getCertificate(const OUString &issuerName, const css::uno::Sequence< sal_Int8 > &serialNumber) override
virtual ::sal_Int32 SAL_CALL getCertificateCharacters(const css::uno::Reference< css::security::XCertificate > &xCert) override
css::uno::Reference< css::lang::XMultiServiceFactory > m_xServiceManager
xmlSecKeysMngrPtr createKeysManager()
HCRYPTPROV getCryptoProvider()
virtual ~SecurityEnvironment_MSCryptImpl() override
#define SAL_WARN(area, stream)
#define SAL_INFO(area, stream)
bool CPPUHELPER_DLLPUBLIC supportsService(css::lang::XServiceInfo *implementation, rtl::OUString const &name)
enumrange< T >::Iterator begin(enumrange< T >)
OString OUStringToOString(std::u16string_view str, ConnectionSettings const *settings)
xmlSecKeysMngrPtr MSCryptoAppliedKeysMngrCreate()
MSCryptoAppliedKeysMngrCreate:
Sequence< sal_Int8 > numericStringToBigInteger(std::u16string_view numeral)
int MSCryptoAppliedKeysMngrAdoptKeyStore(xmlSecKeysMngrPtr mngr, HCERTSTORE keyStore)
int MSCryptoAppliedKeysMngrAdoptUntrustedStore(xmlSecKeysMngrPtr mngr, HCERTSTORE untrustedStore)
int MSCryptoAppliedKeysMngrAdoptTrustedStore(xmlSecKeysMngrPtr mngr, HCERTSTORE trustedStore)
const wchar_t *typedef BOOL
SAL_DLLPUBLIC_EXPORT uno::XInterface * com_sun_star_xml_crypto_SecurityEnvironment_get_implementation(uno::XComponentContext *pCtx, uno::Sequence< uno::Any > const &)
static bool CheckUnitTestStore(PCCERT_CHAIN_CONTEXT const pChainContext, DWORD ignoreFlags)
static void traceTrustStatus(DWORD err)
static rtl::Reference< X509Certificate_MSCryptImpl > MswcryCertContextToXCert(PCCERT_CONTEXT cert)
CertErrorToString const arErrStrings[]
static HCERTSTORE getCertStoreForIntermediatCerts(const uno::Sequence< uno::Reference< css::security::XCertificate > > &seqCerts)