3 * Copyright (C) 2006-2014 wolfSSL Inc.
5 * This file is part of CyaSSL.
7 * CyaSSL is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * CyaSSL is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
24 void fp_mul_comba7(fp_int *A, fp_int *B, fp_int *C)
26 fp_digit c0, c1, c2, at[14];
28 memcpy(at, A->dp, 7 * sizeof(fp_digit));
29 memcpy(at+7, B->dp, 7 * sizeof(fp_digit));
35 COMBA_STORE(C->dp[0]);
38 MULADD(at[0], at[8]); MULADD(at[1], at[7]);
39 COMBA_STORE(C->dp[1]);
42 MULADD(at[0], at[9]); MULADD(at[1], at[8]); MULADD(at[2], at[7]);
43 COMBA_STORE(C->dp[2]);
46 MULADD(at[0], at[10]); MULADD(at[1], at[9]); MULADD(at[2], at[8]); MULADD(at[3], at[7]);
47 COMBA_STORE(C->dp[3]);
50 MULADD(at[0], at[11]); MULADD(at[1], at[10]); MULADD(at[2], at[9]); MULADD(at[3], at[8]); MULADD(at[4], at[7]);
51 COMBA_STORE(C->dp[4]);
54 MULADD(at[0], at[12]); MULADD(at[1], at[11]); MULADD(at[2], at[10]); MULADD(at[3], at[9]); MULADD(at[4], at[8]); MULADD(at[5], at[7]);
55 COMBA_STORE(C->dp[5]);
58 MULADD(at[0], at[13]); MULADD(at[1], at[12]); MULADD(at[2], at[11]); MULADD(at[3], at[10]); MULADD(at[4], at[9]); MULADD(at[5], at[8]); MULADD(at[6], at[7]);
59 COMBA_STORE(C->dp[6]);
62 MULADD(at[1], at[13]); MULADD(at[2], at[12]); MULADD(at[3], at[11]); MULADD(at[4], at[10]); MULADD(at[5], at[9]); MULADD(at[6], at[8]);
63 COMBA_STORE(C->dp[7]);
66 MULADD(at[2], at[13]); MULADD(at[3], at[12]); MULADD(at[4], at[11]); MULADD(at[5], at[10]); MULADD(at[6], at[9]);
67 COMBA_STORE(C->dp[8]);
70 MULADD(at[3], at[13]); MULADD(at[4], at[12]); MULADD(at[5], at[11]); MULADD(at[6], at[10]);
71 COMBA_STORE(C->dp[9]);
74 MULADD(at[4], at[13]); MULADD(at[5], at[12]); MULADD(at[6], at[11]);
75 COMBA_STORE(C->dp[10]);
78 MULADD(at[5], at[13]); MULADD(at[6], at[12]);
79 COMBA_STORE(C->dp[11]);
82 MULADD(at[6], at[13]);
83 COMBA_STORE(C->dp[12]);
84 COMBA_STORE2(C->dp[13]);
86 C->sign = A->sign ^ B->sign;