int ccec_make_priv(size_t nbits, size_t xlength, uint8_t *x, size_t ylength, uint8_t *y, size_t klength, uint8_t *k, ccec_full_ctx_t key) { int result; ccec_const_cp_t cp = ccec_get_cp(nbits); ccec_ctx_init(cp, key); if ((result = ccn_read_uint(ccec_cp_n(cp), ccec_ctx_x(key), xlength, x))) goto errOut; if ((result = ccn_read_uint(ccec_cp_n(cp), ccec_ctx_y(key), ylength, y))) goto errOut; if ((result = ccn_read_uint(ccec_cp_n(cp), ccec_ctx_k(key), klength, k))) goto errOut; ccn_seti(ccec_cp_n(cp), ccec_ctx_z(key), 1); errOut: return result; }
static CFStringRef SecECPublicKeyCopyKeyDescription(SecKeyRef key) { ccec_pub_ctx_t ecPubkey; CFStringRef keyDescription = NULL; size_t xlen, ylen, ix; CFMutableStringRef xString = NULL; CFMutableStringRef yString = NULL; ecPubkey.pub = key->key; //curve long curveType = (long)SecECKeyGetNamedCurve(key); char* curve= NULL; switch (curveType) { case 23: curve = "kSecECCurveSecp256r1"; break; case 24: curve = "kSecECCurveSecp384r1"; break; case 25: curve = "kSecECCurveSecp521r1"; break; case -1: curve = "kSecECCurveNone"; break; default: curve = "kSecECCurveNone"; break; } uint8_t *xunit = (uint8_t*)ccec_ctx_x(ecPubkey); require_quiet( NULL != xunit, fail); xlen = (size_t)strlen((char*)xunit); xString = CFStringCreateMutable(kCFAllocatorDefault, xlen * 2); require_quiet( NULL != xString, fail); for (ix = 0; ix < xlen; ++ix) { CFStringAppendFormat(xString, NULL, CFSTR("%02X"), xunit[ix]); } uint8_t *yunit = (uint8_t*)ccec_ctx_y(ecPubkey); require_quiet( NULL != yunit, fail); ylen = (size_t)strlen((char*)yunit); yString = CFStringCreateMutable(kCFAllocatorDefault, ylen*2); require_quiet( NULL != yString, fail); for(ix = 0; ix < ylen; ++ix) { CFStringAppendFormat(yString, NULL, CFSTR("%02X"), yunit[ix]); } keyDescription = CFStringCreateWithFormat(kCFAllocatorDefault,NULL,CFSTR( "<SecKeyRef curve type: %s, algorithm id: %lu, key type: %s, version: %d, block size: %zu bits, y: %@, x: %@, addr: %p>"), curve, (long)SecKeyGetAlgorithmID(key), key->key_class->name, key->key_class->version, (8*SecKeyGetBlockSize(key)), yString, xString, key); fail: CFReleaseSafe(xString); CFReleaseSafe(yString); if(!keyDescription) keyDescription = CFStringCreateWithFormat(kCFAllocatorDefault,NULL,CFSTR("<SecKeyRef curve type: %s, algorithm id: %lu, key type: %s, version: %d, block size: %zu bits, addr: %p>"), curve,(long)SecKeyGetAlgorithmID(key), key->key_class->name, key->key_class->version, (8*SecKeyGetBlockSize(key)), key); return keyDescription; }