docs: def salsa20_8(B, x, src, s_start, dest, d_start):
      """Salsa20/8 http://en.wikipedia.org/wiki/Salsa20"""
  
      # Merged blockxor for speed
      for i in xrange(16):
          x[i] = B[i] = B[i] ^ src[s_start + i]
  
      # This is the actual Salsa 20/8: four identical double rounds
      for i in xrange(4):
          R(x, 4, 0,12, 7);R(x, 8, 4, 0, 9);R(x,12, 8, 4,13);R(x, 0,12, 8,18)
          R(x, 9, 5, 1, 7);R(x,13, 9, 5, 9);R(x, 1,13, 9,13);R(x, 5, 1,13,18)
          R(x,14,10, 6, 7);R(x, 2,14,10, 9);R(x, 6, 2,14,13);R(x,10, 6, 2,18)
          R(x, 3,15,11, 7);R(x, 7, 3,15, 9);R(x,11, 7, 3,13);R(x,15,11, 7,18)
          R(x, 1, 0, 3, 7);R(x, 2, 1, 0, 9);R(x, 3, 2, 1,13);R(x, 0, 3, 2,18)
          R(x, 6, 5, 4, 7);R(x, 7, 6, 5, 9);R(x, 4, 7, 6,13);R(x, 5, 4, 7,18)
          R(x,11,10, 9, 7);R(x, 8,11,10, 9);R(x, 9, 8,11,13);R(x,10, 9, 8,18)
          R(x,12,15,14, 7);R(x,13,12,15, 9);R(x,14,13,12,13);R(x,15,14,13,18)
  
      # While we are handling the data, write it to the correct dest.
      # The latter half is still part of salsa20
      for i in xrange(16):
          dest[d_start + i] = B[i] = (x[i] + B[i]) & 0xffffffff