You are allowed and encouraged to write any structs or helper functions to aid your implementation, but all of your code must be contained in client.go.
We will test your client application with a series of functionality and security tests to determine your code score. Due to the nature of computer security, the majority of these tests are hidden. Only a few tests (“Basic Tests”) will be revealed before the deadline; these tests are also provided in the starter code for you to test locally.
Each failed code test will incur a multiplicative penalty on your score. This means that each subsequent failed test has less impact on your grade. This emulates an environment where the existence of a vulnerability is more important than the exact scope of the vulnerability.
Adversarial behavior against the autograder in your code submission will be considered cheating and dealt with accordingly. We will flag and reject any submissions that:
- Import additional libraries (you can only use the existing libraries imported in client.go).
- Spawn other processes.
- Read/write to the file system.
- Create network connections.
- Attack the autograder by printing excessively long output.
- Attempt to leak autograder secrets.