openssl使用错误"error: storage size of 'ctx' isn't known"

前言

SSL是Secure Sockets Layer(安全套接层协议)的缩写,openssl是一套开源的库,以便使用者进行安全通信,避免窃听,识别身份。
其中,ssl的HMAC是计算MAC的一种方法,有密钥参与计算,不采用HASH算法,对数据做hash计算,并用密钥加密,计算出MAC数值。

测试

源码请看传送门:https://github.com/openssl/openssl
把openssl编译成动态库libssl.so后以便工程引用。
部分代码片段如下:

HMAC_CTX ctx;
H_Mac mac;

mac.accessKey = ACCESS_KEY;
mac.secretKey = SECRET_KEY;

HMAC_CTX_init(&ctx);
HMAC_Init_ex(&ctx, mac.secretKey, strlen(mac.secretKey), EVP_sha1(), NULL);
HMAC_Update(&ctx, path, strlen(path));
HMAC_Update(&ctx, "\n", 1);

if (addlen > 0) {
	HMAC_Update(&ctx, addition, addlen);
} 

HMAC_Final(&ctx, digest, &dgtlen);
HMAC_CTX_cleanup(&ctx);

编译:
openssl使用错误
编译后出现错误:“error: storage size of ‘ctx’ isn’t known”,“implicit declaration of function ‘HMAC_CTX_init’”,看字面意思是类型不完整的不识别的意思。打开openssl/hmac.h,明明是有H_MAC类型的定义,所以用source Insight进行源码通篇搜索,发现使用时HMAC_CTX *ctx;,且没有HMAC_CTX_init函数了。到此很明显了,openssl函数由于版本不同的问题,已经修改了函数定义。
修改代码如下:

HMAC_CTX *ctx;

mac.accessKey = QINIU_ACCESS_KEY;
mac.secretKey = QINIU_SECRET_KEY;

/* Append HMAC to data */
ctx = HMAC_CTX_new();

HMAC_Init_ex(ctx, mac.secretKey, strlen(mac.secretKey), EVP_sha1(), NULL);
HMAC_Update(ctx, path, strlen(path));
HMAC_Update(ctx, "\n", 1);
HMAC_Update(ctx, addition, addlen);

HMAC_Final(ctx, digest, &dgtlen);
HMAC_CTX_free(ctx);

预料之中,编译成功,可以愉快的使用了。其中,替换如下:
HMAC_CTX ctx -> HMAC_CTX *ctx,
HMAC_CTX_init(&ctx) -> HMAC_CTX_new(),
HMAC_CTX_cleanup(&ctx) -> HMAC_CTX_free(ctx)

OK, openssl简单介绍到此结束,喜欢的朋友可以点个赞~

作者:费码程序猿
欢迎技术交流:QQ:255895056
转载请注明出处

你可能感兴趣的:(Linux)