jscofhe
Version:
Implements js library for CoFHE
632 lines (614 loc) • 25.3 kB
text/typescript
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 {
private setup_node_address;
private setup_node_port;
private compute_node_address;
private compute_node_port;
private compute_client;
private keep_alive;
private usable_m;
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 };