/** * Serializes data before storing them * * @param mixed $data * @return string */ PHP_METHOD(Phalcon_Cache_Frontend_Base64, beforeStore){ zval *data; phalcon_fetch_params(0, 1, 0, &data); phalcon_base64_encode(return_value, data); }
/** * Encrypts a text returning the result as a base64 string * * @param string $text * @param string $key * @return string */ PHP_METHOD(Phalcon_Crypt, encryptBase64){ zval *text, *key = NULL, *safe = NULL, *encrypted = NULL; PHALCON_MM_GROW(); phalcon_fetch_params(1, 1, 2, &text, &key, &safe); if (!key) { key = PHALCON_GLOBAL(z_null); } if (!safe) { safe = PHALCON_GLOBAL(z_false); } PHALCON_CALL_METHOD(&encrypted, this_ptr, "encrypt", text, key); phalcon_base64_encode(return_value, encrypted); if (zend_is_true(safe)) { php_strtr(Z_STRVAL_P(return_value), Z_STRLEN_P(return_value), "+/", "-_", 2); } RETURN_MM(); }
/** * Serializes data before storing them * * @param mixed $data * @return string */ PHP_METHOD(Phalcon_Cache_Frontend_Base64, beforeStore){ zval *data; PHALCON_MM_GROW(); phalcon_fetch_params(1, 1, 0, &data); phalcon_base64_encode(return_value, data); RETURN_MM(); }
/** * Generates a pseudo random token key to be used as input's name in a CSRF check * * @param int $numberBytes * @return string */ PHP_METHOD(Phalcon_Security, getTokenKey){ zval *number_bytes = NULL, *random_bytes, *base64bytes; zval *safe_bytes, *dependency_injector, *service; zval *session, *key; PHALCON_MM_GROW(); phalcon_fetch_params(1, 0, 1, &number_bytes); if (!number_bytes) { PHALCON_INIT_VAR(number_bytes); ZVAL_LONG(number_bytes, 12); } if (phalcon_function_exists_ex(SS("openssl_random_pseudo_bytes") TSRMLS_CC) == FAILURE) { PHALCON_THROW_EXCEPTION_STR(phalcon_security_exception_ce, "Openssl extension must be loaded"); return; } PHALCON_INIT_VAR(random_bytes); phalcon_call_func_p1(random_bytes, "openssl_random_pseudo_bytes", number_bytes); PHALCON_INIT_VAR(base64bytes); phalcon_base64_encode(base64bytes, random_bytes); PHALCON_INIT_VAR(safe_bytes); phalcon_filter_alphanum(safe_bytes, base64bytes); PHALCON_OBS_VAR(dependency_injector); phalcon_read_property_this(&dependency_injector, this_ptr, SL("_dependencyInjector"), PH_NOISY_CC); if (Z_TYPE_P(dependency_injector) != IS_OBJECT) { PHALCON_THROW_EXCEPTION_STR(phalcon_flash_exception_ce, "A dependency injection container is required to access the 'session' service"); return; } PHALCON_INIT_VAR(service); ZVAL_STRING(service, "session", 1); PHALCON_INIT_VAR(session); phalcon_call_method_p1(session, dependency_injector, "getshared", service); PHALCON_VERIFY_INTERFACE(session, phalcon_session_adapterinterface_ce); PHALCON_INIT_VAR(key); ZVAL_STRING(key, "$PHALCON/CSRF/KEY$", 1); phalcon_call_method_p2_noret(session, "set", key, safe_bytes); RETURN_CTOR(safe_bytes); }
/** * Encrypts a text returning the result as a base64 string * * @param string $text * @param string $key * @return string */ PHP_METHOD(Phalcon_Crypt, encryptBase64){ zval *text, *key = NULL, *safe = NULL, encrypt_value = {}; phalcon_fetch_params(0, 1, 2, &text, &key, &safe); if (!key) { key = &PHALCON_GLOBAL(z_null); } if (!safe) { safe = &PHALCON_GLOBAL(z_false); } PHALCON_CALL_METHODW(&encrypt_value, getThis(), "encrypt", text, key); phalcon_base64_encode(return_value, &encrypt_value); if (zend_is_true(safe)) { php_strtr(Z_STRVAL_P(return_value), Z_STRLEN_P(return_value), "+/", "-_", 2); } }
/** * Generate a >22-length pseudo random string to be used as salt for passwords * * @return string */ PHP_METHOD(Phalcon_Security, getSaltBytes){ zval *number_bytes, *random_bytes = NULL, *base64bytes = NULL; zval *safe_bytes = NULL, *bytes_length = NULL; PHALCON_MM_GROW(); if (phalcon_function_exists_ex(SS("openssl_random_pseudo_bytes") TSRMLS_CC) == FAILURE) { PHALCON_THROW_EXCEPTION_STR(phalcon_security_exception_ce, "Openssl extension must be loaded"); return; } PHALCON_OBS_VAR(number_bytes); phalcon_read_property_this(&number_bytes, this_ptr, SL("_numberBytes"), PH_NOISY_CC); while (1) { PHALCON_INIT_NVAR(random_bytes); phalcon_call_func_p1(random_bytes, "openssl_random_pseudo_bytes", number_bytes); PHALCON_INIT_NVAR(base64bytes); phalcon_base64_encode(base64bytes, random_bytes); PHALCON_INIT_NVAR(safe_bytes); phalcon_filter_alphanum(safe_bytes, base64bytes); if (!zend_is_true(safe_bytes)) { continue; } PHALCON_INIT_NVAR(bytes_length); phalcon_fast_strlen(bytes_length, safe_bytes); if (PHALCON_LT_LONG(bytes_length, 22)) { continue; } break; } RETURN_CTOR(safe_bytes); }