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()) }; this.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(); }