[1]https://github.com/scarv/xcrypto XCrypto: a cryptographic ISE for RISC-V [2]Build Status [3]Documentation Acting as a component part of the wider [4]SCARV project, XCrypto is a general-purpose Instruction Set Extension (ISE) for [5]RISC-V that supports software-based cryptographic workloads. Overview A given cryptographic workload is commonly expected to satisfy a challenging and diverse range of traditional design metrics, including some combination of high-throughput, low-latency, low-footprint, power-efficiency, and high-assurance, while executing in what is potentially an adversarial environment. A large design space of options can be drawn from when developing a concrete implementation: these options span a spectrum, between those entirely based on hardware (e.g., a dedicated IP core) and those entirely based on software. ISEs can be viewed as representing a hybrid option, in the sense they alter a general-purpose processor core with special-purpose hardware and associated instructions; such targeted alterations then help to improve a software-based implementation wrt. some design metric (e.g., latency). As an ISE, we pitch XCrypto as a solution (vs. the solution) within the wider design space of options. For example, it offers as an alternative to the solution being proposed by the RISC-V cryptography extensions group (see, e.g., their [6]presentation: the design extends the RISC-V vector ISE). The idea is to leverage extensive existing literature and hence experience wrt. cryptographic ISEs (see, e.g., published work at the [7]CHES conference), translating and applying it to RISC-V. Although potentially less performant than alternatives, we expect implementations using XCrypto to be more lightweight and flexible; as a result, we view it as representing an attractive solution in the context of micro-controller class cores. Organisation ├── bin - scripts (e.g., environment configuration) ├── build - working directory for build ├── doc - documentation ├── extern - external resources (e.g., submodules) │ ├── libscarv - submodule: scarv/libscarv │ ├── riscv-opcodes - submodule: scarv/riscv-opcodes │ ├── texmf - submodule: scarv/texmf │ └── wiki - submodule: scarv/xcrypto.wiki ├── pdf - PDFs, e.g., presentation slides ├── rtl - source code for re-usable hardware modules └── src ├── docker - source code for containers ├── helloworld - source code for example program ├── test - source code for test program(s) └── toolchain - source code for tool-chain Note that: * [8]${REPO_HOME}/doc houses the XCrypto specification: this document captures the ISE itself, acting as both a) a definition of additional architectural state (e.g., register file and CSRs) and instructions (i.e., their semantics and encoding), and b) a design document. Pre-built versions accompany each [9]releases of XCrypto. * [10]${REPO_HOME}/rtl houses a library of re-usable hardware components (e.g., for arithmetic operations), which could be used in an implementation of XCrypto. * Per the above, the content of this repository is non-specific to an implementation of XCrypto within any given processor core. That said, the associated repository [11]scarv/scarv specifically houses such an implementation: the SCARV processor core (and associated SoC) offer an integrated implementation of components from the entire SCARV project, XCrypto included. Quickstart (with more detail in the [12]wiki) 1. Execute git clone [13]https://github.com/scarv/xcrypto.git ./xcrypto cd ./xcrypto git submodule update --init --recursive source ./bin/conf.sh to clone and initialise the repository, then configure the environment; for example, you should find that the REPO_HOME environment variable is set appropriately. 2. Use targets in the top-level Makefile to drive a set of common tasks, e.g., Command Description make build-doc build the [14]LaTeX-based documentation make clone-toolchain clone the [15]tool-chain make build-toolchain build the [16]tool-chain make doxygen build the [17]Doxygen-based documentation make spotless remove everything built in ${REPO_HOME}/build Questions? * read the [18]wiki, * raise an [19]issue, * raise a [20]pull request, * drop us an [21]email. Publications and presentations * Some [22]slides presented at the [23]RISC-V meetup in Bristol, April 2019. * A [24]poster presented at the [25]RISC-V Workshop in Zurich, June 2019. Acknowledgements This work has been supported in part by EPSRC via grant [26]EP/R012288/1 (under the [27]RISE programme). References 1. https://github.com/scarv/xcrypto 2. https://travis-ci.com/scarv/xcrypto 3. https://codedocs.xyz/scarv/xcrypto 4. https://www.scarv.org/ 5. https://riscv.org/ 6. https://www.youtube.com/watch?v=dcW6a7SO2zE 7. https://dblp.uni-trier.de/db/conf/ches 8. https://github.com/scarv/xcrypto/blob/master/doc 9. https://github.com/scarv/xcrypto/releases 10. https://github.com/scarv/xcrypto/blob/master/rtl 11. https://github.com/scarv/scarv 12. https://github.com/scarv/xcrypto/wiki 13. https://github.com/scarv/xcrypto.git 14. https://www.latex-project.org/ 15. https://github.com/scarv/xcrypto/wiki/Toolchain 16. https://github.com/scarv/xcrypto/wiki/Toolchain 17. http://www.doxygen.nl/ 18. https://github.com/scarv/xcrypto/wiki 19. https://github.com/scarv/xcrypto/issues 20. https://github.com/scarv/xcrypto/pulls 21. mailto:info@scarv.org?subject=xcrypto 22. https://github.com/scarv/xcrypto/blob/master/pdf/riscv-meetup-bristol-slides.pdf 23. https://www.meetup.com/Bristol-RISC-V-Meetup-Group 24. https://github.com/scarv/xcrypto/blob/master/pdf/zurich-workshop-poster.pdf 25. https://riscv.org/2019/06/risc-v-workshop-zurich-proceedings 26. https://gow.epsrc.ukri.org/NGBOViewGrant.aspx?GrantRef=EP/R012288/1 27. http://www.ukrise.org/