public static bool PinPolicySupports(IRutokenSlot slot) { var session = slot.OpenRutokenSession(SessionType.ReadOnly); var res = session.PinPolicySupports(CKU.CKU_USER); session.CloseSession(); return(res); }
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(); } } }
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(); } } }