Prototype Implementations: The Secure Link Prediction Problem
Installation and Execution
- Download the source code from this link
- Install PBC library
- Install supporting Libraries; m4, flex, bison etc.
- Install GNU library if required
- Run myBGN_test to check whether the above library installed properly or not
- Give graph data file in the data folder.
- Update data file path, number of nodes and security bits in makefile
- Run SLP1 by "make slp1"
- Run SLP2 by "make slp2"
SLP1.c
-
SLP1_Key_Gen(int lambda):
Generates a key for the Secure Link Prediction (SLP) protocol.- Parameters:
lambda
- Security parameter used for key generation. - Returns: A pointer to the generated SLP1 key.
- Parameters:
-
SLP1_Encrypt_Matrix(int ** AdjMatrix, BGN_PK_t * bgn_pk, int noOfNodes):
Encrypts an adjacency matrix using the Boneh-Goh-Nissim (BGN) cryptosystem.- Parameters:
AdjMatrix
- The adjacency matrix to be encrypted.bgn_pk
- The public key used for encryption.noOfNodes
- The number of nodes in the graph represented by the adjacency matrix.
- Returns: A pointer to the encrypted matrix.
- Parameters:
-
SLP1_Trapdoor_Gen(TRAPDOOR_t *trapdoor, int vertId, int keyPerm):
Generates a trapdoor for a given vertex ID and key permutation.- Parameters:
trapdoor
- Pointer to the structure where the trapdoor will be stored.vertId
- The ID of the vertex for which the trapdoor is generated.keyPerm
- Key permutation value.
- Returns: None.
- Parameters:
-
read_matrix_from_file(char * fileName, int noOfNodes):
Reads an adjacency matrix from a file.- Parameters:
fileName
- Name of the file containing the adjacency matrix.noOfNodes
- Number of nodes in the graph.
- Returns: Pointer to the read adjacency matrix.
- Parameters:
-
time_difference(struct timeval * startTime, struct timeval * endTime):
Calculates the time difference between two timestamps.- Parameters:
startTime
- Pointer to the start time.endTime
- Pointer to the end time.
- Returns: Time difference in seconds.
- Parameters:
-
SLP1_print_times(int noOfNodes, int lambda, double runTimeKG, double runTimeEM, int noOfLPQueries, double runTimeTG, double runTimeLPQ, double runTimeFMV):
Prints the times taken for different steps in the SLP protocol and writes them to a file.- Parameters:
noOfNodes
- Number of nodes in the graph.lambda
- Security parameter.runTimeKG
- Time taken for key generation.runTimeEM
- Time taken for matrix encryption.noOfLPQueries
- Number of link prediction queries.runTimeTG
- Time taken for trapdoor generation.runTimeLPQ
- Time taken for each link prediction query.runTimeFMV
- Time taken for finding the maximum vertex.
- Returns: None.
- Parameters:
SLP2.c
-
SLP2_contruct_b_matrix(int **AdjMatrix, int noOfNodes)
Description: Constructs a matrix B used in Secure Link Prediction (SLP) problem.
Parameters:- AdjMatrix: 2D array representing the adjacency matrix.
- noOfNodes: Number of nodes in the graph.
-
SLP1_Key_Gen(int lambda)
Description: Generates a key for Secure Link Prediction (SLP) using the BGN (Boneh-Goh-Nissim) cryptosystem.
Parameters:- lambda: Security parameter.
-
SLP1_Encrypt_Matrix(int **AdjMatrix, BGN_PK_t *bgn_pk, int noOfNodes)
Description: Encrypts the adjacency matrix using the BGN cryptosystem for Secure Link Prediction (SLP).
Parameters:- AdjMatrix: Adjacency matrix.
- bgn_pk: Public key.
- noOfNodes: Number of nodes.
-
SLP2_Encrypt_Matrix(int **BMatrix, BGN_PK_t *bgn_pk, int noOfNodes)
Description: Encrypts the B matrix using the BGN cryptosystem for Secure Link Prediction (SLP).
Parameters:- BMatrix: B matrix.
- bgn_pk: Public key.
- noOfNodes: Number of nodes.
-
SLP1_Trapdoor_Gen(TRAPDOOR_t *trapdoor, int vertId, int keyPerm)
Description: Generates a trapdoor for Secure Link Prediction (SLP1) based on vertex ID and key permutation.
Parameters:- trapdoor: Trapdoor structure to store the generated trapdoor.
- vertId: Vertex ID.
- keyPerm: Key permutation.
-
SLP1_LinkPred_Query(LP_Q_RES_t *lpQres, TRAPDOOR_t *trapdoor, element_t **EncMatrix, BGN_PK_t *bgn_pk, int noOfNodes)
Description: Performs a link prediction query for Secure Link Prediction (SLP1) using the given trapdoor and encrypted matrix.
Parameters:- lpQres: Link prediction query result structure.
- trapdoor: Trapdoor generated for the query.
- EncMatrix: Encrypted matrix.
- bgn_pk: Public key.
- noOfNodes: Number of nodes.
-
SLP2_LinkPred_Query(LP2_Q_RES_t *lp2Qres, TRAPDOOR_t *trapdoor, element_t **EncMatrixA, element_t **EncMatrixB, BGN_PK_t *bgn_pk, int noOfNodes)
Description: Performs a link prediction query for Secure Link Prediction (SLP2) using the given trapdoor and encrypted matrices.
Parameters:- lp2Qres: Link prediction query result structure.
- trapdoor: Trapdoor generated for the query.
- EncMatrixA: Encrypted matrix A.
- EncMatrixB: Encrypted matrix B.
- bgn_pk: Public key.
- noOfNodes: Number of nodes.
-
SLP1_Find_Max_Vertex(SLP1_RES_t *slp1Res, SLP1_KEY_t *slp1_KEY, LP_Q_RES_t *lpQres, int noOfNodes)
Description: Finds the maximum vertex in Secure Link Prediction (SLP1) based on the link prediction query result.
Parameters:- slp1Res: Result structure for SLP1.
- slp1_KEY: Key structure for SLP1.
- lpQres: Link prediction query result structure.
- noOfNodes: Number of nodes.
-
SLP2_Find_Max_Vertex(SLP2_RES_t *slp2Res, SLP1_KEY_t *slp1_KEY, LP2_Q_RES_t *lp2Qres, int noOfNodes)
Description: Finds the maximum vertex in Secure Link Prediction (SLP2) based on the link prediction query result.
Parameters:- slp2Res: Result structure for SLP2.
- slp1_KEY: Key structure for SLP1.
- lp2Qres: Link prediction query result structure.
- noOfNodes: Number of nodes.
-
SLP2_sort(mpz_t *scores, int *indices, int n)
Description: Sorts scores and indices for Secure Link Prediction (SLP2) based on maximum scores.
Parameters:- scores: Scores to be sorted.
- indices: Indices corresponding to the scores.
- n: Number of elements.
-
SLP2_final_score(SLP1_KEY_t *slp1_KEY, element_t *m, SLP2_RES_t *slp2Res, int noOfNodes)
Description: Calculates the final score for Secure Link Prediction (SLP2) based on the maximum score and degree.
Parameters:- slp1_KEY: Key structure for SLP1.
- m: Element representing the matrix.
- slp2Res: Result structure for SLP2.
- noOfNodes: Number of nodes.
-
SLP1_Clear_LPQRes(LP_Q_RES_t *lpQres, int noOfNodes)
Description: Clears the memory allocated for the link prediction query result for Secure Link Prediction (SLP1).
Parameters:- lpQres: Link prediction query result structure.
- noOfNodes: Number of nodes.
-
SLP1_Clear_All(int **AdjMatrix, element_t **EncMatrix, BGN_PK_t *bgnPk, int noOfNodes)
Description: Clears the memory allocated for all structures and matrices used in Secure Link Prediction (SLP1).
Parameters:- AdjMatrix: Adjacency matrix.
- EncMatrix: Encrypted matrix.
- bgnPk: Public key.
- noOfNodes: Number of nodes.
-
SLP2_Clear_All(int **AdjMatrix, element_t **EncMatrixA, int **BMatrix, element_t **EncMatrixB, BGN_PK_t *bgnPk, int noOfNodes)
Description: Clears the memory allocated for all structures and matrices used in Secure Link Prediction (SLP2).
Parameters:- AdjMatrix: Adjacency matrix.
- EncMatrixA: Encrypted matrix A.
- BMatrix: B matrix.
- EncMatrixB: Encrypted matrix B.
- bgnPk: Public key.
- noOfNodes: Number of nodes.
-
SLP1_print_slp1_res(SLP1_RES_t *slp1Res)
Description: Prints the result of Secure Link Prediction (SLP1) including the vertex ID and maximum score.
Parameters:- slp1Res: Result structure for SLP1.
-
SLP2_print_slp2_res(SLP2_RES_t *slp2Res)
Description: Prints the result of Secure Link Prediction (SLP2) including the vertex ID and maximum score.
Parameters:- slp2Res: Result structure for SLP2.
-
read_matrix_from_file(char *fileName, int noOfNodes)
Description: Reads the adjacency matrix from a file.
Parameters:- fileName: Name of the file containing the adjacency matrix.
- noOfNodes: Number of nodes.
-
Allocate_2D_int(int n, int m)
Description: Allocates memory for a 2D integer array.
Parameters:- n: Number of rows.
- m: Number of columns.
-
Allocate_2D_element(int n, int m)
Description: Allocates memory for a 2D element array.
Parameters:- n: Number of rows.
- m: Number of columns.
-
time_difference(struct timeval *startTime, struct timeval *endTime)
Description: Calculates the time difference between two timevals.
Parameters:- startTime: Start time.
- endTime: End time.