author | Misaki Miyashita <Misaki.Miyashita@Oracle.COM> |
Fri, 03 May 2013 16:10:11 -0700 | |
branch | s11-update |
changeset 2593 | b92e6df5eaf0 |
parent 682 | components/openssl/openssl-1.0.0/engines/t4/eng_t4_montmul.c@c6e4f94fd35d |
permissions | -rw-r--r-- |
682
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
1 |
/* |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
2 |
* This product includes cryptographic software developed by the OpenSSL |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
3 |
* Project for use in the OpenSSL Toolkit (http://www.openssl.org/). |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
4 |
*/ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
5 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
6 |
/* |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
7 |
* ==================================================================== |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
8 |
* Copyright (c) 1999-2011 The OpenSSL Project. All rights reserved. |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
9 |
* |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
10 |
* Redistribution and use in source and binary forms, with or without |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
11 |
* modification, are permitted provided that the following conditions |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
12 |
* are met: |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
13 |
* |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
14 |
* 1. Redistributions of source code must retain the above copyright |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
15 |
* notice, this list of conditions and the following disclaimer. |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
16 |
* |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
17 |
* 2. Redistributions in binary form must reproduce the above copyright |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
18 |
* notice, this list of conditions and the following disclaimer in |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
19 |
* the documentation and/or other materials provided with the |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
20 |
* distribution. |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
21 |
* |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
22 |
* 3. All advertising materials mentioning features or use of this |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
23 |
* software must display the following acknowledgment: |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
24 |
* "This product includes software developed by the OpenSSL Project |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
25 |
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
26 |
* |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
27 |
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
28 |
* endorse or promote products derived from this software without |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
29 |
* prior written permission. For written permission, please contact |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
30 |
* [email protected]. |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
31 |
* |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
32 |
* 5. Products derived from this software may not be called "OpenSSL" |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
33 |
* nor may "OpenSSL" appear in their names without prior written |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
34 |
* permission of the OpenSSL Project. |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
35 |
* |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
36 |
* 6. Redistributions of any form whatsoever must retain the following |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
37 |
* acknowledgment: |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
38 |
* "This product includes software developed by the OpenSSL Project |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
39 |
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
40 |
* |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
41 |
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
42 |
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
43 |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
44 |
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
45 |
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
46 |
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
47 |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
48 |
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
49 |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
50 |
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
51 |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
52 |
* OF THE POSSIBILITY OF SUCH DAMAGE. |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
53 |
* ==================================================================== |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
54 |
*/ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
55 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
56 |
/* |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
57 |
* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
58 |
*/ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
59 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
60 |
/* |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
61 |
* This engine supports SPARC microprocessors that provide AES and other |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
62 |
* cipher and hash instructions, such as the T4 microprocessor. |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
63 |
* |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
64 |
* This file implements the RSA, DSA, and DH operations. |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
65 |
*/ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
66 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
67 |
#include <openssl/opensslconf.h> |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
68 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
69 |
#define BIGNUM SOLARIS_BIGNUM |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
70 |
#include "eng_t4_bignum.h" |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
71 |
#undef BIGNUM |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
72 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
73 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
74 |
#if !defined(OPENSSL_NO_HW) && !defined(OPENSSL_NO_HW_MONTMUL_T4) |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
75 |
#include <sys/types.h> |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
76 |
#include <sys/auxv.h> /* getisax() */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
77 |
#include <sys/sysmacros.h> /* IS_P2ALIGNED() */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
78 |
#include <sys/byteorder.h> /* htonl() and friends */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
79 |
#include <stdlib.h> |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
80 |
#include <string.h> |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
81 |
#include <stdio.h> |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
82 |
#include <errno.h> |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
83 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
84 |
#ifndef OPENSSL_NO_RSA |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
85 |
#include <openssl/rsa.h> |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
86 |
#endif /* !OPENSSL_NO_RSA */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
87 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
88 |
#ifndef OPENSSL_NO_DSA |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
89 |
#include <openssl/dsa.h> |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
90 |
#endif /* !OPENSSL_NO_DSA */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
91 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
92 |
#ifndef OPENSSL_NO_DH |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
93 |
#include <openssl/dh.h> |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
94 |
#endif /* !OPENSSL_NO_DH */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
95 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
96 |
#include <openssl/bio.h> |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
97 |
#include <openssl/aes.h> |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
98 |
#include <openssl/engine.h> |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
99 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
100 |
#if (defined(sun4v) || defined(__sparcv9) || defined(__sparcv8plus) || \ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
101 |
defined(__sparcv8)) && !defined(OPENSSL_NO_ASM) |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
102 |
#define COMPILE_HW_T4 |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
103 |
#endif |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
104 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
105 |
#ifdef COMPILE_HW_T4 |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
106 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
107 |
#if !(defined(OPENSSL_NO_RSA) && defined(OPENSSL_NO_DSA) && \ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
108 |
defined(OPENSSL_NO_DH)) |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
109 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
110 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
111 |
/* |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
112 |
* Convert OpenSSL's BIGNUM to Solaris's BIGNUM.... |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
113 |
* It assumes that the Solaris BIGNUM has enough space |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
114 |
*/ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
115 |
static void |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
116 |
bn2solbn(const BIGNUM *src, SOLARIS_BIGNUM *dst) |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
117 |
{ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
118 |
int i, j; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
119 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
120 |
if (BN_BITS2 < BIG_CHUNK_SIZE) { |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
121 |
for (i = 0, j = 0; i < src->top; i++) { |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
122 |
if ((i & 1) == 0) { |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
123 |
dst->value[j] = src->d[i]; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
124 |
} else { |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
125 |
dst->value[j] += ((uint64_t)(src->d[i])) << 32; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
126 |
j++; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
127 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
128 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
129 |
dst->len = (src->top + 1) / 2; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
130 |
dst->sign = (src->neg == 1) ? -1 : 1; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
131 |
} else if (BN_BITS2 == BIG_CHUNK_SIZE) { |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
132 |
(void) memcpy(dst->value, src->d, src->top); |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
133 |
dst->len = src->top; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
134 |
dst->sign = (src->neg == 1) ? -1 : 1; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
135 |
} else { /* BN_BITS2 > BIG_CHUNK_SIZE */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
136 |
for (i = 0, j = 0; i < src->top; i++) { |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
137 |
dst->value[j++] = src->d[i] & 0xffffffffULL; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
138 |
dst->value[j++] = ((uint64_t)(src->d[i])) >> 32; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
139 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
140 |
dst->len = src->top * 2; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
141 |
if (dst->value[dst->len - 1] == 0) { |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
142 |
dst->len--; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
143 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
144 |
dst->sign = (src->neg == 1) ? -1 : 1; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
145 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
146 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
147 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
148 |
/* |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
149 |
* It assumes that OpenSSL's BIGNUM has enough space. |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
150 |
*/ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
151 |
static void |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
152 |
solbn2bn(const SOLARIS_BIGNUM *src, BIGNUM *dst) |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
153 |
{ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
154 |
int i, j; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
155 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
156 |
if (BN_BITS2 < BIG_CHUNK_SIZE) { |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
157 |
for (i = 0, j = 0; i < src->len; i++) { |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
158 |
dst->d[j++] = src->value[i] & 0xffffffffULL; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
159 |
dst->d[j++] = ((uint64_t)(src->value[i])) >> 32; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
160 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
161 |
dst->top = src->len * 2; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
162 |
if (dst->d[dst->top - 1] == 0) { |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
163 |
dst->top--; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
164 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
165 |
dst->neg = (src->sign == -1) ? 1 : 0; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
166 |
} else if (BN_BITS2 == BIG_CHUNK_SIZE) { |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
167 |
(void) memcpy(src->value, dst->d, src->len); |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
168 |
dst->top = src->len; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
169 |
dst->neg = (src->sign == -1) ? 1 : 0; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
170 |
} else { /* BN_BITS2 > BIG_CHUNK_SIZE */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
171 |
for (i = 0, j = 0; i < src->len; i++) { |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
172 |
if ((i & 1) == 0) { |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
173 |
dst->d[j] = src->value[i]; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
174 |
} else { |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
175 |
dst->d[j] += ((uint64_t)(src->value[i])) << 32; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
176 |
j++; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
177 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
178 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
179 |
dst->top = (src->len + 1) / 2; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
180 |
dst->neg = (src->sign == -1) ? 1 : 0; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
181 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
182 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
183 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
184 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
185 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
186 |
static int |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
187 |
t4_bn_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, const BIGNUM *m, |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
188 |
BN_CTX *ctx, BN_MONT_CTX *m_ctx) |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
189 |
{ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
190 |
int rv = 0; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
191 |
SOLARIS_BIGNUM sol_r = {0}; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
192 |
SOLARIS_BIGNUM sol_a = {0}; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
193 |
SOLARIS_BIGNUM sol_p = {0}; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
194 |
SOLARIS_BIGNUM sol_m = {0}; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
195 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
196 |
if (big_init(&sol_r, (m->top + 3) * BN_BITS2 / BIG_CHUNK_SIZE) != |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
197 |
BIG_OK) { |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
198 |
goto cleanup; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
199 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
200 |
if (big_init(&sol_a, (a->top + 1) * BN_BITS2 / BIG_CHUNK_SIZE) != |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
201 |
BIG_OK) { |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
202 |
goto cleanup; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
203 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
204 |
if (big_init(&sol_p, (p->top + 1) * BN_BITS2 / BIG_CHUNK_SIZE) != |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
205 |
BIG_OK) { |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
206 |
goto cleanup; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
207 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
208 |
if (big_init(&sol_m, (m->top + 1) * BN_BITS2 / BIG_CHUNK_SIZE) != |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
209 |
BIG_OK) { |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
210 |
goto cleanup; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
211 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
212 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
213 |
bn2solbn(a, &sol_a); |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
214 |
bn2solbn(p, &sol_p); |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
215 |
bn2solbn(m, &sol_m); |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
216 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
217 |
/* calls libsoftcrypto's big_modexp() routine */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
218 |
if (big_modexp(&sol_r, &sol_a, &sol_p, &sol_m, NULL) != BIG_OK) { |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
219 |
goto cleanup; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
220 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
221 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
222 |
if (bn_wexpand(r, m->top + 2) == NULL) { |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
223 |
goto cleanup; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
224 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
225 |
solbn2bn(&sol_r, r); |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
226 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
227 |
rv = 1; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
228 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
229 |
cleanup: |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
230 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
231 |
big_finish(&sol_m); |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
232 |
big_finish(&sol_p); |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
233 |
big_finish(&sol_a); |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
234 |
big_finish(&sol_r); |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
235 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
236 |
return (rv); |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
237 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
238 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
239 |
#endif /* !(OPENSSL_NO_RSA && OPENSSL_NO_DSA) */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
240 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
241 |
#ifndef OPENSSL_NO_RSA |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
242 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
243 |
/* Our internal RSA_METHOD that we provide pointers to */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
244 |
static RSA_METHOD t4_rsa = |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
245 |
{ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
246 |
"Oracle T4 RSA method", |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
247 |
NULL, /* rsa_pub_encrypt */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
248 |
NULL, /* rsa_pub_decrypt */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
249 |
NULL, /* rsa_priv_encrypt */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
250 |
NULL, /* rsa_priv_decrypt */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
251 |
NULL, /* rsa_mod_exp */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
252 |
t4_bn_mod_exp, /* bn_mod_exp */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
253 |
NULL, /* init */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
254 |
NULL, /* finish */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
255 |
RSA_FLAG_CACHE_PUBLIC | RSA_FLAG_CACHE_PRIVATE | RSA_FLAG_NO_BLINDING, |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
256 |
/* flags */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
257 |
NULL, /* app_data */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
258 |
NULL, /* rsa_sign */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
259 |
NULL, /* rsa_verify */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
260 |
/* Internal rsa_keygen will be used if this is NULL. */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
261 |
NULL /* rsa_keygen */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
262 |
}; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
263 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
264 |
RSA_METHOD * |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
265 |
t4_RSA(void) |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
266 |
{ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
267 |
const RSA_METHOD *meth1; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
268 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
269 |
meth1 = RSA_PKCS1_SSLeay(); |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
270 |
t4_rsa.rsa_pub_enc = meth1->rsa_pub_enc; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
271 |
t4_rsa.rsa_pub_dec = meth1->rsa_pub_dec; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
272 |
t4_rsa.rsa_priv_enc = meth1->rsa_priv_enc; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
273 |
t4_rsa.rsa_priv_dec = meth1->rsa_priv_dec; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
274 |
t4_rsa.rsa_mod_exp = meth1->rsa_mod_exp; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
275 |
t4_rsa.finish = meth1->finish; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
276 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
277 |
return (&t4_rsa); |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
278 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
279 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
280 |
#endif /* !OPENSSL_NO_RSA */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
281 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
282 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
283 |
#ifndef OPENSSL_NO_DSA |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
284 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
285 |
static int |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
286 |
t4_dsa_bn_mod_exp(DSA *dsa, BIGNUM *r, BIGNUM *a, const BIGNUM *p, |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
287 |
const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx) |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
288 |
{ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
289 |
return (t4_bn_mod_exp(r, a, p, m, ctx, m_ctx)); |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
290 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
291 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
292 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
293 |
static int |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
294 |
t4_dsa_mod_exp(DSA *dsa, BIGNUM *rr, BIGNUM *a1, BIGNUM *p1, |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
295 |
BIGNUM *a2, BIGNUM *p2, BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *in_mont) |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
296 |
{ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
297 |
int rv = 0; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
298 |
SOLARIS_BIGNUM sol_rr = {0}; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
299 |
SOLARIS_BIGNUM sol_a1 = {0}; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
300 |
SOLARIS_BIGNUM sol_p1 = {0}; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
301 |
SOLARIS_BIGNUM sol_a2 = {0}; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
302 |
SOLARIS_BIGNUM sol_p2 = {0}; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
303 |
SOLARIS_BIGNUM sol_m = {0}; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
304 |
SOLARIS_BIGNUM sol_tmp = {0}; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
305 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
306 |
if (big_init(&sol_rr, (m->top + 3) * BN_BITS2 / BIG_CHUNK_SIZE) != |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
307 |
BIG_OK) { |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
308 |
goto cleanup; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
309 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
310 |
if (big_init(&sol_a1, (a1->top + 1) * BN_BITS2 / BIG_CHUNK_SIZE) != |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
311 |
BIG_OK) { |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
312 |
goto cleanup; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
313 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
314 |
if (big_init(&sol_p1, (p1->top + 1) * BN_BITS2 / BIG_CHUNK_SIZE) != |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
315 |
BIG_OK) { |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
316 |
goto cleanup; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
317 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
318 |
if (big_init(&sol_a2, (a2->top + 1) * BN_BITS2 / BIG_CHUNK_SIZE) != |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
319 |
BIG_OK) { |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
320 |
goto cleanup; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
321 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
322 |
if (big_init(&sol_p2, (p2->top + 1) * BN_BITS2 / BIG_CHUNK_SIZE) != |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
323 |
BIG_OK) { |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
324 |
goto cleanup; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
325 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
326 |
if (big_init(&sol_m, (m->top + 1) * BN_BITS2 / BIG_CHUNK_SIZE) != |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
327 |
BIG_OK) { |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
328 |
goto cleanup; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
329 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
330 |
if (big_init(&sol_tmp, 2 * sol_m.len + 1) != BIG_OK) { |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
331 |
goto cleanup; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
332 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
333 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
334 |
if (big_init(&sol_tmp, 2 * sol_m.len + 1) != BIG_OK) { |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
335 |
goto cleanup; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
336 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
337 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
338 |
bn2solbn(a1, &sol_a1); |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
339 |
bn2solbn(p1, &sol_p1); |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
340 |
bn2solbn(a2, &sol_a2); |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
341 |
bn2solbn(p2, &sol_p2); |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
342 |
bn2solbn(m, &sol_m); |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
343 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
344 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
345 |
/* calls libsoftcrypto's big_modexp() routine */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
346 |
if (big_modexp(&sol_rr, &sol_a1, &sol_p1, &sol_m, NULL) != |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
347 |
BIG_OK) { |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
348 |
goto cleanup; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
349 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
350 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
351 |
if (big_modexp(&sol_tmp, &sol_a2, &sol_p2, &sol_m, NULL) != |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
352 |
BIG_OK) { |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
353 |
goto cleanup; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
354 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
355 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
356 |
if (big_mul(&sol_tmp, &sol_rr, &sol_tmp) != BIG_OK) { |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
357 |
goto cleanup; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
358 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
359 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
360 |
if (big_div_pos(NULL, &sol_rr, &sol_tmp, &sol_m) != BIG_OK) { |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
361 |
goto cleanup; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
362 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
363 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
364 |
if (bn_wexpand(rr, m->top + 2) == NULL) { |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
365 |
goto cleanup; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
366 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
367 |
solbn2bn(&sol_rr, rr); |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
368 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
369 |
rv = 1; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
370 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
371 |
cleanup: |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
372 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
373 |
big_finish(&sol_tmp); |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
374 |
big_finish(&sol_m); |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
375 |
big_finish(&sol_p2); |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
376 |
big_finish(&sol_a2); |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
377 |
big_finish(&sol_p1); |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
378 |
big_finish(&sol_a1); |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
379 |
big_finish(&sol_rr); |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
380 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
381 |
return (rv); |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
382 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
383 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
384 |
/* Our internal DSA_METHOD that we provide pointers to */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
385 |
static DSA_METHOD t4_dsa = |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
386 |
{ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
387 |
"Oracle T4 DSA method", /* name */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
388 |
NULL, /* dsa_do_sign */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
389 |
NULL, /* dsa_sign_setup */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
390 |
NULL, /* dsa_do_verify */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
391 |
t4_dsa_mod_exp, /* dsa_mod_exp, */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
392 |
t4_dsa_bn_mod_exp, /* bn_mod_exp, */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
393 |
NULL, /* init */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
394 |
NULL, /* finish */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
395 |
NULL, /* flags */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
396 |
NULL, /* app_data */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
397 |
NULL, /* dsa_paramgen */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
398 |
NULL /* dsa_keygen */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
399 |
}; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
400 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
401 |
DSA_METHOD * |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
402 |
t4_DSA(void) |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
403 |
{ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
404 |
const DSA_METHOD *meth1; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
405 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
406 |
meth1 = DSA_OpenSSL(); |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
407 |
t4_dsa.dsa_do_sign = meth1->dsa_do_sign; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
408 |
t4_dsa.dsa_sign_setup = meth1->dsa_sign_setup; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
409 |
t4_dsa.dsa_do_verify = meth1->dsa_do_verify; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
410 |
t4_dsa.finish = meth1->finish; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
411 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
412 |
return (&t4_dsa); |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
413 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
414 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
415 |
#endif /* !OPENSSL_NO_DSA */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
416 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
417 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
418 |
#ifndef OPENSSL_NO_DH |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
419 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
420 |
static int |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
421 |
t4_dh_bn_mod_exp(const DH *dh, BIGNUM *r, const BIGNUM *a, const BIGNUM *p, |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
422 |
const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx) |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
423 |
{ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
424 |
return (t4_bn_mod_exp(r, a, p, m, ctx, m_ctx)); |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
425 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
426 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
427 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
428 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
429 |
/* Our internal DH_METHOD that we provide pointers to */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
430 |
static DH_METHOD t4_dh = |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
431 |
{ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
432 |
"Oracle T4 DH method", /* name */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
433 |
NULL, /* generate_key */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
434 |
NULL, /* compute_key */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
435 |
t4_dh_bn_mod_exp, /* bn_mod_exp, */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
436 |
NULL, /* init */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
437 |
NULL, /* finish */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
438 |
NULL, /* flags */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
439 |
NULL /* app_data */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
440 |
}; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
441 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
442 |
DH_METHOD * |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
443 |
t4_DH(void) |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
444 |
{ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
445 |
const DH_METHOD *meth1; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
446 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
447 |
meth1 = DH_OpenSSL(); |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
448 |
t4_dh.generate_key = meth1->generate_key; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
449 |
t4_dh.compute_key = meth1->compute_key; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
450 |
t4_dh.finish = meth1->finish; |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
451 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
452 |
return (&t4_dh); |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
453 |
} |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
454 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
455 |
#endif /* !OPENSSL_NO_DH */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
456 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
457 |
#endif /* COMPILE_HW_T4 */ |
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
458 |
|
c6e4f94fd35d
7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents:
diff
changeset
|
459 |
#endif /* !OPENSSL_NO_HW && !OPENSSL_NO_HW_MONTMUL_T4 */ |