Exemplo n.º 1
0
        public frmAddChat()
        {
            InitializeComponent();

            _type     = BitChatNetworkType.GroupChat;
            this.Text = "Add Group Chat";
        }
Exemplo n.º 2
0
            public BitChatInfo(BinaryReader bR)
            {
                if (Encoding.ASCII.GetString(bR.ReadBytes(2)) != "BI")
                {
                    throw new BitChatException("Invalid BitChatInfo data format.");
                }

                byte version = bR.ReadByte();

                switch (version)
                {
                case 1:
                case 2:
                case 3:
                case 4:
                    if (version > 2)
                    {
                        _type = (BitChatNetworkType)bR.ReadByte();
                    }
                    else
                    {
                        _type = BitChatNetworkType.GroupChat;
                    }

                    _networkNameOrPeerEmailAddress = Encoding.UTF8.GetString(bR.ReadBytes(bR.ReadByte()));
                    _sharedSecret = Encoding.UTF8.GetString(bR.ReadBytes(bR.ReadByte()));

                    if (version > 3)
                    {
                        _networkID = new BinaryID(bR.ReadBytes(bR.ReadByte()));
                    }

                    _peerCerts = new Certificate[bR.ReadByte()];
                    for (int i = 0; i < _peerCerts.Length; i++)
                    {
                        _peerCerts[i] = new Certificate(bR);
                    }

                    _sharedFiles = new SharedFileInfo[bR.ReadByte()];
                    for (int i = 0; i < _sharedFiles.Length; i++)
                    {
                        _sharedFiles[i] = new SharedFileInfo(bR);
                    }

                    if (version > 1)
                    {
                        _trackerURIs = new Uri[bR.ReadByte()];

                        for (int i = 0; i < _trackerURIs.Length; i++)
                        {
                            _trackerURIs[i] = new Uri(Encoding.UTF8.GetString(bR.ReadBytes(bR.ReadByte())));
                        }
                    }

                    break;

                default:
                    throw new BitChatException("BitChatInfo data version not supported.");
                }
            }
        public frmAddChat(BitChatNetworkType type, string networkNameOrPeerEmailAddress)
        {
            InitializeComponent();

            _type = type;

            if (networkNameOrPeerEmailAddress != null)
            {
                txtNetworkNameOrPeerEmailAddress.Text = networkNameOrPeerEmailAddress;
            }

            if (type == BitChatNetworkType.PrivateChat)
            {
                this.Text = "Add Private Chat";

                label1.Text = "Peer's Email Address";
                label3.Text = "(case insensitive, example: [email protected])";
                label4.Text = "Both peers must use same Shared Secret and enter each other's email address.";
            }
            else
            {
                this.Text = "Add Group Chat";

                chkSendInvitation.Visible    = false;
                txtInvitationMessage.Visible = false;
                label6.Visible = false;
                label7.Visible = false;

                this.Height = 220;
            }
        }
Exemplo n.º 4
0
        public BitChatNetwork(MailAddress peerEmailAddress, string sharedSecret, BinaryID networkID, Certificate[] knownPeerCerts, IBitChatNetworkManager networkManager, ISecureChannelSecurityManager securityManager)
        {
            _type = BitChatNetworkType.PrivateChat;
            _peerEmailAddress = peerEmailAddress;
            _sharedSecret = sharedSecret;
            _networkManager = networkManager;
            _securityManager = securityManager;

            LoadPeers(knownPeerCerts);

            if (knownPeerCerts.Length > 0)
                _peerName = knownPeerCerts[0].IssuedTo.Name;

            if (networkID == null)
            {
                //compute network id
                HashAlgorithm hash = HashAlgorithm.Create("SHA1");

                byte[] peerEmailAddressHash = hash.ComputeHash(Encoding.UTF8.GetBytes(_peerEmailAddress.Address.ToLower()));
                byte[] selfEmailAddressHash = hash.ComputeHash(Encoding.UTF8.GetBytes(networkManager.GetLocalCredentials().Certificate.IssuedTo.EmailAddress.Address.ToLower()));
                byte[] salt = new byte[20];

                for (int i = 0; i < 20; i++)
                {
                    salt[i] = (byte)(peerEmailAddressHash[i] ^ selfEmailAddressHash[i]);
                }

                _networkID = new BinaryID(PBKDF2.CreateHMACSHA1(_sharedSecret, salt, 200000).GetBytes(20));
            }
            else
            {
                _networkID = networkID;
            }
        }
Exemplo n.º 5
0
        public frmAddChat()
        {
            InitializeComponent();

            _type = BitChatNetworkType.GroupChat;
            this.Text = "Add Group Chat";
        }
Exemplo n.º 6
0
 public BitChatInfo(BitChatNetworkType type, string networkNameOrPeerEmailAddress, string sharedSecret, BinaryID networkID, Certificate[] peerCerts, SharedFileInfo[] sharedFiles, Uri[] trackerURIs)
 {
     _type = type;
     _networkNameOrPeerEmailAddress = networkNameOrPeerEmailAddress;
     _sharedSecret = sharedSecret;
     _networkID    = networkID;
     _peerCerts    = peerCerts;
     _sharedFiles  = sharedFiles;
     _trackerURIs  = trackerURIs;
 }
Exemplo n.º 7
0
        public frmAddChat(BitChatNetworkType type)
        {
            InitializeComponent();

            _type = type;

            if (type == BitChatNetworkType.PrivateChat)
            {
                this.Text = "Add Private Chat";

                label1.Text = "Peer's Email Address";
                label3.Text = "(case insensitive name. example: [email protected])";
                label4.Text = "Both peers must use same Shared Secret and enter each other's email address.";
            }
        }
Exemplo n.º 8
0
        public frmAddChat(BitChatNetworkType type)
        {
            InitializeComponent();

            _type = type;

            if (type == BitChatNetworkType.PrivateChat)
            {
                this.Text = "Add Private Chat";

                label1.Text = "Peer's Email Address";
                label3.Text = "(case insensitive name. example: [email protected])";
                label4.Text = "Both peers must use same Shared Secret and enter each other's email address.";
            }
        }
Exemplo n.º 9
0
        public BitChatNetwork(string networkName, string sharedSecret, BinaryID networkID, Certificate[] knownPeerCerts, IBitChatNetworkManager networkManager, ISecureChannelSecurityManager securityManager)
        {
            _type            = BitChatNetworkType.GroupChat;
            _networkName     = networkName;
            _sharedSecret    = sharedSecret;
            _networkManager  = networkManager;
            _securityManager = securityManager;

            LoadPeers(knownPeerCerts);

            if (networkID == null)
            {
                //compute network id
                _networkID = new BinaryID(PBKDF2.CreateHMACSHA1(_sharedSecret, Encoding.UTF8.GetBytes(_networkName.ToLower()), 200000).GetBytes(20));
            }
            else
            {
                _networkID = networkID;
            }
        }
Exemplo n.º 10
0
 public BitChatInfo(BitChatNetworkType type, string networkNameOrPeerEmailAddress, string sharedSecret, BinaryNumber hashedPeerEmailAddress, BinaryNumber networkID, BinaryNumber networkSecret, string messageStoreID, byte[] messageStoreKey, long groupImageDateModified, byte[] groupImage, Certificate[] peerCerts, SharedFileInfo[] sharedFiles, Uri[] trackerURIs, bool enableTracking, bool sendInvitation, string invitationSender, string invitationMessage, BitChatNetworkStatus networkStatus, bool mute)
 {
     _type = type;
     _networkNameOrPeerEmailAddress = networkNameOrPeerEmailAddress;
     _sharedSecret           = sharedSecret;
     _hashedPeerEmailAddress = hashedPeerEmailAddress;
     _networkID              = networkID;
     _networkSecret          = networkSecret;
     _messageStoreID         = messageStoreID;
     _messageStoreKey        = messageStoreKey;
     _groupImageDateModified = groupImageDateModified;
     _groupImage             = groupImage;
     _peerCerts              = peerCerts;
     _sharedFiles            = sharedFiles;
     _trackerURIs            = trackerURIs;
     _enableTracking         = enableTracking;
     _sendInvitation         = sendInvitation;
     _invitationSender       = invitationSender;
     _invitationMessage      = invitationMessage;
     _networkStatus          = networkStatus;
     _mute = mute;
 }
Exemplo n.º 11
0
        public BitChatNetwork(MailAddress peerEmailAddress, string sharedSecret, BinaryID networkID, Certificate[] knownPeerCerts, IBitChatNetworkManager networkManager, ISecureChannelSecurityManager securityManager)
        {
            _type             = BitChatNetworkType.PrivateChat;
            _peerEmailAddress = peerEmailAddress;
            _sharedSecret     = sharedSecret;
            _networkManager   = networkManager;
            _securityManager  = securityManager;

            LoadPeers(knownPeerCerts);

            if (knownPeerCerts.Length > 0)
            {
                _peerName = knownPeerCerts[0].IssuedTo.Name;
            }

            if (networkID == null)
            {
                //compute network id
                HashAlgorithm hash = HashAlgorithm.Create("SHA1");

                byte[] peerEmailAddressHash = hash.ComputeHash(Encoding.UTF8.GetBytes(_peerEmailAddress.Address.ToLower()));
                byte[] selfEmailAddressHash = hash.ComputeHash(Encoding.UTF8.GetBytes(networkManager.GetLocalCredentials().Certificate.IssuedTo.EmailAddress.Address.ToLower()));
                byte[] salt = new byte[20];

                for (int i = 0; i < 20; i++)
                {
                    salt[i] = (byte)(peerEmailAddressHash[i] ^ selfEmailAddressHash[i]);
                }

                _networkID = new BinaryID(PBKDF2.CreateHMACSHA1(_sharedSecret, salt, 200000).GetBytes(20));
            }
            else
            {
                _networkID = networkID;
            }
        }
Exemplo n.º 12
0
            public BitChatInfo(Stream s)
            {
                BincodingDecoder decoder = new BincodingDecoder(s, "BI");

                while (true)
                {
                    Bincoding value = decoder.DecodeNext();

                    if (value.Type == BincodingType.NULL)
                    {
                        break;
                    }

                    KeyValuePair <string, Bincoding> pair = value.GetKeyValuePair();

                    switch (pair.Key)
                    {
                    case "type":
                        _type = (BitChatNetworkType)pair.Value.GetByteValue();
                        break;

                    case "network_name":
                        _networkNameOrPeerEmailAddress = pair.Value.GetStringValue();
                        break;

                    case "shared_secret":
                        _sharedSecret = pair.Value.GetStringValue();
                        break;

                    case "enable_tracking":
                        _enableTracking = pair.Value.GetBooleanValue();
                        break;

                    case "send_invitation":
                        _sendInvitation = pair.Value.GetBooleanValue();
                        break;

                    case "invitation_sender":
                        _invitationSender = pair.Value.GetStringValue();
                        break;

                    case "invitation_message":
                        _invitationMessage = pair.Value.GetStringValue();
                        break;

                    case "network_status":
                        _networkStatus = (BitChatNetworkStatus)pair.Value.GetByteValue();
                        break;

                    case "hashed_peer_email_address":
                        _hashedPeerEmailAddress = new BinaryNumber(pair.Value.Value);
                        break;

                    case "network_id":
                        _networkID = new BinaryNumber(pair.Value.Value);
                        break;

                    case "network_secret":
                        _networkSecret = new BinaryNumber(pair.Value.Value);
                        break;

                    case "message_store_id":
                        _messageStoreID = pair.Value.GetStringValue();
                        break;

                    case "message_store_key":
                        _messageStoreKey = pair.Value.Value;
                        break;

                    case "group_image_date_modified":
                        _groupImageDateModified = pair.Value.GetLongValue();
                        break;

                    case "group_image":
                        _groupImage = pair.Value.Value;
                        break;

                    case "mute":
                        _mute = pair.Value.GetBooleanValue();
                        break;

                    case "peer_certs":
                    {
                        List <Bincoding> peerCerts = pair.Value.GetList();

                        _peerCerts = new Certificate[peerCerts.Count];
                        int i = 0;

                        foreach (Bincoding item in peerCerts)
                        {
                            _peerCerts[i++] = new Certificate(item.GetValueStream());
                        }
                    }
                    break;

                    case "shared_files":
                    {
                        List <Bincoding> sharedFiles = pair.Value.GetList();

                        _sharedFiles = new SharedFileInfo[sharedFiles.Count];
                        int i = 0;

                        foreach (Bincoding item in sharedFiles)
                        {
                            _sharedFiles[i++] = new SharedFileInfo(item.GetValueStream());
                        }
                    }
                    break;

                    case "tracker_list":
                    {
                        List <Bincoding> trackerList = pair.Value.GetList();

                        _trackerURIs = new Uri[trackerList.Count];
                        int i = 0;

                        foreach (Bincoding item in trackerList)
                        {
                            _trackerURIs[i++] = new Uri(item.GetStringValue());
                        }
                    }
                    break;
                    }
                }
            }
Exemplo n.º 13
0
        public BitChatNetwork(string networkName, string sharedSecret, BinaryID networkID, Certificate[] knownPeerCerts, IBitChatNetworkManager networkManager, ISecureChannelSecurityManager securityManager)
        {
            _type = BitChatNetworkType.GroupChat;
            _networkName = networkName;
            _sharedSecret = sharedSecret;
            _networkManager = networkManager;
            _securityManager = securityManager;

            LoadPeers(knownPeerCerts);

            if (networkID == null)
            {
                //compute network id
                _networkID = new BinaryID(PBKDF2.CreateHMACSHA1(_sharedSecret, Encoding.UTF8.GetBytes(_networkName.ToLower()), 200000).GetBytes(20));
            }
            else
            {
                _networkID = networkID;
            }
        }
Exemplo n.º 14
0
            public BitChatInfo(BinaryReader bR)
            {
                if (Encoding.ASCII.GetString(bR.ReadBytes(2)) != "BI")
                    throw new BitChatException("Invalid BitChatInfo data format.");

                byte version = bR.ReadByte();

                switch (version)
                {
                    case 1:
                    case 2:
                    case 3:
                    case 4:
                        if (version > 2)
                            _type = (BitChatNetworkType)bR.ReadByte();
                        else
                            _type = BitChatNetworkType.GroupChat;

                        _networkNameOrPeerEmailAddress = Encoding.UTF8.GetString(bR.ReadBytes(bR.ReadByte()));
                        _sharedSecret = Encoding.UTF8.GetString(bR.ReadBytes(bR.ReadByte()));

                        if (version > 3)
                        {
                            int networkIDLen = bR.ReadByte();
                            if (networkIDLen > 0)
                                _networkID = new BinaryID(bR.ReadBytes(networkIDLen));
                        }

                        _peerCerts = new Certificate[bR.ReadByte()];
                        for (int i = 0; i < _peerCerts.Length; i++)
                            _peerCerts[i] = new Certificate(bR);

                        _sharedFiles = new SharedFileInfo[bR.ReadByte()];
                        for (int i = 0; i < _sharedFiles.Length; i++)
                            _sharedFiles[i] = new SharedFileInfo(bR);

                        if (version > 1)
                        {
                            _trackerURIs = new Uri[bR.ReadByte()];

                            for (int i = 0; i < _trackerURIs.Length; i++)
                                _trackerURIs[i] = new Uri(Encoding.UTF8.GetString(bR.ReadBytes(bR.ReadByte())));
                        }

                        break;

                    default:
                        throw new BitChatException("BitChatInfo data version not supported.");
                }
            }
Exemplo n.º 15
0
 public BitChatInfo(BitChatNetworkType type, string networkNameOrPeerEmailAddress, string sharedSecret, BinaryID networkID, Certificate[] peerCerts, SharedFileInfo[] sharedFiles, Uri[] trackerURIs)
 {
     _type = type;
     _networkNameOrPeerEmailAddress = networkNameOrPeerEmailAddress;
     _sharedSecret = sharedSecret;
     _networkID = networkID;
     _peerCerts = peerCerts;
     _sharedFiles = sharedFiles;
     _trackerURIs = trackerURIs;
 }