示例#1
0
        public static bool PinPolicySupports(IRutokenSlot slot)
        {
            var session = slot.OpenRutokenSession(SessionType.ReadOnly);
            var res     = session.PinPolicySupports(CKU.CKU_USER);

            session.CloseSession();
            return(res);
        }
示例#2
0
        public static PinPolicy GetPinPolicy(IRutokenSlot slot)
        {
            var session = slot.OpenRutokenSession(SessionType.ReadOnly);
            var res     = session.GetPinPolicy(CKU.CKU_USER);

            session.CloseSession();
            return(res);
        }
        public void _HL_20_08_EncryptAndDecrypt_Magma_CTR_ACPKM_Test()
        {
            using (var pkcs11 = Settings.Factories.RutokenPkcs11LibraryFactory.LoadRutokenPkcs11Library(Settings.Factories, Settings.Pkcs11LibraryPath, Settings.AppType))
            {
                // Установление соединения с Рутокен в первом доступном слоте
                IRutokenSlot slot = Helpers.GetUsableSlot(pkcs11);

                // Открытие RW сессии
                using (ISession session = slot.OpenRutokenSession(SessionType.ReadWrite))
                {
                    // Выполнение аутентификации пользователя
                    session.Login(CKU.CKU_USER, Settings.NormalUserPin);

                    // Генерация ключей для шифрования Магма
                    // Generate symetric key
                    IObjectHandle generatedKey = Helpers.GenerateMagmaKey(session);

                    var    random     = new Random();
                    byte[] initVector = new byte[Settings.MAGMA_BLOCK_SIZE / 2];
                    random.NextBytes(initVector);

                    byte[] mechaismParams = new byte[Settings.CTR_ACPKM_PERIOD_SIZE + Settings.MAGMA_BLOCK_SIZE / 2];

                    mechaismParams[0] = 0x01;
                    mechaismParams[1] = 0x00;
                    mechaismParams[2] = 0x00;
                    mechaismParams[3] = 0x00;
                    Array.Copy(initVector, 0, mechaismParams, Settings.CTR_ACPKM_PERIOD_SIZE, initVector.Length);

                    var mechanism = Settings.Factories.MechanismFactory.Create((CKM)Extended_CKM.CKM_MAGMA_CTR_ACPKM, mechaismParams);

                    byte[] sourceData = TestData.Encrypt_Gost28147_89_ECB_SourceData;

                    // Encrypt data
                    byte[] encryptedData = session.Encrypt(mechanism, generatedKey, sourceData);

                    // Decrypt data
                    byte[] decryptedData = session.Decrypt(mechanism, generatedKey, encryptedData);

                    Assert.IsTrue(Convert.ToBase64String(sourceData) == Convert.ToBase64String(decryptedData));

                    session.DestroyObject(generatedKey);

                    // Завершение сессии
                    session.Logout();
                }
            }
        }
示例#4
0
        public void Invoke(IRutokenSlot slot, T operationParams)
        {
            using var session = slot.OpenRutokenSession(SessionType.ReadWrite);

            try
            {
                session.Login(operationParams.LoginType, operationParams.LoginPin);
            }
            catch (Pkcs11Exception ex) when(ex.RV == CKR.CKR_PIN_INCORRECT)
            {
                throw new CKRException(ex.RV, Resources.IncorrectPin);
            }

            try
            {
                Payload(session, operationParams);
            }
            finally
            {
                session.Logout();
            }
        }
        public void _HL_20_06_EncryptAndDecrypt_Magma_ECB_Test()
        {
            using (var pkcs11 = Settings.Factories.RutokenPkcs11LibraryFactory.LoadRutokenPkcs11Library(Settings.Factories, Settings.Pkcs11LibraryPath, Settings.AppType))
            {
                // Установление соединения с Рутокен в первом доступном слоте
                IRutokenSlot slot = Helpers.GetUsableSlot(pkcs11);

                // Открытие RW сессии
                using (ISession session = slot.OpenRutokenSession(SessionType.ReadWrite))
                {
                    // Выполнение аутентификации пользователя
                    session.Login(CKU.CKU_USER, Settings.NormalUserPin);

                    // Генерация ключей для шифрования Магма
                    // Generate symetric key
                    IObjectHandle generatedKey = Helpers.GenerateMagmaKey(session);

                    var mechanism = Settings.Factories.MechanismFactory.Create((CKM)Extended_CKM.CKM_MAGMA_ECB);

                    byte[] sourceData = TestData.Encrypt_Gost28147_89_ECB_SourceData;

                    // Encrypt data
                    byte[] encryptedData = session.Encrypt(mechanism, generatedKey, sourceData);

                    // Decrypt data
                    byte[] decryptedData = session.Decrypt(mechanism, generatedKey, encryptedData);

                    Assert.IsTrue(Convert.ToBase64String(sourceData) == Convert.ToBase64String(decryptedData));

                    session.DestroyObject(generatedKey);

                    // Завершение сессии
                    session.Logout();
                }
            }
        }