GmSSL 添加新算法

最近在做的工作需要给 GMSSL 密码库添加自有的加密算法和 ssl 算法。因此对 GMSSL 做了一些研究,GMSSL 是 OpenSSL 的 一个分支,它增加了包括 SM2、SM3、SM4在内的国密算法,以及国密的 SSL 加密信道,加密套件为 ECDSA-SM2-SM3-SM4。

增加算法头文件

算法头文件中包括了我们需要添加的加密算法和 ssl 算法。

具体需要在include/openssl 目录下新建文件 new_header.h

在 new_header.h 中定义新的加密算法和 ssl 算法。内容大致如下:

1
2
int new_crypto();
int new_ssl();

增加密码算法

在 crypto 目录下新建算法目录 new_crypto
在 new_crypto 目录下新建文件

1
2
3
crypto/new_crypto
+-- build.info
+-- crypto_src.c

build.info 是编译所需的文件,文件内容一般如下所示:

1
2
3
LIBS=../../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
2
3
4
5
#include<openssl/new_header.h>
int new_ssl()
{

}

##修改符号文件
修改 util/mkdef.pl,在对应代码后添加新增头文件new_header:

1
2
3
4
5
6
7
my $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