public void SetWorkflow(NetworkManagementModel model) { if (_partnerState != SimulatorStates.Disconnect) { if (model.Mti == "0800" && model.NetMgtInfoCode == "001") { _log.Debug("Recieved Log On Request from Host Node"); SetState(SimulatorStates.RecievedSignOnRequest); } else if (model.Mti == "0810" && model.NetMgtInfoCode == "001") { _log.Debug("Recieved Log On Response from Host Node"); SetState(SimulatorStates.RecievedSignOnResponse); } else if (model.Mti == "0820" && model.NetMgtInfoCode == "101") { _log.Debug("Recieved Key Exchange Request from Host Node"); SetState(SimulatorStates.RecievedKeyExchangeRequest); } else if (model.Mti == "0830" && model.NetMgtInfoCode == "101") { _log.Debug("Recieved Key Exchange Response from Host Node"); SetState(SimulatorStates.RecievedKeyExchangeResponse); } } }
private BankRawMessage GenerateZoneKeys(NetworkManagementModel model, HostCryptography hostCrypt) { _zoneKeySet1 = hostCrypt.GenerateSetOfZoneKeys(_keKs); if (_zoneKeySet1["ErrorCode"] == "00") { model.Mti = "0820"; model.Stan = _rrnSequence.GetStan; model.AddtlDataPriv = _zoneKeySet1["ZAK(ZMK)"].Substring(1) + _zoneKeySet1["ZPK(ZMK)"].Substring(1); model.Mti = "0820"; model.FwdInstIdCode = 579944; model.RecvInstIdCode = 61100016; model.NetMgtInfoCode = "101"; int nodeNumber = model.SecControlInfo; using (Session2805Data data = new Session2805Data()) { data.UpdateSession_Send_as2805(_zoneKeySet1["ZPK(LMK)"], _zoneKeySet1["ZPK(ZMK)"], _zoneKeySet1["ZPK Check Value"], _zoneKeySet1["ZAK(LMK)"], _zoneKeySet1["ZAK(ZMK)"], _zoneKeySet1["ZAK Check Value"], _zoneKeySet1["ZEK(LMK)"], _zoneKeySet1["ZEK(ZMK)"], _zoneKeySet1["ZEK Check Value"], nodeNumber.ToString()); _log.Info("GenerateZoneKeys under LMK : ZAK : " + _zoneKeySet1["ZAK(LMK)"] + " ZAK check value : " + _zoneKeySet1["ZAK Check Value"] + "ZPK : " + _zoneKeySet1["ZPK(LMK)"] + "ZPK Check Value : " + _zoneKeySet1["ZPK Check Value"]); } return(new BankRawMessage(_responseBuilder.NetworkManagementAdviceRequest(model))); } _log.Error("0820 _keKs Validation Request Error"); throw new InvalidOperationException("0820 _keKs Validation Request Error"); }
public BankRawMessage GenerateKeyExchangeRequest(NetworkManagementModel model) { HostCryptography hostCrypt = new HostCryptography(); _log.Debug("Generating Zone Keys"); return(GenerateZoneKeys(model, hostCrypt)); }
public void FinaliseLogon(NetworkManagementModel model) { if (model.RespCode == "00") { _log.Info("Log on Successfull"); } }
void ValidateKeyLogOnResponse(NetworkManagementModel model) { if (model.RespCode == "00") { _log.Info("Log on Successfull"); } }
void ValidateKeyLogOnResponse(NetworkManagementModel model) { if (model.RespCode == "00") { _log.Debug("Logon Completed"); } }
public BankRawMessage GenerateSignOnResponse(NetworkManagementModel model) { HostCryptography hostCrypt = new HostCryptography(); _log.Debug("Generating Validation Response"); return(GenerateValidationResponse(model, hostCrypt)); }
private BankRawMessage TranslateZoneKeys(NetworkManagementModel model, Session2805Data data, HostCryptography hostCrypt) { var value = model.AddtlDataPriv; string zak = value.Substring(0, 32); string zpk = value.Substring(32); int node_number = model.SecControlInfo; _log.Info("Keys received under ZMK. ZAK = " + zak + " and ZPK = " + zpk); Dictionary <string, string> zoneKeySet2 = hostCrypt.TranslateSetOfZoneKeys(KEKr, zpk, zak, "11111111111111111111111111111111"); if (zoneKeySet2["ErrorCode"] == "00") { data.UpdateSession_Recieve_as2805(zoneKeySet2["ZPK(LMK)"], zpk, zoneKeySet2["ZPK Check Value"], zoneKeySet2["ZAK(LMK)"], zak, zoneKeySet2["ZAK Check Value"], zoneKeySet2["ZEK(LMK)"], zoneKeySet2["ZEK Check Value"], node_number.ToString()); _log.Info("Sent keys under LMK : ZAK : " + zoneKeySet2["ZAK(LMK)"] + " ZAK check value : " + zoneKeySet2["ZAK Check Value"] + "ZPK : " + zoneKeySet2["ZPK(LMK)"] + "ZPK Check Value : " + zoneKeySet2["ZPK Check Value"]); model.Mti = "0830"; model.RespCode = "00"; model.NetMgtInfoCode = "101"; model.AddtlDataPriv = zoneKeySet2["ZAK Check Value"] + zoneKeySet2["ZPK Check Value"]; _log.Info("Sending key exchange response"); return(new BankRawMessage(_responseBuilder.NetworkManagementAdviceResponse(model))); } _log.Error("Error Translating Set of Zone Keys"); zoneKeySet2.Clear(); SetState(SimulatorStates.Disconnect); model.RespCode = "30"; return(new BankRawMessage(_responseBuilder.NetworkManagementAdviceResponse(model))); }
private void MessageReceived(object sender, MessageEventArgs e) { lock (_syncLock) { _log.Debug("Geting Incomming Message"); BankRawMessage message = e.Message as BankRawMessage; //Server only accepts Raw messages if (message != null) { BaseModel baseModel = _factory.Create(message.RawBytes); if (baseModel is NetworkManagementModel) { NetworkManagementModel model = baseModel as NetworkManagementModel; if (model.Mti == "0800" && model.NetMgtInfoCode == "001") { _log.Debug("Recieved Log On Request from Host Node"); _log.Debug("sending Sign on Response to Host Node"); _client.SendMessage(_svc.GenerateSignOnResponse(model)); _log.Debug("sending Sign on Request to Host Node"); _client.SendMessage(_svc.GenerateKeyExchangeRequest(model)); } else if (model.Mti == "0810" && model.NetMgtInfoCode == "001") { _log.Debug("Recieved Log On Response from Host Node"); _svc.FinaliseLogon(model); } else if (model.Mti == "0820" && model.NetMgtInfoCode == "101") { _log.Debug("Recieved Key Exchange Request from Host Node"); _log.Debug("Sending Key Exchange Response to Host Node"); _client.SendMessage(_svc.GenerateKeyExchangeResponse(model)); _log.Debug("Simulator Ready to Accept Transactions"); } else if (model.Mti == "0830" && model.NetMgtInfoCode == "101") { _log.Debug("Recieved Key Exchange Response from Host Node"); _svc.FinaliseKeyExchange(model); } } else if (baseModel.Mti == "0200") { _log.Debug("Recieved Key Auth Request from Host Node"); _client.SendMessage(_svc.GenerateAuthorizationResponse(baseModel as AuthorizationRequestModel)); } else if (baseModel.Mti == "0420") { _log.Debug("Recieved Key Reversal Request from Host Node"); _client.SendMessage(_svc.GenerateReversalResponse(baseModel as ReversalRequestModel)); } } else { _log.Error("Incomming Message:: NULL"); } } }
public BankRawMessage GenerateSignOnRequest() { NetworkManagementModel model = new NetworkManagementModel(); HostCryptography hostCrypt = new HostCryptography(); _log.Debug("Generating Validation Request"); return(GenerateValidationRequest(model, hostCrypt)); }
public void FinaliseKeyExchange() { NetworkManagementModel model = _baseModel as NetworkManagementModel; using (Session2805Data data = new Session2805Data()) { ValidateKeyExchangeResponse(model, data); } }
private bool FinaliseKeyExchange() { NetworkManagementModel model = _lastReceivedMessageFromBank as NetworkManagementModel; using (Session2805Data data = new Session2805Data()) { return(ValidateKeyExchangeResponse(model, data)); } }
public BankRawMessage GenerateKeyExchangeRequest() { NetworkManagementModel model = _baseModel as NetworkManagementModel; using (Session2805Data data = new Session2805Data()) { HostCryptography hostCrypt = new HostCryptography(); _log.Debug("Generating Zone Keys"); return(GenerateZoneKeys(model, data, hostCrypt)); } }
public BankRawMessage GenerateSignOnResponse() { NetworkManagementModel model = _baseModel as NetworkManagementModel; using (Session2805Data data = new Session2805Data()) { HostCryptography hostCrypt = new HostCryptography(); _log.Debug("Generating Validation Response"); return(GenerateValidationResponse(model, data, hostCrypt)); } }
public byte[] NetworkManagementRequest(NetworkManagementModel msg) { if (string.IsNullOrEmpty(msg.Mti) || msg.Mti != "0800") { throw new ArgumentException("Mti is not valid for NetworkManagementRequest(0800)"); } var model = new AS2805Model(msg.Mti); model.SetField(7, DateTime.Now); model.SetField(11, msg.Stan); model.SetField(33, msg.FwdInstIdCode); model.SetField(48, msg.AddtlDataPriv); model.SetField(70, msg.NetMgtInfoCode); model.SetField(100, msg.RecvInstIdCode); return(model.ToBytes()); }
private void ValidateKeyExchangeResponse(NetworkManagementModel network, Session2805Data data) { string value = network.AddtlDataPriv; string KMACs_KVC = value.Substring(0, 6); string KPEs_KVC = value.Substring(6); int node_number = network.SecControlInfo; _log.Info("KMACs_KVC : " + KMACs_KVC + " KPEs_KVC : " + KPEs_KVC); if (KMACs_KVC == _zoneKeySet1["ZAK Check Value"] && KPEs_KVC == _zoneKeySet1["ZPK Check Value"]) { _log.Info("Key exchange successfull. Check values match. ZAK Check value :" + _zoneKeySet1["ZAK Check Value"] + " ZPK Check value : " + _zoneKeySet1["ZPK Check Value"]); data.UpdateSession_Send_as2805(_zoneKeySet1["ZPK(LMK)"], _zoneKeySet1["ZPK(ZMK)"], _zoneKeySet1["ZPK Check Value"], _zoneKeySet1["ZAK(LMK)"], _zoneKeySet1["ZAK(ZMK)"], _zoneKeySet1["ZAK Check Value"], _zoneKeySet1["ZEK(LMK)"], _zoneKeySet1["ZEK(ZMK)"], _zoneKeySet1["ZEK Check Value"], node_number.ToString()); _log.Info("Log on Successfull"); } SetState(SimulatorStates.Connected); }
public void FinaliseKeyExchange(NetworkManagementModel model) { string value = model.AddtlDataPriv; string kmaCsKvc = value.Substring(0, 6); string kpEsKvc = value.Substring(6); int nodeNumber = model.SecControlInfo; _log.Info("KMACs_KVC : " + kmaCsKvc + " KPEs_KVC : " + kpEsKvc); if (kmaCsKvc == _zoneKeySet1["ZAK Check Value"] && kpEsKvc == _zoneKeySet1["ZPK Check Value"]) { _log.Info("Key exchange successfull. Check values match. ZAK Check value :" + _zoneKeySet1["ZAK Check Value"] + " ZPK Check value : " + _zoneKeySet1["ZPK Check Value"]); using (Session2805Data data = new Session2805Data()) { data.UpdateSession_Send_as2805(_zoneKeySet1["ZPK(LMK)"], _zoneKeySet1["ZPK(ZMK)"], _zoneKeySet1["ZPK Check Value"], _zoneKeySet1["ZAK(LMK)"], _zoneKeySet1["ZAK(ZMK)"], _zoneKeySet1["ZAK Check Value"], _zoneKeySet1["ZEK(LMK)"], _zoneKeySet1["ZEK(ZMK)"], _zoneKeySet1["ZEK Check Value"], nodeNumber.ToString()); } _log.Info("Log on Successfull"); } }
private BankRawMessage GenerateValidationRequest(NetworkManagementModel model, HostCryptography hostCrypt) { _log.Debug("Building 0800"); //build 0800 var keksValidationRequest = hostCrypt.Generate_KEKs_Validation_Request(_keKs); if (keksValidationRequest["ErrorCode"] == "00") { string krsSent; keksValidationRequest.TryGetValue("KRs", out krsSent); model.Mti = "0800"; model.Stan = _rrnSequence.GetStan; model.FwdInstIdCode = 579944; model.NetMgtInfoCode = "001"; model.RecvInstIdCode = 61001001; model.AddtlDataPriv = krsSent; return(new BankRawMessage(_responseBuilder.NetworkManagementRequest(model))); } _log.Error("0800 _keKs Validation Request Error"); throw new InvalidOperationException("0800 _keKs Validation Request Error"); }
private BankRawMessage GenerateValidationResponse(NetworkManagementModel model, HostCryptography hostCrypt) { _log.Debug("Building 0810"); //build 0810 var krsReceived = model.AddtlDataPriv; var validationResponse = hostCrypt.Generate_KEKr_Validation_Response(_keKr, krsReceived); if (validationResponse["ErrorCode"] == "00") { model.Mti = "0810"; model.AddtlDataPriv = validationResponse["KRr"]; model.RespCode = "00"; model.NetMgtInfoCode = "001"; } else { _log.Error("0810 KRr Response Error"); model.RespCode = "30"; //format error } return(new BankRawMessage(_responseBuilder.NetworkManagementResponse(model))); }
public void FinaliseLogon() { NetworkManagementModel model = _baseModel as NetworkManagementModel; ValidateKeyLogOnResponse(model); }
private void FinaliseLogon() { NetworkManagementModel model = _lastReceivedMessageFromBank as NetworkManagementModel; ValidateKeyLogOnResponse(model); }