PKCS5_PBE_keyivgen.3ossl 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. .\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42)
  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 >0, 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 "PKCS5_PBE_KEYIVGEN 3ossl"
  136. .TH PKCS5_PBE_KEYIVGEN 3ossl "2024-09-03" "3.3.2" "OpenSSL"
  137. .\" For nroff, turn off justification. Always turn off hyphenation; it makes
  138. .\" way too many mistakes in technical documents.
  139. .if n .ad l
  140. .nh
  141. .SH "NAME"
  142. PKCS5_PBE_keyivgen, PKCS5_PBE_keyivgen_ex, PKCS5_pbe2_set, PKCS5_pbe2_set_iv,
  143. PKCS5_pbe2_set_iv_ex, PKCS5_pbe_set, PKCS5_pbe_set_ex, PKCS5_pbe2_set_scrypt,
  144. PKCS5_pbe_set0_algor, PKCS5_pbe_set0_algor_ex,
  145. PKCS5_v2_PBE_keyivgen, PKCS5_v2_PBE_keyivgen_ex,
  146. PKCS5_v2_scrypt_keyivgen, PKCS5_v2_scrypt_keyivgen_ex,
  147. PKCS5_pbkdf2_set, PKCS5_pbkdf2_set_ex, EVP_PBE_scrypt, EVP_PBE_scrypt_ex
  148. \&\- PKCS#5 Password based encryption routines
  149. .SH "SYNOPSIS"
  150. .IX Header "SYNOPSIS"
  151. .Vb 1
  152. \& #include <openssl/evp.h>
  153. \&
  154. \& int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,
  155. \& ASN1_TYPE *param, const EVP_CIPHER *cipher,
  156. \& const EVP_MD *md, int en_de);
  157. \& int PKCS5_PBE_keyivgen_ex(EVP_CIPHER_CTX *cctx, const char *pass, int passlen,
  158. \& ASN1_TYPE *param, const EVP_CIPHER *cipher,
  159. \& const EVP_MD *md, int en_de, OSSL_LIB_CTX *libctx,
  160. \& const char *propq);
  161. \& int PKCS5_v2_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,
  162. \& ASN1_TYPE *param, const EVP_CIPHER *cipher,
  163. \& const EVP_MD *md, int en_de);
  164. \& int PKCS5_v2_PBE_keyivgen_ex(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,
  165. \& ASN1_TYPE *param, const EVP_CIPHER *cipher,
  166. \& const EVP_MD *md, int en_de,
  167. \& OSSL_LIB_CTX *libctx, const char *propq);
  168. \& int EVP_PBE_scrypt(const char *pass, size_t passlen,
  169. \& const unsigned char *salt, size_t saltlen,
  170. \& uint64_t N, uint64_t r, uint64_t p, uint64_t maxmem,
  171. \& unsigned char *key, size_t keylen);
  172. \& int EVP_PBE_scrypt_ex(const char *pass, size_t passlen,
  173. \& const unsigned char *salt, size_t saltlen,
  174. \& uint64_t N, uint64_t r, uint64_t p, uint64_t maxmem,
  175. \& unsigned char *key, size_t keylen,
  176. \& OSSL_LIB_CTX *ctx, const char *propq);
  177. \& int PKCS5_v2_scrypt_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass,
  178. \& int passlen, ASN1_TYPE *param,
  179. \& const EVP_CIPHER *c, const EVP_MD *md, int en_de);
  180. \& int PKCS5_v2_scrypt_keyivgen_ex(EVP_CIPHER_CTX *ctx, const char *pass,
  181. \& int passlen, ASN1_TYPE *param,
  182. \& const EVP_CIPHER *c, const EVP_MD *md, int en_de,
  183. \& OSSL_LIB_CTX *libctx, const char *propq);
  184. \&
  185. \& #include <openssl/x509.h>
  186. \&
  187. \& int PKCS5_pbe_set0_algor(X509_ALGOR *algor, int alg, int iter,
  188. \& const unsigned char *salt, int saltlen);
  189. \& int PKCS5_pbe_set0_algor_ex(X509_ALGOR *algor, int alg, int iter,
  190. \& const unsigned char *salt, int saltlen,
  191. \& OSSL_LIB_CTX *libctx);
  192. \&
  193. \& X509_ALGOR *PKCS5_pbe_set(int alg, int iter,
  194. \& const unsigned char *salt, int saltlen);
  195. \& X509_ALGOR *PKCS5_pbe_set_ex(int alg, int iter,
  196. \& const unsigned char *salt, int saltlen,
  197. \& OSSL_LIB_CTX *libctx);
  198. \&
  199. \& X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter,
  200. \& unsigned char *salt, int saltlen);
  201. \& X509_ALGOR *PKCS5_pbe2_set_iv(const EVP_CIPHER *cipher, int iter,
  202. \& unsigned char *salt, int saltlen,
  203. \& unsigned char *aiv, int prf_nid);
  204. \& X509_ALGOR *PKCS5_pbe2_set_iv_ex(const EVP_CIPHER *cipher, int iter,
  205. \& unsigned char *salt, int saltlen,
  206. \& unsigned char *aiv, int prf_nid,
  207. \& OSSL_LIB_CTX *libctx);
  208. \& X509_ALGOR *PKCS5_pbe2_set_scrypt(const EVP_CIPHER *cipher,
  209. \& const unsigned char *salt, int saltlen,
  210. \& unsigned char *aiv, uint64_t N, uint64_t r,
  211. \& uint64_t p);
  212. \&
  213. \& X509_ALGOR *PKCS5_pbkdf2_set(int iter, unsigned char *salt, int saltlen,
  214. \& int prf_nid, int keylen);
  215. \& X509_ALGOR *PKCS5_pbkdf2_set_ex(int iter, unsigned char *salt, int saltlen,
  216. \& int prf_nid, int keylen,
  217. \& OSSL_LIB_CTX *libctx);
  218. .Ve
  219. .SH "DESCRIPTION"
  220. .IX Header "DESCRIPTION"
  221. .SS "Key Derivation"
  222. .IX Subsection "Key Derivation"
  223. \&\fBPKCS5_PBE_keyivgen()\fR and \fBPKCS5_PBE_keyivgen_ex()\fR take a password \fIpass\fR of
  224. length \fIpasslen\fR, parameters \fIparam\fR and a message digest function \fImd_type\fR
  225. and performs a key derivation according to PKCS#5 \s-1PBES1.\s0 The resulting key is
  226. then used to initialise the cipher context \fIctx\fR with a cipher \fIcipher\fR for
  227. encryption (\fIen_de\fR=1) or decryption (\fIen_de\fR=0).
  228. .PP
  229. \&\fIpass\fR is an optional parameter and can be \s-1NULL.\s0 If \fIpasslen\fR is \-1, then the
  230. function will calculate the length of \fIpass\fR using \fBstrlen()\fR.
  231. .PP
  232. \&\fBPKCS5_v2_PBE_keyivgen()\fR and \fBPKCS5_v2_PBE_keyivgen_ex()\fR are similar to the above
  233. but instead use PKCS#5 \s-1PBES2\s0 as the encryption algorithm using the supplied
  234. parameters.
  235. .PP
  236. \&\fBPKCS5_v2_scrypt_keyivgen()\fR and \fBPKCS5_v2_scrypt_keyivgen_ex()\fR use \s-1SCRYPT\s0 as the
  237. key derivation part of the encryption algorithm.
  238. .PP
  239. \&\fIsalt\fR is the salt used in the derivation of length \fIsaltlen\fR. If the
  240. \&\fIsalt\fR is \s-1NULL,\s0 then \fIsaltlen\fR must be 0. The function will not
  241. attempt to calculate the length of the \fIsalt\fR because it is not assumed to
  242. be \s-1NULL\s0 terminated.
  243. .PP
  244. \&\fIiter\fR is the iteration count and its value should be greater than or
  245. equal to 1. \s-1RFC 2898\s0 suggests an iteration count of at least 1000. Any
  246. \&\fIiter\fR less than 1 is treated as a single iteration.
  247. .PP
  248. \&\fIdigest\fR is the message digest function used in the derivation.
  249. .PP
  250. Functions ending in \fB_ex()\fR take optional parameters \fIlibctx\fR and \fIpropq\fR which
  251. are used to select appropriate algorithm implementations.
  252. .SS "Algorithm Identifier Creation"
  253. .IX Subsection "Algorithm Identifier Creation"
  254. \&\fBPKCS5_pbe_set()\fR, \fBPKCS5_pbe_set_ex()\fR, \fBPKCS5_pbe2_set()\fR, \fBPKCS5_pbe2_set_iv()\fR,
  255. \&\fBPKCS5_pbe2_set_iv_ex()\fR and \fBPKCS5_pbe2_set_scrypt()\fR generate an \fBX509_ALGOR\fR
  256. object which represents an AlgorithmIdentifier containing the algorithm \s-1OID\s0 and
  257. associated parameters for the \s-1PBE\s0 algorithm.
  258. .PP
  259. \&\fBPKCS5_pbkdf2_set()\fR and \fBPKCS5_pbkdf2_set_ex()\fR generate an \fBX509_ALGOR\fR
  260. object which represents an AlgorithmIdentifier containing the algorithm \s-1OID\s0 and
  261. associated parameters for the \s-1PBKDF2\s0 algorithm.
  262. .PP
  263. \&\fBPKCS5_pbe_set0_algor()\fR and \fBPKCS5_pbe_set0_algor_ex()\fR set the \s-1PBE\s0 algorithm \s-1OID\s0 and
  264. parameters into the supplied \fBX509_ALGOR\fR.
  265. .PP
  266. If \fIsalt\fR is \s-1NULL,\s0 then \fIsaltlen\fR specifies the size in bytes of the random salt to
  267. generate. If \fIsaltlen\fR is 0 then a default size is used.
  268. For \s-1PBE\s0 related functions such as \fBPKCS5_pbe_set_ex()\fR the default salt length is 8 bytes.
  269. For \s-1PBE2\s0 related functions that use \s-1PBKDF2\s0 such as \fBPKCS5_pbkdf2_set()\fR,
  270. \&\fBPKCS5_pbe2_set_scrypt()\fR and \fBPKCS5_pbe2_set()\fR the default salt length is 16 bytes.
  271. .SH "NOTES"
  272. .IX Header "NOTES"
  273. The *\fB_keyivgen()\fR functions are typically used in PKCS#12 to encrypt objects.
  274. .PP
  275. These functions make no assumption regarding the given password.
  276. It will simply be treated as a byte sequence.
  277. .SH "RETURN VALUES"
  278. .IX Header "RETURN VALUES"
  279. \&\fBPKCS5_PBE_keyivgen()\fR, \fBPKCS5_v2_PBE_keyivgen()\fR,
  280. \&\fBPKCS5_v2_PBE_keyivgen_ex()\fR, \fBPKCS5_v2_scrypt_keyivgen()\fR,
  281. \&\fBPKCS5_v2_scrypt_keyivgen_ex()\fR, \fBPKCS5_pbe_set0_algor()\fR and
  282. \&\fBPKCS5_pbe_set0_algor_ex()\fR return 1 for success and 0 if an error occurs.
  283. .PP
  284. \&\fBPKCS5_pbe_set()\fR, \fBPKCS5_pbe_set_ex()\fR, \fBPKCS5_pbe2_set()\fR, \fBPKCS5_pbe2_set_iv()\fR,
  285. \&\fBPKCS5_pbe2_set_iv_ex()\fR, \fBPKCS5_pbe2_set_scrypt()\fR,
  286. \&\fBPKCS5_pbkdf2_set()\fR and \fBPKCS5_pbkdf2_set_ex()\fR return an \fBX509_ALGOR\fR object or
  287. \&\s-1NULL\s0 if an error occurs.
  288. .SH "CONFORMING TO"
  289. .IX Header "CONFORMING TO"
  290. \&\s-1IETF RFC 8018\s0 (<https://tools.ietf.org/html/rfc8018>)
  291. .SH "SEE ALSO"
  292. .IX Header "SEE ALSO"
  293. \&\fBEVP_PBE_CipherInit_ex\fR\|(3),
  294. \&\fBPKCS12_pbe_crypt_ex\fR\|(3),
  295. \&\fBpassphrase\-encoding\fR\|(7)
  296. .SH "HISTORY"
  297. .IX Header "HISTORY"
  298. \&\fBPKCS5_v2_PBE_keyivgen_ex()\fR, \fBEVP_PBE_scrypt_ex()\fR, \fBPKCS5_v2_scrypt_keyivgen_ex()\fR,
  299. \&\fBPKCS5_pbe_set0_algor_ex()\fR, \fBPKCS5_pbe_set_ex()\fR, \fBPKCS5_pbe2_set_iv_ex()\fR and
  300. \&\fBPKCS5_pbkdf2_set_ex()\fR were added in OpenSSL 3.0.
  301. .PP
  302. From OpenSSL 3.0 the \s-1PBKDF1\s0 algorithm used in \fBPKCS5_PBE_keyivgen()\fR and
  303. \&\fBPKCS5_PBE_keyivgen_ex()\fR has been moved to the legacy provider as an \s-1EVP_KDF.\s0
  304. .PP
  305. In OpenSSL 3.2 the default salt length changed from 8 bytes to 16 bytes for \s-1PBE2\s0
  306. related functions such as \fBPKCS5_pbe2_set()\fR.
  307. This is required for \s-1PBKDF2 FIPS\s0 compliance.
  308. .SH "COPYRIGHT"
  309. .IX Header "COPYRIGHT"
  310. Copyright 2021\-2023 The OpenSSL Project Authors. All Rights Reserved.
  311. .PP
  312. Licensed under the Apache License 2.0 (the \*(L"License\*(R"). You may not use
  313. this file except in compliance with the License. You can obtain a copy
  314. in the file \s-1LICENSE\s0 in the source distribution or at
  315. <https://www.openssl.org/source/license.html>.