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)); }
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)); }
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); }
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() + "]"); } }
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); }
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())); }