Mac OS X上的OpenSSL指纹嵌入

时间:2013-06-11 17:51:34

标签: xcode macos openssl dynamic-library

我在Mac OS X上构建了一个动态库,一个.dylib文件,编译得很好。 为了使用.dylib运行应用程序,名为fips_premain.c的文件中的某些函数在'main'之前运行,以检查指纹是否正确嵌入.dylib中。在静态库的情况下,所有人必须做的是在静态库上运行名为incore_macho的可执行文件,指纹将检出。在动态库的情况下,当我使用以下输出获取xcode在dylib上运行incore_macho时,我得到了失败:

/User/.../Debug/libcompute-osx.dylib is not a mach-o executable file (filetype 6 should be 2)

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

incore-macho只能在类型2文件上运行(即MH_EXECUTE,换句话说,可执行文件)。类型6是MH_DYLIB(您正在检查的动态库)。这就是错误信息所说的内容。根据它,它不适合dylibs。

答案 1 :(得分:0)

  

在静态库的情况下,所有人都必须在静态库上运行名为incore_macho的可执行文件,指纹将会检出。

这不完全正确。您无法将FIPS指纹嵌入到静态库中,因为代码和数据将在最终链接到可执行文件期间重定位。您可以在可执行程序或共享对象中嵌入指纹,因为它们已经执行了最终链接。


  

在动态库的情况下,当我获得xcode以使用以下输出在dylib上运行incore_macho时,我得到了失败

OpenSSL Foundation已经解决了这个问题。这是允许更多地使用dylib所需的更改。修改incore_macho.c,如下所示:

第530行:

else if( !(header->filetype == MH_EXECUTE || header->filetype == MH_DYLIB) )
{
    fprintf(stderr, "%s is not a mach-o executable file "
        "(filetype %d, should be MH_EXECUTE or MH_DYLIB)\n",
        inFile->filename, header->filetype);
    return -1;
}

第690行:

else if( !(header->filetype == MH_EXECUTE || header->filetype == MH_DYLIB) )
{
    fprintf(stderr, "%s is not a mach-o executable file "
        "(filetype %d should be MH_EXECUTE or MH_DYLIB)\n",
        inFile->filename, header->filetype );
}

就是这样......在任何地方你都可以找到MH_EXECUTE的测试,也允许MH_DYLIB

或者,从Github下载更新后的incore_macho.c。他们更新incore_macho.c还包括对ARMv7的支持。