insecure_client module

Insecure (and inefficient) client implementation.

This module implements an insecure client class InsecureClient. You can use this class as a guide for how to subclass from BaseClient and implement the necessary methods. Feel free to borrow as much or as little code from this implementation as you want, but remember that it is not secure – do not submit the insecure client as your secure client!

This implementation provides all of the functionality requirements of this project, but has no security properties at all. (Simply submitting this client will earn you 0 points on the project.)

This client gives each user their own “namespace” within the master server by concatenating the username, a slash, and then the filename and using that as the id for the storage server.

The client works by maintaining two types of objects on the server storage: pointers and data. A data object has the contents of a file. A pointer simply acts as a reference to the file. (If you’ve taken operating systems, you can think of pointers as symlinks.) When a user updates a file that is a pointer, she follows the pointers until a data file is reached, and then updates the corresponding data file. Sharing is simply providing the other user with a pointer to the file, and revocation removes the pointer. This satisfies the revocation properties that sub-children are also revoked.

class insecure_client.Client(storage_server, public_key_server, crypto_object, username)

Bases: base_client.BaseClient

An insecure reference implementation of a client.

receive_share(from_username, newname, message)
revoke(user, name)
share(user, name)
upload(name, value)

Joins a list of strings putting a “/” between each.

Parameters:strings – a list of strings to join
Returns:a string