SecKeyRawSign
- это закрытая функция в Mac OS 10.6 и 10.7, поэтому ее не следует использовать.Его проблема с сертификатами ECC может быть просто одной из причин, по которой он (еще?) Не был обнародован.
Официальным высокоуровневым API для подписи данных в 10.7 является SecSignTransformCreate
в Security Transforms .Следует автоматически использовать подходящий алгоритм дайджеста;если нет, просто установите kSecDigestTypeAttribute
и kSecDigestLengthAttribute
на то, что вам нужно.AFAIK алгоритм заполнения не настраивается.
На 10.6 или ниже, вы должны использовать CDSA.Сначала вы создаете контекст с CSSM_CSP_CreateSignatureContext
.Алгоритм подписи CSSM_ALGID_SHA512WithECDSA
(или аналогичный);Вы можете получить другие аргументы от SecKeyGetCSPHandle
, SecKeyGetCSSMKey
и SecKeyGetCredentials
.Когда у вас есть контекст подписи, вы подписываете свои данные с помощью CSSM_SignData
.Алгоритм дайджеста должен быть CSSM_ALGID_NONE
.
Заполнение лучше всего объясняется ответом Томаса Порнина на другой вопрос .