SecKeyRawVerify vérifie sur mac mais échoue avec -9809 sur iOS

Je dois signer numériquement certaines données sur mac, puis les vérifier sur iOS. J'ai donc généré RSA keypair et certificate pour key publique au format DER avec open ssl (essayé avec SecKeyGeneratePair mais il est plus difficile d'importer la key publique sur iOS et SecKeyRawVerify ne fonctionne toujours pas avec le même résultat), et j'ai signé mes données Application Mac Ensuite, si je vérifie ces données sur la vérification iOS échoue avec le code d'erreur -9809, mais si exécuter le même code sur la vérification mac réussit.

Voici mon code de vérification:

NSSsortingng* certPath = [[NSBundle mainBundle] pathForResource: @"Public" ofType:@"der"]; NSData* certificateeData = [NSData dataWithContentsOfFile: certPath]; SecCertificateRef certificateeFromFile = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)certificateeData); // load the certificatee SecPolicyRef secPolicy = SecPolicyCreateBasicX509(); SecTrustRef trust; OSStatus statusTrust = SecTrustCreateWithCertificates( certificateeFromFile, secPolicy, &trust); SecTrustResultType resultType; OSStatus statusTrustEval = SecTrustEvaluate(trust, &resultType); SecKeyRef publicKey = SecTrustCopyPublicKey(trust); NSSsortingng* licensingPolicySsortingng = @"ZKL3YXtqtFcIeWRqSekNuCmtu/nvy3ApsbJ+8xad6cO/E8smLHGfDrTQ3h/38d0IMJcUThsVMyX8qtqILmPeTnBpZgJetBjb8kAfuPznzxOrIcYd27/50ThWv6guLqZL7j1apnfRZHAdMiozvEYH62sma1Q9qTl+W7qxEAxWs2AXDTQcF7nGciEM6MEohs8u879VNIE1VcPW8ahMoe25wf8pvBvrzE0z0MR4UFE3ZSWIeeQsiaUPYFwHbfQAOifaw/qIisjL5Su6WURoaSupWTMdQh3ZNyqZuYJaT70u8S7NgF3BzG8uBiYOUYsf6UayvkABmF0UuMdcvhPQefyhuXsiYWxsb3dFeGNoYW5nZSI6dHJ1ZSwiYWxsb3dTaGFmZXIiOnRydWUsInBvbGljeSBuYW1lIjp0cnVlfQ=="; size_t signedHashBytesSize = SecKeyGetBlockSize(publicKey); NSData* messageData = [[NSData alloc] initWithBase64EncodedData:[licensingPolicySsortingng dataUsingEncoding: NSUTF8SsortingngEncoding] options:0]; NSData* signatureData = [messageData subdataWithRange:NSMakeRange(0, signedHashBytesSize)]; NSData* rawMessageData = [messageData subdataWithRange: NSMakeRange(signedHashBytesSize, messageData.length - signedHashBytesSize)]; uint8_t sha1HashDigest[CC_SHA1_DIGEST_LENGTH]; CC_SHA1([rawMessageData bytes], (CC_LONG)[rawMessageData length], sha1HashDigest); OSStatus verficationResult = SecKeyRawVerify(publicKey, kSecPaddingPKCS1SHA1, sha1HashDigest, CC_SHA1_DIGEST_LENGTH, [signatureData bytes], [signatureData length]); CFRelease(publicKey); CFRelease(trust); CFRelease(secPolicy); CFRelease(certificateeFromFile); if (verficationResult == errSecSuccess) NSLog(@"Verified"); 

Y a-t-il une différence dans la vérification de la signature numérique pour Mac et iOS? Je n'ai pas réussi à find quoi que ce soit à ce sujet dans la documentation d'Apple.

Eh bien après quelques expériences avec signer / vérifier, j'ai découvert que le changement de l'accord de remplissage à SecKeyRawVerify / SecKeyRawSign de kSecPaddingPKCS1SHA1 à kSecPaddingPKCS1, résout mon problème. Je ne sais pas pourquoi cela ne fonctionne pas avec kSecPaddingPKCS1SHA1, il n'y a pas de dépréciations décrites dans la documentation d'Apple. Aussi, je n'ai pas essayé ce code sur iOS différent de 8.3 alors c'est peut-être un problème d'iOs8.3.