Подписание XML с помощью PKCS11interop - PullRequest
0 голосов
/ 28 октября 2019

Я начинаю с PKCS11Interop. Я прочитал документацию.

Я хотел бы использовать библиотеку для цифровой подписи XML документов с использованием smart card.

Я добавил .dll, сгенерированный программным обеспечением, и теперь оно читает smart card. Каковы следующие шаги? Я могу только найти модульные тесты и ничего конкретного. Я бы хотел, чтобы у пользователя по-прежнему запрашивался пин-код перед использованием программного обеспечения.

        // Specify the path to unmanaged PKCS#11 library provided by the cryptographic device vendor
        string pkcs11LibraryPath = @"C:\\Program Files (x86)\\Gemalto\\IDGo 800 PKCS#11\\IDPrimePKCS11.dll";

        // Create factories used by Pkcs11Interop library
        Pkcs11InteropFactories factories = new Pkcs11InteropFactories();

        // Load unmanaged PKCS#11 library
        using (IPkcs11Library pkcs11Library = factories.Pkcs11LibraryFactory.LoadPkcs11Library(factories, pkcs11LibraryPath, AppType.MultiThreaded))
        {
            // Show general information about loaded library
            ILibraryInfo libraryInfo = pkcs11Library.GetInfo();

            Console.WriteLine("Library");
            Console.WriteLine("  Manufacturer:       " + libraryInfo.ManufacturerId);
            Console.WriteLine("  Description:        " + libraryInfo.LibraryDescription);
            Console.WriteLine("  Version:            " + libraryInfo.LibraryVersion);

            // Get list of all available slots
            foreach (ISlot slot in pkcs11Library.GetSlotList(SlotsType.WithOrWithoutTokenPresent))
            {
                // Show basic information about slot
                ISlotInfo slotInfo = slot.GetSlotInfo();

                Console.WriteLine();
                Console.WriteLine("Slot");
                Console.WriteLine("  Manufacturer:       " + slotInfo.ManufacturerId);
                Console.WriteLine("  Description:        " + slotInfo.SlotDescription);
                Console.WriteLine("  Token present:      " + slotInfo.SlotFlags.TokenPresent);

                if (slotInfo.SlotFlags.TokenPresent)
                {
                    // Show basic information about token present in the slot
                    ITokenInfo tokenInfo = slot.GetTokenInfo();

                    Console.WriteLine("Token");
                    Console.WriteLine("  Manufacturer:       " + tokenInfo.ManufacturerId);
                    Console.WriteLine("  Model:              " + tokenInfo.Model);
                    Console.WriteLine("  Serial number:      " + tokenInfo.SerialNumber);
                    Console.WriteLine("  Label:              " + tokenInfo.Label);

                    // Show list of mechanisms (algorithms) supported by the token
                    Console.WriteLine("Supported mechanisms: ");
                    foreach (CKM mechanism in slot.GetMechanismList())
                        Console.WriteLine("  " + mechanism);
                }
...