public void SetReceiverChainKey(IEcPublicKey senderEphemeral, ChainKey chainKey) { Pair <StorageProtos.SessionStructure.Types.Chain, uint> chainAndIndex = GetReceiverChain(senderEphemeral); StorageProtos.SessionStructure.Types.Chain chain = chainAndIndex.First(); StorageProtos.SessionStructure.Types.Chain.Types.ChainKey chainKeyStructure = StorageProtos.SessionStructure.Types.Chain.Types.ChainKey.CreateBuilder() .SetKey(ByteString.CopyFrom(chainKey.GetKey())) .SetIndex(chainKey.GetIndex()) .Build(); StorageProtos.SessionStructure.Types.Chain updatedChain = chain.ToBuilder().SetChainKey(chainKeyStructure).Build(); _sessionStructure = _sessionStructure.ToBuilder() .SetReceiverChains((int)chainAndIndex.Second(), updatedChain) // TODO: conv .Build(); }
public MessageKeys RemoveMessageKeys(IEcPublicKey senderEphemeral, uint counter) { Pair <StorageProtos.SessionStructure.Types.Chain, uint> chainAndIndex = GetReceiverChain(senderEphemeral); StorageProtos.SessionStructure.Types.Chain chain = chainAndIndex.First(); if (chain == null) { return(null); } List <StorageProtos.SessionStructure.Types.Chain.Types.MessageKey> messageKeyList = new List <StorageProtos.SessionStructure.Types.Chain.Types.MessageKey>(chain.MessageKeysList); IEnumerator <StorageProtos.SessionStructure.Types.Chain.Types.MessageKey> messageKeyIterator = messageKeyList.GetEnumerator(); MessageKeys result = null; while (messageKeyIterator.MoveNext()) //hasNext() { StorageProtos.SessionStructure.Types.Chain.Types.MessageKey messageKey = messageKeyIterator.Current; // next() if (messageKey.Index == counter) { result = new MessageKeys(messageKey.CipherKey.ToByteArray(), messageKey.MacKey.ToByteArray(), messageKey.Iv.ToByteArray(), messageKey.Index); messageKeyList.Remove(messageKey); //messageKeyIterator.remove(); break; } } StorageProtos.SessionStructure.Types.Chain updatedChain = chain.ToBuilder().ClearMessageKeys() .AddRangeMessageKeys(messageKeyList) // AddAllMessageKeys .Build(); _sessionStructure = _sessionStructure.ToBuilder() .SetReceiverChains((int)chainAndIndex.Second(), updatedChain) // TODO: conv .Build(); return(result); }
public void SetMessageKeys(IEcPublicKey senderEphemeral, MessageKeys messageKeys) { Pair <StorageProtos.SessionStructure.Types.Chain, uint> chainAndIndex = GetReceiverChain(senderEphemeral); StorageProtos.SessionStructure.Types.Chain chain = chainAndIndex.First(); StorageProtos.SessionStructure.Types.Chain.Types.MessageKey messageKeyStructure = StorageProtos.SessionStructure.Types.Chain.Types.MessageKey.CreateBuilder() .SetCipherKey(ByteString.CopyFrom(messageKeys.GetCipherKey() /*.getEncoded()*/)) .SetMacKey(ByteString.CopyFrom(messageKeys.GetMacKey() /*.getEncoded()*/)) .SetIndex(messageKeys.GetCounter()) .SetIv(ByteString.CopyFrom(messageKeys.GetIv() /*.getIV()*/)) .Build(); StorageProtos.SessionStructure.Types.Chain.Builder updatedChain = chain.ToBuilder().AddMessageKeys(messageKeyStructure); if (updatedChain.MessageKeysList.Count > MaxMessageKeys) { updatedChain.MessageKeysList.RemoveAt(0); } _sessionStructure = _sessionStructure.ToBuilder() .SetReceiverChains((int)chainAndIndex.Second(), updatedChain.Build()) // TODO: conv .Build(); }