Abric-language-kotlin !!install!! Link

// After receiving, subtract the incoming random receiveAll() val finalShares = parties.indices.map i -> val prev = (i - 1 + parties.size) % parties.size sub(newShares[i], randoms[prev])

val proactiveRefresh = protocol val parties = listOf(p1, p2, p3) val oldShares = inputShares(parties) // Each party generates a random blinding share val randoms = parties.map randomShare()

import fr.ens.abricot.* fun main() val protocol = protocol val a = secretInput(party("Alice"), 42) val b = secretInput(party("Bob"), 117) val c = add(a, b) val result = reveal(c) output(result, party("Charlie")) abric-language-kotlin

// build.gradle.kts dependencies implementation("fr.ens.abricot:abricot-core:0.5.0") implementation("fr.ens.abricot:backend-mpc:0.5.0")

val protocol = protocol val x = input(alice) val y = input(bob) val z = add(x, y) output(z, charlie) // After receiving

The name "Abricot" often appears in academic contexts related to , secret sharing , and verifiable secret sharing (VSS). The abricot-language-kotlin repository specifically provides a Kotlin-based frontend for writing cryptographic protocols that can later be compiled or interpreted for different backends (e.g., arithmetic circuits, Boolean circuits, or actual networking code).

val multiply = protocol val x = input(alice) val y = input(bob) val product = mul(x, y) // This might generate Beaver triple multiplication output(product, alice, bob) 42) val b = secretInput(party("Bob")

Then write your first protocol: