blob: 0bb0278ac287aa8221ee54989a854cb490728485 [file] [log] [blame]
rjw6c1fd8f2022-11-30 14:33:01 +08001/*****************************************************************************
2* Copyright Statement:
3* --------------------
4* This software is protected by Copyright and the information contained
5* herein is confidential. The software may not be copied and the information
6* contained herein may not be used or disclosed except with the written
7* permission of MediaTek Inc. (C) 2016
8*
9* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
10* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS (""MEDIATEK SOFTWARE"")
11* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
12* AN ""AS-IS"" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
13* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
14* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
15* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
16* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
17* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
18* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
19* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
20* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
21*
22* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
23* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
24* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
25* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
26* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
27*
28* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
29* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
30* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
31* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
32* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
33*
34*****************************************************************************/
35/*************************************************************
36*
37* This Software is the property of VIA Telecom, Inc. and may only be used pursuant to a license from VIA Telecom, Inc.
38*
39* Any unauthorized use inconsistent with the terms of such license is strictly prohibited.
40*
41* Copyright (c) 1999-2010 VIA Telecom, Inc. All rights reserved.
42*
43*************************************************************/
44/*************************************************************************
45 *
46 * File Name: pswdhmath.h
47 * Project: Diffie Hellman
48 * Original Author: Dan Doucette
49 * Creation Date: Oct. 5, 1999
50 *
51 * Description: Defines the generic math functions used in the
52 * calculation of the diffie hellman exponent
53 *
54 * Restrictions:
55 *
56 * Dependencies:
57 *
58 *************************************************************************
59 *
60 * This Software is the property of ISOTEL Corporation. Unauthorized
61 * use is prohibited.
62 *
63 * ISOTEL Corporation
64 * 340, 525-28 Street S.E.
65 * Calgary, Alberta, Canada T2A 6W9
66 * Tel: (403)275-0041 Fax: (403)274-3598
67 *
68 *
69 *************************************************************************
70 *
71 * RCS Log Information
72 *
73 * $Revision: 1.2 $
74 *
75 * $Log: pswdhmath.h $
76 *
77 * 07 06 2017 sue.zhong
78 * [MOLY00259241] [6293][C2K]Replace with KAL data type
79 * Correct copyright file header
80 * Revision 1.2 2004/03/25 12:07:47 fpeng
81 * Updated from 6.0 CP 2.5.0
82 * Revision 1.1 2003/05/12 15:39:21 fpeng
83 * Initial revision
84 * Revision 1.2 2002/06/06 14:25:30 dstecker
85 * Updated copyright notice
86 * Revision 1.1 2001/07/23 11:36:09 mclee
87 * Initial revision
88 * Revision 1.1 2001/01/24 11:24:44 mclee
89 * Initial revision
90 * Revision 1.1 2001/01/24 00:09:22Z mclee
91 * Initial revision
92 * Revision 1.0 1999/12/02 14:28:50 danfeng hong
93 * Initial revision
94 *
95 *
96 ************************************************************************/
97
98#ifndef _DH_MATH_H
99#define _DH_MATH_H
100
101/*
102 * convert a DHEncryptVal value to a DHGiantInt value
103 */
104void dhGiantIntAssign(DHGiantInt *dest, DHEncryptVal *src);
105
106/*
107 * convert a DHGiantInt value to a DHEncryptVal value
108 */
109void dhEncryptValAssign(DHEncryptVal * dest, DHGiantInt *src);
110
111/*
112 * r = (m1*m2)%p
113 */
114void dhMulMod(DHGiantInt *r, DHGiantInt* m1, DHGiantInt * m2, DHGiantInt *p);
115
116/*
117 * r = (m1*m2)%p with optimization, need much more memory space than dhMulMod(),
118 * the method is called only when DH_EXTRAMEM macro is defined in dh_tune.h
119 */
120void dhMulModOpti(DHGiantInt *r, DHGiantInt* m1, DHGiantInt * m2, DHGiantInt *p, kal_int16 type);
121
122/*
123 * r = r%p
124 */
125void dhMod(DHGiantInt *r, DHGiantInt *p);
126
127/*
128 * r = mul1*mul2
129 */
130void dhMul(DHGiantInt *r, DHGiantInt* mul1, DHGiantInt * mul2);
131
132/*
133 * r = m1*block
134 */
135void dhMulBlock(DHGiantInt *r, DHGiantInt* m1, DHBlockType block);
136
137/*
138 * r += acc
139 */
140void dhAccFrom(DHGiantInt *r, DHGiantInt *acc);
141
142/*
143 * r -= dec; assume r>=dec
144 */
145void dhDecFrom(DHGiantInt *r, DHGiantInt *dec);
146
147/*
148 * returns:
149 * 1 if a > b
150 * 0 if a == b
151 * -1 if a < b
152 */
153kal_int16 dhCompare(DHGiantInt *a, DHGiantInt *b);
154
155/*
156 * KAL_TRUE if num's value is 0, KAL_FALSE otherwise
157 */
158kal_bool dhEquals0(DHGiantInt *num);
159
160/*
161 * KAL_TRUE if num's value is 1, KAL_FALSE otherwise
162 */
163kal_bool dhEquals1(DHGiantInt *num);
164
165/*
166 * get size of the num's Most Significant Block
167 */
168kal_int16 dhGetDHGiantIntSize(DHGiantInt * num);
169
170/*
171 * left shift blocks DHBlockType of num
172 */
173void dhBlocksShiftLeft(DHGiantInt *num, kal_int16 blocks);
174
175/*
176 * left shift bits of num
177 */
178void dhBitsShiftLeft(DHGiantInt * num, kal_int16 bits);
179
180/*
181 * right shift bits of num
182 */
183void dhBitsShiftRight(DHGiantInt *num, kal_int16 bits);
184
185/*
186 * get how many half bytes are in num's Most Significant block
187 */
188kal_int16 dhGetMSHalfBytesNum(DHGiantInt *num);
189
190/*
191 * get how many half bytes are in num's value
192 */
193kal_int16 dhGetHalfBytesNum(DHGiantInt *num);
194
195/*
196 * block = halfs half bytes from num starting from MS block
197 */
198void dhGetHighestHalfBytes(DHCarryBlockType *block, DHGiantInt *num, kal_int16 halfs);
199
200/*
201 * set a set of accessory fields of public modulus, mostly used by dhMulMod() to
202 * speed up performance
203 */
204void dhSetPHalfs(DHGiantInt *p);
205
206#endif
207
208