195 LEA-128

195 : LEA-128

Design render

About

The design was implemented as part of an undergraduate academic project.

This design implements the LEA-128 cryptographic algorithm according to the specifications presented in the original paper by its developers [1] and is based on the ideas and architectures proposed in [2] and [3] for an area-efficient implementation.

The design supports both encryption and decryption operations using a very simple handshake-based byte-oriented interface.

How it works

The module receives:

  • a 128-bit master key (16 bytes)
  • a 128-bit data block (16 bytes)

The bytes are loaded serially through ui_in using an input handshake protocol.

After all bytes are loaded:

  • uio_in[3] starts encryption
  • uio_in[4] starts decryption

The processed output block is then transmitted byte-by-byte through uo_out using an output handshake protocol.

Pin usage

Pin Function
ui_in[7:0] Input byte bus
uo_out[7:0] Output byte bus
uio_in[0] request (input handshake)
uio_in[1] request (output handshake)
uio_in[2] acknowledge (output handshake)
uio_in[3] Start encryption
uio_in[4] Start decryption
uio_out[6] valid (output handshake)
uio_out[7] acknowledge (input handshake)

The remaining bidirectional pins are unused.

Input protocol

To send a byte into the design:

  1. Place the byte on ui_in.
  2. Set uio_in[0] high.
  3. Wait until uio_out[7] becomes high.
  4. Clear uio_in[0].
  5. Wait until uio_out[7] returns low.

The first 16 transmitted bytes are interpreted as the encryption key. The next 16 transmitted bytes are interpreted as the input data block.

Output protocol

To receive the plaintext/ciphertext from the design:

  1. Set uio_in[1] high.
  2. Wait until uio_out[6] becomes high.
  3. Read the byte from uo_out.
  4. Pulse uio_in[2] high .
  5. after repeating for all 16 bytes, Clear uio_in[1].

The output block is transmitted one byte at a time.

How to test

The test vector was sourced from Wikipedia. [4]

Encryption test

  1. Reset the design by setting rst_n low.
  2. Send the following 16-byte key:
0f 1e 2d 3c 4b 5a 69 78
87 96 a5 b4 c3 d2 e1 f0
  1. Send the following plaintext block:
10 11 12 13 14 15 16 17
18 19 1a 1b 1c 1d 1e 1f
  1. Pulse uio_in[3] high to start encryption.
  2. Wait for the operation to complete.
  3. Read 16 output bytes using the output handshake.

Expected ciphertext:

9f c8 4e 35 28 c6 c6 18
55 32 c7 a7 04 64 8b fd

Decryption test

  1. Reset the design.
  2. Send the same 16-byte key.
  3. Send the ciphertext block shown above.
  4. Pulse uio_in[4] high to start decryption.
  5. Read 16 output bytes.

Expected plaintext:

10 11 12 13 14 15 16 17
18 19 1a 1b 1c 1d 1e 1f

References

[1] D. Hong, J.-K. Lee, D.-C. Kim, D. Kwon, K. H. Ryu, and D.-G. Lee, “LEA: A 128-Bit Block Cipher for Fast Encryption on Common Processors,” in Information Security and Cryptology – ICISC 2013, Springer, 2014.

[2] D. Lee, D.-C. Kim, D. Kwon, and H. Kim, “Efficient hardware implementation of the lightweight block encryption algorithm LEA,” Sensors, vol. 14, no. 1, pp. 975–994, Jan. 2014. doi: 10.3390/s140100975.

[3] M.-J. Sung, G.-C. Bae, and K.-W. Shin, “Implementation of Lightweight Encryption Algorithm LEA,” IDEC Journal of Integrated Circuits and Systems, vol. 2, no. 2, Jul. 2016.

[4] Wikipedia contributors, “LEA (cipher),” Wikipedia, The Free Encyclopedia. Available: https://en.wikipedia.org/wiki/LEA_(cipher). Licensed under CC BY-SA 4.0.

IO

#InputOutputBidirectional
0data_in[0]data_out[0]req_rx
1data_in[1]data_out[1]req_tx
2data_in[2]data_out[2]ack_tx
3data_in[3]data_out[3]enable_encryption
4data_in[4]data_out[4]enable_decryption
5data_in[5]data_out[5]
6data_in[6]data_out[6]valid_tx
7data_in[7]data_out[7]ack_rx

Chip location

Controller Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux tt_um_chip_rom (Chip ROM) tt_um_factory_test (Tiny Tapeout Factory Test) tt_um_Vincent2405_adder_tree (BSD Convolution Adder Tree) tt_um_BastiBudde_i2c_slave_sensor (I2C Slave Template with Emulated Sensor) tt_um_60hz_load (60 Hz Grid-Forming ASIC with Dump-Load Control) tt_um_spi_config_reg (Simple SPI configuration for analog designs) tt_um_ex_drosen766 (Project) tt_um_spi_cpu_top (SPI-CPU) tt_um_d5smith_mfa (Music for ASICs) tt_um_i2c_master (I2C Master Controller) tt_um_aswarby_mac (Aswarby INT8 MAC) tt_um_arrakeen_spsram_direct (TT-Arrakeen-SPSRAM-direct) tt_um_alu (8-bit Interactive ALU) tt_um_JCT_PoC (ttgf jct PoC) tt_um_jct_lea (LEA-128) tt_um_cwru_cpu (CWRU CPU) tt_um_teapot (100Mbps Ethernet Accelerator Wrapper) tt_um_jte_cordic (CORDIC sin/cos generator) tt_um_aidenkoch4 (Three Channel RGB PWM Controller) tt_um_pschuetz_tremolo (Tremolo guitar pedal ASIC) tt_um_jsabree11_fibonacci_checker (fibbonaci_tt) tt_um_connerdaehler_boop (Procedural ASIC) tt_um_Kieckenwama_Traffic_LIGHT_FSM (Traffic Light FSM) tt_um_KimLuu02_WashingMachine_FSM (WashingMachine_FSM) tt_um_PaulineKreis_PWM_Analyser (PWM-Analyser) tt_um_PWM (PWM Generator) tt_um_wokwi_466666882406199297 (Simple Sprinkler) tt_um_rebeccargb_universal_decoder (Universal Binary to Segment Decoder) tt_um_rebeccargb_hardware_utf8 (Hardware UTF Encoder/Decoder) tt_um_spi_master (SPI Master Slave Communication) tt_um_likitha_trng (Secure TRNG Entropy Generator) tt_um_wnn (8-bit WNN Pattern Recognizer) tt_um_raksha (Raksha) tt_um_uart_soc (UART_SOC) tt_um_ecdsa_verify (ECDSA Verification) tt_um_ecc_processor (ECC Processor) tt_um_fast_auth (Fast Authentication Accelerator) tt_um_karthik_trng (TRNG using Ring Oscillator) tt_um_push (Secure V2X Mini Demonstrator) tt_um_santosh_aes_sbox (AES S-Box Accelerator) tt_um_hardware_anomaly_detection (Hardware Anomaly Detection) tt_um_multi_protocol (Multi-Protocol Communication Controller) tt_um_pqc_ntt_butterfly (PQC NTT Butterfly Core) tt_um_cambridge_nlfsr (Programmable Chaotic NLFSR) tt_um_4b_accumulator_cpu (4 bit Accumulator CPU) tt_um_spi_slave (SPI Slave with 8-Register File) tt_um_geeta_doddamani_lfsr (4-bit Maximum-Length LFSR) tt_um_ecc_accelerator (ECC Scalar Accelerator) tt_um_egurapha_chacha20 (ChaCha20) tt_um_configurable_pwm (Configurable PWM Generator) tt_um_Arctic0 (Arctic0 16-bit CPU) tt_um_comp8 (8-bit Comparator) tt_um_pwm_cit (Configurable 8-bit PWM Generator) tt_um_rameshwar_door_lock (Digital Door Lock) tt_um_sandy_venky (8-bit LFSR Circuit) tt_um_ljhahne_pong (Pong) tt_um_v2x_warning (V2X Collision Warning) tt_um_ecc_scalar_mult (ECC Scalar Multiplication) tt_um_fhw_appel_spiPWMio (spiPWMio) tt_um_arrakeen_spsram_direct_sramrules (TT-Arrakeen-SPSRAM-direct-sramrules) tt_um_arrakeen_spsram_direct_5v (TT-Arrakeen-SPSRAM-direct-5V) tt_um_LukeSilva_cartrip (Car Trip) tt_um_coffeepot (100Mpbs 3 port Ethernet switch) tt_um_emiliopeju_lightscan (Lightscan) tt_um_Alanduan21_triad01_top (triad01) tt_um_lif_snn (4-Neuron LIF Spiking Neural Network) tt_um_smerity_mandelbrot (Smerity-Mandelbrot) tt_um_elvtide01_7SegmentDice (7SegmentDice) tt_um_elemental_harmony (Elemental Harmony Game) tt_um_pattern_gen (Programmable Waveform and PWM Generator) tt_um_antimatter15_pdm_vad (PDM Voice Activity Detector) tt_um_layla_spike_detector (Neural Spike Detector) tt_um_detronyx_arith_lab (Detronyx Arithmetic Lab Tile) tt_um_hasheddan_nni (Nearest Neighbor Interpolation) tt_um_brisq (BRISQ) tt_um_santhosh_spike_codec_gf (Neuromorphic Spike Codec (GF180)) tt_um_santhosh_aer_router_gf (Asynchronous-AER Spike Router (4-phase REQ/ACK, 16-entry routing table, GF180)) tt_um_santhosh_snn_wta_gf (Spiking Neural Network WTA Inference Engine (GF180)) tt_um_santhosh_cim_bist_gf (CIM Controller with BIST and Fault Map (GF180)) tt_um_santhosh_neuro_puf_gf (Neuromorphic PUF (distinct-tap LFSR arbiter + memristor XOR, GF180)) tt_um_detronyx_uart_trace_exerciser (Detronyx UART Trace Exerciser) tt_um_ro_puf (Tiny RIng Oscillator PUF) tt_um_franretfie_top (Quadrature sine generator) tt_um_cherny_xor_8bi (XORing given bits) tt_um_mealycpp_ascon_sdmc_uart (ASCON Integrated Crypto Processor) tt_um_reflex_s4 (AER Reflex Chip - MCP2515 CAN gateway) tt_um_polytrig_core (PolyTrig Digital Waveform Synthesis Core) tt_um_waferspace_vga_screensaver (Wafer.space Logo VGA Screensaver) tt_um_2048_vga_game (2048 sliding tile puzzle game (VGA)) tt_um_urish_simon (Simon Says memory game) Available