blob: a98fe4dd1889944a20c0dad4c99a997bc2987069 [file] [log] [blame]
Satya Calloji444a8da2015-03-06 10:38:22 -08001/******************************************************************************
2 *
Jakub Pawlowski5b790fe2017-09-18 09:00:20 -07003 * Copyright 2006-2015 Broadcom Corporation
Satya Calloji444a8da2015-03-06 10:38:22 -08004 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at:
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
Jakub Pawlowski24ad4232019-02-27 10:00:17 +010015 * limitations under the License. *
Satya Calloji444a8da2015-03-06 10:38:22 -080016 ******************************************************************************/
17
Myles Watson9ca07092016-11-28 16:41:53 -080018/*******************************************************************************
19 *
20 * This file contains simple pairing algorithms
21 *
22 ******************************************************************************/
Satya Calloji444a8da2015-03-06 10:38:22 -080023#pragma once
24
25#include "bt_types.h"
26
Myles Watson911d1ae2016-11-28 16:44:40 -080027#define DWORD_BITS 32
28#define DWORD_BYTES 4
Satya Calloji444a8da2015-03-06 10:38:22 -080029#define DWORD_BITS_SHIFT 5
30
Satya Calloji444a8da2015-03-06 10:38:22 -080031#define KEY_LENGTH_DWORDS_P256 8
32/* Arithmetic Operations */
33
Jakub Pawlowski24ad4232019-02-27 10:00:17 +010034int multiprecision_compare(uint32_t* a, uint32_t* b);
35int multiprecision_iszero(uint32_t* a);
36void multiprecision_init(uint32_t* c);
37void multiprecision_copy(uint32_t* c, uint32_t* a);
Myles Watson911d1ae2016-11-28 16:44:40 -080038uint32_t multiprecision_dword_bits(uint32_t a);
Jakub Pawlowski24ad4232019-02-27 10:00:17 +010039uint32_t multiprecision_most_signdwords(uint32_t* a);
40uint32_t multiprecision_most_signbits(uint32_t* a);
41void multiprecision_inv_mod(uint32_t* aminus, uint32_t* a);
42uint32_t multiprecision_add(uint32_t* c, uint32_t* a, uint32_t* b); // c=a+b
43void multiprecision_add_mod(uint32_t* c, uint32_t* a, uint32_t* b);
44uint32_t multiprecision_sub(uint32_t* c, uint32_t* a, uint32_t* b); // c=a-b
45void multiprecision_sub_mod(uint32_t* c, uint32_t* a, uint32_t* b);
46void multiprecision_rshift(uint32_t* c, uint32_t* a); // c=a>>1, return carrier
47void multiprecision_lshift_mod(uint32_t* c,
48 uint32_t* a); // c=a<<b, return carrier
49uint32_t multiprecision_lshift(uint32_t* c,
50 uint32_t* a); // c=a<<b, return carrier
51void multiprecision_mult(uint32_t* c, uint32_t* a, uint32_t* b); // c=a*b
52void multiprecision_mersenns_mult_mod(uint32_t* c, uint32_t* a, uint32_t* b);
53void multiprecision_mersenns_squa_mod(uint32_t* c, uint32_t* a);
54uint32_t multiprecision_lshift(uint32_t* c, uint32_t* a);
55void multiprecision_mult(uint32_t* c, uint32_t* a, uint32_t* b);
Myles Watson911d1ae2016-11-28 16:44:40 -080056void multiprecision_fast_mod(uint32_t* c, uint32_t* a);
57void multiprecision_fast_mod_P256(uint32_t* c, uint32_t* a);