2012-07-19 16 views
10

iOS'ta ECC'yi kullanmak için herhangi bir örnek var mı?iOS'ta ECC nasıl kullanılır

Apple Developer Belgeleri'nde kSecAttrKeyTypeEC olduğunu fark ettim, ancak bunu genel Anahtar çifti için kullanamıyorum. Kodun altında

CryptoExercise

// Container dictionaries. 
NSMutableDictionary * privateKeyAttr = [[NSMutableDictionary alloc] init]; 
NSMutableDictionary * publicKeyAttr = [[NSMutableDictionary alloc] init]; 
NSMutableDictionary * keyPairAttr = [[NSMutableDictionary alloc] init]; 

// Set top level dictionary for the keypair. 
[keyPairAttr setObject:(id)kSecAttrKeyTypeEC forKey:(id)kSecAttrKeyType]; 
[keyPairAttr setObject:[NSNumber numberWithUnsignedInteger:keySize] forKey:(id)kSecAttrKeySizeInBits]; 

// Set the private key dictionary. 
[privateKeyAttr setObject:[NSNumber numberWithBool:YES] forKey:(id)kSecAttrIsPermanent]; 
[privateKeyAttr setObject:privateTag forKey:(id)kSecAttrApplicationTag]; 
// See SecKey.h to set other flag values. 

// Set the public key dictionary. 
[publicKeyAttr setObject:[NSNumber numberWithBool:YES] forKey:(id)kSecAttrIsPermanent]; 
[publicKeyAttr setObject:publicTag forKey:(id)kSecAttrApplicationTag]; 
// See SecKey.h to set other flag values. 

// Set attributes to top level dictionary. 
[keyPairAttr setObject:privateKeyAttr forKey:(id)kSecPrivateKeyAttrs]; 
[keyPairAttr setObject:publicKeyAttr forKey:(id)kSecPublicKeyAttrs]; 

// SecKeyGeneratePair returns the SecKeyRefs just for educational purposes. 
sanityCheck = SecKeyGeneratePair((CFDictionaryRef)keyPairAttr, &publicKeyRef, &privateKeyRef); 
LOGGING_FACILITY(sanityCheck == noErr && publicKeyRef != NULL && privateKeyRef != NULL, @"Something really bad went wrong with generating the key pair."); 

sanityCheck hep errSecParam 'anlamına -50 geri örnekten modifiye edilir.

Gerçekten nasıl kullanacağımı bilmiyorum, bunu okuduğunuz için teşekkür ederim.

+1

Anahtar boyutu 256 olduğunda kod iletildi, ancak başka bir sorun, SecKeyRawSign kullandığımda, -1 döndürdü ve -1 dönüş değeri için açıklama bulamıyorum, herhangi biri bununla karşılaştı sorun? – Cylon

+0

Bu soruna herhangi bir çözüm buldunuz mu? – Gunhan

cevap

1
NSDictionary *parameters = @{ 
          (__bridge id)kSecAttrKeyType: (__bridge id)kSecAttrKeyTypeEC, 
          (__bridge id)kSecAttrKeySizeInBits: @256, 
          (__bridge id)kSecPrivateKeyAttrs: @{ 
            (__bridge id)kSecAttrIsPermanent: @YES, 
            (__bridge id)kSecAttrApplicationTag: [@"my.key.tag" dataUsingEncoding:NSUTF8StringEncoding], 
            }, 
          (__bridge id)kSecPublicKeyAttrs: @{ 
            (__bridge id)kSecAttrIsPermanent: @YES, 
            (__bridge id)kSecAttrApplicationTag: [@"my.key.pubtag" dataUsingEncoding:NSUTF8StringEncoding], 
            } 
          }; 

SecKeyRef publicKey, privateKey; 
OSStatus status = SecKeyGeneratePair((__bridge CFDictionaryRef)parameters, &publicKey, &privateKey); 

Bu, anahtar boyutu parametresini iki kez kontrol eder.

Sadece bir not, şu anda EC tuşları yalnızca verileri imzalamak/doğrulamak için kullanılabilir. Şifreleme/şifre çözme geri dönüyor errSecUnimplemented = -4.

+0

Lütfen [bugreport] (http://bugreport.apple.com). Apple, iOS için şifreleme özellikleri sağlamanın arkasındadır. – zaph