Session creation
High level flow of DuoSession
- Configure transport layer (WebSocket Client)
- Create
DuoSession
- Perform MPC actions
DuoSession
is the main object which will be used to perform all of the MPC operations supported. To create DuoSession
please follow the steps below.
Step 1 : Add library to your Project
-
Create new xcode project if you haven't.
-
Add SilentShard-Duo SDK using the instructions from the Installation Guide
Step 2 : Create new session
- Import module - silentshardduo.
- Setup websocket client by using any of the below options :
- Providing
WebsocketConfig
object to use default WebsocketClient. - Providing custom
WebsocketClient
overriding(extending)SilentShardWebsocketClient
to override existing connect, read or write, etc. methods to add your own logic/configuration or additional process. - Providing custom
WebsocketClient
(Your Custom WebsocketClient Implementation) by extendingWebsocketClient
- Providing
- Create
DuoSession
by callingSilentShard.ECDSA.createDuoSession
orSilentShard.EdDSA.createDuoSession
(whichever applies).
Example
- ECDSA
- EdDSA
Example.swift
import silentshardduo
let CLOUD_NODE_URI = "192.168.1.4"
let PORT = "8080"
//Other party verifying-key/public-key
let cloudPublicKey = "---------Hex---------"
//Create websocketConfig to let SilentShard use default WebsocketClient.
let websocketConfig: silentshardduo.WebsocketConfig =
WebsocketConfigBuilder()
.withBaseUrl(CLOUD_NODE_URI)
.withPort(PORT)
.withSecure(false)
//If applies
.withAuthenticationToken("")
.build()
//Create duoSession
/*Option: 1 : Using Default WebsocketClient.
We only have to pass websocketConfig which contains the server config and
communication will be handled by internal websocketClient*/
let duoSession = SilentShardDuo.ECDSA.createDuoSession(
cloudVerifyingKey: String(cloudVerifyingKey),
websocketConfig: websocketConfig)
/*Option: 2 : Using Customised SilentShardWebsocketClient.
ExtendedSilentShardWebsocketClient(example name and You implement) extends SilentShardWebsocketClient(Internally extends WebsocketClient)
from SilentShard. You can
override connect, read, write, etc. according to your configuration.*/
let duoSession = SilentShardDuo.ECDSA.createDuoSession(
cloudVerifyingKey: String(cloudVerifyingKey),
// `ExtendedSilentShardWebsocketClient` is a example name
websocketClient: ExtendedSilentShardWebsocketClient())
/*Option: 3 : Using Custom (Your Implementation) WebsocketClient.
CustomWebsocketClient(example name) extends WebsocketClient from SilentShard.
It will have your own httpClient and other customization. In other words, If you wish to write
your own websocket client from scratch.*/
let duoSession = SilentShardDuo.ECDSA.createDuoSession(
cloudVerifyingKey: String(cloudVerifyingKey),
// `CustomWebsocketClient` is a example name
websocketClient: CustomWebsocketClient())
Example.swift
import silentshardduo
let CLOUD_NODE_URI = "192.168.1.4"
let PORT = "8080"
//Other party verifying-key/public-key
/*
* Prefix the public key based on the verification key type:
* Ed25519: Add 01 before the public hex key.
* EcdsaP256: Add 02 before the public hex key.
*/
let cloudPublicKey = "('01 or 02')---------Hex---------"
//Create websocketConfig to let SilentShard use default WebsocketClient.
let websocketConfig: silentshardduo.WebsocketConfig =
WebsocketConfigBuilder()
.withBaseUrl(CLOUD_NODE_URI)
.withPort(PORT)
.withSecure(false)
//If applies
.withAuthenticationToken("")
.build()
//Create duoSession
/*Option: 1 : Using Default WebsocketClient.
We only have to pass websocketConfig which contains the server config and
communication will be handled by internal websocketClient*/
let trioSession = SilentShardDuo.EdDSA.createTrioSession(
cloudVerifyingKey: String(cloudVerifyingKey),
websocketConfig: websocketConfig)
/*Option: 2 : Using Customised SilentShardWebsocketClient.
ExtendedSilentShardWebsocketClient(example name and You implement) extends SilentShardWebsocketClient(Internally extends WebsocketClient)
from SilentShard. You can
override connect, read, write, etc. according to your configuration.*/
let trioSession = SilentShardDuo.EdDSA.createTrioSession(
cloudVerifyingKey: String(cloudVerifyingKey),
// `ExtendedSilentShardWebsocketClient` is a example name
websocketClient: ExtendedSilentShardWebsocketClient())
/*Option: 3 : Using Custom (Your Implementation) WebsocketClient.
CustomWebsocketClient(example name) extends WebsocketClient from SilentShard.
It will have your own httpClient and other customization. In other words, If you wish to write
your own websocket client from scratch.*/
let trioSession = SilentShardDuo.EdDSA.createTrioSession(
cloudVerifyingKey: String(cloudVerifyingKey),
// `CustomWebsocketClient` is a example name
websocketClient: CustomWebsocketClient())
CLOUD_NODE_URI
is the URI of the cloud node.cloudPublicKey
is the cloud verifying key (Ed25519 public key).- This public key is used to verify the server's signature on each message
- This key is logged on the server on startup. See example here
SilentShard
Provides API for creating MPC DuoSession (Two-Party) using ECDSA or EdDSA algorithms.ECDSA
Provides factory methods for creating MPC session using ECDSA algorithm.EdDSA
Provides factory methods for creating MPC session using EdDSA algorithm.DuoSession
Represents a two-party computation session that lets you perform MPC operations using SilentShard protocol.
You have now successfully set up the session and are ready to start performing MPC actions! 🎉