A system for communicating program data between devices includes a first
device configured to disassemble a program file comprising program data
into at least one logical data unit, partition each logical data unit
into at least one protocol data unit and compute a first fingerprint over
the payload portion of the protocol data units. The first device is also
configured to send the protocol data units and at least one member of the
group comprising the first fingerprint and a first authentication code
based on the first fingerprint to a second device. The second device is
configured to compute a second fingerprint over the payload portion of
the protocol data units and to commit the program to a memory based on
whether the at least one member matches the second fingerprint or a
second authentication code based on the second fingerprint.