RAND_bytes.3ossl 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  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 "RAND_BYTES 3ossl"
  136. .TH RAND_BYTES 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. RAND_bytes, RAND_priv_bytes, RAND_bytes_ex, RAND_priv_bytes_ex,
  143. RAND_pseudo_bytes \- generate random data
  144. .SH "SYNOPSIS"
  145. .IX Header "SYNOPSIS"
  146. .Vb 1
  147. \& #include <openssl/rand.h>
  148. \&
  149. \& int RAND_bytes(unsigned char *buf, int num);
  150. \& int RAND_priv_bytes(unsigned char *buf, int num);
  151. \&
  152. \& int RAND_bytes_ex(OSSL_LIB_CTX *ctx, unsigned char *buf, size_t num,
  153. \& unsigned int strength);
  154. \& int RAND_priv_bytes_ex(OSSL_LIB_CTX *ctx, unsigned char *buf, size_t num,
  155. \& unsigned int strength);
  156. .Ve
  157. .PP
  158. The following function has been deprecated since OpenSSL 1.1.0, and can be
  159. hidden entirely by defining \fB\s-1OPENSSL_API_COMPAT\s0\fR with a suitable version value,
  160. see \fBopenssl_user_macros\fR\|(7):
  161. .PP
  162. .Vb 1
  163. \& int RAND_pseudo_bytes(unsigned char *buf, int num);
  164. .Ve
  165. .SH "DESCRIPTION"
  166. .IX Header "DESCRIPTION"
  167. \&\fBRAND_bytes()\fR generates \fBnum\fR random bytes using a cryptographically
  168. secure pseudo random generator (\s-1CSPRNG\s0) and stores them in \fBbuf\fR.
  169. .PP
  170. \&\fBRAND_priv_bytes()\fR has the same semantics as \fBRAND_bytes()\fR. It is intended to
  171. be used for generating values that should remain private. If using the
  172. default \s-1RAND_METHOD,\s0 this function uses a separate \*(L"private\*(R" \s-1PRNG\s0
  173. instance so that a compromise of the \*(L"public\*(R" \s-1PRNG\s0 instance will not
  174. affect the secrecy of these private values, as described in \s-1\fBRAND\s0\fR\|(7)
  175. and \s-1\fBEVP_RAND\s0\fR\|(7).
  176. .PP
  177. \&\fBRAND_bytes_ex()\fR and \fBRAND_priv_bytes_ex()\fR are the same as \fBRAND_bytes()\fR and
  178. \&\fBRAND_priv_bytes()\fR except that they both take additional \fIstrength\fR and
  179. \&\fIctx\fR parameters. The bytes generated will have a security strength of at
  180. least \fIstrength\fR bits.
  181. The \s-1DRBG\s0 used for the operation is the public or private \s-1DRBG\s0 associated with
  182. the specified \fIctx\fR. The parameter can be \s-1NULL,\s0 in which case
  183. the default library context is used (see \s-1\fBOSSL_LIB_CTX\s0\fR\|(3).
  184. If the default \s-1RAND_METHOD\s0 has been changed then for compatibility reasons the
  185. \&\s-1RAND_METHOD\s0 will be used in preference and the \s-1DRBG\s0 of the library context
  186. ignored.
  187. .SH "NOTES"
  188. .IX Header "NOTES"
  189. By default, the OpenSSL \s-1CSPRNG\s0 supports a security level of 256 bits, provided it
  190. was able to seed itself from a trusted entropy source.
  191. On all major platforms supported by OpenSSL (including the Unix-like platforms
  192. and Windows), OpenSSL is configured to automatically seed the \s-1CSPRNG\s0 on first use
  193. using the operating systems's random generator.
  194. .PP
  195. If the entropy source fails or is not available, the \s-1CSPRNG\s0 will enter an
  196. error state and refuse to generate random bytes. For that reason, it is important
  197. to always check the error return value of \fBRAND_bytes()\fR and \fBRAND_priv_bytes()\fR and
  198. not take randomness for granted.
  199. .PP
  200. On other platforms, there might not be a trusted entropy source available
  201. or OpenSSL might have been explicitly configured to use different entropy sources.
  202. If you are in doubt about the quality of the entropy source, don't hesitate to ask
  203. your operating system vendor or post a question on GitHub or the openssl-users
  204. mailing list.
  205. .SH "RETURN VALUES"
  206. .IX Header "RETURN VALUES"
  207. \&\fBRAND_bytes()\fR and \fBRAND_priv_bytes()\fR
  208. return 1 on success, \-1 if not supported by the current
  209. \&\s-1RAND\s0 method, or 0 on other failure. The error code can be
  210. obtained by \fBERR_get_error\fR\|(3).
  211. .SH "SEE ALSO"
  212. .IX Header "SEE ALSO"
  213. \&\fBRAND_add\fR\|(3),
  214. \&\fBRAND_bytes\fR\|(3),
  215. \&\fBRAND_priv_bytes\fR\|(3),
  216. \&\fBERR_get_error\fR\|(3),
  217. \&\s-1\fBRAND\s0\fR\|(7),
  218. \&\s-1\fBEVP_RAND\s0\fR\|(7)
  219. .SH "HISTORY"
  220. .IX Header "HISTORY"
  221. .IP "\(bu" 2
  222. \&\fBRAND_pseudo_bytes()\fR was deprecated in OpenSSL 1.1.0; use \fBRAND_bytes()\fR instead.
  223. .IP "\(bu" 2
  224. The \fBRAND_priv_bytes()\fR function was added in OpenSSL 1.1.1.
  225. .IP "\(bu" 2
  226. The \fBRAND_bytes_ex()\fR and \fBRAND_priv_bytes_ex()\fR functions were added in OpenSSL 3.0
  227. .SH "COPYRIGHT"
  228. .IX Header "COPYRIGHT"
  229. Copyright 2000\-2022 The OpenSSL Project Authors. All Rights Reserved.
  230. .PP
  231. Licensed under the Apache License 2.0 (the \*(L"License\*(R"). You may not use
  232. this file except in compliance with the License. You can obtain a copy
  233. in the file \s-1LICENSE\s0 in the source distribution or at
  234. <https://www.openssl.org/source/license.html>.