# 计算机处理器作业代写 | COMP1212/XJCO1212 Computer Processors Resit coursework

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
in reverse. For i = 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.
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 speci ed in the description for intermediate
variables.