code: func radiusPassword(passwd, secret string, authenticator *radiusAuthenticator) []byte {
  	const blockSize = 16
  	length := (len(passwd) + 0xf) &^ 0xf
  	if length > 128 {
  		length = 128
  	}
  	blocks := make([]byte, length)
  	copy(blocks, []byte(passwd))
  	for i := 0; i < length; i += blockSize {
  		hash := md5.New()
  		hash.Write([]byte(secret))
  		if i >= blockSize {
  			hash.Write(blocks[i-blockSize : i])
  		} else {
  			hash.Write(authenticator[:])
  		}
  		h := hash.Sum(nil)
  		for j := 0; j < blockSize; j++ {
  			blocks[i+j] ^= h[j]
  		}
  	}
  	return blocks
  }
docs: // radiusPassword encodes a password using the algorithm described in RFC2865
  // section 5.2.