libcrypto устарела в Mac OS X 10.7 (Lion) - PullRequest
       2

libcrypto устарела в Mac OS X 10.7 (Lion)

6 голосов
/ 19 сентября 2011

Я только что использовал libcrypto на Lion, и похоже, что весь API устарел. справочные страницы не обновлялись с 10.6.6.

Кто-нибудь знает, какая замена для libcrypto на Lion?

Ответы [ 3 ]

7 голосов
/ 10 марта 2012

Если вы знаете, что делаете, и просто хотите избавиться от этих предупреждений, одним из способов является добавление

#pragma GCC diagnostic ignored "-Wdeprecated-declarations" 

для соответствующих заголовков - в моем случае /usr/include/openssl/crypto.h и /usr/include/openssl/md5.h.

7 голосов
/ 19 сентября 2011

libcrypto является частью OpenSSL, которая не сильно изменилась. Это не уходит, но Apple рекомендует разработчикам использовать их CDSA (Common Data Security Architecture) библиотеку, а не использовать OpenSSL напрямую.

3 голосов
/ 20 сентября 2011

Хорошо, отвечаю на мой вопрос здесь.

10.7 представил Transforms into Security.framework, тесно связанный с SecKey. Преобразования позволяют вам делать множество вещей, включая кодирование (например, base64), дайджесты, подписывание / проверка и шифрование.

Вот пример того, как подписать некоторые данные. Все преобразования следуют одному и тому же базовому шаблону; если вы загляните в Headers for Security.framework, вы увидите заголовок для каждого типа преобразования. Это из SecTransformReadTransform.h и SecSignVerifyTransform.h. Я опускаю здесь любой код проверки или очистки кода для простоты.

    NSData *dataToBeSigned = ;// Get this from somewhere. We set sha1 attributes down below, so this should be a sha1 digest
    SecKeyRef *key = ;// Get this from somewhere; keychain or SecItemImport
    SecGroupTransformRef group = SecTransformCreateGroupTransform();
    CFReadStreamRef readStream = NULL;
    SecTransformRef readTransform = NULL;
    SecTransformRef signingTransform = NULL;

    // Setup our input stream as well as an input transform
    readStream = CFReadStreamCreateWithBytesNoCopy(kCFAllocatorDefault,
                                                    [dataToBeSigned bytes],
                                                    [dataToBeSigned length],
                                                    kCFAllocatorNull); // Pass Null allocator so it doesn't free NSData's bytes

    readTransform = SecTransformCreateReadTransformWithReadStream(readStream);

    // Setup a signing transform
    signingTransform = SecSignTransformCreate(key, NULL);
    SecTransformSetAttribute(signingTransform, kSecInputIsDigest, kCFBooleanTrue, NULL);
    SecTransformSetAttribute(signingTransform, kSecDigestTypeAttribute, kSecDigestSHA1, NULL);

    // Connect read and signing transform; Have read pass its data to the signer
    SecTransformConnectTransforms(readTransform, kSecTransformOutputAttributeName,
                                    self.signingTransformRef, kSecTransformInputAttributeName,
                                    group, NULL);

    // Execute the sequence of transforms (group)
    // The last one in the connected sequence is the return value
    NSData *signature = SecTransformExecute(group, NULL);
...