array( 'title' => t('Administer fulcrm cryptography'), 'description' => t('Perform main installation/administration tasks for fulcrm cryptography.'), ), ); } function fulcrm_crypto_menu() { /* $items[ 'admin/config/services/fulcrm' ] = array( 'page callback' => 'system_admin_menu_block_page', 'file' => 'system.admin.inc', 'file path' => drupal_get_path('module', 'system'), 'title' => 'fulcrm', 'description' => 'Configuration integration with fulcrm.org.', 'position' => 'right', 'access callback' => 'user_access', 'access arguments' => array('access administration pages'), ); */ $items[ 'admin/config/services/fulcrm/crypto' ] = array( 'page callback' => 'fulcrm_crypto_admin', 'file' => 'fulcrm_crypto.admin.inc', 'title' => 'fulcrm cryptography', 'description' => 'Settings for fulcrm.org cryptography.', 'access callback' => 'user_access', 'access arguments' => array('administer fulcrm crypto'), ); return $items; } function fulcrm_crypto_object_id_hmac( $object_type, $object_id ) { return drupal_hmac_base64( 'fulcrm:' . strval( $object_id ) . ':' . $object_type, session_id() . drupal_get_hash_salt() ); } function fulcrm_crypto_hash_equals( $real_hmac, $hmac ) { if ( function_exists( 'hash_equals' ) ) { return hash_equals( $real_hmac, $hmac ); } else { if ( strlen( $real_hmac ) != strlen( $hmac ) ) return false; $xor = $real_hmac ^ $hmac; $residual = 0; for ( $i = strlen( $xor ) - 1; $i >= 0; $i-- ) $residual |= ord( $residual[ $i ] ); if ( $residual == 0 ) return true; return false; } } function fulcrm_crypto_check_object_id_hmac( $object_type, $object_id, $hmac ) { $real_hmac = fulcrm_crypto_object_id_hmac( $object_type, $object_id ); return fulcrm_crypto_hash_equals( $real_hmac, $hmac ); } function fulcrm_crypto_object_id_form_value( $object_type, $object_id ) { return $object_id . ':' . fulcrm_crypto_object_id_hmac( $object_type, $object_id ); } function fulcrm_crypto_get_object_id_form_value( $object_type, $form_value ) { $bits = explode( ':', $form_value ); if ( count( $bits ) == 2 ) { $object_id = $bits[ 0 ]; $hmac = $bits[ 1 ]; $real_hmac = fulcrm_crypto_object_id_hmac( $object_type, $object_id ); if ( fulcrm_crypto_hash_equals( $real_hmac, $hmac ) ) return $object_id; } return NULL; }