.\" 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::EVP_DigestInit 3SSL" .TH fr::crypto::EVP_DigestInit 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" EVP_MD_CTX_init, EVP_MD_CTX_create, EVP_DigestInit_ex, EVP_DigestUpdate, EVP_DigestFinal_ex, EVP_MD_CTX_cleanup, EVP_MD_CTX_destroy, \s-1EVP_MAX_MD_SIZE,\s0 EVP_MD_CTX_copy_ex, EVP_DigestInit, EVP_DigestFinal, EVP_MD_CTX_copy, EVP_MD_type, EVP_MD_pkey_type, EVP_MD_size, EVP_MD_block_size, EVP_MD_CTX_md, EVP_MD_CTX_size, EVP_MD_CTX_block_size, EVP_MD_CTX_type, EVP_md_null, EVP_md2, EVP_md5, EVP_sha, EVP_sha1, EVP_sha224, EVP_sha256, EVP_sha384, EVP_sha512, EVP_dss, EVP_dss1, EVP_mdc2, EVP_ripemd160, EVP_get_digestbyname, EVP_get_digestbynid, EVP_get_digestbyobj \- Routines \&\s-1EVP\s0 d’algorithme de hachage .SH "SYNOPSIS" .IX Header "SYNOPSIS" \&\fB #include \fR .PP \&\fB void EVP_MD_CTX_init(\s-1EVP_MD_CTX\s0 *\fR\fIctx\fR\fB);\fR \fB\s-1EVP_MD_CTX\s0 *EVP_MD_CTX_create(void);\fR .PP \&\fB int EVP_DigestInit_ex(\s-1EVP_MD_CTX\s0 *\fR\fIctx\fR\fB, const \s-1EVP_MD\s0 *\fR\fItype\fR\fB, \s-1ENGINE\s0 *\fR\fIimpl\fR\fB);\fR \fBint EVP_DigestUpdate(\s-1EVP_MD_CTX\s0 *\fR\fIctx\fR\fB, const void *\fR\fId\fR\fB, size_t\fR \fIcnt\fR\fB);\fR \fBint EVP_DigestFinal_ex(\s-1EVP_MD_CTX\s0 *\fR\fIctx\fR\fB, unsigned char *\fR\fImd\fR\fB,\fR \fBunsigned int *\fR\fIs\fR\fB);\fR .PP \&\fB int EVP_MD_CTX_cleanup(\s-1EVP_MD_CTX\s0 *\fR\fIctx\fR\fB);\fR \fBvoid EVP_MD_CTX_destroy(\s-1EVP_MD_CTX\s0 *\fR\fIctx\fR\fB);\fR .PP \&\fB int EVP_MD_CTX_copy_ex(\s-1EVP_MD_CTX\s0 *\fR\fIout\fR\fB,const \s-1EVP_MD_CTX\s0 *\fR\fIin\fR\fB);\fR .PP \&\fB int EVP_DigestInit(\s-1EVP_MD_CTX\s0 *\fR\fIctx\fR\fB, const \s-1EVP_MD\s0 *\fR\fItype\fR\fB);\fR \fBint EVP_DigestFinal(\s-1EVP_MD_CTX\s0 *\fR\fIctx\fR\fB, unsigned char *\fR\fImd\fR\fB,\fR \fBunsigned int *\fR\fIs\fR\fB);\fR .PP \&\fB int EVP_MD_CTX_copy(\s-1EVP_MD_CTX\s0 *\fR\fIout\fR\fB,EVP_MD_CTX *\fR\fIin\fR\fB);\fR .PP \&\fB #define \s-1EVP_MAX_MD_SIZE 64\s0 /* \s-1SHA512\s0 *\fR/ .PP \&\fB int EVP_MD_type(const \s-1EVP_MD\s0 *\fR\fImd\fR\fB);\fR \fBint EVP_MD_pkey_type(const \s-1EVP_MD\s0 *\fR\fImd\fR\fB);\fR \fBint EVP_MD_size(const \s-1EVP_MD\s0 *\fR\fImd\fR\fB);\fR \fBint EVP_MD_block_size(const \s-1EVP_MD\s0 *\fR\fImd\fR\fB)\fR; .PP \&\fB const \s-1EVP_MD\s0 *EVP_MD_CTX_md(const \s-1EVP_MD_CTX\s0 *\fR\fIctx\fR\fB);\fR \fB#define EVP_MD_CTX_size(e) EVP_MD_size(EVP_MD_CTX_md(e))\fR \fB#define EVP_MD_CTX_block_size(e) EVP_MD_block_size((e)\->digest)\fR \fB#define EVP_MD_CTX_type(e) EVP_MD_type((e)\->digest)\fR .PP \&\fB const \s-1EVP_MD\s0 *EVP_md_null(void);\fR \fBconst \s-1EVP_MD\s0 *EVP_md2(void);\fR \fBconst \s-1EVP_MD\s0 *EVP_md5(void);\fR \fBconst \s-1EVP_MD\s0 *EVP_sha(void);\fR \fBconst \s-1EVP_MD\s0 *EVP_sha1(void);\fR \fBconst \s-1EVP_MD\s0 *EVP_dss(void);\fR \fBconst \s-1EVP_MD\s0 *EVP_dss1(void);\fR \fBconst \s-1EVP_MD\s0 *EVP_mdc2(void);\fR \fBconst \s-1EVP_MD\s0 *EVP_ripemd160(void);\fR .PP \&\fB const \s-1EVP_MD\s0 *EVP_sha224(void);\fR \fBconst \s-1EVP_MD\s0 *EVP_sha256(void);\fR \fBconst \s-1EVP_MD\s0 *EVP_sha384(void);\fR \fBconst \s-1EVP_MD\s0 *EVP_sha512(void);\fR .PP \&\fB const \s-1EVP_MD\s0 *EVP_get_digestbyname(const char *\fR\fIname\fR\fB);\fR \fB#define EVP_get_digestbynid(a) EVP_get_digestbyname(OBJ_nid2sn(a))\fR \fB#define EVP_get_digestbyobj(a) EVP_get_digestbynid(OBJ_obj2nid(a))\fR .SH "DESCRIPTION" .IX Header "DESCRIPTION" Les routines \s-1EVP\s0 pour algorithme de hachage sont des interfaces de haut niveau pour les condensés de message. .PP \&\fBEVP_MD_CTX_init\fR() initialise le contexte \fIctx\fR du condensé de message. .PP \&\fBEVP_MD_CTX_create\fR() alloue, initialise et renvoie un contexte de condensé de message. .PP \&\fBEVP_DigestInit_ex\fR() définit un contexte de condensé de message \fIctx\fR pour utiliser un \fItype\fR d’algorithme à partir de l’ENGINE \fIimpl\fR. \fIctx\fR doit être initialisé avant d’appeler cette fonction. \fItype\fR est habituellement fourni par une fonction telle que \fBEVP_sha1\fR(). Si \fIimpl\fR est \s-1NULL,\s0 alors l’implémentation du \fItype\fR par défaut est utilisée. .PP \&\fBEVP_DigestUpdate\fR() produit un hachage de \fIcnt\fR octets de données vers \&\fId\fR dans le contexte de condensé de message \fIctx\fR. Cette fonction peut être appelée plusieurs fois pour produire un hachage de données supplémentaires. .PP \&\fBEVP_DigestFinal_ex\fR() récupère la valeur de condensé de message de \fIctx\fR et la place dans \fImd\fR. Si le paramètre \fIs\fR n’est pas \s-1NULL,\s0 le nombre d’octets de données sera écrit (c’est\-à\-dire la dimension du condensé de message) sur \fIs\fR (de type entier), au maximum \fB\s-1EVP_MAX_MD_SIZE\s0\fR octets seront écrits. Après l’appel de \fBEVP_DigestFinal_ex\fR(), aucun appel supplémentaire à \fBEVP_DigestUpdate\fR() ne pourra être fait, mais \&\fBEVP_DigestInit_ex\fR() pourra être appelée pour initialiser une nouvelle opération de condensé de message. .PP \&\fBEVP_MD_CTX_cleanup\fR() nettoie le contexte \fIctx\fR du condensé de message et devrait être appelée si ce contexte n’est plus nécessaire. .PP \&\fBEVP_MD_CTX_destroy\fR() nettoie le contexte \fIctx\fR du condensé de message et libère l’espace qui lui était alloué. Elle devrait être appelée seulement pour un contexte créé en utilisant \fBEVP_MD_CTX_create\fR(). .PP \&\fBEVP_MD_CTX_copy_ex\fR() peut être utilisée pour copier l’état du condensé de message de \fIin\fR vers \fIout\fR. Cela est utile si le hachage de grandes quantités de données, qui différent seulement par leurs derniers octets, est à réaliser. \fIout\fR doit être initialisée avant d’appeler cette fonction. .PP \&\fBEVP_DigestInit\fR() fonctionne comme \fBEVP_DigestInit_ex\fR() sauf que le contexte indiqué \fIctx\fR n’a nul besoin d’être initialisé et qu’elle utilise toujours l’algorithme implémenté par défaut. .PP \&\fBEVP_DigestFinal\fR() est similaire à \fBEVP_DigestFinal_ex\fR() sauf que le contexte du condensé de message \fIctx\fR est automatiquement nettoyé. .PP \&\fBEVP_MD_CTX_copy\fR() est similaire à \fBEVP_MD_CTX_copy_ex\fR() sauf que la destination \fIout\fR ne doit pas être initialisée. .PP \&\fBEVP_MD_size\fR() et \fBEVP_MD_CTX_size\fR() renvoient la taille d’un condensé de message lorsqu’il est fourni à une structure \fB\s-1EVP_MD\s0\fR ou \fB\s-1EVP_MD_CTX\s0\fR, c’est\-à\-dire la taille de l’empreinte numérique. .PP \&\fBEVP_MD_block_size\fR() et \fBEVP_MD_CTX_block_size\fR() renvoient la taille de bloc du condensé de message lorsqu’il est fourni à une structure \fB\s-1EVP_MD\s0\fR ou \fB\s-1EVP_MD_CTX\s0\fR. .PP \&\fBEVP_MD_type\fR() et \fBEVP_MD_CTX_type\fR() renvoient le \s-1NID\s0 de \s-1OBJECT IDENTIFIER\s0 représentant le condensé de message indiqué lorsqu’il est fourni à une structure \fB\s-1EVP_MD\s0\fR. Par exemple, \fBEVP_MD_type(EVP_sha1\fR() renvoie \&\fBNID_sha1\fR. Cette fonction est généralement utilisée pour définir les \&\s-1OID ASN1.\s0 .PP \&\fBEVP_MD_CTX_md\fR() renvoie la structure \fB\s-1EVP_MD\s0\fR correspondant à celle fournie : \fB\s-1EVP_MD_CTX\s0\fR. .PP \&\fBEVP_MD_pkey_type\fR() renvoie le \s-1NID\s0 de la clef publique signant l’algorithme associé avec ce condensé de message. Par exemple, \fBEVP_sha1\fR() est associée avec \s-1RSA,\s0 et renverra \fBNID_sha1WithRSAEncryption\fR. Puisque les condensés de message et les algorithmes ne sont plus liés, cette fonction n’est plus conservée que pour des raisons de compatibilité. .PP \&\fBEVP_md2\fR(), \fBEVP_md5\fR(), \fBEVP_sha\fR(), \fBEVP_sha1\fR(), \fBEVP_sha224\fR(), \&\fBEVP_sha256\fR(), \fBEVP_sha384\fR(), \fBEVP_sha512\fR(), \fBEVP_mdc2\fR() et \&\fBEVP_ripemd160\fR() renvoient des structures \fB\s-1EVP_MD\s0\fR pour leurs algorithmes respectifs : \s-1MD2, MD5, SHA, SHA1, SHA224, SHA256, SHA384, SHA512, MDC2\s0 ou \&\s-1RIPEMD160.\s0 .PP \&\fBEVP_dss\fR() et \fBEVP_dss1\fR() renvoient des structures \fB\s-1EVP_MD\s0\fR pour leurs algorithmes de hachage \s-1SHA\s0 et \s-1SHA1\s0 en utilisant \s-1DSS \s0(\s-1DSA\s0) comme algorithme de signature. Remarque : il n’est nul besoin d’utiliser ces pseudo\-condensés de message dans OpenSSL 1.0.0 ou postérieur ; ces fonctions ne sont plus conservées que pour des raisons de compatibilité. .PP \&\fBEVP_md_null\fR() est un condensé de message « null » sans aucun effet : c’est\-à\-dire la valeur renvoyée est de longueur zéro. .PP \&\fBEVP_get_digestbyname\fR(), \fBEVP_get_digestbynid\fR() et \&\fBEVP_get_digestbyobj\fR() renvoient une structure \fB\s-1EVP_MD\s0\fR lorsque sont fournis un nom d’algorithme de hachage, un \s-1NID\s0 ou une structure \s-1ASN1_OBJECT,\s0 respectivement. La table du hachage doit être initialisée en utilisant, par exemple, \fBOpenSSL_add_all_digests\fR() pour que ces fonctions agissent. .SH "VALEURS DE RETOUR" .IX Header "VALEURS DE RETOUR" \&\fBEVP_DigestInit_ex\fR(), \fBEVP_DigestUpdate\fR() et \fBEVP_DigestFinal_ex\fR() renvoient \fB1\fR en cas de réussite et \fB0\fR en cas d’échec. .PP \&\fBEVP_MD_CTX_copy_ex\fR() renvoie \fB1\fR en cas de réussite et \fB0\fR en cas d’échec. .PP \&\fBEVP_MD_type\fR(), \fBEVP_MD_pkey_type\fR() et \fBEVP_MD_type\fR() renvoient le \s-1NID\s0 du \s-1OBJECT IDENTIFIER\s0 correspondant ou \fBNID_undef\fR si absent. .PP \&\fBEVP_MD_size\fR(), \fBEVP_MD_block_size\fR(), \fBEVP_MD_CTX_size\fR() et \&\fBEVP_MD_CTX_block_size\fR() renvoient les tailles de condensé de message ou de bloc en octet. .PP \&\fBEVP_md_null\fR(), \fBEVP_md2\fR(), \fBEVP_md5\fR(), \fBEVP_sha\fR(), \fBEVP_sha1\fR(), \&\fBEVP_dss\fR(), \fBEVP_dss1\fR(), \fBEVP_mdc2\fR() et \fBEVP_ripemd160\fR() renvoient des pointeurs vers les structures \fB\s-1EVP_MD\s0\fR correspondantes. .PP \&\fBEVP_get_digestbyname\fR(), \fBEVP_get_digestbynid\fR() et \&\fBEVP_get_digestbyobj\fR() renvoient soit une structure \fB\s-1EVP_MD\s0\fR ou \s-1NULL\s0 en cas d’erreur. .SH "NOTES" .IX Header "NOTES" L’interface \fB\s-1EVP\s0\fR pour les condensés de message devrait presque toujours être utilisée de préférence aux interfaces de bas niveau. Cela est ainsi parce que le code devient évident pour l’algorithme de hachage utilisé et bien plus souple. .PP Les nouvelles applications devraient utiliser les algorithmes de hachage \&\s-1SHA2\s0 tels que \s-1SHA256.\s0 Les autres algorithmes de hachage sont encore communément utilisés. .PP Pour la plupart des applications, le paramètre \fIimpl\fR pour \&\fBEVP_DigestInit_ex\fR() doit être défini à \s-1NULL\s0 pour utiliser l’implémentation par défaut de condensé de message. .PP Les fonctions \fBEVP_DigestInit\fR(), \fBEVP_DigestFinal\fR() et \&\fBEVP_MD_CTX_copy\fR() sont obsolètes mais sont conservées pour compatibilité avec le code existant. Les nouvelles applications devraient utiliser \&\fBEVP_DigestInit_ex\fR(), \fBEVP_DigestFinal_ex\fR() et \fBEVP_MD_CTX_copy_ex\fR() car elles peuvent, de manière efficace, utiliser de nouveau un contexte de condensé de message au lieu de l’initialiser et le nettoyer à chaque appel, et permettent aux implémentations non installées de l’être. .PP Dans OpenSSL 0.9.7 et postérieur, si un contexte de condensé de message n’est pas nettoyé après son utilisation, une fuite de mémoire se produira. .PP L’allocation de mémoire pour des structures \fB\s-1EVP_MD_CTX\s0\fR est courant, par exemple : .PP .Vb 2 \& EVP_MD_CTX mctx; \& EVP_MD_CTX_init(&mctx); .Ve .PP Cela conduira à des problèmes de compatibilité si la taille de la structure \&\fB\s-1EVP_MD_CTX\s0\fR change (cela ne peut arriver que lors d’une nouvelle mise à jour majeure d’OpenSSL). Les applications souhaitant éviter ce problème doivent plutôt utiliser \fBEVP_MD_CTX_create\fR() : .PP .Vb 2 \& EVP_MD_CTX *mctx; \& mctx = EVP_MD_CTX_create(); .Ve .SH "EXEMPLE" .IX Header "EXEMPLE" Cet exemple hache les données « Message de test  » et « Hello World  », en utilisant le nom d’algorithme de hachage fourni sur la ligne de commande. .PP .Vb 2 \& #include \& #include \& \& main(int argc, char *argv[]) \& { \& EVP_MD_CTX *mdctx; \& const EVP_MD *md; \& char mess1[] = "Message de test\en"; \& char mess2[] = "Hello World\en"; \& unsigned char md_value[EVP_MAX_MD_SIZE]; \& int md_len, i; \& \& OpenSSL_add_all_digests(); \& \& if(!argv[1]) { \& printf("Usage : mdtest digestname\en"); \& B(1); \& } \& \& md = EVP_get_digestbyname(argv[1]); \& \& if(!md) { \& printf("Algorithme de hachage inconnu %s\en", argv[1]); \& B(1); \& } \& \& mdctx = EVP_MD_CTX_create(); \& EVP_DigestInit_ex(mdctx, md, NULL); \& EVP_DigestUpdate(mdctx, mess1, strlen(mess1)); \& EVP_DigestUpdate(mdctx, mess2, strlen(mess2)); \& EVP_DigestFinal_ex(mdctx, md_value, &md_len); \& EVP_MD_CTX_destroy(mdctx); \& \& printf("Digest is: "); \& for(i = 0; i < md_len; i++) \& printf("%02x", md_value[i]); \& printf("\en"); \& \& /* Exécuter ceci avant de quitter. */ \& EVP_cleanup(); \& exit(0); \& } .Ve .SH "VOIR AUSSI" .IX Header "VOIR AUSSI" \&\fBdgst\fR(1), \fBevp\fR(3) .SH "HISTORIQUE" .IX Header "HISTORIQUE" \&\fBEVP_DigestInit\fR(), \fBEVP_DigestUpdate\fR() et \fBEVP_DigestFinal\fR() sont disponibles dans toutes les versions de SSLeay et OpenSSL. .PP \&\fBEVP_MD_CTX_init\fR(), \fBEVP_MD_CTX_create\fR(), \fBEVP_MD_CTX_copy_ex\fR(), \&\fBEVP_MD_CTX_cleanup\fR(), \fBEVP_MD_CTX_destroy\fR(), \fBEVP_DigestInit_ex\fR() et \&\fBEVP_DigestFinal_ex\fR() ont été ajoutées dans OpenSSL 0.9.7. .PP \&\fBEVP_md_null\fR(), \fBEVP_md2\fR(), \fBEVP_md5\fR(), \fBEVP_sha\fR(), \fBEVP_sha1\fR(), \&\fBEVP_dss\fR(), \fBEVP_dss1\fR(), \fBEVP_mdc2\fR() et \fBEVP_ripemd160\fR() ont été modifiées pour renvoyer correctement \fIconst \s-1EVP_MD\s0 *\fR dans OpenSSL 0.9.7. .PP Le problème de lien entre les algorithmes de condensé de message et de signature a été corrigé dans OpenSSL 1.0 et postérieur, et maintenant \&\fBEVP_sha1\fR() peut être utilisée avec \s-1RSA\s0 et \s-1DSA \s0; \fBEVP_dss1\fR() n’est plus nécessaire. .PP OpenSSL 1.0 et postérieurs n’intègrent pas l’algorithme de hachage \s-1MD2\s0 dans leur configuration par défaut à cause de ses problèmes de faiblesse de sécurité. .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.