Resit coursework
Computer Processors (COMP1212/XJCO1212)
You should follow the instructions below on how to prepare your submission. Late sub- missions are not accepted without mitigating circumstances. Feedback on late submissions may not be provided within 3 weeks of submission.
Submission You must submit your work via Gradescope.
Deadline See Gradescope.
Weighting This piece of summative coursework is worth 25% of the module grade.
The Feistel cipher is a symmetric block cipher encryption framework which is the basis of many modern day encryption algorithms. In this coursework you will implement a Feistel cipher system as a hardware component and as a software implementation. In a Feistel cipher the plaintext, P, to be encrypted is split into two equal size parts L0 and R0 such that P = L0R0. A function F is applied to one half of the plaintext, combined with a key, and the result is XOR’d with the other half of the plaintext. Feistel ciphers often employ multiple rounds of this scheme. In general the scheme works as follows, for all i = 0,...,n,
Li+1 = Ri
Ri+1 =Li ⊕F(Ri,Ki)
To decrypt an encrypted message using this cipher we can apply the same procedure inreverse. Fori=n,n−1,...,0,
Ri = Li+1
Li =Ri+1 ⊕F(Li+1,Ki)
For this coursework we are interested in the 16-bit Feistel cipher which uses 4 rounds. The function F (A, B) = A ⊕ B. The keys are derived from a single 8-bit key K0 such that,
K0 = b7b6b5b4b3b2b1b0
K1 = b6b5b4b3b2b1b0b7
K2 = b5b4b3b2b1b0b7b6
K3 = b4b3b2b1b0b7b6b5
1. Produce an implementation, in HDL, of the described Feistel encryption scheme. The chip should have the following preamble.
1 CHIP FeistelEncryption {
2 IN plaintext[16], key[8];
3 OUT ciphertext[16];
4 PARTS: }
2. Write a program in HACK assembly, without using symbols, that implements the described Feistel encryption system. The initial key, K0, will be stored in RAM[1], and the 16-bit plaintext will be stored in RAM[2]. The result of the encryption should be stored in RAM[0]. Your solution should be submitted in a file called “FeistelEncryption.asm”.
You may use any RAM locations not specified in the description for intermediate variables.
Question 1 is worth 10 marks, and Question 2 is worth 15 marks.