public void TestKeyTypeCode(string keyTypeCode, LmkPair expectedPair, int expectedVariant) { var ktc = new KeyTypeCode(keyTypeCode); Assert.AreEqual(expectedPair, ktc.Pair); Assert.AreEqual(expectedVariant, ktc.Variant); Assert.AreEqual(ktc.ToString(), keyTypeCode); }
public void TestLmkPairMappingForTwoCharacters(string text, LmkPair expected, int variantExpected) { int variant; var pair = text.GetLmkPairFromTwoDigits(out variant); Assert.AreEqual(expected, pair); Assert.AreEqual(variantExpected, variant); }
/// <summary> /// Returns an authorized state requirement. /// </summary> /// <param name="function">Function requested.</param> /// <param name="pair">LMK pair for which function is requested.</param> /// <param name="variant">Variant requested.</param> /// <returns>Requirement.</returns> public static StateRequirementType GetRequirement(KeyFunction function, LmkPair pair, int variant) { foreach (var req in Reqs.Where(req => req.Function == function && req.Pair == pair && req.Variant == variant)) { return(req.Requirement); } return(StateRequirementType.NotAllowed); }
/// <summary> /// Returns a string representing an LMK pair. /// </summary> /// <param name="pair">LMK pair.</param> /// <returns>LMK pair code.</returns> public static string GetLmkPairCode(this LmkPair pair) { switch (pair) { case LmkPair.Pair04_05: return("00"); case LmkPair.Pair06_07: return("01"); case LmkPair.Pair14_15: return("02"); case LmkPair.Pair16_17: return("03"); case LmkPair.Pair18_19: return("04"); case LmkPair.Pair20_21: return("05"); case LmkPair.Pair22_23: return("06"); case LmkPair.Pair24_25: return("07"); case LmkPair.Pair26_27: return("08"); case LmkPair.Pair28_29: return("09"); case LmkPair.Pair30_31: return("0A"); case LmkPair.Pair32_33: return("0B"); case LmkPair.Pair34_35: return("0C"); case LmkPair.Pair36_37: return("0D"); case LmkPair.Pair38_39: return("0E"); default: throw new InvalidCastException(string.Format("Cannot generate LMK pair code for {0}", pair)); } }
/// <summary> /// Validates an authorized state requirement. /// </summary> /// <param name="func">Function to perform.</param> /// <param name="pair">LMK pair.</param> /// <param name="variant">Variant.</param> /// <param name="mr">Message response to add error code to, if parsing fails.</param> /// <returns>True if the operation is allowed.</returns> protected bool ValidateAuthStateRequirement(KeyFunction func, LmkPair pair, int variant, StreamResponse mr) { var req = AuthStateRequirements.GetRequirement(func, pair, variant); if (req == StateRequirementType.NotAllowed) { mr.Append(ErrorCodes.ER_29_FUNCTION_NOT_PERMITTED); return(false); } if (req == StateRequirementType.NeedsAuthorizedState && !ConfigHelpers.IsInAuthorizedState()) { mr.Append(ErrorCodes.ER_17_HSM_IS_NOT_IN_THE_AUTHORIZED_STATE); return(false); } return(true); }
/// <summary> /// Creates a new instance of this class /// from a variant and an LMK pair. /// </summary> /// <param name="variant">Variant.</param> /// <param name="pair">LMK pair.</param> public KeyTypeCode(int variant, LmkPair pair) { Variant = variant; Pair = pair; }
public void TestLmkPairMapping(string text, LmkPair expected) { Assert.AreEqual(expected, text.GetLmkPair()); Assert.AreEqual(text, expected.GetLmkPairCode()); }
/// <summary> /// Returns the clear value of an LMK variant. /// </summary> /// <param name="pair">LMK pair.</param> /// <param name="variant">LMK variant.</param> /// <returns>LMK for pair and variant.</returns> public static string LmkVariant(LmkPair pair, int variant) { var lmk = Lmk(pair); return(variant == 0 ? lmk : lmk.XorHex(Variants.GetVariant(variant).PadRight(32, '0'))); }
/// <summary> /// Returns the clear value of an LMK. /// </summary> /// <param name="pair">LMK pair.</param> /// <returns>LMK for pair.</returns> public static string Lmk(LmkPair pair) { return(!UseOldLmkStorage ? _lmKs[pair] : _oldLmKs[pair]); }