红联Linux门户
Linux帮助

在OpenSSL中添加自定义加密算法

发布时间:2015-08-23 16:57:32来源:linux网站作者:红孩儿你好

一、简介

本文以添加自定义算法EVP_ssf33为例,介绍在OpenSSL中添加自定义加密算法的方法


二、步骤

1、修改crypto/object/objects.txt,注册算法OID,如下:

rsadsi 3 255: SSF33: ssf33


2、进入目录:crypto/object/,执行如下命令,生成算法的声明

perl objects.pl objects.txt obj_mac.num obj_mac.h


3、在crypto/evp/下添加e_ssf33.c,内容如下

#include <stdio.h>
#include "cryptlib.h"
#ifndef OPENSSL_NO_RC4
#include <openssl/evp.h>
#include <openssl/objects.h>
#include <openssl/rc4.h>
  
/* FIXME: surely this is available elsewhere? */
#define EVP_SSF33_KEY_SIZE  16
  
typedef struct
{
RC4_KEY ks; /* working key */
} EVP_SSF33_KEY;
  
#define data(ctx) ((EVP_SSF33_KEY *)(ctx)->cipher_data)
  
static int ssf33_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv,int enc);
  
static int ssf33_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, unsigned int inl);
  
static const EVP_CIPHER ssf33_evp_cipher=
{
NID_ssf33,
1,
EVP_SSF33_KEY_SIZE,
0,
EVP_CIPH_VARIABLE_LENGTH,
ssf33_init_key,
ssf33_cipher,
NULL,
sizeof(EVP_SSF33_KEY),
NULL,
NULL,
NULL,
NULL
};
  
const EVP_CIPHER *EVP_ssf33(void)
{
return(&ssf33_evp_cipher);
}
  
static int ssf33_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc)
{
RC4_set_key(&data(ctx)->ks,EVP_CIPHER_CTX_key_length(ctx), key);
  
return 1;
}
  
static int ssf33_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, unsigned int inl)
{
RC4(&data(ctx)->ks,inl,in,out);
  
return 1;
}

#endif


4、修改crypto/evp/evp.h,添加对算法的声明,如下
const EVP_CIPHER *EVP_ssf33(void);


5、修改crypto/evp/c_allc.c,在OpenSSL_add_all_ciphers函数中使用EVP_add_cipher注册加密函数,如下
EVP_add_cipher(EVP_ssf33());


6、修改crypto/evp/Makefile,如下

在OpenSSL中添加自定义加密算法


7、完成。


Linux下使用OpenSSL生成证书:http://www.linuxdiyf.com/linux/11951.html

加密、解密,以及OpenSSL建立私有CA:http://www.linuxdiyf.com/linux/11785.html

Linux下OpenSSL安装图文详解:http://www.linuxdiyf.com/linux/8744.html