diff --git a/README.md b/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..019d1f6edd304dac6ff77c6d10a9aba0edea664a
--- /dev/null
+++ b/README.md
@@ -0,0 +1,24 @@
+# SWEN90006 Assignment 2 2019
+
+Please see the assignment handout which contains all the essential
+information.
+
+Structure of this repository:
+
+* src/: - where the code for the C implementation of the passbook lives
+* src/pocs/: - where your PoCs live
+* fuzzer/: - where your fuzzer will live
+
+Pre-Included Scripts:
+
+* src/Makefile - makefile for building the C implementation etc.
+* src/get_coverage.sh - script to generate coverage reports
+
+Vulnerable Versions (you should put your security vulnerabilities in here):
+
+* src/passbook-vuln1.c -- src/passbook-vuln5.c
+
+Proofs of Concept (PoCs that you should provide for each vulnerability):
+
+* src/pocs/poc1.txt -- src/pocs/poc5.txt
+
diff --git a/fuzzer/Fuzzer.java b/fuzzer/Fuzzer.java
new file mode 100644
index 0000000000000000000000000000000000000000..9394bf8fd81a260984d87d9fe1aa3f3ef35fd4de
--- /dev/null
+++ b/fuzzer/Fuzzer.java
@@ -0,0 +1,38 @@
+import java.io.IOException;
+import java.io.FileOutputStream;
+import java.io.PrintWriter;
+
+
+/* a stub for your team's fuzzer */
+public class Fuzzer {
+
+ private static final String OUTPUT_FILE = "fuzz.txt";
+
+ public static void main(String[] args) throws IOException {
+ System.out.println(Instruction.getBNF());
+ FileOutputStream out = null;
+ PrintWriter pw = null;
+ try {
+ out = new FileOutputStream(OUTPUT_FILE);
+ pw = new PrintWriter(out);
+
+ /* We just print one instruction.
+ Hint: you might want to make use of the instruction
+ grammar which is effectively encoded in Instruction.java */
+ pw.println("list");
+
+ }catch (Exception e){
+ e.printStackTrace(System.err);
+ System.exit(1);
+ }finally{
+ if (pw != null){
+ pw.flush();
+ }
+ if (out != null){
+ out.close();
+ }
+ }
+
+ }
+
+}
diff --git a/fuzzer/Instruction.java b/fuzzer/Instruction.java
new file mode 100644
index 0000000000000000000000000000000000000000..e6bb0d021d540b21e9f3d7a8a533f12b5e63723e
--- /dev/null
+++ b/fuzzer/Instruction.java
@@ -0,0 +1,56 @@
+import java.util.Arrays;
+import java.util.ArrayList;
+
+public enum Instruction {
+ PUT("put",new OperandType[]{OperandType.STRING,OperandType.STRING,OperandType.STRING}),
+ GET("get",new OperandType[]{OperandType.STRING}),
+ REM("rem",new OperandType[]{OperandType.STRING}),
+ SAVE("save",new OperandType[]{OperandType.STRING,OperandType.STRING}),
+ LIST("list",new OperandType[]{}),
+ MASTERPW("masterpw",new OperandType[]{OperandType.STRING});
+
+ public static String getBNF(){
+ String grammar = "<INSTRUCTION> ::= \n";
+ Instruction[] INSTS = Instruction.values();
+ boolean firstInst = true;
+ for (Instruction inst : INSTS){
+ if (firstInst){
+ grammar += " \"";
+ firstInst = false;
+ }else{
+ grammar += " | \"";
+ }
+ grammar += inst.getOpcode() + "\"";
+ for (OperandType op : inst.getOperands()){
+ grammar += " <" + op.toString() + ">";
+ }
+ grammar += "\n";
+ }
+ return grammar;
+ }
+
+ private final String opcode;
+ private final OperandType[] operands;
+
+ Instruction(String opcode, OperandType[] operands){
+ this.opcode = opcode;
+ this.operands = operands;
+ }
+
+ public String getOpcode(){
+ return opcode;
+ }
+
+ public OperandType[] getOperands(){
+ return operands;
+ }
+
+ public String toString(){
+ String operandsString = "";
+ for (OperandType op : operands) {
+ operandsString += " " + op.toString();
+ }
+ return "\"" + opcode + "\"" + operandsString;
+ }
+
+}
diff --git a/fuzzer/OperandType.java b/fuzzer/OperandType.java
new file mode 100644
index 0000000000000000000000000000000000000000..b7a95206616c4f975223042e92aea96910e2d2d6
--- /dev/null
+++ b/fuzzer/OperandType.java
@@ -0,0 +1,3 @@
+public enum OperandType {
+ STRING
+}
diff --git a/src/pocs/poc1.txt b/src/pocs/poc1.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/pocs/poc2.txt b/src/pocs/poc2.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/pocs/poc3.txt b/src/pocs/poc3.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/pocs/poc4.txt b/src/pocs/poc4.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/pocs/poc5.txt b/src/pocs/poc5.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391