Android 使用OpenSSL进行3DES加密 c与java互通

来源:互联网 发布:歌曲截段用什么软件 编辑:程序博客网 时间:2024/04/30 10:47

首先看下我们的文件结构:

这里写图片描述

OpenSSL文件

com_csii_desjni_DESJniUtil.c

#include <com_csii_desjni_DESJniUtil.h>#include <android/log.h>#include <string.h>#include <jni.h>#include <unistd.h>#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 <jni.h>//---------------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 __cplusplusextern "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 * <p> * Created on 2016年4月14日 * Modification history * <p> * @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 := cryptoSSL_PATH := ssllocal_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_ASMarm_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.Snon_arm_src_files := $(CRYPTO_PATH)/aes/aes_core.clocal_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.clocal_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.clocal_c_flags := -DNO_WINDOWS_BRAINDEATH######################################## targetinclude $(CLEAR_VARS)include $(LOCAL_PATH)/android-config.mkLOCAL_SRC_FILES += $(local_crypto_src)LOCAL_CFLAGS += $(local_c_flags)LOCAL_C_INCLUDES += $(local_c_includes)LOCAL_LDLIBS += -lzifeq ($(TARGET_ARCH),arm)    LOCAL_SRC_FILES += $(arm_src_files)    LOCAL_CFLAGS += $(arm_cflags)else    LOCAL_SRC_FILES += $(non_arm_src_files)endififeq ($(TARGET_SIMULATOR),true)    # Make valgrind happy.    LOCAL_CFLAGS += -DPURIFY    LOCAL_LDLIBS += -ldlendifLOCAL_MODULE_TAGS := optionalLOCAL_MODULE:= libcryptoinclude $(BUILD_SHARED_LIBRARY)######################################## host shared libraryifeq ($(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.mkLOCAL_C_INCLUDES += $(local_c_includes)LOCAL_SRC_FILES += $(local_ssl_src)LOCAL_SHARED_LIBRARIES += libcryptoLOCAL_MODULE_TAGS := optionalLOCAL_MODULE := libsslinclude $(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.cLOCAL_SHARED_LIBRARIES += libssl libcryptoLOCAL_LDLIBS += -llogLOCAL_MODULE := DESJniinclude $(BUILD_SHARED_LIBRARY)
1 0
原创粉丝点击