Merge branch 'vendor/LIBPCAP' (early part)
[dragonfly.git] / secure / lib / libcrypto / man / EVP_BytesToKey.3
CommitLineData
e257b235 1.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
8b0cefbb
JR
2.\"
3.\" Standard preamble:
4.\" ========================================================================
5.de Sh \" Subsection heading
984263bc
MD
6.br
7.if t .Sp
8.ne 5
9.PP
10\fB\\$1\fR
11.PP
12..
8b0cefbb 13.de Sp \" Vertical space (when we can't use .PP)
984263bc
MD
14.if t .sp .5v
15.if n .sp
16..
8b0cefbb 17.de Vb \" Begin verbatim text
984263bc
MD
18.ft CW
19.nf
20.ne \\$1
21..
8b0cefbb 22.de Ve \" End verbatim text
984263bc 23.ft R
984263bc
MD
24.fi
25..
8b0cefbb
JR
26.\" Set up some character translations and predefined strings. \*(-- will
27.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
e257b235
PA
28.\" double quote, and \*(R" will give a right double quote. \*(C+ will
29.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
30.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
31.\" nothing in troff, for use with C<>.
32.tr \(*W-
8b0cefbb 33.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
984263bc 34.ie n \{\
8b0cefbb
JR
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' ""
984263bc
MD
43'br\}
44.el\{\
8b0cefbb
JR
45. ds -- \|\(em\|
46. ds PI \(*p
47. ds L" ``
48. ds R" ''
984263bc 49'br\}
8b0cefbb 50.\"
e257b235
PA
51.\" Escape single quotes in literal strings from groff's Unicode transform.
52.ie \n(.g .ds Aq \(aq
53.el .ds Aq '
54.\"
8b0cefbb
JR
55.\" If the F register is turned on, we'll generate index entries on stderr for
56.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
57.\" entries marked with X<> in POD. Of course, you'll have to process the
58.\" output yourself in some meaningful fashion.
e257b235 59.ie \nF \{\
8b0cefbb
JR
60. de IX
61. tm Index:\\$1\t\\n%\t"\\$2"
984263bc 62..
8b0cefbb
JR
63. nr % 0
64. rr F
984263bc 65.\}
e257b235
PA
66.el \{\
67. de IX
68..
69.\}
aac4ff6f 70.\"
8b0cefbb
JR
71.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
72.\" Fear. Run. Save yourself. No user-serviceable parts.
73. \" fudge factors for nroff and troff
984263bc 74.if n \{\
8b0cefbb
JR
75. ds #H 0
76. ds #V .8m
77. ds #F .3m
78. ds #[ \f1
79. ds #] \fP
984263bc
MD
80.\}
81.if t \{\
8b0cefbb
JR
82. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
83. ds #V .6m
84. ds #F 0
85. ds #[ \&
86. ds #] \&
984263bc 87.\}
8b0cefbb 88. \" simple accents for nroff and troff
984263bc 89.if n \{\
8b0cefbb
JR
90. ds ' \&
91. ds ` \&
92. ds ^ \&
93. ds , \&
94. ds ~ ~
95. ds /
984263bc
MD
96.\}
97.if t \{\
8b0cefbb
JR
98. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
99. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
100. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
101. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
102. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
103. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
984263bc 104.\}
8b0cefbb 105. \" troff and (daisy-wheel) nroff accents
984263bc
MD
106.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
107.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
108.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
109.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
110.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
111.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
112.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
113.ds ae a\h'-(\w'a'u*4/10)'e
114.ds Ae A\h'-(\w'A'u*4/10)'E
8b0cefbb 115. \" corrections for vroff
984263bc
MD
116.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
117.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
8b0cefbb 118. \" for low resolution devices (crt and lpr)
984263bc
MD
119.if \n(.H>23 .if \n(.V>19 \
120\{\
8b0cefbb
JR
121. ds : e
122. ds 8 ss
123. ds o a
124. ds d- d\h'-1'\(ga
125. ds D- D\h'-1'\(hy
126. ds th \o'bp'
127. ds Th \o'LP'
128. ds ae ae
129. ds Ae AE
984263bc
MD
130.\}
131.rm #[ #] #H #V #F C
8b0cefbb
JR
132.\" ========================================================================
133.\"
134.IX Title "EVP_BytesToKey 3"
405d0527 135.TH EVP_BytesToKey 3 "2009-04-11" "0.9.8k" "OpenSSL"
e257b235
PA
136.\" For nroff, turn off justification. Always turn off hyphenation; it makes
137.\" way too many mistakes in technical documents.
138.if n .ad l
139.nh
984263bc 140.SH "NAME"
74dab6c2 141EVP_BytesToKey \- password based encryption routine
984263bc 142.SH "SYNOPSIS"
8b0cefbb 143.IX Header "SYNOPSIS"
984263bc
MD
144.Vb 1
145\& #include <openssl/evp.h>
e257b235 146\&
984263bc
MD
147\& int EVP_BytesToKey(const EVP_CIPHER *type,const EVP_MD *md,
148\& const unsigned char *salt,
149\& const unsigned char *data, int datal, int count,
150\& unsigned char *key,unsigned char *iv);
151.Ve
152.SH "DESCRIPTION"
8b0cefbb
JR
153.IX Header "DESCRIPTION"
154\&\fIEVP_BytesToKey()\fR derives a key and \s-1IV\s0 from various parameters. \fBtype\fR is
155the cipher to derive the key and \s-1IV\s0 for. \fBmd\fR is the message digest to use.
984263bc 156The \fBsalt\fR paramter is used as a salt in the derivation: it should point to
8b0cefbb
JR
157an 8 byte buffer or \s-1NULL\s0 if no salt is used. \fBdata\fR is a buffer containing
158\&\fBdatal\fR bytes which is used to derive the keying data. \fBcount\fR is the
159iteration count to use. The derived key and \s-1IV\s0 will be written to \fBkey\fR
984263bc
MD
160and \fBiv\fR respectively.
161.SH "NOTES"
8b0cefbb 162.IX Header "NOTES"
984263bc
MD
163A typical application of this function is to derive keying material for an
164encryption algorithm from a password in the \fBdata\fR parameter.
165.PP
166Increasing the \fBcount\fR parameter slows down the algorithm which makes it
167harder for an attacker to peform a brute force attack using a large number
168of candidate passwords.
169.PP
8b0cefbb
JR
170If the total key and \s-1IV\s0 length is less than the digest length and
171\&\fB\s-1MD5\s0\fR is used then the derivation algorithm is compatible with PKCS#5 v1.5
984263bc
MD
172otherwise a non standard extension is used to derive the extra data.
173.PP
174Newer applications should use more standard algorithms such as PKCS#5
175v2.0 for key derivation.
176.SH "KEY DERIVATION ALGORITHM"
8b0cefbb
JR
177.IX Header "KEY DERIVATION ALGORITHM"
178The key and \s-1IV\s0 is derived by concatenating D_1, D_2, etc until
179enough data is available for the key and \s-1IV\s0. D_i is defined as:
984263bc
MD
180.PP
181.Vb 1
e257b235 182\& D_i = HASH^count(D_(i\-1) || data || salt)
984263bc 183.Ve
8b0cefbb
JR
184.PP
185where || denotes concatentaion, D_0 is empty, \s-1HASH\s0 is the digest
186algorithm in use, HASH^1(data) is simply \s-1HASH\s0(data), HASH^2(data)
187is \s-1HASH\s0(\s-1HASH\s0(data)) and so on.
984263bc
MD
188.PP
189The initial bytes are used for the key and the subsequent bytes for
8b0cefbb 190the \s-1IV\s0.
984263bc 191.SH "RETURN VALUES"
74dab6c2 192.IX Header "RETURN VALUES"
8b0cefbb
JR
193\&\fIEVP_BytesToKey()\fR returns the size of the derived key in bytes.
194.SH "SEE ALSO"
74dab6c2 195.IX Header "SEE ALSO"
8b0cefbb 196\&\fIevp\fR\|(3), \fIrand\fR\|(3),
a561f9ff 197\&\fIEVP_EncryptInit\fR\|(3)
8b0cefbb 198.SH "HISTORY"
984263bc 199.IX Header "HISTORY"