/// <reference types="node" />
import { Point } from "@dedis/kyber";
import { Message, Properties } from "protobufjs/light";
import { Roster } from "../network/proto";
export declare const BLS_INDEX = 0;
export declare const BDN_INDEX = 1;
export declare class SkipBlock extends Message<SkipBlock> {
    /**
     * Getter for the forward links
     *
     * @returns the list of forward links
     */
    readonly forwardLinks: ForwardLink[];
    /**
     * @see README#Message classes
     */
    static register(): void;
    readonly hash: Buffer;
    readonly index: number;
    readonly height: number;
    readonly maxHeight: number;
    readonly baseHeight: number;
    readonly backlinks: Buffer[];
    readonly verifiers: Buffer[];
    readonly genesis: Buffer;
    readonly data: Buffer;
    readonly roster: Roster;
    readonly forward: ForwardLink[];
    readonly payload: Buffer;
    readonly signatureScheme: number;
    constructor(props?: Properties<SkipBlock>);
    /**
     * Calculate the hash of the block
     *
     * @returns the hash
     */
    computeHash(): Buffer;
}
export declare class ForwardLink extends Message<ForwardLink> {
    /**
     * @see README#Message classes
     */
    static register(): void;
    readonly from: Buffer;
    readonly to: Buffer;
    readonly newRoster: Roster;
    readonly signature: ByzcoinSignature;
    constructor(props?: Properties<ForwardLink>);
    /**
     * Compute the hash of the forward link
     *
     * @returns the hash
     */
    hash(): Buffer;
    /**
     * Verify the signature against the list of public keys
     *
     * @param publics The list of public keys
     * @returns an error if something is wrong, null otherwise
     */
    verify(publics: Point[]): Error;
    /**
     * Verify the signature against the list of public keys
     * using the specified signature scheme
     *
     * @param publics   The list of public keys
     * @param scheme    The index of the signature scheme
     * @returns an error if something is wrong, null otherwise
     */
    verifyWithScheme(publics: Point[], scheme: number): Error;
    private verifyBLS;
    private verifyBDN;
}
export declare class ByzcoinSignature extends Message<ByzcoinSignature> {
    /**
     * @see README#Message classes
     */
    static register(): void;
    readonly msg: Buffer;
    readonly sig: Buffer;
    constructor(props?: Properties<ByzcoinSignature>);
    /**
     * Get the actual bytes of the signature. The remaining part is the mask.
     *
     * @returns the signature
     */
    getSignature(): Buffer;
    /**
     * Get the correct aggregation of the public keys using the mask to know
     * which one has been used
     *
     * @param publics The public keys of the roster
     * @returns the aggregated public key for this signature
     */
    getAggregate(publics: Point[]): Point;
    /**
     * Get the buffer slice that represents the mask
     *
     * @returns the mask as a buffer
     */
    getMask(): Buffer;
}
