1.\" Automatically generated by Pod::Man 2.22 (Pod::Simple 3.07) |
2.\" 3.\" Standard preamble: 4.\" ======================================================================== |
5.de Sp \" Vertical space (when we can't use .PP) 6.if t .sp .5v 7.if n .sp 8.. 9.de Vb \" Begin verbatim text 10.ft CW 11.nf 12.ne \\$1 13.. 14.de Ve \" End verbatim text 15.ft R 16.fi 17.. 18.\" Set up some character translations and predefined strings. \*(-- will 19.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left |
20.\" double quote, and \*(R" will give a right double quote. \*(C+ will 21.\" give a nicer C++. Capital omega is used to do unbreakable dashes and 22.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, 23.\" nothing in troff, for use with C<>. 24.tr \(*W- |
25.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' 26.ie n \{\ 27. ds -- \(*W- 28. ds PI pi 29. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch 30. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch 31. ds L" "" 32. ds R" "" 33. ds C` "" 34. ds C' "" 35'br\} 36.el\{\ 37. ds -- \|\(em\| 38. ds PI \(*p 39. ds L" `` 40. ds R" '' 41'br\} 42.\" |
43.\" Escape single quotes in literal strings from groff's Unicode transform. 44.ie \n(.g .ds Aq \(aq 45.el .ds Aq ' 46.\" |
47.\" If the F register is turned on, we'll generate index entries on stderr for |
48.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index |
49.\" entries marked with X<> in POD. Of course, you'll have to process the 50.\" output yourself in some meaningful fashion. |
51.ie \nF \{\ |
52. de IX 53. tm Index:\\$1\t\\n%\t"\\$2" 54.. 55. nr % 0 56. rr F 57.\} |
58.el \{\ 59. de IX 60.. 61.\} |
62.\" |
63.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). 64.\" Fear. Run. Save yourself. No user-serviceable parts. 65. \" fudge factors for nroff and troff 66.if n \{\ 67. ds #H 0 68. ds #V .8m 69. ds #F .3m 70. ds #[ \f1 --- 48 unchanged lines hidden (view full) --- 119. ds Th \o'LP' 120. ds ae ae 121. ds Ae AE 122.\} 123.rm #[ #] #H #V #F C 124.\" ======================================================================== 125.\" 126.IX Title "BIO_f_md 3" |
127.TH BIO_f_md 3 "2010-11-16" "0.9.8p" "OpenSSL" 128.\" For nroff, turn off justification. Always turn off hyphenation; it makes 129.\" way too many mistakes in technical documents. 130.if n .ad l 131.nh |
132.SH "NAME" 133BIO_f_md, BIO_set_md, BIO_get_md, BIO_get_md_ctx \- message digest BIO filter 134.SH "SYNOPSIS" 135.IX Header "SYNOPSIS" 136.Vb 2 137\& #include <openssl/bio.h> 138\& #include <openssl/evp.h> |
139\& |
140\& BIO_METHOD * BIO_f_md(void); 141\& int BIO_set_md(BIO *b,EVP_MD *md); 142\& int BIO_get_md(BIO *b,EVP_MD **mdp); 143\& int BIO_get_md_ctx(BIO *b,EVP_MD_CTX **mdcp); 144.Ve 145.SH "DESCRIPTION" 146.IX Header "DESCRIPTION" 147\&\fIBIO_f_md()\fR returns the message digest \s-1BIO\s0 method. This is a filter --- 43 unchanged lines hidden (view full) --- 191\&\fIBIO_set_md()\fR, \fIBIO_get_md()\fR and \fIBIO_md_ctx()\fR return 1 for success and 1920 for failure. 193.SH "EXAMPLES" 194.IX Header "EXAMPLES" 195The following example creates a \s-1BIO\s0 chain containing an \s-1SHA1\s0 and \s-1MD5\s0 196digest \s-1BIO\s0 and passes the string \*(L"Hello World\*(R" through it. Error 197checking has been omitted for clarity. 198.PP |
199.Vb 10 |
200\& BIO *bio, *mdtmp; 201\& char message[] = "Hello World"; 202\& bio = BIO_new(BIO_s_null()); 203\& mdtmp = BIO_new(BIO_f_md()); 204\& BIO_set_md(mdtmp, EVP_sha1()); 205\& /* For BIO_push() we want to append the sink BIO and keep a note of 206\& * the start of the chain. 207\& */ 208\& bio = BIO_push(mdtmp, bio); 209\& mdtmp = BIO_new(BIO_f_md()); 210\& BIO_set_md(mdtmp, EVP_md5()); 211\& bio = BIO_push(mdtmp, bio); 212\& /* Note: mdtmp can now be discarded */ 213\& BIO_write(bio, message, strlen(message)); 214.Ve 215.PP 216The next example digests data by reading through a chain instead: 217.PP |
218.Vb 10 |
219\& BIO *bio, *mdtmp; 220\& char buf[1024]; 221\& int rdlen; 222\& bio = BIO_new_file(file, "rb"); 223\& mdtmp = BIO_new(BIO_f_md()); 224\& BIO_set_md(mdtmp, EVP_sha1()); 225\& bio = BIO_push(mdtmp, bio); 226\& mdtmp = BIO_new(BIO_f_md()); 227\& BIO_set_md(mdtmp, EVP_md5()); 228\& bio = BIO_push(mdtmp, bio); 229\& do { 230\& rdlen = BIO_read(bio, buf, sizeof(buf)); 231\& /* Might want to do something with the data here */ 232\& } while(rdlen > 0); 233.Ve 234.PP 235This next example retrieves the message digests from a \s-1BIO\s0 chain and 236outputs them. This could be used with the examples above. 237.PP |
238.Vb 10 |
239\& BIO *mdtmp; 240\& unsigned char mdbuf[EVP_MAX_MD_SIZE]; 241\& int mdlen; 242\& int i; 243\& mdtmp = bio; /* Assume bio has previously been set up */ 244\& do { 245\& EVP_MD *md; 246\& mdtmp = BIO_find_type(mdtmp, BIO_TYPE_MD); 247\& if(!mdtmp) break; 248\& BIO_get_md(mdtmp, &md); 249\& printf("%s digest", OBJ_nid2sn(EVP_MD_type(md))); 250\& mdlen = BIO_gets(mdtmp, mdbuf, EVP_MAX_MD_SIZE); 251\& for(i = 0; i < mdlen; i++) printf(":%02X", mdbuf[i]); 252\& printf("\en"); 253\& mdtmp = BIO_next(mdtmp); 254\& } while(mdtmp); |
255\& |
256\& BIO_free_all(bio); 257.Ve 258.SH "BUGS" 259.IX Header "BUGS" 260The lack of support for \fIBIO_puts()\fR and the non standard behaviour of 261\&\fIBIO_gets()\fR could be regarded as anomalous. It could be argued that \fIBIO_gets()\fR 262and \fIBIO_puts()\fR should be passed to the next \s-1BIO\s0 in the chain and digest 263the data passed through and that digests should be retrieved using a 264separate \fIBIO_ctrl()\fR call. 265.SH "SEE ALSO" 266.IX Header "SEE ALSO" 267\&\s-1TBA\s0 |