UNPKG

jscofhe

Version:
625 lines (607 loc) 25.1 kB
import BigNumber from 'bignumber.js'; /** * Interface for a cryptographic system * @template SecretKey - The type of the secret key * @template SecretKeyShare - The type of the secret key share * @template PublicKey - The type of the public key * @template PlainText - The type of the plaintext * @template CipherText - The type of the ciphertext * @template PartialDecryptionResult - The type of the partial decryption result * @interface ICryptoSystem * @description This interface defines the methods and properties that a cryptographic system should implement. * It includes methods for encryption, decryption, serialization, and deserialization of keys and ciphertexts. * It also includes methods for converting between plaintext and ciphertext, and for combining partial decryptions. */ interface ICryptoSystem<SecretKey, SecretKeyShare, PublicKey, PlainText, CipherText, PartialDecryptionResult> { /** * Generates a secret key * @returns A secret key */ keygen(): SecretKey; /** * Generates a public key from a secret key * @param secret_key A secret key to be used for generating the public key * @returns A public key */ keygen(secret_key: SecretKey): PublicKey; /** * Generates secret key shares from a secret key for threshold setting * @param secret_key A secret key to be used for generating the secret key shares * @param threshold The threshold for the secret key shares * @param total The total number of parties * @returns An array of arrays of secret key shares for each party for each threshold combination */ keygen(secret_key: SecretKey, threshold: number, total: number): SecretKeyShare[][]; /** * Converts normal float number to a plaintext object * @param value A number to be converted to a plaintext * @returns A plaintext object * @throws TypeError if the value is not a number * @throws RangeError if the value is not in the range of the plaintext */ make_plaintext: (value: bigint) => PlainText; /** * * Converts a plaintext object to a normal BigNumber * @param plaintext A plaintext object to be converted to a number * @returns A BigNumber object representing the plaintext value * @throws TypeError if the plaintext is not a correct plaintext object */ get_plaintext_value: (plaintext: PlainText) => BigNumber; /** * Encrypts a plaintext object using the public key * @param pk A public key to be used for encryption * @param plaintext A plaintext object to be encrypted * @returns A ciphertext object * @throws TypeError if the plaintext is not a correct plaintext object or/and the public key is not a correct public key object */ encrypt: (pk: PublicKey, pt: PlainText) => CipherText; /** * Combine partial decryptions to get the final plaintext * @param ciphertext A ciphertext object to be decrypted * @param partial_decryptions An array of partial decryptions to be combined * @returns A plaintext object * @throws TypeError if the ciphertext is not a correct ciphertext object or/and the partial decryptions are not correct partial decryption objects * @throws CoFHEValueError if the partial decryptions are not correct partial decryption objects */ combine_partial_decryption_results: (ciphertext: CipherText, partial_decryptions: PartialDecryptionResult[]) => PlainText; /** * Deserializes a secret key from a byte array * @param serialized_secret_key A byte array to be deserialized * @returns A secret key object * @throws TypeError if the byte array is not a correct byte array * @throws CoFHEValueError if the byte array is not a correct byte array */ deserialize_public_key: (serialized_pub_key: Uint8Array) => PublicKey; /** * Serializes a ciphertext to a byte array * @param ciphertext A ciphertext object to be serialized * @returns A byte array * @throws TypeError if the ciphertext is not a correct ciphertext object */ serialize_ciphertext: (ciphertext: CipherText) => Uint8Array; /** * Deserializes a ciphertext from a byte array * @param serialized_ciphertext A byte array to be deserialized * @returns A ciphertext object * @throws TypeError if the byte array is not a correct byte array */ deserialize_ciphertext: (serialized_ciphertext: Uint8Array) => CipherText; /** * Serializes a partial decryption result to a byte array * @param partial_decryption_result A partial decryption result to be serialized * @returns A byte array * @throws TypeError if the partial decryption result is not a correct partial decryption result object */ serialize_partial_decryption_result: (partial_decryption_result: PartialDecryptionResult) => Uint8Array; /** * Deserializes a partial decryption result from a byte array * @param serialized_partial_decryption_result A byte array to be deserialized * @throws TypeError if the byte array is not a correct byte array * @throws CoFHEValueError if the byte array is not a correct byte array */ deserialize_partial_decryption_result: (serialized_partial_decryption_result: Uint8Array) => PartialDecryptionResult; } declare class QFI { private a_m; private b_m; private c_m; constructor(a: bigint, b: bigint, c: bigint); clone(): QFI; a(): bigint; b(): bigint; c(): bigint; /** * Calculates the discriminant of the form */ discriminant(): bigint; /** * Checks if the form is the neutral element of the class group */ is_one(): boolean; /** * Makes the form negative */ neg(): void; /** * Returns ax^2 + bxy + cy^2 * @param x * @param y */ eval(x: bigint, y: bigint): bigint; lift(l: bigint): void; lift_2exp(k: number): void; to_maximal_order(l: bigint, deltaK: bigint, with_reduction?: boolean): void; to_maximal_order_2exp(k: number, deltaK: bigint, with_reduction?: boolean): void; kernel_representative(l: bigint, deltaK: bigint): bigint; kernel_representative_2exp(k: number, deltaK: bigint): bigint; set_c_from_disc(disc: bigint): void; normalize(): void; rho(): void; reduction(): void; prime_to(l: bigint): void; prime_to_2exp(): void; static nucomp(f1: QFI, f2: QFI, L: bigint, negf2: boolean): QFI; static nudupl(f: QFI, L: bigint): QFI; static nupow(f: QFI, n: bigint, L: bigint): QFI; static nupow_2_forms(f0: QFI, n0: bigint, f1: QFI, n1: bigint, L: bigint): QFI; static nupow_2_forms_2exp(f: QFI, n: bigint, d: number, e: number, fe: QFI, fd: QFI, fed: QFI, L: bigint): QFI; } declare class ClassGroup { kronecker(l: bigint): void; private disc_m; private default_nucomp_bound_m; private class_number_bound_m; constructor(disc_in: bigint, class_number_bound?: bigint); disc(): bigint; default_nucomp_bound(): bigint; one(): QFI; primeform(l: bigint): QFI; class_number_bound(): bigint; private calc_class_number_bound; nucomp(f1: QFI, f2: QFI): QFI; nucompinv(f1: QFI, f2: QFI): QFI; nudupl(f: QFI): QFI; nudupl_niter(f: QFI, niter: number): QFI; nupow(f: QFI, n: bigint): QFI; nupow_2_forms(f0: QFI, n0: bigint, f1: QFI, n1: bigint): QFI; nupow_2_forms_2exp(f: QFI, n: bigint, d: number, e: number, fe: QFI, fd: QFI, fed: QFI): QFI; } declare class RandGen { random_bigint(n: bigint): bigint; random_bigint_2exp(n: number): bigint; random_bytes(n: number): Uint8Array; random_bool(): boolean; random_prime(nbits_: number): bigint; private static get_bytes; } declare class CLHSM2kSecretKey { private sk_m; constructor(sk: bigint); get sk(): bigint; static create_new(cs: CLHSM2k, randgen: RandGen): CLHSM2kSecretKey; } declare class CLHSM2kPublicKey { private pk_m; private d_m; private e_m; private pk_e_precomp_m; private pk_d_precomp_m; private pk_de_precomp_m; constructor(pk: QFI, cs: CLHSM2k); get pk(): QFI; exponentiation(cs: CLHSM2k, n: bigint): QFI; static create_new(cs: CLHSM2k, sk: CLHSM2kSecretKey): CLHSM2kPublicKey; } declare class CLHSM2kCleartext { private m_m; constructor(m: bigint); get m(): bigint; static create_new(m: bigint): CLHSM2kCleartext; static decrypt(cs: CLHSM2k, sk: CLHSM2kSecretKey, ct: CLHSM2kCiphertext): CLHSM2kCleartext; } declare class CLHSM2kCiphertext { private c1_m; private c2_m; constructor(c1: QFI, c2: QFI); get c1(): QFI; get c2(): QFI; static create_new(cs: CLHSM2k, pk: CLHSM2kPublicKey, m: CLHSM2kCleartext, r: bigint): CLHSM2kCiphertext; static add_ciphertexts(cs: CLHSM2k, pk: CLHSM2kPublicKey, ct1: CLHSM2kCiphertext, ct2: CLHSM2kCiphertext, r: bigint): CLHSM2kCiphertext; static scal_ciphertexts(cs: CLHSM2k, pk: CLHSM2kPublicKey, pt: CLHSM2kCleartext, ct: CLHSM2kCiphertext, r: bigint): CLHSM2kCiphertext; } type CLHSM2kSecretKeyShare = bigint; type CLHSM2kPartialDecryptionResult = QFI; declare class CLHSM2k { private randgen; private large_message_variant_used_m; private n_m; private k_m; private m_m; private cl_delta_k_m; private cl_delta_m; private h_m; private distance_m; private exponent_bound_m; private d_m; private e_m; private h_e_precomp_m; private h_d_precomp_m; private h_de_precomp_m; constructor(n: bigint, k: number, cl_delta_k_class_number_bound?: bigint); static create(sec_bits: number, k: number): CLHSM2k; get large_message_variant_used(): boolean; get n(): bigint; get k(): number; get m(): bigint; get delta_k(): bigint; get delta(): bigint; get cl_delta_k(): ClassGroup; get cl_delta(): ClassGroup; get cl_g(): ClassGroup; get h(): QFI; get secretkey_bound(): bigint; get cleartext_bound(): bigint; get encrypt_randomness_bound(): bigint; get lambda_distance(): bigint; power_of_h(n: bigint): QFI; power_of_f(m: bigint): QFI; dlog_in_F(fm: QFI): bigint; from_Cl_DeltaK_to_Cl_Delta(f: QFI): QFI; keygen(): CLHSM2kSecretKey; keygen(sk: CLHSM2kSecretKey): CLHSM2kPublicKey; keygen(sk: CLHSM2kSecretKey, t: number, n: number): CLHSM2kSecretKeyShare[][]; create_cleartext(m: bigint): CLHSM2kCleartext; encrypt(pk: CLHSM2kPublicKey, m: CLHSM2kCleartext, r?: bigint): CLHSM2kCiphertext; decrypt(sk: CLHSM2kSecretKey, ct: CLHSM2kCiphertext): CLHSM2kCleartext; partial_decryption(ski: CLHSM2kSecretKeyShare, ct: CLHSM2kCiphertext): CLHSM2kPartialDecryptionResult; combine_partial_decryption_results(ct: CLHSM2kCiphertext, ds: CLHSM2kPartialDecryptionResult[]): CLHSM2kCleartext; add_ciphertexts(pk: CLHSM2kPublicKey, ca: CLHSM2kCiphertext, cb: CLHSM2kCiphertext): CLHSM2kCiphertext; scal_ciphertexts(pk: CLHSM2kPublicKey, pt: CLHSM2kCleartext, ct: CLHSM2kCiphertext): CLHSM2kCiphertext; private static random_n; private compute_delta_k; private compute_delta; private raise_to_power_m; private F_kerphi_square; private F_kerphi_div; } declare class CPUCryptoSystem implements ICryptoSystem<CLHSM2kSecretKey, CLHSM2kSecretKeyShare, CLHSM2kPublicKey, CLHSM2kCleartext, CLHSM2kCiphertext, CLHSM2kPartialDecryptionResult> { private k_m; private clhsm2k; constructor(sec_bits: number, k: number, clhsm2k?: CLHSM2k); static create_from_n(n: bigint, k: number, cl_delta_k_class_number?: bigint): CPUCryptoSystem; keygen(secret_key?: CLHSM2kSecretKey, t?: number, n?: number): CLHSM2kSecretKey & CLHSM2kPublicKey & bigint[][]; make_plaintext(value: bigint): CLHSM2kCleartext; get_plaintext_value(plaintext: CLHSM2kCleartext): BigNumber; encrypt(pk: CLHSM2kPublicKey, pt: CLHSM2kCleartext): CLHSM2kCiphertext; combine_partial_decryption_results(ciphertext: CLHSM2kCiphertext, partial_decryptions: CLHSM2kPartialDecryptionResult[]): CLHSM2kCleartext; deserialize_public_key(serialized_pub_key: Uint8Array): CLHSM2kPublicKey; serialize_partial_decryption_result(partial_decryption_result: CLHSM2kPartialDecryptionResult): Uint8Array; deserialize_partial_decryption_result(serialized_partial_decryption_result: Uint8Array): CLHSM2kPartialDecryptionResult; serialize_ciphertext(ciphertext: CLHSM2kCiphertext): Uint8Array; deserialize_ciphertext(serialized_ciphertext: Uint8Array): CLHSM2kCiphertext; serialize_qfi_binary(qfi: QFI): Uint8Array; private deserialize_qfi_binary; } declare function fetch_class_bound_from_addon_service(url: string): Promise<bigint>; interface Reencryptor<CipherText, PlainText, PartialDecryptionResult, PKCSecretKey, PKCPublicKey> { reencrypt: (partial_decryption_result: PartialDecryptionResult, pkc_public_key: PKCPublicKey) => Promise<Uint8Array>; decrypt: (reencrypted_partial_decryption_results: Uint8Array[], ct: CipherText, reencryption_private_key: PKCSecretKey) => Promise<PlainText>; generate_reencryption_key_pair(): Promise<{ public_key: PKCPublicKey; secret_key: PKCSecretKey; }>; serialize_reencryption_private_key: (sk: PKCSecretKey) => Promise<Uint8Array>; serialize_reencryption_public_key: (pk: PKCPublicKey) => Promise<Uint8Array>; deserialize_reencryption_private_key: (serialized_reencryption_private_key: Uint8Array) => Promise<PKCSecretKey>; deserialize_reencryption_public_key: (serialized_reencryption_public_key: Uint8Array) => Promise<PKCPublicKey>; concatenate_reencrypted_partial_decryption_results: (reencrypted_partial_decryption_results: Uint8Array[]) => Promise<Uint8Array>; split_reencrypted_partial_decryption_results: (reencrypted_partial_decryption_results: Uint8Array) => Promise<Uint8Array[]>; } declare enum ComputeOperationType { UNARY = 0, BINARY = 1, TERNARY = 2 } declare enum ComputeOperation { DECRYPT = 0, REENCRYPT = 1, ADD = 2, SUBTRACT = 3, MULTIPLY = 4, DIVIDE = 5, LT = 6, GT = 7, EQ = 8, NEQ = 9, LTEQ = 10, GTEQ = 11 } declare enum DataType { SINGLE = 0, TENSOR = 1, TENSOR_ID = 2 } declare enum DataEncryptionType { PLAINTEXT = 0, CIPHERTEXT = 1 } declare class ComputeOperationOperand { data_type: DataType; encryption_type: DataEncryptionType; data: Uint8Array; constructor(data_type: DataType, encryption_type: DataEncryptionType, data: Uint8Array); to_string(): Uint8Array; static from_string(str: Uint8Array): ComputeOperationOperand; static from_string(str: Uint8Array, num_operands: number): ComputeOperationOperand[]; } declare class ComputeOperationInstance { operation_type: ComputeOperationType; operation: ComputeOperation; operands: ComputeOperationOperand[]; constructor(operation_type: ComputeOperationType, operation: ComputeOperation, operands: ComputeOperationOperand[]); to_string(): Uint8Array; static from_string(str: Uint8Array): ComputeOperationInstance; } declare class ComputeRequest { operation: ComputeOperationInstance; constructor(operation: ComputeOperationInstance); to_string(): Uint8Array; static from_string(str: Uint8Array): ComputeRequest; } declare enum ComputeResponseStatus { SUCCESS = 0, ERROR = 1 } declare class ComputeResponse { status: ComputeResponseStatus; data: Uint8Array; constructor(status: ComputeResponseStatus, data: Uint8Array); to_string(): Uint8Array; static from_string(str: Uint8Array): ComputeResponse; } declare enum NodeType { SETUP_NODE = 0, CoFHE_NODE = 1, COMPUTE_NODE = 2, CLIENT_NODE = 3 } interface NodeDetails { ip: string; port: string; type: NodeType; } declare enum ReencryptorType { RSA = 0 } interface ReencryptorDetails { type: ReencryptorType; key_size: number; } declare enum CryptoSystemType { CoFHE_CPU = 0 } interface CryptoSystemDetails { type: CryptoSystemType; public_key: Uint8Array; security_level: number; k: number; threshold: number; total_nodes: number; N: string; } declare class NetworkDetails { private self_node_m; private nodes_m; private cryptosystem_details_m; private secret_key_shares_m; private reencryption_details_m; constructor(self_node_m: NodeDetails, nodes_m: NodeDetails[], cryptosystem_details_m: CryptoSystemDetails, secret_key_shares_m: Uint8Array[], reencryption_details_m: ReencryptorDetails); get self_node(): NodeDetails; get nodes(): NodeDetails[]; get cryptosystem_details(): CryptoSystemDetails; get secret_key_shares(): Uint8Array[]; get reencryption_details(): ReencryptorDetails; to_json(): object; to_string(): string; static from_string(json_dump: string): NetworkDetails; } interface Computer { usable: boolean; connect(): Promise<void>; compute(req: ComputeRequest): Promise<ComputeResponse>; fetch_network_details(): Promise<NetworkDetails>; } declare class ClientNode<SecretKey, SecretKeyShare, PublicKey, PlainText, CipherText, PartialDecryptionResult, PKCSecretKey, PKCPublicKey> { private cryptosystem_m; private reencryptor_m; private network_encryption_key_m; private computer_m; constructor(cryptosystem: ICryptoSystem<SecretKey, SecretKeyShare, PublicKey, PlainText, CipherText, PartialDecryptionResult>, reencryptor: Reencryptor<CipherText, PlainText, PartialDecryptionResult, PKCSecretKey, PKCPublicKey>, network_encryption_key: PublicKey, computer: Computer | null); get cryptosystem(): ICryptoSystem<SecretKey, SecretKeyShare, PublicKey, PlainText, CipherText, PartialDecryptionResult>; get reencryptor(): Reencryptor<CipherText, PlainText, PartialDecryptionResult, PKCSecretKey, PKCPublicKey>; get network_encryption_key(): PublicKey; compute(req: ComputeRequest): Promise<ComputeResponse>; } declare class NodeJsTCPComputer implements Computer { constructor(setup_node_address: string, setup_node_port: number, keep_alive?: boolean); get usable(): boolean; connect(): Promise<void>; compute(req_: ComputeRequest): Promise<ComputeResponse>; fetch_network_details(): Promise<NetworkDetails>; } declare enum ProtocolVersion { V1 = 0 } declare enum ServiceType { COMPUTE_REQUEST = 0, COFHE_REQUEST = 1, SETUP_REQUEST = 2 } declare enum ResponseStatus { OK = 0, ERROR = 1 } declare class ResponseHeader { private ver_m; private type_m; private status_m; private data_size_m; constructor(ver_m: ProtocolVersion, type_m: ServiceType, status_m: ResponseStatus, data_size_m: bigint); get protocol_version(): ProtocolVersion; get type(): ServiceType; get status(): ResponseStatus; get data_size(): bigint; to_string(): Uint8Array; static from_string(str: Uint8Array): ResponseHeader; } declare class Response { private header_m; private data_m; constructor(header_m: ResponseHeader, data_m: Uint8Array); get header(): ResponseHeader; get protocol_version(): ProtocolVersion; get type(): ServiceType; get status(): ResponseStatus; get data_size(): bigint; get data(): Uint8Array; to_string(): Uint8Array; static from_string(str: Uint8Array): Response; } declare class RequestHeader { private ver_m; private type_m; private data_size_m; constructor(ver_m: ProtocolVersion, type_m: ServiceType, data_size_m: bigint); get protocol_version(): ProtocolVersion; get type(): ServiceType; get data_size(): bigint; to_string(): Uint8Array; static from_string(str: Uint8Array): RequestHeader; } declare class Request { private header_m; private data_m; constructor(header_m: RequestHeader, data_m: Uint8Array); get header(): RequestHeader; get protocol_version(): ProtocolVersion; get type(): ServiceType; get data_size(): bigint; get data(): Uint8Array; to_string(): Uint8Array; static from_string(str: Uint8Array): Request; } declare enum NetworkDetailsResponseStatus { OK = 0, ERROR = 1 } declare class NetworkDetailsResponseHeader { private status_m; private data_size_m; constructor(status_m: NetworkDetailsResponseStatus, data_size_m: bigint); get status(): NetworkDetailsResponseStatus; get data_size(): bigint; to_string(): Uint8Array; static from_string(str: Uint8Array): NetworkDetailsResponseHeader; } declare class NetworkDetailsResponse { private header_m; private data_m; constructor(header_m: NetworkDetailsResponseHeader, data_m: Uint8Array); get header(): NetworkDetailsResponseHeader; get status(): NetworkDetailsResponseStatus; get data_size(): bigint; get data(): Uint8Array; to_string(): Uint8Array; static from_string(str: Uint8Array): NetworkDetailsResponse; } declare enum NetworkDetailsRequestType { GET = 0, SET = 1 } declare class NetworkDetailsRequestHeader { private type_m; private data_size_m; constructor(type_m: NetworkDetailsRequestType, data_size_m: bigint); get type(): NetworkDetailsRequestType; get data_size(): bigint; to_string(): Uint8Array; static from_string(str: Uint8Array): NetworkDetailsRequestHeader; } declare class NetworkDetailsRequest { private header_m; private data_m; constructor(header_m: NetworkDetailsRequestHeader, data_m: Uint8Array); get header(): NetworkDetailsRequestHeader; get type(): NetworkDetailsRequestType; get data_size(): bigint; get data(): Uint8Array; to_string(): Uint8Array; static from_string(str: Uint8Array): NetworkDetailsRequest; } declare enum SetupResponseStatus { OK = 0, ERROR = 1 } declare class SetupResponseHeader { private status_m; private data_size_m; constructor(status_m: SetupResponseStatus, data_size_m: bigint); get status(): SetupResponseStatus; get data_size(): bigint; to_string(): Uint8Array; static from_string(str: Uint8Array): SetupResponseHeader; } declare class SetupResponse { private header_m; private data_m; constructor(header_m: SetupResponseHeader, data_m: Uint8Array); get header(): SetupResponseHeader; get status(): SetupResponseStatus; get data_size(): bigint; get data(): Uint8Array; to_string(): Uint8Array; static from_string(str: Uint8Array): SetupResponse; } declare enum SetupRequestType { BEAVERS_TRIPLET_REQUEST = 0, COMPARISION_PAIR_REQUEST = 1, JOIN_AS_NODE_REQUEST = 2, NETWORK_DETAILS_REQUEST = 3 } declare class SetupRequestHeader { private type_m; private data_size_m; constructor(type_m: SetupRequestType, data_size_m: bigint); get type(): SetupRequestType; get data_size(): bigint; to_string(): Uint8Array; static from_string(str: Uint8Array): SetupRequestHeader; } declare class SetupRequest { private header_m; private data_m; constructor(header_m: SetupRequestHeader, data_m: Uint8Array); get header(): SetupRequestHeader; get type(): SetupRequestType; get data_size(): bigint; get data(): Uint8Array; to_string(): Uint8Array; static from_string(str: Uint8Array): SetupRequest; } declare class HTTPRelayComputer implements Computer { private url; constructor(url: string); get usable(): boolean; connect(): Promise<void>; compute(req_: ComputeRequest): Promise<ComputeResponse>; fetch_network_details(): Promise<NetworkDetails>; } type RSAEncryptorPublicKey = CryptoKey; type RSAEncryptorPrivateKey = CryptoKey; declare class CPUCryptoSystemRSAReencryptorClientNode extends ClientNode<CLHSM2kSecretKey, CLHSM2kSecretKeyShare, CLHSM2kPublicKey, CLHSM2kCleartext, CLHSM2kCiphertext, CLHSM2kPartialDecryptionResult, RSAEncryptorPrivateKey, RSAEncryptorPublicKey> { constructor(security_level: number, k: number, N: string, reencryptor_key_size: number, computer: Computer | null, network_encryption_key: Uint8Array, cl_delta_k_class_number?: bigint); } declare function make_cpu_crypto_system_rsa_reencryptor_client_node(computer: Computer, cl_delta_k_class_number?: bigint): Promise<CPUCryptoSystemRSAReencryptorClientNode>; export { CLHSM2k, CLHSM2kCiphertext, CLHSM2kCleartext, CLHSM2kPublicKey, CLHSM2kSecretKey, CPUCryptoSystem, CPUCryptoSystemRSAReencryptorClientNode, ComputeOperation, ComputeOperationInstance, ComputeOperationOperand, ComputeOperationType, ComputeRequest, ComputeResponse, ComputeResponseStatus, DataEncryptionType, DataType, HTTPRelayComputer, NetworkDetails, NetworkDetailsRequest, NetworkDetailsRequestHeader, NetworkDetailsRequestType, NetworkDetailsResponse, NetworkDetailsResponseStatus, NodeJsTCPComputer, NodeType, ProtocolVersion, ReencryptorType, Request, Response, ResponseHeader, ResponseStatus, ServiceType, SetupRequest, SetupRequestHeader, SetupRequestType, SetupResponse, SetupResponseStatus, fetch_class_bound_from_addon_service, make_cpu_crypto_system_rsa_reencryptor_client_node }; export type { CryptoSystemDetails, ICryptoSystem, ReencryptorDetails };