nativeFunc.h revision 14434:9db62c197dcd
1/*
2 * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.  Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26#ifndef SPARCT4_NATIVE_FUNC_H
27#define SPARCT4_NATIVE_FUNC_H
28#include <md5.h>
29#include <sha1.h>
30#include <sha2.h>
31#include <libsoftcrypto.h>
32
33jboolean* loadNative();
34
35/* function pointer definitions */
36
37typedef void (*MD5INIT_FN_PTR)(MD5_CTX *context);
38
39typedef void (*MD5UPDATE_FN_PTR)
40     (MD5_CTX *context, unsigned char *input,
41      unsigned int inlen);
42
43typedef void (*MD5FINAL_FN_PTR)
44     (unsigned char *output, MD5_CTX *context);
45
46typedef void (*SHA1INIT_FN_PTR)(SHA1_CTX *context);
47
48typedef void (*SHA1UPDATE_FN_PTR)
49     (SHA1_CTX *context, unsigned char *input,
50      unsigned int inlen);
51
52typedef void (*SHA1FINAL_FN_PTR)
53     (unsigned char *output, SHA1_CTX *context);
54
55typedef void (*SHA2INIT_FN_PTR)(uint64_t mech, SHA2_CTX *context);
56
57typedef void (*SHA2UPDATE_FN_PTR)
58     (SHA2_CTX *context, unsigned char *input,
59      unsigned int inlen);
60
61typedef void (*SHA2FINAL_FN_PTR)
62     (unsigned char *output, SHA2_CTX *context);
63
64typedef int (*UCRYPTO_VERSION_FN_PTR)();
65
66typedef int (*UCRYPTO_GET_MECHLIST_FN_PTR)(char *str);
67
68typedef int (*UCRYPTO_ENCRYPT_INIT_FN_PTR)
69     (crypto_ctx_t *context, ucrypto_mech_t mech_type,
70      uchar_t *key_str, size_t key_len,
71      void *iv, size_t iv_len);
72typedef int (*UCRYPTO_ENCRYPT_UPDATE_FN_PTR)
73     (crypto_ctx_t *context, uchar_t *in,
74      size_t in_len, uchar_t *out, size_t *out_len);
75typedef int (*UCRYPTO_ENCRYPT_FINAL_FN_PTR)
76     (crypto_ctx_t *context, uchar_t *out,
77      size_t *out_len);
78typedef int (*UCRYPTO_ENCRYPT_FN_PTR)
79     (ucrypto_mech_t mech_type, uchar_t *key_str,
80      size_t key_len, void *iv, size_t iv_len, uchar_t *in,
81      size_t in_len, uchar_t *out, size_t *out_len);
82
83typedef int (*UCRYPTO_DECRYPT_INIT_FN_PTR)
84     (crypto_ctx_t *context,
85      ucrypto_mech_t mech_type, uchar_t *key_str, size_t key_len,
86      void *iv, size_t iv_len);
87typedef int (*UCRYPTO_DECRYPT_UPDATE_FN_PTR)
88     (crypto_ctx_t *context, uchar_t *in,
89      size_t in_len, uchar_t *out, size_t *out_len);
90typedef int (*UCRYPTO_DECRYPT_FINAL_FN_PTR)
91     (crypto_ctx_t *context, uchar_t *out,
92      size_t *out_len);
93typedef int (*UCRYPTO_DECRYPT_FN_PTR)
94     (ucrypto_mech_t mech_type, uchar_t *key_str,
95      size_t key_len, void *iv, size_t iv_len, uchar_t *in,
96      size_t in_len, uchar_t *out, size_t *out_len);
97
98typedef int (*UCRYPTO_SIGN_INIT_FN_PTR)
99     (crypto_ctx_t *context, ucrypto_mech_t mech_type,
100      uchar_t *key_str, size_t key_len,
101      void *iv, size_t iv_len);
102typedef int (*UCRYPTO_SIGN_UPDATE_FN_PTR)
103     (crypto_ctx_t *context, uchar_t *data_str, size_t data_len);
104typedef int (*UCRYPTO_SIGN_FINAL_FN_PTR)
105     (crypto_ctx_t *context, uchar_t *sig_str, size_t *sig_len);
106
107typedef int (*UCRYPTO_VERIFY_INIT_FN_PTR)
108     (crypto_ctx_t *context, ucrypto_mech_t mech_type,
109      uchar_t *key_str, size_t key_len,
110      void *iv, size_t iv_len);
111typedef int (*UCRYPTO_VERIFY_UPDATE_FN_PTR)
112     (crypto_ctx_t *context, uchar_t *data_str, size_t data_len);
113typedef int (*UCRYPTO_VERIFY_FINAL_FN_PTR)
114     (crypto_ctx_t *context, uchar_t *sig_str, size_t *sig_len);
115
116typedef int (*UCRYPTO_DIGEST_INIT_FN_PTR)
117     (crypto_ctx_t *context, ucrypto_mech_t mech_type,
118      void *param, size_t param_len);
119typedef int (*UCRYPTO_DIGEST_UPDATE_FN_PTR)
120     (crypto_ctx_t *context, const uchar_t *data, size_t data_len);
121typedef int (*UCRYPTO_DIGEST_FINAL_FN_PTR)
122     (crypto_ctx_t *context, uchar_t *digest, size_t *digest_len);
123
124typedef void (*UCRYPTO_FREE_CONTEXT_FN_PTR)
125     (crypto_ctx_t *context);
126
127typedef char* (*UCRYPTO_STRERROR_FN_PTR)(int rv);
128
129
130
131/* dynamically resolved functions from libmd, and libsoftcrypto
132   libraries */
133typedef struct T4CRYPTO_FUNCTION_TABLE {
134  MD5INIT_FN_PTR                 md5Init;
135  MD5UPDATE_FN_PTR               md5Update;
136  MD5FINAL_FN_PTR                md5Final;
137  SHA1INIT_FN_PTR                sha1Init;
138  SHA1UPDATE_FN_PTR              sha1Update;
139  SHA1FINAL_FN_PTR               sha1Final;
140  SHA2INIT_FN_PTR                sha2Init;
141  SHA2UPDATE_FN_PTR              sha2Update;
142  SHA2FINAL_FN_PTR               sha2Final;
143  UCRYPTO_VERSION_FN_PTR         ucryptoVersion;
144  UCRYPTO_GET_MECHLIST_FN_PTR    ucryptoGetMechList;
145  UCRYPTO_ENCRYPT_INIT_FN_PTR    ucryptoEncryptInit;
146  UCRYPTO_ENCRYPT_UPDATE_FN_PTR  ucryptoEncryptUpdate;
147  UCRYPTO_ENCRYPT_FINAL_FN_PTR   ucryptoEncryptFinal;
148  UCRYPTO_ENCRYPT_FN_PTR         ucryptoEncrypt;
149  UCRYPTO_DECRYPT_INIT_FN_PTR    ucryptoDecryptInit;
150  UCRYPTO_DECRYPT_UPDATE_FN_PTR  ucryptoDecryptUpdate;
151  UCRYPTO_DECRYPT_FINAL_FN_PTR   ucryptoDecryptFinal;
152  UCRYPTO_DECRYPT_FN_PTR         ucryptoDecrypt;
153  UCRYPTO_SIGN_INIT_FN_PTR       ucryptoSignInit;
154  UCRYPTO_SIGN_UPDATE_FN_PTR     ucryptoSignUpdate;
155  UCRYPTO_SIGN_FINAL_FN_PTR      ucryptoSignFinal;
156  UCRYPTO_VERIFY_INIT_FN_PTR     ucryptoVerifyInit;
157  UCRYPTO_VERIFY_UPDATE_FN_PTR   ucryptoVerifyUpdate;
158  UCRYPTO_VERIFY_FINAL_FN_PTR    ucryptoVerifyFinal;
159  UCRYPTO_DIGEST_INIT_FN_PTR     ucryptoDigestInit;
160  UCRYPTO_DIGEST_UPDATE_FN_PTR   ucryptoDigestUpdate;
161  UCRYPTO_DIGEST_FINAL_FN_PTR    ucryptoDigestFinal;
162  UCRYPTO_FREE_CONTEXT_FN_PTR    ucryptoFreeContext;
163  UCRYPTO_STRERROR_FN_PTR        ucryptoStrerror;
164} T4CRYPTO_FUNCTION_TABLE;
165
166typedef T4CRYPTO_FUNCTION_TABLE *T4CRYPTO_FUNCTION_TABLE_PTR;
167
168/* global function table */
169T4CRYPTO_FUNCTION_TABLE_PTR ftab;
170
171#endif
172