X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/c38e3ce98599a410a47dc10253faa4d5830f13b2..427c49bcad63d042b29ada2ac27e3dfc4845c779:/sec/SOSCircle/SecureObjectSync/SOSUserKey.c?ds=inline diff --git a/sec/SOSCircle/SecureObjectSync/SOSUserKey.c b/sec/SOSCircle/SecureObjectSync/SOSUserKey.c new file mode 100644 index 00000000..d3109c65 --- /dev/null +++ b/sec/SOSCircle/SecureObjectSync/SOSUserKey.c @@ -0,0 +1,80 @@ +// +// SOSUserKey.c +// sec +// +// Created by Richard Murphy on 2/13/13. +// +// + +#include +#include +#include +#include +#include +#include + +#if 0 +#include + +#define UK_CONST_DECL(k,v) CFTypeRef k = (CFTypeRef)(CFSTR(v)); + +UK_CONST_DECL (ukSalt, "salt"); +UK_CONST_DECL (ukIteration, "iteration"); + +static const size_t saltlen = 16; +static const unsigned long iterations = 10240; + +static dispatch_once_t keyParmStoreInit; +static CFMutableDictionaryRef keyParmStorage = NULL; +static void SOSKeyParmStore(CFStringRef user_label, CFDictionaryRef parmData) { + dispatch_once(&keyParmStoreInit, ^{ + keyParmStorage = CFDictionaryCreateMutable(kCFAllocatorDefault, 50, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); + }); + CFDictionaryAddValue(keyParmStorage, user_label, parmData); +} + +static CFDictionaryRef SOSKeyParmRetrieve(CFStringRef user_label) { + if(keyParmStorage && CFDictionaryContainsKey(keyParmStorage, user_label)) { + CFDictionaryRef parmData = CFDictionaryGetValue(keyParmStorage, user_label); + CFRetain(parmData); + return parmData; + } +/* + const void *keys[] = { ukSalt, ukIteration }; + const void *values[] = { cfsalt, cfiteration }; + CFDictionaryRef query = CFDictionaryCreate(kCFAllocatorDefault, keys, values, sizeof(keys)/sizeof(*keys), NULL, NULL); + CFDictionaryRef retval = CFDictionaryCreate( +*/ + return NULL; +} + + +static void +SOSUserKeyGenParmPersist(CFStringRef user_label) +{ +} + +static void +SOSUserKeyGenParmRetrieve(CFStringRef user_label) +{ +} +#endif + +bool +SOSUserKeyGenerate(int keysize, CFStringRef user_label, CFDataRef user_password, SecKeyRef *user_pubkey, SecKeyRef *user_privkey) +{ +#if 0 + ccec_const_cp_t cp = ccec_get_cp(keysize); + ccec_full_ctx_decl_cp(cp, full_key); + struct ccrng_pbkdf2_prng_state pbkdf2_prng; + uint8_t salt[saltlen]; + if(CCRandomCopyBytes(kCCRandomDefault, salt, sizeof(salt)) != kCCSuccess) return false; + uint8_t password_bytes = CFDataGetBytePtr(user_password); + size_t password_length = CFDataGetLength(user_password); + ccrng_pbkdf2_prng_init(&pbkdf2_prng, 72, password_length, password_bytes, sizeof(salt), salt, iterations); + struct ccrng_state *rng = (struct ccrng_state *)&pbkdf2_prng; + ccec_generate_key(cp, rng, full_key); +#endif + + return true; +}