He creado un par de claves usando SecKeyGeneratePair
. Ahora me gustaría pasar la clave pública a un servidor, pero no estoy muy seguro de cómo proceder.iPhone: ¿Cómo exportas un SecKeyRef o un NSData que contiene claves públicas al formato PEM?
Tengo una función getPublicKeyBits
(tomada de Apple CryptoExercise
), pero realmente no sé qué hacer con NSData en bruto. Esta es la función:
- (NSData *)getPublicKeyBits {
OSStatus sanityCheck = noErr;
NSData* publicKeyBits = nil;
NSData* publicTag = [[NSData alloc] initWithBytes:publicKeyIdentifier length:sizeof(publicKeyIdentifier)];
CFDataRef cfresult = NULL;
NSMutableDictionary * queryPublicKey = [[NSMutableDictionary alloc] init];
// Set the public key query dictionary.
[queryPublicKey setObject:(__bridge id)kSecClassKey forKey:(__bridge id)kSecClass];
[queryPublicKey setObject:publicTag forKey:(__bridge id)kSecAttrApplicationTag];
[queryPublicKey setObject:(__bridge id)kSecAttrKeyTypeRSA forKey:(__bridge id)kSecAttrKeyType];
[queryPublicKey setObject:[NSNumber numberWithBool:YES] forKey:(__bridge id)kSecReturnData];
// Get the key bits.
sanityCheck = SecItemCopyMatching((__bridge CFDictionaryRef)queryPublicKey, (CFTypeRef*)&cfresult);
if (sanityCheck != noErr)
{
publicKeyBits = nil;
}
else
{
publicKeyBits = (__bridge_transfer NSData *)cfresult;
}
return publicKeyBits;
}
¿Cómo tomo estos datos byte primas y convertirlo en algo así como PEM
o algún otro formato que comprende una biblioteca criptográfica? ¿Debería basar64 para codificarlo? ¿Hay otras cosas que necesito hacer también?
Si sirve de ayuda, estoy tratando de usar la clave pública con la biblioteca M2Crypto
disponible para Python.
No, no es BASE64. Es una estructura ASN.1 que contiene un 'SEQUENCE' con dos elementos' INTEGER'. Mientras que el segundo elemento parece ser siempre '65537', el otro elemento parece tener el tamaño de clave. Pero todavía no tengo idea de cómo sacar exponente y módulo de ellos para exportarlo a otro formato. – miho