在OpenSSL库include文件中找不到i2c_ASN1_整数函数

在OpenSSL库include文件中找不到i2c_ASN1_整数函数,c,macos,openssl,C,Macos,Openssl,我在MacOS上编译OpenSSL 1.1.0h,遇到了一个问题,在任何包含文件中都没有定义函数int i2c\u ASN1\u INTEGER(ASN1\u INTEGER*a,unsigned char**pp)。通过查看OpenSSL源代码,我看到该函数是在asn1_locl.h和a_int.c文件中定义的,但它没有在编译库公共接口中公开 基本上,我在玩一些苹果应用内购买收据验证示例,它们都假设这个函数是在asn1.h中定义的。i2c_ASN1_INTEGER用于/*将ASN1整型内容八位

我在MacOS上编译OpenSSL 1.1.0h,遇到了一个问题,在任何包含文件中都没有定义函数
int i2c\u ASN1\u INTEGER(ASN1\u INTEGER*a,unsigned char**pp)
。通过查看OpenSSL源代码,我看到该函数是在asn1_locl.h和a_int.c文件中定义的,但它没有在编译库公共接口中公开

基本上,我在玩一些苹果应用内购买收据验证示例,它们都假设这个函数是在asn1.h中定义的。i2c_ASN1_INTEGER用于
/*将ASN1整型内容八位字节转换为ASN1_整型结构*/

我正在使用以下命令编译库:

./Configure darwin64-x86_64-cc
make depend
make
当我使用这个过程构建OpenSSL 1.0.2o时,正如预期的那样,函数在asn1.h中定义

通过查看OpenSSL源代码,我看到该函数是在asn1_locl.h和a_int.c文件中定义的,但它没有在编译库公共接口中公开

直接从公共界面中删除重要功能有:

本页讨论OpenSSL 1.1版的API更改。这个 API更改的总体目标是使许多数据结构不透明 提交申请。数据隐藏提供了许多好处:

  • 可以在不破坏二进制兼容性的情况下更改字段
  • 应用程序更加健壮,并且可以更加保证正确性
  • 例如,它有助于确定需要哪些(新的)访问器和设置器
同时支持OpenSSL 1.0.2(及以下版本)和OpenSSL的应用程序 1.1.0(及以上)应访问下面的部分兼容性层。兼容性层提供OpenSSL 1.1.0功能,如 RSA_get0_密钥,用于OpenSSL 1.0.2客户端。源代码是可用的 下载如下

如果您找到用于OpenSSL 1.0.2的库或程序 但OpenSSL 1.1.0不再适用,请将详细信息添加到 下面的讨论在

关于

他们都假设这个函数是在asn1.h中定义的


我甚至可以说,对于OpenSSL v1.1.0来说,这不是一个好的假设。

对于Apple收据解析,因为我们不使用大整数(如BIGNUM),这里有一个小函数可以将整数解析为长整数

long long longLongFromASN1Content(const uint8_t *ptr, int length) {
assert(length <= sizeof(long long));

long long v = 0;
for (int i = 0; i< length; i++) {
    if (i > 0) v <<= 8;
    v |= ptr[i];
}
return v;
longfromasn1content(const uint8\u t*ptr,int-length){

assert(length 0)v它是在1.1.0中定义的:。这是一个内部头文件-因此您是正确的。它已从公共API中删除。您是否找到解决此问题的方法?