/* Copyright lowRISC contributors. */ | |
/* Licensed under the Apache License, Version 2.0, see LICENSE for details. */ | |
/* SPDX-License-Identifier: Apache-2.0 */ | |
/* | |
* Standalone test for P-384 ECDSA signature verification | |
* | |
* Runs the P-384 ECDSA signature verification algorithm for message, nonce | |
* and private key contained in the .data section below. | |
* | |
* See comment at the end of the file for expected values of result. | |
*/ | |
.section .text | |
p384_ecdsa_verify_test: | |
/* set dmem pointer to point to message */ | |
la x2, msg | |
la x3, dptr_msg | |
sw x2, 0(x3) | |
/* set dmem pointer to point to signature */ | |
la x2, sig_r | |
la x3, dptr_r | |
sw x2, 0(x3) | |
la x2, sig_s | |
la x3, dptr_s | |
sw x2, 0(x3) | |
/* set dmem pointer to point to public key */ | |
la x2, pub_x | |
la x3, dptr_x | |
sw x2, 0(x3) | |
la x2, pub_y | |
la x3, dptr_y | |
sw x2, 0(x3) | |
/* set dmem pointer to point to signature verifcation result */ | |
la x2, sig_xres | |
la x3, dptr_rnd | |
sw x2, 0(x3) | |
/* call ECDSA signature verification subroutine in P-384 lib */ | |
jal x1, p384_verify | |
/* load signature to wregs for comparison with reference */ | |
li x2, 0 | |
la x3, sig_xres | |
bn.lid x2++, 0(x3) | |
bn.lid x2, 32(x3) | |
ecall | |
.data | |
/* message */ | |
msg: | |
.word 0x55555555 | |
.word 0x55555555 | |
.word 0x55555555 | |
.word 0x55555555 | |
.word 0x55555555 | |
.word 0x55555555 | |
.word 0x55555555 | |
.word 0x55555555 | |
.word 0x55555555 | |
.word 0x55555555 | |
.word 0x55555555 | |
.word 0x55555555 | |
.zero 16 | |
/* signature R */ | |
sig_r: | |
.word 0xb68c28d8 | |
.word 0x2b23ce3a | |
.word 0x9a1a30fc | |
.word 0x56e186cf | |
.word 0x12d35b38 | |
.word 0xc16c09de | |
.word 0x0235d77e | |
.word 0x49d29eef | |
.word 0xd3c43053 | |
.word 0xb45990db | |
.word 0x7c0d8125 | |
.word 0xb2fcf95c | |
.zero 16 | |
/* signature S */ | |
sig_s: | |
.word 0x24bc1bf9 | |
.word 0x752042f5 | |
.word 0x98144c27 | |
.word 0x77e415a1 | |
.word 0xa78101eb | |
.word 0x0016f9c3 | |
.word 0x3e7f6895 | |
.word 0x80eb391d | |
.word 0xf19a653d | |
.word 0xfa9554e0 | |
.word 0xe34d88c1 | |
.word 0x1a72ebdd | |
.zero 16 | |
/* public key x-coordinate */ | |
pub_x: | |
.word 0x4877f3d1 | |
.word 0x7b829460 | |
.word 0xb1cac609 | |
.word 0x5869de54 | |
.word 0xee0e2beb | |
.word 0x6c30f2d8 | |
.word 0x47e80661 | |
.word 0x394d8b70 | |
.word 0xcf60d89e | |
.word 0x1a9ea916 | |
.word 0xb439d701 | |
.word 0xca230836 | |
.zero 16 | |
/* public key y-coordinate */ | |
pub_y: | |
.word 0xc181f90f | |
.word 0xc31ef079 | |
.word 0xbf3aff6e | |
.word 0xc7e55880 | |
.word 0xec18818c | |
.word 0xcea028a9 | |
.word 0x928c3e92 | |
.word 0x82b63bf3 | |
.word 0xd65e905d | |
.word 0x68eef2d1 | |
.word 0x03afe2c2 | |
.word 0xaaafcad2 | |
.zero 16 | |
/* signature verification result x_res */ | |
sig_xres: | |
.zero 64 | |
/* Expected values in wide register file (x-coordinate of result): | |
[w1, w0] is x_res == sig_r | |
w0 = 0x49d29eef0235d77ec16c09de12d35b3856e186cf9a1a30fc2b23ce3ab68c28d8 | |
w1 = 0x00000000000000000000000000000000b2fcf95c7c0d8125b45990dbd3c43053 | |
*/ |