Package org.apache.sysds.runtime.controlprogram.paramserv

# Class NativeHEHelper

java.lang.Object
org.apache.sysds.runtime.controlprogram.paramserv.NativeHEHelper

public class NativeHEHelper extends Object

## Constructor Summary

Constructors
Constructor
Description
`NativeHEHelper()`

## Method Summary

Modifier and Type
Method
Description
`static byte[]`
`accumulateCiphertexts(long server, byte[][] ciphertexts)`
accumulates the given ciphertexts into a sum ciphertext and returns it
`static byte[]`
`aggregatePartialPublicKeys(long server, byte[][] partial_public_keys)`
accumulates the given partial public keys into a public key, stores it in server and returns it
`static double[]`
`average(long server, byte[] encrypted_sum, byte[][] partial_plaintexts)`
averages the partial decryptions and returns the result
`static byte[]`
`encrypt(long client, double[] plaintexts)`
encrypts data with public key stored in client setPublicKey() must have been called before calling this
`static byte[]`
`generateA(long server)`
this generates the a constant.
`static byte[]`
`generatePartialPublicKey(long client)`
generates a partial public key stores a partial private key corresponding to the partial public key in client
`static long`
`initClient(byte[] a)`
generates a Client object
`static boolean`
`initialize()`
`static long`
`initServer()`
generates the Server object and returns a pointer to it
`static byte[]`
`partiallyDecrypt(long client, byte[] ciphertext)`
partially decrypts ciphertexts with the partial private key.
`static void`
`setPublicKey(long client, byte[] public_key)`
sets the public key and stores it in client

### Methods inherited from class java.lang.Object

`equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Constructor Details

### NativeHEHelper

public NativeHEHelper()

## Method Details

### initialize

public static boolean initialize()

### initClient

public static long initClient(byte[] a)
generates a Client object

Parameters:
  `a` - a constant generated by generateA
Returns:
  a pointer to the native client object

### generatePartialPublicKey

public static byte[] generatePartialPublicKey(long client)
generates a partial public key stores a partial private key corresponding to the partial public key in client

Parameters:
  `client` - A pointer to a Client, obtained from initClient
Returns:
  a serialized partial public key

### setPublicKey

public static void setPublicKey(long client, byte[] public_key)
sets the public key and stores it in client

Parameters:
  `client` - A pointer to a Client, obtained from initClient
  `public_key` - serialized public key obtained from generatePartialPublicKey

### encrypt

public static byte[] encrypt(long client, double[] plaintexts)
encrypts data with public key stored in client setPublicKey() must have been called before calling this

Parameters:
  `client` - A pointer to a Client, obtained from initClient
  `plaintexts` - array of double values to be encrypted
Returns:
  serialized ciphertext

### partiallyDecrypt

public static byte[] partiallyDecrypt(long client, byte[] ciphertext)
partially decrypts ciphertexts with the partial private key. generatePartialPublicKey() must have been called before calling this function

Parameters:
  `client` - A pointer to a Client, obtained from initClient
  `ciphertext` - serialized ciphertext
Returns:
  serialized partial decryption

### initServer

public static long initServer()
generates the Server object and returns a pointer to it

Returns:
  pointer to a native Server object

### generateA

public static byte[] generateA(long server)
this generates the a constant. in a future version we want to generate this together with the clients to prevent misuse

Parameters:
  `server` - A pointer to a Server, obtained from initServer
Returns:
  serialized a constant

### aggregatePartialPublicKeys

public static byte[] aggregatePartialPublicKeys(long server, byte[][] partial_public_keys)
accumulates the given partial public keys into a public key, stores it in server and returns it

Parameters:
  `server` - A pointer to a Server, obtained from initServer
  `partial_public_keys` - array of serialized partial public keys
Returns:
  serialized partial public key

### accumulateCiphertexts

public static byte[] accumulateCiphertexts(long server, byte[][] ciphertexts)
accumulates the given ciphertexts into a sum ciphertext and returns it

Parameters:
  `server` - A pointer to a Server, obtained from initServer
  `ciphertexts` - array of serialized ciphertexts
Returns:
  serialized accumulated ciphertext

### average

public static double[] average(long server, byte[] encrypted_sum, byte[][] partial_plaintexts)
averages the partial decryptions and returns the result

Parameters:
  `server` - A pointer to a Server, obtained from initServer
  `encrypted_sum` - the result of accumulateCiphertexts()
  `partial_plaintexts` - the result of partiallyDecrypt of each ciphertext fed into accumulateCiphertexts
Returns:
  average of original data