Fix KAT(CCM)?Parser file descriptor leaks
Make KAT(CCM)?Parser into a context suite-capable object by implementing
__enter__ and __exit__ methods which manage opening up the file descriptors
and closing them on context exit. This implementation was decided over adding
destructor logic to a __del__ method, as there are a number of issues around
object lifetimes when dealing with threading cleanup, atexit handlers, and a
number of other less obvious edgecases. Plus, the architected solution is more
pythonic and clean.
Complete the iterator implementation by implementing a __next__ method for
both classes which handles iterating over the data using a generator pattern,
and by changing __iter__ to return the object instead of the data which it
would iterate over. Alias the __next__ method to next when working with
python 2.x in order to maintain functional compatibility between the two major
As part of this work and to ensure readability, push the initialization of the
parser objects up one layer and pass it down to a helper function. This could
have been done via a decorator, but I was trying to keep it simple for other
developers to make it easier to modify in the future.
This fixes ResourceWarnings with python 3.
MFC after: 1 week
Tested with: python 2.7.16 (amd64), python 3.6.8 (amd64)