USUBA's Blog

Usubac - backend

Published on the 2020-06-06 by Darius Mercadier

Usubac's backend is responsible of optimizing the Usuba0 code and utlimately generating C code. Masking is also done in the backend, but will be presented in a later post. Read More...

Scheduling

Published on the 2020-05-09 by Darius Mercadier

The C codes generated by Usubac are compiled to assembly using C compilers. While in C, a (virtually) unlimited amount of variables can be used, Assembly can only use a few registers (between 8 and 32 for commonly used CPUs). C variables are thus mapped to assembly registers using a _register allocation_ algorithms. When too many registers would be required, registers are spilled, and the stack is used to temporary store some variables. Read More...

DSLs for cryptography

Published on the 2020-04-09 by Darius Mercadier

Cryptol started from the observation that due to the lack of standard for specifying cryptographic algorithms, papers described their ciphers using a combination of english (too ambiguous) and pseudo-codes (ill-suited to describe mathematical operations) while providing reference implementations in C (too low-level) Read More...

CUDA basics

Published on the 2020-03-28 by Paul-Emmanuel Broux

General purpose processing on graphics processing units (GPGPU) has gained a huge interest within past decades. GPGPU relies on CPU deciding to delegate heavy arithmetic and parallel work to one or several GPUs. GPGPU is a solution to the scalability of those issues and having already a GPU among nearly all servers and laptops avoids creating and introducing new specific and costly hardware component for this purpose. Read More...

Interleaving

Published on the 2020-03-16 by Darius Mercadier

A first optimization in Usubac consists in interleaving several executions of the program. For a cipher using a small number of registers (for example, strictly below 8 general-purpose registers on Intel), we can increase its instruction-level parallelism (ILP) by interleaving several copies of a single cipher, each manipulating its own independent set of variables. Read More...

Page 1 of 3