Skip to content
forked from usubalang/usuba

A programming language to write bitsliced ciphers

License

Notifications You must be signed in to change notification settings

DadaIsCrazy/usuba

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Usuba

Usuba is a programming language to write bitsliced code. It compiles optimized to C code (+ intrinsics).


Presentation

Go to our website to find more about Usuba.

In particular, the following blog articles are a good introduction:

To go into more details, read our published papers about Usuba:

Finally, some additional resources that could be useful:

Installation

Usuba is written in OCaml. On a Debian system, you should be able to setup the base environment with

./install_deps.sh

You can then compile Usuba with:

./configure.pl
make

A few examples

A few examples of Usuba codes:

If you are familiar with Perl, an easy way to see the compiler an action is to look at the scripts in the directory checks/correctness that compile a few Usuba codes, run them and make sure they produce the expected results.

Compiling

To compile an Usuba file (.ua), you need to invoke ./usubac <options> <source.ua> (the Usuba source file must be the last argument). I strongly recommand always using the flag -no-sched when doing pure bitslicing (it disables a few experimental options, and reduces the amount of code loaded). The option -no-arr-entry might also be usefull for small functions (combined with -no-arr). The list of flags can be obtained by running ./usubac -help.

For instance, to compile a bitslice AES:

./usubac -B -o aes.c -no-sched samples/usuba/aes.c

The C code generated by Usuba uses macros to achieve genericity. This macros are loaded with the instruction #include "XXX.h" at the begining of the C files generated, where XXX is one of STD, SSE, AVX (which should be AVX2), AVX512, Neon, AltiVec. Those headers are located in the directory arch.

About

A programming language to write bitsliced ciphers

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C 70.1%
  • OCaml 27.0%
  • Perl 2.5%
  • Dockerfile 0.2%
  • Emacs Lisp 0.1%
  • Makefile 0.1%