| /* Copyright lowRISC contributors. */ |
| /* Licensed under the Apache License, Version 2.0, see LICENSE for details. */ |
| /* SPDX-License-Identifier: Apache-2.0 */ |
| |
| .text |
| |
| .globl rsa_encrypt |
| rsa_encrypt: |
| jal x1, modload |
| jal x1, modexp_65537 |
| ecall |
| |
| /** |
| * RSA decryption |
| */ |
| .globl rsa_decrypt |
| rsa_decrypt: |
| jal x1, modload |
| jal x1, modexp |
| ecall |
| |
| |
| .data |
| |
| /* |
| The structure of the 256b below are mandated by the calling convention of the |
| RSA library. |
| */ |
| |
| /* reserved */ |
| .word 0x00000000 |
| |
| /* N: Key/modulus size in 256b limbs (i.e. for RSA-1024: N = 4) */ |
| .globl n_limbs |
| n_limbs: |
| .word 0x00000000 |
| |
| /* pointer to m0' (dptr_m0d) */ |
| dptr_m0d: |
| .word m0d |
| |
| /* pointer to RR (dptr_rr) */ |
| dptr_rr: |
| .word RR |
| |
| /* load pointer to modulus (dptr_m) */ |
| dptr_m: |
| .word modulus |
| |
| /* pointer to base bignum buffer (dptr_in) */ |
| dptr_in: |
| .word in |
| |
| /* pointer to exponent buffer (dptr_exp, unused for encrypt) */ |
| dptr_exp: |
| .word exp |
| |
| /* pointer to out buffer (dptr_out) */ |
| dptr_out: |
| .word out |
| |
| |
| /* Freely available DMEM space. */ |
| |
| m0d: |
| /* filled by modload */ |
| .zero 512 |
| |
| RR: |
| /* filled by modload */ |
| .zero 512 |
| |
| /* Modulus (n) */ |
| .globl modulus |
| modulus: |
| .zero 512 |
| |
| /* private exponent (d) */ |
| .globl exp |
| exp: |
| .zero 512 |
| |
| /* input data */ |
| .globl in |
| in: |
| .zero 512 |
| |
| /* output data */ |
| .globl out |
| out: |
| .zero 512 |