import type { CryptoProvider, HashID } from '../cryptoTypes.js'; import type { Elt, Group, Scalar, GroupID } from '../groupTypes.js'; import type { MODE, SUITE } from '../consts.js'; export type SuiteID = (typeof SUITE)[keyof typeof SUITE]; export type ModeOprf = typeof MODE.OPRF; export type ModePoprf = typeof MODE.POPRF; export type ModeVoprf = typeof MODE.VOPRF; export type ModeID = ModeOprf | ModeVoprf | ModePoprf; export type HasSerialize = { serialize(): T; }; export type Serialized> = T extends HasSerialize ? R : never; export interface Modal { readonly mode: M; readonly suite: SuiteID; } export interface UsesCrypto { readonly crypto: CryptoProvider; readonly group: Group; } export type DLEQProof = { c: Scalar; s: Scalar; serialize(): Uint8Array; }; export type OPRFElement = Elt | Scalar | DLEQProof; export interface EvaluationRequest { readonly blinded: Array>; } export interface BaseEvaluation { readonly mode: ModeID; readonly evaluated: Array>; } export interface VerifiableEvaluation extends BaseEvaluation { readonly proof: Serialized; } export interface FinalizeData { readonly inputs: Array; readonly blinds: Array; readonly evalReq: { readonly blinded: Array; }; } export interface KeyPair { readonly privateKey: Uint8Array; readonly publicKey: Uint8Array; } export interface KeySizes { readonly privateKey: number; readonly publicKey: number; } export interface KeyManager extends Modal, UsesCrypto { sizes(): KeySizes; validatePrivate(privateKey: Uint8Array): boolean; validatePublic(publicKey: Uint8Array): boolean; randomPrivate(): Promise; derivePrivate(seed: Uint8Array, info: Uint8Array): Promise; generatePublic(privateKey: Uint8Array): Uint8Array; generatePair(): Promise; derivePair(seed: Uint8Array, info: Uint8Array): Promise; } type Info = M extends ModePoprf ? [info?: Uint8Array] : []; type Evaluation = M extends ModeOprf ? BaseEvaluation : VerifiableEvaluation; type PublicKey = M extends ModeOprf ? [] : [publicKey: Uint8Array]; export interface OprfBase extends Modal, UsesCrypto { } export interface Client extends OprfBase { spyHandle: { blinds: { randomBlinder(): Promise; }; }; blind(inputs: Uint8Array[]): Promise<[FinalizeData, EvaluationRequest]>; finalize(finData: FinalizeData, evaluation: Omit, 'mode'>, ...info: Info): Promise>; } export interface Server extends OprfBase { spyHandle: { dleqProver: { randomScalar(): Promise; }; }; blindEvaluate(req: EvaluationRequest, ...info: Info): Promise>; verifyFinalize(input: Uint8Array, output: Uint8Array, ...info: Info): Promise; } export interface ModeParams extends Modal { group: GroupID; hash: HashID; sizes: { elt: number; scalar: number; proof: number; output: number; }; } export interface Mode extends Modal, UsesCrypto { params: ModeParams; readonly keys: KeyManager; makeServer(privateKey: Uint8Array): Server; makeClient(...publicKey: PublicKey): Client; } export interface MakeModeParams extends Modal { } export interface OprfApi { readonly Suite: typeof SUITE; readonly Mode: typeof MODE; readonly crypto: CryptoProvider; withConfig(config: { crypto: CryptoProvider; }): OprfApi; makeMode(params: MakeModeParams): Mode; } export {}; //# sourceMappingURL=types.d.ts.map