Android 使用OpenSSL进行3DES加密 c与java互通
2016-07-11 16:32
691 查看
首先看下我们的文件结构:
OpenSSL文件
com_csii_desjni_DESJniUtil.c
com_csii_desjni_DESJniUtil.h
Base64.java
DESJniUtil.java
MainActivity.java
activity_main.xml
Android.mk
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 __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 * <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 := 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)
相关文章推荐
- Android 自定义View (四) 视频音量调控
- Android 渐变色
- Android进阶之在不同版本间兼容性处理
- Android PullToRefresh (ListView GridView 下拉刷新) 使用详解
- Android快速开发系列 10个常用工具类
- Android技术进阶的要素——Android属性动画
- 【Android】无法发送短信的问题
- Android Studio 插件大全
- Android Studio进行NDK开发笔记
- android之属性动画和布局动画详解
- Android之解决全屏切换非全屏的页面压缩问题
- Android 4.4 沉浸栏效果实现
- Android 隐藏状态栏
- android高级编程的设计心得
- 单例模式【Singleton Pattern】
- Android5.0双卡分析
- AndroidStudio导入项目到VisualSVN Server并忽略(ignore)相关文件详细步骤
- Android异常-socket连接失败--connect failed: EHOSTUNREACH (No route to host)
- Android Studio .gitignore 配置
- Android的startActivityForResult用法简单介绍