Deleted Added
sdiff udiff text old ( 206048 ) new ( 215698 )
full compact
1.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.37
2.\"
3.\" Standard preamble:
4.\" ========================================================================
5.de Sh \" Subsection heading
6.br
7.if t .Sp
8.ne 5
9.PP
10\fB\\$1\fR
11.PP
12..
13.de Sp \" Vertical space (when we can't use .PP)
14.if t .sp .5v
15.if n .sp
16..
17.de Vb \" Begin verbatim text
18.ft CW
19.nf
20.ne \\$1
21..
22.de Ve \" End verbatim text
23.ft R
24.fi
25..
26.\" Set up some character translations and predefined strings. \*(-- will
27.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
28.\" double quote, and \*(R" will give a right double quote. | will give a
29.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
30.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
31.\" expand to `' in nroff, nothing in troff, for use with C<>.
32.tr \(*W-|\(bv\*(Tr
33.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
34.ie n \{\
35. ds -- \(*W-
36. ds PI pi
37. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
38. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
39. ds L" ""
40. ds R" ""
41. ds C` ""
42. ds C' ""
43'br\}
44.el\{\
45. ds -- \|\(em\|
46. ds PI \(*p
47. ds L" ``
48. ds R" ''
49'br\}
50.\"
51.\" If the F register is turned on, we'll generate index entries on stderr for
52.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
53.\" entries marked with X<> in POD. Of course, you'll have to process the
54.\" output yourself in some meaningful fashion.
55.if \nF \{\
56. de IX
57. tm Index:\\$1\t\\n%\t"\\$2"
58..
59. nr % 0
60. rr F
61.\}
62.\"
63.\" For nroff, turn off justification. Always turn off hyphenation; it makes
64.\" way too many mistakes in technical documents.
65.hy 0
66.if n .na
67.\"
68.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
69.\" Fear. Run. Save yourself. No user-serviceable parts.
70. \" fudge factors for nroff and troff
71.if n \{\
72. ds #H 0
73. ds #V .8m
74. ds #F .3m
75. ds #[ \f1

--- 48 unchanged lines hidden (view full) ---

124. ds Th \o'LP'
125. ds ae ae
126. ds Ae AE
127.\}
128.rm #[ #] #H #V #F C
129.\" ========================================================================
130.\"
131.IX Title "BIO_f_md 3"
132.TH BIO_f_md 3 "2010-03-24" "0.9.8n" "OpenSSL"
133.SH "NAME"
134BIO_f_md, BIO_set_md, BIO_get_md, BIO_get_md_ctx \- message digest BIO filter
135.SH "SYNOPSIS"
136.IX Header "SYNOPSIS"
137.Vb 2
138\& #include <openssl/bio.h>
139\& #include <openssl/evp.h>
140.Ve
141.PP
142.Vb 4
143\& BIO_METHOD * BIO_f_md(void);
144\& int BIO_set_md(BIO *b,EVP_MD *md);
145\& int BIO_get_md(BIO *b,EVP_MD **mdp);
146\& int BIO_get_md_ctx(BIO *b,EVP_MD_CTX **mdcp);
147.Ve
148.SH "DESCRIPTION"
149.IX Header "DESCRIPTION"
150\&\fIBIO_f_md()\fR returns the message digest \s-1BIO\s0 method. This is a filter

--- 43 unchanged lines hidden (view full) ---

194\&\fIBIO_set_md()\fR, \fIBIO_get_md()\fR and \fIBIO_md_ctx()\fR return 1 for success and
1950 for failure.
196.SH "EXAMPLES"
197.IX Header "EXAMPLES"
198The following example creates a \s-1BIO\s0 chain containing an \s-1SHA1\s0 and \s-1MD5\s0
199digest \s-1BIO\s0 and passes the string \*(L"Hello World\*(R" through it. Error
200checking has been omitted for clarity.
201.PP
202.Vb 14
203\& BIO *bio, *mdtmp;
204\& char message[] = "Hello World";
205\& bio = BIO_new(BIO_s_null());
206\& mdtmp = BIO_new(BIO_f_md());
207\& BIO_set_md(mdtmp, EVP_sha1());
208\& /* For BIO_push() we want to append the sink BIO and keep a note of
209\& * the start of the chain.
210\& */
211\& bio = BIO_push(mdtmp, bio);
212\& mdtmp = BIO_new(BIO_f_md());
213\& BIO_set_md(mdtmp, EVP_md5());
214\& bio = BIO_push(mdtmp, bio);
215\& /* Note: mdtmp can now be discarded */
216\& BIO_write(bio, message, strlen(message));
217.Ve
218.PP
219The next example digests data by reading through a chain instead:
220.PP
221.Vb 14
222\& BIO *bio, *mdtmp;
223\& char buf[1024];
224\& int rdlen;
225\& bio = BIO_new_file(file, "rb");
226\& mdtmp = BIO_new(BIO_f_md());
227\& BIO_set_md(mdtmp, EVP_sha1());
228\& bio = BIO_push(mdtmp, bio);
229\& mdtmp = BIO_new(BIO_f_md());
230\& BIO_set_md(mdtmp, EVP_md5());
231\& bio = BIO_push(mdtmp, bio);
232\& do {
233\& rdlen = BIO_read(bio, buf, sizeof(buf));
234\& /* Might want to do something with the data here */
235\& } while(rdlen > 0);
236.Ve
237.PP
238This next example retrieves the message digests from a \s-1BIO\s0 chain and
239outputs them. This could be used with the examples above.
240.PP
241.Vb 16
242\& BIO *mdtmp;
243\& unsigned char mdbuf[EVP_MAX_MD_SIZE];
244\& int mdlen;
245\& int i;
246\& mdtmp = bio; /* Assume bio has previously been set up */
247\& do {
248\& EVP_MD *md;
249\& mdtmp = BIO_find_type(mdtmp, BIO_TYPE_MD);
250\& if(!mdtmp) break;
251\& BIO_get_md(mdtmp, &md);
252\& printf("%s digest", OBJ_nid2sn(EVP_MD_type(md)));
253\& mdlen = BIO_gets(mdtmp, mdbuf, EVP_MAX_MD_SIZE);
254\& for(i = 0; i < mdlen; i++) printf(":%02X", mdbuf[i]);
255\& printf("\en");
256\& mdtmp = BIO_next(mdtmp);
257\& } while(mdtmp);
258.Ve
259.PP
260.Vb 1
261\& BIO_free_all(bio);
262.Ve
263.SH "BUGS"
264.IX Header "BUGS"
265The lack of support for \fIBIO_puts()\fR and the non standard behaviour of
266\&\fIBIO_gets()\fR could be regarded as anomalous. It could be argued that \fIBIO_gets()\fR
267and \fIBIO_puts()\fR should be passed to the next \s-1BIO\s0 in the chain and digest
268the data passed through and that digests should be retrieved using a
269separate \fIBIO_ctrl()\fR call.
270.SH "SEE ALSO"
271.IX Header "SEE ALSO"
272\&\s-1TBA\s0