decryptPacket method

QuicDecryptedPacket decryptPacket(
  1. Uint8List packet,
  2. EncryptionLevel level
)

Implementation

QuicDecryptedPacket decryptPacket(Uint8List packet, EncryptionLevel level) {
  final keys = switch (level) {
    EncryptionLevel.initial => initialRead,
    EncryptionLevel.handshake => handshakeRead,
    EncryptionLevel.application => appRead,
  };

  if (keys == null) {
    throw StateError("No read keys for $level");
  }

  final dcidForLevel = switch (level) {
    EncryptionLevel.initial => clientOrigDcid,
    EncryptionLevel.handshake => localCid,
    EncryptionLevel.application => localCid,
  };

  final pnSpace = recvPnSpaces[level]!;

  final result = decryptQuicPacketBytes(
    packet,
    keys.key,
    keys.iv,
    keys.hp,
    dcidForLevel,
    pnSpace.largestPn,
  );

  if (result == null) {
    throw StateError("Decryption failed for $level");
  }

  pnSpace.onPacketDecrypted(result.packetNumber);
  return result;
}