Как я могу использовать libssl с Какао на Lion?

Я ссылаюсь на сборку статической библиотеки из исходного кода, включая локальные заголовки, а не заголовки в /usr/include, но списки Xcode все еще могут функционировать как устаревшие, и он не может найти символы. Кто-нибудь получил libssl, работающий над Lion?

2 ответа

Решение

Да, функции SSL устарели на Lion.

Вместо этого вы должны использовать вещи из CommonCrypto. По сути, он имеет замены для всех функций SSL, и они обычно совместимы.

Например, если вы используете MD5 (openssl/md5.h), вы получите эти устаревшие предупреждения. Вы можете включить CommonDigest и использовать функции CC_MD5_* вместо старых функций MD5_ *.

Вы также должны иметь возможность создавать заголовок совместимости для поддержки других систем. Что-то вроде:

#if defined( __APPLE__ )

    #include <CommonCrypto/CommonDigest.h>

    #ifdef MD5_DIGEST_LENGTH

        #undef MD5_DIGEST_LENGTH

    #endif

    #define MD5_Init            CC_MD5_Init
    #define MD5_Update          CC_MD5_Update
    #define MD5_Final           CC_MD5_Final
    #define MD5_DIGEST_LENGTH   CC_MD5_DIGEST_LENGTH
    #define MD5_CTX             CC_MD5_CTX

#else

    #include <openssl/md5.h>

#endif

Это только для MD5, но вы должны быть в состоянии сделать некоторые для большинства других функций.

РЕДАКТИРОВАТЬ

CommonCrypto поддерживает только симметричное шифрование через CCCryptor.

Если вам нужно асимметричное шифрование, вы должны использовать платформу безопасности.

Обязательно ознакомьтесь с Руководством по программированию преобразований безопасности.

Для тех, кто придет после меня, Apple Security Framework имеет то, что вы ищете, особенно SecKeyGeneratePair, SecItemCopyMatching (чтобы получить ключи от цепочки для ключей), SecItemExport (для экспорта в формат PEM), и SecKeyCreateFromData (сделать ключ из NSData). Подпишите и убедитесь, что оба сделаны с SecTransforms. Apple имеет разумную документацию для всех этих функций, если вы ищете правильные термины.

Другие вопросы по тегам