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