Department of Electrical and Computer Engineering George Mason University Volgenau School of IT & Engineering



Cryptographic hash functions turn arbitrary long messages (e.g. files) into fixed size outputs. This functionality is required for example for digital signatures which electronically sign the hash of a message. Currently NIST (National Institute of Standards and Technology) holds a competition for the next hash function standard. One important aspect is how well a new hash function performs in software on micro-controllers. Sphlib is a set of implementations of various hash functions, including the functions in the current hash competition in both C and Java. The C code is meant to be easily imported into other projects, in particular embedded systems. As we have seen in class, C-compilers do not necessarily produce optimal assembly code. It is therefor common practice to implement time critical routines in assembly language and call them from C. Your task for this project is to identify such time critical routines, implement them in assembly for the MSP 430 and document the speed improvement. In this project we are only considering hash functions with 256-bit output.

In order to evaluate the performance of a hash function, benchmarks are being used. A senior design team of our ECE department is adding the MSP430 micro-controller to the eXternal Benchmarking eXtension (XBX) for the benchmarking tool SUPERCOP (System for Unified Performance Evaluation Related to Cryptographic Operations and Primitives). For this project you will NOT be using the XBX, however, as part of the hash competition, the Sphlib has been ported to XBX and several hash algorithms have been sped-up with assembly routines for the AVR microcontrollers. However, no such improvements have been made as of now for the MSP 430.


November 18th 
  • Get description of your assigned hash function (algorithm),
  • get C source code from Sphlib,
  • compile and run hash algorithm on Windows/Linux
  • make a list of all routines (C-functions) that your algorithm uses
  • propose which routines you think would benefit most from an assembly implementation on the MSP 430
December  2nd 
  • Write a small wrapper in C that you can use to test your routines
  • Compile and run the C-functions (routines) within the wrapper in IAR Workbench for MSP 430
December 16th 
  • Compile and run the assembly-functions (routines) within the wrapper in IAR Workbench
  • Compare speed of original C function and assembly function (number of clock cycles)
  • Write a brief report describing your assembly function and compare it with the original C functions. How much faster is your assembly function.


StudentHash AlgorithmAssembly-FunctionsReport
Anandudu Gantala, Sharath KumarBLAKE
Anderson, Paul R. Shabal
Arllen, David BlueMidnightWish
Avuthu, Nagarjuna Reddy JH
Brogan, Namyoung B. Keccak
Chorney, Michael E. Skein
Desai, Sneha C. Luffa
Franco, Fabian ECHO
Giriyan, Dheeraj Groestl
Habib, Bilal CubeHash
Krovvidi, Sri Divya ECHO
Loop, Brian CubeHash
Mehta, Aditya A. HamsiL (Wrapper) (C) (asm)PDF
Mehta, Arth K. SIMD
Mohammed, Wasim SHAvite-3
Pathak, Dwiti Uday Hamsi
Ramachandran, Deepak BlueMidnightWish
Rao, Guruprasad K. Shabal
Shahid, Rabia Groestl
Sharif, Malik U. Keccak
Singh, Maninder Pal Luffa
Tummala, Harika SHAvite-3
Uppu, Ravi Kanth N. Skein
Venkatachalam, Kannan BLAKE
Venkitachalam, Ananthkrishnan Fugue
Wilson, Dean R. Fugue


Copyright © 2010 Jens-Peter Kaps
last updated: December 4th, 2010