SecKeyRawSign osx with EC Cert



我使用的是Lion和Xcode 4.1。

SecKeyRawSign在OSX中没有文档,但它可以被调用并成功签署RSA证书,但在EC证书中失败。

SecKeyRawSign方法返回-50,即ec cert-384的无效参数。

SecKeyRawSign可以用于OSX和EC证书吗?如果是,填充参数是什么?

提前感谢。

SecKeyRawSign是Mac OS 10.6和10.7中的私有函数,所以你不应该使用它。它在ECC证书上的问题可能只是它没有(尚未?)公开的原因之一。

10.7中用于数据签名的官方高级API是安全转换中的SecSignTransformCreate。它应该自动使用合适的摘要算法;如果没有,只需将kSecDigestTypeAttributekSecDigestLengthAttribute设置为所需的任何值。我想填充算法是不可配置的。

在10.6或以下版本中,必须使用CDSA。首先,使用CSSM_CSP_CreateSignatureContext创建一个上下文。签名算法为CSSM_ALGID_SHA512WithECDSA(或类似);您可以从SecKeyGetCSPHandleSecKeyGetCSSMKeySecKeyGetCredentials中获得其他参数。一旦有了签名上下文,就可以使用CSSM_SignData对数据进行签名。摘要算法应为CSSM_ALGID_NONE

Thomas Pornin对另一个问题的回答最好地解释了填充

@Fnord

感谢您的回复。我写了下面的代码:

CFDataRef 
CreateSignature (SecKeyRef privateKeyRef, CFDataRef plaintext, CFErrorRef &error)
{
    SecTransformRef signingTransform = SecSignTransformCreate(privateKeyRef, error);
    if (signingTransform == NULL)
        return NULL;
    Boolean success = SecTransformSetAttribute(signingTransform,
                                               kSecTransformInputAttributeName,
                                               plaintext,
                                               error);
    if (!success) {
        CFRelease(signingTransform);
        return NULL;
    }
    CFDataRef signature = SecTransformExecute(signingTransform, error);
    CFRetain(signature);
    CFRelease(signingTransform);
    return signature;
}

最新更新