1

Mac OS X10.7でソースファイルの1つをコンパイルし、これらの非推奨の警告を受け取ります。

xxx_evp.c:135:5: 'EVP_MD_CTX_init' is deprecated
xxx_evp.c:137:9: 'EVP_DigestInit_ex' is deprecated
xxx_evp.c:177:9: 'EVP_DigestUpdate' is deprecated
xxx_evp.c:227:13: 'EVP_DigestFinal_ex' is deprecated
xxx_evp.c:235:5: 'EVP_MD_CTX_cleanup' is deprecated

からMD5関数を使用していopenssl/md5.hて、次のようなOpenSSL呼び出しのCommonCryptoバージョンに切り替えることができたOpenSSL非推奨警告の別のセットがありました。

#if defined(__APPLE__)
#  define COMMON_DIGEST_FOR_OPENSSL
#  include <CommonCrypto/CommonDigest.h>
#else
#  include <openssl/md5.h>
#endif

EVP_*しかし、これらの呼び出しに関連するOpenSSLの互換性については何もわかりません。EVP_*これらのOpenSSL呼び出しに対してOSX10.7で「無料」の互換性サポートを取得するために私ができる同様のことはありますか?

4

2 に答える 2

1

のCommonCryptoヘッダーファイルを調べましたが、/usr/include/CommonCrypto/OpenSSLとの互換性に注意するのは。だけですCommonDigest.h。このヘッダーファイルがコードにインクルードされる前に#defineシンボルCOMMON_DIGEST_FOR_OPENSSLが定義されると、次のクラスのOpenSSL関数が同等のCommonCryptoにマップされます。

  • MD2_xxxMD4_xxxおよびMD5_xxx
  • SHA_xxx、、、、、およびSHA1_xxx_ SHA224_xxx_ SHA256_xxx_SHA384_xxxSHA512_xxx

少なくともCommonCryptoの一部として提供されている、OpenSSLEVP_xxx関数のそのようなマッピングはないようです。

于 2012-08-30T00:33:44.183 に答える
0

MD または SHA ハッシュのいずれかを使用している場合は、CommonDigest.h を含める前に COMMON_DIGEST_FOR_OPENSSL を定義することにより、OpenSSL との互換性を確保できます。したがって、すべて EVP_DigestInit_ex() 関数呼び出しの 2 番目のパラメーターに依存します。例として、SHA1 と 6 つの「EVP_...」呼び出しを使用する Mac App Store 署名コードは、次のコードに置き換えることができます。

#define COMMON_DIGEST_FOR_OPENSSL
#include <CommonCrypto/CommonDigest.h>

    unsigned char digest[CC_SHA1_DIGEST_LENGTH];
    if (CC_SHA1([input bytes], [input length], digest)) {
        NSData *newHash = [NSData dataWithBytes:digest length:CC_SHA1_DIGEST_LENGTH];
    }
于 2012-10-18T14:31:11.043 に答える