public AutenticationStatus Autenticate(string tokenInternalID, string password, string dataEntropy, out string newChallenge)
		{
			newChallenge = null;
			TokenCryptoData _tkCryptoData = new TokensDAO().loadTokenCryptoData(tokenInternalID);
			AutenticationStatus result;
			if (_tkCryptoData.ID == null)
			{
				result = AutenticationStatus.ErrorCheckTokenStatus;
			}
			else
			{
				if (_tkCryptoData.TokenBaseParams.MovingFactorType != TokenMovingFactorType.EventBase && _tkCryptoData.TokenBaseParams.SeedType == TokenSeedType.ActivactionKey)
				{
					throw new Exception("Function not implemented for this type of token!!");
				}
				long _MovingFactor;
				AutenticationStatus _authStatus = HOTPPwdValidator.Validate(_tkCryptoData, (dataEntropy == null) ? new byte[0] : BaseFunctions.convertStringToByteArray(dataEntropy), this._masterKey, password, out _MovingFactor);
				if (_authStatus == AutenticationStatus.Success || _authStatus == AutenticationStatus.SuccessButSynchronized)
				{
					_tkCryptoData.ResetMovingFactor(_MovingFactor);
					if (new TokensDAO().updateMovingFactor(_tkCryptoData) != OperationResult.Success)
					{
						result = AutenticationStatus.TokenOrPasswordInvalid;
						return result;
					}
				}
				result = _authStatus;
			}
			return result;
		}
		public OperationResult Synchronize(string tokenInternalID, string firstPwd, string secondPwd)
		{
			TokenCryptoData _tkCryptoData = new TokensDAO().loadTokenCryptoData(tokenInternalID);
			OperationResult result;
			if (_tkCryptoData.ID == null)
			{
				result = OperationResult.Error;
			}
			else
			{
				if (_tkCryptoData.TokenBaseParams.MovingFactorType != TokenMovingFactorType.EventBase && _tkCryptoData.TokenBaseParams.SeedType == TokenSeedType.ActivactionKey)
				{
					throw new Exception("Function not implemented for this type of token!!");
				}
				long _MovingFactor;
				if (OperationResult.Success == HOTPPwdValidator.Synchronize(_tkCryptoData, new byte[0], this._masterKey, firstPwd, secondPwd, out _MovingFactor))
				{
					_tkCryptoData.ResetMovingFactor(_MovingFactor);
					if (new TokensDAO().updateMovingFactor(_tkCryptoData) != OperationResult.Success)
					{
						result = OperationResult.Success;
						return result;
					}
				}
				result = OperationResult.Error;
			}
			return result;
		}
Пример #3
0
        public OperationResult ResetMovingFactor(string tokenInternalID, long movingFactorValue)
        {
            OperationResult result;

            try
            {
                TokenCryptoData tkCryptoData = new TokensDAO().loadTokenCryptoData(tokenInternalID);
                if (tkCryptoData.ID == null)
                {
                    result = OperationResult.Error;
                }
                else
                {
                    tkCryptoData.ResetMovingFactor(movingFactorValue);
                    result = new TokensDAO().updateMovingFactor(tkCryptoData);
                }
            }
            catch
            {
                result = OperationResult.Error;
            }
            return(result);
        }
		public OperationResult StartServerAuthentication(string tokenInternalID, long movingFactorDrift, string dataEntropy, out string newPwd)
		{
			TokenCryptoData _tkCryptoData = new TokensDAO().loadTokenCryptoData(tokenInternalID);
			OperationResult result;
			if (_tkCryptoData.ID == null)
			{
				newPwd = null;
				result = OperationResult.Error;
			}
			else
			{
				if (_tkCryptoData.TokenBaseParams.MovingFactorType != TokenMovingFactorType.EventBase && _tkCryptoData.TokenBaseParams.SeedType == TokenSeedType.ActivactionKey)
				{
					throw new Exception("Function not implemented for this type of token!!");
				}
				if (movingFactorDrift > 0L)
				{
					_tkCryptoData.ResetMovingFactor(movingFactorDrift);
				}
				newPwd = HOTPPwdGenerator.generate(_tkCryptoData, this._masterKey, (dataEntropy == null) ? new byte[0] : BaseFunctions.convertStringToByteArray(dataEntropy));
				result = OperationResult.Success;
			}
			return result;
		}
		public AutenticationStatus Autenticate(string tokenInternalID, string password, string dataEntropy, out string newChallenge)
		{
			newChallenge = null;
			TokenCryptoData _tkCryptoData = new TokensDAO().loadTokenCryptoData(tokenInternalID);
			AutenticationStatus result;
			if (_tkCryptoData.ID == null)
			{
				result = AutenticationStatus.TokenNotFoundOrCanceled;
			}
			else
			{
				if (_tkCryptoData.TokenBaseParams.MovingFactorType != TokenMovingFactorType.TransactionAuthenticationNumber)
				{
					throw new Exception("Function not implemented for this type of token!!");
				}
				string currentChallenge = (string)new TokensChallengeRequestDAO().loadChallengeRequest(tokenInternalID);
				if (currentChallenge == null)
				{
					result = AutenticationStatus.InvalidDataOnPasswordValidation;
				}
				else
				{
					int iRequest = int.Parse(SAFConfiguration.readParameterExternal("TANRequestPositions"));
					int iDigitsByPos = int.Parse(SAFConfiguration.readParameterExternal("TANDigitsByPosition"));
					int iFixPosOnFaill = int.Parse(SAFConfiguration.readParameterExternal("TANFixedPosOnFail"));
					string _otp = string.Empty;
					byte[] _tkSeedOpen = _tkCryptoData.GetTokenSeed("");
					byte[] _dataEntropy = (dataEntropy == null || dataEntropy.Length < 1) ? new byte[0] : BaseFunctions.convertStringToByteArray(dataEntropy);
					string[] _arrayPosValid = currentChallenge.Split(new char[]
					{
						'|'
					});
					string[] _arrayChallenge = BaseFunctions.DecodeFrom64(_tkCryptoData.CryptoData.SupportCryptoData.Trim()).Split(new char[]
					{
						';'
					});
					for (int idx = 0; idx < _arrayPosValid.Length; idx++)
					{
						string[] _temp = _arrayPosValid[idx].Trim().Split(new char[]
						{
							';'
						});
						_tkCryptoData.ResetMovingFactor(long.Parse(_arrayChallenge[(int)checked((IntPtr)long.Parse(_temp[0]))]));
						_otp += HOTPPwdGenerator.generate(_tkCryptoData, _tkSeedOpen, _dataEntropy).Substring(int.Parse(_temp[1]), 1);
					}
					if (password.Trim() == _otp)
					{
						if (OperationResult.Success == new TokensChallengeRequestDAO().resetChallengeRequest(tokenInternalID))
						{
							result = AutenticationStatus.Success;
							return result;
						}
					}
					result = AutenticationStatus.TokenOrPasswordInvalid;
				}
			}
			return result;
		}
		public OperationResult ResetMovingFactor(string tokenInternalID, long movingFactorValue)
		{
			OperationResult result;
			try
			{
				TokenCryptoData tkCryptoData = new TokensDAO().loadTokenCryptoData(tokenInternalID);
				if (tkCryptoData.ID == null)
				{
					result = OperationResult.Error;
				}
				else
				{
					tkCryptoData.ResetMovingFactor(movingFactorValue);
					result = new TokensDAO().updateMovingFactor(tkCryptoData);
				}
			}
			catch
			{
				result = OperationResult.Error;
			}
			return result;
		}