Я пытаюсь извлечь необработанные байты закрытого ключа, хранящегося в SecKeyRef
в OS X. Как мне поступить?
Я прочитал это ~7-летняя ветка в дискуссионных списках Apple CDSA, но не нашла ничего более свежего.У меня нет той же проблемы, что и у исходного постера в этой ветке, но это может быть из-за того, что я поступил неправильно.Вот что я сейчас пытаюсь (безрезультатно):
SecKeyRef keyRef = ...;
CSSM_KEY *cssmKey = NULL;
CSSM_WRAP_KEY wrappedKey = {0};
CSSM_CSP_HANDLE cspHandle = 0;
CSSM_CC_HANDLE ccHandle = 0;
CSSM_ACCESS_CREDENTIALS *creds = NULL;
SecKeyGetCredentials(keyRef, CSSM_ACL_AUTHORIZATION_EXPORT_WRAPPED, kSecCredentialTypeDefault, &creds);
// Tried the following, too.
//CSSM_ACCESS_CREDENTIALS *creds = malloc(sizeof(CSSM_ACCESS_CREDENTIALS));
//memset(creds, 0, sizeof(CSSM_ACCESS_CREDENTIALS));
SecKeyGetCSSMKey(keyRef, &cssmKey);
SecKeyGetCSPHandle(keyRef, &cspHandle);
CSSM_CSP_CreateSymmetricContext(cspHandle,
CSSM_ALGID_NONE,
// Have also tried CSSM_ALGMODE_WRAP
CSSM_ALGMODE_NONE,
creds,
NULL,
NULL,
CSSM_PADDING_NONE,
0,
&ccHandle);
CSSM_WrapKey(ccHandle,
creds,
key,
NULL,
&wrappedKey);
Код ошибки, возвращаемый CSSM_WrapKey
, равен CSSMERR_CSP_INVALID_KEYATTR_MASK
.Есть идеи?