Пример #1
0
        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
                }
            }
        }
Пример #2
0
        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));
        }