Esempio n. 1
0
        public SmartCard(IPinServiceFactory pinServiceFactory)
        {
            _smartCardState = new DefaultSmartCardState();
            _smartCardState.Authenticated += smartCardState_Authenticated;
            _smartCardState.Connected     += smartCardState_Connected;
            _smartCardState.Transmitting  += SmartCardState_Transmitting;

            _pinServiceFactory = pinServiceFactory;
        }
        private IResult RequestReset(ISmartCardState smartCardState, ISmartCardData smartCardData)
        {
            if (!IsAuthenticated(smartCardState, smartCardData))
            {
                return(SmartCardResult
                       .CreateError(Result.StripeResetRejected));
            }

            smartCardState.Stripe = Array.Empty <char>();
            return(SmartCardResult
                   .Create(Pin.Acknowledge, Code.Accepted, Result.StripeResetCompleted));
        }
        public virtual IResult Handle(Code code, ISmartCardState smartCardState, ISmartCardData cardData)
        {
            var action = PinServiceHandleSwitch.Case(code);

            if (action == null)
            {
                return(SmartCardResult
                       .CreateError(Result.UndeterminedResult, Code.Error));
            }

            return(action.Invoke(smartCardState, cardData));
        }
        private IResult Connect(ISmartCardState smartCardState, ISmartCardData smartCardData)
        {
            if (!IsAuthenticated(smartCardState, smartCardData))
            {
                return(SmartCardResult.CreateError(Result.Unauthorised, Code.Rejected));
            }

            if (smartCardState.IsConnected)
            {
                return(SmartCardResult.CreateError(Result.AlreadyConnected, Code.Rejected));
            }

            smartCardState.IsConnected = true;
            return(SmartCardResult.Create(Pin.Acknowledge, Code.Accepted, Result.Connected));
        }
        private IResult BeginTransmit(ISmartCardState smartCardState, ISmartCardData smartCardData)
        {
            if (!IsAuthenticated(smartCardState, smartCardData))
            {
                return(SmartCardResult.CreateError(Result.Unauthorised, Code.Rejected));
            }

            if (smartCardState.IsTransmitting)
            {
                return(SmartCardResult.CreateError(Result.RecieveFailure, Code.Denied));
            }

            smartCardState.IsTransmitting = true;

            return(SmartCardResult.Create(Pin.Acknowledge, Code.Accepted, Result.TransmissionEnded));
        }
        private IResult BinaryTransmit(ISmartCardState smartCardState, ISmartCardData smartCardData)
        {
            if (!IsAuthenticated(smartCardState, smartCardData))
            {
                return(SmartCardResult.CreateError(Result.Unauthorised, Code.Rejected));
            }

            if (!smartCardState.IsTransmitting)
            {
                return(SmartCardResult.CreateError(Result.RecieveFailure, Code.Denied));
            }

            smartCardState.Transmission = smartCardState.Transmission.Append(smartCardData.Data);

            return(SmartCardResult.Create(Pin.Acknowledge, Code.Accepted, Result.ContinueTransmission));
        }
        private IResult Authenticate(ISmartCardState smartCardState, ISmartCardData smartCardData)
        {
            if (IsAuthenticated(smartCardState, smartCardData) ||
                (smartCardState.Stripe != null && smartCardState.Stripe.Any()))
            {
                return(SmartCardResult.CreateError(Result.AlreadyAuthenticated));
            }

            if (smartCardState.IsConnected)
            {
                return(SmartCardResult.CreateError(Result.AlreadyConnected, Code.Rejected));
            }

            smartCardState.Stripe = smartCardData.Stripe;
            return(SmartCardResult
                   .Create(Pin.Acknowledge, Code.Accepted, Result.AuthenticationSucceeded));
        }
 public static SmartCardEventArgs Create(ISmartCardState state, object stateResult = default)
 {
     return(new SmartCardEventArgs(state, stateResult));
 }
 private SmartCardEventArgs(ISmartCardState state, object stateResult)
 {
     State       = state;
     StateResult = stateResult;
 }
 private IResult DataTransmit(ISmartCardState smartCardState, ISmartCardData smartCardData)
 {
     return(BinaryTransmit(smartCardState, smartCardData));
 }
 protected static bool IsAuthenticated(ISmartCardState smartCardState, ISmartCardData smartCard)
 {
     return(smartCardState.Stripe != null &&
            smartCardState.Stripe.SequenceEqual(smartCard.Stripe));
 }