Deleted Added
sdiff udiff text old ( 206048 ) new ( 215698 )
full compact
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