0% encontró este documento útil (0 votos)
219 vistas26 páginas

Sintaxis ASN1

Este documento presenta la sintaxis ASN.1 y las reglas de codificación BER. Explica los tipos de datos básicos como enteros, cadenas y estructuras, así como tipos construidos como SEQUENCE, SET y CHOICE. También cubre temas como etiquetas, subtipos, valores por defecto y problemas de ambigüedad.

Cargado por

proyecto09
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
219 vistas26 páginas

Sintaxis ASN1

Este documento presenta la sintaxis ASN.1 y las reglas de codificación BER. Explica los tipos de datos básicos como enteros, cadenas y estructuras, así como tipos construidos como SEQUENCE, SET y CHOICE. También cubre temas como etiquetas, subtipos, valores por defecto y problemas de ambigüedad.

Cargado por

proyecto09
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 26

it

Sintaxis
Javier de Pedro Carracedo
[email protected]
http://it.aut.uah.es/jdp

Sintaxis ASN.1

it
Sintaxis

1.
2.
3.
4.

Introduccin
Sintaxis
Reglas de codificacin BER
Ejemplos

it
Sintaxis

Introduccin
Aplicar Sintaxis Abstracta: ASN.1
Permite definir directamente APDU s del nivel de aplicacin.
Permite definir estructuras de datos que se utilizan en el intercambio de
datos entre aplicaciones de red.

Reglas de codificacin para representar en una sintaxis de


transferencia: BER.
La denominacin de la Norma/Recomendacin es:
ASN.1
BER

ISO 8824/UIT-T X.208.


ISO 8825/UIT-T X.209.

it
Sintaxis

NOTACION
Tipo de datos: representa un conjunto de valores. Se identifican con un
nombre.
INTEGER conjunto de nmeros enteros

Instancia de un tipo: valor concreto que podemos obtener del conjunto


de un tipo.
234

Construccin de tipo:
NombreTipo ::= tipo
Ejemplo: Edad ::= INTEGER

Definicin de valor de un tipo:


nombreValor NombreTipo ::= valor
Ejemplo: paso INTEGER ::= 13
edad Edad ::= 18

it
Sintaxis

Reglas de sintaxis

La sintaxis distingue entre maysculas y minsculas.


Los nombres de tipo empiezan con mayscula.
Los nombres de los tipos primitivos se escriben con mayscula.
Los nombres de valores y de los campos de un tipo estructurado se escriben
con minscula.
El valor nulo se expresa con NULL.
Se puede poner comentario en una lnea desde la marca "--" hasta final de
lnea.

it
Sintaxis

Clases de tipo
Tipos primitivos:INTEGER, BOOLEAN, REAL, BIT STRING, OCTET STRING,
ENUMERATED, OBJECT IDENTIFIER.
Tipos predefinidos: NumericString, TeletexString, GeneralString, UTCTime,
IA5String, VideoString, CharacterString, GeneralizedTime, PrintableString,
VisibleString, CraphicString, ObjectDescriptor.
Tipos construidos:SEQUENCE. SEQUENCE OF, SET, SET OF, CHOICE.
Tipos especiales: ANY, EXTERNAL.

it
Sintaxis

1.
2.
3.
4.

Introduccin
Sintaxis
Reglas de codificacin BER
Ejemplos

it
Sintaxis

Estructura de la sintaxis
Formada por mdulos:
NombreMdulo DEFINITIONS ::=
BEGIN
Enlaces
Declaraciones de tipos y estructuras
END

Enlaces son utilizados para:


Importacin de declaraciones de otros mdulos:
IMPORT lista de declaraciones FROM mdulo
Exportacin de declaraciones:
EXPORT Lista de declaraciones

it
Sintaxis

Integer
Conjunto de Nmeros Enteros.
Precio ::= INTEGER
DiaMes ::= INTEGER { primero (1), ultimo (31)}
Intervalo ::= INTEGER (123456789..123456790) -- restriccin
primero y ultimo son sinnimos de 1 y 31 respectivamente.
diasAo INTEGER ::= 365
navidad DiaMes ::= 25

it
Sintaxis

10

Boolean
Conjunto de valores lgicos {TRUE, FALSE}
Apto ::= BOOLEAN
resultado_prueba Apto ::= TRUE

it
Sintaxis

11

Real
Conjunto de nmeros en coma flotante:
{mantisa, base, exponente}
Los valores especiales estn predefinidos: 0, PLUS-INFINITY, MINUSINFINITY.
pi REAL ::= {31415927, 10, -7}
infinito REAL ::= PLUS-INFINITY
zero REAL ::= 0

it
Sintaxis

12

Bit String
Cadenas de bits de cualquier longitud.

Registro ::= BIT STRING -- definicin de tipo


control Registro ::= '10110110'B --cadena de 8 bits
estado Registro ::= '3F7A'H -- valor de 16 bits
Flag ::= BIT STRING { b0(0), b1(1), b2(2), b3(3)} --4 bits
valor1 Flag ::= {b0, b2} -- valor '0101'B

it
Sintaxis

13

Octet String
Cadenas de octetos.

Cadena ::= OCTET STRING -- definicin de tipo


valor1 Cadena ::= '00101001 01001010 01101001'B tres octetos
valor2 Cadena ::= '34BF'H -- dos octetos
valor3 Cadena ::= "Esto es un texto en ASCII"

it
Sintaxis

14

Enumerated
Conjunto Finito de valores enumerados.

Dias ::= ENUMERATED {lunes(1), martes(2), miercoles(3), jueves(4),


viernes(5), sabado(6), domingo (7)}
hoy Dias ::= martes -- equivalente a 2

it
Sintaxis

15

Object Identifier
Identifica objetos definidos en el rbol jerrquico OID de OSI.
Un valor de este tipo se puede expresar de varias formas:
Con un entero.
mib2 OBJECT IDENTIFIER ::= {1 3 6 1 2 1}

Con un nombre equivalente al entero.


mib2 OBJECT IDENTIFIER ::= {iso org dod internet mgmt 1}

Con un nombre y el entero equivalente entre parntesis.


mib2 OBJECT IDENTIFIER ::= {iso org dod internet(6) mgmt(2) 1}

Ejemplo:
ip OBJECT IDENTIFIER ::={mib-2 4}

it
Sintaxis

16

Tipos Predefinidos
Tipo IA5String (International Alphabet number 5): similar al alfabeto ASCII, pero
adaptado a versiones nacionales, donde podran incluirse acentos y, en general,
caracteres especficos de la lengua autctona.
valor1 IA5String ::= "Esto es una cadena de caracteres ASCII"
Tipo NumericString: Alfabeto 0 a 9, incluyendo el carcter espacio, adecuado
para marcacin telefnica.
valor2 NumericSring ::= "12345 6 7890"
Tipo PrintableString: alfabeto adecuado para dispositivos con un repertorio
limitado de caracteres, como terminales telex. El alfabeto contempla las letras
maysculas, minsculas y los caracteres ",", "(", ")", "+", ",", "-", ".", "/",
":", "=" y "?".... No es adecuado para escribir correos electrnicos, pues no
admite el carcter @.
valor3 PrintableString ::= "A..Za..z0..9'()+,-./:=? "

it
Sintaxis

17

Tipos Predefinidos
Tipo GeneralizedTime: permite modelar la fecha y la hora por medio de
una cadena de caracteres, conforme al estndar ISO8601.
valor4 GeneralizedTime ::= "19980528142905"
-- 28 de mayo de 1998, 14:29:05

it
Sintaxis

18

Tipos Construidos
SEQUENCE: los datos se codifican siguiendo la secuencia definida en la sintaxis.
Ficha ::= SEQUENCE {
nombre IA5String,
dni NumericString,
domicilio IA5String
}

SET: no garantiza la codificacin en secuencia. En cada caso, se selecciona la


mejor alternativa.
Ficha ::= SET {
nombre IA5String,
dni NumericString,
domicilio IA5String
}

SEQUENCE OF/SET OF: Todos los campos son del mismo tipo. A efectos de
codificacin equivale a SEQUENCE/SET.
Ficha ::= SEQUENCE OF IA5String{
nombre,
domicilio}

it
Sintaxis

19

Tipos Construidos (cont.)


CHOICE: se codifica uno de los campos de la estructura.
Ficha ::= SEQUENCE {
nombre IA5String,
domicilio IA5String,
identificacion CHOICE {
dni NumericString,
nif IA5String,
pasaporte PrintableString
}
}
Al definir el valor se decide qu elemento de CHOICE se selecciona.
miFicha Ficha ::= {
nombre "Jos Lpez Snchez",
domicilio "C/ Santa Fe 11, Madrid",
identificacin {dni "23456768"}
}

it
Sintaxis

20

10

Tipos Especiales
ANY: no especifica ningn tipo concreto (conceptualmente es como CHOICE, con
un infinito nmero de alternativas), ste se asigna al codificar.
Nota ::= SEQUENCE {
origen IA5String,
destino IA5String,
mensaje ANY
}

Se puede asignar el tipo con el valor de un indicador (normalmente es


dependiente de otro componente de la estructura):
Nota ::= SEQUENCE {
indicador INTEGER,
origen IA5String,
destino IA5String,
mensaje ANY DEFINED BY indicador
}

EXTERNAL: dentro de un mdulo podemos utilizar definiciones de tipos


realizadas en otros documentos externos (definidos en otras sintaxis abstractas o
codificados con otras sintaxis de transferencia).

it
Sintaxis

21

Adjetivos
DEFAULT: declara valores por defecto en campos de una estructura.
Ficha ::= SET {
nombre IA5String,
dni NumericString,
domicilio IA5String,
nacin IA5String DEFAULT ESPAA
}

OPTIONAL: declara campos opcionales en estructuras.


Ficha ::= SET {
nombre IA5String,
dni NumericString,
domicilio IA5String,
nacin IA5String OPTIONAL
}

it
Sintaxis

22

11

Subtipos
Restriccin del alfabeto para formar cadenas:
Phone ::= IA5String ( FROM ( "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "0" | "*" | "#"
))

Restriccin del rango de valores:


DiasDelAo ::= INTEGER (1..366)

Limitacin del tamao de una estructura SEQUENCE OF o SET OF:


AsignaturasAprobadas ::= SEQUENCE SIZE (0..8) OF INTEGER

Como mximo puede tener 8 enteros.

Limitacin del conjunto de valores de un tipo:


NumerosImparesPequeos ::= INTEGER (1|3|5|7|9)

Subtipos a partir de otros subtipos:


Colores ::= ENUMERATED {rojo(1), azul(2), verde(3), negro(4), blanco(5)}
Semaforo ::= Colores (rojo|verde)

INCLUDES identifica todos los valores del tipo que le sigue:


Video ::= Colores(INCLUDES Semaforo|azul)

it
Sintaxis

23

Etiquetas
Cada tipo de datos se codifica de una forma distinta.
Las etiquetas son nmeros que se envan antes del valor para permitir al
receptor identificar los datos que va a recibir:
Tipo de sintaxis para la correcta decodificacin.
Ubicacin dentro de una estructura de datos.

Tipos de etiquetas:
Universales: etiqueta por defecto con validez universal. Su valor es estndar e
identifica el tipo de datos.
[UNIVERSAL n] -- no es necesario indicarlo en la sintaxis

Aplicacin: no puede repetirse dentro de un mdulo.


[APPLICATION n]

Privadas: validez dentro de un dominio privado (empresa, organizacin, pas).


No debe repetirse dentro de este dominio.
[PRIVATE n]

Especficas de contexto: vlido dentro de un contexto restringido


(estructura).
[n]

it
Sintaxis

24

12

Problemas de ambigedad (I)


Estructura SET con campos del mismo tipo.
Complejo ::= SET {
parteReal INTEGER,
parteImaginaria INTEGER
}

Al receptor llega:
UNIVERSAL UNIVERSAL
SET
INTEGER

UNIVERSAL
INTEGER

Ambigedad: puede interpretarse como 3+5j 5+3j.

it
Sintaxis

25

Problemas de ambigedad (II)


Estructura con varios campos del mismo tipo con el adjetivo OPTIONAL.
Identificacin ::= SEQUENCE {
dni IA5String,
nacionalidad IA5String OPTIONAL,
segundaNacionalidad IA5String OPTIONAL
}

Al receptor llega:
UNIVERSAL UNIVERSAL
SEQUENCE
IA5String

34245675

UNIVERSAL
IA5String

Francia

Ambigedad: Francia es primera o segunda nacionalidad?

it
Sintaxis

26

13

Problemas de ambigedad (III)


Estructura con varios campos del mismo tipo con el adjetivo DEFAULT.
Los valores por defecto no se codifican, ya que se supone que la aplicacin
destino conoce perfectamente la estructura de datos que espera recibir.
Dimensiones ::= SEQUENCE {
alto INTEGER DEFAULT 1,
largo INTEGER DEFAULT 1,
ancho INTEGER DEFAULT 1
}

Al receptor llega:
UNIVERSAL UNIVERSAL
SEQUENCE
INTEGER

UNIVERSAL
INTEGER

Ambigedad: se puede interpretar como (1,3,5) (3,1,5) (3,5,1).

it
Sintaxis

27

Solucin de la ambigedad
Los problemas de ambigedad se resuelven insertando etiquetas
especficas de contexto.
Complejo ::= SET {
parteReal [0] INTEGER,
parteImaginaria [1] INTEGER
}
Identificacin ::= SEQUENCE {
dni IA5String,
nacionalidad [0] IA5String OPTIONAL,
segundaNacionalidad [1] IA5String OPTIONAL
}
Dimensiones ::= SEQUENCE {
alto [0] INTEGER DEFAULT 1,
largo [1] INTEGER DEFAULT 1,
ancho [2] INTEGER DEFAULT 1
}

it
Sintaxis

28

14

Problema de redundancia
En los ejemplos de las transparencias anteriores la codificacin es:
UNIVERSAL
SET

[1]

UNIVERSAL
INTEGER

[0]

UNIVERSAL
INTEGER

En el receptor: (5+3j).
UNIVERSAL UNIVERSAL
SEQUENCE
IA5String

34245675

[1]

UNIVERSAL
IA5String

Francia

En el receptor: (dni y segundaNacionalidad).


UNIVERSAL
SEQUENCE

[0]

UNIVERSAL
INTEGER

[2]

UNIVERSAL
INTEGER

En el receptor: (3,1,5).
La solucin de la ambigedad crea un nuevo problema de redundancia de
etiquetas: las etiquetas universales no son necesarias si el valor se identifica con
etiquetas especficas de contexto.

it
Sintaxis

29

Solucin de la redundancia
El adjetivo IMPLICIT le indica al codificador que no codifique el valor de
la etiqueta que aparece a continuacin en la sintaxis.
Complejo ::= SET {
parteReal [0] IMPLICIT INTEGER,
parteImaginaria [1] IMPLICIT INTEGER
}
Identificacin ::= SEQUENCE {
dni IA5String,
nacionalidad [0] IMPLICIT IA5String OPTIONAL,
segundaNacionalidad [1] IMPLICIT IA5String OPTIONAL
}
Dimensiones ::= SEQUENCE {
alto [0] IMPLICIT INTEGER DEFAULT 1,
largo [1] IMPLICIT INTEGER DEFAULT 1,
ancho [2] IMPLICIT INTEGER DEFAULT 1
}

it
Sintaxis

30

15

Solucin de la redundancia.
La codificacin en los casos de la trasparencia anterior queda:

UNIVERSAL
SET

[1]

[0]

UNIVERSAL UNIVERSAL
SEQUENCE
IA5String

UNIVERSAL
SEQUENCE

[0]

34245675

[2]

[1]

Francia

it
Sintaxis

31

Ejemplo de ambigedad con CHOICE


DatosBuqueda ::= [APPLICATION 1] CHOICE {
nombre IA5String,
apellido IA5String,
}
APPLICATION UNIVERSAL
1
IA5String

Marcos

CHOICE no se codifica. Slo


se codifica el campo
seleccionado.

Varios campos del mismo tipo, si se selecciona uno para enviar no


sabemos si el valor Marcos se refiere a nombre o apellido.
DatosBusqueda ::= [APPLICATION 1] CHOICE {
nombre [0] IMPLICIT IA5String,
apellido [1] IMPLICIT IA5String,
}
APPLICATION
1

[1] Marcos

El valor Marco se refiere a


apellido.

it
Sintaxis

32

16

Ejemplo de sintaxis con ANY


Personas ::= [APPLICATION 1] SET {
nombre IA5String,
domicilio IA5String,
otrosDatos ANY
}

Para resolver la ambigedad y redundancia ponemos la siguiente


sintaxis.
Personas ::= [APPLICATION 1] IMPLICIT SET {
nombre [0] IMPLICIT IA5String,
domicilio [1] IMPLICIT IA5String,
otrosDatos ANY
}

IMPORTANTE: ANY nunca debe llevar el adjetivo IMPLICIT, ya que


debe codificarse siempre la etiqueta universal del tipo seleccionado.

it
Sintaxis

1.
2.
3.
4.

33

Introduccin
Sintaxis
Reglas de codificacin BER
Ejemplos

it
Sintaxis

34

17

Reglas de codificacin
BER (Basic Encode Rules) define cmo codificar los valores definidos en ASN.1
para ser transmitidos.
La codificacin de cada campo consta de tres o cuatro campos:

Tipo: etiqueta que identifica el valor.


Longitud: del valor en octetos.
Valor: (OPCIONAL) codificado segn el tipo.
Marca de fin de valor (OPCIONAL): si la longitud es indefinida.

Se utiliza la siguiente notacin: valores expresados en hexadecimal, cada octeto se


separa por un espacio en blanco.
TT LL -- comentario
VV VV VV VV --comentario

Se pueden dar codificaciones de tipos construidos (estructuras o etiquetas


explcitas).
TT LL tipo construido, --despus se codifica otro tipo
TT LL tipo primitivo, --despus viene el valor
VV VV VV VV
TT LL tipo primitivo, --despus viene el valor
VV VV

it
Sintaxis

35

Codificacin de tipo
Formato Corto
clase

C/P

Etiquetas Universales
etiqueta

0 Primitivo
1 Construido
00 UNIVERSAL
01 APPLICATION
10 Especfica de contexto
11 PRIVATE

Formato Largo: etiquetas > 30


clase

1
1
0

C/P

etiqueta

t1

t2

t3

t4

t5

t6

t7

t8

t9

t10 t11 t12 t13 t14

t15 t16 t17 t18 t19 t20 t21

Etiqueta = t1t2t3..............t20t21

BOOLEAN
INTEGER
BIT STRING
OCTET STRING
NULL
OBJECT IDENTIFIER
ObjectDescriptor

1
2
3
4
5
6
7

00001
00010
00011
00100
00101
00110
00111

EXTERNAL
REAL
ENUMERATED
SEQUENCE [OF]
SET [OF]
NumericString
PrintableString
TeletextString
VideoString
IA5String
UTCTime
GeneralizedTime
GraphicString
VisibleString
GeneralString

8
9
10
16
17
18
19
20
21
22
23
24
25
26
27

01000
01001
01010
10000
10001
10010
10011
10100
10101
10110
10111
11000
11001
11010
11011

it
Sintaxis

36

18

Codificacin de longitud
Formato Corto.
0

Datos

L
Datos de LLL..L octetos.

Formato Largo.
1
L
.
L

n
L
.
L

n
L
.
L

n
L
.
L

n
L
.
L

Datos

n
L
.
L

n
L
.
L

Los siguientes nn..n octetos


indican la longitud.

n
L
.
L

n..nn octetos que contienen


la longitud de los datos.
Datos de LLL..L octetos.

Formato Indefinido.
1

0
0

0
0

0
0

0
0

0
0

0
0

0
0

0
0

Datos

Marca de fin de datos.


(no debe estar contenida en los datos).

it
Sintaxis

37

Codificacin de BOOLEAN
Se codifica en un octeto:
FALSE: 0
TRUE: cualquier otro valor

Ejemplo: codificacin del valor FALSE.

Tipo
Longitud

Valor

0
0
0

0
0
0

0
0
0

0
0
0

0
0
0

0
0
0

0
0
0

1
1
0

01 01 [UNIVERSAL 1], LONGITUD 1


00 valor FALSE

it
Sintaxis

38

19

Codificacin de INTEGER
Se codifica en complemento a dos utilizando tantos octetos como sea
necesario.
Ejemplo: codificacin del valor 31 (11100001).
Tipo
Longitud

0
0
1

Valor

0
0
1

0
0
1

0
0
0

0
0
0

0
0
0

1
0
0

0
1
1

02 01 [UNIVERSAL 2], LONGITUD 1


E1 valor -31
ENUMERATED se codifica como un entero, aunque utiliza su propia
etiqueta [UNIVERSAL 10].

it
Sintaxis

39

Codificacin de REAL
Si el valor es 0 no se codifica, el campo de longitud vale 0.
Tipo
Longitud

0
0

0
0

0
0

0
0

1
0

0
0

0
0

1
0

Para el resto de casos el primer byte de valor indica el esquema de


codificacin:
Comienza con 01: codificacin de valores especiales.

0
0

0
0

0
0

0
0

1
0

0
0

0
0

1
1

Valor

PLUS-INFINITY

Valor

MINUS-INFINITY

Tipo
Longitud

it
Sintaxis

40

20

Codificacin de REAL (cont.)


Comienza con 00: codificacin en base 10 segn ISO 6093.
Tipo
Longitud
Valor

n octetos

0 0 0 1 0 0
(n+1) octetos
0 0
Formato NR
v v v v v v v
. . . . . . .
v v v v v v v

NR
000001: NR1

v
.
v

000010: NR2

000011: NR3

Representacin del nmero real como si de una cadena de caracteres


se tratara (tipo IA5String).

it
Sintaxis

41

Codificacin de REAL (cont.)


Comienza con 1: codificacin en base 2, 8 16.
El valor se forma con la expresin:
0 0 0 0 1 0 0 1
Tipo
S*N*2F*BE
Longitud
(n+p+1) octetos
Donde S*N*2F es la mantisa.
1 S B B F F Q Q
Valor
E
.
E
N
.
N

E
.
E
N
.
N

E
.
E
N
.
N

E
.
E
N
.
N

E
.
E
N
.
N

E
.
E
N
.
N

E
.
E
N
.
N

E
.
E
N
.
N

n octetos
p octetos

S: signo de la mantisa, 0 positivo y 1 negativo.


B: base, 00 = 2, 01=8 y 10 = 16.
F: factor para calcular la mantisa, 00 = 0, 01 = 1, 10 = 2 y 11 = 3.
Q: tamao del campo E en octetos, 00 = 1, 01 = 2, 10 = 3 y 11 = en el
siguiente octeto se especifica la longitud del exponente.
E: exponente codificado como entero en complemento a 2.
N: nmero para calcular la mantisa.

it
Sintaxis

42

21

Codificacin de BIT STRING


La longitud debe ser mltiplo de 8 bits, por lo tanto incluye un campo que
indica los bits que son de de relleno.
Ejemplo: codificacin del valor 110.

Tipo
Longitud
Valor

0
0
0
1

0
0
0
1

0
0
0
0

0
0
0
X

0
0
0
X

0
0
1
X

1
1
0
X

1
0
1
X

Relleno: ltimos 5 bits

Relleno puede tomar cualquier valor

03 02 [UNIVERSAL 3], LONGITUD 2


05 C0 valor 110
Normalmente se rellena con ceros.

it
Sintaxis

43

Codificacin de OCTET STRING y derivados


Se codifican los octetos tal como son definidos.
Ejemplo: codificacin del valor 25 3F.
Tipo
Longitud
Valor

0
0
0
0

0
0
0
0

0
0
1
1

0
0
0
1

0
0
0
1

1
0
1
1

0
1
0
1

0
0
1
1

04 02 [UNIVERSAL 4], LONGITUD 2


25 3F valor 25 3F

Los tipos predefinidos derivados de OCTET


STRING (IA5String, NumericString, PrintableString, etc.)
se codifican de la misma forma, lo nico que cambia es el
valor de la etiqueta.
it
Sintaxis

44

22

Codificacin de NULL
No tiene valor, por lo tanto se codifica con longitud 0.
Tipo
Longitud

0
0

0
0

0
0

0
0

0
0

1
0

0
0

1
0

05 00 [UNIVERSAL 5], LONGITUD 0

it
Sintaxis

45

Codificacin de OBJECT IDENTIFIER


Secuencia de enteros: N1...Nk que se codifican:
N1 y N2 se codifican como el entero: 40*N1+N2
El resto N3......Nk se codifica cada entero por separado.
La codificacin de cada entero se realiza:
Se codifica en octetos por orden de mayor a menor peso.
El bit de mayor peso de cada octeto indica:
0 = ltimo octeto del entero.
0 0 0 0 0 1 1 0
1 = vienen ms enteros.
0 0 0 0 1 0 0 1
Ejemplo: 1.3.6.1.4.1.1243.1.0
0 0 1 0 1 0 1 1
0
0
0
0
1
0
0
0

40*1+3=43: 00101011
6: 00000110
1: 00000001
4: 00000100
1: 00000001

1243: 10001001 01011011


1 : 00000001
0 : 00000000

0
0
0
0
0
1
0
0

0
0
0
0
0
0
0
0

0
0
0
0
0
1
0
0

0
0
0
0
1
1
0
0

06 09
2B 06 01 04 01 89 5B 01 00

1
0
1
0
0
0
0
0

1
0
0
0
0
1
0
0

0
1
0
1
1
1
1
0

it
Sintaxis

46

23

Codificacin de ESTRUCTURAS
SEQUENCE, SEQUENCE OF: se codifica cada uno de los campos dentro
del tipo construido de etiqueta 16.
SET, SET OF: igual con etiqueta 17 (sin orden determinado).
CHOICE: no tiene asignada etiqueta ya que se codifica slo el tipo
seleccionado.
Ejemplo:
Sintaxis:

Valores:

DatosPersonales ::= SEQUENCE {

DatosPersonales ::= {

nombre IA5String,
dni

nombre "Narciso Yepes",

NumericString

dni

"19135467"

}
30 19 [UNIVERSAL 16], construido, longitud 25
16 0D [UNIVERSAL 22], primitivo, longitud 13
4E 61 72 63 69 73 6F 20 59 65 70 65 73
12 08 [UNIVERSAL 18], primitivo, longitud 8
31 39 31 33 35 34 36 37

it
Sintaxis

1.
2.
3.
4.

47

Introduccin
Sintaxis
Reglas de codificacin BER
Ejemplos

it
Sintaxis

48

24

Ejemplo 1
Sintaxis:

Valores:

DatosPersonales ::= SEQUENCE {

DatosPersonales ::= {

nombre IA5String,

nombre Antonio Sanz",

domicilio IA5String,

domicilio C/ Santa Cruz

edad

edad 25

INTEGER

30 20 [UNIVERSAL 16], construido, longitud 32


16 0C [UNIVERSAL 22], primitivo, longitud 12
41 6E 74 6F 6F 69 6F 20 53 61 6E 7A
16 0D [UNIVERSAL 22], primitivo, longitud 13
43 2F 20 53 61 6E 74 61 20 43 72 75 7A
02 01 [UNIVERSAL 2], primitivo, longitud 1
19

it
Sintaxis

49

Ejemplo 2
Le ponemos etiquetas explcitas al ejercicio anterior
DatosPersonales ::= [APPLICATION 1] SEQUENCE {
nombre [0] IA5String,
domicilio [1] IA5String,
edad [2] INTEGER
}
61 28 [APPLICATION 1], construido, longitud 40
30 26 [UNIVERSAL 16], construido, longitud 38
A0 0E [0], construido, longitud 14
16 0C [UNIVERSAL 22], primitivo, longitud 12
41 6E 74 6F 6F 69 6F 20 53 61 6E 7A
A1 0F [1], construido, longitud 15
16 0D [UNIVERSAL 22], primitivo, longitud 13
43 2F 20 53 61 6E 74 61 20 43 72 75 7A
A2 03 [2], construido, longitud 3
02 01 [UNIVERSAL 2], primitivo, longitud 1
19

it
Sintaxis

50

25

Ejemplo 3
Aadimos IMPLICIT en el ejercicio anterior.
DatosPersonales ::= [APPLICATION 1] IMPLICIT SEQUENCE {
nombre [0] IMPLICIT IA5String,
domicilio [1] IMPLICIT IA5String,
edad [2] IMPLICIT INTEGER

}
61 20 [APPLICATION 1], construido, longitud 32
80 0C [0], primitivo, longitud 12
41 6E 74 6F 6F 69 6F 20 53 61 6E 7A
81 0D [1], primitivo, longitud 13
43 2F 20 53 61 6E 74 61 20 43 72 75 7A
82 01 [2], primitivo, longitud 1
19

it
Sintaxis

51

26

También podría gustarte