modexp ====== Modular exponentiation core for implementing public key algorithms such as RSA, DH, ElGamal etc. The core calculates the following functions: C = M ** e mod N M = C ** d mod N d is the private key exponent. M is a message with a length of n bits e is the exponent with a length of at most 32 bits N is the modulus with a length of n bits n is can be 32 and up to and including 8192 bits in steps of 32 bits. The core has a 32-bit memory like interface. The core is written in Verilog 2001 and suitable for implementation in FPGA and ASIC devices. No vendor specific macros are used in the code. ## Implementation details ## The core is using Montgomery multiplication with 32-bit operands. The core is iterative and will not be the fastest core on the planet. The residue calculation is done in a separate process and the calculated residue can be extracted and loaded by the application to improve performance. The core will perform blinding to protect against side channel attacks. ## FPGA-results ## No results yet. ## Status ## ***(2015-04-20)*** The Montgomery calculator has been implemented and debugged. The residue calculator has been implemeted and debugged. The top level is being developed and debugged. ***(2015-03-13)*** A working, bit exact C model with test cases has been developed and is used to drive the HW development. There is also a Java functional model available as support for high level undertanding. Development of the Montgomery product module started. Top level modexp module with memories for all operands are being worked on. The Montgomery calculator has been implemented and debugged. The residue calculator has been implemeted and debugged. The top level is being developed and debugged.