import { Cache, Field, PrivateKey, PublicKey, SmartContract } from 'o1js';
import { Presentation, PresentationSpec } from 'mina-attestations';
type CharArray<S extends string> = S extends `${infer First}${infer Rest}` ? [First, ...CharArray<Rest>] : [];
type CountChars<S extends string> = CharArray<S>['length'];
type ArrayOfLength<Length extends number, Collected extends unknown[] = []> = Collected['length'] extends Length ? Collected : ArrayOfLength<Length, [unknown, ...Collected]>;
type IsAtMost<S extends string, Max extends number> = ArrayOfLength<Max> extends [...ArrayOfLength<CountChars<S>>, ...unknown[]] ? true : false;
type LengthMismatchError<Expected extends number> = {
    expectedLength: Expected;
};
export type EnforceMaxLength<S extends string, Max extends number> = IsAtMost<S, Max> extends true ? S : LengthMismatchError<Max>;
declare const secretMaxLength: 20;
export type SecretMaxLength = typeof secretMaxLength;
export declare const EcdsaCredential: Omit<{
    spec: import("mina-attestations").CredentialSpec<import("mina-attestations").ImportedWitness<{
        signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes;
    }>, {
        message: import("mina-attestations/build/src/dynamic.js").DynamicBytesBase;
    }>;
    program: {
        publicInputType: import("o1js").Provable<{
            signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes;
        }, {
            signerAddress: {
                bytes: {
                    value: bigint;
                }[];
            };
        }>;
        publicOutputType: import("mina-attestations/build/src/o1js-missing.js").ProvableType<import("mina-attestations/build/src/credential.js").Credential<{
            message: import("mina-attestations/build/src/dynamic.js").DynamicBytesBase;
        }>>;
        analyzeMethods(): Promise<Record<string, any>>;
        maxProofsVerified(): Promise<0 | 1 | 2>;
        compile: (options?: {
            cache?: import("o1js").Cache;
            forceRecompile?: boolean;
            proofsEnabled?: boolean;
        }) => Promise<{
            verificationKey: import("o1js").VerificationKey;
        }>;
        run(...inputs: any): Promise<{
            proof: import("o1js").Proof<{
                signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes;
            }, import("mina-attestations/build/src/credential.js").Credential<{
                message: import("mina-attestations/build/src/dynamic.js").DynamicBytesBase;
            }>>;
            auxiliaryOutput: undefined;
        }>;
    };
    isCompiled: boolean;
    verificationKey: import("o1js").VerificationKey | undefined;
    create(...inputs: any): Promise<import("mina-attestations/build/src/credential-imported.js").Imported<{
        message: import("mina-attestations/build/src/dynamic.js").DynamicBytesBase;
    }, {
        signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes;
    }>>;
    fromProof(proof: import("o1js").Proof<{
        signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes;
    }, import("mina-attestations/build/src/credential.js").Credential<{
        message: import("mina-attestations/build/src/dynamic.js").DynamicBytesBase;
    }>>, vk: import("o1js").VerificationKey): Promise<import("mina-attestations/build/src/credential-imported.js").Imported<{
        message: import("mina-attestations/build/src/dynamic.js").DynamicBytesBase;
    }, {
        signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes;
    }>>;
    compile(options?: {
        cache?: import("o1js").Cache;
        forceRecompile?: boolean;
        proofsEnabled?: boolean;
    } | undefined): Promise<import("o1js").VerificationKey>;
    dummy({ owner, data, }: import("mina-attestations/build/src/credential.js").Credential<{
        message: import("mina-attestations/build/src/dynamic.js").DynamicBytesBase;
    } | {
        message: Uint8Array<ArrayBufferLike>;
    }>): Promise<import("mina-attestations/build/src/credential-imported.js").Imported<{
        message: import("mina-attestations/build/src/dynamic.js").DynamicBytesBase;
    }, {
        signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes;
    }>>;
}, "create"> & {
    create(inputs: {
        publicInput: {
            signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes | {
                bytes: {
                    value: bigint;
                }[];
            };
        };
        privateInput: {
            message: Uint8Array<ArrayBufferLike> | import("mina-attestations/build/src/dynamic.js").DynamicBytesBase;
            signature: import("o1js").EcdsaSignature | {
                r: bigint;
                s: bigint;
            };
            parityBit: boolean | import("o1js").Unconstrained<boolean>;
        };
        owner: import("o1js").PublicKey;
    }): Promise<import("mina-attestations/build/src/credential-imported.js").Imported<{
        message: import("mina-attestations/build/src/dynamic.js").DynamicBytesBase;
    }, {
        signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes;
    }>>;
};
declare let EcdsaSigPresentationSpecPreCompile: {
    spec: PresentationSpec<{
        owner: PublicKey;
        issuer: {
            signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes;
        };
        messageHash: import("o1js/dist/node/lib/provable/field.js").Field;
    }, {
        credential: import("mina-attestations").CredentialSpec<import("mina-attestations").ImportedWitness<{
            signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes;
        }>, {
            message: import("mina-attestations/build/src/dynamic.js").DynamicBytesBase;
        }>;
    }>;
    program: import("mina-attestations/build/src/program.js").Program<{
        owner: PublicKey;
        issuer: {
            signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes;
        };
        messageHash: import("o1js/dist/node/lib/provable/field.js").Field;
    }, {
        credential: import("mina-attestations").CredentialSpec<import("mina-attestations").ImportedWitness<{
            signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes;
        }>, {
            message: import("mina-attestations/build/src/dynamic.js").DynamicBytesBase;
        }>;
    }>;
    verificationKey: import("o1js").VerificationKey;
    ProvablePresentation: {
        new (input: {
            claims: import("mina-attestations/build/src/types.js").ExcludeFromRecord<{
                credential: never;
            }, never>;
            outputClaim: {
                owner: PublicKey;
                issuer: {
                    signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes;
                };
                messageHash: import("o1js/dist/node/lib/provable/field.js").Field;
            };
            clientNonce: Field;
            serverNonce: import("o1js").Unconstrained<bigint>;
            proof: import("o1js").Unconstrained<string>;
        }): import("mina-attestations/build/src/presentation.js").ProvablePresentation<{
            owner: PublicKey;
            issuer: {
                signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes;
            };
            messageHash: import("o1js/dist/node/lib/provable/field.js").Field;
        }, {
            credential: import("mina-attestations").CredentialSpec<import("mina-attestations").ImportedWitness<{
                signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes;
            }>, {
                message: import("mina-attestations/build/src/dynamic.js").DynamicBytesBase;
            }>;
        }>;
        readonly provable: import("o1js").Provable<import("mina-attestations/build/src/presentation.js").ProvablePresentation, Presentation<any, any>>;
    } & {
        from(input: Presentation): import("mina-attestations/build/src/presentation.js").ProvablePresentation<{
            owner: PublicKey;
            issuer: {
                signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes;
            };
            messageHash: import("o1js/dist/node/lib/provable/field.js").Field;
        }, {
            credential: import("mina-attestations").CredentialSpec<import("mina-attestations").ImportedWitness<{
                signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes;
            }>, {
                message: import("mina-attestations/build/src/dynamic.js").DynamicBytesBase;
            }>;
        }>;
        provable: import("o1js").Provable<import("mina-attestations/build/src/presentation.js").ProvablePresentation<{
            owner: PublicKey;
            issuer: {
                signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes;
            };
            messageHash: import("o1js/dist/node/lib/provable/field.js").Field;
        }, {
            credential: import("mina-attestations").CredentialSpec<import("mina-attestations").ImportedWitness<{
                signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes;
            }>, {
                message: import("mina-attestations/build/src/dynamic.js").DynamicBytesBase;
            }>;
        }>, Presentation<{
            owner: PublicKey;
            issuer: {
                signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes;
            };
            messageHash: import("o1js/dist/node/lib/provable/field.js").Field;
        }, {
            credential: import("mina-attestations").CredentialSpec<import("mina-attestations").ImportedWitness<{
                signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes;
            }>, {
                message: import("mina-attestations/build/src/dynamic.js").DynamicBytesBase;
            }>;
        }>>;
    };
};
export declare class ProvableEcdsaSigPresentation extends EcdsaSigPresentationSpecPreCompile.ProvablePresentation {
}
export declare class EcdsaSigPresentationVerifier extends SmartContract {
    verifyPresentation(presentation: ProvableEcdsaSigPresentation): Promise<{
        owner: PublicKey;
        issuer: {
            signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes;
        };
        messageHash: import("o1js/dist/node/lib/provable/field.js").Field;
    }>;
}
export declare function compileEcdsaEthereum(cache?: Cache): Promise<void>;
export declare function compileEcdsaSigPresentationVerifier(cache?: Cache): Promise<void>;
export declare function createEcdsaMinaCredential<FixedString extends string>(ethSignature: string, ethWalletAddress: string, minaPubKey: PublicKey, secret: EnforceMaxLength<FixedString, SecretMaxLength>): Promise<string>;
export declare function createEcdsaSigPresentationRequest(zkAppAddress: PublicKey): Promise<string>;
export declare function createEcdsaSigPresentation(presentationRequestJson: string, credentialJson: string, owner: PrivateKey): Promise<string>;
export declare function verifyEcdsaSigPresentation(presentationJson: string, zkAppAddress: PublicKey): Promise<{
    owner: PublicKey;
    issuer: {
        signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes;
    };
    messageHash: import("o1js/dist/node/lib/provable/field.js").Field;
}>;
export declare function hashSecret<FixedString extends string>(secret: EnforceMaxLength<FixedString, SecretMaxLength>): Field;
export declare function getSecretHashFromPresentationJson(presentationJson: string): {
    credentialAttestationBEHex: string;
    credentialAttestationHashField: import("o1js/dist/node/lib/provable/field.js").Field;
    credentialAttestationBigInt: bigint;
};
export {};
