Patent ID: 8019988

Claim:
A method implemented at a receiver peer device in a peer-to-peer network comprising the receiver peer device and multiple provider peer devices, the method comprising: a) receiving by the receiver peer device a root hash value of a hash tree for the data object O, wherein the hash tree is a Merkle hash tree comprised of hash values of the data object O organized into levels, wherein the root hash value is a single hash value at level 0 of the hash tree; b) verifying by the receiver peer device a digital signature of the root hash value, wherein the root hash value is digitally signed by a server; c) initializing by the receiver peer device a local cache of the hash tree for the data object O by storing in the local cache of the hash tree the root hash value received by the receiver peer device; d) storing in the local cache of the hash tree previously received hash values requested for previously received data blocks of the data object O; e) sending by the receiver peer device to a provider peer device in the peer-to-peer network a request for a block of the data object O, wherein the multiple provider peer devices comprise the provider peer device; f) determining a subset of hash values of the hash tree for the data object O, wherein the subset of hash values is a subset of an authentication path of the block of the data object O, and wherein the subset of hash values comprises no hash values that are stored in the local cache of the hash tree; g) sending by the receiver peer device to the provider peer device a request for the determined subset of hash values of the hash tree for the data object O; h) receiving by the receiver peer device from the provider peer device the block of the data object O; i) receiving by the receiver peer device from the provider peer device the subset of hash values; j) verifying by the receiver peer device an integrity of the block of the data object O using the subset of hash values and the previously received hash values in the local cache of the hash tree stored at the receiver peer; and k) adding by the receiver peer device the subset of hash values to the local cache of the hash tree stored at the receiver peer if the integrity of the block is verified.