Ejemplo n.º 1
0
        public  void StworzKlienta()
        {
            byte[] bufor = new byte[1024];
            Kupujacy Kupujacy = new Kupujacy();

            WczytajPoczatkoweParametry();

            try
            {
                Socket KlientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

                try
                {
                    KlientSocket.Connect("127.0.0.1", 1234);
                    NetworkStream stream = new NetworkStream(KlientSocket);
                    BinaryWriter bw = new BinaryWriter(stream);
                    BinaryReader br = new BinaryReader(stream);
                   
                    //rozpoczecie Komunikacji - wysłanie pierwszej Wiadomosci
                    Console.WriteLine("* Wysyłam Wiadomość PURCHASE_INIT do Sprzedawcy");
                    Console.WriteLine("   - Nazwa marki karty klienta");
                    Console.WriteLine("   - Zapytanie o certyfikat");
                    Console.WriteLine("");

                    bw.Write(Protokol.PURCHASE_INIT);
                    string[] pierwszaWiadomosc = { Kupujacy.NazwaMarkiKarty, "Podaj Certyfikaty" };
                    foreach (string s in pierwszaWiadomosc)
                    {
                        bw.Write(s);
                    }
                    bw.Flush();

                    bool czy = true;
                    //Odczytanie Pierwszej wiadomości
                    while (czy)
                    {
                        string Odbierz = br.ReadString();

                        switch(Odbierz)
                        {
                            case Protokol.PURCHASE_INIT_RES:
                                PurchaseInitResp(bw, br);
                                //czy = false;
                                break;
                            case Protokol.PURCHASE_REQ_RES:
                                PurchaseInitResp(bw, br);
                                czy = false;
                                break;
                            default:
                                bw.Write(Protokol.BLAD);
                                Console.WriteLine("* BŁĄD W KOMUNIKACJI!");
                                czy = false;
                                break;
                        }
                    }
                    //KlientSocket.Shutdown(SocketShutdown.Both);
                    //KlientSocket.Close();
                }
                catch (ArgumentNullException ane)
                {
                    Console.WriteLine("ArgumentNullException : {0}", ane.ToString());
                }
                catch (SocketException se)
                {
                    Console.WriteLine("SocketException : {0}", se.ToString());
                }
                catch (Exception e)
                {
                    Console.WriteLine("Unexpected exception : {0}", e.ToString());
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }
Ejemplo n.º 2
0
        public void PurchaseInitResp(BinaryWriter bw, BinaryReader br)
        {
            Console.WriteLine("* Odebrałem wiadomość PURCHASE_INIT_RES od Sprzedawcy");
            Console.WriteLine("");
            string[] odebranaPierwszaWiadomoscRes = { br.ReadString(), br.ReadString() };
            int dlCS = br.ReadInt32();
            byte[] daneCertyfikatuSprzedawcy = br.ReadBytes(dlCS);
            int dlCB = br.ReadInt32();
            byte[] daneCertyfikatuBramy = br.ReadBytes(dlCB);

            X509Certificate2 certyfikatSprzedawcy = new X509Certificate2();
            certyfikatSprzedawcy.Import(daneCertyfikatuSprzedawcy);
            X509Certificate2 certyfikatBramy = new X509Certificate2();
            certyfikatBramy.Import(daneCertyfikatuBramy);

            //Uzyskanie klucza publicznego sprzedawcy z certyfikatu
            X509CertificateParser certyfikatParser = new X509CertificateParser();
            Org.BouncyCastle.X509.X509Certificate certyfikatBouncy = certyfikatParser.ReadCertificate(certyfikatSprzedawcy.GetRawCertData());
            kluczPublicznySprzedawcy = certyfikatBouncy.GetPublicKey();

            //sprawdzenie czy poprawnie przesłano wiadomość
            hashOdebranaJawnaOdpowiedz = SHA1(odebranaPierwszaWiadomoscRes[0]);
            odkodowanaShashowanaPierwszaWiadomoscRes = RsaDecrypt(odebranaPierwszaWiadomoscRes[1], kluczPublicznySprzedawcy);
            if (hashOdebranaJawnaOdpowiedz == odkodowanaShashowanaPierwszaWiadomoscRes)
            {
                Console.WriteLine("* Wiadomość PURCHASE_INIT_RES poprawnie odkodowana");
                Console.WriteLine("");

            }
            else
            {
                bw.Write(Protokol.BLAD);
                Console.WriteLine("* BŁĄD W KOMUNIKACJI!");
            }

            //tu wysyła drugą wiadomość
            string identyfikatorTransakcji = "1111";


            string drugaWiadomosc_OIsum = "OrderInformation" + " " + identyfikatorTransakcji;
            string drugaWiadomosc_PIsum = new Kupujacy().NumerKarty + " " + identyfikatorTransakcji;

            string hashDrugaWiadomosc_OI = SHA1(drugaWiadomosc_OIsum);
            string hashDrugaWiadomosc_PI = SHA1(drugaWiadomosc_PIsum);

            string DrugaWiadomoscOPI = hashDrugaWiadomosc_OI + hashDrugaWiadomosc_PI;
            string hashDrugaWiadomoscOPI = SHA1(DrugaWiadomoscOPI);

            string zakodowanaHashDrugaWiadomoscOPI = RsaEncrypt(hashDrugaWiadomoscOPI, kluczPrywatnyKlienta); //dla Klienta

            string zakodowanaHashDrugaWiadomoscOPIDlaBramy = RsaEncrypt(hashDrugaWiadomoscOPI, kluczPublicznyBramyTylkoDlaKlienta);
            string WiadomoscPlatniczaDlaBramy = drugaWiadomosc_PIsum + " " + zakodowanaHashDrugaWiadomoscOPIDlaBramy;

            byte[] certyfikatKlientaDoWyslania = certyfikatKlienta.GetRawCertData();
            int dlCK = certyfikatKlientaDoWyslania.Length;

            bw.Write(Protokol.PURCHASE_REQ);

            Console.WriteLine("* Wysyłam Wiadomość PURCHASE_REQ do Sprzedawcy");
            Console.WriteLine("   - Jawna wiadomość dotycząca  zamówienia");
            Console.WriteLine("   - Hash wiadomości dotyczącej płatności");
            Console.WriteLine("   - Zakodowany hash wiadomości dotyczącej płatności i zamówienia");
            Console.WriteLine("   - Zakodowana wiadomość platnicza dla bramy");
            Console.WriteLine("   - Certyfikat Klienta");
            Console.WriteLine("");

            bw.Write(WiadomoscPlatniczaDlaBramy);
            bw.Write(hashDrugaWiadomosc_PI);
            bw.Write(drugaWiadomosc_OIsum);
            bw.Write(zakodowanaHashDrugaWiadomoscOPI);//dla sprzedawcy
            bw.Write(dlCK);
            bw.Write(certyfikatKlientaDoWyslania);
        }