首先看下我们的文件结构:
OpenSSL文件
com_csii_desjni_DESJniUtil.c
#include
#include
#include
#include
#include
#include "include/openssl/des.h"
#include "include/openssl/bio.h"
#include "include/openssl/evp.h"
#include "include/openssl/buffer.h"
static void openssl_base64_decode(char *encoded_bytes,
unsigned char **decoded_bytes, size_t *decoded_length) {
BIO *bioMem, *b64;
size_t buffer_length;
bioMem = BIO_new_mem_buf((void *) encoded_bytes, -1);
b64 = BIO_new(BIO_f_base64());
BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
bioMem = BIO_push(b64, bioMem);
buffer_length = BIO_get_mem_data(bioMem, NULL);
*decoded_bytes = malloc(buffer_length);
if (decoded_bytes == NULL) {
BIO_free_all(bioMem);
*decoded_length = 0;
return;
}
*decoded_length = BIO_read(bioMem, *decoded_bytes, buffer_length);
BIO_free_all(bioMem);
}
/* Return NULL if failed, REMEMBER to free() */
static char *openssl_base64_encode(unsigned char *decoded_bytes,
size_t decoded_length) {
int x;
BIO *bioMem, *b64;
BUF_MEM *bufPtr;
char *buff = NULL;
b64 = BIO_new(BIO_f_base64());
BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
bioMem = BIO_new(BIO_s_mem());
b64 = BIO_push(b64, bioMem);
BIO_write(b64, decoded_bytes, decoded_length);
x = BIO_flush(b64);
if (x < 1)
goto END;
BIO_get_mem_ptr(b64, &bufPtr);
buff = (char *) malloc(bufPtr->length + 1);
if (buff == NULL)
goto END;
memcpy(buff, bufPtr->data, bufPtr->length);
buff[bufPtr->length] = 0;
END: BIO_free_all(b64);
return buff;
}
unsigned char * encryptDES(const char *data, int * lenreturn);
unsigned char * decryptDES(const char *data, int data_len);
JNIEXPORT jstring JNICALL Java_com_csii_desjni_DESJniUtil_encryptDES(
JNIEnv *env, jobject obj, jstring inputStr) {
const char *str = (*env)->GetStringUTFChars(env, inputStr, JNI_FALSE);
unsigned char *dst;
int lenreturn;
dst = encryptDES(str, &lenreturn);
// char KEY[9] = { 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'k', '\0' };
// getKey(KEY);
return (*env)->NewStringUTF(env, openssl_base64_encode(dst, lenreturn));
}
JNIEXPORT jstring JNICALL Java_com_csii_desjni_DESJniUtil_decryptDES(
JNIEnv *env, jobject obj, jstring inputStr) {
const char *str = (*env)->GetStringUTFChars(env, inputStr, JNI_FALSE);
char *str2;
int len;
openssl_base64_decode(str, &str2, &len);
__android_log_print(ANDROID_LOG_INFO, "JNIMsg", "str2=%s len=%d strlen=%d",
str2, len, strlen(str2));
unsigned char *dst;
dst = decryptDES(str2, len);
__android_log_print(ANDROID_LOG_INFO, "JNIMsg", "dst=%s", dst);
return (*env)->NewStringUTF(env, dst);
}
unsigned char * encryptDES(const char *data, int * lenreturn) {
int docontinue = 1;
// char *data = "gubojun"; /* 明文 */
int data_len;
int data_rest;
unsigned char ch;
unsigned char *src = NULL; /* 补齐后的明文 */
unsigned char *dst = NULL; /* 解密后的明文 */
int len;
unsigned char tmp[8];
unsigned char in[8];
unsigned char out[8];
char *k = "12345678"; /* 原始密钥 */
int key_len;
#define LEN_OF_KEY 24
unsigned char key[LEN_OF_KEY]; /* 补齐后的密钥 */
unsigned char block_key[9];
DES_key_schedule ks, ks2, ks3;
/* 构造补齐后的密钥 */
key_len = strlen(k);
memcpy(key, k, key_len);
memset(key + key_len, 0x00, LEN_OF_KEY - key_len);
/* 分析补齐明文所需空间及补齐填充数据 */
data_len = strlen(data);
data_rest = data_len % 8;
len = data_len + (8 - data_rest);
ch = 8 - data_rest;
src = (unsigned char *) malloc(len);
dst = (unsigned char *) malloc(len);
if (NULL == src || NULL == dst) {
docontinue = 0;
}
if (docontinue) {
int count;
int i;
/* 构造补齐后的加密内容 */
memset(src, 0, len);
memcpy(src, data, data_len);
memset(src + data_len, ch, 8 - data_rest);
/* 密钥置换 */
memset(block_key, 0, sizeof(block_key));
memcpy(block_key, key + 0, 8);
DES_set_key_unchecked((const_DES_cblock*) block_key, &ks);
memcpy(block_key, key + 8, 8);
DES_set_key_unchecked((const_DES_cblock*) block_key, &ks2);
memcpy(block_key, key + 16, 8);
DES_set_key_unchecked((const_DES_cblock*) block_key, &ks3);
/* 循环加密/解密,每8字节一次 */
count = len / 8;
for (i = 0; i < count; i++) {
memset(tmp, 0, 8);
memset(in, 0, 8);
memset(out, 0, 8);
memcpy(tmp, src + 8 * i, 8);
/* 加密 */
DES_ecb3_encrypt((const_DES_cblock*) tmp, (DES_cblock*) in, &ks,
&ks2, &ks3, DES_ENCRYPT);
/* 解密 */
// DES_ecb3_encrypt((const_DES_cblock*) in, (DES_cblock*) out, &ks,
// &ks2, &ks3, DES_DECRYPT);
/* 将解密的内容拷贝到解密后的明文 */
// memcpy(dst + 8 * i, out, 8);
memcpy(dst + 8 * i, in, 8);
}
}
// __android_log_print(ANDROID_LOG_INFO, "JNIMsg", "密文 %s", dst);
// __android_log_print(ANDROID_LOG_INFO, "JNIMsg", "after decrypt:");
// int i;
// for (i = 0; i < len; i++) {
// __android_log_print(ANDROID_LOG_INFO, "JNIMsg", "0x%.2X %c %d",
// *(dst + i), *(dst + i), *(dst + i));
// }
*lenreturn = len;
if (NULL != src) {
free(src);
src = NULL;
}
if (NULL != dst) {
return dst;
}
return NULL;
// if (NULL != dst) {
// free(dst);
// dst = NULL;
// }
}
unsigned char * decryptDES(const char *data, int data_len) {
int docontinue = 1;
// char *data = "gubojun"; /* 明文 */
// int data_len;
int data_rest;
unsigned char ch;
unsigned char *src = NULL; /* 补齐后的明文 */
unsigned char *dst = NULL; /* 解密后的明文 */
int len;
unsigned char tmp[8];
unsigned char in[8];
unsigned char out[8];
char *k = "12345678"; /* 原始密钥 */
int key_len;
#define LEN_OF_KEY 24
unsigned char key[LEN_OF_KEY]; /* 补齐后的密钥 */
unsigned char block_key[9];
DES_key_schedule ks, ks2, ks3;
/* 构造补齐后的密钥 */
key_len = strlen(k);
memcpy(key, k, key_len);
memset(key + key_len, 0x00, LEN_OF_KEY - key_len);
/* 分析补齐明文所需空间及补齐填充数据 */
// data_len = strlen(data);
data_rest = data_len % 8;
len = data_len; // + (8 - data_rest);
// ch = 8 - data_rest;
src = (unsigned char *) malloc(len);
dst = (unsigned char *) malloc(len);
if (NULL == src || NULL == dst) {
docontinue = 0;
}
if (docontinue) {
int count;
int i;
/* 构造补齐后的加密内容 */
memset(src, 0, len);
memcpy(src, data, data_len);
// memset(src + data_len, ch, 8 - data_rest);
/* 密钥置换 */
memset(block_key, 0, sizeof(block_key));
memcpy(block_key, key + 0, 8);
DES_set_key_unchecked((const_DES_cblock*) block_key, &ks);
memcpy(block_key, key + 8, 8);
DES_set_key_unchecked((const_DES_cblock*) block_key, &ks2);
memcpy(block_key, key + 16, 8);
DES_set_key_unchecked((const_DES_cblock*) block_key, &ks3);
/* 循环加密/解密,每8字节一次 */
count = len / 8;
for (i = 0; i < count; i++) {
memset(tmp, 0, 8);
// memset(in, 0, 8);
memset(out, 0, 8);
// if (i == count) {
// memcpy(tmp, src + 8 * i, len - 8 * i);
// } else
memcpy(tmp, src + 8 * i, 8);
/* 加密 */
// DES_ecb3_encrypt((const_DES_cblock*) tmp, (DES_cblock*) in, &ks,
// &ks2, &ks3, DES_ENCRYPT);
/* 解密 */
DES_ecb3_encrypt((const_DES_cblock*) tmp, (DES_cblock*) out, &ks,
&ks2, &ks3, DES_DECRYPT);
/* 将解密的内容拷贝到解密后的明文 */
memcpy(dst + 8 * i, out, 8);
// memcpy(dst + 8 * i, in, 8);
}
for (i = 0; i < len; i++) {
if (*(dst + i) < 9) {
*(dst + i) = 0;
break;
}
}
}
// __android_log_print(ANDROID_LOG_INFO, "JNIMsg", "密文 %s", dst);
// __android_log_print(ANDROID_LOG_INFO, "JNIMsg", "after decrypt:");
// int i;
// for (i = 0; i < len; i++) {
// __android_log_print(ANDROID_LOG_INFO, "JNIMsg", "0x%.2X %c %d",
// *(dst + i), *(dst + i), *(dst + i));
// }
if (NULL != src) {
free(src);
src = NULL;
}
if (NULL != dst) {
return dst;
}
return NULL;
// if (NULL != dst) {
// free(dst);
// dst = NULL;
// }
}
com_csii_desjni_DESJniUtil.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
//---------------des---------------
//write by gubojun at 2016-04-14
#include "stdafx.h"
#include "memory.h"
#include "stdio.h"
#include "time.h"
#include "stdlib.h"
//---------------des---------------
#define PLAIN_FILE_OPEN_ERROR -1
#define KEY_FILE_OPEN_ERROR -2
#define CIPHER_FILE_OPEN_ERROR -3
#define OK 1
/* Header for class com_csii_desjni_DESJniUtil */
#ifndef _Included_com_csii_desjni_DESJniUtil
#define _Included_com_csii_desjni_DESJniUtil
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_csii_desjni_DESJniUtil
* Method: encryptDES
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_csii_desjni_DESJniUtil_encryptDES(JNIEnv *,
jclass, jstring);
/*
* Class: com_csii_desjni_DESJniUtil
* Method: decryptDES
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_csii_desjni_DESJniUtil_decryptDES(JNIEnv *,
jclass, jstring);
/*
* Class: com_csii_desjni_DESJniUtil
* Method: getKey
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_csii_desjni_DESJniUtil_getKey(JNIEnv *,
jclass);
#ifdef __cplusplus
}
#endif
#endif
Base64.java
package com.csii.desjni;
import java.io.ByteArrayOutputStream;
public class Base64
{
private static char[] base64EncodeChars = new char[] {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/' };
private static byte[] base64DecodeChars = new byte[] {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
-1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
-1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1 };
private Base64()
{
}
public static String encode(byte[] data)
{
if (data == null)
{
return "";
}
StringBuffer sb = new StringBuffer();
int len = data.length;
int i = 0;
int b1, b2, b3;
while (i < len)
{
b1 = data[i++] & 0xff;
if (i == len)
{
sb.append(base64EncodeChars[b1 >>> 2]);
sb.append(base64EncodeChars[(b1 & 0x3) << 4]);
sb.append("==");
break;
}
b2 = data[i++] & 0xff;
if (i == len)
{
sb.append(base64EncodeChars[b1 >>> 2]);
sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]);
sb.append(base64EncodeChars[(b2 & 0x0f) << 2]);
sb.append("=");
break;
}
b3 = data[i++] & 0xff;
sb.append(base64EncodeChars[b1 >>> 2]);
sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]);
sb.append(base64EncodeChars[((b2 & 0x0f) << 2) | ((b3 & 0xc0) >>> 6)]);
sb.append(base64EncodeChars[b3 & 0x3f]);
}
return sb.toString();
}
public static byte[] decode(String str)
{
byte[] data = str.getBytes();
int len = data.length;
ByteArrayOutputStream buf = new ByteArrayOutputStream(len);
int i = 0;
int b1, b2, b3, b4;
while (i < len)
{
/* b1 */
do
{
b1 = base64DecodeChars[data[i++]];
}
while (i < len && b1 == -1);
if (b1 == -1)
{
break;
}
/* b2 */
do
{
b2 = base64DecodeChars[data[i++]];
}
while (i < len && b2 == -1);
if (b2 == -1)
{
break;
}
buf.write((int) ((b1 << 2) | ((b2 & 0x30) >>> 4)));
/* b3 */
do
{
b3 = data[i++];
if (b3 == 61)
{
return buf.toByteArray();
}
b3 = base64DecodeChars[b3];
}
while (i < len && b3 == -1);
if (b3 == -1)
{
break;
}
buf.write((int) (((b2 & 0x0f) << 4) | ((b3 & 0x3c) >>> 2)));
/* b4 */
do
{
b4 = data[i++];
if (b4 == 61)
{
return buf.toByteArray();
}
b4 = base64DecodeChars[b4];
}
while (i < len && b4 == -1);
if (b4 == -1)
{
break;
}
buf.write((int) (((b3 & 0x03) << 6) | b4));
}
return buf.toByteArray();
}
}
DESJniUtil.java
/**
* DESJniUtil.java
*
* Created on 2016年4月14日
* Modification history
*
* @author 顾博君 Internet Banking System Group,CSII
* @version 1.0
* @since 1.0
*/
package com.csii.desjni;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
/**
* @description
*
* @version 1.0
* @CopyRight © 2015 Client Server Internationtal, Inc(CSII). All Rights reserved.
* @Author 顾博君 2016年4月14日 下午3:24:51
* @see
*/
public class DESJniUtil
{
static
{
// 加载库文件
System.loadLibrary("DESJni");
}
// 加密
public native static String encryptDES(String source);
// 解密
public native static String decryptDES(String source);
// 获取密钥
// public native static String getKey();
private static final String CHARSET = "UTF-8";
private static final String DES = "DES";
private static SecretKey secretkey = null;
private static Key getKey(String KEY) throws UnsupportedEncodingException
{
if (secretkey == null)
{
byte[] bb = null;
bb = KEY.getBytes(CHARSET);
secretkey = new SecretKeySpec(bb, DES);
}
return secretkey;
}
/**
* 加密
*
* @throws InvalidKeyException
* @throws UnsupportedEncodingException
* @throws NoSuchPaddingException
* @throws NoSuchAlgorithmException
* @throws BadPaddingException
* @throws IllegalBlockSizeException
*/
public static String encryptDES(String source, String KEY) throws Exception
{
String s = null;
byte[] target = null;
byte[] center = source.getBytes(CHARSET);
Key key = getKey(KEY);
Cipher cipher = Cipher.getInstance(DES);
cipher.init(Cipher.ENCRYPT_MODE, key);
target = cipher.doFinal(center);
s = Base64.encode(target);
return s;
}
/**
* 解密
*/
public static String decryptDES(String source, String KEY) throws Exception
{
String s = null;
byte[] dissect = null;
byte[] center = Base64.decode(source);
Key key = getKey(KEY);
Cipher cipher = Cipher.getInstance(DES);// 等价于getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, key);
dissect = cipher.doFinal(center);
s = new String(dissect, CHARSET);
return s;
}
}
MainActivity.java
package com.csii.desjni;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView tv = (TextView) findViewById(R.id.tv);
final EditText et = (EditText) findViewById(R.id.et);
Button bt = (Button) findViewById(R.id.bt);
Button bt_en = (Button) findViewById(R.id.bt_en);
bt.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
try
{
tv.append(
"\n解密:" + DESJniUtil.decryptDES(DESJniUtil.encryptDES(et.getText().toString())));
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
bt_en.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
try
{
String stren = new String(DESJniUtil.encryptDES(et.getText().toString()));
tv.append("\n加密:" + stren);
Log.v("加密 c:", stren);
stren = new String(DESJniUtil.encryptDES(et.getText().toString(), "CSIIQZBk"));
Log.v("加密 java:", stren);
//
// byte[] b = Base64.decode(stren);
// for (int i = 0; i < b.length; i++)
// {
// Log.v("byte:" + i, "" + (b[i] < 0 ? 256 + b[i] : b[i]));
// }
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
// Log.v("java Base64:", Base64.encode("gubojun".getBytes()));
String text = "guboqerqerqer";
// String text = "gubojun";
String encrypt = null;
encrypt = DESJniUtil.encryptDES(text);
Log.v("加密:", encrypt);
Log.v("加密2:", new String(Base64.decode(encrypt)));
tv.append("\n加密:" + encrypt);
// Log.v("解密:", DESJniUtil.decryptDES(encrypt));
try
{
tv.append("\n解密:" + DESJniUtil.decryptDES(encrypt));
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
static
{
// 加载库文件
System.loadLibrary("DESJni");
}
}
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.csii.desjni.MainActivity" >
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<EditText
android:id="@+id/et"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:ems="10" >
<requestFocus />
EditText>
<Button
android:id="@+id/bt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="解密" />
<Button
android:id="@+id/bt_en"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="加密" />
LinearLayout>
Android.mk
# Copyright (C) 2009 The Android Open Source Project
#
# Licensed 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.
#
LOCAL_PATH := $(call my-dir)
CRYPTO_PATH := crypto
SSL_PATH := ssl
local_c_includes := \
$(LOCAL_PATH)/include \
$(LOCAL_PATH)/include/openssl \
$(CRYPTO_PATH) \
$(CRYPTO_PATH)/asn1 \
$(CRYPTO_PATH)/evp \
$(SSL_PATH) \
arm_cflags := -DOPENSSL_BN_ASM_MONT -DAES_ASM -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM
arm_src_files := \
$(CRYPTO_PATH)/aes/asm/aes-armv4.S \
$(CRYPTO_PATH)/bn/asm/armv4-mont.S \
$(CRYPTO_PATH)/sha/asm/sha1-armv4-large.S \
$(CRYPTO_PATH)/sha/asm/sha256-armv4.S \
$(CRYPTO_PATH)/sha/asm/sha512-armv4.S
non_arm_src_files := $(CRYPTO_PATH)/aes/aes_core.c
local_crypto_src := \
$(CRYPTO_PATH)/cryptlib.c \
$(CRYPTO_PATH)/mem.c \
$(CRYPTO_PATH)/mem_clr.c \
$(CRYPTO_PATH)/mem_dbg.c \
$(CRYPTO_PATH)/cversion.c \
$(CRYPTO_PATH)/ex_data.c \
$(CRYPTO_PATH)/cpt_err.c \
$(CRYPTO_PATH)/ebcdic.c \
$(CRYPTO_PATH)/uid.c \
$(CRYPTO_PATH)/o_time.c \
$(CRYPTO_PATH)/o_str.c \
$(CRYPTO_PATH)/o_dir.c \
$(CRYPTO_PATH)/aes/aes_cbc.c \
$(CRYPTO_PATH)/aes/aes_cfb.c \
$(CRYPTO_PATH)/aes/aes_ctr.c \
$(CRYPTO_PATH)/aes/aes_ecb.c \
$(CRYPTO_PATH)/aes/aes_misc.c \
$(CRYPTO_PATH)/aes/aes_ofb.c \
$(CRYPTO_PATH)/aes/aes_wrap.c \
$(CRYPTO_PATH)/asn1/a_bitstr.c \
$(CRYPTO_PATH)/asn1/a_bool.c \
$(CRYPTO_PATH)/asn1/a_bytes.c \
$(CRYPTO_PATH)/asn1/a_d2i_fp.c \
$(CRYPTO_PATH)/asn1/a_digest.c \
$(CRYPTO_PATH)/asn1/a_dup.c \
$(CRYPTO_PATH)/asn1/a_enum.c \
$(CRYPTO_PATH)/asn1/a_gentm.c \
$(CRYPTO_PATH)/asn1/a_i2d_fp.c \
$(CRYPTO_PATH)/asn1/a_int.c \
$(CRYPTO_PATH)/asn1/a_mbstr.c \
$(CRYPTO_PATH)/asn1/a_object.c \
$(CRYPTO_PATH)/asn1/a_octet.c \
$(CRYPTO_PATH)/asn1/a_print.c \
$(CRYPTO_PATH)/asn1/a_set.c \
$(CRYPTO_PATH)/asn1/a_sign.c \
$(CRYPTO_PATH)/asn1/a_strex.c \
$(CRYPTO_PATH)/asn1/a_strnid.c \
$(CRYPTO_PATH)/asn1/a_time.c \
$(CRYPTO_PATH)/asn1/a_type.c \
$(CRYPTO_PATH)/asn1/a_utctm.c \
$(CRYPTO_PATH)/asn1/a_utf8.c \
$(CRYPTO_PATH)/asn1/a_verify.c \
$(CRYPTO_PATH)/asn1/ameth_lib.c \
$(CRYPTO_PATH)/asn1/asn1_err.c \
$(CRYPTO_PATH)/asn1/asn1_gen.c \
$(CRYPTO_PATH)/asn1/asn1_lib.c \
$(CRYPTO_PATH)/asn1/asn1_par.c \
$(CRYPTO_PATH)/asn1/asn_mime.c \
$(CRYPTO_PATH)/asn1/asn_moid.c \
$(CRYPTO_PATH)/asn1/asn_pack.c \
$(CRYPTO_PATH)/asn1/bio_asn1.c \
$(CRYPTO_PATH)/asn1/bio_ndef.c \
$(CRYPTO_PATH)/asn1/d2i_pr.c \
$(CRYPTO_PATH)/asn1/d2i_pu.c \
$(CRYPTO_PATH)/asn1/evp_asn1.c \
$(CRYPTO_PATH)/asn1/f_enum.c \
$(CRYPTO_PATH)/asn1/f_int.c \
$(CRYPTO_PATH)/asn1/f_string.c \
$(CRYPTO_PATH)/asn1/i2d_pr.c \
$(CRYPTO_PATH)/asn1/i2d_pu.c \
$(CRYPTO_PATH)/asn1/n_pkey.c \
$(CRYPTO_PATH)/asn1/nsseq.c \
$(CRYPTO_PATH)/asn1/p5_pbe.c \
$(CRYPTO_PATH)/asn1/p5_pbev2.c \
$(CRYPTO_PATH)/asn1/p8_pkey.c \
$(CRYPTO_PATH)/asn1/t_bitst.c \
$(CRYPTO_PATH)/asn1/t_crl.c \
$(CRYPTO_PATH)/asn1/t_pkey.c \
$(CRYPTO_PATH)/asn1/t_req.c \
$(CRYPTO_PATH)/asn1/t_spki.c \
$(CRYPTO_PATH)/asn1/t_x509.c \
$(CRYPTO_PATH)/asn1/t_x509a.c \
$(CRYPTO_PATH)/asn1/tasn_dec.c \
$(CRYPTO_PATH)/asn1/tasn_enc.c \
$(CRYPTO_PATH)/asn1/tasn_fre.c \
$(CRYPTO_PATH)/asn1/tasn_new.c \
$(CRYPTO_PATH)/asn1/tasn_prn.c \
$(CRYPTO_PATH)/asn1/tasn_typ.c \
$(CRYPTO_PATH)/asn1/tasn_utl.c \
$(CRYPTO_PATH)/asn1/x_algor.c \
$(CRYPTO_PATH)/asn1/x_attrib.c \
$(CRYPTO_PATH)/asn1/x_bignum.c \
$(CRYPTO_PATH)/asn1/x_crl.c \
$(CRYPTO_PATH)/asn1/x_exten.c \
$(CRYPTO_PATH)/asn1/x_info.c \
$(CRYPTO_PATH)/asn1/x_long.c \
$(CRYPTO_PATH)/asn1/x_name.c \
$(CRYPTO_PATH)/asn1/x_nx509.c \
$(CRYPTO_PATH)/asn1/x_pkey.c \
$(CRYPTO_PATH)/asn1/x_pubkey.c \
$(CRYPTO_PATH)/asn1/x_req.c \
$(CRYPTO_PATH)/asn1/x_sig.c \
$(CRYPTO_PATH)/asn1/x_spki.c \
$(CRYPTO_PATH)/asn1/x_val.c \
$(CRYPTO_PATH)/asn1/x_x509.c \
$(CRYPTO_PATH)/asn1/x_x509a.c \
$(CRYPTO_PATH)/bf/bf_cfb64.c \
$(CRYPTO_PATH)/bf/bf_ecb.c \
$(CRYPTO_PATH)/bf/bf_enc.c \
$(CRYPTO_PATH)/bf/bf_ofb64.c \
$(CRYPTO_PATH)/bf/bf_skey.c \
$(CRYPTO_PATH)/bio/b_dump.c \
$(CRYPTO_PATH)/bio/b_print.c \
$(CRYPTO_PATH)/bio/b_sock.c \
$(CRYPTO_PATH)/bio/bf_buff.c \
$(CRYPTO_PATH)/bio/bf_nbio.c \
$(CRYPTO_PATH)/bio/bf_null.c \
$(CRYPTO_PATH)/bio/bio_cb.c \
$(CRYPTO_PATH)/bio/bio_err.c \
$(CRYPTO_PATH)/bio/bio_lib.c \
$(CRYPTO_PATH)/bio/bss_acpt.c \
$(CRYPTO_PATH)/bio/bss_bio.c \
$(CRYPTO_PATH)/bio/bss_conn.c \
$(CRYPTO_PATH)/bio/bss_dgram.c \
$(CRYPTO_PATH)/bio/bss_fd.c \
$(CRYPTO_PATH)/bio/bss_file.c \
$(CRYPTO_PATH)/bio/bss_log.c \
$(CRYPTO_PATH)/bio/bss_mem.c \
$(CRYPTO_PATH)/bio/bss_null.c \
$(CRYPTO_PATH)/bio/bss_sock.c \
$(CRYPTO_PATH)/bn/bn_add.c \
$(CRYPTO_PATH)/bn/bn_asm.c \
$(CRYPTO_PATH)/bn/bn_blind.c \
$(CRYPTO_PATH)/bn/bn_ctx.c \
$(CRYPTO_PATH)/bn/bn_div.c \
$(CRYPTO_PATH)/bn/bn_err.c \
$(CRYPTO_PATH)/bn/bn_exp.c \
$(CRYPTO_PATH)/bn/bn_exp2.c \
$(CRYPTO_PATH)/bn/bn_gcd.c \
$(CRYPTO_PATH)/bn/bn_gf2m.c \
$(CRYPTO_PATH)/bn/bn_kron.c \
$(CRYPTO_PATH)/bn/bn_lib.c \
$(CRYPTO_PATH)/bn/bn_mod.c \
$(CRYPTO_PATH)/bn/bn_mont.c \
$(CRYPTO_PATH)/bn/bn_mpi.c \
$(CRYPTO_PATH)/bn/bn_mul.c \
$(CRYPTO_PATH)/bn/bn_nist.c \
$(CRYPTO_PATH)/bn/bn_prime.c \
$(CRYPTO_PATH)/bn/bn_print.c \
$(CRYPTO_PATH)/bn/bn_rand.c \
$(CRYPTO_PATH)/bn/bn_recp.c \
$(CRYPTO_PATH)/bn/bn_shift.c \
$(CRYPTO_PATH)/bn/bn_sqr.c \
$(CRYPTO_PATH)/bn/bn_sqrt.c \
$(CRYPTO_PATH)/bn/bn_word.c \
$(CRYPTO_PATH)/buffer/buf_err.c \
$(CRYPTO_PATH)/buffer/buffer.c \
$(CRYPTO_PATH)/comp/c_rle.c \
$(CRYPTO_PATH)/comp/c_zlib.c \
$(CRYPTO_PATH)/comp/comp_err.c \
$(CRYPTO_PATH)/comp/comp_lib.c \
$(CRYPTO_PATH)/conf/conf_api.c \
$(CRYPTO_PATH)/conf/conf_def.c \
$(CRYPTO_PATH)/conf/conf_err.c \
$(CRYPTO_PATH)/conf/conf_lib.c \
$(CRYPTO_PATH)/conf/conf_mall.c \
$(CRYPTO_PATH)/conf/conf_mod.c \
$(CRYPTO_PATH)/conf/conf_sap.c \
$(CRYPTO_PATH)/des/cbc_cksm.c \
$(CRYPTO_PATH)/des/cbc_enc.c \
$(CRYPTO_PATH)/des/cfb64ede.c \
$(CRYPTO_PATH)/des/cfb64enc.c \
$(CRYPTO_PATH)/des/cfb_enc.c \
$(CRYPTO_PATH)/des/des_enc.c \
$(CRYPTO_PATH)/des/des_old.c \
$(CRYPTO_PATH)/des/des_old2.c \
$(CRYPTO_PATH)/des/ecb3_enc.c \
$(CRYPTO_PATH)/des/ecb_enc.c \
$(CRYPTO_PATH)/des/ede_cbcm_enc.c \
$(CRYPTO_PATH)/des/enc_read.c \
$(CRYPTO_PATH)/des/enc_writ.c \
$(CRYPTO_PATH)/des/fcrypt.c \
$(CRYPTO_PATH)/des/fcrypt_b.c \
$(CRYPTO_PATH)/des/ofb64ede.c \
$(CRYPTO_PATH)/des/ofb64enc.c \
$(CRYPTO_PATH)/des/ofb_enc.c \
$(CRYPTO_PATH)/des/pcbc_enc.c \
$(CRYPTO_PATH)/des/qud_cksm.c \
$(CRYPTO_PATH)/des/rand_key.c \
$(CRYPTO_PATH)/des/read2pwd.c \
$(CRYPTO_PATH)/des/rpc_enc.c \
$(CRYPTO_PATH)/des/set_key.c \
$(CRYPTO_PATH)/des/str2key.c \
$(CRYPTO_PATH)/des/xcbc_enc.c \
$(CRYPTO_PATH)/dh/dh_ameth.c \
$(CRYPTO_PATH)/dh/dh_asn1.c \
$(CRYPTO_PATH)/dh/dh_check.c \
$(CRYPTO_PATH)/dh/dh_depr.c \
$(CRYPTO_PATH)/dh/dh_err.c \
$(CRYPTO_PATH)/dh/dh_gen.c \
$(CRYPTO_PATH)/dh/dh_key.c \
$(CRYPTO_PATH)/dh/dh_lib.c \
$(CRYPTO_PATH)/dh/dh_pmeth.c \
$(CRYPTO_PATH)/dsa/dsa_ameth.c \
$(CRYPTO_PATH)/dsa/dsa_asn1.c \
$(CRYPTO_PATH)/dsa/dsa_depr.c \
$(CRYPTO_PATH)/dsa/dsa_err.c \
$(CRYPTO_PATH)/dsa/dsa_gen.c \
$(CRYPTO_PATH)/dsa/dsa_key.c \
$(CRYPTO_PATH)/dsa/dsa_lib.c \
$(CRYPTO_PATH)/dsa/dsa_ossl.c \
$(CRYPTO_PATH)/dsa/dsa_pmeth.c \
$(CRYPTO_PATH)/dsa/dsa_prn.c \
$(CRYPTO_PATH)/dsa/dsa_sign.c \
$(CRYPTO_PATH)/dsa/dsa_vrf.c \
$(CRYPTO_PATH)/dso/dso_dl.c \
$(CRYPTO_PATH)/dso/dso_dlfcn.c \
$(CRYPTO_PATH)/dso/dso_err.c \
$(CRYPTO_PATH)/dso/dso_lib.c \
$(CRYPTO_PATH)/dso/dso_null.c \
$(CRYPTO_PATH)/dso/dso_openssl.c \
$(CRYPTO_PATH)/dso/dso_vms.c \
$(CRYPTO_PATH)/dso/dso_win32.c \
$(CRYPTO_PATH)/ec/ec2_mult.c \
$(CRYPTO_PATH)/ec/ec2_smpl.c \
$(CRYPTO_PATH)/ec/ec_ameth.c \
$(CRYPTO_PATH)/ec/ec_asn1.c \
$(CRYPTO_PATH)/ec/ec_check.c \
$(CRYPTO_PATH)/ec/ec_curve.c \
$(CRYPTO_PATH)/ec/ec_cvt.c \
$(CRYPTO_PATH)/ec/ec_err.c \
$(CRYPTO_PATH)/ec/ec_key.c \
$(CRYPTO_PATH)/ec/ec_lib.c \
$(CRYPTO_PATH)/ec/ec_mult.c \
$(CRYPTO_PATH)/ec/ec_pmeth.c \
$(CRYPTO_PATH)/ec/ec_print.c \
$(CRYPTO_PATH)/ec/eck_prn.c \
$(CRYPTO_PATH)/ec/ecp_mont.c \
$(CRYPTO_PATH)/ec/ecp_nist.c \
$(CRYPTO_PATH)/ec/ecp_smpl.c \
$(CRYPTO_PATH)/ecdh/ech_err.c \
$(CRYPTO_PATH)/ecdh/ech_key.c \
$(CRYPTO_PATH)/ecdh/ech_lib.c \
$(CRYPTO_PATH)/ecdh/ech_ossl.c \
$(CRYPTO_PATH)/ecdsa/ecs_asn1.c \
$(CRYPTO_PATH)/ecdsa/ecs_err.c \
$(CRYPTO_PATH)/ecdsa/ecs_lib.c \
$(CRYPTO_PATH)/ecdsa/ecs_ossl.c \
$(CRYPTO_PATH)/ecdsa/ecs_sign.c \
$(CRYPTO_PATH)/ecdsa/ecs_vrf.c \
$(CRYPTO_PATH)/err/err.c \
$(CRYPTO_PATH)/err/err_all.c \
$(CRYPTO_PATH)/err/err_prn.c \
$(CRYPTO_PATH)/evp/bio_b64.c \
$(CRYPTO_PATH)/evp/bio_enc.c \
$(CRYPTO_PATH)/evp/bio_md.c \
$(CRYPTO_PATH)/evp/bio_ok.c \
$(CRYPTO_PATH)/evp/c_all.c \
$(CRYPTO_PATH)/evp/c_allc.c \
$(CRYPTO_PATH)/evp/c_alld.c \
$(CRYPTO_PATH)/evp/digest.c \
$(CRYPTO_PATH)/evp/e_aes.c \
$(CRYPTO_PATH)/evp/e_bf.c \
$(CRYPTO_PATH)/evp/e_des.c \
$(CRYPTO_PATH)/evp/e_des3.c \
$(CRYPTO_PATH)/evp/e_null.c \
$(CRYPTO_PATH)/evp/e_old.c \
$(CRYPTO_PATH)/evp/e_rc2.c \
$(CRYPTO_PATH)/evp/e_rc4.c \
$(CRYPTO_PATH)/evp/e_rc5.c \
$(CRYPTO_PATH)/evp/e_xcbc_d.c \
$(CRYPTO_PATH)/evp/encode.c \
$(CRYPTO_PATH)/evp/evp_acnf.c \
$(CRYPTO_PATH)/evp/evp_enc.c \
$(CRYPTO_PATH)/evp/evp_err.c \
$(CRYPTO_PATH)/evp/evp_key.c \
$(CRYPTO_PATH)/evp/evp_lib.c \
$(CRYPTO_PATH)/evp/evp_pbe.c \
$(CRYPTO_PATH)/evp/evp_pkey.c \
$(CRYPTO_PATH)/evp/m_dss.c \
$(CRYPTO_PATH)/evp/m_dss1.c \
$(CRYPTO_PATH)/evp/m_ecdsa.c \
$(CRYPTO_PATH)/evp/m_md4.c \
$(CRYPTO_PATH)/evp/m_md5.c \
$(CRYPTO_PATH)/evp/m_mdc2.c \
$(CRYPTO_PATH)/evp/m_null.c \
$(CRYPTO_PATH)/evp/m_ripemd.c \
$(CRYPTO_PATH)/evp/m_sha1.c \
$(CRYPTO_PATH)/evp/m_sigver.c \
$(CRYPTO_PATH)/evp/m_wp.c \
$(CRYPTO_PATH)/evp/names.c \
$(CRYPTO_PATH)/evp/p5_crpt.c \
$(CRYPTO_PATH)/evp/p5_crpt2.c \
$(CRYPTO_PATH)/evp/p_dec.c \
$(CRYPTO_PATH)/evp/p_enc.c \
$(CRYPTO_PATH)/evp/p_lib.c \
$(CRYPTO_PATH)/evp/p_open.c \
$(CRYPTO_PATH)/evp/p_seal.c \
$(CRYPTO_PATH)/evp/p_sign.c \
$(CRYPTO_PATH)/evp/p_verify.c \
$(CRYPTO_PATH)/evp/pmeth_fn.c \
$(CRYPTO_PATH)/evp/pmeth_gn.c \
$(CRYPTO_PATH)/evp/pmeth_lib.c \
$(CRYPTO_PATH)/hmac/hm_ameth.c \
$(CRYPTO_PATH)/hmac/hm_pmeth.c \
$(CRYPTO_PATH)/hmac/hmac.c \
$(CRYPTO_PATH)/krb5/krb5_asn.c \
$(CRYPTO_PATH)/lhash/lh_stats.c \
$(CRYPTO_PATH)/lhash/lhash.c \
$(CRYPTO_PATH)/md4/md4_dgst.c \
$(CRYPTO_PATH)/md4/md4_one.c \
$(CRYPTO_PATH)/md5/md5_dgst.c \
$(CRYPTO_PATH)/md5/md5_one.c \
$(CRYPTO_PATH)/modes/cbc128.c \
$(CRYPTO_PATH)/modes/cfb128.c \
$(CRYPTO_PATH)/modes/ctr128.c \
$(CRYPTO_PATH)/modes/ofb128.c \
$(CRYPTO_PATH)/objects/o_names.c \
$(CRYPTO_PATH)/objects/obj_dat.c \
$(CRYPTO_PATH)/objects/obj_err.c \
$(CRYPTO_PATH)/objects/obj_lib.c \
$(CRYPTO_PATH)/objects/obj_xref.c \
$(CRYPTO_PATH)/ocsp/ocsp_asn.c \
$(CRYPTO_PATH)/ocsp/ocsp_cl.c \
$(CRYPTO_PATH)/ocsp/ocsp_err.c \
$(CRYPTO_PATH)/ocsp/ocsp_ext.c \
$(CRYPTO_PATH)/ocsp/ocsp_ht.c \
$(CRYPTO_PATH)/ocsp/ocsp_lib.c \
$(CRYPTO_PATH)/ocsp/ocsp_prn.c \
$(CRYPTO_PATH)/ocsp/ocsp_srv.c \
$(CRYPTO_PATH)/ocsp/ocsp_vfy.c \
$(CRYPTO_PATH)/pem/pem_all.c \
$(CRYPTO_PATH)/pem/pem_err.c \
$(CRYPTO_PATH)/pem/pem_info.c \
$(CRYPTO_PATH)/pem/pem_lib.c \
$(CRYPTO_PATH)/pem/pem_oth.c \
$(CRYPTO_PATH)/pem/pem_pk8.c \
$(CRYPTO_PATH)/pem/pem_pkey.c \
$(CRYPTO_PATH)/pem/pem_seal.c \
$(CRYPTO_PATH)/pem/pem_sign.c \
$(CRYPTO_PATH)/pem/pem_x509.c \
$(CRYPTO_PATH)/pem/pem_xaux.c \
$(CRYPTO_PATH)/pem/pvkfmt.c \
$(CRYPTO_PATH)/pkcs12/p12_add.c \
$(CRYPTO_PATH)/pkcs12/p12_asn.c \
$(CRYPTO_PATH)/pkcs12/p12_attr.c \
$(CRYPTO_PATH)/pkcs12/p12_crpt.c \
$(CRYPTO_PATH)/pkcs12/p12_crt.c \
$(CRYPTO_PATH)/pkcs12/p12_decr.c \
$(CRYPTO_PATH)/pkcs12/p12_init.c \
$(CRYPTO_PATH)/pkcs12/p12_key.c \
$(CRYPTO_PATH)/pkcs12/p12_kiss.c \
$(CRYPTO_PATH)/pkcs12/p12_mutl.c \
$(CRYPTO_PATH)/pkcs12/p12_npas.c \
$(CRYPTO_PATH)/pkcs12/p12_p8d.c \
$(CRYPTO_PATH)/pkcs12/p12_p8e.c \
$(CRYPTO_PATH)/pkcs12/p12_utl.c \
$(CRYPTO_PATH)/pkcs12/pk12err.c \
$(CRYPTO_PATH)/pkcs7/pk7_asn1.c \
$(CRYPTO_PATH)/pkcs7/pk7_attr.c \
$(CRYPTO_PATH)/pkcs7/pk7_doit.c \
$(CRYPTO_PATH)/pkcs7/pk7_lib.c \
$(CRYPTO_PATH)/pkcs7/pk7_mime.c \
$(CRYPTO_PATH)/pkcs7/pk7_smime.c \
$(CRYPTO_PATH)/pkcs7/pkcs7err.c \
$(CRYPTO_PATH)/rand/md_rand.c \
$(CRYPTO_PATH)/rand/rand_egd.c \
$(CRYPTO_PATH)/rand/rand_err.c \
$(CRYPTO_PATH)/rand/rand_lib.c \
$(CRYPTO_PATH)/rand/rand_unix.c \
$(CRYPTO_PATH)/rand/randfile.c \
$(CRYPTO_PATH)/rc2/rc2_cbc.c \
$(CRYPTO_PATH)/rc2/rc2_ecb.c \
$(CRYPTO_PATH)/rc2/rc2_skey.c \
$(CRYPTO_PATH)/rc2/rc2cfb64.c \
$(CRYPTO_PATH)/rc2/rc2ofb64.c \
$(CRYPTO_PATH)/rc4/rc4_enc.c \
$(CRYPTO_PATH)/rc4/rc4_skey.c \
$(CRYPTO_PATH)/ripemd/rmd_dgst.c \
$(CRYPTO_PATH)/ripemd/rmd_one.c \
$(CRYPTO_PATH)/rsa/rsa_ameth.c \
$(CRYPTO_PATH)/rsa/rsa_asn1.c \
$(CRYPTO_PATH)/rsa/rsa_chk.c \
$(CRYPTO_PATH)/rsa/rsa_eay.c \
$(CRYPTO_PATH)/rsa/rsa_err.c \
$(CRYPTO_PATH)/rsa/rsa_gen.c \
$(CRYPTO_PATH)/rsa/rsa_lib.c \
$(CRYPTO_PATH)/rsa/rsa_none.c \
$(CRYPTO_PATH)/rsa/rsa_null.c \
$(CRYPTO_PATH)/rsa/rsa_oaep.c \
$(CRYPTO_PATH)/rsa/rsa_pk1.c \
$(CRYPTO_PATH)/rsa/rsa_pmeth.c \
$(CRYPTO_PATH)/rsa/rsa_prn.c \
$(CRYPTO_PATH)/rsa/rsa_pss.c \
$(CRYPTO_PATH)/rsa/rsa_saos.c \
$(CRYPTO_PATH)/rsa/rsa_sign.c \
$(CRYPTO_PATH)/rsa/rsa_ssl.c \
$(CRYPTO_PATH)/rsa/rsa_x931.c \
$(CRYPTO_PATH)/sha/sha1_one.c \
$(CRYPTO_PATH)/sha/sha1dgst.c \
$(CRYPTO_PATH)/sha/sha256.c \
$(CRYPTO_PATH)/sha/sha512.c \
$(CRYPTO_PATH)/sha/sha_dgst.c \
$(CRYPTO_PATH)/stack/stack.c \
$(CRYPTO_PATH)/ts/ts_err.c \
$(CRYPTO_PATH)/txt_db/txt_db.c \
$(CRYPTO_PATH)/ui/ui_compat.c \
$(CRYPTO_PATH)/ui/ui_err.c \
$(CRYPTO_PATH)/ui/ui_lib.c \
$(CRYPTO_PATH)/ui/ui_openssl.c \
$(CRYPTO_PATH)/ui/ui_util.c \
$(CRYPTO_PATH)/x509/by_dir.c \
$(CRYPTO_PATH)/x509/by_file.c \
$(CRYPTO_PATH)/x509/x509_att.c \
$(CRYPTO_PATH)/x509/x509_cmp.c \
$(CRYPTO_PATH)/x509/x509_d2.c \
$(CRYPTO_PATH)/x509/x509_def.c \
$(CRYPTO_PATH)/x509/x509_err.c \
$(CRYPTO_PATH)/x509/x509_ext.c \
$(CRYPTO_PATH)/x509/x509_lu.c \
$(CRYPTO_PATH)/x509/x509_obj.c \
$(CRYPTO_PATH)/x509/x509_r2x.c \
$(CRYPTO_PATH)/x509/x509_req.c \
$(CRYPTO_PATH)/x509/x509_set.c \
$(CRYPTO_PATH)/x509/x509_trs.c \
$(CRYPTO_PATH)/x509/x509_txt.c \
$(CRYPTO_PATH)/x509/x509_v3.c \
$(CRYPTO_PATH)/x509/x509_vfy.c \
$(CRYPTO_PATH)/x509/x509_vpm.c \
$(CRYPTO_PATH)/x509/x509cset.c \
$(CRYPTO_PATH)/x509/x509name.c \
$(CRYPTO_PATH)/x509/x509rset.c \
$(CRYPTO_PATH)/x509/x509spki.c \
$(CRYPTO_PATH)/x509/x509type.c \
$(CRYPTO_PATH)/x509/x_all.c \
$(CRYPTO_PATH)/x509v3/pcy_cache.c \
$(CRYPTO_PATH)/x509v3/pcy_data.c \
$(CRYPTO_PATH)/x509v3/pcy_lib.c \
$(CRYPTO_PATH)/x509v3/pcy_map.c \
$(CRYPTO_PATH)/x509v3/pcy_node.c \
$(CRYPTO_PATH)/x509v3/pcy_tree.c \
$(CRYPTO_PATH)/x509v3/v3_akey.c \
$(CRYPTO_PATH)/x509v3/v3_akeya.c \
$(CRYPTO_PATH)/x509v3/v3_alt.c \
$(CRYPTO_PATH)/x509v3/v3_bcons.c \
$(CRYPTO_PATH)/x509v3/v3_bitst.c \
$(CRYPTO_PATH)/x509v3/v3_conf.c \
$(CRYPTO_PATH)/x509v3/v3_cpols.c \
$(CRYPTO_PATH)/x509v3/v3_crld.c \
$(CRYPTO_PATH)/x509v3/v3_enum.c \
$(CRYPTO_PATH)/x509v3/v3_extku.c \
$(CRYPTO_PATH)/x509v3/v3_genn.c \
$(CRYPTO_PATH)/x509v3/v3_ia5.c \
$(CRYPTO_PATH)/x509v3/v3_info.c \
$(CRYPTO_PATH)/x509v3/v3_int.c \
$(CRYPTO_PATH)/x509v3/v3_lib.c \
$(CRYPTO_PATH)/x509v3/v3_ncons.c \
$(CRYPTO_PATH)/x509v3/v3_ocsp.c \
$(CRYPTO_PATH)/x509v3/v3_pci.c \
$(CRYPTO_PATH)/x509v3/v3_pcia.c \
$(CRYPTO_PATH)/x509v3/v3_pcons.c \
$(CRYPTO_PATH)/x509v3/v3_pku.c \
$(CRYPTO_PATH)/x509v3/v3_pmaps.c \
$(CRYPTO_PATH)/x509v3/v3_prn.c \
$(CRYPTO_PATH)/x509v3/v3_purp.c \
$(CRYPTO_PATH)/x509v3/v3_skey.c \
$(CRYPTO_PATH)/x509v3/v3_sxnet.c \
$(CRYPTO_PATH)/x509v3/v3_utl.c \
$(CRYPTO_PATH)/x509v3/v3err.c
local_ssl_src := \
$(SSL_PATH)/s2_meth.c \
$(SSL_PATH)/s2_srvr.c \
$(SSL_PATH)/s2_clnt.c \
$(SSL_PATH)/s2_lib.c \
$(SSL_PATH)/s2_enc.c \
$(SSL_PATH)/s2_pkt.c \
$(SSL_PATH)/s3_meth.c \
$(SSL_PATH)/s3_srvr.c \
$(SSL_PATH)/s3_clnt.c \
$(SSL_PATH)/s3_lib.c \
$(SSL_PATH)/s3_enc.c \
$(SSL_PATH)/s3_pkt.c \
$(SSL_PATH)/s3_both.c \
$(SSL_PATH)/s23_meth.c \
$(SSL_PATH)/s23_srvr.c \
$(SSL_PATH)/s23_clnt.c \
$(SSL_PATH)/s23_lib.c \
$(SSL_PATH)/s23_pkt.c \
$(SSL_PATH)/t1_meth.c \
$(SSL_PATH)/t1_srvr.c \
$(SSL_PATH)/t1_clnt.c \
$(SSL_PATH)/t1_lib.c \
$(SSL_PATH)/t1_enc.c \
$(SSL_PATH)/t1_reneg.c \
$(SSL_PATH)/ssl_lib.c \
$(SSL_PATH)/ssl_err2.c \
$(SSL_PATH)/ssl_cert.c \
$(SSL_PATH)/ssl_sess.c \
$(SSL_PATH)/ssl_ciph.c \
$(SSL_PATH)/ssl_stat.c \
$(SSL_PATH)/ssl_rsa.c \
$(SSL_PATH)/ssl_asn1.c \
$(SSL_PATH)/ssl_txt.c \
$(SSL_PATH)/ssl_algs.c \
$(SSL_PATH)/bio_ssl.c \
$(SSL_PATH)/ssl_err.c \
$(SSL_PATH)/kssl.c
local_c_flags := -DNO_WINDOWS_BRAINDEATH
#######################################
# target
include $(CLEAR_VARS)
include $(LOCAL_PATH)/android-config.mk
LOCAL_SRC_FILES += $(local_crypto_src)
LOCAL_CFLAGS += $(local_c_flags)
LOCAL_C_INCLUDES += $(local_c_includes)
LOCAL_LDLIBS += -lz
ifeq ($(TARGET_ARCH),arm)
LOCAL_SRC_FILES += $(arm_src_files)
LOCAL_CFLAGS += $(arm_cflags)
else
LOCAL_SRC_FILES += $(non_arm_src_files)
endif
ifeq ($(TARGET_SIMULATOR),true)
# Make valgrind happy.
LOCAL_CFLAGS += -DPURIFY
LOCAL_LDLIBS += -ldl
endif
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE:= libcrypto
include $(BUILD_SHARED_LIBRARY)
#######################################
# host shared library
ifeq ($(WITH_HOST_DALVIK),true)
include $(CLEAR_VARS)
include $(LOCAL_PATH)/../android-config.mk
LOCAL_SRC_FILES += $(local_crypto_src)
LOCAL_CFLAGS += $(local_c_flags) -DPURIFY
LOCAL_C_INCLUDES += $(local_c_includes)
LOCAL_SRC_FILES += $(non_arm_src_files)
LOCAL_LDLIBS += -ldl
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE:= libcrypto
include $(BUILD_SHARED_LIBRARY)
endif
#######################################
include $(CLEAR_VARS)
include $(LOCAL_PATH)/android-config.mk
LOCAL_C_INCLUDES += $(local_c_includes)
LOCAL_SRC_FILES += $(local_ssl_src)
LOCAL_SHARED_LIBRARIES += libcrypto
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := libssl
include $(BUILD_SHARED_LIBRARY)
#######################################
include $(CLEAR_VARS)
LOCAL_C_INCLUDES += $(local_c_includes)
LOCAL_SRC_FILES:=\
com_csii_desjni_DESJniUtil.h \
stdafx.h \
com_csii_desjni_DESJniUtil.c
LOCAL_SHARED_LIBRARIES += libssl libcrypto
LOCAL_LDLIBS += -llog
LOCAL_MODULE := DESJni
include $(BUILD_SHARED_LIBRARY)