public void setMessageKeys(ECPublicKey senderEphemeral, MessageKeys messageKeys) { Pair <Chain, uint> chainAndIndex = getReceiverChain(senderEphemeral); Chain chain = chainAndIndex.first(); Chain.Types.MessageKey messageKeyStructure = 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(); Chain updatedChain = chain.ToBuilder() .AddMessageKeys(messageKeyStructure) .Build(); this.sessionStructure = this.sessionStructure.ToBuilder() .SetReceiverChains((int)chainAndIndex.second(), updatedChain) // TODO: conv .Build(); }
public void setMessageKeys(ECPublicKey senderEphemeral, MessageKeys messageKeys) { Pair <Chain, uint> chainAndIndex = getReceiverChain(senderEphemeral); Chain chain = chainAndIndex.first(); Chain.Types.MessageKey messageKeyStructure = new Chain.Types.MessageKey { CipherKey = ByteString.CopyFrom(messageKeys.getCipherKey()), MacKey = ByteString.CopyFrom(messageKeys.getMacKey()), Index = messageKeys.getCounter(), Iv = ByteString.CopyFrom(messageKeys.getIv()) }; chain.MessageKeys.Add(messageKeyStructure); if (chain.MessageKeys.Count > MAX_MESSAGE_KEYS) { chain.MessageKeys.RemoveAt(0); } sessionStructure.ReceiverChains[(int)chainAndIndex.second()] = chain; }
public MessageKeys removeMessageKeys(ECPublicKey senderEphemeral, uint counter) { Pair <Chain, uint> chainAndIndex = getReceiverChain(senderEphemeral); Chain chain = chainAndIndex.first(); if (chain == null) { return(null); } List <Chain.Types.MessageKey> messageKeyList = new List <Chain.Types.MessageKey>(chain.MessageKeysList); IEnumerator <Chain.Types.MessageKey> messageKeyIterator = messageKeyList.GetEnumerator(); MessageKeys result = null; while (messageKeyIterator.MoveNext()) //hasNext() { 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; } } Chain updatedChain = chain.ToBuilder().ClearMessageKeys() .AddRangeMessageKeys(messageKeyList) // AddAllMessageKeys .Build(); this.sessionStructure = this.sessionStructure.ToBuilder() .SetReceiverChains((int)chainAndIndex.second(), updatedChain) // TODO: conv .Build(); return(result); }
public void setMessageKeys(ECPublicKey senderEphemeral, MessageKeys messageKeys) { Pair <Chain, uint> chainAndIndex = getReceiverChain(senderEphemeral); Chain chain = chainAndIndex.first(); Chain.Types.MessageKey messageKeyStructure = Chain.Types.MessageKey.CreateBuilder() .SetCipherKey(ByteString.CopyFrom(messageKeys.getCipherKey())) .SetMacKey(ByteString.CopyFrom(messageKeys.getMacKey())) .SetIndex(messageKeys.getCounter()) .SetIv(ByteString.CopyFrom(messageKeys.getIv())) .Build(); Chain.Builder updatedChain = chain.ToBuilder().AddMessageKeys(messageKeyStructure); if (updatedChain.MessageKeysList.Count > MAX_MESSAGE_KEYS) { updatedChain.MessageKeysList.RemoveAt(0); } sessionStructure = sessionStructure.ToBuilder() .SetReceiverChains((int)chainAndIndex.second(), updatedChain.Build()) .Build(); }