jdk/src/jdk.crypto.ucrypto/solaris/classes/com/oracle/security/ucrypto/UcryptoException.java
changeset 27182 4525d13b8af1
child 31538 0981099a3e54
equal deleted inserted replaced
27181:29f9c4f56e80 27182:4525d13b8af1
       
     1 /*
       
     2  * Copyright (c) 2014, 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 package com.oracle.security.ucrypto;
       
    27 
       
    28 import java.util.*;
       
    29 import java.security.ProviderException;
       
    30 
       
    31 /**
       
    32  * The exception class used by SunUcrypto provider. An exception
       
    33  * object of this class indicates that a function call to the underlying
       
    34  * native calls returned a value not equal to CRYPTO_SUCCESS.
       
    35  *
       
    36  * @since 1.9
       
    37  */
       
    38 public final class UcryptoException extends ProviderException {
       
    39 
       
    40     private static final long serialVersionUID = -933864511110035746L;
       
    41 
       
    42     // NOTE: check /usr/include/sys/crypto/common.h for updates
       
    43     private static final String ERROR_MSG[] = {
       
    44         "CRYPTO_SUCCESS",
       
    45         "CRYPTO_CANCEL",
       
    46         "CRYPTO_HOST_MEMORY",
       
    47         "CRYPTO_GENERAL_ERROR",
       
    48         "CRYPTO_FAILED",
       
    49         "CRYPTO_ARGUMENTS_BAD",
       
    50         "CRYPTO_ATTRIBUTE_READ_ONLY",
       
    51         "CRYPTO_ATTRIBUTE_SENSITIVE",
       
    52         "CRYPTO_ATTRIBUTE_TYPE_INVALID",
       
    53         "CRYPTO_ATTRIBUTE_VALUE_INVALID",
       
    54         "CRYPTO_CANCELED",
       
    55         "CRYPTO_DATA_INVALID",
       
    56         "CRYPTO_DATA_LEN_RANGE",
       
    57         "CRYPTO_DEVICE_ERROR",
       
    58         "CRYPTO_DEVICE_MEMORY",
       
    59         "CRYPTO_DEVICE_REMOVED",
       
    60         "CRYPTO_ENCRYPTED_DATA_INVALID",
       
    61         "CRYPTO_ENCRYPTED_DATA_LEN_RANGE",
       
    62         "CRYPTO_KEY_HANDLE_INVALID",
       
    63         "CRYPTO_KEY_SIZE_RANGE",
       
    64         "CRYPTO_KEY_TYPE_INCONSISTENT",
       
    65         "CRYPTO_KEY_NOT_NEEDED",
       
    66         "CRYPTO_KEY_CHANGED",
       
    67         "CRYPTO_KEY_NEEDED",
       
    68         "CRYPTO_KEY_INDIGESTIBLE",
       
    69         "CRYPTO_KEY_FUNCTION_NOT_PERMITTED",
       
    70         "CRYPTO_KEY_NOT_WRAPPABLE",
       
    71         "CRYPTO_KEY_UNEXTRACTABLE",
       
    72         "CRYPTO_MECHANISM_INVALID",
       
    73         "CRYPTO_MECHANISM_PARAM_INVALID",
       
    74         "CRYPTO_OBJECT_HANDLE_INVALID",
       
    75         "CRYPTO_OPERATION_IS_ACTIVE",
       
    76         "CRYPTO_OPERATION_NOT_INITIALIZED",
       
    77         "CRYPTO_PIN_INCORRECT",
       
    78         "CRYPTO_PIN_INVALID",
       
    79         "CRYPTO_PIN_LEN_RANGE",
       
    80         "CRYPTO_PIN_EXPIRED",
       
    81         "CRYPTO_PIN_LOCKED",
       
    82         "CRYPTO_SESSION_CLOSED",
       
    83         "CRYPTO_SESSION_COUNT",
       
    84         "CRYPTO_SESSION_HANDLE_INVALID",
       
    85         "CRYPTO_SESSION_READ_ONLY",
       
    86         "CRYPTO_SESSION_EXISTS",
       
    87         "CRYPTO_SESSION_READ_ONLY_EXISTS",
       
    88         "CRYPTO_SESSION_READ_WRITE_SO_EXISTS",
       
    89         "CRYPTO_SIGNATURE_INVALID",
       
    90         "CRYPTO_SIGNATURE_LEN_RANGE",
       
    91         "CRYPTO_TEMPLATE_INCOMPLETE",
       
    92         "CRYPTO_TEMPLATE_INCONSISTENT",
       
    93         "CRYPTO_UNWRAPPING_KEY_HANDLE_INVALID",
       
    94         "CRYPTO_UNWRAPPING_KEY_SIZE_RANGE",
       
    95         "CRYPTO_UNWRAPPING_KEY_TYPE_INCONSISTENT",
       
    96         "CRYPTO_USER_ALREADY_LOGGED_IN",
       
    97         "CRYPTO_USER_NOT_LOGGED_IN",
       
    98         "CRYPTO_USER_PIN_NOT_INITIALIZED",
       
    99         "CRYPTO_USER_TYPE_INVALID",
       
   100         "CRYPTO_USER_ANOTHER_ALREADY_LOGGED_IN",
       
   101         "CRYPTO_USER_TOO_MANY_TYPES",
       
   102         "CRYPTO_WRAPPED_KEY_INVALID",
       
   103         "CRYPTO_WRAPPED_KEY_LEN_RANGE",
       
   104         "CRYPTO_WRAPPING_KEY_HANDLE_INVALID",
       
   105         "CRYPTO_WRAPPING_KEY_SIZE_RANGE",
       
   106         "CRYPTO_WRAPPING_KEY_TYPE_INCONSISTENT",
       
   107         "CRYPTO_RANDOM_SEED_NOT_SUPPORTED",
       
   108         "CRYPTO_RANDOM_NO_RNG",
       
   109         "CRYPTO_DOMAIN_PARAMS_INVALID",
       
   110         "CRYPTO_BUFFER_TOO_SMALL",
       
   111         "CRYPTO_INFORMATION_SENSITIVE",
       
   112         "CRYPTO_NOT_SUPPORTED",
       
   113         "CRYPTO_QUEUED",
       
   114         "CRYPTO_BUFFER_TOO_BIG",
       
   115         "CRYPTO_INVALID_CONTEXT",
       
   116         "CRYPTO_INVALID_MAC",
       
   117         "CRYPTO_MECH_NOT_SUPPORTED",
       
   118         "CRYPTO_INCONSISTENT_ATTRIBUTE",
       
   119         "CRYPTO_NO_PERMISSION",
       
   120         "CRYPTO_INVALID_PROVIDER_ID",
       
   121         "CRYPTO_VERSION_MISMATCH",
       
   122         "CRYPTO_BUSY",
       
   123         "CRYPTO_UNKNOWN_PROVIDER",
       
   124         "CRYPTO_MODVERIFICATION_FAILED",
       
   125         "CRYPTO_OLD_CTX_TEMPLATE",
       
   126         "CRYPTO_WEAK_KEY",
       
   127         "CRYPTO_FIPS140_ERROR"
       
   128     };
       
   129 
       
   130     /**
       
   131      * The error code if this exception is triggered by a Ucrypto error.
       
   132      */
       
   133     private final int errorCode;
       
   134 
       
   135     /**
       
   136      * This method gets the corresponding text error message from a
       
   137      * predefined mapping. If mapping is not found, then it returns the error
       
   138      * code as a hex-string.
       
   139      *
       
   140      * @return The message or the error code; e.g. "CRYPTO_DATA_INVALID" or
       
   141      *         "0x88".
       
   142      */
       
   143     static String getErrorMessage(int errorCode) {
       
   144         String message;
       
   145         if (errorCode < ERROR_MSG.length) {
       
   146             message = ERROR_MSG[errorCode];
       
   147         } else {
       
   148             message = "0x" + Integer.toHexString(errorCode);
       
   149         }
       
   150         return message;
       
   151     }
       
   152 
       
   153     /**
       
   154      * Constructor taking the error code as defined for the CRYPTO_* constants
       
   155      */
       
   156     public UcryptoException(int rv) {
       
   157         super(getErrorMessage(rv));
       
   158         this.errorCode = rv;
       
   159     }
       
   160 
       
   161     public UcryptoException(String message) {
       
   162         super(message);
       
   163         errorCode = -1;
       
   164     }
       
   165 
       
   166     public UcryptoException(String message, Throwable cause) {
       
   167         super(message, cause);
       
   168         errorCode = -1;
       
   169     }
       
   170 
       
   171     /**
       
   172      * Returns the Ucrypto error code.
       
   173      *
       
   174      * @return The error code.
       
   175      */
       
   176     public int getErrorCode() {
       
   177         return errorCode;
       
   178     }
       
   179 }