1 /* 2 * This file is part of the openHiTLS project. 3 * 4 * openHiTLS is licensed under the Mulan PSL v2. 5 * You can use this software according to the terms and conditions of the Mulan PSL v2. 6 * You may obtain a copy of Mulan PSL v2 at: 7 * 8 * http://license.coscl.org.cn/MulanPSL2 9 * 10 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, 11 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, 12 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. 13 * See the Mulan PSL v2 for more details. 14 */ 15 #ifndef BN_ASM_H 16 #define BN_ASM_H 17 18 #include "hitls_build.h" 19 #ifdef HITLS_CRYPTO_BN 20 21 #include <stdint.h> 22 #include <stdlib.h> 23 #include "crypt_bn.h" 24 25 #ifdef __cplusplus 26 extern "C" { 27 #endif 28 29 /** 30 * Function description: r = reduce(a * b) mod n 31 * Function prototype: void MontMul_Asm(uint64_t *r, const uint64_t *a, const uint64_t *b, 32 * const uint64_t *n, const uint64_t k0, uint32_t size); 33 * Input register: 34 * x0: result array pointer r 35 * x1: source data array pointer a 36 * x2: source data array pointer b 37 * x3: source data array pointer n 38 * x4: k0 in the mont structure 39 * x5: The size of the first four arrays is 'size'. 40 * Modify registers: x0-x17, x19-x24 41 * Output register: None 42 * Function/Macro Call: bn_mont_sqr8x, bn_mont_mul4x 43 * Remarks: The four arrays must have the same length. 44 * If these are different, expand the length to the length of the longest array. 45 * In addition, the expanded part needs to be cleared to 0. 46 */ 47 void MontMul_Asm(BN_UINT *r, const BN_UINT *a, const BN_UINT *b, const BN_UINT *n, const BN_UINT k0, size_t size); 48 49 #if defined(HITLS_CRYPTO_BN_X8664) 50 void MontMulx_Asm(BN_UINT *r, const BN_UINT *a, const BN_UINT *b, const BN_UINT *n, const BN_UINT k0, size_t size); 51 #endif 52 53 #ifdef __cplusplus 54 } 55 #endif 56 57 #endif /* HITLS_CRYPTO_BN */ 58 59 #endif