tap: Verify at least 16 bytes before reading them

We'd occasionally see fewer than this leading to a panic.  Now, let's
just ensure the values are there by creating them, zero filling them and
copying over whatever was there in case it was short.

cbugg: close bug-856