func ReadN(r io.Reader, buf []byte, length int) error {
    size := 0
    for size < length {
        read, err := r.Read(buf[size:])
        size += read