static function parse_new_format($input, $header_start = 0)
{
$tag = ord($input[0]) & 63;
$len = ord($input[$header_start + 1]);
if ($len < 192) {
// One octet length
return array($tag, 2, $len, false);
}
if ($len > 191 && $len < 224) {
// Two octet length
return array($tag, 3, ($len - 192 << 8) + ord($input[$header_start + 2]) + 192, false);
}
if ($len == 255) {
// Five octet length
$unpacked = unpack('N', substr($input, $header_start + 2, 4));
return array($tag, 6, reset($unpacked), false);
}
// Partial body lengths
return array($tag, 2, 1 << ($len & 0x1f), true);
}