Every peer maintains his own blockchain of transactions - shared files.
Blocks are exchanged among peers and validated.
Peer can expand his block with a new or existing transaction (file).
When a peer wishes to download a new file from remote block, all available blocks containing such file are considered.
Peer identifies himself using his RSA public key.
All files are encrypted, peer's private RSA key is used to decrypt them. Peer doesn't have to be able to decrypt transaction files in order for him to share them. Peer can import RSA keys.