OpensslNative.java
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.commons.crypto.cipher;
import java.nio.ByteBuffer;
/**
* JNI interface of {@link Openssl} implementation. The native method in this class is
* defined in OpensslNative.h(genereted by javah).
*/
public class OpensslNative {
private OpensslNative() {}
/**
* Declares a native method to initialize JNI field and method IDs.
*/
public native static void initIDs();
/**
* Declares a native method to initialize the cipher context.
*
* @param algorithm The algorithm name of cipher
* @param padding The padding name of cipher
* @return the context address of cipher
*/
public native static long initContext(int algorithm, int padding);
/**
* Declares a native method to initialize the cipher context.
*
* @return the context address of cipher
*/
public native static long init(long context, int mode, int alg, int padding,
byte[] key, byte[] iv);
/**
* Continues a multiple-part encryption/decryption operation. The data
* is encrypted or decrypted, depending on how this cipher was initialized.
*
* @param context The cipher context address
* @param input The input byte buffer
* @param inputOffset The offset in input where the input starts
* @param inputLength The input length
* @param output The byte buffer for the result
* @param outputOffset The offset in output where the result is stored
* @param maxOutputLength The maximum length for output
* @return The number of bytes stored in output
*/
public native static int update(long context, ByteBuffer input,
int inputOffset, int inputLength, ByteBuffer output, int outputOffset,
int maxOutputLength);
/**
* Continues a multiple-part encryption/decryption operation. The data
* is encrypted or decrypted, depending on how this cipher was initialized.
*
* @param context The cipher context address
* @param input The input byte array
* @param inputOffset The offset in input where the input starts
* @param inputLength The input length
* @param output The byte array for the result
* @param outputOffset The offset in output where the result is stored
* @param maxOutputLength The maximum length for output
* @return The number of bytes stored in output
*/
public native static int updateByteArray(long context, byte[] input,
int inputOffset, int inputLength, byte[] output, int outputOffset,
int maxOutputLength);
/**
* Finishes a multiple-part operation. The data is encrypted or decrypted,
* depending on how this cipher was initialized.
*
* @param context The cipher context address
* @param output The byte buffer for the result
* @param offset The offset in output where the result is stored
* @param maxOutputLength The maximum length for output
* @return The number of bytes stored in output
*/
public native static int doFinal(long context, ByteBuffer output, int offset,
int maxOutputLength);
/**
* Finishes a multiple-part operation. The data is encrypted or decrypted,
* depending on how this cipher was initialized.
*
* @param context The cipher context address
* @param output The byte array for the result
* @param offset The offset in output where the result is stored
* @param maxOutputLength The maximum length for output
* @return The number of bytes stored in output
*/
public native static int doFinalByteArray(long context, byte[] output, int offset,
int maxOutputLength);
/**
* Cleans the context at native.
*
* @param context The cipher context address
*/
public native static void clean(long context);
}