getSenderKey method

SenderMessageKey getSenderKey(
  1. SenderKeyState senderKeyState,
  2. int iteration
)

Implementation

SenderMessageKey getSenderKey(SenderKeyState senderKeyState, int iteration) {
  var senderChainKey = senderKeyState.senderChainKey;
  if (senderChainKey.iteration > iteration) {
    if (senderKeyState.hasSenderMessageKey(iteration)) {
      return senderKeyState.removeSenderMessageKey(iteration)!;
    } else {
      throw DuplicateMessageException('Received message with old counter: '
          '${senderChainKey.iteration} , $iteration');
    }
  }

  if (iteration - senderChainKey.iteration > 2000) {
    throw InvalidMessageException('Over 2000 messages into the future!');
  }

  while (senderChainKey.iteration < iteration) {
    senderKeyState.addSenderMessageKey(senderChainKey.senderMessageKey);
    senderChainKey = senderChainKey.next;
  }

  senderKeyState.senderChainKey = senderChainKey.next;
  return senderChainKey.senderMessageKey;
}