code: func XORKeyStream(dst, src, nonce, key []byte, rounds int) {
  	if rounds != 20 && rounds != 12 && rounds != 8 {
  		panic("chacha20/chacha: bad number of rounds")
  	}
  	if len(dst) < len(src) {
  		panic("chacha20/chacha: dst buffer is to small")
  	}
  	if len(nonce) == INonceSize && uint64(len(src)) > (1<<38) {
  		panic("chacha20/chacha: src is too large")
  	}
  
  	var block, state [64]byte
  	if err := setup(&state, nonce, key); err != nil {
  		panic(err)
  	}
  	xorKeyStream(dst, src, &block, &state, rounds)
  }
docs: // XORKeyStream crypts bytes from src to dst using the given nonce and key.
  // The length of the nonce determinds the version of ChaCha20:
  // - NonceSize:  ChaCha20/r with a 64 bit nonce and a 2^64 * 64 byte period.
  // - INonceSize: ChaCha20/r as defined in RFC 7539 and a 2^32 * 64 byte period.
  // - XNonceSize: XChaCha20/r with a 192 bit nonce and a 2^64 * 64 byte period.
  // The rounds argument specifies the number of rounds performed for keystream
  // generation - valid values are 8, 12 or 20. The src and dst may be the same slice
  // but otherwise should not overlap. If len(dst) < len(src) this function panics.
  // If the nonce is neither 64, 96 nor 192 bits long, this function panics.