package wire

import (
	
	

	
	
)

// ParseShortHeader parses a short header packet.
// It must be called after header protection was removed.
// Otherwise, the check for the reserved bits will (most likely) fail.
func ( []byte,  int) ( int,  protocol.PacketNumber,  protocol.PacketNumberLen,  protocol.KeyPhaseBit,  error) {
	if len() == 0 {
		return 0, 0, 0, 0, io.EOF
	}
	if [0]&0x80 > 0 {
		return 0, 0, 0, 0, errors.New("not a short header packet")
	}
	if [0]&0x40 == 0 {
		return 0, 0, 0, 0, errors.New("not a QUIC packet")
	}
	 := protocol.PacketNumberLen([0]&0b11) + 1
	if len() < 1+int()+ {
		return 0, 0, 0, 0, io.EOF
	}

	 := 1 + 
	,  := readPacketNumber([:], )
	if  != nil {
		return 0, 0, 0, 0, 
	}
	 := protocol.KeyPhaseZero
	if [0]&0b100 > 0 {
		 = protocol.KeyPhaseOne
	}

	if [0]&0x18 != 0 {
		 = ErrInvalidReservedBits
	}
	return 1 +  + int(), , , , 
}

// AppendShortHeader writes a short header.
func ( []byte,  protocol.ConnectionID,  protocol.PacketNumber,  protocol.PacketNumberLen,  protocol.KeyPhaseBit) ([]byte, error) {
	 := 0x40 | uint8(-1)
	if  == protocol.KeyPhaseOne {
		 |= byte(1 << 2)
	}
	 = append(, )
	 = append(, .Bytes()...)
	return appendPacketNumber(, , )
}

func ( protocol.ConnectionID,  protocol.PacketNumberLen) protocol.ByteCount {
	return 1 + protocol.ByteCount(.Len()) + protocol.ByteCount()
}

func ( utils.Logger,  protocol.ConnectionID,  protocol.PacketNumber,  protocol.PacketNumberLen,  protocol.KeyPhaseBit) {
	.Debugf("\tShort Header{DestConnectionID: %s, PacketNumber: %d, PacketNumberLen: %d, KeyPhase: %s}", , , , )
}