示例#1
0
        public override string ProcessMessage()
        {
            LMKPairs.LMKPair         LMKKeyPair; string var = "";
            KeySchemeTable.KeyScheme ks;
            HexKey.KeyLength         kl;
            KeySchemeTable.KeyScheme zmkKS;
            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);

            if ((ks == KeySchemeTable.KeyScheme.DoubleLengthKeyVariant) || (ks == KeySchemeTable.KeyScheme.TripleLengthKeyVariant))
            {
                return("INVALID KEY SCHEME FOR ENCRYPTED KEY - MUST BE ANSI");
            }


            string clearZMK      = Utility.DecryptZMKEncryptedUnderLMK(new HexKey(cryptZMK).ToString(), zmkKS, 0);
            string clearKey      = TripleDES.TripleDESDecrypt(new HexKey(clearZMK), new HexKey(cryptKey).ToString());
            string cryptUnderLMK = Utility.EncryptUnderLMK(clearKey, KeySchemeTable.GetKeySchemeFromValue(keyScheme), LMKKeyPair, var);
            string chkVal        = TripleDES.TripleDESEncrypt(new HexKey(clearKey), ZEROES);

            return("Key under LMK: " + MakeKeyPresentable(cryptUnderLMK) + System.Environment.NewLine +
                   "Key Check Value: " + MakeCheckValuePresentable(chkVal));
        }
示例#2
0
        public override string ProcessMessage()
        {
            string data   = m_inStack.PopFromStack().ConsoleMessageProperty;
            string length = m_inStack.PopFromStack().ConsoleMessageProperty;
            string desKey = m_inStack.PopFromStack().ConsoleMessageProperty;

            if (desKey.Length != 48)
            {
                return("INVALID KEY");
            }

            if (Utility.IsParityOK(desKey, Utility.ParityCheck.OddParity) == false)
            {
                return("KEY PARITY ERROR");
            }

            if (((data.Length == 16) && (length != "S")) ||
                ((data.Length == 32) && (length != "D")) ||
                ((data.Length == 48) && (length != "T")))
            {
                return("INVALID DATA LENGTH");
            }

            HexKey hk      = new HexKey(desKey);
            string crypt   = TripleDES.TripleDESEncrypt(hk, data);
            string decrypt = TripleDES.TripleDESDecrypt(hk, data);

            return("Encrypted: " + MakeKeyPresentable(crypt) + System.Environment.NewLine + "Decrypted: " + MakeKeyPresentable(decrypt));
        }
示例#3
0
        public void TestTripleDES()
        {
            string sResult = TripleDES.TripleDESEncrypt(new HexKey("0123456789ABCDEFABCDEF0123456789"), ZEROES);

            Assert.AreEqual(sResult, "EE21F1F01A3D7C9A");
            string sResult2 = TripleDES.TripleDESDecrypt(new HexKey("0123456789ABCDEFABCDEF0123456789"), sResult);

            Assert.AreEqual(sResult2, ZEROES);
        }
示例#4
0
        public static string DecryptZMKEncryptedUnderLMK(string encryptedZMK, KeySchemeTable.KeyScheme ks, int var)
        {
            switch (ks)
            {
            case KeySchemeTable.KeyScheme.SingleDESKey:
            case KeySchemeTable.KeyScheme.DoubleLengthKeyAnsi:
            case KeySchemeTable.KeyScheme.TripleLengthKeyAnsi:
                return(TripleDES.TripleDESDecrypt(new HexKey(Cryptography.LMK.LMKStorage.LMKVariant(LMKPairs.LMKPair.Pair04_05, var)), encryptedZMK));

            case KeySchemeTable.KeyScheme.DoubleLengthKeyVariant:
            case KeySchemeTable.KeyScheme.TripleLengthKeyVariant:
                return(TripleDES.TripleDESDecryptVariant(new HexKey(Cryptography.LMK.LMKStorage.LMKVariant(LMKPairs.LMKPair.Pair04_05, var)), encryptedZMK));

            default:
                throw new InvalidOperationException("Invalid key scheme [" + ks.ToString() + "]");
            }
        }
示例#5
0
        public static string DecryptUnderLMK(string encryptedKey, KeySchemeTable.KeyScheme Target_KeyScheme, LMKPairs.LMKPair LMKKeyPair, string variantNumber)
        {
            string result = "";

            switch (Target_KeyScheme)
            {
            case KeySchemeTable.KeyScheme.SingleDESKey:
            case KeySchemeTable.KeyScheme.DoubleLengthKeyAnsi:
            case KeySchemeTable.KeyScheme.TripleLengthKeyAnsi:
            case KeySchemeTable.KeyScheme.Unspecified:
                result = TripleDES.TripleDESDecrypt(new HexKey(Cryptography.LMK.LMKStorage.LMKVariant(LMKKeyPair, Convert.ToInt32(variantNumber))), encryptedKey);
                break;

            case KeySchemeTable.KeyScheme.DoubleLengthKeyVariant:
            case KeySchemeTable.KeyScheme.TripleLengthKeyVariant:
                result = TripleDES.TripleDESDecryptVariant(new HexKey(Cryptography.LMK.LMKStorage.LMKVariant(LMKKeyPair, Convert.ToInt32(variantNumber))), encryptedKey);
                break;

            default:
                break;
            }


            switch (Target_KeyScheme)
            {
            case KeySchemeTable.KeyScheme.DoubleLengthKeyAnsi:
            case KeySchemeTable.KeyScheme.DoubleLengthKeyVariant:
            case KeySchemeTable.KeyScheme.TripleLengthKeyAnsi:
            case KeySchemeTable.KeyScheme.TripleLengthKeyVariant:
                result = KeySchemeTable.GetKeySchemeValue(Target_KeyScheme) + result;
                break;

            default:
                break;
            }

            return(result);
        }
示例#6
0
        public void TestSingleLengthDesCalculator()
        {
            HexKey k = GetRandomKey(HexKey.KeyLength.SingleLength);

            Assert.AreEqual("Encrypted: " + Breakup(TripleDES.TripleDESEncrypt(k, ZEROES)) + System.Environment.NewLine + "Decrypted: " + Breakup(TripleDES.TripleDESDecrypt(k, ZEROES)),
                            TestCommand(new string[] { k.ToString(), ZEROES }, new SingleLengthDESCalculator_N()));
        }