include::../description.adoc[]

include::../ask-yourself.adoc[]

include::../recommended.adoc[]

=== Code examples

==== Noncompliant code example

[source,go,diff-id=1,diff-type=noncompliant]
----
import "math/rand"

a := make([]byte, 10)
rand.Read(a) // Sensitive
----

[source,go,diff-id=2,diff-type=noncompliant]
----
import "math/rand"

num := rand.Intn(100) // Sensitive
----

==== Compliant solution

[source,go,diff-id=1,diff-type=compliant]
----
import "crypto/rand"

a := make([]byte, 10)
_, err := rand.Read(a)
if err != nil {
    panic(err)
}
----

[source,go,diff-id=2,diff-type=compliant]
----
import "crypto/rand"

temp, err := rand.Int(rand.Reader, big.NewInt(100))
if err != nil {
    panic(err)
}
num := temp.Int64()
----

include::../see.adoc[]

ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

include::../message.adoc[]

=== Highlighting

* Highlight the following functions from the package `math/rand`:

  - `Int`
  - `Intn`
  - `Int31`
  - `Int31n`
  - `Int63`
  - `Int63n`
  - `Uint32`
  - `Uint64`
  - `ExpFloat64`
  - `Float32`
  - `Float64`
  - `NormFloat64`
  - `Perm`
  - `Shuffle`
  - `Read`

* Highlight the following methods of the type `Rand` from the package `math/rand`:

  - `Int`
  - `Intn`
  - `Int31`
  - `Int31n`
  - `Int63`
  - `Int63n`
  - `Uint32`
  - `Uint64`
  - `ExpFloat64`
  - `Float32`
  - `Float64`
  - `NormFloat64`
  - `Perm`
  - `Shuffle`
  - `Read`

'''
== Comments And Links
(visible only on this page)

include::../comments-and-links.adoc[]

endif::env-github,rspecator-view[]

