@dotrino/identity 0.110.0 → 0.110.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/vault/core.js +3 -4
- package/vault/externalKeys.js +7 -6
package/package.json
CHANGED
package/vault/core.js
CHANGED
|
@@ -1124,12 +1124,11 @@ export async function createIdentityCore ({ kv: hostKv, peers, makeSync = null,
|
|
|
1124
1124
|
if (keyStore?.importPair) {
|
|
1125
1125
|
// DENTRO DE UNA APP NATIVA: la llave que entrega la bóveda la guarda la app (cifrada
|
|
1126
1126
|
// con una llave del chip) y firma ella. Van las dos mitades juntas, bajo un mismo id.
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
}
|
|
1127
|
+
// Si la bóveda no entrega llave de cifrado, la app estrena una (como hace el navegador).
|
|
1128
|
+
const traeEnc = !!(entrada.keys.enc && entrada.encPublickey)
|
|
1130
1129
|
await keyStore.importPair({
|
|
1131
1130
|
sign: { name: _scoped(KEY_STORAGE), privateJwk: sinTopes(entrada.keys.sign), publickey: entrada.publickey },
|
|
1132
|
-
enc: { name: _scoped(ENC_KEY_STORAGE), privateJwk: sinTopes(entrada.keys.enc), publickey: entrada.encPublickey }
|
|
1131
|
+
enc: { name: _scoped(ENC_KEY_STORAGE), privateJwk: traeEnc ? sinTopes(entrada.keys.enc) : null, publickey: traeEnc ? entrada.encPublickey : null }
|
|
1133
1132
|
})
|
|
1134
1133
|
kv.removeItem(KEY_STORAGE); kv.removeItem(ENC_KEY_STORAGE)
|
|
1135
1134
|
} else {
|
package/vault/externalKeys.js
CHANGED
|
@@ -83,15 +83,16 @@ export function withExternalKeys (keyStore, bridge) {
|
|
|
83
83
|
* puede meter en el chip, así que la app la guarda cifrada con una llave del chip y firma
|
|
84
84
|
* ella. Desde aquí es una llave externa más: la página no se queda con la privada.
|
|
85
85
|
* `sign` y `enc`: `{ name, privateJwk, publickey }`, con la pública TAL CUAL la escribe el
|
|
86
|
-
* acta (es la cadena con la que esa llave es miembro).
|
|
86
|
+
* acta (es la cadena con la que esa llave es miembro). Si la bóveda no entrega la de
|
|
87
|
+
* cifrado (`enc.privateJwk` nulo), la app estrena una y devuelve su pública.
|
|
87
88
|
*/
|
|
88
89
|
async importPair ({ sign, enc }) {
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
if (!k?.kid) throw Object.assign(new Error('the phone did not keep the key'), { code: 'native-no-key' })
|
|
90
|
+
const params = { sign: sign.privateJwk, publickey: sign.publickey }
|
|
91
|
+
if (enc.privateJwk) { params.enc = enc.privateJwk; params.encPub = enc.publickey }
|
|
92
|
+
const k = await bridge.call('import', params)
|
|
93
|
+
if (!k?.kid || !k.encPub) throw Object.assign(new Error('the phone did not keep the key'), { code: 'native-no-key' })
|
|
93
94
|
await keyStore.set(sign.name, { external: k.kid, kind: 'sign', publicJwk: JSON.parse(sign.publickey) })
|
|
94
|
-
await keyStore.set(enc.name, { external: k.kid, kind: 'enc', publicJwk: JSON.parse(enc.publickey) })
|
|
95
|
+
await keyStore.set(enc.name, { external: k.kid, kind: 'enc', publicJwk: JSON.parse(enc.publickey || k.encPub) })
|
|
95
96
|
},
|
|
96
97
|
async create (kind, name) {
|
|
97
98
|
// Las dos mitades del perfil van bajo la MISMA llave del chip: si la otra ya nació
|