public void OtpGenerator_GeneratesCharsAToZ() { var otpGenerator = new OtpGenerator(); var genSet = new HashSet <char>(); while (genSet.Count < MAX_DIFF_CHARS_COUNT) { foreach (char c in otpGenerator.Generate(BATCH_SIZE)) { if (!AllowedChars.Contains(c)) { Assert.Fail("Generated disallowed char: {0}", c); } genSet.Add(c); } } if (genSet.Count > MAX_DIFF_CHARS_COUNT) { Assert.Fail("Generated too many diff characters: gen {0} vs max {0}", genSet.Count, MAX_DIFF_CHARS_COUNT); } foreach (char c in AllowedChars) { if (!genSet.Contains(c)) { Assert.Fail("{0} was not generated", c); } } }
public bool ValidateRecoveryCode(string code, IMultiFactorSettings mfa) { var otps = this.ToHotp(mfa); var otp = new OtpGenerator(otps); return(otp.Generate(offset: mfa.RecoveryTripCount) == code); }
public IEnumerable <string> GenerateRecoveryCodes(IMultiFactorSettings mfa) { var recs = this.ToHotp(mfa); var otp = new OtpGenerator(recs); for (var i = 0; i < 10; i++) { var code = otp.Generate(groupSize: 4); if (i >= mfa.RecoveryTripCount) { yield return(code); } } }