  Regenerating codes are a class of codes proposed for providing reliability of
data and efficient repair of failed nodes in distributed storage systems. In
this paper, we address the fundamental problem of handling errors and erasures
during the data-reconstruction and node-repair operations. We provide explicit
regenerating codes that are resilient to errors and erasures, and show that
these codes are optimal with respect to storage and bandwidth requirements. As
a special case, we also establish the capacity of a class of distributed
storage systems in the presence of malicious adversaries. While our code
constructions are based on previously constructed Product-Matrix codes, we also
provide necessary and sufficient conditions for introducing resilience in any
regenerating code.
