OpenMined Private Set Intersection (PSI)

2.0.6 · active · verified Fri Apr 17

OpenMined PSI (Private Set Intersection) is a cryptographic library that allows two parties to compute the intersection of their private datasets without revealing non-intersecting elements. It focuses on securely computing the *size* of the intersection. The library is currently at version 2.0.6 and is actively maintained with frequent minor updates for dependency bumps and Python version support.

Common errors

Warnings

Install

Imports

Quickstart

This example demonstrates how two parties (client and server) can compute the size of their set intersection using `openmined-psi` without revealing their full sets. The output will be the size of the intersection.

from openmined_psi import client, server

# Setup common inputs
client_inputs = ["client@example.com", "client2@example.com", "test@example.com"]
server_inputs = ["client@example.com", "server@example.com", "test@example.com"]

# --- Server side ---
# Create a server instance (e.g., with a new key)
server_psi = server.CreateWithNewKey(False) # 'False' means not to reveal the server's key

# Create a setup message. The first parameter is the FPR (False Positive Rate),
# the second is the number of elements in the server's set.
setup_message = server_psi.CreateSetupMessage(0.001, len(server_inputs), server_inputs)

# --- Client side ---
# Create a client instance
client_psi = client.CreateWithNewKey(False) # 'False' means not to reveal the client's key

# Create a request message from the client's inputs
request = client_psi.CreateRequest(client_inputs)

# --- Server side (handling request) ---
# Server handles the client's request
response = server_psi.HandleRequest(request)

# --- Client side (getting intersection size) ---
# Client processes the server's response to get the intersection size.
# Note: openmined-psi only provides the intersection *size* for privacy reasons,
# not the actual elements themselves.
intersection_size = client_psi.GetIntersectionSize(response)

print(f"Intersection size: {intersection_size}") # Expected: 2 (client@example.com, test@example.com)

view raw JSON →