components/openssl/openssl-1.0.0/engines/t4/eng_t4.c
author Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
Fri, 10 Feb 2012 06:32:53 -0800
changeset 682 c6e4f94fd35d
parent 603 1b966e9a6b03
permissions -rw-r--r--
7116525 OpenSSL t4 engine improvements: montgomery multiply
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
/*
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    57
 * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
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
/*
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    61
 * This engine supports SPARC microprocessors that provide AES and other
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    62
 * cipher and hash instructions, such as the T4 microprocessor.
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
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    67
#if !defined(OPENSSL_NO_HW) && !defined(OPENSSL_NO_HW_AES_T4) && \
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    68
	!defined(OPENSSL_NO_AES)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    69
#include <sys/types.h>
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    70
#include <sys/auxv.h>	/* getisax() */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    71
#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
    72
#include <stdbool.h>
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    73
#include <string.h>
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    74
#include <errno.h>
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    75
#include <openssl/aes.h>
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    76
#include <openssl/engine.h>
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    77
#include "eng_t4_aes_asm.h"
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
#define	T4_LIB_NAME "SPARC T4 engine"
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    80
#include "eng_t4_err.c"
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    81
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    82
/* Copied from Solaris aes_impl.h */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    83
#ifndef	MAX_AES_NR
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    84
#define	MAX_AES_NR		14 /* Maximum number of rounds */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    85
#endif
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    86
#ifndef	MAX_AES_NB
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    87
#define	MAX_AES_NB		4  /* Number of columns comprising a state */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    88
#endif
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    89
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    90
/* Index for the supported ciphers */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    91
typedef enum {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    92
	T4_AES_128_CBC,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    93
	T4_AES_192_CBC,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    94
	T4_AES_256_CBC,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    95
#ifndef	SOLARIS_NO_AES_CFB128
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    96
	T4_AES_128_CFB128,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    97
	T4_AES_192_CFB128,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    98
	T4_AES_256_CFB128,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    99
#endif	/* !SOLARIS_NO_AES_CFB128 */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   100
#ifndef	SOLARIS_NO_AES_CTR
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   101
	T4_AES_128_CTR,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   102
	T4_AES_192_CTR,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   103
	T4_AES_256_CTR,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   104
#endif
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   105
	T4_AES_128_ECB,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   106
	T4_AES_192_ECB,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   107
	T4_AES_256_ECB,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   108
	T4_CIPHER_MAX
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   109
} t4_cipher_id;
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
/* T4 cipher context; must be 8-byte aligned (last field must be uint64_t)  */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   112
typedef struct t4_cipher_ctx {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   113
	t4_cipher_id	index;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   114
	uint64_t	*iv;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   115
	uint64_t	aligned_iv_buffer[2]; /* use if original IV unaligned */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   116
	/* Encryption and decryption key schedule are the same: */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   117
	uint64_t	t4_ks[((MAX_AES_NR) + 1) * (MAX_AES_NB)];
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   118
} t4_cipher_ctx_t;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   119
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   120
typedef struct t4_cipher {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   121
	t4_cipher_id	id;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   122
	int		nid;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   123
	int		iv_len;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   124
	int		min_key_len;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   125
	int		max_key_len;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   126
	unsigned long	flags;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   127
} t4_cipher_t;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   128
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   129
/* Constants used when creating the ENGINE */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   130
static const char *ENGINE_T4_ID = "t4";
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   131
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
   132
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
   133
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   134
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   135
#if (defined(sun4v) || defined(__sparcv9) || defined(__sparcv8plus) || \
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   136
	defined(__sparcv8)) && !defined(OPENSSL_NO_ASM)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   137
#define	COMPILE_HW_T4
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   138
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
   139
#pragma inline(t4_bind_helper)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   140
#endif
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   141
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
 * This makes the engine "built-in" with OpenSSL.
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   144
 * On non-T4 CPUs this just returns.
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   145
 * Called by ENGINE_load_builtin_engines().
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   146
 */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   147
void
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   148
ENGINE_load_t4(void)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   149
{
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
   150
#ifdef	COMPILE_HW_T4
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   151
	ENGINE *toadd = ENGINE_new();
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   152
	if (toadd != NULL) {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   153
		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
   154
			(void) ENGINE_add(toadd);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   155
			(void) ENGINE_free(toadd);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   156
			ERR_clear_error();
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   157
		} else {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   158
			(void) ENGINE_free(toadd);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   159
		}
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
#endif
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   162
}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   163
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   164
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   165
#ifdef	COMPILE_HW_T4
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   166
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
   167
#ifndef	DYNAMIC_ENGINE
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   168
#pragma inline(t4_bind)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   169
#endif
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   170
static t4_cipher_id get_cipher_index_by_nid(int nid);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   171
#pragma inline(get_cipher_index_by_nid)
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
   172
static void t4_instructions_present(_Bool *aes_present, _Bool *des_present,
682
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   173
    _Bool *digest_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
   174
#pragma inline(t4_instructions_present)
426
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
/* Digest registration function. Called by ENGINE_set_ciphers() */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   177
int t4_get_all_digests(ENGINE *e, const EVP_MD **digest,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   178
    const int **nids, int nid);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   179
682
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   180
/* 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
   181
extern RSA_METHOD *t4_RSA(void);
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   182
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   183
/* 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
   184
extern DH_METHOD *t4_DH(void);
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   185
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   186
/* 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
   187
extern DSA_METHOD *t4_DSA(void);
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   188
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   189
#ifndef	SOLARIS_NO_AES_CTR
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   190
/*
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   191
 * NIDs for AES counter mode that will be defined during the engine
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   192
 * initialization (because OpenSSL doesn't support CTR mode).
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   193
 */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   194
static int NID_t4_aes_128_ctr = NID_undef;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   195
static int NID_t4_aes_192_ctr = NID_undef;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   196
static int NID_t4_aes_256_ctr = NID_undef;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   197
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   198
static int t4_add_NID(char *sn, char *ln);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   199
static int t4_add_aes_ctr_NIDs(void);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   200
#pragma inline(t4_add_aes_ctr_NIDs)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   201
static void t4_free_aes_ctr_NIDs(void);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   202
#define	T4_FREE_AES_CTR_NIDS	t4_free_aes_ctr_NIDs()
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   203
#else
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   204
#define	T4_FREE_AES_CTR_NIDS
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   205
#endif	/* !SOLARIS_NO_AES_CTR */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   206
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   207
/* Static variables */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   208
/* This can't be const as NID*ctr is inserted when the engine is initialized */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   209
static int t4_cipher_nids[] = {
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
   210
	NID_aes_128_cbc, NID_aes_192_cbc, NID_aes_256_cbc,
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   211
#ifndef	SOLARIS_NO_AES_CFB128
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
   212
	NID_aes_128_cfb128, NID_aes_192_cfb128, NID_aes_256_cfb128,
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   213
#endif
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   214
#ifndef	SOLARIS_NO_AES_CTR
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
   215
	/* NID_t4_aes_128_ctr, NID_t4_aes_192, NID_t4_aes_256 */
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
   216
	NID_undef, NID_undef, NID_undef,
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   217
#endif
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
   218
	NID_aes_128_ecb, NID_aes_192_ecb, NID_aes_256_ecb,
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
   219
#ifndef	OPENSSL_NO_DES
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
   220
	/* Must be at end of list (see t4_des_cipher_count in t4_bind() */
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
   221
	NID_des_cbc, NID_des_ede3_cbc, NID_des_ecb, NID_des_ede3_ecb,
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
   222
#endif
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   223
};
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
   224
static const int t4_des_cipher_count = 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
   225
static int t4_cipher_count =
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   226
	(sizeof (t4_cipher_nids) / sizeof (t4_cipher_nids[0]));
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   227
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   228
/*
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   229
 * Cipher Table for all supported symmetric ciphers.
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   230
 * Must be in same order as t4_cipher_id.
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   231
 */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   232
static t4_cipher_t t4_cipher_table[] = {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   233
	/* ID			NID			IV min- max-key flags */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   234
	{T4_AES_128_CBC,	NID_aes_128_cbc,	16, 16, 16, 0},
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   235
	{T4_AES_192_CBC,	NID_aes_192_cbc,	16, 24, 24, 0},
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   236
	{T4_AES_256_CBC,	NID_aes_256_cbc,	16, 32, 32, 0},
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   237
#ifndef	SOLARIS_NO_AES_CFB128
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   238
	{T4_AES_128_CFB128,	NID_aes_128_cfb128,	16, 16, 16,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   239
							EVP_CIPH_NO_PADDING},
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   240
	{T4_AES_192_CFB128,	NID_aes_192_cfb128,	16, 24, 24,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   241
							EVP_CIPH_NO_PADDING},
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   242
	{T4_AES_256_CFB128,	NID_aes_256_cfb128,	16, 32, 32,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   243
							EVP_CIPH_NO_PADDING},
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   244
#endif
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   245
#ifndef	SOLARIS_NO_AES_CTR
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   246
	/* We don't know the correct NIDs until the engine is initialized */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   247
	{T4_AES_128_CTR,	NID_undef,		16, 16, 16,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   248
							EVP_CIPH_NO_PADDING},
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   249
	{T4_AES_192_CTR,	NID_undef,		16, 24, 24,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   250
							EVP_CIPH_NO_PADDING},
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   251
	{T4_AES_256_CTR,	NID_undef,		16, 32, 32,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   252
							EVP_CIPH_NO_PADDING},
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   253
#endif
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   254
	{T4_AES_128_ECB,	NID_aes_128_ecb,	0, 16, 16, 0},
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   255
	{T4_AES_192_ECB,	NID_aes_192_ecb,	0, 24, 24, 0},
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   256
	{T4_AES_256_ECB,	NID_aes_256_ecb,	0, 32, 32, 0},
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   257
};
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   258
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   259
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   260
/* Formal declaration for functions in EVP_CIPHER structure */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   261
static int t4_cipher_init_aes(EVP_CIPHER_CTX *ctx, const unsigned char *key,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   262
    const unsigned char *iv, int enc);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   263
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   264
static int t4_cipher_do_aes_128_cbc(EVP_CIPHER_CTX *ctx, unsigned char *out,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   265
    const unsigned char *in, size_t inl);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   266
static int t4_cipher_do_aes_192_cbc(EVP_CIPHER_CTX *ctx, unsigned char *out,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   267
    const unsigned char *in, size_t inl);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   268
static int t4_cipher_do_aes_256_cbc(EVP_CIPHER_CTX *ctx, unsigned char *out,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   269
    const unsigned char *in, size_t inl);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   270
#ifndef	SOLARIS_NO_AES_CFB128
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   271
static int t4_cipher_do_aes_128_cfb128(EVP_CIPHER_CTX *ctx, unsigned char *out,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   272
    const unsigned char *in, size_t inl);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   273
static int t4_cipher_do_aes_192_cfb128(EVP_CIPHER_CTX *ctx, unsigned char *out,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   274
    const unsigned char *in, size_t inl);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   275
static int t4_cipher_do_aes_256_cfb128(EVP_CIPHER_CTX *ctx, unsigned char *out,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   276
    const unsigned char *in, size_t inl);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   277
#endif
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   278
#ifndef	SOLARIS_NO_AES_CTR
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   279
static int t4_cipher_do_aes_128_ctr(EVP_CIPHER_CTX *ctx, unsigned char *out,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   280
    const unsigned char *in, size_t inl);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   281
static int t4_cipher_do_aes_192_ctr(EVP_CIPHER_CTX *ctx, unsigned char *out,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   282
    const unsigned char *in, size_t inl);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   283
static int t4_cipher_do_aes_256_ctr(EVP_CIPHER_CTX *ctx, unsigned char *out,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   284
    const unsigned char *in, size_t inl);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   285
#endif	/* !SOLARIS_NO_AES_CTR */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   286
static int t4_cipher_do_aes_128_ecb(EVP_CIPHER_CTX *ctx, unsigned char *out,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   287
    const unsigned char *in, size_t inl);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   288
static int t4_cipher_do_aes_192_ecb(EVP_CIPHER_CTX *ctx, unsigned char *out,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   289
    const unsigned char *in, size_t inl);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   290
static int t4_cipher_do_aes_256_ecb(EVP_CIPHER_CTX *ctx, unsigned char *out,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   291
    const unsigned char *in, size_t inl);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   292
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   293
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   294
/*
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   295
 * Cipher Algorithms
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   296
 *
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   297
 * OpenSSL's libcrypto EVP stuff. This is how this engine gets wired to EVP.
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   298
 * EVP_CIPHER is defined in evp.h.  To maintain binary compatibility the
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   299
 * definition cannot be modified.
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   300
 * Stuff specific to the t4 engine is kept in t4_cipher_ctx_t, which is
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
   301
 * pointed to by cipher_data or md_data
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   302
 *
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   303
 * Fields: nid, block_size, key_len, iv_len, flags,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   304
 *	init(), do_cipher(), cleanup(),
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   305
 *	ctx_size,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   306
 *	set_asn1_parameters(), get_asn1_parameters(), ctrl(), app_data
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   307
 */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   308
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   309
static const EVP_CIPHER t4_aes_128_cbc = {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   310
	NID_aes_128_cbc,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   311
	16, 16, 16,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   312
	EVP_CIPH_CBC_MODE,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   313
	t4_cipher_init_aes, t4_cipher_do_aes_128_cbc, NULL,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   314
	sizeof (t4_cipher_ctx_t),
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   315
	EVP_CIPHER_set_asn1_iv, EVP_CIPHER_get_asn1_iv,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   316
	NULL, NULL
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   317
};
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   318
static const EVP_CIPHER t4_aes_192_cbc = {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   319
	NID_aes_192_cbc,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   320
	16, 24, 16,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   321
	EVP_CIPH_CBC_MODE,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   322
	t4_cipher_init_aes, t4_cipher_do_aes_192_cbc, NULL,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   323
	sizeof (t4_cipher_ctx_t),
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   324
	EVP_CIPHER_set_asn1_iv, EVP_CIPHER_get_asn1_iv,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   325
	NULL, NULL
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   326
};
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   327
static const EVP_CIPHER t4_aes_256_cbc = {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   328
	NID_aes_256_cbc,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   329
	16, 32, 16,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   330
	EVP_CIPH_CBC_MODE,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   331
	t4_cipher_init_aes, t4_cipher_do_aes_256_cbc, NULL,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   332
	sizeof (t4_cipher_ctx_t),
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   333
	EVP_CIPHER_set_asn1_iv, EVP_CIPHER_get_asn1_iv,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   334
	NULL, NULL
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   335
};
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   336
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   337
#ifndef	SOLARIS_NO_AES_CFB128
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   338
static const EVP_CIPHER t4_aes_128_cfb128 = {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   339
	NID_aes_128_cfb128,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   340
	16, 16, 16,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   341
	EVP_CIPH_CFB_MODE,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   342
	t4_cipher_init_aes, t4_cipher_do_aes_128_cfb128, NULL,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   343
	sizeof (t4_cipher_ctx_t),
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   344
	EVP_CIPHER_set_asn1_iv, EVP_CIPHER_get_asn1_iv,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   345
	NULL, NULL
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   346
};
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   347
static const EVP_CIPHER t4_aes_192_cfb128 = {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   348
	NID_aes_192_cfb128,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   349
	16, 24, 16,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   350
	EVP_CIPH_CFB_MODE,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   351
	t4_cipher_init_aes, t4_cipher_do_aes_192_cfb128, NULL,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   352
	sizeof (t4_cipher_ctx_t),
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   353
	EVP_CIPHER_set_asn1_iv, EVP_CIPHER_get_asn1_iv,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   354
	NULL, NULL
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   355
};
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   356
static const EVP_CIPHER t4_aes_256_cfb128 = {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   357
	NID_aes_256_cfb128,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   358
	16, 32, 16,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   359
	EVP_CIPH_CFB_MODE,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   360
	t4_cipher_init_aes, t4_cipher_do_aes_256_cfb128, NULL,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   361
	sizeof (t4_cipher_ctx_t),
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   362
	EVP_CIPHER_set_asn1_iv, EVP_CIPHER_get_asn1_iv,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   363
	NULL, NULL
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   364
};
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   365
#endif	/* !SOLARIS_NO_AES_CFB128 */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   366
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   367
#ifndef	SOLARIS_NO_AES_CTR
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   368
/*
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   369
 * Counter mode is not defined in OpenSSL.
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   370
 * NID_undef's will be changed to AES counter mode NIDs as soon as they are
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   371
 * created in t4_add_aes_ctr_NIDs() when the engine is initialized.
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   372
 * Note that the need to change these structures during initialization is the
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   373
 * reason why we don't define them with the const keyword.
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   374
 */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   375
static EVP_CIPHER t4_aes_128_ctr = {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   376
	NID_undef,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   377
	16, 16, 16,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   378
	EVP_CIPH_CBC_MODE,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   379
	t4_cipher_init_aes, t4_cipher_do_aes_128_ctr, NULL,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   380
	sizeof (t4_cipher_ctx_t),
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   381
	EVP_CIPHER_set_asn1_iv, EVP_CIPHER_get_asn1_iv,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   382
	NULL, NULL
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   383
};
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   384
static EVP_CIPHER t4_aes_192_ctr = {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   385
	NID_undef,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   386
	16, 24, 16,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   387
	EVP_CIPH_CBC_MODE,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   388
	t4_cipher_init_aes, t4_cipher_do_aes_192_ctr, NULL,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   389
	sizeof (t4_cipher_ctx_t),
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   390
	EVP_CIPHER_set_asn1_iv, EVP_CIPHER_get_asn1_iv,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   391
	NULL, NULL
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   392
};
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   393
static EVP_CIPHER t4_aes_256_ctr = {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   394
	NID_undef,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   395
	16, 32, 16,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   396
	EVP_CIPH_CBC_MODE,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   397
	t4_cipher_init_aes, t4_cipher_do_aes_256_ctr, NULL,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   398
	sizeof (t4_cipher_ctx_t),
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   399
	EVP_CIPHER_set_asn1_iv, EVP_CIPHER_get_asn1_iv,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   400
	NULL, NULL
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   401
};
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   402
#endif	/* !SOLARIS_NO_AES_CTR */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   403
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   404
/*
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   405
 * ECB modes don't use an Initial Vector, so that's why set_asn1_parameters,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   406
 * get_asn1_parameters, and cleanup fields are set to NULL.
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   407
 */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   408
static const EVP_CIPHER t4_aes_128_ecb = {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   409
	NID_aes_128_ecb,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   410
	16, 16, 0,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   411
	EVP_CIPH_ECB_MODE,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   412
	t4_cipher_init_aes, t4_cipher_do_aes_128_ecb, NULL,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   413
	sizeof (t4_cipher_ctx_t),
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   414
	NULL, NULL, NULL, NULL
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   415
};
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   416
static const EVP_CIPHER t4_aes_192_ecb = {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   417
	NID_aes_192_ecb,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   418
	16, 24, 0,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   419
	EVP_CIPH_ECB_MODE,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   420
	t4_cipher_init_aes, t4_cipher_do_aes_192_ecb, NULL,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   421
	sizeof (t4_cipher_ctx_t),
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   422
	NULL, NULL, NULL, NULL
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   423
};
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   424
static const EVP_CIPHER t4_aes_256_ecb = {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   425
	NID_aes_256_ecb,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   426
	16, 32, 0,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   427
	EVP_CIPH_ECB_MODE,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   428
	t4_cipher_init_aes, t4_cipher_do_aes_256_ecb, NULL,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   429
	sizeof (t4_cipher_ctx_t),
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   430
	NULL, NULL, NULL, NULL
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   431
};
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   432
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
   433
#ifndef	OPENSSL_NO_DES
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
   434
extern const EVP_CIPHER t4_des_cbc;
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
   435
extern const EVP_CIPHER t4_des3_cbc;
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
   436
extern const EVP_CIPHER t4_des_ecb;
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
   437
extern const EVP_CIPHER t4_des3_ecb;
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
   438
#endif	/* OPENSSL_NO_DES */
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
   439
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
   440
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
   441
/*
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
   442
 * Message Digest variables
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
   443
 */
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
   444
static const int t4_digest_nids[] = {
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
   445
#ifndef	OPENSSL_NO_MD5
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
   446
	NID_md5,
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
   447
#endif
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
   448
#ifndef	OPENSSL_NO_SHA
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
   449
#ifndef	OPENSSL_NO_SHA1
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
   450
	NID_sha1,
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
   451
#endif
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
   452
#ifndef	OPENSSL_NO_SHA256
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
   453
	NID_sha224,
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
   454
	NID_sha256,
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
   455
#endif
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
   456
#ifndef	OPENSSL_NO_SHA512
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
   457
	NID_sha384,
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
   458
	NID_sha512,
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
   459
#endif
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
   460
#endif	/* !OPENSSL_NO_SHA */
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
   461
};
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
   462
static const int t4_digest_count =
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
   463
	(sizeof (t4_digest_nids) / sizeof (t4_digest_nids[0]));
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
   464
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
   465
#ifndef	OPENSSL_NO_MD5
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
   466
extern const EVP_MD t4_md5;
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
   467
#endif
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
   468
#ifndef	OPENSSL_NO_SHA
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
   469
#ifndef	OPENSSL_NO_SHA1
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
   470
extern const EVP_MD t4_sha1;
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
   471
#endif
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
   472
#ifndef	OPENSSL_NO_SHA256
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
   473
extern const EVP_MD t4_sha224;
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
   474
extern const EVP_MD t4_sha256;
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
   475
#endif
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
   476
#ifndef	OPENSSL_NO_SHA512
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
   477
extern const EVP_MD t4_sha384;
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
   478
extern const EVP_MD t4_sha512;
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
   479
#endif
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
   480
#endif	/* !OPENSSL_NO_SHA */
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
   481
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
   482
/*
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
   483
 * Message Digest functions
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
   484
 */
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   485
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   486
/*
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
   487
 * Registered by the ENGINE with ENGINE_set_digests().
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
   488
 * Finds out how to deal with a particular digest NID in the ENGINE.
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   489
 */
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
   490
/* ARGSUSED */
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
   491
int
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
   492
t4_get_all_digests(ENGINE *e, const EVP_MD **digest,
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
   493
    const int **nids, int nid)
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   494
{
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
   495
	if (digest == NULL) { /* return a list of all supported digests */
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
   496
		*nids = (t4_digest_count > 0) ? t4_digest_nids : NULL;
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
   497
		return (t4_digest_count);
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
   498
	}
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   499
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
   500
	switch (nid) {
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
   501
#ifndef	OPENSSL_NO_MD5
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
   502
	case NID_md5:
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
   503
		*digest = &t4_md5;
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
   504
		break;
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
   505
#endif
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
   506
#ifndef	OPENSSL_NO_SHA
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
   507
#ifndef	OPENSSL_NO_SHA1
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
   508
	/*
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
   509
	 * A special case. For "openssl dgst -dss1 ...",
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
   510
	 * OpenSSL calls EVP_get_digestbyname() on "dss1" which ends up
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
   511
	 * calling t4_get_all_digests() for NID_dsa. Internally, if an
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
   512
	 * engine is not used, OpenSSL uses SHA1_Init() as expected for
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
   513
	 * DSA. So, we must return t4_sha1 for NID_dsa as well. Note
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
   514
	 * that this must have changed between 0.9.8 and 1.0.0 since we
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
   515
	 * did not have the problem with the 0.9.8 version.
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
   516
	 */
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
   517
	case NID_dsa:
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
   518
	case NID_sha1:
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
   519
		*digest = &t4_sha1;
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
   520
		break;
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
   521
#endif
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
   522
#ifndef	OPENSSL_NO_SHA256
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
   523
	case NID_sha224:
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
   524
		*digest = &t4_sha224;
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
   525
		break;
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
   526
	case NID_sha256:
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
   527
		*digest = &t4_sha256;
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
   528
		break;
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
   529
#endif
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
   530
#ifndef	OPENSSL_NO_SHA512
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
   531
	case NID_sha384:
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
   532
		*digest = &t4_sha384;
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
   533
		break;
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
   534
	case NID_sha512:
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
   535
		*digest = &t4_sha512;
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
   536
		break;
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
   537
#endif
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
   538
#endif	/* !OPENSSL_NO_SHA */
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
   539
	default:
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
   540
		/* digest not supported */
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
   541
		*digest = NULL;
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
   542
		return (0);
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
   543
	}
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
   544
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
   545
	return (1);
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   546
}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   547
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   548
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   549
/*
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
   550
 * Utility Functions
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   551
 */
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
   552
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
   553
/*
682
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   554
 * Set aes_present, des_present, digest_present and montmul_present
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   555
 * to B_FALSE or B_TRUE depending on
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   556
 * whether the current SPARC processor supports AES, DES,
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   557
 * MD5/SHA1/SHA256/SHA512 and MONTMUL, respectively.
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
   558
 */
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
   559
static void
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
   560
t4_instructions_present(_Bool *aes_present, _Bool *des_present,
682
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   561
    _Bool *digest_present, _Bool *montmul_present)
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   562
{
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
   563
#ifdef	OPENSSL_NO_DES
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
   564
#undef	AV_SPARC_DES
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
   565
#define	AV_SPARC_DES	0
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
   566
#endif
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
   567
#ifdef	OPENSSL_NO_MD5
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
   568
#undef	AV_SPARC_MD5
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
   569
#define	AV_SPARC_MD5	0
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
   570
#endif
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   571
#ifndef	OPENSSL_NO_SHA
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
   572
#ifdef	OPENSSL_NO_SHA1
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
   573
#undef	AV_SPARC_SHA1
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
   574
#define	AV_SPARC_SHA1	0
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
   575
#endif
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
   576
#ifdef	OPENSSL_NO_SHA256
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
   577
#undef	AV_SPARC_SHA256
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
   578
#define	AV_SPARC_SHA256	0
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
   579
#endif
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
   580
#ifdef	OPENSSL_NO_SHA512
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
   581
#undef	AV_SPARC_SHA512
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
   582
#define	AV_SPARC_SHA512	0
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
   583
#endif
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
   584
#else
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
   585
#undef	AV_SPARC_SHA1
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
   586
#undef	AV_SPARC_SHA256
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
   587
#undef	AV_SPARC_SHA512
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
   588
#define	AV_SPARC_SHA1	0
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
   589
#define	AV_SPARC_SHA256	0
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
   590
#define	AV_SPARC_SHA512	0
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
   591
#endif	/* !OPENSSL_NO_SHA */
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
   592
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
   593
#define	DIGEST_MASK	(AV_SPARC_MD5 | AV_SPARC_SHA1 | AV_SPARC_SHA256 | \
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   594
	AV_SPARC_SHA512)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   595
	uint_t		ui;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   596
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   597
	(void) getisax(&ui, 1);
682
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   598
	*aes_present = ((ui & AV_SPARC_AES) != 0);
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   599
	*des_present = ((ui & AV_SPARC_DES) != 0);
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   600
	*digest_present = ((ui & DIGEST_MASK) == DIGEST_MASK);
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
   601
	*montmul_present = ((ui & AV_SPARC_MONT) != 0);
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   602
}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   603
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   604
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   605
#ifndef	SOLARIS_NO_AES_CTR
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   606
/* Create a new NID when we have no OID for that mechanism */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   607
static int
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   608
t4_add_NID(char *sn, char *ln)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   609
{
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   610
	ASN1_OBJECT	*o;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   611
	int		nid;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   612
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   613
	if ((o = ASN1_OBJECT_create(OBJ_new_nid(1), (unsigned char *)"",
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   614
	    1, sn, ln)) == NULL) {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   615
		T4err(T4_F_ADD_NID, T4_R_ASN1_OBJECT_CREATE);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   616
		return (0);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   617
	}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   618
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   619
	/* Will return NID_undef on error */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   620
	nid = OBJ_add_object(o);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   621
	ASN1_OBJECT_free(o);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   622
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   623
	return (nid);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   624
}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   625
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   626
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   627
/*
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   628
 * Create new NIDs for AES counter mode.
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   629
 * OpenSSL doesn't support them now so we have to help ourselves here.
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   630
 */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   631
static int
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   632
t4_add_aes_ctr_NIDs(void)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   633
{
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   634
	/* Are we already set? */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   635
	if (NID_t4_aes_256_ctr != NID_undef)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   636
		return (1);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   637
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   638
	/*
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   639
	 * There are no official names for AES counter modes yet so we just
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   640
	 * follow the format of those that exist.
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   641
	 */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   642
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   643
	/* Initialize NID_t4_aes_*_ctr and t4_cipher_table[] variables */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   644
	if ((NID_t4_aes_128_ctr = t4_add_NID("AES-128-CTR", "aes-128-ctr")) ==
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   645
	    NID_undef)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   646
		return (0);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   647
	t4_cipher_table[T4_AES_128_CTR].nid =
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   648
	    t4_aes_128_ctr.nid = NID_t4_aes_128_ctr;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   649
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   650
	if ((NID_t4_aes_192_ctr = t4_add_NID("AES-192-CTR", "aes-192-ctr")) ==
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   651
	    NID_undef)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   652
		return (0);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   653
	t4_cipher_table[T4_AES_192_CTR].nid =
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   654
	    t4_aes_192_ctr.nid = NID_t4_aes_192_ctr;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   655
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   656
	if ((NID_t4_aes_256_ctr = t4_add_NID("AES-256-CTR", "aes-256-ctr")) ==
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   657
	    NID_undef)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   658
		return (0);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   659
	t4_cipher_table[T4_AES_256_CTR].nid =
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   660
	    t4_aes_256_ctr.nid = NID_t4_aes_256_ctr;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   661
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   662
	/* Initialize t4_cipher_nids[] */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   663
	for (int i = 0; i < t4_cipher_count; ++i) {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   664
		if (t4_cipher_nids[i] == NID_undef) { /* found */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   665
			t4_cipher_nids[i] = NID_t4_aes_128_ctr;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   666
			t4_cipher_nids[++i] = NID_t4_aes_192_ctr;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   667
			t4_cipher_nids[++i] = NID_t4_aes_256_ctr;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   668
			break;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   669
		}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   670
	}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   671
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   672
	return (1);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   673
}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   674
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   675
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   676
static void
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   677
t4_free_aes_ctr_NIDs(void)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   678
{
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   679
	ASN1_OBJECT *o = NULL;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   680
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   681
	/* Clear entries in t4_cipher_nids[] */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   682
	for (int i = 0; i < t4_cipher_count; ++i) {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   683
		if (t4_cipher_nids[i] == NID_t4_aes_128_ctr) {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   684
			t4_cipher_nids[i] = NID_undef;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   685
		} else if (t4_cipher_nids[i] == NID_t4_aes_192_ctr) {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   686
			t4_cipher_nids[i] = NID_undef;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   687
		} else if (t4_cipher_nids[i] == NID_t4_aes_256_ctr) {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   688
			t4_cipher_nids[i] = NID_undef;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   689
		}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   690
	}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   691
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   692
	/* Clear NID_t4_aes_*_ctr and t4_cipher_table[] variables */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   693
	if (NID_t4_aes_128_ctr != NID_undef) {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   694
		o = OBJ_nid2obj(NID_t4_aes_128_ctr);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   695
		if (o != NULL)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   696
			ASN1_OBJECT_free(o);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   697
		NID_t4_aes_128_ctr = NID_undef;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   698
		t4_cipher_table[T4_AES_128_CTR].nid =
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   699
		    t4_aes_128_ctr.nid = NID_undef;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   700
	}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   701
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   702
	if (NID_t4_aes_192_ctr != NID_undef) {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   703
		o = OBJ_nid2obj(NID_t4_aes_192_ctr);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   704
		if (o != NULL)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   705
			ASN1_OBJECT_free(o);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   706
		NID_t4_aes_192_ctr = NID_undef;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   707
		t4_cipher_table[T4_AES_192_CTR].nid =
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   708
		    t4_aes_192_ctr.nid = NID_undef;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   709
	}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   710
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   711
	if (NID_t4_aes_256_ctr != NID_undef) {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   712
		o = OBJ_nid2obj(NID_t4_aes_256_ctr);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   713
		if (o != NULL)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   714
		ASN1_OBJECT_free(o);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   715
		NID_t4_aes_256_ctr = NID_undef;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   716
		t4_cipher_table[T4_AES_256_CTR].nid =
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   717
		    t4_aes_256_ctr.nid = NID_undef;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   718
	}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   719
}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   720
#endif	/* !SOLARIS_NO_AES_CTR */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   721
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   722
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   723
/*
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   724
 * Cipher functions
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   725
 */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   726
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   727
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   728
/*
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   729
 * Registered by the ENGINE with ENGINE_set_ciphers().
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   730
 * Finds out how to deal with a particular cipher NID in the ENGINE.
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   731
 */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   732
/* ARGSUSED */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   733
static int
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   734
t4_get_all_ciphers(ENGINE *e, const EVP_CIPHER **cipher,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   735
    const int **nids, int nid)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   736
{
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   737
	if (cipher == NULL) { /* return a list of all supported ciphers */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   738
		*nids = (t4_cipher_count > 0) ? t4_cipher_nids : NULL;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   739
		return (t4_cipher_count);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   740
	}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   741
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   742
	switch (nid) {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   743
	case NID_aes_128_cbc:
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   744
		*cipher = &t4_aes_128_cbc;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   745
		break;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   746
	case NID_aes_192_cbc:
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   747
		*cipher = &t4_aes_192_cbc;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   748
		break;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   749
	case NID_aes_256_cbc:
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   750
		*cipher = &t4_aes_256_cbc;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   751
		break;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   752
	case NID_aes_128_ecb:
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   753
		*cipher = &t4_aes_128_ecb;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   754
		break;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   755
	case NID_aes_192_ecb:
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   756
		*cipher = &t4_aes_192_ecb;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   757
		break;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   758
	case NID_aes_256_ecb:
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   759
		*cipher = &t4_aes_256_ecb;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   760
		break;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   761
#ifndef	SOLARIS_NO_AES_CFB128
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   762
	case NID_aes_128_cfb128:
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   763
		*cipher = &t4_aes_128_cfb128;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   764
		break;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   765
	case NID_aes_192_cfb128:
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   766
		*cipher = &t4_aes_192_cfb128;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   767
		break;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   768
	case NID_aes_256_cfb128:
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   769
		*cipher = &t4_aes_256_cfb128;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   770
		break;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   771
#endif	/* !SOLARIS_NO_AES_CFB128 */
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
   772
#ifndef	OPENSSL_NO_DES
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
   773
	case NID_des_cbc:
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
   774
		*cipher = &t4_des_cbc;
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
   775
		break;
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
   776
	case NID_des_ede3_cbc:
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
   777
		*cipher = &t4_des3_cbc;
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
   778
		break;
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
   779
	case NID_des_ecb:
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
   780
		*cipher = &t4_des_ecb;
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
   781
		break;
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
   782
	case NID_des_ede3_ecb:
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
   783
		*cipher = &t4_des3_ecb;
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
   784
		break;
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
   785
#endif	/* !OPENSSL_NO_DES */
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   786
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   787
	default:
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   788
#ifndef	SOLARIS_NO_AES_CTR
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   789
		/* These NIDs cannot be const, so must be tested with "if" */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   790
		if (nid == NID_t4_aes_128_ctr) {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   791
			*cipher = &t4_aes_128_ctr;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   792
			break;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   793
		} else if (nid == NID_t4_aes_192_ctr) {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   794
			*cipher = &t4_aes_192_ctr;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   795
			break;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   796
		} else if (nid == NID_t4_aes_256_ctr) {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   797
			*cipher = &t4_aes_256_ctr;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   798
			break;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   799
		} else
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   800
#endif	/* !SOLARIS_NO_AES_CTR */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   801
		{
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   802
			/* cipher not supported */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   803
			*cipher = NULL;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   804
			return (0);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   805
		}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   806
	}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   807
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   808
	return (1);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   809
}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   810
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   811
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   812
/* Called by t4_cipher_init_aes() */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   813
static t4_cipher_id
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   814
get_cipher_index_by_nid(int nid)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   815
{
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   816
	t4_cipher_id i;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   817
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   818
	for (i = (t4_cipher_id)0; i < T4_CIPHER_MAX; ++i)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   819
		if (t4_cipher_table[i].nid == nid)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   820
			return (i);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   821
	return (T4_CIPHER_MAX);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   822
}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   823
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   824
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   825
/* ARGSUSED2 */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   826
static int
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   827
t4_cipher_init_aes(EVP_CIPHER_CTX *ctx, const unsigned char *key,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   828
    const unsigned char *iv, int enc)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   829
{
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   830
	t4_cipher_ctx_t	*tctx = ctx->cipher_data;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   831
	uint64_t	*t4_ks = tctx->t4_ks;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   832
	t4_cipher_t	*t4_cipher;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   833
	t4_cipher_id	index;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   834
	int		key_len = ctx->key_len;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   835
	uint64_t	aligned_key_buffer[4]; /* 16, 24, or 32 bytes long */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   836
	uint64_t	*aligned_key;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   837
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   838
	if (key == NULL) {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   839
		T4err(T4_F_CIPHER_INIT_AES, T4_R_CIPHER_KEY);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   840
		return (0);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   841
	}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   842
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   843
	/* Get the cipher entry index in t4_cipher_table from nid */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   844
	index = get_cipher_index_by_nid(ctx->cipher->nid);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   845
	if (index >= T4_CIPHER_MAX) {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   846
		T4err(T4_F_CIPHER_INIT_AES, T4_R_CIPHER_NID);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   847
		return (0); /* Error */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   848
	}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   849
	t4_cipher = &t4_cipher_table[index];
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   850
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   851
	/* Check key size and iv size */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   852
	if (ctx->cipher->iv_len < t4_cipher->iv_len) {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   853
		T4err(T4_F_CIPHER_INIT_AES, T4_R_IV_LEN_INCORRECT);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   854
		return (0); /* Error */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   855
	}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   856
	if ((key_len < t4_cipher->min_key_len) ||
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   857
	    (key_len > t4_cipher->max_key_len)) {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   858
		T4err(T4_F_CIPHER_INIT_AES, T4_R_KEY_LEN_INCORRECT);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   859
		return (0); /* Error */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   860
	}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   861
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   862
	/* Set cipher flags, if any */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   863
	ctx->flags |= t4_cipher->flags;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   864
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   865
	/* Align the key */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   866
	if (((unsigned long)key & 0x7) == 0) /* already aligned */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   867
		aligned_key = (uint64_t *)key;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   868
	else { /* key is not 8-byte aligned */
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
   869
#ifdef	DEBUG_T4
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   870
		(void) fprintf(stderr, "T4: key is not 8 byte aligned\n");
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   871
#endif
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   872
		(void) memcpy(aligned_key_buffer, key, key_len);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   873
		aligned_key = aligned_key_buffer;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   874
	}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   875
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   876
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   877
	/*
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   878
	 * Expand the key schedule.
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   879
	 * Copy original key to start of t4_ks key schedule. Note that the
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   880
	 * encryption and decryption key schedule are the same for T4.
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   881
	 */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   882
	switch (key_len) {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   883
		case 16:
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   884
			t4_aes_expand128(&t4_ks[2],
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   885
			    (const uint32_t *)aligned_key);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   886
			t4_ks[0] = aligned_key[0];
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   887
			t4_ks[1] = aligned_key[1];
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   888
			break;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   889
		case 24:
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   890
			t4_aes_expand192(&t4_ks[3],
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   891
			    (const uint32_t *)aligned_key);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   892
			t4_ks[0] = aligned_key[0];
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   893
			t4_ks[1] = aligned_key[1];
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   894
			t4_ks[2] = aligned_key[2];
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   895
			break;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   896
		case 32:
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   897
			t4_aes_expand256(&t4_ks[4],
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   898
			    (const uint32_t *)aligned_key);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   899
			t4_ks[0] = aligned_key[0];
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   900
			t4_ks[1] = aligned_key[1];
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   901
			t4_ks[2] = aligned_key[2];
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   902
			t4_ks[3] = aligned_key[3];
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   903
			break;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   904
		default:
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   905
			T4err(T4_F_CIPHER_INIT_AES, T4_R_CIPHER_KEY);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   906
			return (0);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   907
	}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   908
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   909
	/* Save index to cipher */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   910
	tctx->index = index;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   911
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
   912
	/* Align IV, if needed */
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   913
	if (t4_cipher->iv_len <= 0) { /* no IV (such as with ECB mode) */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   914
		tctx->iv = NULL;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   915
	} else if (((unsigned long)ctx->iv & 0x7) == 0) { /* already aligned */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   916
		tctx->iv = (uint64_t *)ctx->iv;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   917
	} else {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   918
		/* IV is not 8 byte aligned */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   919
		(void) memcpy(tctx->aligned_iv_buffer, ctx->iv,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   920
		    ctx->cipher->iv_len);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   921
		tctx->iv = tctx->aligned_iv_buffer;
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
   922
#ifdef	DEBUG_T4
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   923
		(void) fprintf(stderr,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   924
		    "t4_cipher_init_aes: IV is not 8 byte aligned\n");
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   925
		(void) fprintf(stderr,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   926
		    "t4_cipher_init_aes: ctx->cipher->iv_len =%d\n",
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   927
		    ctx->cipher->iv_len);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   928
		(void) fprintf(stderr, "t4_cipher_init_aes: after "
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   929
		    "re-alignment, tctx->iv = %p\n", (void *)tctx->iv);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   930
#endif	/* DEBUG_T4 */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   931
	}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   932
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   933
	return (1);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   934
}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   935
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   936
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   937
/*
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   938
 * ENCRYPT_UPDATE or DECRYPT_UPDATE
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   939
 */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   940
#define	T4_CIPHER_DO_AES(t4_cipher_do_aes, t4_aes_load_keys_for_encrypt, \
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   941
    t4_aes_encrypt, t4_aes_load_keys_for_decrypt, t4_aes_decrypt, iv)	\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   942
static int								\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   943
t4_cipher_do_aes(EVP_CIPHER_CTX *ctx, unsigned char *out,		\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   944
    const unsigned char *in, size_t inl)				\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   945
{									\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   946
	t4_cipher_ctx_t	*tctx = ctx->cipher_data;			\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   947
	uint64_t	*t4_ks = tctx->t4_ks;				\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   948
	unsigned long	outl = inl;					\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   949
	unsigned char	*bufin_alloc = NULL, *bufout_alloc = NULL;	\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   950
	unsigned char	*bufin, *bufout;				\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   951
									\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   952
	/* "in" and "out" must be 8 byte aligned */			\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   953
	if (((unsigned long)in & 0x7) == 0) { /* already aligned */	\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   954
		bufin = (unsigned char *)in;				\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   955
	} else { /* "in" is not 8 byte aligned */			\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   956
		if (((unsigned long)out & 0x7) == 0) { /* aligned */	\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   957
			/* use output buffer for input */		\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   958
			bufin = out;					\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   959
		} else {						\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   960
			bufin = bufin_alloc = OPENSSL_malloc(inl);	\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   961
			if (bufin_alloc == NULL)			\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   962
				return (0); /* error */			\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   963
		}							\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   964
		(void) memcpy(bufin, in, inl);				\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   965
	}								\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   966
									\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   967
	if (((unsigned long)out & 0x7) == 0) { /* already aligned */	\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   968
		bufout = out;						\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   969
	} else { /* "out" is not 8 byte aligned */			\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   970
		if (bufin_alloc != NULL) {				\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   971
			/* use allocated input buffer for output */	\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   972
			bufout = bufin_alloc;				\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   973
		} else {						\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   974
			bufout = bufout_alloc = OPENSSL_malloc(outl);	\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   975
			if (bufout_alloc == NULL) {			\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   976
				OPENSSL_free(bufin_alloc);		\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   977
				return (0); /* error */			\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   978
			}						\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   979
		}							\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   980
	}								\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   981
									\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   982
	/* Data length must be an even multiple of block size. */	\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   983
	if ((inl & 0xf) != 0) {						\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   984
		OPENSSL_free(bufout_alloc);				\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   985
		OPENSSL_free(bufin_alloc);				\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   986
		T4err(T4_F_CIPHER_DO_AES, T4_R_NOT_BLOCKSIZE_LENGTH);	\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   987
		return (0);						\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   988
	}								\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   989
									\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   990
	if (ctx->encrypt) {						\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   991
		t4_aes_load_keys_for_encrypt(t4_ks);			\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   992
		t4_aes_encrypt(t4_ks, (uint64_t *)bufin,		\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   993
		    (uint64_t *)bufout, (size_t)inl, iv);		\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   994
	} else { /* decrypt */						\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   995
		t4_aes_load_keys_for_decrypt(t4_ks);			\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   996
		t4_aes_decrypt(t4_ks, (uint64_t *)bufin,		\
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
   997
		    (uint64_t *)bufout, (size_t)inl, iv);		\
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   998
	}								\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
   999
									\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1000
	/* Cleanup */							\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1001
	if (bufin_alloc != NULL) {					\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1002
		if (bufout == bufin_alloc)				\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1003
			(void) memcpy(out, bufout, outl);		\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1004
		OPENSSL_free(bufin_alloc);				\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1005
	}								\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1006
	if (bufout_alloc != NULL) {					\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1007
		(void) memcpy(out, bufout_alloc, outl);			\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1008
		OPENSSL_free(bufout_alloc);				\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1009
	}								\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1010
									\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1011
	return (1);							\
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1012
}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1013
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1014
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1015
/* AES CBC mode. */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1016
T4_CIPHER_DO_AES(t4_cipher_do_aes_128_cbc,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1017
	t4_aes128_load_keys_for_encrypt, t4_aes128_cbc_encrypt,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1018
	t4_aes128_load_keys_for_decrypt, t4_aes128_cbc_decrypt, tctx->iv)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1019
T4_CIPHER_DO_AES(t4_cipher_do_aes_192_cbc,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1020
	t4_aes192_load_keys_for_encrypt, t4_aes192_cbc_encrypt,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1021
	t4_aes192_load_keys_for_decrypt, t4_aes192_cbc_decrypt, tctx->iv)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1022
T4_CIPHER_DO_AES(t4_cipher_do_aes_256_cbc,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1023
	t4_aes256_load_keys_for_encrypt, t4_aes256_cbc_encrypt,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1024
	t4_aes256_load_keys_for_decrypt, t4_aes256_cbc_decrypt, tctx->iv)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1025
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1026
/*
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1027
 * AES CFB128 mode.
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1028
 * CFB128 decrypt uses load_keys_for_encrypt() as the mode uses
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1029
 * the raw AES encrypt operation for the decryption, too.
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1030
 */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1031
#ifndef	SOLARIS_NO_AES_CFB128
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1032
T4_CIPHER_DO_AES(t4_cipher_do_aes_128_cfb128,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1033
	t4_aes128_load_keys_for_encrypt, t4_aes128_cfb128_encrypt,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1034
	t4_aes128_load_keys_for_encrypt, t4_aes128_cfb128_decrypt, tctx->iv)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1035
T4_CIPHER_DO_AES(t4_cipher_do_aes_192_cfb128,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1036
	t4_aes192_load_keys_for_encrypt, t4_aes192_cfb128_encrypt,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1037
	t4_aes192_load_keys_for_encrypt, t4_aes192_cfb128_decrypt, tctx->iv)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1038
T4_CIPHER_DO_AES(t4_cipher_do_aes_256_cfb128,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1039
	t4_aes256_load_keys_for_encrypt, t4_aes256_cfb128_encrypt,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1040
	t4_aes256_load_keys_for_encrypt, t4_aes256_cfb128_decrypt, tctx->iv)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1041
#endif	/* !SOLARIS_NO_AES_CFB128 */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1042
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1043
/* AES CTR mode. */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1044
#ifndef	SOLARIS_NO_AES_CTR
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1045
T4_CIPHER_DO_AES(t4_cipher_do_aes_128_ctr,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1046
	t4_aes128_load_keys_for_encrypt, t4_aes128_ctr_crypt,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1047
	t4_aes128_load_keys_for_decrypt, t4_aes128_ctr_crypt, tctx->iv)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1048
T4_CIPHER_DO_AES(t4_cipher_do_aes_192_ctr,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1049
	t4_aes192_load_keys_for_encrypt, t4_aes192_ctr_crypt,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1050
	t4_aes192_load_keys_for_decrypt, t4_aes192_ctr_crypt, tctx->iv)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1051
T4_CIPHER_DO_AES(t4_cipher_do_aes_256_ctr,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1052
	t4_aes256_load_keys_for_encrypt, t4_aes256_ctr_crypt,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1053
	t4_aes256_load_keys_for_decrypt, t4_aes256_ctr_crypt, tctx->iv)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1054
#endif	/* !SOLARIS_NO_AES_CTR */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1055
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1056
/* AES ECB mode. */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1057
T4_CIPHER_DO_AES(t4_cipher_do_aes_128_ecb,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1058
	t4_aes128_load_keys_for_encrypt, t4_aes128_ecb_encrypt,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1059
	t4_aes128_load_keys_for_decrypt, t4_aes128_ecb_decrypt, NULL)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1060
T4_CIPHER_DO_AES(t4_cipher_do_aes_192_ecb,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1061
	t4_aes192_load_keys_for_encrypt, t4_aes192_ecb_encrypt,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1062
	t4_aes192_load_keys_for_decrypt, t4_aes192_ecb_decrypt, NULL)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1063
T4_CIPHER_DO_AES(t4_cipher_do_aes_256_ecb,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1064
	t4_aes256_load_keys_for_encrypt, t4_aes256_ecb_encrypt,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1065
	t4_aes256_load_keys_for_decrypt, t4_aes256_ecb_decrypt, NULL)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1066
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1067
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1068
/*
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1069
 * Is the t4 engine available?
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1070
 * Passed to ENGINE_set_init_function().
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1071
 */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1072
/* ARGSUSED */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1073
static int
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1074
t4_init(ENGINE *e)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1075
{
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1076
	return (1);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1077
}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1078
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1079
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1080
/* Passed to ENGINE_set_destroy_function(). */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1081
/* ARGSUSED */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1082
static int
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1083
t4_destroy(ENGINE *e)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1084
{
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1085
	T4_FREE_AES_CTR_NIDS;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1086
	ERR_unload_t4_strings();
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1087
	return (1);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1088
}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1089
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1090
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1091
/*
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1092
 * Called by t4_bind_helper().
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1093
 * 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
  1094
 */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1095
/* ARGSUSED */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1096
static int
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1097
t4_bind(ENGINE *e)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1098
{
682
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
  1099
	_Bool aes_engage, digest_engage, des_engage, montmul_engage;
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1100
682
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
  1101
	t4_instructions_present(&aes_engage, &des_engage, &digest_engage,
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
  1102
	    &montmul_engage);
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
  1103
#ifdef	DEBUG_T4
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
  1104
	(void) fprintf(stderr,
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
  1105
	    "t4_bind: engage aes=%d, des=%d, digest=%d\n",
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
  1106
	    aes_engage, des_engage, digest_engage);
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
  1107
#endif
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
  1108
#ifndef	OPENSSL_NO_DES
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
  1109
	if (!des_engage) { /* Remove DES ciphers from list */
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
  1110
		t4_cipher_count -= t4_des_cipher_count;
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1111
	}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1112
#endif
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1113
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
  1114
#ifndef	SOLARIS_NO_AES_CTR
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1115
	/*
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1116
	 * We must do this before we start working with slots since we need all
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1117
	 * NIDs there.
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1118
	 */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1119
	if (aes_engage) {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1120
		if (t4_add_aes_ctr_NIDs() == 0) {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1121
			T4_FREE_AES_CTR_NIDS;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1122
			return (0);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1123
		}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1124
	}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1125
#endif	/* !SOLARIS_NO_AES_CTR */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1126
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
  1127
#ifdef	DEBUG_T4
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1128
	(void) fprintf(stderr, "t4_cipher_count = %d; t4_cipher_nids[] =\n",
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1129
	    t4_cipher_count);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1130
	for (int i = 0; i < t4_cipher_count; ++i) {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1131
		(void) fprintf(stderr, " %d", t4_cipher_nids[i]);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1132
	}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1133
	(void) fprintf(stderr, "\n");
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1134
#endif	/* DEBUG_T4 */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1135
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1136
	/* Register T4 engine ID, name, and functions */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1137
	if (!ENGINE_set_id(e, ENGINE_T4_ID) ||
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1138
	    !ENGINE_set_name(e,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1139
	    aes_engage ? ENGINE_T4_NAME: ENGINE_NO_T4_NAME) ||
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1140
	    !ENGINE_set_init_function(e, t4_init) ||
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1141
	    (aes_engage && !ENGINE_set_ciphers(e, t4_get_all_ciphers)) ||
580
abb7ba207fc9 7101906 Need to add the digest support back to the OpenSSL T4 engine
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 537
diff changeset
  1142
	    (digest_engage && !ENGINE_set_digests(e, t4_get_all_digests)) ||
682
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
  1143
#ifndef OPENSSL_NO_RSA
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
  1144
	    (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
  1145
#endif	/* OPENSSL_NO_RSA */
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
  1146
#ifndef OPENSSL_NO_DH
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
  1147
	    (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
  1148
#endif	/* OPENSSL_NO_DH */
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
  1149
#ifndef OPENSSL_NO_DSA
c6e4f94fd35d 7116525 OpenSSL t4 engine improvements: montgomery multiply
Ferenc Rakoczi <Ferenc.Rakoczi@Sun.COM>
parents: 603
diff changeset
  1150
	    (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
  1151
#endif	/* OPENSSL_NO_DSA */
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1152
	    !ENGINE_set_destroy_function(e, t4_destroy)) {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1153
		T4_FREE_AES_CTR_NIDS;
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1154
		return (0);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1155
	}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1156
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1157
	return (1);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1158
}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1159
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1160
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1161
/*
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1162
 * Called by ENGINE_load_t4().
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1163
 * 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
  1164
 */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1165
static int
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1166
t4_bind_helper(ENGINE *e, const char *id)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1167
{
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1168
	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
  1169
		(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
  1170
		return (0);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1171
	}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1172
	if (!t4_bind(e)) {
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1173
		(void) fprintf(stderr,
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1174
		    "T4: failed to bind t4 engine\n");
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1175
		return (0);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1176
	}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1177
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1178
	return (1);
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1179
}
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1180
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1181
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
  1182
#ifdef	DYNAMIC_ENGINE
426
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1183
IMPLEMENT_DYNAMIC_CHECK_FN()
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1184
IMPLEMENT_DYNAMIC_BIND_FN(t4_bind_helper)
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1185
#endif	/* DYNAMIC_ENGINE */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1186
#endif	/* COMPILE_HW_T4 */
8c675b553a27 7048212 T4 engine needed for openssl
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
  1187
#endif	/* !OPENSSL_NO_HW && !OPENSSL_NO_HW_AES_T4 && !OPENSSL_NO_AES */