/**
 * @internal this entity is meant for internal use only
 */
export declare class ExchangeData {
    constructor(json: JSON | any);
    /**
     * the Id of the exchange data. We encourage using either a v4 UUID or a HL7 Id.
     */
    id?: string;
    /**
     * the revision of the exchange data in the database, used for conflict management / optimistic locking.
     */
    rev?: string;
    /**
     * ID of the data owner which created this exchange data, in order to share some data with the [delegate].
     */
    delegator: string;
    /**
     * ID of a data owner which can use this exchange data to access data shared with him by [delegator].
     */
    delegate: string;
    /**
     * Aes key to use for sharing data from the delegator to the delegate, encrypted with the public keys of both delegate
     * and delegator. This key should never be sent decrypted to the server, as it allows to read medical data.
     */
    exchangeKey: {
        [keyPairFingerprint: string]: string;
    };
    /**
     * Key used for access control to data shared from the delegator to the delegate, encrypted with the public keys of both
     * delegate and delegator.
     *
     * This key will be used by the client to calculate the keys of [HasSecureDelegationsAccessControl.securityMetadata] which
     * allows to implement a form of access control where the identity of data owners with access to a specific entity can't be
     * deduced from the database alone. This is useful for example to allow patients to access their medical data without creating
     * a deducible link between the patient and the medical data in the database.
     *
     * There are no strict requirements on how the client should use this secret to create the security metadata key, but for
     * authentication the client must be able to provide a 128 bit long access control key (see [DataOwnerAuthenticationDetails.accessControlKeys])
     * which once hashed using sha256 will give the key of the security metadata.
     * However, in order to avoid introducing undesired links between entities which could be detrimental to the patients privacy
     * the access control keys should be created also using information on the entity class and confidentiality level of information
     * in applications where hcps share information using a hierarchical structure.
     * ```
     * accessControlKey = sha256Bytes(accessControlSecret + entityClass + confidentialityLevel).take(16)
     * securityMetadataKey = sha256Hex(accessControlKey)
     * ```
     */
    accessControlSecret: {
        [keyPairFingerprint: string]: string;
    };
    /**
     * Encrypted signature key (hmac-sha256) shared between delegate and delegator, to allow either of them to modify
     * the exchange data, without voiding the authenticity guarantee.
     */
    sharedSignatureKey: {
        [keyPairFingerprint: string]: string;
    };
    /**
     * Signature to ensure the key data has not been tampered with by third parties (any actor without access to the
     * keypair of the delegator/delegate): when creating new exchange data the delegator will create a new hmac key and
     * sign it with his own private key.
     * This field will contain the signature by fingerprint of the public key to use for verification.
     */
    delegatorSignature?: {
        [keyPairFingerprint: string]: string;
    };
    /**
     * Base 64 signature of the exchange data, to ensure it was not tampered by third parties. This signature validates:
     * - The (decrypted) exchange key
     * - The (decrypted) access control secret
     * - The delegator and delegates being part of the exchange data
     * - The public keys used in the exchange data (allows to consider them as verified in a second moment).
     */
    sharedSignature: string;
    /**
     * hard delete (unix epoch in ms) timestamp of the object. Filled automatically when the delete method is called.
     */
    deletionDate?: number;
}
