removeMessageKeys method
MessageKeys?
removeMessageKeys(
- ECPublicKey senderEphemeral,
- int counter
)
Implementation
MessageKeys? removeMessageKeys(ECPublicKey senderEphemeral, int counter) {
final chainAndIndex = _getReceiverChain(senderEphemeral);
if (chainAndIndex == null) {
return null;
}
final chain = chainAndIndex.$1;
final messageKeyList = LinkedList<Entry<SessionStructureChainMessageKey>>();
chain.messageKeys.forEach((element) {
messageKeyList.add(Entry(element));
});
final messageKeyIterator = messageKeyList.iterator;
MessageKeys? result;
while (messageKeyIterator.moveNext()) {
final entry = messageKeyIterator.current;
final messageKey = entry.value;
if (messageKey.index == counter) {
final cipherKey = Uint8List.fromList(messageKey.cipherKey);
final macKey = Uint8List.fromList(messageKey.macKey);
final iv = Uint8List.fromList(messageKey.iv);
final index = messageKey.index;
result = MessageKeys(cipherKey, macKey, iv, index);
messageKeyList.remove(entry);
break;
}
}
chain.messageKeys.clear();
messageKeyList.forEach((entry) {
chain.messageKeys.add(entry.value);
});
_sessionStructure.receiverChains
.setAll(chainAndIndex.$2, <SessionStructureChain>[chain]);
return result;
}