Analysis of finite-length low-density parity-check codes