code: func generateSecureRandomData(length int) ([]byte, error) {
  	x := make([]byte, length)
  	y := make([]byte, length)
  	res := make([]byte, length)
  
  	_, err := crand.Read(x)
  	if err != nil {
  		return nil, err
  	} else if !validateDataIntegrity(x, length) {
  		return nil, errors.New("crypto/rand failed to generate secure random data")
  	}
  	_, err = mrand.Read(y)
  	if err != nil {
  		return nil, err
  	} else if !validateDataIntegrity(y, length) {
  		return nil, errors.New("math/rand failed to generate secure random data")
  	}
  	for i := 0; i < length; i++ {
  		res[i] = x[i] ^ y[i]
  	}
  	if !validateDataIntegrity(res, length) {
  		return nil, errors.New("failed to generate secure random data")
  	}
  	return res, nil
  }
docs: // generateSecureRandomData generates random data where extra security is required.
  // The purpose of this function is to prevent some bugs in software or in hardware
  // from delivering not-very-random data. This is especially useful for AES nonce,
  // where true randomness does not really matter, but it is very important to have
  // a unique nonce for every message.