C++ 相当于“ippsRSAVerify_PKCS1v15”的openssl`

C++ 相当于“ippsRSAVerify_PKCS1v15”的openssl`,c++,c,openssl,intel-ipp,C++,C,Openssl,Intel Ipp,我正在使用英特尔IPP库将一些代码移植到OpenSSL(苹果硅端口) 我有一些代码检查XML文件签名,如下所示: <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> <SignedInfo> <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315&

我正在使用英特尔IPP库将一些代码移植到OpenSSL(苹果硅端口)

我有一些代码检查XML文件签名,如下所示:

<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
    <SignedInfo>
        <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
        <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
        <Reference URI="">
            <Transforms>
                <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
            </Transforms>
            <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
            <DigestValue>j/cpRUOeyAoW+xF+RzK5rizbWyA=</DigestValue>
        </Reference>
    </SignedInfo>
    <SignatureValue>4dCoh+dB9/YY3pL1wWi6+3h5z52a0R230a4RQraJJFHSys5jndXlYMC3vSz7f2SO0o1AiYFPiSB5wr6OMUlzvTH7StQsG+NcRIJ2OaScjI3rEj497qfeCld+Ko656UfW5aLwxOtG1BW1XVWXJ4eFbD5lgP2161Tw0wV2BdUJlnc=</SignatureValue>
</Signature>

j/cpRUOeyAoW+xF+RzK5rizbWyA=
4dCoh+dB9/YY3pL1wWi6+3H5Z52A0R230A4RQRAJFHSYS5JNDXLYMC3VSZ7F2SO0O1AIFPISB5WR6OMULZVTH7STQSG+NCRIJ20ASCJI3REJ497QFECLD+Ko656UfW5aLwxOtG1BW1XVWXJ4eFbD5lgP2161Tw0wV2BdUJlnc=
似乎符合此规范:


当前实现使用带有
ippHashAlg_SHA1
hashAlg参数的调用。我曾尝试使用OpenSSL,但没有成功。我想我没有给
RSA\u Verify
正确的数据类型,但是我很难理解RSA签名的不同层次。在OpenSSL中是否有IPP的直接等价物 函数,还是我应该自己使用OpenSSL更原始的函数重新实现更多步骤?

因此,经过更多的实验,我意识到,
ippsrverify\u PCKS1v15
RSA\u Verify
对于各自的
pMsg
m
参数预期会有不同的数据。Intel函数希望获得要签名/验证的整个消息,并在内部计算SHA1摘要(或其他摘要),而OpenSSL函数希望获得要签名/验证的消息摘要,而不是原始消息本身