src/jdk.crypto.ucrypto/solaris/native/libj2ucrypto/nativeFunc.h
author rhalade
Mon, 16 Jul 2018 08:59:39 -0700
changeset 51098 9bad3472ee2c
parent 47216 71c04702a3d5
permissions -rw-r--r--
8207321: Merge error with 8199779 Reviewed-by: mullan

/*
 * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Oracle designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Oracle in the LICENSE file that accompanied this code.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

#ifndef SPARCT4_NATIVE_FUNC_H
#define SPARCT4_NATIVE_FUNC_H
#include <md5.h>
#include <sha1.h>
#include <sha2.h>
#include <libsoftcrypto.h> // redirects to libucrypto.h starting 11.3

jboolean* loadNative();

/* function pointer definitions */

typedef void (*MD5INIT_FN_PTR)(MD5_CTX *context);

typedef void (*MD5UPDATE_FN_PTR)
     (MD5_CTX *context, unsigned char *input,
      unsigned int inlen);

typedef void (*MD5FINAL_FN_PTR)
     (unsigned char *output, MD5_CTX *context);

typedef void (*SHA1INIT_FN_PTR)(SHA1_CTX *context);

typedef void (*SHA1UPDATE_FN_PTR)
     (SHA1_CTX *context, unsigned char *input,
      unsigned int inlen);

typedef void (*SHA1FINAL_FN_PTR)
     (unsigned char *output, SHA1_CTX *context);

typedef void (*SHA2INIT_FN_PTR)(uint64_t mech, SHA2_CTX *context);

typedef void (*SHA2UPDATE_FN_PTR)
     (SHA2_CTX *context, unsigned char *input,
      unsigned int inlen);

typedef void (*SHA2FINAL_FN_PTR)
     (unsigned char *output, SHA2_CTX *context);

typedef int (*UCRYPTO_VERSION_FN_PTR)();

typedef int (*UCRYPTO_GET_MECHLIST_FN_PTR)(char *str);

typedef int (*UCRYPTO_ENCRYPT_INIT_FN_PTR)
     (crypto_ctx_t *context, ucrypto_mech_t mech_type,
      uchar_t *key_str, size_t key_len,
      void *iv, size_t iv_len);
typedef int (*UCRYPTO_ENCRYPT_UPDATE_FN_PTR)
     (crypto_ctx_t *context, uchar_t *in,
      size_t in_len, uchar_t *out, size_t *out_len);
typedef int (*UCRYPTO_ENCRYPT_FINAL_FN_PTR)
     (crypto_ctx_t *context, uchar_t *out,
      size_t *out_len);
typedef int (*UCRYPTO_ENCRYPT_FN_PTR)
     (ucrypto_mech_t mech_type, uchar_t *key_str,
      size_t key_len, void *iv, size_t iv_len, uchar_t *in,
      size_t in_len, uchar_t *out, size_t *out_len);

typedef int (*UCRYPTO_DECRYPT_INIT_FN_PTR)
     (crypto_ctx_t *context,
      ucrypto_mech_t mech_type, uchar_t *key_str, size_t key_len,
      void *iv, size_t iv_len);
typedef int (*UCRYPTO_DECRYPT_UPDATE_FN_PTR)
     (crypto_ctx_t *context, uchar_t *in,
      size_t in_len, uchar_t *out, size_t *out_len);
typedef int (*UCRYPTO_DECRYPT_FINAL_FN_PTR)
     (crypto_ctx_t *context, uchar_t *out,
      size_t *out_len);
typedef int (*UCRYPTO_DECRYPT_FN_PTR)
     (ucrypto_mech_t mech_type, uchar_t *key_str,
      size_t key_len, void *iv, size_t iv_len, uchar_t *in,
      size_t in_len, uchar_t *out, size_t *out_len);

typedef int (*UCRYPTO_SIGN_INIT_FN_PTR)
     (crypto_ctx_t *context, ucrypto_mech_t mech_type,
      uchar_t *key_str, size_t key_len,
      void *iv, size_t iv_len);
typedef int (*UCRYPTO_SIGN_UPDATE_FN_PTR)
     (crypto_ctx_t *context, uchar_t *data_str, size_t data_len);
typedef int (*UCRYPTO_SIGN_FINAL_FN_PTR)
     (crypto_ctx_t *context, uchar_t *sig_str, size_t *sig_len);

typedef int (*UCRYPTO_VERIFY_INIT_FN_PTR)
     (crypto_ctx_t *context, ucrypto_mech_t mech_type,
      uchar_t *key_str, size_t key_len,
      void *iv, size_t iv_len);
typedef int (*UCRYPTO_VERIFY_UPDATE_FN_PTR)
     (crypto_ctx_t *context, uchar_t *data_str, size_t data_len);
typedef int (*UCRYPTO_VERIFY_FINAL_FN_PTR)
     (crypto_ctx_t *context, uchar_t *sig_str, size_t *sig_len);

typedef int (*UCRYPTO_DIGEST_INIT_FN_PTR)
     (crypto_ctx_t *context, ucrypto_mech_t mech_type,
      void *param, size_t param_len);
typedef int (*UCRYPTO_DIGEST_UPDATE_FN_PTR)
     (crypto_ctx_t *context, const uchar_t *data, size_t data_len);
typedef int (*UCRYPTO_DIGEST_FINAL_FN_PTR)
     (crypto_ctx_t *context, uchar_t *digest, size_t *digest_len);

typedef void (*UCRYPTO_FREE_CONTEXT_FN_PTR)
     (crypto_ctx_t *context);

typedef char* (*UCRYPTO_STRERROR_FN_PTR)(int rv);



/* dynamically resolved functions from libmd, and libsoftcrypto
   libraries */
typedef struct T4CRYPTO_FUNCTION_TABLE {
  MD5INIT_FN_PTR                 md5Init;
  MD5UPDATE_FN_PTR               md5Update;
  MD5FINAL_FN_PTR                md5Final;
  SHA1INIT_FN_PTR                sha1Init;
  SHA1UPDATE_FN_PTR              sha1Update;
  SHA1FINAL_FN_PTR               sha1Final;
  SHA2INIT_FN_PTR                sha2Init;
  SHA2UPDATE_FN_PTR              sha2Update;
  SHA2FINAL_FN_PTR               sha2Final;
  UCRYPTO_VERSION_FN_PTR         ucryptoVersion;
  UCRYPTO_GET_MECHLIST_FN_PTR    ucryptoGetMechList;
  UCRYPTO_ENCRYPT_INIT_FN_PTR    ucryptoEncryptInit;
  UCRYPTO_ENCRYPT_UPDATE_FN_PTR  ucryptoEncryptUpdate;
  UCRYPTO_ENCRYPT_FINAL_FN_PTR   ucryptoEncryptFinal;
  UCRYPTO_ENCRYPT_FN_PTR         ucryptoEncrypt;
  UCRYPTO_DECRYPT_INIT_FN_PTR    ucryptoDecryptInit;
  UCRYPTO_DECRYPT_UPDATE_FN_PTR  ucryptoDecryptUpdate;
  UCRYPTO_DECRYPT_FINAL_FN_PTR   ucryptoDecryptFinal;
  UCRYPTO_DECRYPT_FN_PTR         ucryptoDecrypt;
  UCRYPTO_SIGN_INIT_FN_PTR       ucryptoSignInit;
  UCRYPTO_SIGN_UPDATE_FN_PTR     ucryptoSignUpdate;
  UCRYPTO_SIGN_FINAL_FN_PTR      ucryptoSignFinal;
  UCRYPTO_VERIFY_INIT_FN_PTR     ucryptoVerifyInit;
  UCRYPTO_VERIFY_UPDATE_FN_PTR   ucryptoVerifyUpdate;
  UCRYPTO_VERIFY_FINAL_FN_PTR    ucryptoVerifyFinal;
  UCRYPTO_DIGEST_INIT_FN_PTR     ucryptoDigestInit;
  UCRYPTO_DIGEST_UPDATE_FN_PTR   ucryptoDigestUpdate;
  UCRYPTO_DIGEST_FINAL_FN_PTR    ucryptoDigestFinal;
  UCRYPTO_FREE_CONTEXT_FN_PTR    ucryptoFreeContext;
  UCRYPTO_STRERROR_FN_PTR        ucryptoStrerror;
} T4CRYPTO_FUNCTION_TABLE;

typedef T4CRYPTO_FUNCTION_TABLE *T4CRYPTO_FUNCTION_TABLE_PTR;

/* global function table */
T4CRYPTO_FUNCTION_TABLE_PTR ftab;

#endif