Link Search Menu Expand Document (external link)

1.1 Design Document

Before you start writing any code for this project, we’d like you to create a design plan for each feature, and convince yourself that your design meets all requirements outlined in this spec.

Like any techinical writing, your design document needs to be clean and well formatted. In addition, it must contain the following sections:

Data Structures

What data structures are you going to use? List any struct definitions that you plan on including, along with the attributes these structs will contain. We’d recommend starting with a few core data structures (e.g. struct user, struct file, etc.), and adding additional attributes and structs as you need them.

User Authentication

How will you authenticate users? What information will you store in Datastore/Keystore for each user? How will you ensure that a user can have multiple client instances (e.g. laptop, phone, etc.) running simultaneously?

Relevant Client API Methods: InitUser, GetUser

File Storage and Retrieval

How will you store and retrieve files from the server? How will your design support efficient file append?

Relevant Client API Methods: LoadFile, StoreFile, AppendToFile

File Sharing and Revocation

How will you allow files to be shared with other users? How will you manage file revocation? How will you ensure a revoked user can’t take any malicious actions on a file?

Relevant Client API Methods: CreateInvitation, AcceptInvitation

Helper Methods

Are there helper methods that you’ll create? There are a few in particular that may help simplify your implementation.

Hint: think about authenticated encryption.