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) } }