예제 #1
0
        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;
        }
예제 #3
0
        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();
        }