blob: 6af0cfd64f952fae2aba2bb019088d5412e085ec [file] [log] [blame]
/* Copyright lowRISC Contributors.
* Copyright 2016 The Chromium OS Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE.dcrypto file.
*
* Derived from code in
* https://chromium.googlesource.com/chromiumos/platform/ec/+/refs/heads/cr50_stab/chip/g/dcrypto/dcrypto_p256.c
*/
.globl p256init
.globl p256isoncurve
.globl p256scalarmult
.globl p256sign
.globl p256verify
.text
SetupP256PandMuLow:
sw x0, 524(x0)
sw x0, 528(x0)
sw x0, 532(x0)
addi x2, x0, 1
sw x2, 536(x0)
addi x2, x0, -1
sw x2, 512(x0)
sw x2, 516(x0)
sw x2, 520(x0)
sw x2, 540(x0)
addi x2, x0, 29
bn.lid x2, 512(x0)
bn.wsrw 0, w29
sw x0, 548(x0)
sw x0, 572(x0)
addi x2, x0, -1
sw x2, 552(x0)
sw x2, 568(x0)
addi x2, x0, 3
sw x2, 544(x0)
addi x2, x0, -2
sw x2, 556(x0)
sw x2, 560(x0)
sw x2, 564(x0)
addi x2, x0, 28
bn.lid x2, 544(x0)
jalr x0, x1, 0
p256init:
addi x3, x0, 31
bn.lid x3, 0(x0)
bn.xor w31, w31, w31
bn.addi w30, w31, 1
jal x1, SetupP256PandMuLow
lui x2, 163110
addi x2, x2, 75
sw x2, 576(x0)
lui x2, 244964
addi x2, x2, -962
sw x2, 580(x0)
lui x2, 836923
addi x2, x2, 246
sw x2, 584(x0)
lui x2, 414160
addi x2, x2, 1712
sw x2, 588(x0)
lui x2, 485768
addi x2, x2, 1724
sw x2, 592(x0)
lui x2, 736956
addi x2, x2, -683
sw x2, 596(x0)
lui x2, 697257
addi x2, x2, 999
sw x2, 600(x0)
lui x2, 371811
addi x2, x2, 1496
sw x2, 604(x0)
addi x2, x0, 27
bn.lid x2, 576(x0)
jalr x0, x1, 0
MulMod:
bn.mulqacc.z w24.0, w25.0, 0
bn.mulqacc w24.1, w25.0, 64
bn.mulqacc.so w19.l, w24.0, w25.1, 64
bn.mulqacc w24.2, w25.0, 0
bn.mulqacc w24.1, w25.1, 0
bn.mulqacc w24.0, w25.2, 0
bn.mulqacc w24.3, w25.0, 64
bn.mulqacc w24.2, w25.1, 64
bn.mulqacc w24.1, w25.2, 64
bn.mulqacc.so w19.u, w24.0, w25.3, 64
bn.mulqacc w24.3, w25.1, 0
bn.mulqacc w24.2, w25.2, 0
bn.mulqacc w24.1, w25.3, 0
bn.mulqacc w24.3, w25.2, 64
bn.mulqacc.so w20.l, w24.2, w25.3, 64
bn.mulqacc.so w20.u, w24.3, w25.3, 0
bn.add w20, w20, w31
bn.sel w22, w28, w31, M
bn.rshi w21, w20, w19 >> 255
bn.mulqacc.z w21.0, w28.0, 0
bn.mulqacc w21.1, w28.0, 64
bn.mulqacc.so w23.l, w21.0, w28.1, 64
bn.mulqacc w21.2, w28.0, 0
bn.mulqacc w21.1, w28.1, 0
bn.mulqacc w21.0, w28.2, 0
bn.mulqacc w21.3, w28.0, 64
bn.mulqacc w21.2, w28.1, 64
bn.mulqacc w21.1, w28.2, 64
bn.mulqacc.so w23.u, w21.0, w28.3, 64
bn.mulqacc w21.3, w28.1, 0
bn.mulqacc w21.2, w28.2, 0
bn.mulqacc w21.1, w28.3, 0
bn.mulqacc w21.3, w28.2, 64
bn.mulqacc.so w24.l, w21.2, w28.3, 64
bn.mulqacc.so w24.u, w21.3, w28.3, 0
bn.add w20, w20, w31
bn.rshi w25, w31, w20 >> 255
bn.add w24, w24, w21
bn.addc w25, w25, w31
bn.add w24, w24, w22
bn.addc w25, w25, w31
bn.rshi w21, w25, w24 >> 1
bn.mulqacc.z w29.0, w21.0, 0
bn.mulqacc w29.1, w21.0, 64
bn.mulqacc.so w22.l, w29.0, w21.1, 64
bn.mulqacc w29.2, w21.0, 0
bn.mulqacc w29.1, w21.1, 0
bn.mulqacc w29.0, w21.2, 0
bn.mulqacc w29.3, w21.0, 64
bn.mulqacc w29.2, w21.1, 64
bn.mulqacc w29.1, w21.2, 64
bn.mulqacc.so w22.u, w29.0, w21.3, 64
bn.mulqacc w29.3, w21.1, 0
bn.mulqacc w29.2, w21.2, 0
bn.mulqacc w29.1, w21.3, 0
bn.mulqacc w29.3, w21.2, 64
bn.mulqacc.so w23.l, w29.2, w21.3, 64
bn.mulqacc.so w23.u, w29.3, w21.3, 0
bn.add w23, w23, w31
bn.sub w22, w19, w22
bn.subb w20, w20, w23
bn.sel w21, w29, w31, L
bn.sub w21, w22, w21
bn.addm w19, w21, w31
jalr x0, x1, 0
p256isoncurve:
addi x3, x0, 0
bn.lid x3, 0(x0)
lw x16, 0(x0)
lw x17, 4(x0)
lw x18, 8(x0)
lw x19, 12(x0)
lw x20, 16(x0)
lw x21, 20(x0)
lw x22, 24(x0)
lw x23, 28(x0)
addi x8, x0, 0
lw x9, 4(x0)
lw x10, 8(x0)
lw x11, 12(x0)
lw x12, 16(x0)
addi x13, x0, 24
addi x14, x0, 24
lw x15, 28(x0)
bn.lid x14, 0(x22)
bn.mov w25, w24
jal x1, MulMod
bn.mov w0, w19
bn.lid x13, 0(x21)
bn.mov w25, w24
jal x1, MulMod
bn.lid x13, 0(x21)
bn.mov w25, w19
jal x1, MulMod
bn.lid x13, 0(x21)
bn.subm w19, w19, w24
bn.subm w19, w19, w24
bn.subm w19, w19, w24
bn.addm w24, w19, w27
bn.sid x13, 0(x19)
bn.sid x8, 0(x20)
jalr x0, x1, 0
ProjAdd:
bn.mov w24, w11
bn.mov w25, w8
jal x1, MulMod
bn.mov w14, w19
bn.mov w24, w12
bn.mov w25, w9
jal x1, MulMod
bn.mov w15, w19
bn.mov w24, w13
bn.mov w25, w10
jal x1, MulMod
bn.mov w16, w19
bn.addm w17, w11, w12
bn.addm w18, w8, w9
bn.mov w24, w17
bn.mov w25, w18
jal x1, MulMod
bn.addm w18, w14, w15
bn.subm w17, w19, w18
bn.addm w18, w12, w13
bn.addm w19, w9, w10
bn.mov w24, w18
bn.mov w25, w19
jal x1, MulMod
bn.mov w18, w19
bn.addm w19, w15, w16
bn.subm w18, w18, w19
bn.addm w19, w11, w13
bn.addm w12, w8, w10
bn.mov w24, w19
bn.mov w25, w12
jal x1, MulMod
bn.mov w11, w19
bn.addm w12, w14, w16
bn.subm w12, w11, w12
bn.mov w24, w27
bn.mov w25, w16
jal x1, MulMod
bn.subm w11, w12, w19
bn.addm w13, w11, w11
bn.addm w11, w11, w13
bn.subm w13, w15, w11
bn.addm w11, w15, w11
bn.mov w24, w27
bn.mov w25, w12
jal x1, MulMod
bn.addm w15, w16, w16
bn.addm w16, w15, w16
bn.subm w12, w19, w16
bn.subm w12, w12, w14
bn.addm w15, w12, w12
bn.addm w12, w15, w12
bn.addm w15, w14, w14
bn.addm w14, w15, w14
bn.subm w14, w14, w16
bn.mov w24, w18
bn.mov w25, w12
jal x1, MulMod
bn.mov w15, w19
bn.mov w24, w14
bn.mov w25, w12
jal x1, MulMod
bn.mov w16, w19
bn.mov w24, w11
bn.mov w25, w13
jal x1, MulMod
bn.addm w12, w19, w16
bn.mov w24, w17
bn.mov w25, w11
jal x1, MulMod
bn.subm w11, w19, w15
bn.mov w24, w18
bn.mov w25, w13
jal x1, MulMod
bn.mov w13, w19
bn.mov w24, w17
bn.mov w25, w14
jal x1, MulMod
bn.addm w13, w13, w19
jalr x0, x1, 0
ProjToAffine:
bn.addm w10, w10, w31
bn.mov w24, w10
bn.mov w25, w10
jal x1, MulMod
bn.mov w24, w19
bn.mov w25, w10
jal x1, MulMod
bn.mov w12, w19
bn.mov w24, w19
bn.mov w25, w19
jal x1, MulMod
bn.mov w24, w19
bn.mov w25, w19
jal x1, MulMod
bn.mov w24, w19
bn.mov w25, w12
jal x1, MulMod
bn.mov w13, w19
loopi 4, 4
bn.mov w24, w19
bn.mov w25, w19
jal x1, MulMod
addi x0, x0, 0
bn.mov w24, w19
bn.mov w25, w13
jal x1, MulMod
bn.mov w14, w19
loopi 8, 4
bn.mov w24, w19
bn.mov w25, w19
jal x1, MulMod
addi x0, x0, 0
bn.mov w24, w19
bn.mov w25, w14
jal x1, MulMod
bn.mov w15, w19
loopi 16, 4
bn.mov w24, w19
bn.mov w25, w19
jal x1, MulMod
addi x0, x0, 0
bn.mov w24, w19
bn.mov w25, w15
jal x1, MulMod
bn.mov w16, w19
loopi 32, 4
bn.mov w24, w19
bn.mov w25, w19
jal x1, MulMod
addi x0, x0, 0
bn.mov w17, w19
bn.mov w24, w10
bn.mov w25, w19
jal x1, MulMod
loopi 192, 4
bn.mov w24, w19
bn.mov w25, w19
jal x1, MulMod
addi x0, x0, 0
bn.mov w18, w19
bn.mov w24, w17
bn.mov w25, w16
jal x1, MulMod
loopi 16, 4
bn.mov w24, w19
bn.mov w25, w19
jal x1, MulMod
addi x0, x0, 0
bn.mov w24, w15
bn.mov w25, w19
jal x1, MulMod
loopi 8, 4
bn.mov w24, w19
bn.mov w25, w19
jal x1, MulMod
addi x0, x0, 0
bn.mov w24, w14
bn.mov w25, w19
jal x1, MulMod
loopi 4, 4
bn.mov w24, w19
bn.mov w25, w19
jal x1, MulMod
addi x0, x0, 0
bn.mov w24, w13
bn.mov w25, w19
jal x1, MulMod
loopi 2, 4
bn.mov w24, w19
bn.mov w25, w19
jal x1, MulMod
addi x0, x0, 0
bn.mov w24, w12
bn.mov w25, w19
jal x1, MulMod
loopi 2, 4
bn.mov w24, w19
bn.mov w25, w19
jal x1, MulMod
addi x0, x0, 0
bn.mov w24, w10
bn.mov w25, w19
jal x1, MulMod
bn.mov w24, w19
bn.mov w25, w18
jal x1, MulMod
bn.mov w14, w19
bn.mov w24, w8
bn.mov w25, w14
jal x1, MulMod
bn.mov w11, w19
bn.mov w24, w9
bn.mov w25, w14
jal x1, MulMod
bn.mov w12, w19
jalr x0, x1, 0
ModInv:
bn.wsrr w2, 0
bn.subi w2, w2, 2
bn.mov w1, w30
loopi 256, 14
bn.mov w24, w1
bn.mov w25, w1
jal x1, MulMod
bn.mov w3, w19
bn.add w2, w2, w2
bn.sel w1, w1, w3, C
csrrs x2, 1984, x0
andi x2, x2, 1
beq x2, x0, nomul
bn.mov w24, w3
bn.mov w25, w0
jal x1, MulMod
bn.mov w1, w19
nomul:
addi x0, x0, 0
jalr x0, x1, 0
FetchBandRandomize:
bn.wsrr w2, 1
bn.addm w26, w2, w31
bn.lid x10, 0(x21)
bn.mov w25, w26
jal x1, MulMod
bn.mov w6, w19
bn.lid x10, 0(x22)
bn.mov w25, w26
jal x1, MulMod
bn.mov w7, w19
jalr x0, x1, 0
ProjDouble:
bn.mov w11, w8
bn.mov w12, w9
bn.mov w13, w10
jal x1, ProjAdd
jalr x0, x1, 0
SetupP256NandMuLow:
addi x2, x0, 0
sw x2, 632(x0)
addi x2, x2, -1
sw x2, 624(x0)
sw x2, 628(x0)
sw x2, 636(x0)
lui x2, 1033778
addi x2, x2, 1361
sw x2, 608(x0)
lui x2, 998301
addi x2, x2, -1342
sw x2, 612(x0)
lui x2, 684410
addi x2, x2, -380
sw x2, 616(x0)
lui x2, 773744
addi x2, x2, -1363
sw x2, 620(x0)
addi x2, x0, 29
bn.lid x2, 608(x0)
bn.wsrw 0, w29
addi x2, x0, 0
sw x2, 668(x0)
addi x2, x0, -1
sw x2, 656(x0)
sw x2, 664(x0)
addi x2, x0, -2
sw x2, 660(x0)
lui x2, 978426
addi x2, x2, -1026
sw x2, 640(x0)
lui x2, 4864
addi x2, x2, -635
sw x2, 644(x0)
lui x2, 913831
addi x2, x2, -991
sw x2, 648(x0)
lui x2, 274832
addi x2, x2, 1362
sw x2, 652(x0)
addi x2, x0, 28
bn.lid x2, 640(x0)
jalr x0, x1, 0
ScalarMult_internal:
jal x1, SetupP256NandMuLow
bn.lid x9, 0(x17)
bn.addm w1, w1, w31
bn.subm w0, w0, w1
jal x1, SetupP256PandMuLow
jal x1, FetchBandRandomize
bn.mov w8, w6
bn.mov w9, w7
bn.mov w10, w26
jal x1, ProjDouble
bn.mov w3, w11
bn.mov w4, w12
bn.mov w5, w13
bn.mov w8, w31
bn.mov w9, w30
bn.mov w10, w31
loopi 256, 32
jal x1, ProjDouble
jal x1, FetchBandRandomize
bn.xor w8, w0, w1
bn.sel w8, w6, w3, M
bn.sel w9, w7, w4, M
bn.sel w10, w26, w5, M
bn.mov w2, w11
bn.mov w6, w12
bn.mov w7, w13
jal x1, ProjAdd
bn.or w8, w0, w1
bn.sel w8, w11, w2, M
bn.sel w9, w12, w6, M
bn.sel w10, w13, w7, M
bn.rshi w0, w0, w0 >> 255
bn.rshi w1, w1, w1 >> 255
bn.wsrr w11, 1
bn.wsrr w12, 1
bn.wsrr w13, 1
bn.wsrr w2, 1
bn.mov w24, w3
bn.mov w25, w2
jal x1, MulMod
bn.mov w3, w19
bn.mov w24, w4
bn.mov w25, w2
jal x1, MulMod
bn.mov w4, w19
bn.mov w24, w5
bn.mov w25, w2
jal x1, MulMod
bn.mov w5, w19
jal x1, ProjToAffine
jalr x0, x1, 0
get_P256B:
lui x2, 887180
addi x2, x2, 662
sw x2, 672(x0)
lui x2, 1002004
addi x2, x2, -1723
sw x2, 676(x0)
lui x2, 188083
addi x2, x2, 928
sw x2, 680(x0)
lui x2, 487480
addi x2, x2, -639
sw x2, 684(x0)
lui x2, 408132
addi x2, x2, 242
sw x2, 688(x0)
lui x2, 1018830
addi x2, x2, 1765
sw x2, 692(x0)
lui x2, 922308
addi x2, x2, 583
sw x2, 696(x0)
lui x2, 438653
addi x2, x2, 498
sw x2, 700(x0)
addi x2, x0, 8
bn.lid x2, 672(x0)
lui x2, 228341
addi x2, x2, 501
sw x2, 704(x0)
lui x2, 834404
addi x2, x2, 104
sw x2, 708(x0)
lui x2, 439062
addi x2, x2, -306
sw x2, 712(x0)
lui x2, 179427
addi x2, x2, 855
sw x2, 716(x0)
lui x2, 508154
addi x2, x2, -490
sw x2, 720(x0)
lui x2, 585343
addi x2, x2, -1206
sw x2, 724(x0)
lui x2, 1040808
addi x2, x2, -101
sw x2, 728(x0)
lui x2, 327220
addi x2, x2, 738
sw x2, 732(x0)
addi x2, x0, 9
bn.lid x2, 704(x0)
jalr x0, x1, 0
p256sign:
addi x0, x0, 0
addi x3, x0, 0
bn.lid x3, 0(x0)
lw x16, 0(x0)
lw x17, 4(x0)
lw x18, 8(x0)
lw x19, 12(x0)
lw x20, 16(x0)
lw x21, 20(x0)
lw x22, 24(x0)
lw x23, 28(x0)
addi x8, x0, 0
addi x9, x0, 1
addi x10, x0, 24
lw x11, 12(x0)
addi x12, x0, 8
addi x13, x0, 9
lw x14, 24(x0)
lw x15, 28(x0)
jal x1, get_P256B
bn.sid x12, 0(x21)
bn.sid x13, 0(x22)
addi x0, x0, 0
bn.lid x8, 0(x16)
jal x1, ScalarMult_internal
jal x1, SetupP256NandMuLow
bn.lid x8, 0(x16)
jal x1, ModInv
bn.lid x10, 0(x23)
bn.mov w25, w1
jal x1, MulMod
bn.addm w24, w11, w31
bn.sid x10, 0(x19)
addi x0, x0, 0
bn.mov w25, w19
jal x1, MulMod
bn.mov w0, w19
bn.lid x10, 0(x18)
bn.mov w25, w1
jal x1, MulMod
bn.addm w0, w19, w0
bn.sid x8, 0(x20)
jal x1, SetupP256PandMuLow
jalr x0, x1, 0
p256scalarbasemult:
addi x0, x0, 0
addi x3, x0, 0
bn.lid x3, 0(x0)
lw x16, 0(x0)
lw x17, 4(x0)
lw x18, 8(x0)
lw x19, 12(x0)
lw x20, 16(x0)
lw x21, 20(x0)
lw x22, 24(x0)
lw x23, 28(x0)
addi x8, x0, 0
addi x9, x0, 1
addi x10, x0, 24
addi x11, x0, 11
addi x12, x0, 8
addi x13, x0, 9
lw x14, 24(x0)
lw x15, 28(x0)
bn.lid x8, 0(x17)
jal x1, get_P256B
bn.sid x12, 0(x21)
bn.sid x13, 0(x22)
addi x0, x0, 0
bn.lid x8, 0(x23)
jal x1, ScalarMult_internal
bn.sid x11++, 0(x21)
bn.sid x11++, 0(x22)
jalr x0, x1, 0
ModInvVar:
bn.mov w2, w31
bn.mov w3, w30
bn.wsrr w4, 0
bn.wsrr w7, 0
bn.mov w5, w0
impvt_Loop:
bn.or w4, w4, w4
csrrs x2, 1984, x0
andi x2, x2, 4
bne x2, x0, impvt_Uodd
bn.rshi w4, w31, w4 >> 1
bn.or w2, w2, w2
csrrs x2, 1984, x0
andi x2, x2, 4
bne x2, x0, impvt_Rodd
bn.rshi w2, w31, w2 >> 1
jal x0, impvt_Loop
impvt_Rodd:
bn.add w2, w7, w2
bn.addc w6, w31, w31
bn.rshi w2, w6, w2 >> 1
jal x0, impvt_Loop
impvt_Uodd:
bn.or w5, w5, w5
csrrs x2, 1984, x0
andi x2, x2, 4
bne x2, x0, impvt_UVodd
bn.rshi w5, w31, w5 >> 1
bn.or w3, w3, w3
csrrs x2, 1984, x0
andi x2, x2, 4
bne x2, x0, impvt_Sodd
bn.rshi w3, w31, w3 >> 1
jal x0, impvt_Loop
impvt_Sodd:
bn.add w3, w7, w3
bn.addc w6, w31, w31
bn.rshi w3, w6, w3 >> 1
jal x0, impvt_Loop
impvt_UVodd:
bn.cmp w5, w4
csrrs x2, 1984, x0
andi x2, x2, 1
beq x2, x0, impvt_V_gte_U
bn.subm w2, w2, w3
bn.sub w4, w4, w5
jal x0, impvt_Loop
impvt_V_gte_U:
bn.subm w3, w3, w2
bn.sub w5, w5, w4
csrrs x2, 1984, x0
andi x2, x2, 8
beq x2, x0, impvt_Loop
bn.addm w1, w2, w31
jalr x0, x1, 0
p256verify:
addi x3, x0, 6
bn.lid x3, 0(x0)
lw x16, 0(x0)
lw x17, 4(x0)
lw x18, 8(x0)
lw x19, 12(x0)
lw x20, 16(x0)
lw x21, 20(x0)
lw x22, 24(x0)
lw x23, 28(x0)
addi x8, x0, 11
lw x9, 4(x0)
addi x10, x0, 24
addi x11, x0, 24
addi x12, x0, 0
addi x13, x0, 8
addi x14, x0, 9
addi x15, x0, 12
bn.lid x11, 0(x19)
bn.mov w24, w6
bn.not w24, w24
jal x1, SetupP256NandMuLow
bn.cmp w6, w31
csrrs x2, 1984, x0
andi x2, x2, 8
bne x2, x0, fail
bn.cmp w6, w29
csrrs x2, 1984, x0
andi x2, x2, 1
beq x2, x0, fail
bn.lid x12, 0(x20)
bn.cmp w0, w31
csrrs x2, 1984, x0
andi x2, x2, 8
bne x2, x0, fail
bn.cmp w0, w29
csrrs x2, 1984, x0
andi x2, x2, 1
beq x2, x0, fail
jal x1, ModInvVar
bn.lid x11, 0(x19)
bn.mov w25, w1
jal x1, MulMod
bn.mov w0, w19
bn.lid x10, 0(x18)
bn.mov w25, w1
jal x1, MulMod
bn.mov w1, w19
jal x1, SetupP256PandMuLow
bn.lid x8, 0(x21)
bn.lid x15, 0(x22)
bn.mov w13, w30
jal x1, get_P256B
bn.mov w10, w30
jal x1, ProjAdd
bn.mov w3, w11
bn.mov w4, w12
bn.mov w5, w13
bn.and w2, w0, w1
bn.mov w11, w31
bn.mov w12, w30
bn.mov w13, w31
loopi 256, 30
bn.mov w8, w11
bn.mov w9, w12
bn.mov w10, w13
jal x1, ProjAdd
bn.add w2, w2, w2
csrrs x2, 1984, x0
andi x2, x2, 1
beq x2, x0, noBoth
bn.mov w8, w3
bn.mov w9, w4
bn.mov w10, w5
jal x1, ProjAdd
jal x0, noY
noBoth:
bn.add w6, w0, w0
csrrs x2, 1984, x0
andi x2, x2, 1
beq x2, x0, noG
bn.lid x13, 0(x21)
bn.lid x14, 0(x22)
bn.mov w10, w30
jal x1, ProjAdd
noG:
bn.add w6, w1, w1
csrrs x2, 1984, x0
andi x2, x2, 1
beq x2, x0, noY
jal x1, get_P256B
bn.mov w10, w30
jal x1, ProjAdd
noY:
bn.add w0, w0, w0
bn.add w1, w1, w1
bn.mov w0, w13
jal x1, ModInvVar
bn.mov w24, w1
bn.mov w25, w11
jal x1, MulMod
jal x1, SetupP256NandMuLow
bn.subm w24, w19, w31
fail:
bn.sid x11, 0(x17)
jalr x0, x1, 0
p256scalarmult:
addi x3, x0, 0
bn.lid x3, 0(x0)
lw x16, 0(x0)
lw x17, 4(x0)
lw x18, 8(x0)
lw x19, 12(x0)
lw x20, 16(x0)
lw x21, 20(x0)
lw x22, 24(x0)
lw x23, 28(x0)
addi x8, x0, 0
addi x9, x0, 1
addi x10, x0, 24
addi x11, x0, 11
lw x12, 16(x0)
lw x13, 20(x0)
lw x14, 24(x0)
lw x15, 28(x0)
bn.lid x8, 0(x16)
jal x1, ScalarMult_internal
bn.sid x11++, 0(x21)
bn.sid x11++, 0(x22)
jalr x0, x1, 0