components/openssl/openssl-1.0.1/engines/t4/eng_t4.c
author Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
Thu, 27 Jun 2013 14:24:42 -0700
changeset 1373 2fd83bee8884
parent 1341 af3d6ef22d65
permissions -rw-r--r--
PSARC 2013/034 OpenSSL 1.0.1 16921388 T4 DES should be embedded in the OpenSSL upstream src
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
     1
/*
603
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
     2
 * This product includes cryptographic software developed by the OpenSSL
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
     3
 * Project for use in the OpenSSL Toolkit (http://www.openssl.org/).
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
     4
 */
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
     5
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
     6
/*
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
     7
 * ====================================================================
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
     8
 * Copyright (c) 1998-2011 The OpenSSL Project.  All rights reserved.
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
     9
 *
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    10
 * Redistribution and use in source and binary forms, with or without
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    11
 * modification, are permitted provided that the following conditions
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    12
 * are met:
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    13
 *
603
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    14
 * 1. Redistributions of source code must retain the above copyright
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    15
 *    notice, this list of conditions and the following disclaimer.
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    16
 *
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    17
 * 2. Redistributions in binary form must reproduce the above copyright
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    18
 *    notice, this list of conditions and the following disclaimer in
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    19
 *    the documentation and/or other materials provided with the
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    20
 *    distribution.
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    21
 *
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    22
 * 3. All advertising materials mentioning features or use of this
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    23
 *    software must display the following acknowledgment:
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    24
 *    "This product includes software developed by the OpenSSL Project
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    25
 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    26
 *
603
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    27
 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    28
 *    endorse or promote products derived from this software without
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    29
 *    prior written permission. For written permission, please contact
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    30
 *    [email protected].
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    31
 *
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    32
 * 5. Products derived from this software may not be called "OpenSSL"
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    33
 *    nor may "OpenSSL" appear in their names without prior written
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    34
 *    permission of the OpenSSL Project.
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    35
 *
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    36
 * 6. Redistributions of any form whatsoever must retain the following
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    37
 *    acknowledgment:
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    38
 *    "This product includes software developed by the OpenSSL Project
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    39
 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    40
 *
603
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    41
 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    42
 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    43
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    44
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    45
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    46
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    47
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    48
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    49
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    50
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    51
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    52
 * OF THE POSSIBILITY OF SUCH DAMAGE.
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    53
 * ====================================================================
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    54
 */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    55
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    56
/*
1158
227137d9fbce PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 682
diff changeset
    57
 * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    58
 */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    59
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    60
/*
1373
2fd83bee8884 PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 1341
diff changeset
    61
 * This engine supports SPARC microprocessors that provide T4 MONTMUL
1341
af3d6ef22d65 PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 1267
diff changeset
    62
 * instructions, such as the T4 microprocessor.
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    63
 */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    64
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    65
#include <openssl/opensslconf.h>
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    66
1341
af3d6ef22d65 PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 1267
diff changeset
    67
#if !defined(OPENSSL_NO_HW)
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    68
#include <sys/types.h>
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    69
#include <sys/auxv.h>	/* getisax() */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    70
#include <stdlib.h>
603
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
    71
#include <stdbool.h>
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    72
#include <string.h>
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    73
#include <errno.h>
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    74
#include <openssl/engine.h>
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    75
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    76
#define	T4_LIB_NAME "SPARC T4 engine"
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    77
#include "eng_t4_err.c"
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    78
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    79
/* Constants used when creating the ENGINE */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    80
static const char *ENGINE_T4_ID = "t4";
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    81
static const char *ENGINE_T4_NAME = "SPARC T4 engine support";
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    82
static const char *ENGINE_NO_T4_NAME = "SPARC T4 engine support (no T4)";
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    83
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    84
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    85
#if (defined(sun4v) || defined(__sparcv9) || defined(__sparcv8plus) || \
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    86
	defined(__sparcv8)) && !defined(OPENSSL_NO_ASM)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    87
#define	COMPILE_HW_T4
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    88
static int t4_bind_helper(ENGINE *e, const char *id);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    89
#pragma inline(t4_bind_helper)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    90
#endif
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    91
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    92
/*
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    93
 * This makes the engine "built-in" with OpenSSL.
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    94
 * On non-T4 CPUs this just returns.
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    95
 * Called by ENGINE_load_builtin_engines().
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    96
 */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    97
void
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    98
ENGINE_load_t4(void)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    99
{
603
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
   100
#ifdef	COMPILE_HW_T4
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   101
	ENGINE *toadd = ENGINE_new();
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   102
	if (toadd != NULL) {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   103
		if (t4_bind_helper(toadd, ENGINE_T4_ID) != 0) {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   104
			(void) ENGINE_add(toadd);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   105
			(void) ENGINE_free(toadd);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   106
			ERR_clear_error();
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   107
		} else {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   108
			(void) ENGINE_free(toadd);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   109
		}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   110
	}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   111
#endif
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   112
}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   113
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   114
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   115
#ifdef	COMPILE_HW_T4
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   116
static int t4_bind(ENGINE *e);
603
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
   117
#ifndef	DYNAMIC_ENGINE
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   118
#pragma inline(t4_bind)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   119
#endif
1373
2fd83bee8884 PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 1341
diff changeset
   120
static void t4_instructions_present(_Bool *montmul_present);
603
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
   121
#pragma inline(t4_instructions_present)
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   122
682
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   123
/* RSA_METHOD structure used by ENGINE_set_RSA() */
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   124
extern RSA_METHOD *t4_RSA(void);
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   125
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   126
/* DH_METHOD structure used by ENGINE_set_DH() */
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   127
extern DH_METHOD *t4_DH(void);
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   128
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   129
/* DSA_METHOD structure used by ENGINE_set_DSA() */
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   130
extern DSA_METHOD *t4_DSA(void);
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   131
603
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
   132
/*
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
   133
 * Utility Functions
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   134
 */
603
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
   135
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
   136
/*
1373
2fd83bee8884 PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 1341
diff changeset
   137
 * Set montmul_present to B_FALSE or B_TRUE depending on whether the
2fd83bee8884 PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 1341
diff changeset
   138
 * current SPARC processor supports MONTMUL.
603
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
   139
 */
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
   140
static void
1373
2fd83bee8884 PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 1341
diff changeset
   141
t4_instructions_present(_Bool *montmul_present)
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   142
{
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   143
	uint_t		ui;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   144
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   145
	(void) getisax(&ui, 1);
682
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   146
	*montmul_present = ((ui & AV_SPARC_MONT) != 0);
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   147
}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   148
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   149
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   150
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   151
/*
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   152
 * Is the t4 engine available?
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   153
 * Passed to ENGINE_set_init_function().
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   154
 */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   155
/* ARGSUSED */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   156
static int
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   157
t4_init(ENGINE *e)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   158
{
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   159
	return (1);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   160
}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   161
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   162
/* Passed to ENGINE_set_destroy_function(). */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   163
/* ARGSUSED */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   164
static int
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   165
t4_destroy(ENGINE *e)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   166
{
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   167
	ERR_unload_t4_strings();
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   168
	return (1);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   169
}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   170
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   171
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   172
/*
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   173
 * Called by t4_bind_helper().
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   174
 * Note: too early to use T4err() functions on errors.
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   175
 */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   176
/* ARGSUSED */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   177
static int
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   178
t4_bind(ENGINE *e)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   179
{
1373
2fd83bee8884 PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 1341
diff changeset
   180
	_Bool montmul_engage;
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   181
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   182
	/* Register T4 engine ID, name, and functions */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   183
	if (!ENGINE_set_id(e, ENGINE_T4_ID) ||
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   184
	    !ENGINE_set_name(e,
1373
2fd83bee8884 PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 1341
diff changeset
   185
	    montmul_engage ? ENGINE_T4_NAME : ENGINE_NO_T4_NAME) ||
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   186
	    !ENGINE_set_init_function(e, t4_init) ||
682
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   187
#ifndef OPENSSL_NO_RSA
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   188
	    (montmul_engage && !ENGINE_set_RSA(e, t4_RSA())) ||
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   189
#endif	/* OPENSSL_NO_RSA */
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   190
#ifndef OPENSSL_NO_DH
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   191
	    (montmul_engage && !ENGINE_set_DH(e, t4_DH())) ||
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   192
#endif	/* OPENSSL_NO_DH */
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   193
#ifndef OPENSSL_NO_DSA
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   194
	    (montmul_engage && !ENGINE_set_DSA(e, t4_DSA())) ||
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   195
#endif	/* OPENSSL_NO_DSA */
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   196
	    !ENGINE_set_destroy_function(e, t4_destroy)) {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   197
		return (0);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   198
	}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   199
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   200
	return (1);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   201
}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   202
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   203
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   204
/*
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   205
 * Called by ENGINE_load_t4().
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   206
 * Note: too early to use T4err() functions on errors.
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   207
 */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   208
static int
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   209
t4_bind_helper(ENGINE *e, const char *id)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   210
{
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   211
	if (id != NULL && (strcmp(id, ENGINE_T4_ID) != 0)) {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   212
		(void) fprintf(stderr, "T4: bad t4 engine ID\n");
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   213
		return (0);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   214
	}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   215
	if (!t4_bind(e)) {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   216
		(void) fprintf(stderr,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   217
		    "T4: failed to bind t4 engine\n");
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   218
		return (0);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   219
	}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   220
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   221
	return (1);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   222
}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   223
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   224
603
1b966e9a6b03 7069023 OpenSSL t4 engine improvements: des, 3des, sha-224/384, and remove proprietary code
Dan Anderson <dan.anderson@oracle.com>
parents: 580
diff changeset
   225
#ifdef	DYNAMIC_ENGINE
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   226
IMPLEMENT_DYNAMIC_CHECK_FN()
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   227
IMPLEMENT_DYNAMIC_BIND_FN(t4_bind_helper)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   228
#endif	/* DYNAMIC_ENGINE */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   229
#endif	/* COMPILE_HW_T4 */
1341
af3d6ef22d65 PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 1267
diff changeset
   230
#endif	/* !OPENSSL_NO_HW */