Question

I am looking to make use of MD5 or SHA-1 in my iOS application targeted at iOS 4 and later. I use the CC_MD5() and CC_SHA1() functions from CommonCrypto/CommonDigest.h. It seems to work fine on an iPhone running iOS 4.1 and in the iPhone 4.0 simulator, but I am concerned because the functions are declared as follows in the iOS 5 SDK that comes with XCode 4.2:

extern unsigned char *CC_MD5(const void *data, CC_LONG len, unsigned char *md)
__OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_5_0);

extern unsigned char *CC_SHA1(const void *data, CC_LONG len, unsigned char *md)
__OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_5_0);

This seems to indicate that the functions are only available with iOS 5 and later.

Are these functions allowed in an iOS 4 application, and if so, is there any official reference to document that fact?

Was it helpful?

Solution

In the header file at path : /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/include/CommonCrypto/CommonDigest.h

we can see :

extern unsigned char *CC_MD5(const void *data, CC_LONG len, unsigned char *md)
__OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_2_0);

So, Apple now tell us it is supported :-)

OTHER TIPS

CC_SHA1 works as well, I've been using it with 4.3 for a while now.

CC_MD5 does work in iOS 4.3. I think it must have been undocumented before iOS 5 or something.

The best way to know if any functions or class methods are available is to set your project deployment target to the lowest ios version you want your app to work on, and test on a real device (or in the iPhone simulator but i think real device is the best solution) running through the deployment target version.

If it's unavailable, your app will crash and debugger will let you know which functions are not usable on this iOS version. You will have to test with a greater version.

If it work on a real device, these functions are available. :)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top