mplang-nightly 0.1.dev268__py3-none-any.whl → 0.1.dev270__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. mplang/__init__.py +391 -17
  2. mplang/{v2/backends → backends}/__init__.py +9 -7
  3. mplang/{v2/backends → backends}/bfv_impl.py +6 -6
  4. mplang/{v2/backends → backends}/crypto_impl.py +6 -6
  5. mplang/{v2/backends → backends}/field_impl.py +5 -5
  6. mplang/{v2/backends → backends}/func_impl.py +4 -4
  7. mplang/{v2/backends → backends}/phe_impl.py +3 -3
  8. mplang/{v2/backends → backends}/simp_design.md +1 -1
  9. mplang/{v2/backends → backends}/simp_driver/__init__.py +5 -5
  10. mplang/{v2/backends → backends}/simp_driver/http.py +8 -8
  11. mplang/{v2/backends → backends}/simp_driver/mem.py +9 -9
  12. mplang/{v2/backends → backends}/simp_driver/ops.py +4 -4
  13. mplang/{v2/backends → backends}/simp_driver/state.py +2 -2
  14. mplang/{v2/backends → backends}/simp_driver/values.py +2 -2
  15. mplang/{v2/backends → backends}/simp_worker/__init__.py +3 -3
  16. mplang/{v2/backends → backends}/simp_worker/http.py +10 -10
  17. mplang/{v2/backends → backends}/simp_worker/mem.py +1 -1
  18. mplang/{v2/backends → backends}/simp_worker/ops.py +5 -5
  19. mplang/{v2/backends → backends}/simp_worker/state.py +2 -4
  20. mplang/{v2/backends → backends}/spu_impl.py +8 -8
  21. mplang/{v2/backends → backends}/spu_state.py +4 -4
  22. mplang/{v2/backends → backends}/store_impl.py +3 -3
  23. mplang/{v2/backends → backends}/table_impl.py +8 -8
  24. mplang/{v2/backends → backends}/tee_impl.py +6 -6
  25. mplang/{v2/backends → backends}/tensor_impl.py +6 -6
  26. mplang/{v2/cli.py → cli.py} +9 -9
  27. mplang/{v2/cli_guide.md → cli_guide.md} +12 -12
  28. mplang/{v2/dialects → dialects}/__init__.py +5 -5
  29. mplang/{v2/dialects → dialects}/bfv.py +6 -6
  30. mplang/{v2/dialects → dialects}/crypto.py +5 -5
  31. mplang/{v2/dialects → dialects}/dtypes.py +2 -2
  32. mplang/{v2/dialects → dialects}/field.py +3 -3
  33. mplang/{v2/dialects → dialects}/func.py +2 -2
  34. mplang/{v2/dialects → dialects}/phe.py +6 -6
  35. mplang/{v2/dialects → dialects}/simp.py +6 -6
  36. mplang/{v2/dialects → dialects}/spu.py +7 -7
  37. mplang/{v2/dialects → dialects}/store.py +2 -2
  38. mplang/{v2/dialects → dialects}/table.py +3 -3
  39. mplang/{v2/dialects → dialects}/tee.py +6 -6
  40. mplang/{v2/dialects → dialects}/tensor.py +5 -5
  41. mplang/{v2/edsl → edsl}/__init__.py +3 -3
  42. mplang/{v2/edsl → edsl}/context.py +6 -6
  43. mplang/{v2/edsl → edsl}/graph.py +5 -5
  44. mplang/{v2/edsl → edsl}/jit.py +2 -2
  45. mplang/{v2/edsl → edsl}/object.py +1 -1
  46. mplang/{v2/edsl → edsl}/primitive.py +5 -5
  47. mplang/{v2/edsl → edsl}/printer.py +1 -1
  48. mplang/{v2/edsl → edsl}/serde.py +1 -1
  49. mplang/{v2/edsl → edsl}/tracer.py +7 -7
  50. mplang/{v2/edsl → edsl}/typing.py +1 -1
  51. mplang/{v2/kernels → kernels}/ldpc.cpp +13 -13
  52. mplang/{v2/kernels → kernels}/okvs.cpp +4 -4
  53. mplang/{v2/kernels → kernels}/okvs_opt.cpp +46 -31
  54. mplang/{v2/kernels → kernels}/py_kernels.py +1 -1
  55. mplang/{v2/libs → libs}/collective.py +5 -5
  56. mplang/{v2/libs → libs}/device/__init__.py +1 -1
  57. mplang/{v2/libs → libs}/device/api.py +12 -12
  58. mplang/{v2/libs → libs}/ml/__init__.py +1 -1
  59. mplang/{v2/libs → libs}/ml/sgb.py +4 -4
  60. mplang/{v2/libs → libs}/mpc/__init__.py +3 -3
  61. mplang/{v2/libs → libs}/mpc/_utils.py +2 -2
  62. mplang/{v2/libs → libs}/mpc/analytics/aggregation.py +1 -1
  63. mplang/{v2/libs → libs}/mpc/analytics/groupby.py +2 -2
  64. mplang/{v2/libs → libs}/mpc/analytics/permutation.py +3 -3
  65. mplang/{v2/libs → libs}/mpc/ot/base.py +3 -3
  66. mplang/{v2/libs → libs}/mpc/ot/extension.py +2 -2
  67. mplang/{v2/libs → libs}/mpc/ot/silent.py +4 -4
  68. mplang/{v2/libs → libs}/mpc/psi/cuckoo.py +3 -3
  69. mplang/{v2/libs → libs}/mpc/psi/okvs.py +1 -1
  70. mplang/{v2/libs → libs}/mpc/psi/okvs_gct.py +19 -13
  71. mplang/{v2/libs → libs}/mpc/psi/oprf.py +3 -3
  72. mplang/libs/mpc/psi/rr22.py +303 -0
  73. mplang/{v2/libs → libs}/mpc/psi/unbalanced.py +4 -4
  74. mplang/{v2/libs → libs}/mpc/vole/gilboa.py +3 -3
  75. mplang/{v2/libs → libs}/mpc/vole/ldpc.py +2 -2
  76. mplang/{v2/libs → libs}/mpc/vole/silver.py +6 -6
  77. mplang/{v2/runtime → runtime}/interpreter.py +11 -11
  78. mplang/{v2/runtime → runtime}/value.py +2 -2
  79. mplang/{v1/runtime → utils}/__init__.py +18 -15
  80. mplang/{v1/utils → utils}/func_utils.py +1 -1
  81. {mplang_nightly-0.1.dev268.dist-info → mplang_nightly-0.1.dev270.dist-info}/METADATA +2 -2
  82. mplang_nightly-0.1.dev270.dist-info/RECORD +102 -0
  83. mplang/v1/__init__.py +0 -157
  84. mplang/v1/_device.py +0 -602
  85. mplang/v1/analysis/__init__.py +0 -37
  86. mplang/v1/analysis/diagram.py +0 -567
  87. mplang/v1/core/__init__.py +0 -157
  88. mplang/v1/core/cluster.py +0 -343
  89. mplang/v1/core/comm.py +0 -281
  90. mplang/v1/core/context_mgr.py +0 -50
  91. mplang/v1/core/dtypes.py +0 -335
  92. mplang/v1/core/expr/__init__.py +0 -80
  93. mplang/v1/core/expr/ast.py +0 -542
  94. mplang/v1/core/expr/evaluator.py +0 -581
  95. mplang/v1/core/expr/printer.py +0 -285
  96. mplang/v1/core/expr/transformer.py +0 -141
  97. mplang/v1/core/expr/utils.py +0 -78
  98. mplang/v1/core/expr/visitor.py +0 -85
  99. mplang/v1/core/expr/walk.py +0 -387
  100. mplang/v1/core/interp.py +0 -160
  101. mplang/v1/core/mask.py +0 -325
  102. mplang/v1/core/mpir.py +0 -965
  103. mplang/v1/core/mpobject.py +0 -117
  104. mplang/v1/core/mptype.py +0 -407
  105. mplang/v1/core/pfunc.py +0 -130
  106. mplang/v1/core/primitive.py +0 -877
  107. mplang/v1/core/table.py +0 -218
  108. mplang/v1/core/tensor.py +0 -75
  109. mplang/v1/core/tracer.py +0 -383
  110. mplang/v1/host.py +0 -130
  111. mplang/v1/kernels/__init__.py +0 -41
  112. mplang/v1/kernels/base.py +0 -125
  113. mplang/v1/kernels/basic.py +0 -240
  114. mplang/v1/kernels/context.py +0 -369
  115. mplang/v1/kernels/crypto.py +0 -122
  116. mplang/v1/kernels/fhe.py +0 -858
  117. mplang/v1/kernels/mock_tee.py +0 -72
  118. mplang/v1/kernels/phe.py +0 -1864
  119. mplang/v1/kernels/spu.py +0 -341
  120. mplang/v1/kernels/sql_duckdb.py +0 -44
  121. mplang/v1/kernels/stablehlo.py +0 -90
  122. mplang/v1/kernels/value.py +0 -626
  123. mplang/v1/ops/__init__.py +0 -35
  124. mplang/v1/ops/base.py +0 -424
  125. mplang/v1/ops/basic.py +0 -294
  126. mplang/v1/ops/crypto.py +0 -262
  127. mplang/v1/ops/fhe.py +0 -272
  128. mplang/v1/ops/jax_cc.py +0 -147
  129. mplang/v1/ops/nnx_cc.py +0 -168
  130. mplang/v1/ops/phe.py +0 -216
  131. mplang/v1/ops/spu.py +0 -151
  132. mplang/v1/ops/sql_cc.py +0 -303
  133. mplang/v1/ops/tee.py +0 -36
  134. mplang/v1/protos/v1alpha1/mpir_pb2.py +0 -63
  135. mplang/v1/protos/v1alpha1/mpir_pb2.pyi +0 -557
  136. mplang/v1/protos/v1alpha1/value_pb2.py +0 -34
  137. mplang/v1/protos/v1alpha1/value_pb2.pyi +0 -169
  138. mplang/v1/runtime/channel.py +0 -230
  139. mplang/v1/runtime/cli.py +0 -451
  140. mplang/v1/runtime/client.py +0 -456
  141. mplang/v1/runtime/communicator.py +0 -131
  142. mplang/v1/runtime/data_providers.py +0 -303
  143. mplang/v1/runtime/driver.py +0 -324
  144. mplang/v1/runtime/exceptions.py +0 -27
  145. mplang/v1/runtime/http_api.md +0 -56
  146. mplang/v1/runtime/link_comm.py +0 -196
  147. mplang/v1/runtime/server.py +0 -501
  148. mplang/v1/runtime/session.py +0 -270
  149. mplang/v1/runtime/simulation.py +0 -324
  150. mplang/v1/simp/__init__.py +0 -13
  151. mplang/v1/simp/api.py +0 -353
  152. mplang/v1/simp/mpi.py +0 -131
  153. mplang/v1/simp/party.py +0 -225
  154. mplang/v1/simp/random.py +0 -120
  155. mplang/v1/simp/smpc.py +0 -238
  156. mplang/v1/utils/__init__.py +0 -13
  157. mplang/v1/utils/crypto.py +0 -32
  158. mplang/v1/utils/spu_utils.py +0 -130
  159. mplang/v1/utils/table_utils.py +0 -185
  160. mplang/v2/__init__.py +0 -424
  161. mplang/v2/libs/mpc/psi/rr22.py +0 -344
  162. mplang_nightly-0.1.dev268.dist-info/RECORD +0 -180
  163. /mplang/{v2/backends → backends}/channel.py +0 -0
  164. /mplang/{v2/edsl → edsl}/README.md +0 -0
  165. /mplang/{v2/edsl → edsl}/registry.py +0 -0
  166. /mplang/{v2/kernels → kernels}/Makefile +0 -0
  167. /mplang/{v2/kernels → kernels}/__init__.py +0 -0
  168. /mplang/{v2/kernels → kernels}/gf128.cpp +0 -0
  169. /mplang/{v2/libs → libs}/device/cluster.py +0 -0
  170. /mplang/{v2/libs → libs}/mpc/analytics/__init__.py +0 -0
  171. /mplang/{v2/libs → libs}/mpc/analytics/groupby.md +0 -0
  172. /mplang/{v2/libs → libs}/mpc/common/constants.py +0 -0
  173. /mplang/{v2/libs → libs}/mpc/ot/__init__.py +0 -0
  174. /mplang/{v2/libs → libs}/mpc/psi/__init__.py +0 -0
  175. /mplang/{v2/libs → libs}/mpc/vole/__init__.py +0 -0
  176. /mplang/{v2/runtime → runtime}/__init__.py +0 -0
  177. /mplang/{v2/runtime → runtime}/dialect_state.py +0 -0
  178. /mplang/{v2/runtime → runtime}/object_store.py +0 -0
  179. {mplang_nightly-0.1.dev268.dist-info → mplang_nightly-0.1.dev270.dist-info}/WHEEL +0 -0
  180. {mplang_nightly-0.1.dev268.dist-info → mplang_nightly-0.1.dev270.dist-info}/entry_points.txt +0 -0
  181. {mplang_nightly-0.1.dev268.dist-info → mplang_nightly-0.1.dev270.dist-info}/licenses/LICENSE +0 -0
@@ -1,344 +0,0 @@
1
- # Copyright 2025 Ant Group Co., Ltd.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- """Private Set Intersection using VOLE and OKVS (RR22-Style).
16
-
17
- This module implements a high-performance PSI protocol based on the "Blazing Fast PSI"
18
- (RR22) paper. The protocol relies on Vector Oblivious Linear Evaluation (VOLE) and
19
- Oblivious Key-Value Stores (OKVS) to achieve efficient set intersection with linear
20
- communication O(N) and computation complexity.
21
-
22
- Protocol Overview:
23
- The core idea is to mask a "Polynomial" (encoded via OKVS) with VOLE-correlated randomness,
24
- such that the mask can only be removed (and the polynomial verified) if the parties share
25
- the same element.
26
-
27
- Phases:
28
- 1. **Correlated Randomness (VOLE)**:
29
- Sender and Receiver establish a shared correlation:
30
- W = V + U * Delta
31
- - Sender holds U, V.
32
- - Receiver holds W, Delta.
33
- - U is random. Delta is a fixed secret scalar (Receiver's key).
34
-
35
- 2. **Encoding (OKVS)**:
36
- Receiver encodes their input set Y into a structure P using OKVS, such that:
37
- Decode(P, y) = H(y) for all y in Y.
38
- Here H(y) is a Random Oracle (implemented via Davies-Meyer/AES).
39
-
40
- 3. **Masking & Exchange**:
41
- Receiver masks the structure P with their VOLE share W:
42
- Q = P ^ W
43
- Receiver sends Q to Sender.
44
-
45
- 4. **Decoding & Verification**:
46
- Sender attempts to decode Q for each of their items x in X.
47
- Since OKVS is linear:
48
- Decode(Q, x) = Decode(P, x) ^ Decode(W, x)
49
-
50
- Sender reconstructs the potential "Target" value T:
51
- T = Decode(Q, x) ^ Decode(V, x) ^ H(x)
52
-
53
- If x in Y (Intersection):
54
- Decode(P, x) = H(x)
55
- Decode(W, x) = Decode(V, x) ^ Decode(U, x) * Delta
56
- Substitute into T:
57
- T = H(x) ^ (Decode(V, x) ^ Decode(U, x) * Delta) ^ Decode(V, x) ^ H(x)
58
- T = Decode(U, x) * Delta
59
-
60
- Thus, verification becomes checking if T == U* * Delta, where U* = Decode(U, x).
61
- This check is performed securely using hashes to prevent leakage.
62
- """
63
-
64
- from typing import Any, cast
65
-
66
- import jax.numpy as jnp
67
-
68
- import mplang.v2.edsl as el
69
- import mplang.v2.libs.mpc.ot.silent as silent_ot
70
- from mplang.v2.dialects import field, simp, tensor
71
-
72
-
73
- def psi_intersect(
74
- sender: int,
75
- receiver: int,
76
- n: int,
77
- sender_items: el.Object,
78
- receiver_items: el.Object,
79
- ) -> el.Object:
80
- """Execute OKVS-based PSI Protocol.
81
-
82
- Args:
83
- sender: Rank of Sender.
84
- receiver: Rank of Receiver.
85
- n: Number of items (must be same for now).
86
- sender_items: Object located at Sender containing (N,) u64 items.
87
- receiver_items: Object located at Receiver containing (N,) u64 items.
88
-
89
- Returns:
90
- Intersection verification tuple (T, U*, Delta).
91
- """
92
-
93
- # Validation
94
- if sender == receiver:
95
- raise ValueError(
96
- f"Sender ({sender}) and Receiver ({receiver}) must be different."
97
- )
98
-
99
- if n <= 0:
100
- raise ValueError(f"Input size n must be positive, got {n}.")
101
-
102
- # =========================================================================
103
- # Phase 1. Parameter Setup & Topology
104
- # =========================================================================
105
- # OKVS Size M = expansion * N.
106
- # The expansion factor is critical for the success probability of the "Peeling"
107
- # algorithm used in OKVS encoding (Garbled Cuckoo Table).
108
- # Larger N allows smaller expansion (closer to theoretical 1.23) while maintaining safety.
109
- import mplang.v2.libs.mpc.psi.okvs_gct as okvs_gct
110
-
111
- expansion = okvs_gct.get_okvs_expansion(n)
112
- M = int(n * expansion)
113
-
114
- # Align M to 128 boundary for efficient batch processing in Silent VOLE (LPN)
115
- if M % 128 != 0:
116
- M = ((M // 128) + 1) * 128
117
-
118
- # =========================================================================
119
- # Phase 2. Correlated Randomness Generation (VOLE)
120
- # =========================================================================
121
- # Parties run Silent VOLE (based on LPN assumption) to generate:
122
- # Sender: U, V (Vectors of size M)
123
- # Receiver: W, Delta
124
- # Correlation: W = V + U * Delta
125
- #
126
- # Note: U is uniformly random. It acts as a "One-Time Pad" key for the protocol.
127
-
128
- # silent_vole_random_u returns (v, w, u, delta)
129
- res_tuple = silent_ot.silent_vole_random_u(sender, receiver, M, base_k=1024)
130
- v_sender, w_receiver, u_sender, delta_receiver = res_tuple[:4]
131
-
132
- # =========================================================================
133
- # Phase 3. Receiver Encoding & Masking (OKVS)
134
- # =========================================================================
135
- # The Receiver encodes their input set Y into the OKVS structure P.
136
- # Goal: Decode(P, y) = H(y) forall y in Y.
137
- #
138
- # Then, Receiver masks P with the VOLE output W to get Q:
139
- # Q = P ^ W
140
- # This Q is sent to the Sender.
141
-
142
- # 3.1 Generate OKVS Seed (Public/Session Randomness)
143
- # Used for OKVS hashing distribution. Can be public, but generated at runtime for safety.
144
- from mplang.v2.dialects import crypto
145
- from mplang.v2.edsl import typing as elt
146
-
147
- def _gen_seed() -> Any:
148
- return crypto.random_tensor((2,), elt.u64)
149
-
150
- okvs_seed = simp.pcall_static((receiver,), _gen_seed)
151
- okvs_seed_sender = simp.shuffle_static(okvs_seed, {sender: receiver})
152
-
153
- # Instantiate OKVS Data Structure
154
- okvs = okvs_gct.SparseOKVS(M)
155
-
156
- def _recv_ops(y: Any, w: Any, delta: Any, seed: Any) -> Any:
157
- # y: (N,) Inputs
158
- # w: (M, 2) VOLE share
159
-
160
- # 3.2 Compute H(y) - The Random Oracle Target
161
- # We use Davies-Meyer construction: H(x) = E_x(0) ^ x
162
- # This is a standard, efficient, and robust way to instantiate a RO from AES.
163
-
164
- def _reshape_seeds(items: Any) -> Any:
165
- # Prepare items as AES keys (128-bit)
166
- lo = items
167
- hi = jnp.zeros_like(items)
168
- return jnp.stack([lo, hi], axis=1) # (N, 2)
169
-
170
- seeds = tensor.run_jax(_reshape_seeds, y)
171
- res_exp = field.aes_expand(seeds, 1) # (N, 1, 2)
172
-
173
- def _davies_meyer(enc: Any, s: Any) -> Any:
174
- enc_flat = enc.reshape(enc.shape[0], 2)
175
- return jnp.bitwise_xor(enc_flat, s)
176
-
177
- h_y = tensor.run_jax(_davies_meyer, res_exp, seeds)
178
-
179
- # 3.3 Solve System of Linear Equations (OKVS Encode)
180
- # We find P such that: P * M_okvs(y) = h_y
181
- p_storage = okvs.encode(y, h_y, seed)
182
-
183
- # 3.4 Mask with Vole Share
184
- # Q = P ^ W
185
- q_storage = field.add(p_storage, w)
186
-
187
- return q_storage
188
-
189
- # Execute on Receiver
190
- q_shared = simp.pcall_static(
191
- (receiver,), _recv_ops, receiver_items, w_receiver, delta_receiver, okvs_seed
192
- )
193
-
194
- # 3.5 Send Q to Sender
195
- q_sender_view = simp.shuffle_static(q_shared, {sender: receiver})
196
-
197
- # =========================================================================
198
- # Phase 4. Sender Decoding & Reconstruction
199
- # =========================================================================
200
- # Sender uses Q and their local shares (U, V) to reconstruct T.
201
- #
202
- # Derivation:
203
- # 1. S_decoded = Decode(Q, x) = Decode(P ^ W, x) = P(x) ^ W(x)
204
- # 2. Recall W(x) = V(x) ^ U(x)*Delta (VOLE property)
205
- # 3. So S_decoded = P(x) ^ V(x) ^ U(x)*Delta
206
- #
207
- # 4. Sender computes T = S_decoded ^ V(x) ^ H(x)
208
- # T = P(x) ^ V(x) ^ U(x)*Delta ^ V(x) ^ H(x)
209
- # T = P(x) ^ H(x) ^ U(x)*Delta
210
- #
211
- # 5. If x is in Intersection (Meanings x == y for some y):
212
- # Then P(x) == H(x) (by OKVS property)
213
- # So T = H(x) ^ H(x) ^ U(x)*Delta
214
- # T = U(x)*Delta
215
- #
216
- # This relation T == U* * Delta is what we verify in Phase 5.
217
-
218
- def _sender_ops(x: Any, q: Any, u: Any, v: Any, seed: Any) -> tuple[Any, Any]:
219
- # x: (N,) Sender Items
220
- # q: (M, 2) Received OKVS
221
-
222
- # 4.1 Decode Q and V at x
223
- # OKVS Decode is a linear combination of storage positions.
224
- s_decoded = okvs.decode(x, q, seed)
225
- v_decoded = okvs.decode(x, v, seed)
226
-
227
- # 4.2 Compute H(x)
228
- def _reshape_seeds(items: Any) -> Any:
229
- lo = items
230
- hi = jnp.zeros_like(items)
231
- return jnp.stack([lo, hi], axis=1)
232
-
233
- seeds_x = tensor.run_jax(_reshape_seeds, x)
234
- res_exp_x = field.aes_expand(seeds_x, 1)
235
-
236
- def _davies_meyer(enc: Any, s: Any) -> Any:
237
- enc_flat = enc.reshape(enc.shape[0], 2)
238
- return jnp.bitwise_xor(enc_flat, s)
239
-
240
- h_x = tensor.run_jax(_davies_meyer, res_exp_x, seeds_x)
241
-
242
- # 4.3 Compute T candidate
243
- # T = S ^ V ^ H(x)
244
- # Note: s_decoded is (S^V^U*Delta) effectively
245
- t_val = field.add(s_decoded, v_decoded)
246
- t_val = field.add(t_val, h_x)
247
-
248
- # 4.4 Compute U* = Decode(U, x)
249
- # This is the sender's share of the randomness for item x.
250
- s_u = field.decode_okvs(x, u, seed)
251
-
252
- return t_val, s_u
253
-
254
- t_val_sender, u_star_sender = simp.pcall_static(
255
- (sender,),
256
- _sender_ops,
257
- sender_items,
258
- q_sender_view,
259
- u_sender,
260
- v_sender,
261
- okvs_seed_sender,
262
- )
263
-
264
- # =========================================================================
265
- # Phase 5. Secure Verification
266
- # =========================================================================
267
- # The Protocol invariant is T == U* * Delta for intersection items.
268
- #
269
- # Security Risk:
270
- # We must NOT reveal T or Delta to the other party.
271
- # - If Receiver learns T, they can compute Diff = T - U*Delta = H(x) + ... and attack x.
272
- # - If Sender learns Delta, VOLE security collapses.
273
- #
274
- # Secure Verification Method:
275
- # 1. Sender sends U* (Random Mask share) to Receiver.
276
- # - U* is derived from U (random VOLE inputs) so it reveals nothing about X.
277
- #
278
- # 2. Receiver computes Target = U* * Delta.
279
- # - This allows Receiver to construct the expected value of T without knowing T's components.
280
- #
281
- # 3. Receiver Hashes the Target and sends H(Target) to Sender.
282
- # - Hashing prevents Sender from learning Delta algebraically.
283
- # - Hash function acts as a commitment.
284
- #
285
- # 4. Sender compares H(T) =? H(Target).
286
- # - Equality implies x is in Intersection.
287
-
288
- # 5.1 Sender -> Receiver: U*
289
- u_star_recv = simp.shuffle_static(u_star_sender, {receiver: sender})
290
-
291
- # 5.2 Receiver: Compute Expected Target (U* * Delta)
292
- def _recv_verify_ops(u_s: Any, delta: Any) -> Any:
293
- # u_s: (N, 2), delta: (2,)
294
-
295
- # Use tensor.run_jax to isolate JAX operations (tile is not an EDSL primitive)
296
- def _tile(d: Any) -> Any:
297
- return jnp.tile(d, (n, 1))
298
-
299
- delta_expanded = tensor.run_jax(_tile, delta)
300
-
301
- # Compute U* * Delta in GF(2^128)
302
- target = field.mul(u_s, delta_expanded)
303
- return target
304
-
305
- target_val = simp.pcall_static(
306
- (receiver,), _recv_verify_ops, u_star_recv, delta_receiver
307
- )
308
-
309
- # 5.3 Hash Exchange
310
- # Use robust hashing to prevent algebraic attacks or leakage
311
- from mplang.v2.libs.mpc.ot import extension as ot_extension
312
-
313
- def _hash_shares(share: el.Object, party: int) -> el.Object:
314
- """Hash the shares using domain separator for security."""
315
- return ot_extension.vec_hash(share, domain_sep=0xFEED, num_rows=n)
316
-
317
- # Hash(Target) on Receiver
318
- h_target_recv = simp.pcall_static(
319
- (receiver,), lambda x: _hash_shares(x, receiver), target_val
320
- )
321
-
322
- # Hash(T) on Sender
323
- h_t_sender = simp.pcall_static(
324
- (sender,), lambda x: _hash_shares(x, sender), t_val_sender
325
- )
326
-
327
- # Send Hash to Sender for comparison
328
- h_target_at_sender = simp.shuffle_static(h_target_recv, {sender: receiver})
329
-
330
- # 5.4 Final Comparison on Sender
331
- def _compare(h_t: Any, h_target: Any) -> Any:
332
- # Compare 32-byte hashes (N, 32) row-by-row
333
-
334
- def _core(a: Any, b: Any) -> Any:
335
- eq = jnp.all(a == b, axis=1)
336
- return eq.astype(jnp.uint8) # (N,) 0 or 1
337
-
338
- return tensor.run_jax(_core, h_t, h_target)
339
-
340
- intersection_mask = simp.pcall_static(
341
- (sender,), _compare, h_t_sender, h_target_at_sender
342
- )
343
-
344
- return cast(el.Object, intersection_mask)
@@ -1,180 +0,0 @@
1
- mplang/__init__.py,sha256=CdfWOdeg-I1q6ULjdBxeLioVlplA4bgPTSn_2xSk5VY,1677
2
- mplang/py.typed,sha256=RyhZV7Yxo8BvEoBiFz5fH3IWVqQKTcBBE-bzjx_N5GQ,583
3
- mplang/v1/__init__.py,sha256=m7UQeAqYwQOzFt-lYqv9eKs9kdvutW025pxEG0h7eVs,3346
4
- mplang/v1/_device.py,sha256=MY4OO7TJr2oxDXbvv_pnBweALxP2wvV0cvq3DMLHFuE,22971
5
- mplang/v1/host.py,sha256=-daviW1W4HYFhBqMzkDkJoQap8HxNDFDop2FyI_mrak,4306
6
- mplang/v1/analysis/__init__.py,sha256=RvgCE9TO_cmwHtunlhbTbzCtLc19Ym7vlmVCL2UAqCs,1059
7
- mplang/v1/analysis/diagram.py,sha256=XZgq1sq25xxnJF84WVkPDTmC90VVVaj8x6Annn_Ipu0,19477
8
- mplang/v1/core/__init__.py,sha256=RN4SugeL-Wkfhrryx_Cf1T-Ax3Ol0zrqbCxAD4Wj3JA,3375
9
- mplang/v1/core/cluster.py,sha256=d23L12eHoNDO17eojxbI4EhWi6GtUDzKbl-R6U5K580,12102
10
- mplang/v1/core/comm.py,sha256=6kQ5lnyodys_Ls_6BIrNo3E3DMwsr2z5IPn-pYh2HZs,8976
11
- mplang/v1/core/context_mgr.py,sha256=87BPy02UF7ZOPxPieSxMV_OSfXK4HJmnSFXKFaFSnwk,1544
12
- mplang/v1/core/dtypes.py,sha256=ZTXcQfcy5rKJp7JEkmE4rqqki7LalbKOplQ1bkMqpgM,11613
13
- mplang/v1/core/interp.py,sha256=iigeVh1mmdt9PL_1RRoNWYSFpYnAjEKol8qrJ8cfXO4,5933
14
- mplang/v1/core/mask.py,sha256=14DFxaA446lGjN4dzTuQgm9Shcn34rYI87YJHg0YGNQ,10693
15
- mplang/v1/core/mpir.py,sha256=CKmNiv6Q_tvxSvFcmeaYXPl67-eQiVhe9EIXT2LDU9M,38421
16
- mplang/v1/core/mpobject.py,sha256=qSRGvJ-3Vy9LLBYWQCcTYVh2EUx-pMOkFkVIQYVUwOA,3751
17
- mplang/v1/core/mptype.py,sha256=i6J2s355P4MkM0R2S5DY1aj8tzUMeoCMYEU72R2cRSo,13972
18
- mplang/v1/core/pfunc.py,sha256=TZpa15qeSxqPMacCH8UXQARoRqiR96sLYsPpJ_QIY6I,5108
19
- mplang/v1/core/primitive.py,sha256=x-GykjaNqZzGTO-zcGZiknH7UC5YBxIem-xvFo2Jvig,36772
20
- mplang/v1/core/table.py,sha256=-KcFotbhcWC1P87JeYs0ho22Fk8wWrqoVkpU9HooFFo,6626
21
- mplang/v1/core/tensor.py,sha256=PejvflIz40THE789ft4KJHp4i8l9cOSQxxJx7HiuLOA,2365
22
- mplang/v1/core/tracer.py,sha256=FI5fUCEw6Qth_poCNgu8LCHkAUDrBUMwrNW0_evSx14,14315
23
- mplang/v1/core/expr/__init__.py,sha256=pIjDsy-PYCK0Vx1r_Y0Q_vD2XaHAwTyNDan34dE5Fro,2009
24
- mplang/v1/core/expr/ast.py,sha256=w54nL371KWMK92agCmG9Pnfn8VaiK8mV2lXPKu4ff5w,20893
25
- mplang/v1/core/expr/evaluator.py,sha256=HuzHzr1e84ijohhutW4ND7spIl0O4cbvUlMsGW6oBY0,23337
26
- mplang/v1/core/expr/printer.py,sha256=3IR65WaiQBm0ITWRThRAZWgGRi3xB2SCZA34MhcaVXU,9679
27
- mplang/v1/core/expr/transformer.py,sha256=KPOGavPxWF8FksvVY6iYqyJnvcJumvb2KVUwdc9DQwc,4910
28
- mplang/v1/core/expr/utils.py,sha256=lkIM1GB9qUF0x46xVe4UGyeJH8qSB0qN2FjDpWoiGiY,2631
29
- mplang/v1/core/expr/visitor.py,sha256=C1UWZbMtTPGOpi62oaYRjO3kVqSRJcJWn1ZZw-gxLaA,2047
30
- mplang/v1/core/expr/walk.py,sha256=zhP2X_wQVgx3rMFIcq5F0o3byZ2lLpTZQTarnCkYwD4,11892
31
- mplang/v1/kernels/__init__.py,sha256=-bZWsXDC7qYkbHZh_7AvX8wQ1dnokj5LZhR5KpeKrWg,1055
32
- mplang/v1/kernels/base.py,sha256=a01tsvZSnlP2C7bdphJLIQPMI1-yFankIWansqByVVg,3829
33
- mplang/v1/kernels/basic.py,sha256=ZC5dRUEt4jXUwfPCQj4geaAX3RxO0x8SYvf2PPgVito,8881
34
- mplang/v1/kernels/context.py,sha256=vvuwwLaO8iNDCXi_Riw1DqjZvIV8QIuZ3bBJlnAyNAA,14080
35
- mplang/v1/kernels/crypto.py,sha256=YsfaCYnwRZYVvetnT28G9GdqCxC7TNyka77ctIWzjmY,4260
36
- mplang/v1/kernels/fhe.py,sha256=FY-Gs2Kqa_xF_LOWLOuFL6BLcP9gdGxZOvcU5U8ktNs,30916
37
- mplang/v1/kernels/mock_tee.py,sha256=5O6HIl-lXYsRPBwu19QHDxnzARdSj5dbl-enYqQF6mo,2495
38
- mplang/v1/kernels/phe.py,sha256=OA8Fy_xRN5KavTzt7tR0E5XDavu2PsEcGpUr2jXmvd4,73156
39
- mplang/v1/kernels/spu.py,sha256=FsZpIyM5FltxeCXRaVuavo2VJeG-O0zQ3YGALCH36zM,12492
40
- mplang/v1/kernels/sql_duckdb.py,sha256=J4wBwmh0tu1GDf9r5S-hb-Cm7sLubUpAuU4LIVoU5Fs,1718
41
- mplang/v1/kernels/stablehlo.py,sha256=9HzfqiqyK5XCHPe3AhNN0IT4QrIUoLS44R8OLHF-pT0,3217
42
- mplang/v1/kernels/value.py,sha256=7yPdbSHHFhBx4mizrYLzubBLkN6GVTkpcCLjCZAtCgA,20723
43
- mplang/v1/ops/__init__.py,sha256=EqwD85heDk4xxoqowQqnUTZGJ8UGhgDVAxtURBi-O3M,1018
44
- mplang/v1/ops/base.py,sha256=kZcRprWiRNHs5eKeBqYLoSruo-qMcNhmkGaQw_2mPfc,18162
45
- mplang/v1/ops/basic.py,sha256=DjsMYhtJ-B69bXBAI3znvC00p7v0GALOBgJD8Q3L0kc,9260
46
- mplang/v1/ops/crypto.py,sha256=YJGzXz6sXjBB6xnu3moLsirZWlOkGSPy4M8cakpvbRs,8952
47
- mplang/v1/ops/fhe.py,sha256=IHMUT7D6GRu-X-gunMK593_9N88Jf3njsLrKflvck08,9518
48
- mplang/v1/ops/jax_cc.py,sha256=O3y3bQitMbr448Uzz4ha02Jr3GZ2FhjWfuOOVcnGECQ,6112
49
- mplang/v1/ops/nnx_cc.py,sha256=LkP1qMkNoeheyonsdreXNDMgQepesOXv4AaJn0SU8Gs,7323
50
- mplang/v1/ops/phe.py,sha256=UulFSKEohmk66h9L5rsl5F1xPlRKTRxS7jb88cyCsag,7421
51
- mplang/v1/ops/spu.py,sha256=VjdNEGtGC5M8q8qn82lAuwkKiNPGQvOiJyXz52d7-Sw,4930
52
- mplang/v1/ops/sql_cc.py,sha256=EifWv-L8szHt7_baxsN69wMzu-yZi_OEIPJHxjWIAtg,9792
53
- mplang/v1/ops/tee.py,sha256=7-xCbsZiDKAtnUOQ-o65Fj2Y9nkG5nbgH2qzDOdRbhM,1251
54
- mplang/v1/protos/v1alpha1/mpir_pb2.py,sha256=Bros37t-4LMJbuUYVSM65rImUYTtZDhNTIADGbZCKp0,7522
55
- mplang/v1/protos/v1alpha1/mpir_pb2.pyi,sha256=dLxAtFW7mgFR-HYxC4ExI4jbtEWUGTKBvcKhI3BJ8m0,20972
56
- mplang/v1/protos/v1alpha1/value_pb2.py,sha256=V9fqQTqXNo2efYmlP9xOhC7EpjBUp5jL-05yrJsAvWU,2785
57
- mplang/v1/protos/v1alpha1/value_pb2.pyi,sha256=47GVvuZfiV5oaVemwh0xTfns8OYTVBT8YnluIQeQPbs,7108
58
- mplang/v1/runtime/__init__.py,sha256=if0QGJEJMw8PkNyxghzxOdWlNJOEE3UZUnkqU3q2Znc,954
59
- mplang/v1/runtime/channel.py,sha256=yfy-sI8nQJkINePnzYLtOs2bg7vYqC412uyjrSeDet8,7583
60
- mplang/v1/runtime/cli.py,sha256=xbnWqYoU35qJjgCk2M8dBg7hU1QqM7nKWbEKCKa_cz4,15343
61
- mplang/v1/runtime/client.py,sha256=FsKXrBcI0AQmGmwX7BhIhtTNFRmEhTyfNk2ruitf2Gg,15861
62
- mplang/v1/runtime/communicator.py,sha256=HukrYfnUihN4WfuURCKF8OF3vzelueGgMUEZGDMyhjE,5074
63
- mplang/v1/runtime/data_providers.py,sha256=DCj-QqVAGf9jNInPoJS9KjsfF79OZXSDT9IRytseH4E,10633
64
- mplang/v1/runtime/driver.py,sha256=2GONsWJG_USYXiqJMzHJkTwVCsJnsk9vu8bKuRQNk6g,11614
65
- mplang/v1/runtime/exceptions.py,sha256=c18U0xK20dRmgZo0ogTf5vXlkix9y3VAFuzkHxaXPEk,981
66
- mplang/v1/runtime/http_api.md,sha256=-re1DhEqMplAkv_wnqEU-PSs8tTzf4-Ml0Gq0f3Go6s,4883
67
- mplang/v1/runtime/link_comm.py,sha256=4WMq-MTaXe5CboVV_HABxq_o2p863bOXg-E3vy4tKwU,6808
68
- mplang/v1/runtime/server.py,sha256=1KSgwT0Lm1NNL_sLTf9Rr7EoIsN-gHARfs_h8dzdnLM,16997
69
- mplang/v1/runtime/session.py,sha256=-H9W4yRatLC_feOFAorXQbR5vb1imkNoefWwjKUe4-k,9648
70
- mplang/v1/runtime/simulation.py,sha256=S8_v6aHVzx3OI4w-VYLW3CmCjJslViBDPn5sVYcsOsQ,12179
71
- mplang/v1/simp/__init__.py,sha256=2WE4cmW96Xkzyq2yRRYNww4kZ5o6u6NbPV0BxqZG698,581
72
- mplang/v1/simp/api.py,sha256=X-NePnIoUfVpumYiffwNGIXnCXZ6zWzwSUmNju_fAbo,13906
73
- mplang/v1/simp/mpi.py,sha256=EAVWH8vLSkXrobmgyNUrwbHqzL4F8wufoKQmTzXCR28,4751
74
- mplang/v1/simp/party.py,sha256=_3cj6GctFzzex5_vOjsRrtOybxI9ekXFztfAy5OnOJw,8226
75
- mplang/v1/simp/random.py,sha256=X1_IzA8C-Rt6bez4oJzTExW5XOKg_EIKlzXf1yJArt4,3843
76
- mplang/v1/simp/smpc.py,sha256=JGB3zFkDyPcg-TdN77oxMfeiWNoxHkuZNpVoTO9me5Q,9267
77
- mplang/v1/utils/__init__.py,sha256=2WE4cmW96Xkzyq2yRRYNww4kZ5o6u6NbPV0BxqZG698,581
78
- mplang/v1/utils/crypto.py,sha256=rvPomBFtznRHc3RPi6Aip9lsU8zW2oxBqGv1K3vn7Rs,1052
79
- mplang/v1/utils/func_utils.py,sha256=vCJcZmu0bEbqhOQKdpttV2_MBllIcPSN0b8U4WjNGGo,5164
80
- mplang/v1/utils/spu_utils.py,sha256=S3L9RBkBe2AvSuMSQQ12cBY5Y1NPthubvErSX_7nj1A,4158
81
- mplang/v1/utils/table_utils.py,sha256=1fDgZLrRf2bvKvA45egT6RtMPgwE1cI2BokMHUU_xv4,5945
82
- mplang/v2/__init__.py,sha256=rX_DXuAu8IG_2-toMWtLB3UL0YDvXCPoxNoekVmhJG0,13837
83
- mplang/v2/cli.py,sha256=QtiTFG418k26opRy4GhVV8fwFqRS11xTLH3xRCIIm6M,19665
84
- mplang/v2/cli_guide.md,sha256=kyoCaqkvIJJ1vsvCyBu3qgOuRSb0txu9BDZoy9GU5S0,3617
85
- mplang/v2/backends/__init__.py,sha256=H-4-jBEPWBZl6XT7AxBShRINnruF_f_2lB4iaiQoXME,1988
86
- mplang/v2/backends/bfv_impl.py,sha256=cQPinze3c2xN4CmIIoXxZoIEhu9ynoGaXbdF95z_aTE,25709
87
- mplang/v2/backends/channel.py,sha256=t8P7RphNnhvo3Zj08hX85d7PxgWQXiMGNYfZPK_4YoM,6622
88
- mplang/v2/backends/crypto_impl.py,sha256=tU0KdI34hnYvYujKUkiA1XYpvy4lo_MKpidt0NSIKlk,23205
89
- mplang/v2/backends/field_impl.py,sha256=50sKGOlkUiaTj_IAola86uQeoi-fxV0o7G91BdTCWZA,14788
90
- mplang/v2/backends/func_impl.py,sha256=R0662cC0gSSfkjuLyevJ_g4bJDJirY76LTFYqEimCkE,3585
91
- mplang/v2/backends/phe_impl.py,sha256=r836e_qBHGrHhfnFail5IaUDzvS7bABjdEQmJmAtBVI,4127
92
- mplang/v2/backends/simp_design.md,sha256=CXvfxrvV1TmKlFm8IbKTbcHHwLl6AhwlY_cNqMdff_Y,5250
93
- mplang/v2/backends/spu_impl.py,sha256=8F4oXmVEr-lt9mrT5fdNznrJZeznwOd7CrmB0-dVtx8,9475
94
- mplang/v2/backends/spu_state.py,sha256=u84hgLhcCcpKvseXwtVa2hC9fj_HrLCVNHy6LMd37rE,6569
95
- mplang/v2/backends/store_impl.py,sha256=RyhADTNsnnNnwsatAMr7eeewXkVXtfNWA1oFiLXg8H0,2222
96
- mplang/v2/backends/table_impl.py,sha256=Qmd-Z_PLjSbDngWkHz0wc6VykoGHfS2-rCOk1aWudws,27566
97
- mplang/v2/backends/tee_impl.py,sha256=Gp-vqqJPtEMNqP7y68tLhL3a-EW3BQwpo_qCJOSHqKs,7044
98
- mplang/v2/backends/tensor_impl.py,sha256=8f9f4-_e-m4JWGZSbXLmSSHcgPykRBc1sAYrA3OIxEg,18906
99
- mplang/v2/backends/simp_driver/__init__.py,sha256=ahOPYYvtFVwqxiFxkpSNP8BCTao_MfCXmtt5zsMaJxg,1258
100
- mplang/v2/backends/simp_driver/http.py,sha256=Fm0M7BKf6Ddqec79btd-tJiuVaD92yghr1GJc84RXmg,5550
101
- mplang/v2/backends/simp_driver/mem.py,sha256=kx3jDAYx3QkJa1UZDhhY_JjJAdT8u-r6Hsw8fYwFPKY,9128
102
- mplang/v2/backends/simp_driver/ops.py,sha256=UeVC3eaCUwxrkN6OsJyMYj8qMDufMFQI0YogeSbhkjM,4515
103
- mplang/v2/backends/simp_driver/state.py,sha256=6tQyQg_PNzHOJkjCoNm51Wvknl3XiJZzpQXuRB4qRtM,1719
104
- mplang/v2/backends/simp_driver/values.py,sha256=OQ_7Kt6l7Pcfx5eB6GVbpunS6CG60Lj0AS6H9Wx9sKQ,1515
105
- mplang/v2/backends/simp_worker/__init__.py,sha256=93VMzntLN1kpePK1KoLsU3J3RU-krgV3smCRRRo-xKA,970
106
- mplang/v2/backends/simp_worker/http.py,sha256=HI4Kj8tsN8Z058m9D_8cU22d37VzQTlN4PW7d30dxSE,12656
107
- mplang/v2/backends/simp_worker/mem.py,sha256=coDvztNDLlflCh2oGNuO0PSMILKZ28Fvyfhks4Vsnzc,3577
108
- mplang/v2/backends/simp_worker/ops.py,sha256=DMQCsKeoMtemy5ozsVZt2eoF8NZlhLeHZMDgnBSP29I,5525
109
- mplang/v2/backends/simp_worker/state.py,sha256=eRUI7MP6gU8KPC9-H5fwcoAPKOsfW2ODWvpoKWbecMk,1554
110
- mplang/v2/dialects/__init__.py,sha256=hvzAvz6_brfFyDGgKknoPdgh5EY033YNYwotuJK_zoA,1493
111
- mplang/v2/dialects/bfv.py,sha256=XrE3FX9DHWqNzUVzY0tuwPvNVVRZYpD51JZIZF-q-l4,22350
112
- mplang/v2/dialects/crypto.py,sha256=dH_DtoE3pGAKeOLPHxeyGtXC-nGwBsOs62TKikJEaq0,22197
113
- mplang/v2/dialects/dtypes.py,sha256=bGM3Jna3BnvE4MPOurWrEmQegGPxd26z1HIWox1rj0U,12104
114
- mplang/v2/dialects/field.py,sha256=6nBJg08k5WHb2o5msr8XAnxMQLpoTej55VQ7iSRnC4o,6380
115
- mplang/v2/dialects/func.py,sha256=UlaMof4NEG28VOtiRL7zBRYgFbIX74YTqqgvozbils0,4375
116
- mplang/v2/dialects/phe.py,sha256=PkehfF2NVBOu05zXITZ87yl-YQa4hwLs7zmUPbk2XhY,22896
117
- mplang/v2/dialects/simp.py,sha256=ON7iegkHp3um5UX8V4Y5I-fGgFJ3YVwmFsXsleiqqUE,32869
118
- mplang/v2/dialects/spu.py,sha256=3JO-D394TKNH2VdFDRp5ohmG0uOcOHEs_ivFHbMZIgA,11385
119
- mplang/v2/dialects/store.py,sha256=RqUBzMAgtEMBmdT8axV5lVCv1hp5w0ZZM0Tu4iOZt-c,2114
120
- mplang/v2/dialects/table.py,sha256=jwNKHhpTRnpZVu_UhXGHKRAV0ekI8nXl5lLHa5PpxTE,13543
121
- mplang/v2/dialects/tee.py,sha256=oj_G8ebhtuz9_HarK8rKoaJNJ9ZkRbqcIxhp3m0xsjQ,10129
122
- mplang/v2/dialects/tensor.py,sha256=VVIlWtSHpeYFwGuKw7yWxwMQ_a35XJ-2ardeBed2HL8,39900
123
- mplang/v2/edsl/README.md,sha256=viflvdRojOa6Xk_UMRPqpuPGXcPGmdlv2-XR6LO7B58,7592
124
- mplang/v2/edsl/__init__.py,sha256=YqmtrJXD1NLKS-_Ofnxtiv77muokTZnrAiV7dXUZVyo,2607
125
- mplang/v2/edsl/context.py,sha256=0RgQAt7cbPudt9kyBb7wjZ31HzGMnq81Ah5sgs_qU2U,10093
126
- mplang/v2/edsl/graph.py,sha256=VXeE_9Oc9E0qfnwFDYBvFyDL79qvABLs1aFC-lheJ8M,14983
127
- mplang/v2/edsl/jit.py,sha256=tofGAqNSUPuEmqy0flaZpNaR1Y425Pk2FdmCKxRPCM8,2069
128
- mplang/v2/edsl/object.py,sha256=rijDu4yuG_Sitgfz5gk8-mJ1-3Bgor0QrQU04q9mkgo,1909
129
- mplang/v2/edsl/primitive.py,sha256=rkKGYDa8qEOr2EmVn7GTfsCGHWL_3N-eIgD7QJ4UIW8,10575
130
- mplang/v2/edsl/printer.py,sha256=x9vjhicqLvtZcrCkqQhF8QWAcvEArgyU6aqVLB9Ym2I,4396
131
- mplang/v2/edsl/registry.py,sha256=hudXZPUrUUueEwgksDKN0cnE3iiXucuTaDdDK8uSPmk,6822
132
- mplang/v2/edsl/serde.py,sha256=AKfryPMu9TiOqzkp5csck-wDHfksOgJEbndcH6tS6l0,11644
133
- mplang/v2/edsl/tracer.py,sha256=HGrduMkEH8Cov19xCXmurVe46IMBjqdFxVP6C0zDoYI,22549
134
- mplang/v2/edsl/typing.py,sha256=Ot2P8RNxVsE_sgsAFEPlH4l3MeVk3xrq0if6_8jf1nI,29290
135
- mplang/v2/kernels/Makefile,sha256=5PoPpajcb_8ByPGNHzVytmovXUwkjJs_K8MbXX9qDYs,1033
136
- mplang/v2/kernels/__init__.py,sha256=J_rDl9lAXd7QL3Nt_P3YX6j9yge7ssguSaHuafPZNKE,876
137
- mplang/v2/kernels/gf128.cpp,sha256=WIvCr3MijzwJxMi1Wnfhm8aWT8oL0fia6FeyTmFJtPQ,5975
138
- mplang/v2/kernels/ldpc.cpp,sha256=_zE90ZHQvrweRkBB3CEu80cXKG0a-QNJ59ZQ452gml8,2654
139
- mplang/v2/kernels/okvs.cpp,sha256=Z_7oGHFAdLc5d5llUNujBO8HwDBh5yd3MpfmT8ZNf1o,10347
140
- mplang/v2/kernels/okvs_opt.cpp,sha256=d_HhvMdcebYsG2x7kYzjuFgmEsh9WKLH6SHee3375Bg,10932
141
- mplang/v2/kernels/py_kernels.py,sha256=FDsD86IHV-UBzxZLolhSOkrp24PuboHXeb1gBHLOfMo,12073
142
- mplang/v2/libs/collective.py,sha256=pfXq9tmFUNKjeHhWMTjtzOi-m2Fn1lLru1G6txZVyic,10683
143
- mplang/v2/libs/device/__init__.py,sha256=mXsSvXrWmlHu6Ch87Vcd85m4L_qdDkbSvJyHyuai2fc,1251
144
- mplang/v2/libs/device/api.py,sha256=d_Wbka8bxxXsRMW6zDhjzL9LPtChSk2-ryfi-c4Mqsk,28830
145
- mplang/v2/libs/device/cluster.py,sha256=YUqYZ_IBS6rpV5ejUFP3kTxcTQHSyeDeuaJcsiFY_Js,12508
146
- mplang/v2/libs/ml/__init__.py,sha256=xTxhC_YwHP32muUEFCEwOjc-3Ml-vmO48NNECU90zm4,787
147
- mplang/v2/libs/ml/sgb.py,sha256=T6GF9kYMHvuoffB567UlcwDoDCJ2SH7vttAABmgdmvU,60223
148
- mplang/v2/libs/mpc/__init__.py,sha256=znADXBv0cATTvNN9pVOH8V47O5vmYZnR1Y7tfh1QVjw,1405
149
- mplang/v2/libs/mpc/_utils.py,sha256=Xzt5jIQSm2e8_xFC6zrdKL93IqbTDb40apk2JBbEgBI,3215
150
- mplang/v2/libs/mpc/analytics/__init__.py,sha256=8_1Sm05nrO2ISat1hNZT6UXHpKQ-SDBby1eeS-wm_fE,1204
151
- mplang/v2/libs/mpc/analytics/aggregation.py,sha256=VPWwfcSV1kryG6EthjhOysh1RxH8xYczKnI_f7fmEgo,11648
152
- mplang/v2/libs/mpc/analytics/groupby.md,sha256=_3oCouzGKlWt3OBMIFkhN25gyzJj6DlGpq-B78_PSlU,4679
153
- mplang/v2/libs/mpc/analytics/groupby.py,sha256=3xXHYewJe28uu7BY1IwtsggKbU32LZkT81UZd67lmo4,11318
154
- mplang/v2/libs/mpc/analytics/permutation.py,sha256=B-m9JtIMMc23C0AwfH_Yg5IF2XUIaMDT2IHluMNiiOM,13820
155
- mplang/v2/libs/mpc/common/constants.py,sha256=YRRE8WkLGfdOZzicc976hPsPeZZkqho3aW41i5Mj72s,1316
156
- mplang/v2/libs/mpc/ot/__init__.py,sha256=9Ivef7QnAzoCBtIohh2kzOSdfslcNftOwKV_d9Qv4z0,951
157
- mplang/v2/libs/mpc/ot/base.py,sha256=J7jK8jwhXVlNIkIO9l7ZIRTPMYEDsuUQjP00nwPkMrs,7018
158
- mplang/v2/libs/mpc/ot/extension.py,sha256=Z2br1HUin_wmosNPskx9o0bVGR5TF_pUIyp7lz7vPDI,17458
159
- mplang/v2/libs/mpc/ot/silent.py,sha256=9J3sMsz3XzxPbIk91IpfAvvdGeZw-Tt0kElyPsNlnac,7879
160
- mplang/v2/libs/mpc/psi/__init__.py,sha256=mpevlx3Z5_u9Q1McDZBBIGHApeO9julgiM09GToxxEA,1231
161
- mplang/v2/libs/mpc/psi/cuckoo.py,sha256=GQvLi7BtaPZyk96xwVCwpQPGlcGhOUX6kdsEn8P80l0,7752
162
- mplang/v2/libs/mpc/psi/okvs.py,sha256=a1Q4ILrsLII9K-BJRSX8iKkpkxJsMxFEj7cTId-XGCE,1576
163
- mplang/v2/libs/mpc/psi/okvs_gct.py,sha256=wRxBEZw-dnYXHWng-1eRsnnP6k6wKySSUxigN9eq08k,3023
164
- mplang/v2/libs/mpc/psi/oprf.py,sha256=YXD-I9P3t1YuqHVxOD9JUpLTZUu-HjgvOaEOQ3hhxMM,13772
165
- mplang/v2/libs/mpc/psi/rr22.py,sha256=2mN1zbjrBUgaWCsF3Lj8ohtK6gcG95PtBb3EseS-Nsg,12614
166
- mplang/v2/libs/mpc/psi/unbalanced.py,sha256=hC84TVsgnlJDg6hpUrx8kbUbmFb27T9wrHG0zv3FXLc,7433
167
- mplang/v2/libs/mpc/vole/__init__.py,sha256=2dU4X6n73HoK-YCiCl4b36SkLRKR6rofe2xxLxBz6Rc,968
168
- mplang/v2/libs/mpc/vole/gilboa.py,sha256=apnKOYR4_dJ2wkzGq7PBlwauA-W5i5MPESdetCWTegU,9951
169
- mplang/v2/libs/mpc/vole/ldpc.py,sha256=1H_Dz1xdZTN2f3V6lz9NKBaY-How9Qu1GgwN0IJZero,12786
170
- mplang/v2/libs/mpc/vole/silver.py,sha256=Qnk3EiA18i6RJl-iDCMHOwNdf0Zvkmxq_57O3Y0HPFw,12236
171
- mplang/v2/runtime/__init__.py,sha256=VdUwJ3kDaI46FvGw7iMGwcsjt0HTGmmRmaBwj99xKIw,620
172
- mplang/v2/runtime/dialect_state.py,sha256=HxO1i4kSOujS2tQzAF9-WmI3nChSaGgupf2_07dHetY,1277
173
- mplang/v2/runtime/interpreter.py,sha256=UzrM5oepka6H0YKRZncNXhsuwKVm4pliG5J92fFRZMI,32300
174
- mplang/v2/runtime/object_store.py,sha256=yT6jtKG2GUEJVmpq3gnQ8mCMvUFYzgBciC5A-J5KRdk,5998
175
- mplang/v2/runtime/value.py,sha256=CMOxElJP78v7pjasPhEpbxWbSgB2KsLbpPmzz0mQX0E,4317
176
- mplang_nightly-0.1.dev268.dist-info/METADATA,sha256=pIMljunrFh1RJ_3JlBim3jyAGc2GBkuXPwZH2LWfTlY,16775
177
- mplang_nightly-0.1.dev268.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
178
- mplang_nightly-0.1.dev268.dist-info/entry_points.txt,sha256=mG1oJT-GAjQR834a62_QIWb7litzWPPyVnwFqm-rWuY,55
179
- mplang_nightly-0.1.dev268.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
180
- mplang_nightly-0.1.dev268.dist-info/RECORD,,
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes