Stronghold
Almacena secretos y claves utilizando el motor de gestión de secretos IOTA Stronghold.
Plataformas Soportadas
Sección titulada “Plataformas Soportadas”Este plugin requiere una versión de Rust de al menos 1.77.2
| Plataforma | Nivel | Notas |
|---|---|---|
| windows | ||
| linux | ||
| macos | ||
| android | ||
| ios |
Configuración
Sección titulada “Configuración”Instala el plugin stronghold para comenzar.
Usa el gestor de paquetes de tu proyecto para agregar la dependencia:
npm run tauri add strongholdyarn run tauri add strongholdpnpm tauri add strongholddeno task tauri add strongholdbun tauri add strongholdcargo tauri add stronghold-
Ejecuta el siguiente comando en la carpeta
src-tauripara agregar el plugin a las dependencias del proyecto enCargo.toml:cargo add tauri-plugin-stronghold -
Modifica
lib.rspara inicializar el plugin:src-tauri/src/lib.rs #[cfg_attr(mobile, tauri::mobile_entry_point)]pub fn run() {tauri::Builder::default().plugin(tauri_plugin_stronghold::Builder::new(|password| {}).build()).run(tauri::generate_context!()).expect("error while running tauri application");} -
Instala los bindings de JavaScript utilizando tu gestor de paquetes de JavaScript preferido:
npm install @tauri-apps/plugin-strongholdyarn add @tauri-apps/plugin-strongholdpnpm add @tauri-apps/plugin-strongholddeno add npm:@tauri-apps/plugin-strongholdbun add @tauri-apps/plugin-stronghold
Debido a un error ascendente, también recomendamos que añadas esto a tu archivo Cargo.toml:
[profile.dev.package.scrypt]opt-level = 3El plugin se debe inicializar con una función de hash de contraseña, que toma la cadena de la contraseña y debe devolver un hash de 32 bytes derivado de ella.
Inicializar con la función de hash de contraseña argon2
Sección titulada “Inicializar con la función de hash de contraseña argon2”El plugin de Stronghold ofrece una función de hash por defecto utilizando el algoritmo argon2.
use tauri::Manager;
pub fn run() { tauri::Builder::default() .setup(|app| { let salt_path = app .path() .app_local_data_dir() .expect("could not resolve app local data path") .join("salt.txt"); app.handle().plugin(tauri_plugin_stronghold::Builder::with_argon2(&salt_path).build())?; Ok(()) }) .run(tauri::generate_context!()) .expect("error while running tauri application");}Inicializar con una función de hash de contraseña personalizada
Sección titulada “Inicializar con una función de hash de contraseña personalizada”Alternativamente puedes proporcionar tu propio algoritmo de hash utilizando el constructor tauri_plugin_stronghold::Builder::new.
pub fn run() { tauri::Builder::default() .plugin( tauri_plugin_stronghold::Builder::new(|password| { // Hash the password here with e.g. argon2, blake2b or any other secure algorithm // Here is an example implementation using the `rust-argon2` crate for hashing the password use argon2::{hash_raw, Config, Variant, Version};
let config = Config { lanes: 4, mem_cost: 10_000, time_cost: 10, variant: Variant::Argon2id, version: Version::Version13, ..Default::default() }; let salt = "your-salt".as_bytes(); let key = hash_raw(password.as_ref(), salt, &config).expect("failed to hash password");
key.to_vec() }) .build(), ) .run(tauri::generate_context!()) .expect("error while running tauri application");}Uso desde JavaScript
Sección titulada “Uso desde JavaScript”El plugin stronghold está disponible en JavaScript.
import { Client, Stronghold } from '@tauri-apps/plugin-stronghold';// when using `"withGlobalTauri": true`, you may use// const { Client, Stronghold } = window.__TAURI__.stronghold;import { appDataDir } from '@tauri-apps/api/path';// when using `"withGlobalTauri": true`, you may use// const { appDataDir } = window.__TAURI__.path;
const initStronghold = async () => { const vaultPath = `${await appDataDir()}/vault.hold`; const vaultPassword = 'vault password'; const stronghold = await Stronghold.load(vaultPath, vaultPassword);
let client: Client; const clientName = 'name your client'; try { client = await stronghold.loadClient(clientName); } catch { client = await stronghold.createClient(clientName); }
return { stronghold, client, };};
// Insert a record to the storeasync function insertRecord(store: any, key: string, value: string) { const data = Array.from(new TextEncoder().encode(value)); await store.insert(key, data);}
// Read a record from storeasync function getRecord(store: any, key: string): Promise<string> { const data = await store.get(key); return new TextDecoder().decode(new Uint8Array(data));}
const { stronghold, client } = await initStronghold();
const store = client.getStore();const key = 'my_key';
// Insert a record to the storeinsertRecord(store, key, 'secret value');
// Read a record from storeconst value = await getRecord(store, key);console.log(value); // 'secret value'
// Save your updatesawait stronghold.save();
// Remove a record from storeawait store.remove(key);Permisos
Sección titulada “Permisos”De forma predeterminada, todos los comandos y alcances (scopes) potencialmente peligrosos del plugin están bloqueados y no se puede acceder a ellos. Debes modificar los permisos en tu configuración de capabilities para habilitarlos.
Consulta la Visión General de Capacidades para obtener más información y la guía paso a paso para usar permisos de plugins.
{ ..., "permissions": [ "stronghold:default", ]}Permiso Predeterminado
Este conjunto de permisos configura qué tipo de operaciones están disponibles desde el plugin stronghold.
Permisos Otorgados
Todas las operaciones no destructivas están habilitadas por defecto.
Este conjunto de permisos predeterminado incluye lo siguiente:
allow-create-clientallow-get-store-recordallow-initializeallow-execute-procedureallow-load-clientallow-save-secretallow-save-store-recordallow-save
Tabla de Permisos
| Identificador | Descripción |
|---|---|
|
|
Habilita el comando create_client sin ningún ámbito preconfigurado. |
|
|
Deniega el comando create_client sin ningún ámbito preconfigurado. |
|
|
Habilita el comando destroy sin ningún ámbito preconfigurado. |
|
|
Deniega el comando destroy sin ningún ámbito preconfigurado. |
|
|
Habilita el comando execute_procedure sin ningún ámbito preconfigurado. |
|
|
Deniega el comando execute_procedure sin ningún ámbito preconfigurado. |
|
|
Habilita el comando get_store_record sin ningún ámbito preconfigurado. |
|
|
Deniega el comando get_store_record sin ningún ámbito preconfigurado. |
|
|
Habilita el comando initialize sin ningún ámbito preconfigurado. |
|
|
Deniega el comando initialize sin ningún ámbito preconfigurado. |
|
|
Habilita el comando load_client sin ningún ámbito preconfigurado. |
|
|
Deniega el comando load_client sin ningún ámbito preconfigurado. |
|
|
Habilita el comando remove_secret sin ningún ámbito preconfigurado. |
|
|
Deniega el comando remove_secret sin ningún ámbito preconfigurado. |
|
|
Habilita el comando remove_store_record sin ningún ámbito preconfigurado. |
|
|
Deniega el comando remove_store_record sin ningún ámbito preconfigurado. |
|
|
Habilita el comando save sin ningún ámbito preconfigurado. |
|
|
Deniega el comando save sin ningún ámbito preconfigurado. |
|
|
Habilita el comando save_secret sin ningún ámbito preconfigurado. |
|
|
Deniega el comando save_secret sin ningún ámbito preconfigurado. |
|
|
Habilita el comando save_store_record sin ningún ámbito preconfigurado. |
|
|
Deniega el comando save_store_record sin ningún ámbito preconfigurado. |
© 2026 Colaboradores de Tauri. CC-BY / MIT