public override void Dispatch(byte[] dat, byte tag)
            {
                KcpData data = new KcpData();

                data.dat = dat;
                data.tag = tag;
                datas.Enqueue(data);
            }
예제 #2
0
        public ProtectedKey(CompositeKey compositeKey, KeyCipher keyCipher)
        {
            var password = keyCipher.GeneratePassword();

            _protectedPassword = keyCipher.Protect(password);
            _keys = new List <KcpData>();

            foreach (var key in compositeKey.UserKeys)
            {
                KcpData data;

                var p  = key as KcpPassword;
                var kf = key as KcpKeyFile;
                var ck = key as KcpCustomKey;

                if (p != null)
                {
                    if (p.Password != null)
                    {
                        data = new KcpData(KcpType.kcpPassword, keyCipher.Encrypt(p.Password, password));
                    }
                    else
                    {
                        data = new KcpData(KcpType.kcpCustomKey, keyCipher.Encrypt(p.KeyData, password), p.ToString());
                    }
                }
                else if (kf != null)
                {
                    data = new KcpData(KcpType.kcpKeyFile, keyCipher.Encrypt(new ProtectedString(false, kf.Path), password));
                }
                else if (key is KcpUserAccount)
                {
                    data = new KcpData(KcpType.kcpUserAccount);
                }
                else
                {
                    Debug.Assert(ck != null, "Unknown key type");
                    var name = ck != null ? ck.Name : key.ToString();
                    data = new KcpData(KcpType.kcpCustomKey, keyCipher.Encrypt(key.KeyData, password), name);
                }

                _keys.Add(data);
            }
        }