NOM
ASN1_generate_nconf, ASN1_generate_v3 - Fonction de génération ASN1
SYNOPSIS
ASN1_TYPE *ASN1_generate_nconf(char *str, CONF *nconf);
ASN1_TYPE *ASN1_generate_v3(char *str, X509V3_CTX *cnf);
Ces fonctions génèrent l’encodage ASN1 d’une chaîne dans une structure
ASN1_TYPE.
str contient la chaîne à encoder. nconf ou cnf contient les
informations optionnelles de configuration dans lesquelles d’autres
chaînes seront lues. nconf proviendra typiquement d’un fichier de
configuration tandis que cnf est obtenu dans une structure X509V3_CTX
qui sera typiquement utilisée par les fonctions d’extension de
certificats X509v3. cnf ou nconf peuvent valoir NULL si aucune
configuration additionnelle ne sera utilisée.
FORMAT DES CHAÎNES DE GÉNÉRATION
Les données effectivement encodées sont déterminées par la chaîne str
et les informations de configuration. Le format général de la chaîne
est:
[modificateur,]type[:valeur]
CV’est-à-dire zéro modificateur ou plus séparés par des virgules suivit
d’un type, lui-même suivit de façon optionnelle par un signe deux-point
et une valeur. Les formats de type, valeur et modificateur sont décrits
ci-dessous.
TYPES PRIS EN CHARGE
Les types pris en charge sont listés ci-dessous. À moinsque ce ne soit
spécifié explicitement, seul le format ASCII est autorisé.
BOOLEAN, BOOL
Encoder un type booléen. La chaîne valeur est obligatoire et devrait
valoir soit TRUE soit FALSE. Les valeurs TRUE, true, Y, y, YES, yes,
FALSE, false, N, n, NO et no sont acceptées.
NULL
Encoder le type NULL, la chaîne valeur ne doit pas être présente.
INTEGER, INT
Encoder un type ASN1 INTEGER. La chaîne valeur représente la valeur
de l’entier. Elle peut être précédée d’un signe moins et est
normalement interprétée comme une valeur décimale à moins que le
préfixe 0x soit inclus.
ENUMERATED, ENUM
Encoder un type ASN1 ENUMERATED, par ailleur identique à INTEGER.
OBJECT, OID
Encoder untype ASN1 OBJECT IDENTIFIER, la chaîne valeur peut être un
nom court, un nom long ou un format numérique.
UTCTIME, UTC
Encoder une structure ASN1 UTCTime. La valeur doit être au format
AAMMDDHHMMSSZ.
GENERALIZEDTIME, GENTIME
Encoder une structure ASN1 GeneralizedTime. La valeur doit être au
format AAAAMMDDHHMMSSZ.
OCTETSTRING, OCT
Encoder un type ASN1 OCTET STRING. La valeur représente le contenu de
cette structure. Les chaînes de format ASCII et HEX peuvent être
utilisées pour indiquer le format de valeur.
BITSTRING, BITSTR
Encoder un type ASN1 BIT STRING. La valeur représente le contenu de
cette structure. Les chaînes de format ASCII, HEX et BITLIST peuvent
être utilisées pour indiquer le format de valeur.
Si le format diffère de BITLIST, le nombre de bits non utilisés est
mis à zéro.
UNIVERSALSTRING, UNIV, IA5, IA5STRING, UTF8, UTF8String, BMP,
BMPSTRING, VISIBLESTRING, VISIBLE, PRINTABLESTRING, PRINTABLE, T61,
T61STRING, TELETEXSTRING, GeneralString
Encoder les types de chaîne correspondant. La valeur représente le
contenu de cette structure.Le format peut être ASCII ou UTF8.
SEQUENCE, SEQ, SET
Formater le résultat en tant que type ASN1 SEQUENCE ou SET. La valeur
devrait être un nom de section qui contiendra le contenu. Les noms
des champs de la section sont ignorés et les valeurs sont au format
de la chaîne générée. Si valeur est absent, alors une SEQUENCE vide
sera encodée.
MODIFICATEURS
Les modificateurs affectent les structures suivantes. Ils peuvent être
utilisés pour ajouter des étiquettes EXPLICIT ou IMPLICIT, ajouter des
enveloppes ou changer le format de chaîne du type et de la valeur
finale. Les formats pris en charge sont documentés ci-dessous.
EXPLICIT, EXP
Ajouter une étiquette explicite à la structure suivante. Cette chaîne
devrait être suivie par un deux-points et la valeur de l’étiquette à
utiliser sous forme numérique décimale.
En faisant suivre le nombre d’un U, A, P ou C, une étiquette de type
UNIVERSAL, APPLICATION, PRIVATE ou CONTEXT SPECIFIC peut être
utilisée (CONTEXT SPECIFIC par défaut).
IMPLICIT, IMP
Identique à EXPLICIT sauf qu’un étiquetage IMPLICIT est utilisé à la
place.
OCTWRAP, SEQWRAP, SETWRAP, BITWRAP
La structure suivante est entourée par une OCTET STRING, une
SEQUENCE, un SET ou une BIT STRING respectivement. Pour une BIT
STRING, le nombre de bits non utilisés est mis à zéro.
FORMAT
Ceci spécifie le format de la valeur finale. Il devrait être suivi
par un signe deux-points et une des chaînes ASCII, UTF8, HEX ou
BITLIST.
Si aucune chaîne de format n’est inclue alors ASCII est utilisée. Si
UTF8 est spécifiée alors la chaîne valeur doit être une chaîne UTF8
correcte. Pour le format HEX la sortie doit être un ensemble de
chiffres hexadécimaux. BITLIST (qui n’est correct que pour une BIT
STRING) est la liste des index des bits positionnés séparés par des
virgules, tous les autres bits valent zéro.
EXEMPLES
Une IA5String simple:
IA5STRING:Hello World
Une IA5String étiquettée explicitement:
EXPLICIT:0,IA5STRING:Hello World
Une IA5String étiquettée explicitement et utilisant une étiquette
APPLICATION:
EXPLICIT:0A,IA5STRING:Hello World
Une BITSTRING avec les bits 1 et 5activés et tous les autres à zéro:
FORMAT=BITLIST,BITSTRING:1,5
Un exemple plus complexe utilisant un fichier de configuration pour
produire une SEQUENCE constituée d’un BOOL, d’un OID et d’une
UTF8String:
asn1 = SEQUENCE:seq_section
[seq_section]
field1 = BOOLEAN:TRUE
field2 = OID:commonName
field3 = UTF8:Third field
Cet exemple produit une structure RSAPrivateKey. Il s’agit de la clé
contenue dans le fichier client.pem de toute distribution OpenSSL
(note: les noms des champs comme «coeff» sont ignorés et ne sont
présent que pour des raisons de clarté.
asn1=SEQUENCE:private_key
[private_key]
version=INTEGER:0
n=INTEGER:0xBB6FE79432CC6EA2D8F970675A5A87BFBE1AFF0BE63E879F2AFFB93644\
D4D2C6D000430DEC66ABF47829E74B8C5108623A1C0EE8BE217B3AD8D36D5EB4FCA1D9
e=INTEGER:0x010001
d=INTEGER:0x6F05EAD2F27FFAEC84BEC360C4B928FD5F3A9865D0FCAAD291E2A52F4A\
F810DC6373278C006A0ABBA27DC8C63BF97F7E666E27C5284D7D3B1FFFE16B7A87B51D
p=INTEGER:0xF3929B9435608F8A22C208D86795271D54EBDFB09DDEF539AB083DA912\
D4BD57
q=INTEGER:0xC50016F89DFF2561347ED1186A46E150E28BF2D0F539A1594BBD7FE467\
46EC4F
exp1=INTEGER:0x9E7D4326C924AFC1DEA40B45650134966D6F9DFA3A7F9D698CD4ABEA\
9C0A39B9
exp2=INTEGER:0xBA84003BB95355AFB7C50DF140C60513D0BA51D637272E355E397779\
E7B2458F
coeff=INTEGER:0x30B9E4F2AFA5AC679F920FC83F1F2DF1BAF1779CF989447FABC2F5\
628657053A
Cet exemple est la clé publique correspondante dan,s une structure
SubjectPublicKeyInfo:
# Start with a SEQUENCE
asn1=SEQUENCE:pubkeyinfo
# pubkeyinfo contains an algorithm identifier and the public key wrapped
# in a BIT STRING
[pubkeyinfo]
algorithm=SEQUENCE:rsa_alg
pubkey=BITWRAP,SEQUENCE:rsapubkey
# algorithm ID for RSA is just an OID and a NULL
[rsa_alg]
algorithm=OID:rsaEncryption
parameter=NULL
# Actual public key: modulus and exponent
[rsapubkey]
n=INTEGER:0xBB6FE79432CC6EA2D8F970675A5A87BFBE1AFF0BE63E879F2AFFB93644\
D4D2C6D000430DEC66ABF47829E74B8C5108623A1C0EE8BE217B3AD8D36D5EB4FCA1D9
e=INTEGER:0x010001
VALEURS DE RETOUR
ASN1_generate_nconf() et ASN1_generate_v3() renvoient les données
encodées sous la forme d’une structure ASN1_TYPE ou NULL si une erreur
est survenue.
Les codes d’erreur peuvent être obtenus avec ERR_get_error(3).
VOIR AUSSI
ERR_get_error(3)
HISTORIQUE
ASN1_generate_nconf() et ASN1_generate_v3() ont été ajoutées dans la
version 0.9.8 d’OpenSSL.
0.9.8k 2010-05fr::crypto::ASN1_generate_nconf(3SSL)