.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.29) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{ . if \nF \{ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "fr::crypto::d2i_X509 3SSL" .TH fr::crypto::d2i_X509 3SSL "2015-12-31" "1.0.2a 1.0.2c" "OpenSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NOM" .IX Header "NOM" d2i_X509, i2d_X509, d2i_X509_bio, d2i_X509_fp, i2d_X509_bio, i2d_X509_fp \- Fonctions d'encodage et décodage X509 .SH "SYNOPSIS" .IX Header "SYNOPSIS" \&\fB #include \fR .PP \&\fB X509 *d2i_X509(X509 **\fR\fIpx\fR\fB, const unsigned char **\fR\fIin\fR\fB, int\fR \fIlen\fR\fB);\fR \fBint i2d_X509(X509 *\fR\fIx\fR\fB, unsigned char **\fR\fIout\fR\fB);\fR .PP \&\fB X509 *d2i_X509_bio(\s-1BIO\s0 *\fR\fIbp\fR\fB, X509 **\fR\fIx\fR\fB);\fR \fBX509 *d2i_X509_fp(\s-1FILE\s0 *\fR\fIfp\fR\fB, X509 **\fR\fIx\fR\fB);\fR .PP \&\fB int i2d_X509_bio(\s-1BIO\s0 *\fR\fIbp\fR\fB, X509 *\fR\fIx\fR\fB);\fR \fBint i2d_X509_fp(\s-1FILE\s0 *\fR\fIfp\fR\fB, X509 *\fR\fIx\fR\fB);\fR .PP \&\fB int i2d_re_X509_tbs(X509 *\fR\fIx\fR\fB, unsigned char **\fR\fIout\fR\fB);\fR .SH "DESCRIPTION" .IX Header "DESCRIPTION" Les routines d'encodage et décodage X509 encodent et analysent une structure \&\fBX509\fR, qui représente un certificat X509. .PP \&\fBd2i_X509\fR() essaye de décoder \fIlen\fR octets à \fB*\fR\fIin\fR. En cas de réussite, un pointeur vers la structure \fBX509\fR est renvoyé. Si une erreur survient, alors \s-1NULL\s0 est renvoyé. Si \fIpx\fR n'est pas \s-1NULL,\s0 alors la structure renvoyée est écrite en \fB*\fR\fIpx\fR. Si \fB*\fR\fIpx\fR n'est pas \s-1NULL,\s0 alors \fB*\fR\fIpx\fR est supposé contenir une structure \fBX509\fR valable et une tentative est faite pour la réutiliser. Cette fonctionnalité de « réutilisation » est présente pour compatibilité historique mais son utilisation est \fBfortement découragée\fR (consultez \fB\s-1BOGUES\s0\fR ci-dessous, et la discussion dans la section \fB\s-1VALEURS DE RETOUR\s0\fR). .PP Si l'appel a réussi, \fB*\fR\fIin\fR est incrémenté à l'octet qui suit les données analysées. .PP \&\fBi2d_X509\fR() encode la structure pointée par \fIx\fR au format \s-1DER.\s0 Si \fIout\fR n'est pas \s-1NULL,\s0 les données encodées en \s-1DER\s0 sont écrites dans le tampon à \&\fB*\fR\fIout\fR, et il est incrémenté pour pointer après les données qui viennent d'être écrites. Si la valeur de retour est négative, une erreur est survenue, sinon la taille des données encodées est renvoyée. .PP Depuis OpenSSL 0.9.7, si \fB*\fR\fIout\fR est \s-1NULL,\s0 une allocation de mémoire sera faite pour un tampon et les données encodées y seront écrites. Dans ce cas, \&\fB*\fR\fIout\fR n'est pas incrémenté et il pointe au début des données qui viennent d'être écrites. .PP \&\fBd2i_X509_bio\fR() est similaire à \fBd2i_X509\fR(), à la différence qu'elle essaye d'analyser les données du \s-1BIO \s0\fIbp\fR. .PP \&\fBd2i_X509_fp\fR() est similaire à \fBd2i_X509\fR(), à la différence qu'elle essaye d'analyser les données du pointeur \s-1FILE \s0\fIfp\fR. .PP \&\fBi2d_X509_bio\fR() est similaire à \fBi2d_X509\fR(), à la différence qu'elle écrit l'encodage de la structure \fIx\fR dans le \s-1BIO \s0\fIbp\fR et renvoie \fB1\fR en cas de réussite et \fB0\fR en cas d'échec. .PP \&\fBi2d_X509_fp\fR() est similaire à \fBi2d_X509\fR(), à la différence qu'elle écrit l'encodage de la structure \fIx\fR dans le pointeur \s-1FILE \s0\fIfp\fR et renvoie \&\fB1\fR en cas de réussite et \fB0\fR en cas d'échec. .PP \&\fBi2d_re_X509_tbs\fR() est similaire à \fBi2d_X509\fR() à part qu’elle n’encode que la portion TBSCertificate du certificat. .SH "NOTES" .IX Header "NOTES" Les lettres \fIi\fR et \fId\fR, dans par exemple \fBi2d_X509\fR, signifient « interne » (c'est\-à\-dire une structure C interne) et « \s-1DER\s0 ». Ainsi, \&\fBi2d_X509\fR convertit de l'interne en \s-1DER.\s0 Le « re » dans \&\fBi2d_re_X509_tbs\fR() indique le « réencodage », et assure qu’un encodage frais est créé si l’objet a été modifié après création (consultez la section \&\fB\s-1BOGUES\s0\fR). .PP Les fonctions peuvent aussi comprendre les formes \fB\s-1BER\s0\fR. .PP La structure X509 vraiment passée à \fBi2d_X509\fR() doit être une structure \&\fBX509\fR peuplée valable. Elle ne peut \fBpas\fR être simplement alimentée par une structure vide comme celle renvoyée par \fBX509_new\fR(). .PP Les données encodées sont en forme binaire et peuvent contenir des zéros embarqués. Ainsi tous les pointeurs \s-1FILE\s0 ou \s-1BIO\s0 devraient être ouverts en mode binaire. Les fonctions comme \fBstrlen\fR() ne renverront \fBpas\fR la taille adéquate de structure encodée. .PP Les façons d'incrémenter \fB*\fR\fIin\fR et \fB*\fR\fIout\fR après l'opération peuvent piéger les imprudents. Consulter la section \fB\s-1AVERTISSEMENTS\s0\fR qui indique quelques erreurs habituelles. .PP Le comportement de l'incrément automatique sert à refléter une utilisation typique des fonctions \s-1ASN1 :\s0 après qu'une structure soit encodée ou décodée, une autre sera traitée à sa suite. .SH "EXEMPLES" .IX Header "EXEMPLES" Allouer et encoder l'encodage \s-1DER\s0 d'une structure X509 : .PP .Vb 2 \& int len; \& unsigned char *buf, *p; \& \& len = i2d_X509(x, NULL); \& \& buf = OPENSSL_malloc(len); \& \& if (buf == NULL) \& /* erreur */ \& \& p = buf; \& \& i2d_X509(x, &p); .Ve .PP À partir d'OpenSSL 0.9.7, cela peut être simplifié en : .PP .Vb 2 \& int len; \& unsigned char *buf; \& \& buf = NULL; \& \& len = i2d_X509(x, &buf); \& \& if (len < 0) \& /* erreur */ .Ve .PP Essayer de décoder un tampon : .PP .Vb 1 \& X509 *x; \& \& unsigned char *buf, *p; \& \& int len; \& \& /* Quelque chose pour définir buf et len */ \& \& p = buf; \& \& x = d2i_X509(NULL, &p, len); \& \& if (x == NULL) \& /* Quelques erreurs */ .Ve .PP Technique alternative : .PP .Vb 1 \& X509 *x; \& \& unsigned char *buf, *p; \& \& int len; \& \& /* Quelque chose pour définir buf et len */ \& \& p = buf; \& \& x = NULL; \& \& if(!d2i_X509(&x, &p, len)) \& /* Quelques erreurs */ .Ve .SH "AVERTISSEMENTS" .IX Header "AVERTISSEMENTS" L'utilisation d'une variable temporaire est obligatoire. Une erreur habituelle est d'essayer d'utiliser un tampon directement comme ceci : .PP .Vb 2 \& int len; \& unsigned char *buf; \& \& len = i2d_X509(x, NULL); \& \& buf = OPENSSL_malloc(len); \& \& if (buf == NULL) \& /* erreur */ \& \& i2d_X509(x, &buf); \& \& /* Autres choses… */ \& \& OPENSSL_free(buf); .Ve .PP Ce code aura pour résultat un \fIbuf\fR contenant apparemment n'importe quoi parce qu'il a été incrémenté après l'appel pour pointer après les données qui viennent d'être écrites. Ainsi \fIbuf\fR ne contiendra plus le pointeur alloué par \fBOPENSSL_malloc\fR() et l'appel suivant de \fBOPENSSL_malloc\fR() pourrait sans doute planter. .PP La fonctionnalité d'allocation automatique (configurant \fIbuf\fR à \s-1NULL\s0) ne fonctionne qu'à partir d'OpenSSL 0.9.7. Essayer de l'utiliser avec des versions précédentes provoquera typiquement une violation de segmentation. .PP Un autre piège à éviter est la mauvaise utilisation de l'argument \fIxp\fR de \&\fBd2i_X509\fR() : .PP .Vb 1 \& X509 *x; \& \& if (!d2i_X509(&x, &p, len)) \& /* Quelques erreurs */ .Ve .PP Cela plantera probablement quelque part dans \fBd2i_X509\fR(). La raison à cela et que la variable \fIx\fR est désinitialisée et qu'il y aura une tentative d'interpréter sa valeur (incorrecte) comme une structure \fBX509\fR, provoquant typiquement une violation de segmentation. Si \fIx\fR est définie à \s-1NULL\s0 d'abord, alors ça n'arrivera pas. .SH "BOGUES" .IX Header "BOGUES" Dans certaines version d'OpenSSL, le comportement de « réutilisation » de \&\fBd2i_X509\fR(), quand \fB*\fR\fIpx\fR est correct, est cassé et certaines parties de la structure réutilisée pourraient persister si elles ne sont pas présentes dans la nouvelle. Par conséquent, l'utilisation de ce comportement de « réutilisation » est fortement déconseillée. .PP \&\fBi2d_X509\fR() ne renverra pas d'erreur dans plusieurs versions d'OpenSSL : si des champs obligatoires ne sont pas initialisés à cause d'une erreur de programmation, alors la structure encodée pourrait contenir des données incorrectes ou omettre les champs complètement et ne sera pas analysée par \&\fBd2i_X509\fR(). Cela pourrait être corrigé plus tard, de telle sorte que le code ne devrait pas supposer pas que \fBi2d_X509\fR() réussira toujours. .PP L’encodage de la portion TBSCertificate d’un certificat est mise en cache dans la structure \fBX509\fR interne pour améliorer les performances d’encodage et s’assurer que les signatures de certificat sont vérifiées correctement dans certains certificats avec des encodages (non \s-1DER\s0) cassés. .PP Toutes les fonctions qui encodent une structure X509 comme \fBi2d_X509\fR(), \&\fBi2d_X509_fp\fR() ou \fBi2d_X509_bio\fR() pourraient renvoyer un encodage dépassé si la structure \fBX509\fR a été modifiée après désérialisation ou sérialisation précédente. .PP Si, après modification, l’objet \fBX509\fR est signé de nouveau avec \&\fBX509_sign\fR(), l’encodage est automatiquement renouvelé. Sinon, l’encodage de la portion TBSCertificate de \fBX509\fR peut être renouvelé en appelant \&\fBi2d_re_X509_tbs\fR() directement. .SH "VALEURS DE RETOUR" .IX Header "VALEURS DE RETOUR" \&\fBd2i_X509\fR(), \fBd2i_X509_bio\fR() et \fBd2i_X509_fp\fR() renvoient une structure \&\fBX509\fR valable en cas de réussite et \s-1NULL\s0 en cas d'erreur. Le code d'erreur peut être obtenu à l'aide de \fBERR_get_error\fR(3). Si la fonctionnalité de « réutilisation » a été utilisée avec une structure X509 valable, passée par \fIpx\fR, l’objet n’est pas libéré en cas d’erreur mais pourrait être dans un état potentiellement incorrect ou incohérent. .PP \&\fBi2d_X509\fR() renvoie le nombre d'octets encodés ou une valeur négative en cas d'erreur. Le code d'erreur peut être obtenu à l'aide de \&\fBERR_get_error\fR(3). .PP \&\fBi2d_X509_bio\fR() et \fBi2d_X509_fp\fR() renvoient \fB1\fR en cas de réussite et \&\fB0\fR en cas d'erreur. Le code d'erreur peut être obtenu à l'aide de \&\fBERR_get_error\fR(3). .SH "VOIR AUSSI" .IX Header "VOIR AUSSI" \&\fBERR_get_error\fR(3) .SH "HISTORIQUE" .IX Header "HISTORIQUE" d2i_X509, i2d_X509, d2i_X509_bio, d2i_X509_fp, i2d_X509_bio et i2d_X509_fp sont disponibles dans toutes les versions de SSLeay et OpenSSL. .SH "TRADUCTION" .IX Header "TRADUCTION" La traduction de cette page de manuel est maintenue par les membres de la liste . Veuillez signaler toute erreur de traduction par un rapport de bogue sur le paquet manpages-fr-extra.