import * as $protobuf from "protobufjs";
import Long = require("long");
export interface ITemporaryExposureKeyExport {
    startTimestamp?: (number|Long|null);
    endTimestamp?: (number|Long|null);
    region?: (string|null);
    batchNum?: (number|null);
    batchSize?: (number|null);
    signatureInfos?: (ISignatureInfo[]|null);
    keys?: (ITemporaryExposureKey[]|null);
    revisedKeys?: (ITemporaryExposureKey[]|null);
}

export class TemporaryExposureKeyExport implements ITemporaryExposureKeyExport {
    constructor(properties?: ITemporaryExposureKeyExport);
    public startTimestamp: (number|Long);
    public endTimestamp: (number|Long);
    public region: string;
    public batchNum: number;
    public batchSize: number;
    public signatureInfos: ISignatureInfo[];
    public keys: ITemporaryExposureKey[];
    public revisedKeys: ITemporaryExposureKey[];
    public static create(properties?: ITemporaryExposureKeyExport): TemporaryExposureKeyExport;
    public static encode(message: ITemporaryExposureKeyExport, writer?: $protobuf.Writer): $protobuf.Writer;
    public static encodeDelimited(message: ITemporaryExposureKeyExport, writer?: $protobuf.Writer): $protobuf.Writer;
    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): TemporaryExposureKeyExport;
    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): TemporaryExposureKeyExport;
    public static verify(message: { [k: string]: any }): (string|null);
    public static fromObject(object: { [k: string]: any }): TemporaryExposureKeyExport;
    public static toObject(message: TemporaryExposureKeyExport, options?: $protobuf.IConversionOptions): { [k: string]: any };
    public toJSON(): { [k: string]: any };
    public static getTypeUrl(typeUrlPrefix?: string): string;
}

export interface ISignatureInfo {
    verificationKeyVersion?: (string|null);
    verificationKeyId?: (string|null);
    signatureAlgorithm?: (string|null);
}

export class SignatureInfo implements ISignatureInfo {
    constructor(properties?: ISignatureInfo);
    public verificationKeyVersion: string;
    public verificationKeyId: string;
    public signatureAlgorithm: string;
    public static create(properties?: ISignatureInfo): SignatureInfo;
    public static encode(message: ISignatureInfo, writer?: $protobuf.Writer): $protobuf.Writer;
    public static encodeDelimited(message: ISignatureInfo, writer?: $protobuf.Writer): $protobuf.Writer;
    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SignatureInfo;
    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SignatureInfo;
    public static verify(message: { [k: string]: any }): (string|null);
    public static fromObject(object: { [k: string]: any }): SignatureInfo;
    public static toObject(message: SignatureInfo, options?: $protobuf.IConversionOptions): { [k: string]: any };
    public toJSON(): { [k: string]: any };
    public static getTypeUrl(typeUrlPrefix?: string): string;
}

export interface ITemporaryExposureKey {
    keyData?: (Uint8Array|null);
    transmissionRiskLevel?: (number|null);
    rollingStartIntervalNumber?: (number|null);
    rollingPeriod?: (number|null);
    reportType?: (TemporaryExposureKey.ReportType|null);
    daysSinceOnsetOfSymptoms?: (number|null);
}

export class TemporaryExposureKey implements ITemporaryExposureKey {
    constructor(properties?: ITemporaryExposureKey);
    public keyData: Uint8Array;
    public transmissionRiskLevel: number;
    public rollingStartIntervalNumber: number;
    public rollingPeriod: number;
    public reportType: TemporaryExposureKey.ReportType;
    public daysSinceOnsetOfSymptoms: number;
    public static create(properties?: ITemporaryExposureKey): TemporaryExposureKey;
    public static encode(message: ITemporaryExposureKey, writer?: $protobuf.Writer): $protobuf.Writer;
    public static encodeDelimited(message: ITemporaryExposureKey, writer?: $protobuf.Writer): $protobuf.Writer;
    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): TemporaryExposureKey;
    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): TemporaryExposureKey;
    public static verify(message: { [k: string]: any }): (string|null);
    public static fromObject(object: { [k: string]: any }): TemporaryExposureKey;
    public static toObject(message: TemporaryExposureKey, options?: $protobuf.IConversionOptions): { [k: string]: any };
    public toJSON(): { [k: string]: any };
    public static getTypeUrl(typeUrlPrefix?: string): string;
}

export namespace TemporaryExposureKey {

    enum ReportType {
        UNKNOWN = 0,
        CONFIRMED_TEST = 1,
        CONFIRMED_CLINICAL_DIAGNOSIS = 2,
        SELF_REPORT = 3,
        RECURSIVE = 4,
        REVOKED = 5
    }
}

export interface ITEKSignatureList {
    signatures?: (ITEKSignature[]|null);
}

export class TEKSignatureList implements ITEKSignatureList {
    constructor(properties?: ITEKSignatureList);
    public signatures: ITEKSignature[];
    public static create(properties?: ITEKSignatureList): TEKSignatureList;
    public static encode(message: ITEKSignatureList, writer?: $protobuf.Writer): $protobuf.Writer;
    public static encodeDelimited(message: ITEKSignatureList, writer?: $protobuf.Writer): $protobuf.Writer;
    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): TEKSignatureList;
    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): TEKSignatureList;
    public static verify(message: { [k: string]: any }): (string|null);
    public static fromObject(object: { [k: string]: any }): TEKSignatureList;
    public static toObject(message: TEKSignatureList, options?: $protobuf.IConversionOptions): { [k: string]: any };
    public toJSON(): { [k: string]: any };
    public static getTypeUrl(typeUrlPrefix?: string): string;
}

export interface ITEKSignature {
    signatureInfo?: (ISignatureInfo|null);
    batchNum?: (number|null);
    batchSize?: (number|null);
    signature?: (Uint8Array|null);
}

export class TEKSignature implements ITEKSignature {
    constructor(properties?: ITEKSignature);
    public signatureInfo?: (ISignatureInfo|null);
    public batchNum: number;
    public batchSize: number;
    public signature: Uint8Array;
    public static create(properties?: ITEKSignature): TEKSignature;
    public static encode(message: ITEKSignature, writer?: $protobuf.Writer): $protobuf.Writer;
    public static encodeDelimited(message: ITEKSignature, writer?: $protobuf.Writer): $protobuf.Writer;
    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): TEKSignature;
    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): TEKSignature;
    public static verify(message: { [k: string]: any }): (string|null);
    public static fromObject(object: { [k: string]: any }): TEKSignature;
    public static toObject(message: TEKSignature, options?: $protobuf.IConversionOptions): { [k: string]: any };
    public toJSON(): { [k: string]: any };
    public static getTypeUrl(typeUrlPrefix?: string): string;
}
