/// <summary> /// Dohvati ObservableCollection FirebaseKorisnik /// </summary> /// <param name="response"></param> /// <returns></returns> private ObservableCollection <FirebaseKorisnik> DohvatiObservableCollection(IReadOnlyCollection <FirebaseObject <FirebaseKorisnik> > response) { ObservableCollection <FirebaseKorisnik> tempLista = new ObservableCollection <FirebaseKorisnik>(); foreach (var user in response) { FirebaseKorisnik firebaseKorisnik = user.Object; firebaseKorisnik.KljucFirebase = user.Key; tempLista.Add(user.Object); } return(tempLista); }
public Poruka(FirebaseKorisnik korisnik, Byte[] pecat, String poruka) { this.FireBaseKorisnik = korisnik; this.DigitalniPecat = pecat; this.CitkaPoruka = poruka; }
/// <summary> /// PROVJERA PECATA. Prvi element polja je dekriptirana poruka, a drugi element govori ime osobe koja je to poslala. /// U slucaju da se vrati null znaci da korisnik nije pronaden /// </summary> /// <param name="primljeniPodaci"></param> /// <returns></returns> public static String[] DekriptirajPoruku(Byte[] primljeniPodaci) { try { String[] rezultat = new String[2]; int totalnaDuljinaPolja = primljeniPodaci.Length; // Dohvati firebase kljuc osobe koja je poslala poruku int skipanje = totalnaDuljinaPolja - (StatickeVarijable.POSILJATELJ / 8); Byte[] posiljatelj = primljeniPodaci.Skip(skipanje).Take(StatickeVarijable.VELICINA_KLJUCA_RSA / 8).ToArray(); //Dohvaćane firebasekorisnik objekta na temelju kljuca String posiljateljString = Encoding.UTF8.GetString(posiljatelj); FirebaseKorisnik firebaseKorisnikPosiljatelj = TrenutniKorisnik.OnlineKorisnici .First(item => item.KljucFirebase.Equals(posiljateljString)); if (firebaseKorisnikPosiljatelj == null) { return(null); } //Potpis (kriptirano privatnim kljucem osobe koja ja poslala poruku) skipanje = totalnaDuljinaPolja - ((StatickeVarijable.VELICINA_KLJUCA_RSA / 8) + (StatickeVarijable.POSILJATELJ / 8)); Byte[] C3 = primljeniPodaci.Skip(skipanje).Take(StatickeVarijable.VELICINA_KLJUCA_RSA / 8).ToArray(); //Kriptirani tajni kljuc skipanje = totalnaDuljinaPolja - ((StatickeVarijable.VELICINA_KLJUCA_RSA / 8) + (StatickeVarijable.VELICINA_KLJUCA_RSA / 8) + (StatickeVarijable.POSILJATELJ / 8)); Byte[] C2 = primljeniPodaci.Skip(skipanje).Take(StatickeVarijable.VELICINA_KLJUCA_RSA / 8).ToArray(); //Kriptirani tekst simetricnim kljucem Byte[] C1 = primljeniPodaci.Take(skipanje).ToArray(); //Dekriptiran simetricni kljuc Byte[] simetricniKljucDekriptiran = RSA.DekriptirajTekst(C2, TrenutniKorisnik.Korisnik.PrivatniKljuc); //orginal tekst rezultat[0] = $"Sadrzaj poruke: { AES.DekriptirajTekst(C1, simetricniKljucDekriptiran) }"; //Racunamo sazetak Byte[] sazetakC1ConcatC2 = C1.Concat(C2).ToArray(); Byte[] sazetak = SHA256.IzracunajSazetak(sazetakC1ConcatC2); //Provjera potpisa if (RSA.ProvjeriPotpis(sazetak, C3, firebaseKorisnikPosiljatelj.JavniKljuc)) { rezultat[1] = "Posalo korisnik: " + firebaseKorisnikPosiljatelj.KorisnickoIme; } else { rezultat[1] = null; } return(rezultat); } catch (Exception e) { Debug.Print(new StringBuilder(StatickeVarijable.ERROR).Append(e.Message).ToString()); return(null); } }