最近在做的工作需要给 GMSSL 密码库添加自有的加密算法和 ssl 算法。因此对 GMSSL 做了一些研究,GMSSL 是 OpenSSL 的 一个分支,它增加了包括 SM2、SM3、SM4在内的国密算法,以及国密的 SSL 加密信道,加密套件为 ECDSA-SM2-SM3-SM4。
增加算法头文件
算法头文件中包括了我们需要添加的加密算法和 ssl 算法。
具体需要在include/openssl 目录下新建文件 new_header.h
在 new_header.h 中定义新的加密算法和 ssl 算法。内容大致如下:1
2int new_crypto();
int new_ssl();
增加密码算法
在 crypto 目录下新建算法目录 new_crypto
在 new_crypto 目录下新建文件
1 | crypto/new_crypto |
build.info 是编译所需的文件,文件内容一般如下所示:1
2
3LIBS=../../libcrypto
SOURCE[../../libcrypto]=\
crypto_src.c
crypto_src.c 为算法的具体代码实现,内容大致如下:1
2
3
4
5#include<openssl/new_header.h>
int new_crypto()
{
}
增加 ssl 算法文件
在 ssl目录下新建ssl算法代码文件ssl_new.c,内容大致如下:
1 | #include<openssl/new_header.h> |
##修改符号文件
修改 util/mkdef.pl,在对应代码后添加新增头文件new_header:1
2
3
4
5
6
7my $ssl="include/openssl/ssl.h";
$ssl.=" include/openssl/tls1.h";
$ssl.=" include/openssl/new_header.h";
my $crypto ="include/openssl/crypto.h";
$crypto.=" include/internal/o_dir.h";
$crypto.=" include/internal/new_header.h";
##修改 Configure 文件
修改 Configure 文件,将密码算法添加到编译系统中。1
2
3
4
5
6
7
8
9
10
11
12$config{sdirs} = [
"objects",
"md2", "md4", "md5", "sha", "mdc2", "hmac", "ripemd", "whrlpool", "poly1305", "blake2",
"des", "aes", "rc2", "rc4", "rc5", "idea", "bf", "cast", "camellia", "seed", "chacha", "modes",
"bn", "ec", "rsa", "dsa", "dh", "dso", "engine",
"buffer", "bio", "stack", "lhash", "rand", "err",
"evp", "asn1", "pem", "x509", "x509v3", "conf", "txt_db", "pkcs7", "pkcs12", "comp", "ocsp", "ui",
"cms", "ts", "srp", "cmac", "ct", "async", "kdf",
"sm3", "sms4", "kdf2", "ecies", "ffx", "sm2", "paillier", "cpk", "otp", "gmapi", "ec2",
"bfibe", "bb1ibe", "sm9", "saf", "sdf", "skf", "sof", "zuc",
"serpent", "speck", "base58","new_crypto"
];
更新符号文件
运行如下指令,就会将新定义的密码算法和 SSL 算法中新增的函数添加到符号文件中。
1 | make update |