public override string ProcessMessage()
        {
            LMKPairs.LMKPair LMKKeyPair = LMKPairs.LMKPair.Null;
            string           var        = "";

            KeySchemeTable.KeyScheme ks    = KeySchemeTable.KeyScheme.Unspecified;
            HexKey.KeyLength         kl    = HexKey.KeyLength.SingleLength;
            KeySchemeTable.KeyScheme zmkKS = KeySchemeTable.KeyScheme.Unspecified;
            HexKey.KeyLength         zmkKL;

            string cryptKey  = m_inStack.PopFromStack().ConsoleMessageProperty;
            string cryptZMK  = m_inStack.PopFromStack().ConsoleMessageProperty;
            string keyScheme = m_inStack.PopFromStack().ConsoleMessageProperty;
            string keyType   = m_inStack.PopFromStack().ConsoleMessageProperty;

            ExtractKeySchemeAndLength(cryptZMK, out zmkKL, out zmkKS);
            ExtractKeySchemeAndLength(cryptKey, out kl, out ks);
            ValidateKeyTypeCode(keyType, out LMKKeyPair, out var);

            string clearZMK = Utility.DecryptZMKEncryptedUnderLMK(new HexKey(cryptZMK).ToString(), zmkKS, 0);
            string clearKey = Utility.DecryptUnderLMK(new HexKey(cryptKey).ToString(), ks, LMKKeyPair, var);

            string cryptUnderZMK = Utility.EncryptUnderZMK(clearZMK, new HexKey(clearKey).ToString(), KeySchemeTable.GetKeySchemeFromValue(keyScheme));
            string chkVal        = TripleDES.TripleDESEncrypt(new HexKey(clearKey), ZEROES);

            return("Key encrypted under ZMK: " + MakeKeyPresentable(cryptUnderZMK) + System.Environment.NewLine +
                   "Key Check Value: " + MakeCheckValuePresentable(chkVal));
        }
Exemple #2
0
        private HexKey GetRandomKey(HexKey.KeyLength l)
        {
            switch (l)
            {
            case HexKey.KeyLength.SingleLength:
                return(new HexKey(Utility.RandomKey(true, Utility.ParityCheck.OddParity)));

            case HexKey.KeyLength.DoubleLength:
                return(new HexKey(Utility.MakeParity(Utility.RandomKey(true, Utility.ParityCheck.OddParity) + Utility.RandomKey(true, Utility.ParityCheck.OddParity), Utility.ParityCheck.OddParity)));

            default:
                return(new HexKey(Utility.MakeParity(Utility.RandomKey(true, Utility.ParityCheck.OddParity) + Utility.RandomKey(true, Utility.ParityCheck.OddParity) + Utility.RandomKey(true, Utility.ParityCheck.OddParity), Utility.ParityCheck.OddParity)));
            }
        }
        protected void ValidateKeySchemeAndLength(HexKey.KeyLength keyLen, string keyScheme, KeySchemeTable.KeyScheme ks)
        {
            switch (keyLen)
            {
            case HexKey.KeyLength.SingleLength:
                ValidateKeySchemeAndLength("1", keyScheme, out ks);
                break;

            case HexKey.KeyLength.DoubleLength:
                ValidateKeySchemeAndLength("2", keyScheme, out ks);
                break;

            case HexKey.KeyLength.TripleLength:
                ValidateKeySchemeAndLength("3", keyScheme, out ks);
                break;

            default:
                throw new Exceptions.XInvalidKeyScheme("INVALID KEY SCHEME FOR KEY LENGTH");
            }
        }