import { ethers } from "ethers";
import { RLNBaseContract } from "./contract/rln_base_contract.js";
import { Keystore } from "./keystore/index.js";
import type { DecryptedCredentials, EncryptedCredentials } from "./keystore/index.js";
import { KeystoreEntity, Password } from "./keystore/types.js";
import { RegisterMembershipOptions, StartRLNOptions } from "./types.js";
import { Zerokit } from "./zerokit.js";
/**
 * Manages credentials for RLN
 * This is a lightweight implementation of the RLN contract that doesn't require Zerokit
 * It is used to register membership and generate identity credentials
 */
export declare class RLNCredentialsManager {
    protected started: boolean;
    protected starting: boolean;
    contract: undefined | RLNBaseContract;
    signer: undefined | ethers.Signer;
    protected keystore: Keystore;
    credentials: undefined | DecryptedCredentials;
    zerokit: undefined | Zerokit;
    constructor(zerokit?: Zerokit);
    get provider(): undefined | ethers.providers.Provider;
    start(options?: StartRLNOptions): Promise<void>;
    registerMembership(options: RegisterMembershipOptions): Promise<undefined | DecryptedCredentials>;
    /**
     * Changes credentials in use by relying on provided Keystore earlier in rln.start
     * @param id: string, hash of credentials to select from Keystore
     * @param password: string or bytes to use to decrypt credentials from Keystore
     */
    useCredentials(id: string, password: Password): Promise<void>;
    protected determineStartOptions(options: StartRLNOptions, credentials: KeystoreEntity | undefined): Promise<StartRLNOptions>;
    protected static decryptCredentialsIfNeeded(credentials?: EncryptedCredentials | DecryptedCredentials): Promise<{
        credentials?: DecryptedCredentials;
        keystore?: Keystore;
    }>;
    protected verifyCredentialsAgainstContract(credentials: KeystoreEntity): Promise<void>;
    /**
     * Generates an identity credential from a seed string
     * This is a pure implementation that doesn't rely on Zerokit
     * @param seed A string seed to generate the identity from
     * @returns IdentityCredential
     */
    private generateSeededIdentityCredential;
    /**
     * Helper: take 32-byte BE, reduce mod Q, return 32-byte BE
     */
    private reduceIdCommitment;
}
