components/openssl/openssl-1.0.1/engines/t4/eng_t4_montmul.c
author Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
Fri, 03 May 2013 16:10:11 -0700
branchs11-update
changeset 2593 b92e6df5eaf0
parent 682 components/openssl/openssl-1.0.0/engines/t4/eng_t4_montmul.c@c6e4f94fd35d
permissions -rw-r--r--
PSARC 2013/034 OpenSSL 1.0.1 15824597 SUNBT7206149 Resynch with the latest OpenSSL (1.0.1e)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 */