From 628c52728de75caf6e988677bfa1df18c0acc1fb Mon Sep 17 00:00:00 2001 From: Pascal Perrenoud Date: Wed, 4 Sep 2024 21:17:38 +0200 Subject: [PATCH] private-wrap : Safety checks and return null --- src/private-wrap.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/private-wrap.ts b/src/private-wrap.ts index ae9925e..d6b1821 100644 --- a/src/private-wrap.ts +++ b/src/private-wrap.ts @@ -39,12 +39,19 @@ export class PrivateWrap { const box = this.box.toString() return `${pubkey}.${box}` } - public static async fromString(data: string): Promise { + public static async fromString(data: string): Promise { log.trace('fromString') + const parts = data.split('.', 2) - const pubkey_str = b642a(parts[0]).expect('Failed to decode pubkey') - const pubkey = await crypto.subtle.importKey('spki', pubkey_str, algorithm, true, []) + if (parts.length !== 2) return null + + const pubkey_str = b642a(parts[0]) + if (pubkey_str.is_err()) return null + const pubkey = await crypto.subtle.importKey('spki', pubkey_str.unwrap(), algorithm, true, []) + const box = SecretWrap.fromString(parts[1]) + if (box === null) return null + return new PrivateWrap(box, pubkey) } }