iOS SecItemCopy ¿Cómo get el formatting de key pública RSA?

Estoy intentando extraer una key pública RSA de 1024 bits de un par de keys ya generado (dos SecKeyRef s), para enviarlo por el cable. Todo lo que necesito es un par simple (modulus, exponent) , que debería ocupar exactamente 131 bytes (128 para el module y 3 para el exponente).

Sin embargo, cuando NSData información de la key como un object NSData , obtengo 140 bits en lugar de 131. Aquí hay un resultado de ejemplo:

 <30818902 818100d7 514f320d eacf48e1 eb64d8f9 4d212f77 10dd3b48 ba38c5a6 ed6ba693 35bb97f5 a53163eb b403727b 91c34fc8 cba51239 3ab04f97 dab37736 0377cdc3 417f68eb 9e351239 47c1f98f f4274e05 0d5ce1e9 e2071d1b 69a7cac4 4e258765 6c249077 dba22ae6 fc55f0cf 834f260a 14ac2e9f 070d17aa 1edd8db1 0cd7fd4c c2f0d302 03010001> 

Después de reintentar la generación de keys un par de veces y comparar los objects NSData resultantes, los bytes que permanecen iguales para todas las keys son los primeros 7:

 <30818902 818100> 

Los últimos tres bytes parecen el exponente (65537, un valor común). También hay dos bytes entre el "module" y el exponente:

 <0203> 

¿Puede alguien con más experiencia criptográfica ayudarme a identificar qué encoding es esta? DER? ¿Cómo decodificar correctamente el module y el exponente?

Intenté eliminar manualmente el module y el exponente usando

 NSData* modulus = [keyBits subdataWithRange:(NSRange){ 7, 128 }]; NSData* exponent = [keyBits subdataWithRange:(NSRange){ 7 + 128 + 2, 3 }]; 

pero recibo errores cuando bash descifrar datos que el host remoto codificó con esa "key".

EDITAR:

Aquí hay una esencia de la solución que acabé usando para descomprimir el blob de RSA: https://gist.github.com/vl4dimir/6079882

Suponiendo que desea que la solución funcione en iOS, eche un vistazo a este hilo . La publicación confirma que la encoding es DER y muestra cómo extraer el exponente y el module del object NSData que comenzó.

Hay otra solución que no funcionará en iOS, pero funcionará en los sistemas de escritorio (incluido MacOS X) que tienen OpenSSL instalado en este hilo . Incluso si está buscando la solución solo para iOS, puede usar esto para verificar que su código funcione correctamente.