public static void Block(Slot slot, RutokenType tokenType) { using var session = slot.OpenSession(SessionType.ReadWrite); var wrongPin = tokenType == RutokenType.RUTOKEN ? _wrongPin1_RutokenS : _wrongPin1; var wrongPin2 = tokenType == RutokenType.RUTOKEN ? _wrongPin2_RutokenS : _wrongPin2; while (true) { try { session.Login(CKU.CKU_SO, wrongPin); session.Logout(); // Если успешно залогинились, то логинимся еще с другим паролем try { session.Login(CKU.CKU_SO, wrongPin2); session.Logout(); } catch (Pkcs11Exception ex) when(ex.RV == CKR.CKR_PIN_LOCKED) { return; } } catch (Pkcs11Exception ex) when(ex.RV == CKR.CKR_PIN_LOCKED) { return; } catch { // ignored } } }
public static string Generate(Slot slot, RutokenType tokenType, uint pinLength) { using var session = slot.OpenSession(SessionType.ReadOnly); var pin = new byte[pinLength]; for (var i = 0; i < pinLength; i++) { var random = session.GenerateRandom(2); if (tokenType == RutokenType.PINPAD_FAMILY) { pin[i] = (byte)(random[1] % 10 + 0x30); } else { pin[i] = oneByteLetters[random[1] % oneByteLetters.Length]; } } return(Encoding.ASCII.GetString(pin)); }