  We give a novel algorithm for enumerating lattice points in any convex body,
and give applications to several classic lattice problems, including the
Shortest and Closest Vector Problems (SVP and CVP, respectively) and Integer
Programming (IP). Our enumeration technique relies on a classical concept from
asymptotic convex geometry known as the M-ellipsoid, and uses as a crucial
subroutine the recent algorithm of Micciancio and Voulgaris (STOC 2010) for
lattice problems in the l_2 norm. As a main technical contribution, which may
be of independent interest, we build on the techniques of Klartag (Geometric
and Functional Analysis, 2006) to give an expected 2^O(n)-time algorithm for
computing an M-ellipsoid for any n-dimensional convex body.
  As applications, we give deterministic 2^{O(n)}-time and -space algorithms
for solving exact SVP, and exact CVP when the target point is sufficiently
close to the lattice, on n-dimensional lattices in any (semi-)norm given an
M-ellipsoid of the unit ball. In many norms of interest, including all l_p
norms, an M-ellipsoid is computable in deterministic poly(n) time, in which
case these algorithms are fully deterministic. Here our approach may be seen as
a derandomization of the "AKS sieve" for exact SVP and CVP (Ajtai, Kumar, and
Sivakumar; STOC 2001 and CCC 2002).
  As a further application of our SVP algorithm, we derive an expected
O(f*(n))^n-time algorithm for Integer Programming, where f*(n) denotes the
optimal bound in the so-called "flatness theorem," which satisfies f*(n) =
O(n^{4/3} \polylog(n)) and is conjectured to be f*(n)=\Theta(n). Our runtime
improves upon the previous best of O(n^{2})^{n} by Hildebrand and Koppe (2010).
