Ejemplo n.º 1
0
        public OperationResult ResetChallengeRequest(string tokenInternalID)
        {
            OperationResult result;

            try
            {
                TokenCryptoData tokenCryptoData = new TokensDAO().loadTokenCryptoData(tokenInternalID);
                if (tokenCryptoData.ID == null)
                {
                    result = OperationResult.Error;
                }
                else
                {
                    result = new TokensChallengeRequestDAO().resetChallengeRequest(tokenCryptoData.ID);
                }
            }
            catch
            {
                result = OperationResult.Error;
            }
            return(result);
        }
		public OperationResult ChallengeRequest(string tokenInternalID, string dataEntropy, out string newChallenge)
		{
			TokenCryptoData _tkCryptoData = new TokensDAO().loadTokenCryptoData(tokenInternalID);
			OperationResult result;
			if (_tkCryptoData.ID == null)
			{
				newChallenge = null;
				result = OperationResult.Error;
			}
			else
			{
				if (_tkCryptoData.TokenBaseParams.MovingFactorType != TokenMovingFactorType.TransactionAuthenticationNumber && _tkCryptoData.TokenBaseParams.MovingFactorType != TokenMovingFactorType.EventBase && _tkCryptoData.TokenBaseParams.SeedType == TokenSeedType.ActivactionKey)
				{
					throw new Exception("Function not implemented for this type of token!!");
				}
				string currentChallenge = (string)new TokensChallengeRequestDAO().loadChallengeRequest(tokenInternalID);
				if (currentChallenge != null)
				{
					newChallenge = this.formatChallenge(currentChallenge.Trim());
					result = OperationResult.Success;
				}
				else
				{
					int _idx = 0;
					int iRequest = int.Parse(SAFConfiguration.readParameterExternal("TANRequestPositions"));
					int iDigitsByPos = int.Parse(SAFConfiguration.readParameterExternal("TANDigitsByPosition"));
					int[] _array = new int[iRequest];
					string _lastRequest = string.Empty;
					DateTime _lastRequestValidThru = (_tkCryptoData.TokenBaseParams.ChallengeRequestValidUntil > 0) ? DateTime.Now.AddSeconds((double)_tkCryptoData.TokenBaseParams.ChallengeRequestValidUntil) : DateTime.MaxValue;
					while (_idx != iRequest)
					{
						bool _flag;
						do
						{
							_flag = false;
							Random rndArray = new Random();
							_array[_idx] = rndArray.Next(0, _tkCryptoData.TokenBaseParams.OTPValidationWindow);
							for (int _idx2 = 0; _idx2 < _idx; _idx2++)
							{
								if (_array[_idx] == _array[_idx2])
								{
									_flag = true;
									break;
								}
							}
						}
						while (_flag);
						Random rndPos = new Random();
						string text = _lastRequest;
						_lastRequest = string.Concat(new string[]
						{
							text,
							_array[_idx].ToString().Trim(),
							";",
							rndPos.Next(0, _tkCryptoData.TokenBaseParams.OTPTotalDigits).ToString().Trim(),
							"|"
						});
						_idx++;
					}
					newChallenge = this.formatChallenge(_lastRequest.Substring(0, _lastRequest.Length - 1).Trim());
					result = new TokensChallengeRequestDAO().persistChallengeRequest(tokenInternalID, _lastRequest.Substring(0, _lastRequest.Length - 1).Trim(), _lastRequestValidThru);
				}
			}
			return result;
		}
		public OperationResult ResetChallengeRequest(string tokenInternalID)
		{
			OperationResult result;
			try
			{
				TokenCryptoData tokenCryptoData = new TokensDAO().loadTokenCryptoData(tokenInternalID);
				if (tokenCryptoData.ID == null)
				{
					result = OperationResult.Error;
				}
				else
				{
					result = new TokensChallengeRequestDAO().resetChallengeRequest(tokenCryptoData.ID);
				}
			}
			catch
			{
				result = OperationResult.Error;
			}
			return result;
		}