Hello, dear friend, you can consult us at any time if you have any questions, add WeChat: daixieit

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 = L0 R0 .  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 in reverse. For i = n, n i 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  = b7 b6 b5 b4 b3 b2 b1 b0

K1  = b6 b5 b4 b3 b2 b1 b0 b7

K2  = b5 b4 b3 b2 b1 b0 b7 b6

K3  = b4 b3 b2 b1 b0 b7 b6 b5


1. Produce an implementation, in HDL, of the described Feistel encryption scheme. The chip should have the following preamble.

CHIP  FeistelEncryption  {

IN plaintext[16],  key[8];

OUT  ciphertext[16];

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 le called “FeistelEncryption.asm” .

You may use any RAM locations not specified in the description for intermediate variables.