Initial import from FreeBSD RELENG_4:
[dragonfly.git] / secure / lib / libcrypto / man / EVP_SealInit.3
CommitLineData
984263bc
MD
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"
144EVP_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"
160The \s-1EVP\s0 envelope routines are a high level interface to envelope
161encryption. 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
163encrypted using this key.
164.PP
165\&\fIEVP_SealInit()\fR initializes a cipher context \fBctx\fR for encryption
166with cipher \fBtype\fR using a random secret key and \s-1IV\s0. \fBtype\fR is normally
167supplied by a function such as \fIEVP_des_cbc()\fR. The secret key is encrypted
168using one or more public keys, this allows the same encrypted data to be
169decrypted using any of the corresponding private keys. \fBek\fR is an array of
170buffers where the public key encrypted secret key will be written, each buffer
171must 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
173size of each encrypted secret key is written to the array \fBekl\fR. \fBpubk\fR is
174an array of \fBnpubk\fR public keys.
175.PP
176The \fBiv\fR parameter is a buffer where the generated \s-1IV\s0 is written to. It must
177contain enough room for the corresponding cipher's \s-1IV\s0, as determined by (for
178example) EVP_CIPHER_iv_length(type).
179.PP
180If the cipher does not require an \s-1IV\s0 then the \fBiv\fR parameter is ignored
181and can be \fB\s-1NULL\s0\fR.
182.PP
183\&\fIEVP_SealUpdate()\fR and \fIEVP_SealFinal()\fR have exactly the same properties
184as the \fIEVP_EncryptUpdate()\fR and \fIEVP_EncryptFinal()\fR routines, as
185documented on the EVP_EncryptInit(3) manual
186page.
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
192failure.
193.SH "NOTES"
194.IX Header "NOTES"
195Because a random secret key is generated the random number generator
196must be seeded before calling \fIEVP_SealInit()\fR.
197.PP
198The public key must be \s-1RSA\s0 because it is the only OpenSSL public key
199algorithm that supports key transport.
200.PP
201Envelope encryption is the usual method of using public key encryption
202on large amounts of data, this is because public key encryption is slow
203but symmetric encryption is fast. So symmetric encryption is used for
204bulk encryption and the small random symmetric key used is transferred
205using public key encryption.
206.PP
207It 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
209and (after setting any cipher parameters) it should be called again
210with \fBtype\fR set to \s-1NULL\s0.
211.SH "SEE ALSO"
212.IX Header "SEE ALSO"
213evp(3), rand(3),
214EVP_EncryptInit(3),
215EVP_OpenInit(3)
216.SH "HISTORY"
217.IX Header "HISTORY"
218\&\fIEVP_SealFinal()\fR did not return a value before OpenSSL 0.9.7.