code: func csprngShuffle(csprng io.Reader, n int, swap func(i, j int)) error {
  	if n < 0 {
  		panic("csprngShuffle: n < 0")
  	}
  	if n > ((1 << 31) - 1) {
  		panic("csprngShuffle: n >= 2³¹")
  	}
  
  	for i := n - 1; i > 0; i-- {
  		j, err := csprngUint32n(csprng, uint32(i+1))
  		if err != nil {
  			return err
  		}
  		swap(i, int(j))
  	}
  	return nil
  }
docs: // csprngShuffle randomizes the order of elements given a CSPRNG. n is
  // the number of elements, which must be >= 0 and < 2³¹. swap swaps
  // the elements with indexes i and j.
  //
  // This function implements
  // https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle , and is
  // adapted from math/rand.Shuffle from go 1.10.