Session creation
High level flow of DuoSession
- Configure/Implement transport layer (WebSocketClient)
- Configure/Implement storage layer (StorageClient)
- 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 android studio project if you haven't.
-
Add SilentShard-Duo SDK using the instructions from the Installation Guide
Step 2 : Create new session
- We can Create DuoSession by calling SilentShard.ECDSA.createDuoSession() or SilentShard.EdDSA.createDuoSession() (whichever applies) by providing the following parameters
- Provide websocket client by using any of the below options :
- Providing WebsocketConfig object to let SDK use default WebsocketClient i.e. SilentShardWebsocketClient.
- 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 extending WebsocketClient
- Provide cloud/server public key.
- Provide storage client. (You need to implement the interface StorageClient).
Example
- ECDSA
- EdDSA
MainActivity.kt
import com.silencelaboratories.silentshard.duo.SilentShard
import com.silencelaboratories.silentshard.duo.DuoSession
import com.silencelaboratories.network.websocket.WebsocketConfig
object Constants {
const val CLOUD_NODE_URI = "192.168.1.16"
const val PORT = "8080"
}
//Other party verifying-key/public-key
val cloudPublicKey = "---------Hex---------"
//Create websocketConfig to let SilentShard use default WebsocketClient.
val websocketConfig = SilentShard.buildWebsocketConfig {
withBaseUrl(CLOUD_NODE_URI)
usingPort(PORT)
isSecureProtocol(false)
}
//Create storageClient instance to manage keyshare states
val storageClient = CustomStorageClient()
//Create storageClient instance to manage keyshare states
val storageClient = CustomStorageClient()
//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*/
val duoSession: DuoSession = SilentShard.ECDSA.createDuoSession(
cloudPublicKey, websocketConfig, storageClient
)
/*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.*/
val duoSession: DuoSession = SilentShard.ECDSA.createDuoSession(
cloudPublicKey, ExtendedSilentShardWebsocketClient(), storageClient
)
/*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.*/
val duoSession: DuoSession = SilentShard.ECDSA.createDuoSession(
cloudPublicKey, CustomWebsocketClient(), storageClient
)
MainActivity.kt
import com.silencelaboratories.silentshard.duo.SilentShard
import com.silencelaboratories.silentshard.duo.DuoSession
import com.silencelaboratories.network.websocket.WebsocketConfig
object Constants {
const val CLOUD_NODE_URI = "192.168.1.16"
const val PORT = "8080"
}
//Other party verifying-key/public-key
val cloudPublicKey = "---------Hex---------"
//Create websocketConfig to let SilentShard use default WebsocketClient.
val websocketConfig = SilentShard.buildWebsocketConfig {
withBaseUrl(CLOUD_NODE_URI)
usingPort(PORT)
isSecureProtocol(false)
}
//Create storageClient instance to manage keyshare states
val storageClient = CustomStorageClient()
//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*/
val duoSession: DuoSession = SilentShard.EdDSA.createDuoSession(
cloudPublicKey, websocketConfig, storageClient
)
/*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.*/
val duoSession: DuoSession = SilentShard.EdDSA.createDuoSession(
cloudPublicKey, ExtendedSilentShardWebsocketClient(), storageClient
)
/*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.*/
val duoSession: DuoSession = SilentShard.EdDSA.createDuoSession(
cloudPublicKey, CustomWebsocketClient(), storageClient
)
CLOUD_NODE_URIis the URI of the cloud node.cloudPublicKeyis the cloud verifying key (Ed25519 public key).- This public key is used to verify the server's signature on each message
- See example here
- SilentShard Provides API for creating MPC DuoSession (Two-Party) using ECDSA algorithm.
- ECDSA Provides factory methods for creating MPC session using ECDSA 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! 🎉