Интерфейс COM описан в настоящем руководстве. Интерфейс доступен только для операционных систем семейства Windows. Для его использования в инструментарий разработчика включены следующие файлы:
Описание Имя файла
Заголовочный файл pkivalidator.h
Идентификаторы GUID pkivalidator_i.c
Библиотека DLL pkivalidator.dll, доступна для платформ Win32, x64 и Itanium
Модуль слияния pkivalidator_win32.msm, pkivalidator_x64.msm, pkivalidator_itanium.msm

Использование

Язык программирования С/С++

Для использования интерфейса COM существуют следующие возможности:

.NET (на примере языка C#)

Для использования интерфейса COM в среде .NET существуют следующие возможности:

Определение метода IPrivateKeyUsageValidator.IsCertValidOnTime, генерируемое по умолчанию:

С#
bool IsCertValidOnTime(object Certificate, DateTime DateTime);

Определение метода IPrivateKeyUsageValidator.IsCertValidNow, генерируемое по умолчанию:

С#
bool IsCertValidNow(object Certificate);

В следующем примере представлены варианты использования проверок сертификата с использованием CAPICOM.Certificate и X509Certificate2 :

C# Copy Code
        // Получаем сертфикат CAPICOM (существует только 32-битная capicom.dll!)
        CAPICOM.CertificateClass certCapicom = GetCapicomCertificate();
        
        // Получаем сертификат X509Certificate2
        System.Security.Cryptography.X509Certificates.X509Certificate2 certX509 =
                GetX509Certificate();

        // Получаем момент времени, на который 
        // необходимо осуществить проверку
        DateTime time = GetVerifyingTime();

        // Создаем объект 
        PKIValidatorLib.PrivateKeyUsageValidatorClass validator =
                new PKIValidatorLib.PrivateKeyUsageValidatorClass();

        bool isValidByPKUPOnTime;
        bool isValidByPKUPNow;
        try
        {
                isValidByPKUPOnTime = validator.IsCertValidOnTime(certCapicom, time);
                // Можно воспользоваться X509Certificate2, при этом будет передаваться PCCERT_CONTEXT
                // Обязательно надо преобразовать IntPtr с помощью метода IntPtr.ToInt64(), иначе
                // 64-битный указатель будет передан неправильно!
                isValidByPKUPOnTime = validator.IsCertValidOnTime(certX509.Handle.ToInt64(), time);

                // точно так же можно проверить на текущий момент
                isValidByPKUPNow = validator.IsCertValidNow(certCapicom);
        }
        catch (Exception ex)
        {
                DoSmthIfError("Invalid Parameter" + ex.Message);
                return;
        }

        if (!isValidByPKUPOnTime)
                DoSmthIfError("Was not valid at " + time.ToString());

        if (!isValidByPKUPNow)
                DoSmthIfError("Not valid now");

Определение метода IPrivateKeyUsageValidator.IsChainValid, генерируемое по умолчанию:

С#
bool IsChainValid(object Chain);

В следующем примере представлены варианты использования проверок цепочки с использованием CAPICOM.Chain и X509Chain :

C# Copy Code
        // Получаем цепочку CAPICOM (существует только 32-битная capicom.dll!)
        CAPICOM.ChainClass chainCapicom = GetCapicomChain();

        // Получаем цепочку X509Chain
        System.Security.Cryptography.X509Certificates.X509Chain chainX509 =
                GetX509Chain();

        // Получаем момент времени, на который 
        // необходимо осуществить проверку
        DateTime time = GetVerifyingTime();

        // Создаем объект 
        PKIValidatorLib.PrivateKeyUsageValidatorClass validator =
                new PKIValidatorLib.PrivateKeyUsageValidatorClass();

        bool isChainValidByPKUP;
        try
        {
                isChainValidByPKUP = validator.IsChainValid(chainCapicom);
                // Можно воспользоваться X509Chain, при этом будет передаваться PCCERT_CHAIN_CONTEXT
                // Обязательно надо преобразовать IntPtr с помощью метода IntPtr.ToInt64(), иначе
                // 64-битный указатель будет передан неправильно!
                isChainValidByPKUP = validator.IsChainValid(chainX509.ChainContext.ToInt64());
        }
        catch (Exception ex)
        {
                DoSmthIfError("Invalid Parameter" + ex.Message);
                return;
        }

        if (!isChainValidByPKUP)
                DoSmthIfError("Chain is not valid by PKUP");

Другие языки программирования

Если используемый Вами язык программирования и среда разработки поддерживают COM, следуйте инструкциям, изложенным в руководстве по используемой Вами среде разработки.

Библиотека pkivalidator.dll устанавливается в папку %CommonProgramFiles%\Crypto Pro\Shared\ и регистрируется в реестре с указанием полного пути к ней.