BIO_get_md man page on DigitalUNIX

Man page or keyword search:  
man Server   12896 pages
apropos Keyword Search (all sections)
Output format
DigitalUNIX logo
[printable version]

BIO_f_md(3)							   BIO_f_md(3)

       BIO_f_md,  BIO_set_md,  BIO_get_md, BIO_get_md_ctx - Message digest BIO

       #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(
	       BIO *b,
	       EVP_MD_CTX **mdcp );

       BIO_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
       EVP_DigestInit(),  EVP_DigestUpdate(),  and  EVP_DigestFinal()	digest

       Any  data  written  or  read  through a digest BIO using BIO_read() and
       BIO_write() is digested.

       The BIO_gets() function, if its size parameter is  large	 enough,  fin‐
       ishes  the  digest  calculation	and  returns  the  digest  value.  The
       BIO_puts() function is not supported.

       The BIO_reset() function reinitializes a digest BIO.

       The BIO_set_md() function 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.

       The BIO_get_md() function places the  a	pointer	 to  the  digest  BIOs
       digest method in mdp. It is a BIO_ctrl() macro.

       The  BIO_get_md_ctx()  function	returns	 the  digest BIOs context into

       The context returned by the BIO_get_md_ctx() function can  be  used  in
       calls  to the EVP_DigestFinal(), EVP_SignFinal(), and EVP_VerifyFinal()

       The context returned by the BIO_get_md_ctx() function  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 reini‐
       tialized 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.

       The  lack  of  support  for  BIO_puts() and the nonstandard behavior 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.

       The BIO_f_md() function returns the digest BIO method.

       The BIO_set_md(), BIO_get_md(), and BIO_md_ctx() functions return 1 for
       success and 0 for failure.

       Create a BIO chain containing an SHA1 and MD5 digest BIO and  pass  the
       string  "Hello  World" through it. (Error checking has been omitted for
	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));

       Digest data by reading through a chain:
	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);

       Retrieve the message digests from a BIO chain  and  output  them.  This
       could be used with the previous examples:
	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  =
	} while(mdtmp);




List of man pages available for DigitalUNIX

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
Vote for polarhome
Free Shell Accounts :: the biggest list on the net