{"version":3,"sources":["../web/types.ts","../web/ops.ts","../web/encoding.ts","../web/ecc_ops.ts","../web/hash.ts","../web/hmac.ts","../web/schnorr.ts","../web/client.ts"],"sourcesContent":["import { ProjPointType } from '@noble/curves/abstract/weierstrass';\nimport { p256 } from '@noble/curves/p256';\nimport { p384 } from '@noble/curves/p384';\nimport { p521 } from '@noble/curves/p521';\nimport { secp256k1 } from \"@noble/curves/secp256k1\";\n\nenum SupportedCurves {\n    P256 = 256,\n    P384 = 384,\n    P521 = 521,\n    SECP256K1 = 256_1\n} \n\nconst CurveMap = {\n    [SupportedCurves.P256]: p256,\n    [SupportedCurves.P384]: p384,\n    [SupportedCurves.P521]: p521,\n    [SupportedCurves.SECP256K1]: secp256k1\n}\n\ntype SchnorrZKP = {\n    V: ProjPointType<bigint>;\n    r: bigint;\n}\n\nenum Keys {\n    Session = 'session_key',\n    Confirmation = 'confirmation_key'\n}\n\nenum KeyTags {\n    ClientKC = 'KC_1_U',\n    ServerKC = 'KC_1_V'\n}\n\nexport {\n    p256,\n    p384,\n    p521,\n    CurveMap,\n    SupportedCurves,\n    SchnorrZKP,\n    Keys,\n    KeyTags\n}","import { bytesToNumberBE, concatBytes } from '@noble/curves/abstract/utils';\nimport { SchnorrZKP, SupportedCurves } from './types';\nimport { BigIntToByteArray } from './encoding';\nimport { GetCurve } from './ecc_ops';\n\nfunction ModuloN(x: bigint, n: bigint) {\n    return ((x % n) + n) % n;\n}\n\nasync function HighEntropyRandom(from: bigint, to: bigint): Promise<bigint> {\n    const range = to - from;\n    const rangeBytes = BigIntToByteArray(range);\n    let randomBigInt: bigint;\n\n    do {\n        const randomBytes = new Uint8Array(rangeBytes.length);\n        crypto.getRandomValues(randomBytes);\n        randomBigInt = bytesToNumberBE(randomBytes);\n    } while (randomBigInt >= range);\n\n    return from + randomBigInt;\n}\n\nasync function GenerateKey(curve: SupportedCurves): Promise<bigint> {\n    return await HighEntropyRandom(1n, GetCurve(curve).CURVE.n - 1n);\n}\n\nfunction IntTo4Bytes(i: number): Uint8Array {\n    return new Uint8Array([i >> 24, i >> 16, i >> 8, i]);\n}\n\nfunction ToBytes(data: Uint8Array | bigint | string | SchnorrZKP): Uint8Array {\n    if (data instanceof Uint8Array) {\n        const len = IntTo4Bytes(data.length);\n        return concatBytes(len, data);\n    } \n\n    else if (typeof data == 'bigint') {\n        let bytes = BigIntToByteArray(data);\n        const sign = bytes[0] >= 128 ? 0 : 1;\n        bytes = new Uint8Array([sign, ...bytes]);\n        const len = IntTo4Bytes(bytes.length);\n        return concatBytes(len, bytes);\n    } \n\n    else if (typeof data == 'string') {\n        const bytes = new TextEncoder().encode(data);\n        const len = IntTo4Bytes(data.length);\n        return concatBytes(len, bytes);\n    } \n\n    else if (Object.keys(data).length === 2 && 'V' in data && 'r' in data) {\n        const vBytes = data.V.toRawBytes();\n        const rBytes = BigIntToByteArray(data.r);\n        const vLen = IntTo4Bytes(vBytes.length);\n        const rLen = IntTo4Bytes(rBytes.length);\n        return concatBytes(vLen, vBytes, rLen, rBytes);\n    }\n\n    throw new Error('Invalid type passed to toBytes');\n}\n\nfunction CompareTo(a: bigint, b: bigint): number {\n    if (a < b) return -1;\n    if (a > b) return 1;\n    return 0;\n}\n\nfunction BytesToBigInt(bytes: Uint8Array): bigint {\n    let hex = Array.from(bytes).map(byte => byte.toString(16).padStart(2, '0')).join('');\n    return BigInt('0x' + hex);\n}\n\n\nexport {\n    ModuloN,\n    HighEntropyRandom,\n    GenerateKey,\n    IntTo4Bytes,\n    ToBytes,\n    CompareTo,\n    BytesToBigInt,\n}","import { ProjPointType } from '@noble/curves/abstract/weierstrass';\nimport { bytesToHex, bytesToNumberBE } from '@noble/curves/abstract/utils';\nimport { SupportedCurves } from './types';\nimport { GetCurve } from './ecc_ops';\n\nfunction BigIntToByteArray(int: BigInt): Uint8Array {\n    let hexString = int.toString(16);\n    if (hexString.length % 2) hexString = '0' + hexString;\n    const byteArray = new Uint8Array(hexString.length / 2);\n    for (let i = 0; i < byteArray.length; i++) byteArray[i] = parseInt(hexString.substr(i * 2, 2), 16);\n    return byteArray;\n}\n\nfunction EncodeToBase64(data: Uint8Array | BigInt): string {\n    let bytes;\n    if (data instanceof BigInt || typeof data == 'bigint') bytes = BigIntToByteArray(data);\n    else if (data instanceof Uint8Array) bytes = data;\n    else throw new Error('Invalid type passed to encodeToBase64');\n    return UrlSafeBase64Encode(bytes);\n}\n\nfunction BigIntFromBase64(base64: string): bigint {\n    return bytesToNumberBE(UrlSafeBase64Decode(base64));\n}\n\nfunction PointFromBase64(curve: SupportedCurves, base64: string): ProjPointType<bigint> {\n    return GetCurve(curve).ProjectivePoint.fromHex(bytesToHex(UrlSafeBase64Decode(base64)));\n}\n\nfunction UrlSafeBase64Encode(data: Uint8Array | bigint): string {\n    if (typeof data === 'bigint') data = BigIntToByteArray(data);\n    const base64 = Buffer.from(data).toString('base64');\n    return base64.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '');\n}\n\nfunction UrlSafeBase64Decode(data: string): Uint8Array {\n    return new Uint8Array(Buffer.from(data.replace(/-/g, '+').replace(/_/g, '/'), 'base64'));\n}\n\nexport {\n    BigIntToByteArray,\n    EncodeToBase64,\n    BigIntFromBase64,\n    PointFromBase64,\n\n    UrlSafeBase64Encode,\n    UrlSafeBase64Decode\n}","import { ProjPointType } from '@noble/curves/abstract/weierstrass';\nimport { CurveMap, SupportedCurves } from './types';\n\nfunction GetG(curve: SupportedCurves): ProjPointType<bigint> {\n    const c = GetCurve(curve);\n    return GetCurve(curve).ProjectivePoint.fromAffine({ x: c.CURVE.Gx, y: c.CURVE.Gy });\n}\n\nfunction CalculateCofactor(curve: SupportedCurves): bigint {\n    return GetCurve(curve).CURVE.h;\n}\n\nfunction GetCurve(curve: SupportedCurves) {\n    const ChooseCurve = CurveMap[curve];\n    if (!ChooseCurve) throw new Error('Invalid curve');\n    return ChooseCurve;\n}\n\nexport {\n    GetG,\n    CalculateCofactor,\n    GetCurve\n}","import { bytesToNumberBE, concatBytes } from '@noble/curves/abstract/utils';\nimport { ToBytes } from './ops';\nimport { SchnorrZKP } from './types';\n\nasync function Hash(...args: Array<Uint8Array | bigint | string | SchnorrZKP>): Promise<bigint> {\n    const bytes = concatBytes(...args.map(ToBytes));\n    const hash = await crypto.subtle.digest('SHA-256', bytes);\n    return bytesToNumberBE(new Uint8Array(hash));\n}\n\nexport {\n    Hash\n}","import { BigIntToByteArray } from './encoding';\nimport { BytesToBigInt } from './ops';\nimport { concatBytes } from '@noble/curves/abstract/utils';\n\nasync function HMac(\n    key: bigint,\n    messageString: string,\n    senderID: string,\n    receiverID: string,\n    senderKey1: Uint8Array,\n    senderKey2: Uint8Array,\n    receiverKey1: Uint8Array,\n    receiverKey2: Uint8Array\n): Promise<bigint> {\n    const keyBytes = BigIntToByteArray(key);\n    const mac = await crypto.subtle.importKey('raw', keyBytes, { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);\n    \n    const data = [\n        new TextEncoder().encode(messageString),\n        new TextEncoder().encode(senderID),\n        new TextEncoder().encode(receiverID),\n        senderKey1,\n        senderKey2,\n        receiverKey1,\n        receiverKey2\n    ]\n\n    const signature = await crypto.subtle.sign('HMAC', mac, concatBytes(...data));\n    return BytesToBigInt(new Uint8Array(signature));\n}\n\nexport {\n    HMac\n}","import { CalculateCofactor, GetCurve } from './ecc_ops';\nimport { Hash } from './hash';\nimport { CompareTo, GenerateKey, ModuloN } from './ops';\nimport { SchnorrZKP, SupportedCurves } from './types';\nimport { ProjPointType } from '@noble/curves/abstract/weierstrass';\n\nasync function GenerateZKPGProvided(\n    curve: SupportedCurves, \n    g: ProjPointType<bigint>, \n    n: bigint, \n    x: bigint, \n    X: ProjPointType<bigint>, \n    prover: string\n): Promise<SchnorrZKP> {\n    const v = await GenerateKey(curve)\n    const V = g.multiply(v);\n    const h = await Hash(g.toRawBytes(), V.toRawBytes(), X.toRawBytes(), prover);\n    let r = x * h;\n    r = v - r;\n    r = ModuloN(r, n);\n    return { V, r };\n};\n\nasync function VerifyZKP(\n    curve: SupportedCurves,\n    generator: ProjPointType<bigint>,\n    X: ProjPointType<bigint>,\n    zkp: SchnorrZKP,\n    prover: string\n): Promise<boolean> {\n\n    const h = await Hash(generator.toRawBytes(), zkp.V.toRawBytes(), X.toRawBytes(), prover);\n    if (!X || !zkp.V || !zkp.r) return false;\n\n    try { X.assertValidity(); } \n    catch { return false; }\n\n    const { x: xX, y: yY } = X.toAffine();\n    if (xX === null || yY === null) return false;\n\n    const curveParams = GetCurve(curve);\n    if (CompareTo(xX, BigInt(0)) === -1 || CompareTo(xX, curveParams.CURVE.n - BigInt(1)) === 1) return false;\n    if (CompareTo(yY, BigInt(0)) === -1 || CompareTo(yY, curveParams.CURVE.n - BigInt(1)) === 1) return false;\n\n    const xXh = X.multiply(CalculateCofactor(curve));\n    const { x: xXhX, y: xXhY } = xXh.toAffine();\n    if (xXhX === null || xXhY === null) return false;\n    if (xXhX === BigInt(0) && xXhY === BigInt(0)) return false;\n\n    const gRxhmn = generator.multiply(zkp.r).add(X.multiply(ModuloN(h, curveParams.CURVE.n)));\n    return zkp.V.equals(gRxhmn);\n}\n\nexport {\n    GenerateZKPGProvided,\n    VerifyZKP\n}","import { ClientAuthInit, ClientAuthInitPrivate, ClientAuthVerify, ClientAuthVerifyPrivate, RegisterOutput, ServerAuthInit, ServerAuthVerify } from './dto';\nimport { GetCurve, GetG } from './ecc_ops';\nimport { Hash } from './hash';\nimport { HMac } from './hmac';\nimport { BigIntFromBase64, EncodeToBase64, PointFromBase64 } from './encoding';\nimport { CompareTo, GenerateKey, ModuloN } from './ops';\nimport { GenerateZKPGProvided, VerifyZKP } from './schnorr';\nimport { Keys, KeyTags, SupportedCurves } from './types';\nimport { ProjPointType } from '@noble/curves/abstract/weierstrass';\n\nclass Client {\n    private userName: string;\n    private password: string;\n    private server: string;\n    private curveKey: SupportedCurves;\n    private curve: ReturnType<typeof GetCurve>;\n    private G: ProjPointType<bigint>;\n    private N: bigint;\n\n    private clientAuthInit: ClientAuthInitPrivate | undefined;\n    private clientAuthVerify: ClientAuthVerifyPrivate | undefined;\n    private clientKCKey: bigint | undefined;\n    private clientSessionKey: bigint | undefined;\n    \n    public constructor(userName: string, password: string, server: string, curve: SupportedCurves) {\n        this.userName = userName;\n        this.password = password;\n        this.server = server;\n        this.curveKey = curve;\n        this.curve = GetCurve(curve);\n        this.G = GetG(curve);\n        this.N = this.curve.CURVE.n;\n    }\n\n    public async Register(): Promise<RegisterOutput | Error> {\n        try {\n            if (!this.userName || !this.password) throw new Error('Invalid user name or password');\n            if (this.userName === this.server) throw new Error('User name cannot be the same as server name');\n            const t = ModuloN(await Hash(this.userName, this.password), this.curve.CURVE.n);\n            const T = this.G.multiply(t);\n            const PI = ModuloN(await Hash(t), this.curve.CURVE.n);\n            return { User: this.userName, PI: EncodeToBase64(PI), T: EncodeToBase64(T.toRawBytes()) };\n        }\n\n        catch (e) {\n            console.error(e);\n            return new Error('Failed to register user');\n        }\n    }\n\n    public async AuthInit(): Promise<ClientAuthInit | Error> {\n        try {\n            if (!this.userName || !this.password) throw new Error('Invalid user name or password');\n            if (this.userName === this.server) throw new Error('User name cannot be the same as server name');\n            \n            const t = ModuloN(await Hash(this.userName, this.password), this.curve.CURVE.n);\n            const T = this.G.multiply(t);\n            const PI = ModuloN(await Hash(t), this.curve.CURVE.n);\n\n            const x1 = await GenerateKey(this.curveKey);\n            const X1 = this.G.multiply(x1);\n            const PI1 = await GenerateZKPGProvided(this.curveKey, this.G, this.N, x1, X1, this.userName);\n\n            const x2 = await  GenerateKey(this.curveKey);\n            const X2 = this.G.multiply(x2);\n            const PI2 = await GenerateZKPGProvided(this.curveKey, this.G, this.N, x2, X2, this.userName);\n            \n            this.clientAuthInit = { PI: PI, t: t, T: T, x1: x1, x2: x2, X1: X1, X2: X2, PI1: PI1, PI2: PI2 };\n\n            return { \n                User: this.userName, \n                X1: EncodeToBase64(X1.toRawBytes()), X2: EncodeToBase64(X2.toRawBytes()), \n                PI1_V: EncodeToBase64(PI1.V.toRawBytes()), PI2_V: EncodeToBase64(PI2.V.toRawBytes()),\n                PI1_R: EncodeToBase64(PI1.r), PI2_R: EncodeToBase64(PI2.r) \n            };\n        }\n\n        catch (e) {\n            console.error(e);\n            return new Error('Failed to authenticate (AuthInit)');\n        }\n    }\n\n    private ParseServerInit(serverInit: ServerAuthInit): ClientAuthVerifyPrivate | Error {\n        try {\n            const [ X3, X4, PI3, PI4, Beta, PIBeta] = [\n                PointFromBase64(this.curveKey, serverInit.X3), \n                PointFromBase64(this.curveKey, serverInit.X4),\n                { V: PointFromBase64(this.curveKey, serverInit.PI3_V), r: BigIntFromBase64(serverInit.PI3_R) },\n                { V: PointFromBase64(this.curveKey, serverInit.PI4_V), r: BigIntFromBase64(serverInit.PI4_R) },\n                PointFromBase64(this.curveKey, serverInit.Beta),\n                { V: PointFromBase64(this.curveKey, serverInit.PIBeta_V), r: BigIntFromBase64(serverInit.PIBeta_R) }\n            ];\n\n            return { X3, X4, PI3, PI4, Beta, PIBeta };\n        }\n\n        catch (e) {\n            console.error(e);\n            return new Error('Failed to authenticate (ParseServerInit)');\n        }\n    }\n\n    public async AuthVerify(serverInit: ServerAuthInit): Promise<ClientAuthVerify | Error> {\n        const parsedRequest = this.ParseServerInit(serverInit);\n        if (parsedRequest instanceof Error) return parsedRequest;\n        this.clientAuthVerify = parsedRequest;\n\n        try {\n            if (!this.clientAuthInit) throw new Error('AuthInit must be called before AuthVerify');\n            if (!this.clientAuthVerify) throw new Error('Failed to authenticate (Init)');\n\n            const { X3, X4, PI3, PI4, Beta, PIBeta } = this.clientAuthVerify;\n            const { x1, x2, X1, X2, PI1, PI2, t, PI } = this.clientAuthInit;\n\n            if (! await VerifyZKP(this.curveKey, this.G, X3, PI3, this.server)) \n                throw new Error('Failed to authenticate PI3 (Verify)');\n\n            if (! await VerifyZKP(this.curveKey, this.G, X4, PI4, this.server)) \n                throw new Error('Failed to authenticate PI4 (Verify)');\n\n            const GBeta = X1.add(X2).add(X3);\n            if (! await VerifyZKP(this.curveKey, GBeta, Beta, PIBeta, this.server)) \n                throw new Error('Failed to authenticate PIBeta (Verify)');\n\n            const GAlpha = X1.add(X3).add(X4);\n            const x2pi = ModuloN(x2 * PI, this.N);\n            const Alpha = GAlpha.multiply(x2pi);\n            const PIAlpha = await GenerateZKPGProvided(this.curveKey, GAlpha, this.N, x2pi, Alpha, this.userName);\n\n            let rawClientKey = Beta.subtract(X4.multiply(x2pi));\n            rawClientKey = rawClientKey.multiply(x2);\n\n            this.clientSessionKey = await Hash(rawClientKey.toRawBytes(), Keys.Session);\n            this.clientKCKey = await Hash(rawClientKey.toRawBytes(), Keys.Confirmation);\n\n            const hTranscript = await Hash(\n                rawClientKey.toRawBytes(),\n                this.userName,\n                X1.toRawBytes(), X2.toRawBytes(),\n                PI1, PI2,\n                this.server,\n                X3.toRawBytes(), X4.toRawBytes(),\n                PI3, PI4,\n                Beta.toRawBytes(), PIBeta,\n                Alpha.toRawBytes(), PIAlpha\n            );\n\n            const rValue = ModuloN(x1 - (t * hTranscript), this.N)\n\n            const clientKCTag = await HMac(\n                this.clientKCKey, \n                KeyTags.ClientKC,\n                this.userName,\n                this.server,\n                X1.toRawBytes(),\n                X2.toRawBytes(),\n                X3.toRawBytes(),\n                X4.toRawBytes()\n            );\n\n            return {\n                Alpha: EncodeToBase64(Alpha.toRawBytes()),\n                PIAlpha_V: EncodeToBase64(PIAlpha.V.toRawBytes()),\n                PIAlpha_R: EncodeToBase64(PIAlpha.r),\n                R: EncodeToBase64(rValue),\n                ClientKCTag: EncodeToBase64(clientKCTag)\n            };\n        }\n\n        catch (e) {\n            console.error(e);\n            return Error('Failed to authenticate (Verify)');\n        }\n    }\n\n    public async ValidateServer(serverVerify: ServerAuthVerify): Promise<void | Error> {\n        try {\n            if (!this.clientKCKey) throw new Error('AuthVerify must be called before ValidateServer');\n            if (!this.clientAuthInit) throw new Error('AuthVerify must be called before ValidateServer');\n            if (!this.clientAuthVerify) throw new Error('AuthVerify must be called before ValidateServer');\n\n            const { X3, X4 } = this.clientAuthVerify;\n            const { X1, X2 } = this.clientAuthInit;\n\n            const serverKcTag2 = await HMac(\n                this.clientKCKey,\n                KeyTags.ServerKC,\n                this.server,\n                this.userName,\n                X3.toRawBytes(),\n                X4.toRawBytes(),\n                X1.toRawBytes(),\n                X2.toRawBytes()\n            );\n\n            const serverKCTagc = BigIntFromBase64(serverVerify.ServerKCTag);\n            if (CompareTo(serverKcTag2, serverKCTagc) !== 0) throw new Error('Failed to validate server (KCTag)');\n        }\n\n        catch (e) {\n            console.error(e);\n            return new Error('Failed to validate server (KCTag)');\n        }\n    }\n\n    public GetSessionKey(): bigint | Error {\n        if (!this.clientSessionKey) return new Error('Session key not generated');\n        return this.clientSessionKey;\n    }\n}\n\nexport {\n    Client\n}"],"mappings":"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","names":["SupportedCurves","Keys","KeyTags","bytesToNumberBE","bytesToNumberBE","bytesToNumberBE","concatBytes","concatBytes","bytesToNumberBE","concatBytes"]}