Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #4
0
        /// <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));
            }
        }
Exemple #5
0
        /// <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);
        }
Exemple #6
0
        /// <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;
        }
Exemple #7
0
 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]);
 }