INTEGER (API de registro de certificado)
Os valores inteiros são codificados em um trigêmeo TLV que começa com um valor tag de 0x02. O campo Valor do trigêmeo TLV contém o inteiro codificado se for positivo ou o complemento de seus dois se for negativo. Se o inteiro for positivo, mas o bit de ordem alta for definido como 1, um 0x00 à esquerda será adicionado ao conteúdo para indicar que o número não é negativo. Por exemplo, o byte de ordem alta de 0x8F (10001111) é 1. Portanto, um byte zero à esquerda é adicionado ao conteúdo, conforme mostrado na ilustração a seguir.
Se o inteiro contiver menos de 128 bytes, o campo Comprimento exigirá apenas um byte para especificar o comprimento do conteúdo. Se o inteiro for maior que 127 bytes, o bit 7 do campo Comprimento será definido como 1 e os bits 6 a 0 especificarão o número de bytes adicionais usados para identificar o comprimento do conteúdo. Para obter mais informações, consulte Bytes de valor e comprimento codificados.
O exemplo a seguir, do ASN.1 codificado em PKCS nº 10, mostra a codificação de uma chave pública de 128 bytes. O primeiro byte contém o valor tag para o tipo de dados INTEGER , 0x02. O segundo e o terceiro bytes contêm o valor Length . O bit 7 do segundo byte é definido como 1 porque há mais de 127 bytes de conteúdo. Os bits 0 a 6 do segundo byte especificam o número de bytes à direita necessários, neste caso, para especificar com precisão o comprimento do conteúdo. O terceiro byte especifica o número de bytes de conteúdo, 0x81. O quarto byte, 0x00, é adicionado ao conteúdo para indicar que o inteiro é de fato um valor positivo, embora o bit de sinal do byte de conteúdo à esquerda (0x8F) esteja definido como 1.
02 81 81 ; INTEGER (81 Bytes)
| 00
| 8f e2 41 2a 08 e8 51 a8 8c b3 e8 53 e7 d5 49 50
| b3 27 8a 2b cb ea b5 42 73 ea 02 57 cc 65 33 ee
| 88 20 61 a1 17 56 c1 24 18 e3 a8 08 d3 be d9 31
| f3 37 0b 94 b8 cc 43 08 0b 70 24 f7 9c b1 8d 5d
| d6 6d 82 d0 54 09 84 f8 9f 97 01 75 05 9c 89 d4
| d5 c9 1e c9 13 d7 2a 6b 30 91 19 d6 d4 42 e0 c4
| 9d 7c 92 71 e1 b2 2f 5c 8d ee f0 f1 17 1e d2 5f
| 31 5b b1 9c bc 20 55 bf 3a 37 42 45 75 dc 90 65
O exemplo a seguir mostra como o valor inteiro 0x03 é codificado. O byte tag contém 0x02 e o byte Length especifica que há um byte de conteúdo.
02 01 ; INTEGER (1 Bytes)
| 03
Tópicos relacionados