static CFHashCode _auth_item_hash(CFTypeRef value) { auth_item_t item = (auth_item_t)value; uint64_t crc = crc64_init(); crc = crc64_update(crc, item->data.name, strlen(item->data.name)); if (item->data.value) { crc = crc64_update(crc, item->data.value, item->data.valueLength); } crc = crc64_update(crc, &item->data.flags, sizeof(item->data.flags)); crc = crc64_final(crc); return crc; }
static CFHashCode _mechanism_hash(CFTypeRef value) { uint64_t crc = crc64_init(); mechanism_t mech = (mechanism_t)value; const char * str = mechanism_get_plugin(mech); crc = crc64_update(crc, str, strlen(str)); str = mechanism_get_plugin(mech); crc = crc64_update(crc, str, strlen(str)); bool priv = mechanism_is_privileged(mech); crc = crc64_update(crc, &priv, sizeof(priv)); crc = crc64_final(crc); return crc; }