BIO_F_MD - Online Linux Manual PageSection : 3
Updated : 2021-03-26
Source : 1.1.1k
Note : OpenSSL

NAMEBIO_f_md, BIO_set_md, BIO_get_md, BIO_get_md_ctx − message digest BIO filter

SYNOPSIS​ #include <openssl/bio.h> ​ #include <openssl/evp.h> ​ ​ const BIO_METHOD *BIO_f_md(void); ​ int BIO_set_md(BIO *b, EVP_MD *md); ​ int BIO_get_md(BIO *b, EVP_MD **mdp); ​ int BIO_get_md_ctx(BIO *b, EVP_MD_CTX **mdcp);

DESCRIPTIONBIO_f_md() returns the message digest BIO method. This is a filter ​BIO that digests any data passed through it, it is a BIO wrapper for the digest routines EVP_DigestInit(), EVP_DigestUpdate() and EVP_DigestFinal(). Any data written or read through a digest BIO using BIO_read_ex() and ​BIO_write_ex() is digested. BIO_gets(), if its size parameter is large enough finishes the digest calculation and returns the digest value. BIO_puts() is not supported. BIO_reset() reinitialises a digest BIO. BIO_set_md() sets the message digest of BIO b to md: this must be called to initialize a digest BIO before any data is passed through it. It is a BIO_ctrl() macro. BIO_get_md() places the a pointer to the digest BIOs digest method in mdp, it is a BIO_ctrl() macro. BIO_get_md_ctx() returns the digest BIOs context into mdcp.

NOTESThe context returned by BIO_get_md_ctx() can be used in calls to EVP_DigestFinal() and also the signature routines EVP_SignFinal() and EVP_VerifyFinal(). The context returned by BIO_get_md_ctx() is an internal context structure. Changes made to this context will affect the digest ​BIO itself and the context pointer will become invalid when the digest ​BIO is freed. After the digest has been retrieved from a digest BIO it must be reinitialized by calling BIO_reset(), or BIO_set_md() before any more data is passed through it. If an application needs to call BIO_gets() or BIO_puts() through a chain containing digest BIOs then this can be done by prepending a buffering BIO. Calling BIO_get_md_ctx() will return the context and initialize the BIO state. This allows applications to initialize the context externally if the standard calls such as BIO_set_md() are not sufficiently flexible.

RETURN VALUESBIO_f_md() returns the digest BIO method. BIO_set_md(), BIO_get_md() and BIO_md_ctx() return 1 for success and 0 for failure.

EXAMPLESThe following example creates a BIO chain containing an SHA1 and MD5 digest BIO and passes the string Hello World through it. Error checking has been omitted for clarity. ​ BIO *bio, *mdtmp; ​ char message[] = "Hello World"; ​ ​ bio = BIO_new(BIO_s_null()); ​ mdtmp = BIO_new(BIO_f_md()); ​ BIO_set_md(mdtmp, EVP_sha1()); ​ /* ​ * For BIO_push() we want to append the sink BIO and keep a note of ​ * the start of the chain. ​ */ ​ bio = BIO_push(mdtmp, bio); ​ mdtmp = BIO_new(BIO_f_md()); ​ BIO_set_md(mdtmp, EVP_md5()); ​ bio = BIO_push(mdtmp, bio); ​ /* Note: mdtmp can now be discarded */ ​ BIO_write(bio, message, strlen(message)); The next example digests data by reading through a chain instead: ​ BIO *bio, *mdtmp; ​ char buf[1024]; ​ int rdlen; ​ ​ bio = BIO_new_file(file, "rb"); ​ mdtmp = BIO_new(BIO_f_md()); ​ BIO_set_md(mdtmp, EVP_sha1()); ​ bio = BIO_push(mdtmp, bio); ​ mdtmp = BIO_new(BIO_f_md()); ​ BIO_set_md(mdtmp, EVP_md5()); ​ bio = BIO_push(mdtmp, bio); ​ do { ​ rdlen = BIO_read(bio, buf, sizeof(buf)); ​ /* Might want to do something with the data here */ ​ } while (rdlen > 0); This next example retrieves the message digests from a BIO chain and outputs them. This could be used with the examples above. ​ BIO *mdtmp; ​ unsigned char mdbuf[EVP_MAX_MD_SIZE]; ​ int mdlen; ​ int i; ​ ​ mdtmp = bio; /* Assume bio has previously been set up */ ​ do { ​ EVP_MD *md; ​ ​ mdtmp = BIO_find_type(mdtmp, BIO_TYPE_MD); ​ if (!mdtmp) ​ break; ​ BIO_get_md(mdtmp, &md); ​ printf("%s digest", OBJ_nid2sn(EVP_MD_type(md))); ​ mdlen = BIO_gets(mdtmp, mdbuf, EVP_MAX_MD_SIZE); ​ for (i = 0; i < mdlen; i++) printf(":%02X", mdbuf[i]); ​ printf("\n"); ​ mdtmp = BIO_next(mdtmp); ​ } while (mdtmp); ​ ​ BIO_free_all(bio);

BUGSThe lack of support for BIO_puts() and the non standard behaviour of ​BIO_gets() could be regarded as anomalous. It could be argued that BIO_gets() and BIO_puts() should be passed to the next BIO in the chain and digest the data passed through and that digests should be retrieved using a separate BIO_ctrl() call.

HISTORYBefore OpenSSL 1.0.0., the call to BIO_get_md_ctx() would only work if the ​BIO was initialized first.

COPYRIGHTCopyright 2000−2016 The OpenSSL Project Authors. All Rights Reserved. Licensed under the OpenSSL license (the License). You may not use this file except in compliance with the License. You can obtain a copy in the file LICENSE in the source distribution or at <https://www.openssl.org/source/license.html>.
0
Johanes Gumabo
Data Size   :   19,493 byte
man-BIO_get_md.3sslBuild   :   2024-12-05, 20:55   :  
Visitor Screen   :   x
Visitor Counter ( page / site )   :   2 / 172,922
Visitor ID   :     :  
Visitor IP   :   18.226.17.3   :  
Visitor Provider   :   AMAZON-02   :  
Provider Position ( lat x lon )   :   39.962500 x -83.006100   :   x
Provider Accuracy Radius ( km )   :   1000   :  
Provider City   :   Columbus   :  
Provider Province   :   Ohio ,   :   ,
Provider Country   :   United States   :  
Provider Continent   :   North America   :  
Visitor Recorder   :   Version   :  
Visitor Recorder   :   Library   :  
Online Linux Manual Page   :   Version   :   Online Linux Manual Page - Fedora.40 - march=x86-64 - mtune=generic - 24.12.05
Online Linux Manual Page   :   Library   :   lib_c - 24.10.03 - march=x86-64 - mtune=generic - Fedora.40
Online Linux Manual Page   :   Library   :   lib_m - 24.10.03 - march=x86-64 - mtune=generic - Fedora.40
Data Base   :   Version   :   Online Linux Manual Page Database - 24.04.13 - march=x86-64 - mtune=generic - fedora-38
Data Base   :   Library   :   lib_c - 23.02.07 - march=x86-64 - mtune=generic - fedora.36

Very long time ago, I have the best tutor, Wenzel Svojanovsky . If someone knows the email address of Wenzel Svojanovsky , please send an email to johanes_gumabo@yahoo.co.id .
If error, please print screen and send to johanes_gumabo@yahoo.co.id
Under development. Support me via PayPal.

ERROR : Need New Coding :         (parse_manual_page_|249|B___IO_f_md.3ssl|36/37|el══─{─══.|.el══─{─══. ds -- \|\(em\| )         (htmlprn|149|B___IO_f_md.3ssl|36/37|.el══─{─══. ds --  —  |.el══─{─══. ds -- \|\(em\| )         (parse_manual_page_|249|B___IO_f_md.3ssl|43|br══─}─══|'br══─}─══ )         (htmlprn|149|B___IO_f_md.3ssl|43|'br══─}─══ |'br══─}─══ )