Ejemplo n.º 1
0
        public async Task <E2EUser> GetUserById(string userId)
        {
            Guid.Parse(userId);

            await SemaphoreSlim.WaitAsync();

            try
            {
                var contact = await this.contacts.Get(userId);

                Debug.Assert(contact.Id == userId);
                E2EUser user = E2EUserSerializer.Deserialize(contact.CryptographicInformation);
                if (user == null) // for example, when the contact has just been added
                {
                    user = new E2EUser {
                        DynamicPrivateDecryptionKeys = new Dictionary <long, byte[]>()
                    }
                }
                ;
                user.UserId          = userId;
                user.StaticPublicKey = contact.StaticPublicKey;
                return(user);
            }
            finally
            {
                SemaphoreSlim.Release();
            }
        }
Ejemplo n.º 2
0
 public static byte[] Serialize(E2EUser u)
 {
     byte[] serialized = PocoSerializer.Begin()
                         //.Append(m.UserId) // Ignore
                         //.Append(m.StaticPublicKey) // Ignore
                         .Append(u.LatestDynamicPublicKey)
                         .Append(u.LatestDynamicPublicKeyId)
                         .Append(u.AuthSecret)
                         .Append(u.DynamicPrivateDecryptionKeys)
                         .Finish();
     return(serialized);
 }
Ejemplo n.º 3
0
        public async Task UpdateUser(E2EUser user)
        {
            Guid.Parse(user.UserId);

            await SemaphoreSlim.WaitAsync();

            try
            {
                Identity contact = await this.contacts.Get(user.UserId);

                var serialized = E2EUserSerializer.Serialize(user);
                contact.CryptographicInformation = serialized;
                await this.contacts.Update(contact);
            }
            finally
            {
                SemaphoreSlim.Release();
            }
        }
Ejemplo n.º 4
0
        public static E2EUser Deserialize(byte[] serializedE2EUser)
        {
            if (serializedE2EUser == null)
            {
                return(null);
            }

            try
            {
                var u   = new E2EUser();
                var ser = PocoSerializer.GetDeserializer(serializedE2EUser);
                // not setting UserId, StaticPublicKey here!
                u.LatestDynamicPublicKey   = ser.MakeByteArray(0);
                u.LatestDynamicPublicKeyId = ser.MakeInt64(1);
                u.AuthSecret = ser.MakeByteArray(2);
                u.DynamicPrivateDecryptionKeys = ser.MakeDictLongByteArray(3);

                return(u);
            }
            catch (Exception)
            {
                return(null);
            }
        }