simplemente fui a usar libcrypto en León y parece que todo el API ha quedado en desuso. El man pages no se ha actualizado desde 10.6.6.libcrypto desaprobado en Mac OS X 10.7 (Lion)
¿Alguien sabe cuál es el reemplazo para libcrypto está en León?
simplemente fui a usar libcrypto en León y parece que todo el API ha quedado en desuso. El man pages no se ha actualizado desde 10.6.6.libcrypto desaprobado en Mac OS X 10.7 (Lion)
¿Alguien sabe cuál es el reemplazo para libcrypto está en León?
libcrypto es parte de OpenSSL, que no ha cambiado mucho. No va a desaparecer, pero Apple recomienda que los desarrolladores utilicen su biblioteca CDSA (Common Data Security Architecture) en lugar de usar OpenSSL directamente.
Ok, respondiendo mi propia pregunta aquí.
10,7 introducido se transforma en Security.framework, que está estrechamente relacionado con SecKey. Las transformaciones le permiten hacer muchas cosas, incluida la codificación (por ejemplo, base64), resúmenes, firma/verificación y cifrado.
Aquí hay un ejemplo de cómo firmar algunos datos. Todas las transformaciones siguen el mismo patrón básico; si miras en el marco Headers for Security, verás un encabezado para cada tipo de transformación. Estos son de SecTransformReadTransform.hy SecSignVerifyTransform.h. Estoy omitiendo cualquier código de comprobación o limpieza de errores aquí por simplicidad.
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);
En caso de que usted sabe lo que está haciendo y lo que desea es deshacerse de estas advertencias, una forma es añadir
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
a las cabeceras pertinentes - en mi caso/usr/include/openssl/crypto.h y /usr/include/openssl/md5.h.
Es mejor agregarlo donde realmente usa openssl, en lugar de parchear los encabezados del sistema –
Gracias :) Eso me llevó a Security/SecKey.h y funciones relacionadas que parecen que hacen exactamente lo que necesito. – yarpa
En realidad, SecKey es solo la mitad de la solución. Maneja la generación de claves, pero no parece ser compatible con ninguna operación de cifrado real (aunque parece que la versión de iOS sí lo hace, pero estoy mirando a Lion). CDSA está en desuso en Lion, por lo que la pregunta original sigue abierta. (Consulte Security.framework/cssmtype.h para obtener un aviso de obsolescencia). La caza continúa. – yarpa