55// helpers like getAddr() / getSigningClient() resolve to the per-request
66// wallet without explicit plumbing.
77
8- import { createCipheriv , createDecipheriv , randomBytes , createHash } from 'crypto' ;
8+ import { createCipheriv , createDecipheriv , randomBytes , createHash , createHmac } from 'crypto' ;
99import { AsyncLocalStorage } from 'async_hooks' ;
1010import { existsSync , readFileSync , writeFileSync , mkdirSync , chmodSync } from 'fs' ;
1111import { join } from 'path' ;
@@ -178,6 +178,7 @@ export async function sessionFromMnemonic(mnemonic) {
178178 const provAddr = toBech32 ( 'sentprov' , data ) ;
179179
180180 session = {
181+ kind : 'mnemonic' ,
181182 addr,
182183 provAddr,
183184 wallet,
@@ -357,7 +358,7 @@ export function buildClearCookie({ secure }) {
357358export function buildKeplrToken ( addr , pubkeyB64 ) {
358359 if ( ! _key ) throw new Error ( 'Session key not initialized' ) ;
359360 const payload = `${ addr } |${ pubkeyB64 || '' } ` ;
360- const mac = createHash ( 'sha256' ) . update ( _key ) . update ( '|' ) . update ( payload ) . digest ( 'base64url' ) ;
361+ const mac = createHmac ( 'sha256' , _key ) . update ( payload ) . digest ( 'base64url' ) ;
361362 return `${ Buffer . from ( payload , 'utf8' ) . toString ( 'base64url' ) } .${ mac } ` ;
362363}
363364
@@ -370,7 +371,7 @@ export function parseKeplrToken(token) {
370371 const mac = token . slice ( dot + 1 ) ;
371372 let payload ;
372373 try { payload = Buffer . from ( payloadB64 , 'base64url' ) . toString ( 'utf8' ) ; } catch { return null ; }
373- const expect = createHash ( 'sha256' ) . update ( _key ) . update ( '|' ) . update ( payload ) . digest ( 'base64url' ) ;
374+ const expect = createHmac ( 'sha256' , _key ) . update ( payload ) . digest ( 'base64url' ) ;
374375 if ( expect !== mac ) return null ;
375376 const [ addr , pubkeyB64 ] = payload . split ( '|' ) ;
376377 if ( ! addr || ! addr . startsWith ( 'sent1' ) ) return null ;
0 commit comments