blob: e0df859e0e114ce1776f2107f1a391855bcef94b [file] [log] [blame]
/* Copyright lowRISC contributors. */
/* Licensed under the Apache License, Version 2.0, see LICENSE for details. */
/* SPDX-License-Identifier: Apache-2.0 */
/**
* Standalone elliptic curve P-256 ECDSA sign test
*
* Uses OTBN ECC P-256 lib to perform an ECDSA signing operation.
* An example message digest, the private signing key and a random value k are
* provided in the .data section below. Note that this test does not yet use
* OTBN's entropy interface as a source for the random value in the ECDSA
* operation.
*
* Resulting R and S of the signature are copied to the wide registers. See
* comment at the end of the file for expected values.
*/
.section .text.start
ecdsa_sign_test:
/* set dmem pointer to nonce k */
la x2, nonce_k
la x3, dptr_k
sw x2, 0(x3)
/* set dmem pointer to point to blinding parameter */
la x2, blinding_param
la x3, dptr_rnd
sw x2, 0(x3)
/* set dmem pointer to point to message */
la x2, msg
la x3, dptr_msg
sw x2, 0(x3)
/* set dmem pointer to point to private key d */
la x2, priv_key_d
la x3, dptr_d
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)
/* call ECDSA signing subroutine in P-256 lib */
jal x1, p256_sign
/* load signature to wregs for comparison with reference */
li x2, 0
la x3, sig_r
bn.lid x2, 0(x3)
li x2, 1
la x3, sig_s
bn.lid x2, 0(x3)
ecall
.data
/* nonce k */
nonce_k:
.word 0xfe6d1071
.word 0x21d0a016
.word 0xb0b2c781
.word 0x9590ef5d
.word 0x3fdfa379
.word 0x1b76ebe8
.word 0x74210263
.word 0x1420fc41
/* random number for blinding */
blinding_param:
.word 0x7ab203c3
.word 0xd6ee4951
.word 0xd5b89b43
.word 0x409d2b56
.word 0x8e9d2186
.word 0x1de0f8ec
.word 0x0fa0bf9a
.word 0xa21c2147
/* message digest */
msg:
.word 0x4456fd21
.word 0x400bdd7d
.word 0xb54d7452
.word 0x17d015f1
.word 0x90d4d90b
.word 0xb028ad8a
.word 0x6ce90fef
.word 0x06d71207
/* private key d */
priv_key_d:
.word 0xc7df1a56
.word 0xfbd94efe
.word 0xaa847f52
.word 0x2d869bf4
.word 0x543b963b
.word 0xe5f2cbee
.word 0x9144233d
.word 0xc0fbe256
/* signature R */
sig_r:
.zero 32
/* signature S */
sig_s:
.zero 32
/* Expected values wide register file (w0=R, w1=S):
w0 = 0x815215ad7dd27f336b35843cbe064de299504edd0c7d87dd1147ea5680a9674a
w1 = 0xa3991e01c444042086e30cd999e589ad4dad9404e90a6d17d0b1051ec93fd605
*/