2011-09-19 14 views
6

पर libcrypto बहिष्कृत मैं शेर पर libcrypto का उपयोग करने के लिए गया था और ऐसा लगता है कि पूरे एपीआई को हटा दिया गया है। man pages 10.6.6 के बाद से अपडेट नहीं किया गया है।मैक ओएस एक्स 10.7 (शेर)

क्या किसी को पता है कि लिबरक्रिप्टो के प्रतिस्थापन शेर पर क्या है?

उत्तर

7

libcrypto ओपनएसएसएल का हिस्सा है, जिसने बहुत कुछ नहीं बदला है। यह दूर नहीं जा रहा है, लेकिन ऐप्पल ने सिफारिश की है कि डेवलपर्स ओपनएसएसएल का उपयोग करने के बजाय अपने CDSA (Common Data Security Architecture) लाइब्रेरी का उपयोग करें।

+0

धन्यवाद :) इससे मुझे सुरक्षा/SecKey.h और संबंधित कार्यों का सामना करना पड़ा जो ऐसा लगता है कि उन्हें वही करना है जो मुझे चाहिए। – yarpa

+0

असल में, सेककी केवल आधा समाधान है। यह मुख्य पीढ़ी को संभालता है, लेकिन ऐसा लगता है कि किसी भी वास्तविक क्रिप्टो ऑपरेशंस का समर्थन नहीं करता है (हालांकि यह आईओएस संस्करण की तरह दिखता है, लेकिन मैं शेर को देख रहा हूं)। सीडीएसए को शेर में बहिष्कृत किया गया है, इसलिए मूल प्रश्न अभी भी खुला है। (Deprecation नोटिस के लिए Security.framework/cssmtype.h देखें)। शिकार जारी है। – yarpa

3

ठीक है, यहां मेरे अपने प्रश्न का उत्तर दें।

10.7 सुरक्षा.फ्रेमवर्क में ट्रांसफॉर्म प्रस्तुत किया गया, जो SecKey के साथ निकटता से बंधे हैं। ट्रांसफॉर्म आपको एन्कोडिंग (जैसे बेस 64), डाइजेस्ट, साइनिंग/सत्यापन और एन्क्रिप्शन समेत कई चीजें करने देता है।

यहां कुछ उदाहरण हस्ताक्षर करने का एक उदाहरण दिया गया है। सभी परिवर्तन एक ही बुनियादी पैटर्न का पालन करते हैं; यदि आप सुरक्षा के लिए शीर्षलेखों में देखते हैं। फ्रेमवर्क आपको प्रत्येक प्रकार के परिवर्तन के लिए एक शीर्षलेख दिखाई देगा। ये 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); 
7

मामले में आप जानते हैं कि आप क्या कर रहे हैं और तुम सिर्फ इन चेतावनियों से छुटकारा पाने के लिए चाहते हैं, एक तरह से प्रासंगिक हेडर को

#pragma GCC diagnostic ignored "-Wdeprecated-declarations" 

जोड़ने के लिए है - मेरे मामले/usr में/शामिल/openssl/crypto.h और /usr/include/openssl/md5.h शामिल करें।

+1

सिस्टम हेडर को पैच करने के बजाय, जहां आप वास्तव में openssl का उपयोग करते हैं, इसे जोड़ना बेहतर होता है –

संबंधित मुद्दे