it
Sintaxis
Javier de Pedro Carracedo
jdp@[Link]
[Link]
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: [Link].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