import { Serializable , stringToBytes , AsBytes , AsSerializable } from "./encoding" ; import { PBKDF2Params } from "./crypto" ; import { getCryptoProvider as getProvider } from "./platform" ; import { DeviceInfo } from "./platform" ; import { Storable } from "./storage" ; import { AccountID } from "./account" ; /**
 * Contains authentication data needed for SRP session negotiation
 */ export class Auth extends Serializable implements Storable { /** Id of the [[Account]] the authentication data belongs to */ account : AccountID = "" ; /** Verifier used for SRP session negotiation */ @ AsBytes ( ) verifier ? : Uint8Array ; /**
     * Key derivation params used by the client to compute session key from the
     * users master password
     * */ @ AsSerializable ( PBKDF2Params ) keyParams = new PBKDF2Params ( ) ; @ AsSerializable ( DeviceInfo ) trustedDevices : DeviceInfo [ ] = [ ] ; get id ( ) { return this . email ; } constructor ( public email = "" ) { super ( ) ; } /**
     * Generate the session key from the users master `password`
     */ async getAuthKey ( password ) { if ( ! this . keyParams . salt . length ) { this . keyParams . salt = await getProvider ( ) . randomBytes ( 16 ) ; } return getProvider ( ) . deriveKey ( stringToBytes ( password ) , this . keyParams ) ; } }