⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bio_f_md.pod

📁 开源的ssl算法openssl,版本0.9.8H
💻 POD
字号:
=pod=head1 NAMEBIO_f_md, BIO_set_md, BIO_get_md, BIO_get_md_ctx - message digest BIO filter=head1 SYNOPSIS #include <openssl/bio.h> #include <openssl/evp.h> 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);=head1 DESCRIPTIONBIO_f_md() returns the message digest BIO method. This is a filterBIO that digests any data passed through it, it is a BIO wrapperfor the digest routines EVP_DigestInit(), EVP_DigestUpdate()and EVP_DigestFinal().Any data written or read through a digest BIO using BIO_read() andBIO_write() is digested.BIO_gets(), if its B<size> parameter is large enough finishes thedigest calculation and returns the digest value. BIO_puts() isnot supported.BIO_reset() reinitialises a digest BIO.BIO_set_md() sets the message digest of BIO B<b> to B<md>: thismust be called to initialize a digest BIO before any data ispassed through it. It is a BIO_ctrl() macro.BIO_get_md() places the a pointer to the digest BIOs digest methodin B<mdp>, it is a BIO_ctrl() macro.BIO_get_md_ctx() returns the digest BIOs context into B<mdcp>.=head1 NOTESThe context returned by BIO_get_md_ctx() can be used in callsto EVP_DigestFinal() and also the signature routines EVP_SignFinal()and EVP_VerifyFinal().The context returned by BIO_get_md_ctx() is an internal contextstructure. Changes made to this context will affect the digestBIO itself and the context pointer will become invalid when the digestBIO is freed.After the digest has been retrieved from a digest BIO it must bereinitialized by calling BIO_reset(), or BIO_set_md() before any moredata is passed through it.If an application needs to call BIO_gets() or BIO_puts() througha chain containing digest BIOs then this can be done by prependinga buffering BIO.=head1 RETURN VALUESBIO_f_md() returns the digest BIO method.BIO_set_md(), BIO_get_md() and BIO_md_ctx() return 1 for success and0 for failure.=head1 EXAMPLESThe following example creates a BIO chain containing an SHA1 and MD5digest BIO and passes the string "Hello World" through it. Errorchecking 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 andoutputs 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);=head1 BUGSThe lack of support for BIO_puts() and the non standard behaviour ofBIO_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 digestthe data passed through and that digests should be retrieved using aseparate BIO_ctrl() call.=head1 SEE ALSOTBA

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -