-
Notifications
You must be signed in to change notification settings - Fork 0
Home
i3-M Wallet is a set of technologies that facilitate the management of their identity to all the actors of the i3-MARKET environment (provider, consumer, data owner, etc).
-
Name : DID Management
Description : A decentralized system which enables several key actions by three distinct entities: the Controller, the Relying Party, and the Subject. Controllers create and control DIDs, while Relying Parties rely on DIDs as an identifier for interactions related to the DID Subject. The Subject is the entity referred to by the DID, which can be anything: a person, an organization, a device, a location, even a concept. Typically, the Subject is also the Controller.
-
Name : Verifiable Credentials Management
Description : Verifiable Credential is a tamper-evident credential that has authorship that can be cryptographically verified though a proof. It can be used to share and prove something about the identity of a User.
-
Name : Create DID
Description : As Subject I want to create a DID so I can manage my identity. Subject: Data Consumer, Data Provider, Data Owner. As a User I want to present my DID to a Relying Party so that I can identify myself.
-
Name : Present DID
Description : User: Data Consumer, Data Provider, data Owner. Relying Party: Data Marketplace, Data Provider.
-
Name : Rotate DID
Description : As a User I want to change the ownership of my DID so that I can maintain my Identity if I change Identity Provider.
-
Name : Delegate DID
Description : As a User I want to delegate my DID so that I can make other DID able to act on behalf of me.
-
Name : Recover DID
Description : As a User I want to recover my DID so that I can maintain my Identity even if I lose my proof of control. User: Data Consumer, Data Provider, Data Owner.
-
Name : Sign Assets
Description : As a User I want to sign my assets so that I can demonstrate the authenticity of the asset. User: Data Consumer, Data Provider, Data Owner.
-
Name : Verify Asset Signature
Description : As a User I want to verify asset signature so that I can authenticate the asset. User: Data Consumer.
-
Name : Deactivate DID
Description : As a User I want to deactivate my DID so that I can delete my Identity. User: Data Consumer, Data Provider, Data Owner.
-
Name : Resolve DID
Description : As a Data Marketplace I want to resolve DID so I can retrieve from DID Document the information to authenticate DID Subject and verify data asset signature.
-
Name : Authenticate DID
Description : As a Relying Party I want to authenticate DID so I can verify DID ownership. Relying Party: Data Marketplace/Data Provider.
-
Name : Receive Verifiable Credential
Description : As User I want to receive a Verifiable Credential so I can access Data Marketplace.
-
Name : Verify Verifiable Credential
Description : As User I want to receive a Verifiable Credential so I can access Data Marketplace.
-
Name : Share Verifiable Credential
Description : As User I want to share a Verifiable Credential so I can attest something towards Relying Party.
-
Name : Store Verifiable Credential
Description : As User I want to store a Verifiable Credential so I use keep it and use it towards any Relying Party.
-
Name : Keep track of issued Verifiable Credentials
Description : As a Issuer I want to keep track of issued verifiable Credentials so that I can monitor and revoke them.
-
Name : Revoke Verifiable Credential
Description : As an Issuer I want to revoke a Verifiable Credentials so that it cannot be used.
The i3M-Wallet consists of a set of packages that enable a user to manage his/her accounts and use them to authenticate.
Wallet Desktop is a cross-platform facility tool that eases the communication between a wallet (software or hardware) and the i3-MARKET SDK via an HTTP API. Furthermore, it provides some features like wallet synchronization using a secure cloud vault. It also has a user interface (UI) to display the information of the selected wallet and ask for user consent if any wallet operation needs it. An initial design of the main window can be seen in Figure 2 – Wallet desktop initial UI design.
The HTTP API launched by the wallet desktop is not accessible from the cloud so to use it the i3-MARKET SDK must in the same machine. This API is specified using OpenAPI Specification (OAS) within the package Wallet desktop OpenAPI (see Section Wallet Desktop OpenAPI).
To ease the development of a cross-platform UI, wallet desktop uses Electron, a framework that relies on Chromium web browser to create native applications using HTML, CSS and JavaScript.
The Wallet Desktop OpenAPI (source code on GitLab) defines the HTTP API of Wallet Desktop (see Section Wallet Desktop). For more information on the OpenApi Interface go to de section Interface Description.
This package defines how to interact with wallets by means of a typescript interface. Furthermore, it provides a default implementation called BaseWallet (source code on GitLab). It uses an interface walled KeyWallet to delegate the complexity of key management to other packages like SW Wallet (see Section SW Wallet). Both interfaces are listed below.
export interface Wallet {
/**
* @throws Error
*/
wipe: () => Promise<void>
// Api methods
accountList: (queryParameters: WalletPaths.AccountList.QueryParameters) => Promise<WalletPaths.AccountList.Responses.$200>
accountCreate: (requestBody: WalletPaths.AccountCreate.RequestBody) => Promise<WalletPaths.AccountCreate.Responses.$201>
accountSign: (requestBody: WalletPaths.AccountSign.RequestBody) => Promise<WalletPaths.AccountSign.Responses.$200>
accountVerify: (requestBody: WalletPaths.AccountVerify.RequestBody) => Promise<WalletPaths.AccountVerify.Responses.$200>
accountEncrypt: (requestBody: WalletPaths.AccountEncrypt.RequestBody) => Promise<WalletPaths.AccountEncrypt.Responses.$200>
accountDecrypt: (requestBody: WalletPaths.AccountDecrypt.RequestBody) => Promise<WalletPaths.AccountDecrypt.Responses.$200>
resourceList: (queryParameters: WalletPaths.ResourceList.QueryParameters) => Promise<WalletPaths.ResourceList.Responses.$200>
resourceCreate: (requestBody: WalletPaths.ResourceCreate.RequestBody) => Promise<WalletPaths.ResourceCreate.Responses.$201>
resourceRead: (queryParameters: WalletPaths.ResourceRead.QueryParameters) => Promise<WalletPaths.ResourceRead.Responses.$200>
resourceUpdate: (queryParameters: WalletPaths.ResourceUpdate.QueryParameters, requestBody: WalletPaths.ResourceUpdate.RequestBody) =>
Promise<WalletPaths.ResourceUpdate.Responses.$200>
resourceDelete: (queryParameters: WalletPaths.ResourceDelete.QueryParameters) => Promise<WalletPaths.ResourceDelete.Responses.$200>
}
export interface CryptoWallet<T extends TypedArray = Uint8Array> {
Initialize: () => Promise<void>
/**
* Creates a key pair
*
* @returns a promise that resolves to the key id.
*/
createAccountKeyPair: () => Promise<string>
/**
* Gets a public key
*
* @returns a promise that resolves to a public key
*/
getPublicKey: (id: string) => Promise<KeyLike>
/**
* Signs input message and returns DER encoded typed array
*/
sign: (id: string, message: T) => Promise<T>
/**
* @throws Error – Any error
*/
wipe: () => Promise<void>
}
SW Wallet provides an implementation of a software hierarchical deterministic wallet using the BaseWallet class defined in Base Wallet (see Section Base Wallet) package. The code can be found in GitLab.