Merge from vendor branch OPENSSH:
[dragonfly.git] / secure / lib / libcrypto / man / EVP_SealInit.3
1 .\" Automatically generated by Pod::Man version 1.15
2 .\" Wed Feb 19 16:42:54 2003
3 .\"
4 .\" Standard preamble:
5 .\" ======================================================================
6 .de Sh \" Subsection heading
7 .br
8 .if t .Sp
9 .ne 5
10 .PP
11 \fB\\$1\fR
12 .PP
13 ..
14 .de Sp \" Vertical space (when we can't use .PP)
15 .if t .sp .5v
16 .if n .sp
17 ..
18 .de Ip \" List item
19 .br
20 .ie \\n(.$>=3 .ne \\$3
21 .el .ne 3
22 .IP "\\$1" \\$2
23 ..
24 .de Vb \" Begin verbatim text
25 .ft CW
26 .nf
27 .ne \\$1
28 ..
29 .de Ve \" End verbatim text
30 .ft R
31
32 .fi
33 ..
34 .\" Set up some character translations and predefined strings.  \*(-- will
35 .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
36 .\" double quote, and \*(R" will give a right double quote.  | will give a
37 .\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used
38 .\" to do unbreakable dashes and therefore won't be available.  \*(C` and
39 .\" \*(C' expand to `' in nroff, nothing in troff, for use with C<>
40 .tr \(*W-|\(bv\*(Tr
41 .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
42 .ie n \{\
43 .    ds -- \(*W-
44 .    ds PI pi
45 .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
46 .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
47 .    ds L" ""
48 .    ds R" ""
49 .    ds C` ""
50 .    ds C' ""
51 'br\}
52 .el\{\
53 .    ds -- \|\(em\|
54 .    ds PI \(*p
55 .    ds L" ``
56 .    ds R" ''
57 'br\}
58 .\"
59 .\" If the F register is turned on, we'll generate index entries on stderr
60 .\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and
61 .\" index entries marked with X<> in POD.  Of course, you'll have to process
62 .\" the output yourself in some meaningful fashion.
63 .if \nF \{\
64 .    de IX
65 .    tm Index:\\$1\t\\n%\t"\\$2"
66 ..
67 .    nr % 0
68 .    rr F
69 .\}
70 .\"
71 .\" For nroff, turn off justification.  Always turn off hyphenation; it
72 .\" makes way too many mistakes in technical documents.
73 .hy 0
74 .if n .na
75 .\"
76 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
77 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
78 .bd B 3
79 .    \" fudge factors for nroff and troff
80 .if n \{\
81 .    ds #H 0
82 .    ds #V .8m
83 .    ds #F .3m
84 .    ds #[ \f1
85 .    ds #] \fP
86 .\}
87 .if t \{\
88 .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
89 .    ds #V .6m
90 .    ds #F 0
91 .    ds #[ \&
92 .    ds #] \&
93 .\}
94 .    \" simple accents for nroff and troff
95 .if n \{\
96 .    ds ' \&
97 .    ds ` \&
98 .    ds ^ \&
99 .    ds , \&
100 .    ds ~ ~
101 .    ds /
102 .\}
103 .if t \{\
104 .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
105 .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
106 .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
107 .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
108 .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
109 .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
110 .\}
111 .    \" troff and (daisy-wheel) nroff accents
112 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
113 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
114 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
115 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
116 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
117 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
118 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
119 .ds ae a\h'-(\w'a'u*4/10)'e
120 .ds Ae A\h'-(\w'A'u*4/10)'E
121 .    \" corrections for vroff
122 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
123 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
124 .    \" for low resolution devices (crt and lpr)
125 .if \n(.H>23 .if \n(.V>19 \
126 \{\
127 .    ds : e
128 .    ds 8 ss
129 .    ds o a
130 .    ds d- d\h'-1'\(ga
131 .    ds D- D\h'-1'\(hy
132 .    ds th \o'bp'
133 .    ds Th \o'LP'
134 .    ds ae ae
135 .    ds Ae AE
136 .\}
137 .rm #[ #] #H #V #F C
138 .\" ======================================================================
139 .\"
140 .IX Title "EVP_SealInit 3"
141 .TH EVP_SealInit 3 "0.9.7a" "2003-02-19" "OpenSSL"
142 .UC
143 .SH "NAME"
144 EVP_SealInit, EVP_SealUpdate, EVP_SealFinal \- \s-1EVP\s0 envelope encryption
145 .SH "SYNOPSIS"
146 .IX Header "SYNOPSIS"
147 .Vb 1
148 \& #include <openssl/evp.h>
149 .Ve
150 .Vb 6
151 \& int EVP_SealInit(EVP_CIPHER_CTX *ctx, EVP_CIPHER *type, unsigned char **ek,
152 \&                int *ekl, unsigned char *iv,EVP_PKEY **pubk, int npubk);
153 \& int EVP_SealUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
154 \&         int *outl, unsigned char *in, int inl);
155 \& int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out,
156 \&         int *outl);
157 .Ve
158 .SH "DESCRIPTION"
159 .IX Header "DESCRIPTION"
160 The \s-1EVP\s0 envelope routines are a high level interface to envelope
161 encryption. They generate a random key and \s-1IV\s0 (if required) then
162 \&\*(L"envelope\*(R" it by using public key encryption. Data can then be
163 encrypted using this key.
164 .PP
165 \&\fIEVP_SealInit()\fR initializes a cipher context \fBctx\fR for encryption
166 with cipher \fBtype\fR using a random secret key and \s-1IV\s0. \fBtype\fR is normally
167 supplied by a function such as \fIEVP_des_cbc()\fR. The secret key is encrypted
168 using one or more public keys, this allows the same encrypted data to be
169 decrypted using any of the corresponding private keys. \fBek\fR is an array of
170 buffers where the public key encrypted secret key will be written, each buffer
171 must contain enough room for the corresponding encrypted key: that is
172 \&\fBek[i]\fR must have room for \fBEVP_PKEY_size(pubk[i])\fR bytes. The actual
173 size of each encrypted secret key is written to the array \fBekl\fR. \fBpubk\fR is
174 an array of \fBnpubk\fR public keys.
175 .PP
176 The \fBiv\fR parameter is a buffer where the generated \s-1IV\s0 is written to. It must
177 contain enough room for the corresponding cipher's \s-1IV\s0, as determined by (for
178 example) EVP_CIPHER_iv_length(type).
179 .PP
180 If the cipher does not require an \s-1IV\s0 then the \fBiv\fR parameter is ignored
181 and can be \fB\s-1NULL\s0\fR.
182 .PP
183 \&\fIEVP_SealUpdate()\fR and \fIEVP_SealFinal()\fR have exactly the same properties
184 as the \fIEVP_EncryptUpdate()\fR and \fIEVP_EncryptFinal()\fR routines, as 
185 documented on the EVP_EncryptInit(3) manual
186 page. 
187 .SH "RETURN VALUES"
188 .IX Header "RETURN VALUES"
189 \&\fIEVP_SealInit()\fR returns 0 on error or \fBnpubk\fR if successful.
190 .PP
191 \&\fIEVP_SealUpdate()\fR and \fIEVP_SealFinal()\fR return 1 for success and 0 for
192 failure.
193 .SH "NOTES"
194 .IX Header "NOTES"
195 Because a random secret key is generated the random number generator
196 must be seeded before calling \fIEVP_SealInit()\fR.
197 .PP
198 The public key must be \s-1RSA\s0 because it is the only OpenSSL public key
199 algorithm that supports key transport.
200 .PP
201 Envelope encryption is the usual method of using public key encryption
202 on large amounts of data, this is because public key encryption is slow
203 but symmetric encryption is fast. So symmetric encryption is used for
204 bulk encryption and the small random symmetric key used is transferred
205 using public key encryption.
206 .PP
207 It is possible to call \fIEVP_SealInit()\fR twice in the same way as
208 \&\fIEVP_EncryptInit()\fR. The first call should have \fBnpubk\fR set to 0
209 and (after setting any cipher parameters) it should be called again
210 with \fBtype\fR set to \s-1NULL\s0.
211 .SH "SEE ALSO"
212 .IX Header "SEE ALSO"
213 evp(3), rand(3),
214 EVP_EncryptInit(3),
215 EVP_OpenInit(3)
216 .SH "HISTORY"
217 .IX Header "HISTORY"
218 \&\fIEVP_SealFinal()\fR did not return a value before OpenSSL 0.9.7.