示例#1
0
 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);
         }
     }
 }
示例#2
0
        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");
        }
示例#3
0
        public BankRawMessage GenerateKeyExchangeRequest(NetworkManagementModel model)
        {
            HostCryptography hostCrypt = new HostCryptography();

            _log.Debug("Generating Zone Keys");
            return(GenerateZoneKeys(model, hostCrypt));
        }
示例#4
0
 public void FinaliseLogon(NetworkManagementModel model)
 {
     if (model.RespCode == "00")
     {
         _log.Info("Log on Successfull");
     }
 }
示例#5
0
 void ValidateKeyLogOnResponse(NetworkManagementModel model)
 {
     if (model.RespCode == "00")
     {
         _log.Info("Log on Successfull");
     }
 }
示例#6
0
 void ValidateKeyLogOnResponse(NetworkManagementModel model)
 {
     if (model.RespCode == "00")
     {
         _log.Debug("Logon Completed");
     }
 }
示例#7
0
        public BankRawMessage GenerateSignOnResponse(NetworkManagementModel model)
        {
            HostCryptography hostCrypt = new HostCryptography();

            _log.Debug("Generating Validation Response");
            return(GenerateValidationResponse(model, hostCrypt));
        }
示例#8
0
        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)));
        }
示例#9
0
        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");
                }
            }
        }
示例#10
0
        public BankRawMessage GenerateSignOnRequest()
        {
            NetworkManagementModel model = new NetworkManagementModel();

            HostCryptography hostCrypt = new HostCryptography();

            _log.Debug("Generating Validation Request");
            return(GenerateValidationRequest(model, hostCrypt));
        }
示例#11
0
        public void FinaliseKeyExchange()
        {
            NetworkManagementModel model = _baseModel as NetworkManagementModel;

            using (Session2805Data data = new Session2805Data())
            {
                ValidateKeyExchangeResponse(model, data);
            }
        }
示例#12
0
        private bool FinaliseKeyExchange()
        {
            NetworkManagementModel model = _lastReceivedMessageFromBank as NetworkManagementModel;

            using (Session2805Data data = new Session2805Data())
            {
                return(ValidateKeyExchangeResponse(model, data));
            }
        }
示例#13
0
        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));
            }
        }
示例#14
0
        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));
            }
        }
示例#15
0
        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());
        }
示例#16
0
        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);
        }
示例#17
0
        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");
            }
        }
示例#18
0
        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");
        }
示例#19
0
        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)));
        }
示例#20
0
        public void FinaliseLogon()
        {
            NetworkManagementModel model = _baseModel as NetworkManagementModel;

            ValidateKeyLogOnResponse(model);
        }
示例#21
0
        private void FinaliseLogon()
        {
            NetworkManagementModel model = _lastReceivedMessageFromBank as NetworkManagementModel;

            ValidateKeyLogOnResponse(model);
        }