import { CryptoPrimitives } from './CryptoPrimitives';
import { EntityWithDelegationTypeName } from '../utils/EntityWithDelegationTypeName';
/**
 * @internal this class is intended for internal use only and may be changed without notice.
 */
export declare class AccessControlSecretUtils {
    private readonly primitives;
    constructor(primitives: CryptoPrimitives);
    /**
     * Size of the access control keys returned by this class.
     */
    get accessControlKeyLengthBytes(): number;
    /**
     * Get the access control key to use for entities of the provided type and using the provided secret foreign key. The combination of secret foreign
     * keys and entity type ensures that unauthorised people will not be able to draw links between entities of different types of data or different
     * confidentiality levels.
     * These keys will be sent to the icure server for access control of data owners which require anonymous delegations.
     * @param accessControlSecret an access control secret
     * @param entityTypeName an entity type name
     */
    accessControlKeyFor(accessControlSecret: string, entityTypeName: EntityWithDelegationTypeName): Promise<ArrayBuffer>;
    allAccessControlKeyFor(accessControlSecret: string): Promise<ArrayBuffer[]>;
    /**
     * Get value to use as key in secure delegations for entities of the provided type with the provided secret foreign key. The combination of secret
     * foreign keys and entity type ensures that unauthorised people will not be able to draw links between entities of different types of data or
     * different confidentiality levels.
     * These keys will be used in the secure delegations map of security metadata.
     * @param accessControlSecret an access control secret
     * @param entityTypeName an entity type name
     */
    secureDelegationKeyFor(accessControlSecret: string, entityTypeName: EntityWithDelegationTypeName): Promise<string>;
    allSecureDelegationKeysFor(accessControlSecret: string): Promise<string[]>;
    getEncodedAccessControlKeys(accessControlSecrets: string[], entityTypeName: EntityWithDelegationTypeName): Promise<string>;
}
