private SenderMessageKey GetSenderKey(SenderKeyState senderKeyState, uint iteration) { SenderChainKey senderChainKey = senderKeyState.GetSenderChainKey(); if (senderChainKey.GetIteration() > iteration) { if (senderKeyState.HasSenderMessageKey(iteration)) { return(senderKeyState.RemoveSenderMessageKey(iteration)); } else { throw new DuplicateMessageException("Received message with old counter: " + senderChainKey.GetIteration() + " , " + iteration); } } //Avoiding a uint overflow uint senderChainKeyIteration = senderChainKey.GetIteration(); if ((iteration > senderChainKeyIteration) && (iteration - senderChainKeyIteration > 2000)) { throw new InvalidMessageException("Over 2000 messages into the future!"); } while (senderChainKey.GetIteration() < iteration) { senderKeyState.AddSenderMessageKey(senderChainKey.GetSenderMessageKey()); senderChainKey = senderChainKey.GetNext(); } senderKeyState.SetSenderChainKey(senderChainKey.GetNext()); return(senderChainKey.GetSenderMessageKey()); }
public void SetSenderChainKey(SenderChainKey chainKey) { SenderKeyStateStructure.Types.SenderChainKey senderChainKeyStructure = new SenderKeyStateStructure.Types.SenderChainKey { Iteration = chainKey.GetIteration(), Seed = ByteString.CopyFrom(chainKey.GetSeed()) }; _senderKeyStateStructure.SenderChainKey = senderChainKeyStructure; }
public void SetSenderChainKey(SenderChainKey chainKey) { SenderKeyStateStructure.Types.SenderChainKey senderChainKeyStructure = SenderKeyStateStructure.Types.SenderChainKey.CreateBuilder() .SetIteration(chainKey.GetIteration()) .SetSeed(ByteString.CopyFrom(chainKey.GetSeed())) .Build(); this.senderKeyStateStructure = senderKeyStateStructure.ToBuilder() .SetSenderChainKey(senderChainKeyStructure) .Build(); }