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; }
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; }