1 .\" Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28)
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 .    ds C`
42 .    ds C'
43 'br\}
44 .\"
45 .\" Escape single quotes in literal strings from groff's Unicode transform.
46 .ie \n(.g .ds Aq \(aq
47 .el       .ds Aq '
48 .\"
49 .\" If the F register is turned on, we'll generate index entries on stderr for
50 .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
51 .\" entries marked with X<> in POD.  Of course, you'll have to process the
52 .\" output yourself in some meaningful fashion.
53 .\"
54 .\" Avoid warning from groff about undefined register 'F'.
55 .de IX
56 ..
57 .nr rF 0
58 .if \n(.g .if rF .nr rF 1
59 .if (\n(rF:(\n(.g==0)) \{
60 .    if \nF \{
61 .        de IX
62 .        tm Index:\\\$1\t\\n%\t"\\\$2"
63 ..
64 .        if !\nF==2 \{
65 .            nr % 0
66 .            nr F 2
67 .        \}
68 .    \}
69 .\}
70 .rr rF
71 .\"
72 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
73 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
74 .    \" fudge factors for nroff and troff
75 .if n \{\
76 .    ds #H 0
77 .    ds #V .8m
78 .    ds #F .3m
79 .    ds #[ \f1
80 .    ds #] \fP
81 .\}
82 .if t \{\
83 .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
84 .    ds #V .6m
85 .    ds #F 0
86 .    ds #[ \&
87 .    ds #] \&
88 .\}
89 .    \" simple accents for nroff and troff
90 .if n \{\
91 .    ds ' \&
92 .    ds ` \&
93 .    ds ^ \&
94 .    ds , \&
95 .    ds ~ ~
96 .    ds /
97 .\}
98 .if t \{\
99 .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
100 .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
101 .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
102 .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
103 .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
104 .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
105 .\}
106 .    \" troff and (daisy-wheel) nroff accents
107 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
108 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
109 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
110 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
111 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
112 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
113 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
114 .ds ae a\h'-(\w'a'u*4/10)'e
115 .ds Ae A\h'-(\w'A'u*4/10)'E
116 .    \" corrections for vroff
117 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
118 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
119 .    \" for low resolution devices (crt and lpr)
120 .if \n(.H>23 .if \n(.V>19 \
121 \{\
122 .    ds : e
123 .    ds 8 ss
124 .    ds o a
125 .    ds d- d\h'-1'\(ga
126 .    ds D- D\h'-1'\(hy
127 .    ds th \o'bp'
128 .    ds Th \o'LP'
129 .    ds ae ae
130 .    ds Ae AE
131 .\}
132 .rm #[ #] #H #V #F C
133 .\" ========================================================================
134 .\"
135 .IX Title "BIO_f_cipher 3"
136 .TH BIO_f_cipher 3 "2015-03-19" "1.0.1m" "OpenSSL"
137 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
138 .\" way too many mistakes in technical documents.
140 .nh
141 .SH "NAME"
142 BIO_f_cipher, BIO_set_cipher, BIO_get_cipher_status, BIO_get_cipher_ctx \- cipher BIO filter
143 .SH "SYNOPSIS"
145 .Vb 2
146 \& #include <openssl/bio.h>
147 \& #include <openssl/evp.h>
148 \&
149 \& BIO_METHOD *   BIO_f_cipher(void);
150 \& void BIO_set_cipher(BIO *b,const EVP_CIPHER *cipher,
151 \&                unsigned char *key, unsigned char *iv, int enc);
152 \& int BIO_get_cipher_status(BIO *b)
153 \& int BIO_get_cipher_ctx(BIO *b, EVP_CIPHER_CTX **pctx)
154 .Ve
155 .SH "DESCRIPTION"
157 \&\fIBIO_f_cipher()\fR returns the cipher \s-1BIO\s0 method. This is a filter
158 \&\s-1BIO\s0 that encrypts any data written through it, and decrypts any data
159 read from it. It is a \s-1BIO\s0 wrapper for the cipher routines
160 \&\fIEVP_CipherInit()\fR, \fIEVP_CipherUpdate()\fR and \fIEVP_CipherFinal()\fR.
161 .PP
162 Cipher BIOs do not support \fIBIO_gets()\fR or \fIBIO_puts()\fR.
163 .PP
164 \&\fIBIO_flush()\fR on an encryption \s-1BIO\s0 that is being written through is
165 used to signal that no more data is to be encrypted: this is used
166 to flush and possibly pad the final block through the \s-1BIO.\s0
167 .PP
168 \&\fIBIO_set_cipher()\fR sets the cipher of \s-1BIO \s0\fBb\fR to \fBcipher\fR using key \fBkey\fR
169 and \s-1IV \s0\fBiv\fR. \fBenc\fR should be set to 1 for encryption and zero for
170 decryption.
171 .PP
172 When reading from an encryption \s-1BIO\s0 the final block is automatically
173 decrypted and checked when \s-1EOF\s0 is detected. \fIBIO_get_cipher_status()\fR
174 is a \fIBIO_ctrl()\fR macro which can be called to determine whether the
175 decryption operation was successful.
176 .PP
177 \&\fIBIO_get_cipher_ctx()\fR is a \fIBIO_ctrl()\fR macro which retrieves the internal
178 \&\s-1BIO\s0 cipher context. The retrieved context can be used in conjunction
179 with the standard cipher routines to set it up. This is useful when
180 \&\fIBIO_set_cipher()\fR is not flexible enough for the applications needs.
181 .SH "NOTES"
183 When encrypting \fIBIO_flush()\fR \fBmust\fR be called to flush the final block
184 through the \s-1BIO.\s0 If it is not then the final block will fail a subsequent
185 decrypt.
186 .PP
187 When decrypting an error on the final block is signalled by a zero
188 return value from the read operation. A successful decrypt followed
189 by \s-1EOF\s0 will also return zero for the final read. \fIBIO_get_cipher_status()\fR
190 should be called to determine if the decrypt was successful.
191 .PP
192 As always, if \fIBIO_gets()\fR or \fIBIO_puts()\fR support is needed then it can
193 be achieved by preceding the cipher \s-1BIO\s0 with a buffering \s-1BIO.\s0
194 .SH "RETURN VALUES"
196 \&\fIBIO_f_cipher()\fR returns the cipher \s-1BIO\s0 method.
197 .PP
198 \&\fIBIO_set_cipher()\fR does not return a value.
199 .PP
200 \&\fIBIO_get_cipher_status()\fR returns 1 for a successful decrypt and 0
201 for failure.
202 .PP
203 \&\fIBIO_get_cipher_ctx()\fR currently always returns 1.
204 .SH "EXAMPLES"