Only this pageAll pages
Powered by GitBook
Couldn't generate the PDF for 181 pages, generation stopped at 100.
Extend with 50 more pages.
1 of 100

Inji

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Supported Integrations

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Inji Wallet

Inji Mobile

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Specifications

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Inji Web

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Inji

In today's fast-paced, interconnected world, ensuring seamless access to essential services—such as healthcare, financial inclusion, global mobility, and social support—has never been more critical. The need for trusted identity authentication and secure data exchange is at the heart of accessing these services. Traditionally, individuals have relied on multiple physical identification documents and certificates to prove their eligibility for various rights and services. However, managing physical documents is cumbersome and exposes individuals to risks of loss, fraud, and inefficiencies. Additionally, millions of people remain excluded from the formal economy due to an outdated reliance on paper-based credentials that cannot be verified digitally.

To address this, Inji offers a transformative solution – enabling the secure issuance, digitalization, storage, exchange and seamless verification of trusted data as verifiable credentials, through a comprehensive set of tools. By shifting away from physical documents to a digital-first approach, Inji simplifies the process, enhances security, and empowers a digital economy. With Inji, individuals can experience a future where accessing essential services is as simple as a few clicks, reducing the complexity of juggling numerous physical documents while maintaining the highest level of trust and security.

For a quick overview of Inji, which primarily includes Inji Wallet, Inji Verify and the Inji Certify as key components, you can watch the video titled "Inji Stack End To End Use Case Demonstration". This video provides a visual walkthrough of the key features and showcases how all modules interact through a persona-based demonstration, highlighting its real-world application. Head to the section titled “What Does Inji Include” for a comprehensive overview of how Inji functions, explaining how each component operates independently, while maintaining the interoperability necessary for seamless and secure credential verification.

Introducing Inji: Enabling User-Centric Digital Credentialing

Inji, meaning "knowing" or "recognizance" in Korean, is evolving into a comprehensive digital credential stack with a strong focus on user empowerment. Inji simplifies the management and verification of credentials by providing secure solutions that work across multiple interfaces. It aims to streamline the process of creating, sharing, and verifying all types of digital and physical credentials by offering:

  • Secure Issuance of Verifiable Credentials: Credentials are issued in both digital and physical formats, ensuring they are cryptographically secure and easy to share.

  • User-Centric Credential Management: Inji empowers individuals by providing them with tools to securely manage and share their credentials.

  • Simplified Instant Verification: It offers utilities that verify the authenticity of credentials, making the process efficient and user-friendly.

  • Interoperability: By adhering to global standards like the Verifiable Credentials Data Model (W3C VC) and OpenID for Verifiable Credential Issuance (OI4VCI), Inji facilitates seamless interactions across government, social, and private sectors.

What Does Inji Include?

Inji provides a complete solution for issuing, managing and exchanging trusted data as verifiable credentials across its entire lifecycle. Key components include:

  • Inji Certify: Converting data to trustworthy credentials, it enables trusted issuers to create, sign, issue, and bind credentials, in multiple formats.

  • Inji Wallet: Making data trustworthy and portable, it consists of two main interfaces that cater to diverse user needs:

    • Inji Mobile: A secure, decentralized mobile wallet that enables users to download, manage, share, and verify verifiable credentials directly from their smartphones. This mobile-first approach provides a seamless, trustworthy way to handle credentials on the go.

    • Inji Web: A user-friendly web interface that complements the mobile application, allowing individuals without access to smartphones, to manage their credentials through a browser. It provides features to download, print, store, and share credentials physically, ensuring broad accessibility across different platforms.

  • Inji Verify: Enabling exchange of trusted data with service providers, it is an essential tool to verify the authenticity of shared credentials.

  • Inji Infra: Supports functionalities like revocation, ledger management, status checks, and federation for verifiable credentials.

  • Inji Govern: Offers a governance framework to define policies, schemas, and assurance mechanisms, ensuring the security and trustworthiness of the ecosystem.

In summary, Inji provides a comprehensive solution that ensures all credential interactions - from issuance to verification - are secure, efficient, and aligned with global standards. This fosters high levels of trust at a low cost, supporting the development of a trusted digital economy. By bridging the gap between traditional and digital systems, Inji establishes a foundation for inclusive, secure, and transparent frameworks, paving the way for a more accessible and digital future for all, thereby ensuring widespread access to essential services.

Use case

Use Cases of Verifiable Credentials and Their Impact

Use Case 1: Healthcare Industry

Current Challenge: Patients often need to share medical records and test results securely across different healthcare providers. This process is cumbersome, requiring manual handling of paper documents or insecure sharing via email and other communication channels.

Solution with Verifiable Credentials: Healthcare providers can issue VCs for vaccination records, allergies, or medication history. VCs can securely store and share medical records, test results, and vaccination history digitally. Patients can then easily share these credentials with other providers, ensuring continuity of care and faster treatment. Patients can control access to their data, ensuring only authorized healthcare providers can verify and access their information.

Benefits:

  • Reduced Friction: Patients can easily share verified medical credentials with healthcare professionals, streamlining the consultation and treatment process

  • Enhanced Privacy and Security: Verifiable credentials use cryptography to ensure data integrity and protect sensitive medical information

Use Case 2: Education Sector

Current Challenge: Students often require verified academic transcripts and certificates when applying for further education or job opportunities, which they often carry physical transcripts or certifications. Requesting and verifying these documents can be time-consuming and prone to fraud.

Solution with Verifiable Credentials: Educational institutions can issue VCs such as digital diplomas, certificates, and transcripts. Students can share these credentials with potential employers or other educational institutions quickly and securely, streamlining verification and reducing wait times.

Benefits:

  • Efficient Verification: Employers and educational institutions can instantly verify the authenticity of academic credentials without relying on manual checks or third-party verification services

  • Prevention of Fraud: Verifiable credentials use cryptographic signatures to ensure the integrity and authenticity of educational documents, reducing the risk of forgery

Use Case 3: Financial Services

Current Challenge: Customers often need to prove their identity and financial history when applying for loans, opening bank accounts, or accessing other financial services. This process typically involves submitting multiple paper documents and undergoing lengthy identity verification procedures.

Solution with Verifiable Credentials: Financial institutions can issue VCs that include identity information, credit scores, and financial history. Customers can use these credentials to securely and selectively share their information with authorized institutions.

Benefits:

  • Streamlined Onboarding Process: VCs enable faster and more efficient customer onboarding, reducing paperwork and administrative overhead for financial institutions

  • Enhanced Data Privacy: Customers have greater control over their personal and financial data, minimizing the risk of identity theft and unauthorized access

Use Case 4: Travel and Immigration

Current Challenge: Travelers often face challenges proving their identity and vaccination status when crossing borders. Paper-based documents are prone to loss or damage, leading to delays and disruptions during travel. Travelers juggle multiple documents for border crossings (passports, visas, health certificates) leading to delays and frustration.

Solution with Verifiable Credentials: Governments and health authorities can issue verifiable credentials for vaccination records, identity verification, and travel permissions. Travelers can present these digital credentials at checkpoints or border crossings securely and efficiently. These credentials can be easily accessed via mobile wallets and verified electronically, speeding up border processing and reducing queues.

Benefits:

  • Facilitated Cross-Border Travel: Verifiable credentials enable seamless verification of identity and vaccination status, reducing wait times and administrative hurdles at immigration checkpoints

  • Improved Public Health Measures: Authorities can track and verify vaccination records more effectively using digital credentials, supporting efforts to manage public health crises such as pandemics

Use Case 5: Employment

  • Challenge: Job seekers often face delays due to lengthy background checks and verification of employment history and skills

  • Solution: Employers can issue verifiable credentials for past employment and skills acquired. Job seekers can then share these credentials with potential employers, allowing for faster verification and a smoother hiring process

Use Case 6: Government Services

  • Challenge: Citizens often need to present physical documents (birth certificates, proof of residence) to access government services, leading to inefficiency and potential loss of documents

  • Solution: Government agencies can issue verifiable credentials for citizen information. These credentials can be securely accessed and shared for various services, reducing administrative burdens and streamlining access

Benefits of Verifiable Credentials in all above mentioned scenarios:

  • Reduced Friction: Verifiable credentials eliminate the need for physical documents, simplifying processes and speeding up transactions

  • Enhanced Security: Cryptographic verification ensures the authenticity and integrity of credentials, reducing the risk of fraud

  • User Control: Individuals control their data, choosing what information to share and with whom

  • Improved Efficiency: Streamlined workflows and faster access to services for both users and institutions

Conclusion

Verifiable credentials offer versatile solutions across various domains by leveraging digital technologies to enhance data security, privacy, and efficiency. By addressing common challenges associated with identity verification and data sharing, verifiable credentials empower individuals and organizations to streamline processes and improve trust in digital interactions.

Resources

Inji Ecosystem Workshop

Comprehensive demonstration on Digital Identity Management and Credential Integration

The workshop aims to provide a comprehensive understanding of the Inji ecosystem, focusing on its various components, configuration, and practical usage. It covered essential topics to help participants effectively use and integrate Inji's features.

  • Understanding DID Methods: The workshop explains the different Decentralized Identifier (DID) methods supported by Inji, helping participants grasp how digital identities are managed.

  • OIDC Client and p12 File Creation: Participants learn how to create an OIDC client and generate a p12 file, ensuring secure key storage and authentication processes.

  • Configuring Mimoto in Inji Web: Detailed steps are provided to configure Mimoto within the Inji Web application, addressing common issues and ensuring seamless integration.

  • Credential Management: The workshop covers how credentials are stored, secured, and validated in both Web and Wallets, emphasizing security and compliance with standards.

  • Real-World Deployment and Integration: It discusses the roles of issuers and service providers in real-world deployments, the use of blockchain for security, and the potential for running AI agents for selective disclosure.

Inji Certify Credential Issuance Workshop

The Workshop demonstrates how to integrate Inji Certify, a credential issuance platform, with a custom data provider plugin to issue 'Verifiable Credentials'. The specific use case covered is issuing farmer IDs based on official land registry data.

  • Data Setup: A sample farmer registry is created in a database with details like National ID, Name, Phone Number, and Land Ownership Information.

  • Configuration: A velocity template is defined to format the data, issuer information and verification keys are configured, and a "well-known" property is set up.

  • Plugin Development: A data provider plugin is created to fetch farmer data from the registry based on the national ID.

  • Docker Compose Setup: A Docker environment is set up to run the database, Inji Certify, Nginx, and Inji Web.

  • Demonstration: A farmer ID is entered, authenticated, and a verifiable credential is issued based on the retrieved data.

Inji A Technical Deep Dive

The webinar delves into the technical architecture and implementation details of the Inji Stack, specifically focusing on the Inji Wallet and its integration with other stacks/components like eSignet and Inji Certify. The webinar offers a comprehensive overview of the technical intricacies involved in building a decentralized credential issuance and verification system using the MOSIP's Inji platform.

  • Inji Wallet: A mobile application that acts as both a digital wallet for storing verifiable credentials (VCs) and a verifier of VCs.

  • Integration with eSignet and Inji Certify: eSignat is used for authentication and authorization, while Inji Certify is responsible for issuing VCs.

  • Technical Architecture: The webinar covers the high-level architecture, including the use of Mimoto as a backend for frontend (BFF), the role of the Tuvali library for secure VC transfer, and the integration of native modules for specific functionalities.

  • API Interactions: The session explains how Inji Wallet interacts with various APIs, including those for fetching issuer lists, obtaining access tokens, and binding wallets to relying parties.

  • Configuration: The webinar discusses the configuration aspects, such as setting up issuer information, defining VC templates, and configuring the connection to eSignet.

  • Development and Integration: The presentation provides insights into the development process, including the use of React Native for the mobile app, the integration of native modules, and the management of data storage.

Unlocking the Value of Integrations with Inji and eSignet

The webinar delves into MOSIP's solutions for identity verification and credential management also to see how national IDs empower citizens in the digital age.

  • National ID as an Enabler: Learn how national IDs can be used to access various services.

  • Digital Transformation: Explore how IDs can streamline processes for citizens and governments.

  • eSignet: An online authentication solution supporting multiple methods like OTP, digital wallets, and biometrics.

  • Inji: A platform for managing the lifecycle of verifiable credentials.

  • Real-World Impact: Understand how eSignet and Inji provide secure and efficient digital experiences.

Roadmap

Our community strives to deliver major releases as per the designated schedules, while offering minor releases every other month! The roadmap outlines the vision, goals, and planned development milestones of our ongoing projects over a specific period of time. It also provides a high-level overview of the Inji stack's future direction, features, enhancements, and major updates.

Inji's principles, as discussed here, underpin the design and development of the roadmap. The year-wise roadmap details how these principles will be applied and advanced in a step-by-step manner, ensuring that the Inji stack evolves in alignment with the core principles.

Head below to navigate through our year-wise roadmap that provides a strategic overview of the journey ahead and highlights the key milestones & objectives for each year!

Roadmap 2025
Roadmap 2024

Try It Out

Overview

Welcome to the "Try It Out" section! Here, we offer you hands-on experience to better understand how our product works and how you can leverage its features. This section will guide you through some simple steps to get started.

If you're a developer or a partner interested in experiencing or integrating with Inji Web, we invite you to explore our designated sandbox environments.

Collab: Development Integration Environment

Collab serves as our development integration environment, featuring QA-tested dockers. It's a dedicated space where our partners and contributors can build on the platform or integrate with the latest QA-tested version of the code.

This environment undergoes regular nightly builds from our engineering team, making it a hub for continuous development activities.

How to use:

Collab Guides

Explore the guides of the various Inji Modules from below:

Synergy: Stable Integration Environment

Synergy represents our stable environment, where the most recently released version of the MOSIP platform and applications are deployed for partners to seamlessly integrate and conduct testing.

Feedback and Support

If you require any assistance or encounter any issues during the testing and integration process, kindly reach out to us through the support mechanism provided below.

  • Provide a detailed description about the support you require or provide detailed information about the issue you have encountered, including steps to reproduce, error messages, logs and any other relevant details.

\

Project Governance

Open Source Governance Process at MOSIP

1. Overview

Open source projects can have a variety of contributors. This can potentially lead to confusion or conflict. This document sets forth a simple transparent set of guidelines to describe the roles and process to be followed. As part of that it covers:

  • Process of open source contributions and review of code in this project.

  • Decision-making process on backlogs and including contributions.

2. Governance Structure

The MOSIP project follows a simple structure with 3 levels.

Level 1 - MOSIP Technology Committee. This committee is responsible for high level roadmap and policy decisions such as licensing, and technology stack.

Level 2 - Project leadership. This is the executive leadership at MOSIP that includes key project roles within MOSIP such as product owner, engineering lead, and architects. These members will be appointed as maintainers and lead in the project by MOSIP.

Level 3 - Members. This is a set of people who are working on the project.

Given below is a list of specific roles and their responsibilities.

Roles and Responsibilities

  • Maintainers are individuals who have “Commit” rights; And are the primary caretakers of the code and the strategic vision of the project. They are empowered to make decisions and resolve disputes for all contributions. They are appointed by MOSIP.

  • Project Lead is the chair of the committee of maintainers. They are appointed by MOSIP.

  • Contributors are the people or organisations who take part actively in the project and its meetings, code, design, and test and are recognized for their contributions. The contributors are part of the GitHub Members and would be actively involved in the discussion of a PR and review. Members strongly influence the Maintainer's decision.

  • Members are either individuals or persons affiliated with contributing organisations. All contributions are bound by the licensing of the project.

  • Product Owner is responsible for the analysis, design, development, and implementation of business solutions to meet the needs of the organisation. He/She must have a strong understanding of the business domain, processes, and software development lifecycle Agile development methodologies).

3. Contributions

Scope of Contributions

The whole of the project is open to contributions. The kind of contributions that are welcome include:

  • Code

  • Documentation

  • Design

  • Raising Bugs

  • Feature Request

Process to Contribute

  • Code, Documentation & Design

    • All artefacts including the code are maintained in the github repository.Contributions can be made by raising a Pull Request.

  • Reporting Issues & Feature Request

    • Issues and backlog are maintained in Jira and members of the project team will have access to Jira to add feature requests and report bugs

    • One off users will not have access for bug reports and feature requests. They can report the same in the community pages

    • Regular users who do not have access, can request the same and the maintainers can provide access after considerationWe use Jira to track the work associated with the project (account required). That is where issues open for community contribution can be found.Pull Request Review ProcessThe process to contribute the code is present here. Once code is submitted, it is reviewed through the following process:

Pull Request Review Process

  • At least two members should have reviewed the submitted contribution for the pull request to be accepted. The maintainers may request for more reviews of the code from other relevant members.

  • If the members deem the submitted code to be critical to overall product development, they can seek the inputs of the relevant product owners for the review process.

  • The maintainers review the two (or more) sets of comments received from the tech leads and the submitted code before taking a decision regarding committing the code to the appropriate branch.

  • The decision by the maintainer is communicated to the contributor via Jira as well as Pull Request.

  • In exceptional cases such as an emergency or an urgent requirement or a very trivial but time-sensitive correction, a maintainer may - at their discretion - choose to directly review the submitted pull request and take a decision on the commit.

Release process

Attribution

Attribution is in accordance with the relevant licence. Individual and affiliated contributors will be listed.

4. Decision-Making

The key decisions to be taken are for the following activities

  • Roadmap and backlog priority

  • Triaging of bugs and requirements

  • Accepting a contribution Pull Request)

  • Releases

Most decisions will be made in periodical meetings where owners of the relevant aspect of work present a case for a decision and the decision will be made either by consensus, or by majority where a quorum exists. The maintainers of the project will be the decision makers. The project lead will have veto power on decisions due to their expertise and commitment to the vision of the project. Contributors can share their views in these meetings for consideration.

Code Contribution

Overview

The recommended Github workflow here is for developers to submit code and documentation contributions to Inji open-source repositories.

Repositories

Setup your development machine

  1. Fork the repository.

  2. Clone the fork to your local machine. E.g.:

    $ git clone https://github.com/<your_github_id>/inji.git
  3. Set the upstream project as the original from where you forked. E.g.:

    $ cd inji
    $ git remote add upstream https://github.com/mosip/inji.git
  4. Make sure you never directly push upstream.

    $ git remote set-url --push upstream no_push
  5. Confirm the origin and upstream.

    $ git remote -v

    This should display origin and upstream as below:

    origin	https://github.com/<your_github_id>/inji.git (fetch)
    origin	https://github.com/<your_github_id>/inji.git (push)
    upstream	https://github.com/mosip/inji.git (fetch)
    upstream	https://github.com/mosip/inji.git (push)

Code changes

1. Create a new issue in GitHub.

  1. Follow the issue template provided.

  2. Please provide as much information as possible.

  3. If you want to develop a new feature, please elaborate on the idea and discuss the design before starting development. 2. In your local repository, fetch the upstream.

$ git fetch upstream

3. On your local repo, switch to a branch if you are working on an older release or stay in main/develop branch.

$ git checkout upstream/<branch> 

You will get a warning from git. Don't worry, our next step will take care of this warning.

4. Create a new issue branch with the name of the issue.

$ git switch -c issue-<issue number>

5. Make sure you are up-to-date with the upstream repo.

$ git pull upstream <branch> 

You should do this quite often to ensure you are up to date.

$ git commit -m "[#1234] Adding new feature in inji module"

7. Once again ensure that you are up-to-date with the upstream repo as it may have moved forward.

$ git pull upstream <branch> 

8. Build and test your code. Make sure to follow the coding guidelines. Provide unit test cases for the changes you have built.

9. Push to your forked repo (origin).

$ git push --set-upstream origin issue-<issue number>

10. On your forked remote repository from GitHub, create a pull request using the Contribute button. Direct the pull-request to main or any specific branch upstream.

Most often it's the same branch in the upstream (as in Step 3).

11. Make sure the automatic tests/checks on GitHub for your pull request pass.

Roadmap 2024

Inji Wallet

Inji Mobile

Q1: Jan24 - Mar24

Q2: Apr24 - Jun24

Q3: Jul24 - Sep24

Q4: Oct24 - Dec24

Quarter

Feature

Status

Feature Details

Release Details

Q1-Q4

Threat modelling.

In-progress

Q1

Abstract INJI features (Tuvali, Secure-keystore) in to SDK/NPM libraries

Completed

Q1

Sunbird RC - Issuer integration

Completed

Q1

User data backup

Completed

Q1-Q2

INJI new UI - Gendermag (P1, P2, P3)

Completed

Q2

Different Views of Cards

Completed

Q2

VC Sharing Flow Optimisation

Completed

Q2

Credential Type Selection

Completed

Q2

VC Verification

Completed

Q2

QR Code Generation (PixelPass)

Completed

Q3

Native artefacts:

  • inji-vci-client

  • Secure keystore

  • Tuvali

  • PixelPass

Completed

Q3

Ease of Deployment

In-progress

Q3

Inji Certify Integration

In-progress

v0.14.0

Q3

Draft 13 changes of OpenID4VCI spec

In-progress

v0.14.0

Q3

Java upgrade to 21

In-progress

v0.14.0_Mimoto:

Q4

OpenID4VP

In-progress

v0.15.0

Q4

VC render spec based wallet rendering

In-progress

v0.15.0

Q4

OpenID4VP for BLE: Implementation of non QR based sharing as per OpenID for BLE specification

In-progress

v0.15.0

Q4

Support for different VC formats and proof types

In-progress

v0.15.0

Q4

Data Model 2.0

In-progress

v1.0.0

Q4

Performance Testing

In-progress

v1.0.0

Q4

Security Testing

In-progress

v1.0.0

Q4

OpenID4VCI enhancements

In-progress

v1.1.0

Q4

Wallet Login

In-progress

v1.1.0

Q4

BBS+ support

In-progress

v1.1.0

Inji Web

Q1: Jan24 - Mar24

Q2: Apr24 - Jun24

Q3: Jul24 - Sep24

Q4: Oct24 - Dec24

Quarter

Feature

Status

Feature Details

Release Details

Q2

  1. Fetch & download credentials in PDF format

  2. Issuer and credential type selection

Completed

Q2

Localization

Completed

Q2

Responsive View

Completed

Q2

Theme customization

Completed

Q2

Tech Upgrades:

  1. Movement from Material UI to Tailwind

  2. Conversion of JS to TS

Completed

Q2

QR Code in PDF

In-progress

v0.10.0

Q2

Online Sharing

In-progress

v0.10.0

Q2

Persistent storage

In-progress

v0.10.0

Q3

Secure time bound storage

Planned

v1.0.0

Q3

Performance Testing

Planned

v1.0.0

Q3

Security Testing

Planned

v1.0.0

Q3

Web UI enhancements:

  • Home Page

  • svg template in PDF

Planned

v1.0.0

Q4

User login, VC management, profile management (profile menu)

In-progress

v1.1.0

Q4

VC Validation & Verification

Planned

v1.1.0

Q4

OpenID4VCI enhancements

Planned

v1.1.0

Q4

Categorization of issuers

Planned

v1.2.0

Q4

mDoc/mDL & CBOR VC download

In-progress

v1.2.0

Inji-Certify

Q1: Jan24 - Mar24

Q2: Apr24 - Jun24

Q3: Jul24 - Sep24

Q4: Oct24 - Dec24

Quarter

Feature

Status

Feature Details

Release Details

Q2

Easy deployment of Inji Certify v0.8

  • Docker compose for Sunbird and eSignet for Verifiable Credential Issuance

  • Helm charts for Sunbird and eSignet.

Completed

Q2

Inji Certify - Base code v0.9

  • Publish as an independent module (VCI + C)

  • VCI segregation from eSignet and moving to Inji Certify.

  • Plugin Support :

    • MOSIP Identity Plugin

    • Sunbird Plugin

    • Mock Identity Plugin

  • Implementors Draft 13 OpenIDVCI

In-progress

Q3

Movement to Data Model 2.0

In-progress

v0.10.0

Q3

OpenID for Verifiable Credential Issuance - draft 13 Spec

  • Pre-Authorized Code Flow

  • Credential Offer End Point

In-progress

v0.10.0

Q3

VC Generation: Create Credentials from the Request Payload

  • W3C VC Issuance API

Planned

v0.10.0

Q3

Simplify the process of onboarding an issuer for a single entity

Planned

v0.11.0

Q3

Multi-tenancy: Onboarding of multiple issuers

Planned

v0.11.0

Q3

Persistent store for credentials

  • Pre-generated credentials

  • Credentials Registry (Hosted Infra)

Planned

v0.11.0

Q4

Issue a physical credential (PDF / Printable)

  • Support PDF or other formats of presentation based on plugins - PDF, PCF, PKPASS

Planned

v0.11.0

Q4

Vault Integration - Key manager support

Planned

v0.12.0

Q4

Vault - Key management

Planned

v0.12.0

Q4

Revocation Mechanism

Planned

v0.12.0

Q4

Discovery and Metadata

  • DNS based Well Known specifications for publishing PK, Schema, credential types and other meta data (Proposed by MOSIP and included in standards)

Planned

v0.12.0

Q4

Allow Bulk/Batch Issuance

  • Issue certificates from an existing database

Planned

v0.12.0

Q4

Deferred Credential Endpoint

  • OpenIDVCI - Draft 13

Planned

v0.12.0

Q4

Inji Certify - Beta 1 - LTS

Planned

v1.0

Q1-Q4

Extend Credentials

  • Ability to issue extension on existing credential

Moved to 2025

Depriortized

Q1-Q4

Credential Correction

  • Support to retire the old credential and issue the new credential

Moved to 2025

Depriortized

Q1-Q4

Credential Formats Support - Selective Disclosure - Support SD JWT

Moved to 2025

Depriortized

Q1-Q4

[Credential Formats Support - Support mDocs

Moved to 2025

Depriortized

Q1-Q4

Business models (central, third-party SaaS, self-hosted)

Moved to 2025

Depriortized

Inji -Verify

Q1: Jan24 - Mar24

Q2: Apr24 - Jun24

Q3: Jul24 - Sep24

Q4: Oct24 - Dec24

Quarter

Feature

Status

Feature Details

Release Details

Q2

Web-based VC Verification functionality

Completed

Q2

UI/UX Enhancements based on GenderMag

Completed

Q2

Mobile Responsive Version - Upload and Scan feature

Completed

Q2

Material UI to Tailwind

Completed

Q2

Bug Fixes

Completed

Q3

Request Credential - OpenIDVP - OVP Flow

In-progress

v0.10.0

Q3

Docker Compose

In-progress

v0.10.0

Q3

Support for Country QR code - CWT Format

In-progress

v0.11.0

Q3

Verification SDK

In-progress

v0.11.0

Q3

Displaying Issuer Details post validation on UI

On-Hold

v0.11.0

Q3

Templatizing post-VC verification on Inji Verify(Render)

Planned

v0.11.0

Q3

Receive Credentials

(QR-based Verifiable Presentation)

Planned

v0.11.0

Q4

Multi-lingual UI Support - Localization

Planned

v0.12.0

Q4

VP requestor SDK

Planned

v0.12.0

Q4

Consume Data from credential

Planned

v0.12.0

Q4

Production Ready - Inji Verify - LTS Release 1.0.0

Planned

v1.0

Q1-Q4

BLE based verifiable presentation

Moved to 2025

Depritoritized

Q1-Q4

Credential Correction

Moved to 2025

Depritoritized

Q1-Q4

Revoked Credentials

Moved to 2025

Depritoritized

Q1-Q4

VC Reciever SDK

Moved to 2025

Depritoritized

Q1-Q4

Upload document(pdf) with multiple QR Codes

Moved to 2025

Depritoritized

Q1-Q4

Verify mDoc and mDL

Moved to 2025

Depritoritized

Q1-Q4

Mobile App (Login with Inbox & Logout)

Moved to 2025

Depritoritized

Q1-Q4

Offline Verification SDK

Moved to 2025

Depritoritized

Access resources on Collab, our sandbox environment, through the provided.

For quick access to environment related resources, please visit the provided.

Navigate to .

We use to track the work associated with the project (account required). That is where issues open for community contribution can be found.

The process to contribute the code is present . Once code is submitted, it is reviewed through the following process:

Project Lead initiates the release process. The process can be found .

6. Now feel free to make the change in the code or documentation. Reach out to for any queries. Once done with the work, commit your changes by referring to the Issue ID in the commit message. Eg:

12. Reviewers shall review the pull request. Reach out to the for a faster response.

link
link
Community
Jira
here
here
our community
community
LogoGitHub - mosip/injiGitHub
Threat Modeling
SDK
vDP2
Sunbird-Integration
v0.11.0 (Mimoto)
v0.11.0-Inji
Data Backup
v0.11.0-Inji
GenderMag
v0.11.0-Inji
v0.12.0
UXModification
v0.12.0
Credential Type Selection
VC Verification
QR Code Generation
Libraries
v0.13.0
DockerCompose
Certify Integration
Draft 13
Java Upgrade
OpenID4VP
Wallet Rendering
OpenID4BLE
VC Format & Proof types
DataModel2.0
Performance Testing
Security Testing
OpenID4VCIEnhancements
Holder Login
BBS+
Fetch & Download
v0.8.0
Localization
v0.9.0
Responsive UI
v0.9.0
Theme Customization
v0.9.0
Tech Upgrade
v0.9.0
QR Code
Online Share as a VP
Persistent Storage
Time Bound storage
Performance
Security
UIEnhancements
User Login
VC Verification
OpenID4VCI Enhancements
Categorization
VC Formats
easy_deployment_certify_v0
v0.8.0
inji_certify_rel_0.9.0
v0.9.0
Data_model_2.0
pre-authorised_code_flow+cred
W3C_VC_Issaunce_API
issuer_onboarding
Multi-tenancy
presistent_store_credentials
presentation_based_plugin
vault_key_manager_support
vault_key_management
revocation_mechanism
Discovery_metadata_APIs
bulk_batch_issuance
Deferred
extend_credentials
credential_correction
SD-JWT
mDoc_certify
SAAS_Self-hosted
vc_verification
v0.8.0
GenderMag_UI/UX
v0.9.0
mobile_responsive
v0.9.0
code_refactoring
v0.9.0
v0.9.0
OpenIDVP_OVP_Flow
docker_compose
country_qr_code
VC_Verifier_SDK
DIF_issuer_details_display
VC_render
VP_Request
multi-lingual
VP_requestor_SDK
consume_credentials_data
Injiverify_LTS_B1
InjiVerify_BLE_Verification
Credential_correction
credential_revocation
VC_receiver_SDK
multiple_QR_Verification
mDoc_mDL
login_functionality
offline_verification_SDK

Develop

This section offers an overview of the architecture and technologies utilized within Inji Wallet, ensuring compatibility, security, and efficiency in the management of Verifiable Credentials.

Setup

The Setup section of Inji Documentation will enable you (DevOps, Administrators and Developers) to plan and estimate a minimum requisite infrastructure to deploy the the Inji stack seamlessly.

What all you will find here:

  • Deployment Architecture

  • Deploying Inji

License

The documentation is licensed under a Creative Commons Attribution 4.0 International License.

Code of Conduct

Preamble

Community was created to foster an open, innovative and inclusive community around open source & open standards. To clarify expected behaviour in our communities we have adopted the Contributor Covenant. This code of conduct has been adopted by many other open-source communities and we feel it expresses our values well.

Our Pledge

We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, colour, religion, or sexual identity and orientation.

We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

Our Standards

Examples of behaviour that contributes to a positive environment for our community include:

  • Demonstrating empathy and kindness toward other people

  • Being respectful of differing opinions, viewpoints, and experiences

  • Giving and gracefully accepting constructive feedback

  • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience

  • Focusing on what is best not just for us as individuals, but for the overall community

Examples of unacceptable behaviour include:

  • The use of sexualized language or imagery, and sexual attention or advances of any kind

  • Trolling, insulting or derogatory comments, and personal or political attacks

  • Public or private harassment

  • Publishing others' private information, such as a physical or email address, without their explicit permission

  • Other conduct which could reasonably be considered inappropriate in a professional setting

Enforcement Responsibilities

Community leaders are responsible for clarifying and enforcing our standards of acceptable behaviour and will take appropriate and fair corrective action in response to any behaviour that they deem inappropriate, threatening, offensive, or harmful.

Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

Scope

This Code of Conduct applies within all community spaces and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

Enforcement

All community leaders are obligated to respect the privacy and security of the reporter of any incident.

Enforcement Guidelines

Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

1. Correction

Community Impact: Use of inappropriate language or other behaviour deemed unprofessional or unwelcome in the community.

Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behaviour was inappropriate. A public apology may be requested.

2. Warning

Community Impact: A violation through a single incident or series of actions.

Consequence: A warning with consequences for continued behaviour. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

3. Temporary Ban

Community Impact: A serious violation of community standards, including sustained inappropriate behaviour.

Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

4. Permanent Ban

Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behaviour, harassment of an individual, or aggression toward or disparagement of classes of individuals.

Consequence: A permanent ban from any sort of public interaction within the community.

Attribution

Overview

The Inji Mobile application is designed to securely store all types of digital credentials, from national IDs to certificates, in one easy-to-use mobile wallet. It offers a simple way to manage and share trusted data through Verifiable Credentials (VCs), making it portable, convenient, secure, and private for users.

Key features of Inji Mobile include secure storage, seamless sharing, and offline verification capabilities including face authentication, making it an essential tool for users managing digital credentials.

Key Features and Capabilities:

  • Secure Download and Storage of Verifiable Credentials (VCs): The Inji Mobile allows users to download, store, and manage their Verifiable Credentials securely. This makes it a dependable mobile solution for keeping identity credentials, ensuring users have access to their digital IDs anytime, anywhere.

  • Seamless Offline Credential Sharing: Users can share their credentials with service providers without requiring internet connectivity by utilizing Bluetooth Low Energy (BLE) technology. This offline sharing supports decentralized ID verification, making it possible to share VCs even in areas with limited to no internet connectivity, ensuring the user’s credentials are always accessible. This offline capability makes it ideal for users in rural or low-connectivity areas.

  • Offline Face Authentication for Secure Transactions: The app offers offline face authentication, verifying the user’s presence during credential sharing with service providers. This feature adds an additional layer of security when sharing credentials, ensuring the identity of the user is authenticated in real-time.

  • QR Code-Based Access to Online Services: The wallet enables users to log in to service provider portals by scanning QR codes, simplifying access to various services. It also supports single sign-on (SSO) capabilities, allowing users to access multiple services with the same credentials securely.

  • Privacy and Control Over Data Shared: Inji Mobile puts users in control of their data, allowing them to decide what information is shared with service providers. This consent-driven approach ensures that users' privacy is protected throughout all interactions.

  • Enhanced Efficiency for Government Services: Inji Mobile streamlines the registration process for government benefits, such as pensions and healthcare services. It also facilitates the use of VCs during travel and at security checkpoints, such as airports, ensuring that digital IDs are always readily accessible.

  • Robust Security with Verifiable Credentials: The digital credentials managed within Inji Mobile adhere to the Verifiable Credentials (VC) Data Model, ensuring the adherence to global standards for security and authenticity. Before downloading to the device, each credential is authenticated by the issuer's digital signature, and a unique HASH is generated to verify the integrity of the credential at any time.

How Inji Mobile Works:

  • Inji Mobile allows users to securely obtain and manage their verifiable credentials through a simple process. Users can download their credentials by using their unique ID (such as UIN or VID for a government-issued National ID) or the card details they already have (via the KBI method).

  • To validate their identity, users authenticate their request with a one-time password (OTP) sent to their registered mobile number or email.

  • Once validated, the verifiable credential is securely downloaded and stored in the app.

  • For added security, users have the option to authenticate their credentials through offline face verification during transactions.

  • Users maintain full control over what information is shared, through the consent mechanism that comes along.

  • Inji Mobile ensures that the digital signatures of the issuer are verified before the credential is stored, and it generates a unique HASH for each ID to confirm its integrity before displaying it in the app.

Technology and Integration:

To summarize, Inji Mobile is an all-in-one mobile solution for securely managing and sharing Verifiable Credentials. By offering both online and offline features, privacy protection, and seamless integration with service providers, it empowers individuals to have complete control over their digital credentials, wherever they are.

GenderMag

What is GenderMag?

The GenderMag Methodology aims to analyze and mitigate gender biases in users’ problem-solving interactions with software. It underscores the importance of accounting for gender differences in human-computer interaction (HCI) during the software design process.

Process

  1. We identified two personas based on their familiarity with technology and their ability to embrace technological progress. The personas are:

    • Abi, who is either Abigail or Abishek, is 45 years old. She works as a homemaker, is literate, but not very tech- savvy. Her internet connectivity is moderate, and she does not have a personal phone.

    • Tim, who is either Timothy or Timara, a 24-year-old financial consultant, is literate, tech-savvy, and boasts excellent internet connectivity. Additionally, he owns the latest phone.

  2. Examine the feature, systematically walk through the process, assess their information handling, and pinpoint any problems.

During the walkthrough, we pinpointed inclusivity concerns in the Inji Wallet app’s user interface and experience. Subsequently, we took steps to mitigate these issues, aiming to eliminate digital entry barriers.

As part of Phase1, below P1 items are fixed in the v0.11.0-Inji Wallet release:

Sl No
Problem statement
Solution
Jira number

1

The term “scan” can be ambiguous because scanning a QR code within an app might result in a money transfer from a bank account. This perception could be influenced by cultural factors. Abi, instead of directly clicking on the “Scan” option, prefers to select her card and then look for a “Share” option. Unless external assistance is available, Abi will avoid using the “Scan” feature.

Without external assistance, unless there are instructions visibly posted on the wall, she might find it challenging to comprehend whether she needs to select the “scan” option.

The Scan Button in the Navigation Bar can now be referred to as “Share”.

2

On the "Retrieve your ID" screen, instead of using "VID auto population," consider using "Download ID." This change will help avoid confusion for Abi, who might expect an explanation of what VID / UIN IDs are.

On the "Home with cards view," Abi might wonder why her card displays "Activation Pending," while the other card shows Activated for online login".

In the FAQ or Help section, provide information about the various types of IDs, their locations, and instructions on how to download them using different ID methods.

Provide additional information related to "Activation Pending," and ensure clear icon translations for "Activation Done" versus "Activation Pending".

3

  1. When the user clicks on the "Add" button, the options "Generate your card" or "Retrieve your ID" might be confusing.

  2. The description should also include an explanation of why the verification process is necessary.

  3. When the user glances at the screen, the "AID" is not immediately evident.

  1. Update main screen name to "Download your card".

  2. Update main screen description to "Select ID type and enter the MOSIP provided UIN or VID you wish to download." (Also, with a reference to upcoming OTP screen).

  3. Enhance the text to provide a heads up about the upcoming step of OTP verification, so that user is prepared to receive and enter the OTP.

  4. Update bottom line text to "Don't have UIN / VID? Get it now using your AID."

As part of Phase2, below P1, P2 items are fixed in the v0.12.0 release of Inji Wallet:

Sl No
Problem Statement
Solution
Jira number

1

It is confusing for Abi as she has to walk through a lot of steps to get her card. Though it is mentioned as AID, she would be happy but may / may not move forward as it is going to get UIN but not a card.

Update screen name to "Get your UIN/VID." instead of Retrieve your UIN/VID

2

The Resend Code is unclear in the OTP screen.

  1. The Resend Code Text can be more descriptive. “Resend OTP” would be more clear than “Resend code”

  2. The Resend code is confusing as to whether it is clickable or not.

Rename “Resend code” as “Resend OTP”

3

Though Tim is tech savvy, Tim will be sort of puzzled why the app needs location access as well despite a lot of other permissions provided. Tim will be unhappy and question why they are required to provide location access in order to scan a QR code.

Description can be more indicative of the specific purpose of seeking location access.

4

  1. Abi is not so familiar with tech, when the app says share a selfie, they might not know, face auth using her photo, is going in the background. she might think it will break her privacy.

  2. Abi might be confused, as she cannot understand what is the next action to be done, from the instruction. it does not mention whether she has to click on the shutter button or it will take a picture automatically although she would perform the subgoal. Will it automatically click the selfie or do Abi need to click on the button?

For problem statement 1:

  1. Provide assurance wrt Privacy

  2. Terminology update: Face Authentication to Face Verification

  3. Acquaint user with text about "Share with selfie" feature, informing user about face authentication - Through FAQs

  4. Avoid usage of slang jargons like selfie → need confirmation from the product team on the alternative <Sasi>: Let us retain the word as that is more relatable to all.

For problem statement 2:

Enhance text: In the Face Verification screen, the text should be enhanced as "Hold the phone steady, keep your face focused in the centre and click on Capture" below the camera placeholder.

5

The description in the camera screen is not explaining about the sharing credential. Text near the scanner can mention about the “Hold the phone steady and scan the QR code to share your credential”.

  1. Enhance text in Share page while scanning QR code. Text near the scanner can mention about the “Hold the phone steady and scan the QR code to share your card."

  2. Change CTA from "Scan" to "Share"

6

Unlock App screen:

Abi would be stressed if she doesn’t remember the passcode. As there is nothing on the screen to get help. She might not know what to do because she is risk averse.

Add text: Tap on the button to unlock you app with the PIN or biometrics - Text to be enhanced in the unlock screen to clearly call out on other options.

“To unlock the app securely, you can set up either biometric authentication, such as fingerprint or facial recognition or opt for a 6-digit Passcode for quick access. Choose 'Use Biometrics' to enable biometric authentication or 'I'll Do Later' to set up a 6-digit passcode.”

CTAs:

Use Biometrics

I’ll Do Later

7

During the VC sharing, the successful transfer screen closes in a split second leaving the user clueless on the action status. The transition was quick, and no document is shown after the successful transfer. hence Abi is not clear if the sharing is successful or not.

Consider having an Error screen with CTA, clearly indicating the next expected action > Retry

8

No Information related to the selfie captured process was not conveyed to the users, even in the end screen. Selfie capture process does not relate back to the ID sharing process. No message regarding what happened with the selfie clicked.

Post face capture and before initiating the sharing process, inform users about successful face verification/match - But without any CTA.

Architecture

Inji Wallet is a mobile application designed to enhance user convenience by allowing them to securely download and manage their Verifiable Credentials (VC) offline. The diagram below illustrates the extensive features of Inji Wallet, highlighting the essential modules involved in issuing Verifiable Credentials.

Furthermore, this overview outlines various user flows, detailing the seamless processes users can follow. These processes include downloading VC by utilizing eSignet for authentication, securely activating VC, logging in to eSignet, and effortlessly sharing VCs.

.

Let’s go through a brief overview these components.

  • eSignet: Server enables user authorization and generates Verifiable Credentials (VCs) securely from user data.

  • Mimoto: This is a BFF(Backend for Frontend) for routing API calls to services.

  • Tuvali: This is an SDK that transfers data securely over BLE following OpenID4VPBLE specification.

  • Biometric SDK / Face Match SDK: This is an SDK used for face verification.

  • Secure Key Store: This is an SDK used for key-pair generation, signing and encryption/ decryption for Android.

Technical Stack

Wallet Application

This section intends to provide an overview of the technologies, tools and frameworks utilized to build Inji Wallet:

Native Libraries

This section intends to provide an overview of the technologies, tools and frameworks utilized to build native libraries:

Features

Below is a comprehensive overview of the features provided by Inji Wallet.

Download, Verify and Store Verifiable Credentials

Downloading your digital credentials (IDs) with you at all times just got easier. This can be done as below:

Downloading VC using the OpenID for VC Issuance flow:

Residents can download a VC using a configured third-party issuer which complies with OpenID for VCI standard. For Inji Wallet, MOSIP IDA (National ID) and Veridonia Insurance (Insurance credentials) are example integrations.

Credential Type Selection:

Inji Wallet introduces a new feature that empowers users to select the specific type of credential they require. Upon choosing an issuer, users are presented with a list of Credential Types issued by the ID provider. This functionality provides users with flexibility and control, allowing them to download their Verifiable Credentials to their precise needs.

VC Verification:

Inji Wallet offers a robust feature for verifying Verifiable Credentials using the Digital Bazaar library. This advanced functionality ensures that the issuer's signature is validated and verified based on the proof type provided by the issuer. This step is ingrained as part of the VC download flow. Currently, the support is for the RSA signature type, providing users with reliable verification capabilities. Additionally, we are actively working to expand our support to include the Ed25519 proof type, further enhancing the security and versatility of our verification process. With these advancements, users can trust that their Verifiable Credentials are verified with precision and integrity, regardless of the proof type utilized by the issuer.

QR Code Generation:

PixelPass library is capable of generating QR codes for Verifiable Credentials with smaller size data. The library is integrated with Inji Wallet and users can now see a QR code which has Verifiable Credentials embedded in it. These QR codes, visible in the detailed view of the card, offer a convenient way for users to share their credentials with relying parties or service providers. Users can display the QR code so that the relying party / service provider can either:

  • Scan the QR code displayed in the wallet app showcased by the resident.

  • Upload the QR code as an image to the service provider verification website.

Reference Implementation: QR Code generation for Veridonia Insurance VC.

Sharing Verifiable Credentials without the Internet

  • Inji Wallet allows users to securely share their downloaded VCs with other Inji users using Bluetooth Low Energy (BLE) technology, removing the necessity for an internet connection.

Offline authentication of shared Verifiable Credentials

  • Users can verify the authenticity of their shared VCs by taking a self-portrait photograph on their mobile device. Inji Wallet compares this photograph with the image on the VCs, confirming the correct source and owner.

Streamlined SSO and User-Controlled Authentication

  • Inji Wallet users have the ability to choose which downloaded VC should be enabled for online authentication and selectively share the credentials on their ID. This capability provides users with an additional layer of security and control over the utilization of their stored information.

Data backup and restore

In order to safeguard against potential data loss in case of any unprecedented circumstances such as phone / app crashes, device change etc, and to improve user experience in the Inji app, users can now utilize the Backup and Restore feature for their Verifiable Credentials (VCs).

Depending on their device platform, users can choose to store and retrieve VCs securely using either Google Drive (for Android users) or iCloud (for iOS users). This is a one-time setup process, where Android users can select their respective Google email account, while iOS users can back-up data using their default logged-in Apple account.

Security Features

Inji Wallet, as a digital Verifiable Credential wallet, implements robust measures to safeguard PII data and protect against cyber-attacks. Inji Wallet undergoes rigorous Penetration Testing and Threat Modelling by certified experts, further enhancing its resilience against cyber threats.

  1. Utilization of Hardware Keystore:

    • Inji Wallet securely stores private encryption keys by utilizing the Android hardware keystore.

  2. Cryptographic Protection for PII Data:

    • Inji Wallet employs industry-standard SHA-256 and Argon2 cryptographic libraries to hash and strengthen Personally Identifiable Information (PII) data. The app actively detects and responds to any suspicious activities, ensuring enhanced security of user data.

  3. Automatic biometric change detection:

    • Inji Wallet automatically resets itself in case of biometric change, thereby ensuring the security of information.

Ingenious Design

Inji Wallet functions as a comprehensive repository for a diverse array of VCs, leveraging its interface design to benefit users.

  • Multiple views of VCs: Users can access multiple views of VCs, ranging from a mini view to detailed insights.

  • Organized UI: Inji Wallet provides a clear demarcation between downloaded and received VCs enhancing user clarity.

  • Quick Access menu: Users can now directly Share, Share with Selfie directly by accessing the kebab menu from the mini view in the Home Page and the detailed view of the VC.

Also, watch the video below for a quick glimpse of the features available.

Components

Inji Wallet utilizes multiple libraries to provide a seamless experience.

These libraries are accessible as NPM modules, allowing seamless integration with other mobile wallets.

The libraries are as follows:

  1. Tuvali - Sharing via BLE SDK

  2. Face Match SDK

  3. Secure Keystore SDK

  4. PixelPass SDK

  5. VCI-client SDK

  6. OpenID4VP - Online Sharing SDK

  7. Telemetry SDK(coming soon)

1. Tuvali - Sharing via BLE SDK

  • The transfer of downloaded Verifiable Credential from the Wallet to Verifier is facilitated by a React Native library named Tuvali.

  • Tuvali enables offline VC transfer between mobile devices via Bluetooth Low Energy (BLE). The below table represents the supported roles for Android and iOS devices.

  • Tuvali is actively developed and maintained by MOSIP.

  • It does not support iOS for initiating the BLE exchanges, hence preventing two iOS devices from transferring VC.

Note:

2. Face Match SDK

This SDK internally employs a tflite model, which must be created by the integrating party. The model, trained using resident faces, is stored on the MOSIP file server. Inji Wallet currently utilizes the face matcher SDK (soon to be replaced by the NPM module) for offline face authentication.

The SDK is employed in two scenarios:

During Offline VC Sharing: Residents can perform selfie authentication before sharing the VC with the relying party. The app opens the camera, allowing residents to take a selfie, which is then validated against the VC image to verify the resident's presence. During Online Login: Residents can scan the QR code from the relying party portal and opt to log in using Inji Wallet for services. In this process, residents undergo selfie authentication against the VC to confirm their presence.

3. Secure Keystore SDK

The secure-keystore library is designed for creating and storing key pairs in the hardware keystore of devices. The library supports encryption, decryption, HMAC calculation, and signing with aliases created during key pair generation.

This library is available for both Android and iOS platforms:

Inji Wallet integrates with the secure-keystore library to ensure secure key management. To optimize the key size during credential download requests, Inji Wallet uses RSA-2048, ECR1, ECK1, ED25519 keys.

Note:

  • Compatible with devices that support a hardware keystore.

4. PixelPass SDK

The PixelPass library offers a powerful solution for creating and decoding QR codes for Verifiable Credentials (VCs). It is designed to optimize the size of the data encoded within a QR code, making it easier to store and share credential information. The library achieves this by utilizing advanced compression and encoding techniques, ensuring smaller QR codes that maintain the integrity and security of the data.

PixelPass uses zlib compression with a level 9 setting, which significantly reduces the data size before encoding. It then applies base45 encoding to further compress the data into a QR code-friendly format. Additionally, the library can decode any QR code data previously encoded using its own compression and encoding algorithms, ensuring seamless interoperability.

Note:

  • Refer to the PixelPass repository

5. VCI-client SDK

VCI-Client library carries out the credential request from the consumer application (mobile wallet or web) and redirects the issuance/issuer. The library creates a request with the credential format, jwtproof of the wallet, issuer metadata and the access token received for authorization and provides VC as the response back to the consumer application for storage.

Note:

  • Refer to the VCI-Client repository

6. OpenID4VP - Online Sharing SDK

This OpenID4VP library enables consumer applications (mobile wallet) to share users Verifiable Credentials with Verifiers who request them online. It adheres to the OpenID4VP specification which outlines the standards for requesting and presenting Verifiable Credentials.

This library follows the below steps to share the Verifiable Presentation with the Requested Verifier:

  1. Receives the Verifier's Authorization Request sent by the consumer application (mobile wallet).

  2. Authenticates the Verifier using the received client_id and validates the whole Request to check if the required details are present or not and then returns the Authorization Request to the consumer application if all the validations are successful.

  3. Receives the list of Verifiable Credentials from the consumer application which are selected by the consumer application end-user based on the credentials requested as part of Verifier Authorization request.

  4. Constructs the vp_token without proof section and sends it back to the consumer application for generating Json Web Signature (JWS).

  5. Receives the generated signature along with the other details and generates vp_token with proof section & presentation_submission.

  6. Sends a POST request with generated vp_token and presentation_submission to the received Verifier's response_uri endpoint.

Note:

  • Refer to the inji-openid4vp repository

  • Currently, the vp_token uses the Ed25519Signature2020 type for digital signatures.

7. Telemetry SDK

Note: The publication of this project is currently a work in progress and has not been released yet. Stay tuned for further announcements!

All MOSIP's repositories are licensed under the terms of .

All trademarks are the property of their respective holders. Other products and company names mentioned may be trademarks and/or service marks of their respective owners.

Instances of abusive, harassing, or otherwise, unacceptable behaviour may be reported to the community leaders responsible for enforcement at . All complaints will be reviewed and investigated promptly and fairly.

This Code of Conduct is adapted from the , version 2.1, available at .

Community Impact Guidelines were inspired by .

For answers to common questions about this code of conduct, see the FAQ at . Translations are available at .

These credentials can then be shared with relying parties via Bluetooth, using the .

Inji Mobile also integrates with , enabling users to log in to service provider portals by simply scanning a QR code.

Inji Mobile is compatible with the protocol, offering a wide range of Identity Providers (IdP) for users to select from when downloading their verifiable credentials.

The app leverages for generating, downloading and activating Verifiable Credentials (VCs).

Additionally, it utilizes to enable seamless online login for users.

For any queries or contributions, please engage with us .

Screen name: Retrieve your UIN/VID on clicking link

Tool / Technology
Version
Description
License
Tool / Technology
Version
Description
License

To know more about QR code verification, read about Inji Verify .

To understand the workflow, please refer .

The Inji Wallet application facilitates a Single Sign-On (SSO) function, empowering supported partners to enable a seamless login to online portals. This is achieved through the efficient process of scanning a QR code and sharing user data with their explicit consent. To understand the QR code login flow, refer .\

To understand the backup and restore flow, refer .

For a quick look at these features, refer the .

To understand the workflow of key features, refer .

Wallet
Verifier
VC transfer support

To learn more about Tuvali's implementation, refer .

For information on Tuvali's permissions and requirements, refer .

To understand Tuvali and Inji Wallet integration, along with API documentation, refer.

Maven snapshots are available

The face matcher SDK internally implements native functionalities for Android and iOS, utilizing and to identify faces.

Upon the initial launch of Inji Wallet, the model is downloaded in the background and stored in the cache. Refer to check the API specifications for the face matcher model.

For Android: Refer to the .

For iOS: Refer to the .

To check all the APIs supported by this module, refer .

To understand the library and access API documentation, refer .

Maven snapshots are available .

Additionally, for a JSON data, the library employs CBOR encoding and decoding to minimize the size even further. When a JSON Mapper similar to is provided, PixelPass maps the data, applies CBOR encoding/decoding, and compresses the data, achieving maximum size reduction. Developed and maintained by MOSIP, PixelPass is continually updated to provide reliable and efficient QR code generation and decoding capabilities.

To understand about the installation and the API documentation, refer .

For a hands-on experience of Generate a VC, Generate QR Code for the VC and Verify the same using Inji Verify, please click .

To check the NPM module, click.

Maven snapshots are available

To understand about the installation and the API documentation, refer .

Maven snapshots are available

To understand about the installation and the API documentation, refer .

Maven snapshots are available

The module is derived from the module. It is responsible for generating events that can provide valuable analytics.

To know more about each of these, refer .

Infrastructure Requirements
core
Mozilla Public License 2.0
herein
MOSIP
Contributor Covenant
https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
Mozilla's code of conduct enforcement ladder
https://www.contributor-covenant.org/faq
https://www.contributor-covenant.org/translations
BLE protocol
eSignet
OpenID
Mimoto APIs
eSignet APIs
here

Android

Android

Yes

iOS

Android

Yes

Android

iOS

No

iOS

iOS

No

INJIMOB-725
INJIMOB-702
INJIMOB-698
INJIMOB-697
Get it now using your AID
INJIMOB-843
INJIMOB-843
INJIMOB-785
INJIMOB-784
INJIMOB-783
INJIMOB-778
INJIMOB-745
INJIMOB-680
INJIMOB-722
here
here
here
here
Inji Wallet User Guide
Feature Workflows
Kotlin Implementation
Swift Implementation
here
here
here
here
Tensorflow
Google ML Kit
here
secure-keystore Kotlin library
secure-keystore-iOS Swift library
here
here
here
Claim 169
Kotlin Implementation
JS Implementation
Swift Implementation
here
here
here
here
Kotlin Implementation
Swift Implementation
here
here
Kotlin Repository
Swift Repository
here
here
telemetry
sunbird telemetry
Integration Guides

Integration Guides

Below are the guidelines and specifications for integrating any software development kit (SDK) with Inji Wallet:

  1. The SDK should be implemented as a npm module that supports the React Native framework.

  2. The SDK should provide simple APIs for integration purposes.

    These APIs should include an API for instantiation or initialization, such as the init or constructor API.

  3. The SDK should also include additional APIs that perform the necessary actions.

  4. There should be an API available to disconnect the SDK, if needed.

    If possible, it would be beneficial for these APIs to be asynchronous. This enables users to continue using the application without experiencing any UI blocking.

  5. To enhance logging and traceability, the API may accept an optional parameter known as traceabilityId.

By adhering to these specifications, the integrated SDK will enhance the functionality and usability of the application.

This section contains various guides and information that could benefit the developers, system integrators, relying parties and end users.

For more information on how to get started with integrations, read through:

  1. Tuvali - Sharing via BLE

  2. Face Match

  3. Secure Keystore

  4. BLE Verifier

  5. PixelPass

  6. Telemetry (details coming up soon)

Secure Keystore

Secure Keystore is a cross-platform cryptographic key management library for Android and iOS, supporting secure key generation, encryption/decryption, HMAC, and digital signatures using native platform security features (Android Keystore and iOS Keychain/Secure Enclave).

Platforms Supported

  • Android 6.0+ (Hardware-backed keystore)

  • iOS 13.0+ (Secure Enclave + Keychain)


Artifacts

📦 Installation

iOS (Swift)

Using Swift Package Manager:

  1. Open Xcode

  2. Go to File > Swift Packages > Add Package Dependency

  3. Use the URL: https://github.com/mosip/secure-keystore-ios-swift.git

Android (Kotlin)

Add the following in your settings.gradle.kts:

dependencyResolutionManagement {
  repositories {
    google()
    mavenCentral()
    maven("https://oss.sonatype.org/content/repositories/snapshots/")
  }
}

In build.gradle.kts:

dependencies {
  implementation("io.mosip:secure-keystore:0.3.0")
}

📘 API Documentation

  • deviceSupportsHardware() => boolean Checks if the device supports secure hardware-backed keystore.

  • generateKey(alias, isAuthRequired, authTimeout?) Generates a symmetric key for encryption/decryption with optional biometric auth.

  • generateKeyPair(type, alias, isAuthRequired, authTimeout?) Creates a public-private key pair (RSA or EC) with optional authentication.

  • encryptData(alias, data, onSuccess, onFailure) Encrypts data using a symmetric key associated with the given alias.

  • decryptData(alias, encryptedText, onSuccess, onFailure) Decrypts previously encrypted data using the associated key alias.

  • sign(signAlgorithm, alias, data, onSuccess, onFailure) Signs data using the specified key and signature algorithm (RSA, ECDSA are supported).

  • generateHmacSha(alias, data, onSuccess, onFailure) Generates an HMAC signature using the specified alias and data.

  • generateHmacSha256Key(alias) Creates a symmetric key suitable for HMAC-SHA256 operations.

  • hasAlias(alias) => boolean Checks if a key exists for the specified alias.

  • removeKey(alias) Deletes the key associated with the given alias from the keystore.

  • removeAllKeys() Clears all keys stored in the keystore.

  • retrieveKey(alias) Retrieves the public key for the specified alias.

  • storeGenericKey(publicKey, privateKey, account) Stores a custom key pair in the keychain/keystore linked to an account.

  • retrieveGenericKey(account) Retrieves the stored key pair associated with the specified account.


Tuvali API Documentation

Tuvali module is based on the OpenID for Verifiable Presentations over BLE implementation to support sending vc/vp using Bluetooth Low Energy local channel. The below sections explains the APIs of the library in detail.

Firstly, for establishing the secured connection over BLE the connection params which include name and key needs to be exchanged between the two devices. This exchange of parameters can be accomplished but is not limited to by using a QR code.

For example, use a QR code generator to visually display params and a QR code scanner to get params. A mobile app that displays a QR code can act as an Verifier by including its connection params as data in the QR code and another device can act as Wallet which scans the QR code, it can extract the connection parameters and initiate a BLE connection with the advertising device.

URI Exchange and Establishing Connection

Verifier

The Verifier device generates a URI using the startAdvertisement() method and displays it as a QR code. Once the advertisement starts, the Verifier continuously advertises with a payload derived from the URI.

URI contains:

OPENID4VP://connect?name=STADONENTRY&key=8520f0098930a754748b7ddcb43ef75a0dbf3a0d26381af4eba4a98eaa9b4e6a
var verifier = Verifier()
var uri = verifier.startAdvertisement()
println(uri)

Wallet

Start Connection

The device that scans the QR code will extract the connection parameters from the QR code and set its connection parameters using the startConnection() method :

var wallet = Wallet()
wallet.startConnection(uri)

The connection param is a URI with a name & a key. The name is the client's name & the key is the verfier's public key.

OPENID4VP://connect:?name=OVPMOSIP&key=69dc92a2cc91f02258aa8094d6e2b62877f5b6498924fbaedaaa46af30abb364
  • The key part of the data is the same data that will be advertised by the verifier device but in hex-encoded form.

E.g: OVPMOSIP://connect:?name=<>&key=<verifier public key>

Share data

Once the connection is established, wallet app can send the data in a secured way to the Verifier. Note: At this moment, we currently support data transfer from Wallet to Verifier only.

wallet.sendData(payload);

and verifier app can acknowledge it.

verifier.sendVerificationStatus(status);

The following sequence of actions should be performed to transfer data over BLE:

  1. Verifier must start advertising by calling verifier.startAdvertisement(name) method

  2. Subscribe to events using wallet.handleDataEvents

  3. Initiate the secure connection using wallet.startConnection(uri). The Wallet public keys are exchanged with verifier on successful connection.

  4. Wallet calls wallet.sendData(payload) to transfer requisite data over BLE.

  5. Send VC response - Verifier can exchange "Accept/Reject" status to Wallet with the following message type for verifier.sendVerificationStatus method

Subscribe to events

Data received from other apps via BLE can be subscribed to using: Tuvali sends multiple events to propagate connection status, received data etc. These events can be subscribed to by calling:

on Wallet:

wallet.subscribe {
  event  ->
  // Add the code that needs to run once event is received
}

on Verifier:

verifier.subscribe {
  event  ->
  // Add the code that needs to run once data is received
}

Here are the different types of events that can be received

Common Events

Events which are emitted by both Wallet and Verifier

  1. ConnectedEvent

    • on BLE connection getting established between Wallet and Verifier

  2. SecureChannelEstablishedEvent

    • on completion of key exchange between Wallet and Verifier

  3. ErrorEvent

    • on any error in Wallet or Verifier

  4. DisconnectedEvent

    • on BLE disconnection between Wallet and Verifier

Wallet Specific Events

  1. DataSentEvent

    • on completion of Data transfer from the Wallet Side

  2. VerificationStatusReceivedEvent

    • on received verification status from Verifier

Verifier Specific Events

  1. DataReceivedEvent

  • on receiving data from the Wallet Side

Connection closure

The device on which app is running can destroy the connection by calling disconnect() method:

wallet.disconnect();
verifier.disconnect();

Tuvali & Inji Integration

The below diagram explains the series of handshakes between the Verifier and the Wallet device.

Contribution

Inji Wallet is a product of the combined efforts of multiple stakeholders. Contributions from the community form the backbone and drive its growth and stability. The contributions have come in multiple ways, ranging from direct code contributions, review of design and architecture, bug fixing, and support for technology evaluation.

How do I contribute?

PixelPass

PixelPass

PixelPass is a versatile and easy-to-use library designed to simplify working with QR codes and data compression. It allows you to generate QR codes from any given data with just a single function. If you’re working with JSON, PixelPass can take that data, compress it, and convert it into a compact format using CBOR encoding, making it smaller and more efficient for QR code generation. The library can also decode this compressed data, turning CBOR back into the original JSON format. Additionally, for more complex use cases, PixelPass offers the ability to map your JSON data to a specific structure, compress it, and encode it into CBOR. Later, you can also reverse this process, decoding the CBOR back into its mapped JSON structure. With these capabilities, PixelPass makes managing, compressing, and encoding data for QR codes easy and efficient.

PixelPass has NPM, Kotlin, Swift and Java artifacts available.

Features

  • Compresses data using zlib with the highest compression level (level 9).

  • Encodes and decodes data with the base45 format.

  • For JSON data, applies CBOR encoding/decoding to achieve additional size reduction.

  • With JSON and a Mapper provided, maps the JSON and then performs CBOR encoding/decoding to further shrink the data size.

Usage

  1. As a node project:

npm i @mosip/pixelpass

  1. As a Kotlin/Java dependency:

Gradle

implementation("io.mosip:pixelpass:0.5.0")

Maven

  1. To include PixelPass in your Swift project, follow the below steps:

    1. Clone the PixelPass library locally.

    2. Create a new Swift project.

    3. Add package dependency: PixelPass

APIs

Below are the APIs provided by the PixelPass library:

generateQRCode( data, ecc , header )

The generateQRCode takes a data, ECC (Error correction level) which when not passed defaults to L and header which defaults to empty string if not passed. Returns a base64 encoded PNG image.

  • data - Data needs to be compressed and encoded.

  • ecc - Error Correction Level for the QR generated. defaults to "L".

  • header - Data header need to be prepend to identify the encoded data. defaults to "".

generateQRData( data, header )

The generateQRData takes a valid JSON string and a header which when not passed defaults to an empty string. This API will return a base45 encoded string which is Compressed > CBOR Encoded > Base45 Encoded.

  • data - Data needs to be compressed and encoded.

  • header - Data header need to be prepend to identify the encoded data. defaults to "".

decode( data )

The decode will take a string as parameter and gives us decoded JSON string which is Base45 Decoded > CBOR Decoded > Decompressed.

  • data - Data needs to be decoded and decompressed without header.

decodeBinary( data )

The decodeBinary will take a UInt8ByteArray as parameter and gives us unzipped string. Currently only zip binary data is only supported.

  • data - Data needs to be decoded and decompressed without header.

getMappedData( jsonData, mapper, cborEnable )

The getMappedData takes 3 arguments a JSON and a map with which we will be creating a new map with keys and values mapped based on the mapper. The third parameter is an optional value to enable or disable CBOR encoding on the mapped data.

  • jsonData - A JSON data.

  • mapper - A Map which is used to map with the JSON.

  • cborEnable - A Boolean which is used to enable or disable CBOR encoding on mapped data. Defaults to false if not provided.

The example of a converted map would look like, { "1": "207", "2": "Jhon", "3": "Honay"}

decodeMappedData( data, mapper )

The decodeMappedData takes 2 arguments a string which is CBOR Encoded or a mapped JSON and a map with which we will be creating a JSON by mapping the keys and values. If the data provided is CBOR encoded string the API will do a CBOR decode first ad then proceed with re-mapping the data.

  • data - A CBOREncoded string or a mapped JSON.

  • mapper - A Map which is used to map with the JSON.

The example of the returned JSON would look like, {"name": "Jhon", "id": "207", "l_name": "Honay"}

Errors / Exceptions

Shall you encounter any errors while using the APIs, please refer to the below:

  1. Cannot read properties of null (reading 'length') - This error denotes that the string passed to encode is null.

  2. Cannot read properties of undefined (reading 'length') - This error denotes that the string passed to encode is undefined.

  3. byteArrayArg is null or undefined. - This error denotes that the string passed to encode is null or undefined.

  4. utf8StringArg is null or undefined. - This error denotes that the string passed to decode is null or undefined.

  5. utf8StringArg has incorrect length. - This error denotes that the string passed to decode is of invalid length.

  6. Invalid character at position X. - This error denotes that the string passed to decode is invalid with an unknown character then base45 character set. Also denotes the invalid character position.

  7. incorrect data check - This error denotes that the string passed to decode is invalid.

PixelPass & Inji Wallet Integration:

The below diagram shows how Inji Wallet utilises PixelPass library.

PixelPass & Inji Verify Integration:

The below diagram shows how Inji Verify utilises PixelPass library.

VCI-Client

VCI-Client

vci-client library enables to carry out the credential request from the consumer application (mobile wallet or web) and download the VC.

Features:

  • Creates a credential request with access token, issuer metadata, holder jwt proof.

  • Provide credential response (VC) to the consumer application.

  • Kotlin and Swift artefacts are available to integrate with the native mobile applications.

Below sections details on the steps for integrating the Kotlin and Swift packages into the app.

Android: Kotlin package for vci-client:

Repository

Installation

Note: implementation "io.mosip:inji-vci-client:0.1.0-SNAPSHOT"

APIs

1. Request Credential

Request for credential from the providers (credential issuer), and receive the credential.

Parameters

Exceptions

  • DownloadFailedException is thrown when the credential issuer did not respond with credential response

  • NetworkRequestTimeoutException is thrown when the request is timedout

More details

An example app is added under /example folder which can be referenced for more details.

iOS: Swift package for vci-client:

Repository

Installation

  1. Clone the repo

  2. In your swift application go to file > add package dependency > add thehttps://github.com/mosip/inji-vci-client-ios-swift in git search bar> add package

  3. Import the library and use.

APIs

1. Request Credential

Request for credential from the issuer, and receive the credential response back in string.

Parameters

Exceptions

  • DownloadFailedError is thrown when the credential issuer did not respond with credential response

  • NetworkRequestTimeOutError is thrown when the request is timedout

More details

An example app is added under /SwiftExample folder which can be referenced for more details. Extract the swift example app out of the library and then follow the installation steps.

VCI-Client and Inji Wallet integration:

The below diagram shows how Inji Wallet utilises vci-client library.

Infrastructure Requirements

Overview

This document outlines the infrastructure requirements for deploying the Inji Stack in a Proof of Concept (POC) or demo sandbox environment or small scale pilot. It serves as a comprehensive reference for system architects, DevOps engineers, and IT administrators who are responsible for provisioning and configuring the virtualized infrastructure required to run Inji modules effectively.

The Inji Stack enables secure issuance, holding, and verification of Verifiable Credentials (VCs) and includes services such as Inji Web Wallet, Inji Mobile Wallet, Inji Verify, and Inji Certify. To demonstrate these capabilities effectively, a stable and scalable Kubernetes-based deployment environment is essential. To showcase these capabilities in a demo, small scale pilot or POC setting, the stack must be deployed on a Kubernetes cluster with properly allocated resources, network settings, and domain configurations.

This document outlines the necessary hardware, VM provisioning details, cluster roles, and optional components to support observability and access control.

Purpose of this Document

  • Define the minimum infrastructure required for running all components of Inji Stack.

  • Specify node roles, hardware configurations, and networking prerequisites.

  • Provide guidelines for optional tools like Rancher and Keycloak, if Role-Based Access Control (RBAC) and observability are desired.

  • Highlight key considerations around DNS setup, SSL certificates, and VM provisioning.

Who Should Use This Document?

  • DevOps Engineers setting up and maintaining the Inji Stack environments.

  • System Integrators or Partner Teams participating in small scale pilots, POCs or sandbox testing.

  • IT Teams preparing demo infrastructure for showcasing Inji capabilities.

  • Solution Architects planning how to scale from demo to production-ready deployments.

How It Helps

  • Reduces ambiguity by clearly stating resource needs and cluster expectations.

  • Supports repeatable deployments by defining baseline configurations.

  • Acts as a starting point to scale up to a high-availability production architecture.

Cluster Roles

Cluster Composition

  • The environment consists of 3 Virtual Machines (VMs) functioning as separate nodes in a Kubernetes cluster.

  • Three nodes mentioned above respective two roles discussed below.

Control Plane Node

  • Purpose: Acts as both the master node and the etcd plane node.

  • Role: Hosts all essential Kubernetes components required to orchestrate and manage the cluster.

Worker Node

  • Purpose: Serves as a dedicated worker node for running the complete Inji Stack.

  • Role: Hosts all services across all modules of Inji.

Cluster-wide Role Assignment:

  • All cluster nodes are assigned to all of the above-mentioned cluster roles.

    • Proper configuration and resource allocation ensure seamless functioning of the cluster.

Hardware Requirements

Note: This configuration is for Proof of Concept, Small scale pilot, demonstration and evaluation purposes only. For production deployments, follow high availability best practices as outlined in the Kubernetes or RKE documentation to be able to sustain failures.

Production Guidelines (Optional for POC)

Optional Components (Observability and RBAC)

In case Rancher is used for cluster management and Keycloak is integrated for Role-Based Access Control (RBAC), the following infrastructure is additionally required:

Observation Cluster Setup

SSL Certificate Requirements

  • Two wildcard SSL certificates are recommended:

    1. One for Inji cluster components (e.g., *.inji.example.org) mapping.

    2. (Optional) One for Observation cluster components if deployed separately.

Network Requirements

  • All VMs must be able to communicate with each other over a stable private network.

  • Stable internet connectivity is needed on all VMs for:

    • Docker image downloads.

    • External software updates (or access to a local Docker registry for offline setups).

  • Networking interfaces must be configured as per the Hardware table requirements given above:

    • Public and private interfaces, where required.

DNS Requirements

  • Access to a DNS server to map multiple subdomains under a wildcard domain (e.g., *.inji.example.org).

  • Subdomain mapping enables hosting of services and components such as:

    • verify.inji.example.org

    • certify.inji.example.org

    • certify.web.example.org

    • etc.

Conclusion

This infrastructure specification provides the baseline setup needed to deploy the Inji Stack for showcasing its verifiable credentials capabilities as an end-to-end ecosystem. While the current configurations are optimized for Proof of Concept, Small scale pilot and demo scenarios, this document also points to production-ready practices for teams planning to transition to a fully operational environment.

Face Match

Face Match is an optional component in Inji Wallet. This is built as a standard that allows anyone to integrate their Facematch SDK. Its expected that the wallet providers would integrate the SDK that matches the specification.

Contribution

We extend our sincere appreciation to the IRIScan team for their invaluable support to MOSIP by providing an opensource face match SDK for our internal reference integration. We are truly impressed by your commitment and outstanding contribution. We welcome and invite our other esteemed partners to collaborate with MOSIP, for a similar integration.

Repository

NPM Package

Installation

  • To install any face sdk module, please add it's dependency in the package.json file.

  • Once done rebuild the Inji Wallet.

  • The Inji Wallet should be able to integrate and use the face sdk.

Face Compare with liveness is coming soon

  • The following guidelines apply to individuals who are developing the face SDK:

    1. It is prohibited to collect any personally identifiable information (PII) or phone details.

    2. Inji Wallet includes built-in telemetry, and all telemetry data must be transmitted to the designated system. Telemetry enhances Inji Wallet's observability features by capturing specific events, creating measures, and monitoring various user actions and events.

    3. Recording or transmitting IP addresses, user details, Phone IMEI, phone numbers, or user photos in telemetry or logs is strictly prohibited.

    4. The use of phone numbers and device fingerprints should be limited to managing the SDK license.

Permissions & Requirements

Permissions

Android

Following permissions are required to be included in the AndroidManifest.xml to access Bluetooth Low Energy on Android.

Permissions required for Central (Wallet) when target is Android 12 or higher

Permissions required for Central (Wallet) when target is Android 11 or lower

Permissions required for Peripheral (Verifier) when target is Android 12 or higher

Permissions required for Peripheral (Verifier) when target is Android 11 or lower

iOS

Following permissions are required to be included in info.plist to access the Core Bluetooth APIs on iOS.

Minimum Version Requirements

BLE version: BLE 4.2 and above.

Android version: Android version 9 (API level 28) and above.

iOS version: The SDK requires iOS minimum deployment target version as 13.0.

Capabilities

  • Wallet: In this role, Tuvali can discover Verifier devices over BLE and can connect and share data. This role is supported on both, Android and iOS devices meeting minimum version requirement.

  • Verifier: In this role, Tuvali can advertise itself to Wallets and receive data. This role is supported only on Android devices at the moment. iOS doesn't support being a Verifier.

Using Mock Data

Introduction

Welcome to the Inji ecosystem, which encompasses the Inji Mobile Wallet, Inji Web Wallet, Inji Verify, and Inji Certify. These tools provide a powerful platform for managing and verifying digital credentials with ease. This document guides you through using mock data to explore the functionalities of each component, allowing you to understand and leverage their capabilities effectively. Read on to discover how you can interact with Inji's ecosystem, using demo credentials and mock data as explained below.

This guide explains the use of mock data for following:

  • Inji Mobile Wallet

  • Inji Web Wallet

  • Inji Verify

Inji Mobile Wallet

What would you need?

You will need UIN (Unique identification number) as a demo credential whic will allow you to explore Inji's capabilities and experience seamless VC sharing. You can also try this with 'Sample Insurance Credentials'.

UIN Credentials

  • Issuance of UIN (Unique identification number) as a demo credential will allow you to explore Inji's capabilities and experience seamless VC sharing firsthand.

Note: You can use 111111 as the OTP, for any OTP based feature in Collab environment.

Insurance Credentials:

For sample Insurance Credentials, please provide the below details in the eSignet authentication page:

  • Policy id: 7070

  • Name: aswin

  • DOB: 19/02/2025

Inji Web Wallet

The mock data you will need for Inji Web Wallet is same as that of Inji Mobile Wallet (Explained above).

Inji Verify

Follow the procedure to try out Inji Verify in our collab environment:

  1. To use the QR code with verifiable credentials and test out the Inji Verify application, exploring the scan and upload features, please use the QR codes provided below:

Verifiable QR Code - Valid VC

Sample QR code - Valid VC Data

Verifiable QR Code - Expired VC

Sample QR code - Expired VC Data

Verifiable QR Code - Invalid VC

Sample QR code - Invalid VC Data

Feel free to scan or upload these QR codes to experience the functionality firsthand.

Roadmap 2025

Here we present the product roadmap for the whole of 'Inji Stack' for the calendar year 2025.

The quarters are defined as follows:

  • Q1: Jan'25 – Mar'25

  • Q2: Apr'25 – Jun'25

  • Q3: Jul'25 – Sep'25

  • Q4: Oct'25 – Dec'25

Inji Wallet

Inji Mobile

Inji Web

Inji Certify

Vision

The goal of Inji Certify for the rear 2025 is to provide a comprehensive and user-centric platform for issuing, managing, and verifying credentials, tailored to meet the diverse needs of individuals, organizations, and issuers. With support for multiple credential formats (e.g., SD-JWT, mDoc/mDL), advanced cryptographic standards (ECC, BBS), and privacy-preserving mechanisms, the platform ensures secure and flexible credential handling.

By enabling features like multi-issuer onboarding, deferred issuance, subject-holder relationship management, and one-click authorization during issuance, Inji Certify addresses real-world scenarios such as sharing family credentials, automating bulk credential generation, and simplifying issuer interactions. The integration of offline capabilities (e.g., printable QR-embedded credentials) and scalable architecture ensures accessibility, even in low-connectivity environments, while maintaining performance benchmarks of up to 1 million credentials per day.

Inji Certify’s vision is to foster trust and interoperability in the digital identity ecosystem, empowering users with control over their credentials while providing issuers with a reliable and standards-compliant platform.

Inji Verify

Vision

Our vision for 2025 is to position Inji Verify as the go-to tool for seamless and secure credential verification. We aim to deliver easily configurable UI components for third-party verifier portals, tailored to meet the diverse needs of organizations across the globe. With support for multiple credential formats (SD-JWT, mDoc/mDL, W3C) and advanced cryptographic standards (ECC), Inji Verify ensures flexible and secure credential handling.

Inji Verify fosters trust and interoperability in the digital identity ecosystem. By introducing features like multi-proof capabilities, QR Based Verifiable Presentation in Same Device, SVG Rendering post VC verification, able to identify revoked credentials during verification, able to support credential correction, verification of documents with multiple QR codes, BLE Based verifiable presentation - Inji Verify will redefine user experience and reliability. With a focus on performance , enhanced design for an intuitive look and feel, and adherence to global standards (Data Model 1.1/2.0), the GA release will set new benchmarks for stability, usability, and excellence in digital verification.

0.71.8

It brings the best parts of developing with React to native development. It's a best-in-class JavaScript library for building user interfaces.

4.9.5

A strongly typed programming language that builds on JavaScript and uses type inference to give great tooling without additional code.

29.5.11

Jest is a well-known JavaScript testing framework and is extensively used to test React applications

minSDK 24 compileSDK 24 targetSDK 34

Android is a mobile operating system based on a modified version of the Linux kernel and other open-source software, designed primarily for touchscreen mobile devices. This is used to build the application for running on Android devices

13.4

iOS is a mobile operating system developed by Apple exclusively for its smartphones. Swift is a high-level general-purpose, multi-paradigm, compiled programming language created to develop on iOS.

2.0.0 Java 17

Kotlin is a modern statically typed programming language

minSDK 23 compileSDK 33

Android is a mobile operating system based on a modified version of the Linux kernel and other open-source software, designed primarily for touchscreen mobile devices. This is used to build the application for running on Android devices

13.4

iOS is a mobile operating system developed by Apple exclusively for its smartphones. Swift is a high-level general-purpose, multi-paradigm, compiled programming language created to develop on iOS.

For example, the npm modules, and , demonstrate suitable implementations.

Maven Snapshots are available

URI structure can be found in the . Currently the library doesnot support iOS as a verifier.But it can act as a wallet for android verifier.

For code contributions, refer .

To engage with us on our community forum, visit .

inji-vci-client repo is

Maven snapshots available

Snapshot builds are available .

Name
Type
Description
Sample
Name
Type
Description
Sample

Refer to for standard terminology.

For reference, follow Rancher’s production-ready checklist and instruction for RKE which are mentioned here : .

The current is in draft state.

This feature enables Inji Wallet to verify specific parameters for liveness. We utilize local face verification to guarantee the user's presence during a transaction. This measure is implemented to combat fraud, going beyond the standard.

Whether you're a Developer, System Integrator, or an Enthusiast eager to dive into the world of verifiable credentials, use this guide for necessary information to get started with Inji in our environment. Let's begin this journey of seamless setup and exploration.

Fill out the here and we will generate the demo credentials, which you can use subsequently on the Inji Mobile app to download and share Verifiable Credentials (VCs).

To obtain sample verifiable credentials embedded in a QR code, please initiate the process by following the steps to generate the QR code, click !

Vision

In 2025, Inji Wallet will continue to ensure compatibility with diverse ecosystems by supporting multiple credential formats, such as mDoc/mDL, SD-JWT, and JWT. The wallet will also incorporate privacy-preserving mechanisms such as BBS+, selective disclosure, and one-time credentials, empowering users to retain full control over their personal information. Additionally, the wallet will enable multi-user credential sharing, addressing family-based use-cases such as ration cards and property deeds, further enhancing its versatility and real-world applicability.

The wallet’s roadmap includes critical features like enhancements for cross-device and same-device flows, Shamir’s secret sharing for secure key recovery, ECC K1 and R1 key support. By enabling the seamless integration of features like credential offer endpoints and pre-authorized code flows (), Inji Wallet will cater to real-world use cases with ease.

The mobile and web interfaces of Inji Wallet will support high-performance operations, maintaining accessibility even in low-connectivity environments. With robust user login and profile management features, along with integration of play integrity on Android, the wallet will ensure a scalable, secure, and privacy-focused user experience.

By 2025, Inji Wallet aims to be a reliable, standards-compliant digital wallet, empowering users to manage their credentials while fostering trusted data exchange and seamless interoperability within the verifiable credentials ecosystem.

Quarter 🗓️
Feature 🛠️
Details 📝
Status 📊
Release 📌
Quarter 🗓️
Feature 🛠️
Details 📊
Status 📝
Release 📌
Quarter 🗓️
Feature 🛠️
Details 📊
Status 📝
Release 📌
Quarter 🗓️
Feature 🛠️
Details 📊
Status 📝
Release 📌
React Native
MIT License
TypeScript
Apache-2.0 License
Jest
MIT License
Android
iOS
Kotlin
Android
iOS
tuvali
secure-keystore
here
spec
here
here
<dependency>
  <groupId>io.mosip</groupId>
  <artifactId>pixelpass</artifactId>
  <version>0.5.0</version>
</dependency>
import { generateQRCode } from '@mosip/pixelpass';

const data = "Hello";
const qrCode = generateQRCode(data, ecc, header);

// ecc is Error Correction Level for the QR generated. defaults to "L".
// header defaults to empty string if not passed.
import { generateQRData } from '@mosip/pixelpass';

const jsonString = "{\"name\":\"Steve\",\"id\":\"1\",\"l_name\":\"jobs\"}";
const header = "jsonstring";

const encodedCBORData = generateQRData(jsonString, header);

// header defaults to empty string if not passed.
import { decode } from '@mosip/pixelpass';

const b45EncodedData = "NCFWTL$PPB$PN$AWGAE%5UW5A%ADFAHR9 IE:GG6ZJJCL2.AJKAMHA100+8S.1";
const jsonString = decode(b45EncodedData);
import { decodeBinary } from '@mosip/pixelpass';

const zipdata = <zip-byte-array>;
const decompressedData = decodeBinary(zipdata);
import { getMappedData } from '@mosip/pixelpass';

const jsonData = {"name": "Jhon", "id": "207", "l_name": "Honay"};
const mapper = {"id": "1", "name": "2", "l_name": "3"};

const byteBuffer = getMappedData(jsonData, mapper,true);

const cborEncodedString = byteBuffer.toString('hex');
import { decodeMappedData } from '@mosip/pixelpass';

const cborEncodedString = "a302644a686f6e01633230370365486f6e6179";
const mapper = {"1": "id", "2": "name", "3": "l_name"};

const jsonData = decodeMappedData(cborEncodedString, mapper);
val credentialResponse: CredentialResponse? = VCIClient().requestCredential(
                        IssuerMetaData( CREDENTIAL_AUDIENCE, CREDENTIAL_ENDPOINT, DOWNLOAD_TIMEOUT, CREDENTIAL_TYPE, CREDENTIAL_FORMAT ),
                        proofJwt,
                        accessToken
                    )

issuerMetaData

IssuerMetaData

Data object of the issuer details

IssuerMetaData(credentialAudience, credentialEndpoint, downloadTimeout, credentialType, credentialFormat)

proofJwt

Proof

The proof used for making credential request. Supported proof types : JWT.

JWTProof(jwtValue)

accessToken

String

token issued by providers based on auth code

""

https://github.com/mosip/inji-vci-client-ios-swift/
let requestCredential = try await VCIClient().requestCredential(issuerMeta: IssuerMeta, proofJwt: Proof, accessToken: String)

issuerMeta

IssuerMeta

struct of the issuer details like audience, endpoint, timeout, type and format

IssuerMeta(credentialAudience, credentialEndpoint, downloadTimeout, credentialType, credentialFormat)

proofJwt

Proof

The proof type ProofJwt ex jwt

JWTProof(jwt: proofJWT)

accessToken

String

token issued by providers based on auth code

""

Usage

VMs

vCPU

RAM

HDD

Network Interface

Inji-Cluster Worker Nodes

3

8

32GB

64GB

1 Private

Inji-Cluster NGINX

1

4

8GB

128GB

1 Private + 1 Public

Wireguard Bastion Server

1

2

4GB

30GB

1 Private + 1 Public

Usage

VMs

vCPU

RAM

HDD

Network Interface

Observation Cluster Nodes

2

4

8GB

64GB

1 Private

Observation Cluster NGINX

1

4

8GB

64GB

1 Private

<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />;
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />;
<uses-permission android:name="android.permission.BLUETOOTH" />;
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />;
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />;
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />;
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />;
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />;
<uses-permission android:name="android.permission.BLUETOOTH" />;
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />;
<key>NSBluetoothAlwaysUsageDescription</key>
<string>Bluetooth is used to allow sharing VCs with another device</string>

<key>NSBluetoothPeripheralUsageDescription</key>
<string>Bluetooth is used to allow sharing VCs with another device</string>
{
    "credential": {
        "id": "did:cbse:327b6c3f-ce17-4c00-ae4f-7fb2313b0626",
        "type": [
            "VerifiableCredential",
            "UniversityDegreeCredential"
        ],
        "proof": {
            "type": "Ed25519Signature2020",
            "created": "2024-05-16T07:27:43Z",
            "proofValue": "z56crqnnjmvDa46FqmAnVhEttqKtFMTQ1et1mM5dA3WSHtb5ncQ36sS8fG3fxw6dpvtqbqvaE5FzaqwJTBX6dGH3P",
            "proofPurpose": "assertionMethod",
            "verificationMethod": "did:web:Sreejit-K.github.io:VCTest:d40bdb68-6a8d-4b71-9c2a-f3002513ae0e#key-0"
        },
        "issuer": "did:web:Sreejit-K.github.io:VCTest:d40bdb68-6a8d-4b71-9c2a-f3002513ae0e",
        "@context": [
            "https://www.w3.org/2018/credentials/v1",
            "https://sreejit-k.github.io/VCTest/udc-context2.json",
            "https://w3id.org/security/suites/ed25519-2020/v1"
        ],
        "issuanceDate": "2023-02-06T11:56:27.259Z",
        "expirationDate": "2025-02-08T11:56:27.259Z",
        "credentialSubject": {
            "id": "did:example:2002-AR-015678",
            "type": "UniversityDegreeCredential",
            "ChildFullName": "Alex Jameson Taylor",
            "ChildDob": "January 15, 2002",
            "ChildGender": "Male",
            "ChildNationality": "Arandian",
            "ChildPlaceOfBirth": "Central Hospital, New Valera, Arandia",
            "FatherFullName": "Michael David Taylor",
            "FatherDob": "April 22, 1988",
            "FatherNationality": "Arandian",
            "MotherFullName": "Emma Louise Taylor",
            "MotherDob": "June 5, 1990",
            "MotherNationality": "Arandian",
            "RegistrationNumber": "2002-AR-015678",
            "DateOfRegistration": "January 20, 2002",
            "DateOfIssuance": "January 22, 2002"
        }
    },
    "credentialSchemaId": "did:schema:e2e6b5b7-8af7-4018-a472-3f1e396c3c1e",
    "createdAt": "2024-05-16T07:27:43.831Z",
    "updatedAt": "2024-05-16T07:27:43.831Z",
    "createdBy": "",
    "updatedBy": "",
    "tags": [
        "tag1",
        "tag2",
        "tag3"
    ]
}
{
    "id": "did:rcw:ab01ec3f-9f67-4ce8-ade1-8fce82a9bee1",
    "type": [
        "VerifiableCredential",
        "LifeInsuranceCredential",
        "InsuranceCredential"
    ],
    "proof": {
        "type": "Ed25519Signature2020",
        "created": "2024-05-03T12:53:39Z",
        "proofValue": "z4GVSorSVms65uTSLHRdqJB7Km7UuyzGzYbu9uKuwBPRLgHLmBMa8YnBczVh4id2PMsrB31kjCbe6NVLdA9jThURs",
        "proofPurpose": "assertionMethod",
        "verificationMethod": "did:web:challabeehyv.github.io:DID-Resolve:3313e611-d08a-49c8-b478-7f55eafe62f2#key-0"
    },
    "issuer": "did:web:challabeehyv.github.io:DID-Resolve:3313e611-d08a-49c8-b478-7f55eafe62f2",
    "@context": [
        "https://www.w3.org/2018/credentials/v1",
        "https://holashchand.github.io/test_project/insurance-context.json",
        {
            "LifeInsuranceCredential": {
                "@id": "InsuranceCredential"
            }
        },
        "https://w3id.org/security/suites/ed25519-2020/v1"
    ],
    "issuanceDate": "2024-05-03T12:53:39.113Z",
    "expirationDate": "2024-06-02T12:53:39.110Z",
    "credentialSubject": {
        "id": "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6IlAtMjU2Iiwia2lkIjoic3pGa2cyOVFFalpiQ1VheFRfbFdiZElEU1ZQNWhlREhTeGR6UlhTOW1WZyIsIngiOiJzeVZ2Y2pEX1k0Y0xFS2NUTGR3a1dEWnR1RGpGWGxwcUtLZ2l5TDB2ZUY0IiwieSI6Ii13eGZIMDZRclRCZGljOG1yRDRBM2E0alhGREx1RnlBa0NPMm56Z3BNUGMiLCJhbGciOiJFUzI1NiJ9",
        "dob": "1991-08-13",
        "email": "challarao@beehyv.com",
        "gender": "Male",
        "mobile": "0123456789",
        "benefits": [
            "Critical Surgery",
            "Full body checkup"
        ],
        "fullName": "Challarao V",
        "policyName": "Start Insurance Gold Premium",
        "policyNumber": "1234567",
        "policyIssuedOn": "2023-04-20T20:48:17.684Z",
        "policyExpiresOn": "2033-04-20T20:48:17.684Z"
    }
}
{
    "id": "did:cbse:327b6c3f-ce17-4c00-ae4f-7fb2313b0626",
    "type": [
        "VerifiableCredential",
        "UniversityDegreeCredential"
    ],
    "proof": {
        "type": "Ed25519Signature2020",
        "created": "2024-05-16T07:27:43Z",
        "proofValue": "z56crqnnjmvDa46FqmAnVhEttqKtFMTQ1et1mM5dA3WSHtb5ncQ36sS8fG3fxw6dpvtqbqvaE5FzaqwJTBX6dGH3P",
        "proofPurpose": "assertionMethod",
        "verificationMethod": "did:web:Sreejit-K.github.io:VCTest:d40bdb68-6a8d-4b71-9c2a-f3002513ae0e#key-0"
    },
    "issuer": "did:web:Sreejit-K.github.io:VCTest:d40bdb68-6a8d-4b71-9c2a-f3002513ae0e",
    "@context": [
        "https://www.w3.org/2018/credentials/v1",
        "https://sreejit-k.github.io/VCTest/udc-context2.json",
        "https://w3id.org/security/suites/ed25519-2020/v1"
    ],
    "issuanceDate": "2023-02-06T11:56:27.259Z",
    "expirationDate": "2025-02-08T11:56:27.259Z",
    "credentialSubject": {
        "id": "did:example:2002-AR-015678",
        "type": "UniversityDegreeCredential",
        "ChildFullName": "Alex Jameson Taylor",
        "ChildDob": "January 15, 2003",
        "ChildGender": "Male",
        "ChildNationality": "Arandian",
        "ChildPlaceOfBirth": "Central Hospital, New Valera, Arandia",
        "FatherFullName": "Michael David Taylor",
        "FatherDob": "April 22, 1988",
        "FatherNationality": "Arandian",
        "MotherFullName": "Emma Louise Taylor",
        "MotherDob": "June 5, 1990",
        "MotherNationality": "Arandian",
        "RegistrationNumber": "2002-AR-015678",
        "DateOfRegistration": "January 20, 2002",
        "DateOfIssuance": "January 22, 2002"
    }
}
here
here
here
Kubernetes Core Components
Recommended Cluster Architecture - Rancher
specification
ISO/IEC 30101
Collab
form
here
OpenIDVP
OpenID4VCI

Q1

Cross-Device Enhancements for Credential Sharing ( OpenIDVP: Verifier Metadata Management)

🟠 In-progress

v0.16.0

Q1

Support for Sharing mDL/mDoc Credentials

🟠 In-progress

v0.17.0

Q1

Secure Wallet Setup with Key Binding (SIOP)

🔵 Planned

v0.17.0

Q1

Support for Advanced Cryptographic Keys (ECC K1)

🔵 Planned

v0.17.0

Q2

W3C Data Model 2.0 & SVG Render Method

🔵 Planned

v0.18.0

Q2

Credential Revocation

🔵 Planned

v0.18.0

Q2

  1. SD JWT VC Support

  2. Selective disclosure of user information while sharing

🔵 Planned

v0.18.0

Q2

Wallet Login with Unified Key Management

🔵 Planned

v0.19.0

Q2

Secure Key Recovery with Shamir’s Secret Sharing

🔵 Planned

v0.19.0

Q2

Profile Creation using a Single Credential

🔵 Planned

v0.19.0

Q3

Same Device Flow: Multiple credential requests during the presentation (OpenIDVP)

🔵 Planned

v0.20.0

Q3

OpenID4VCI Support for credential offer endpoint and pre-authorised code flow

🔵 Planned

v0.20.0

Q3

Advanced Privacy Features with BBS+

🔵 Planned

v0.20.0

Q3

Android App Security with Play Integrity

🔵 Planned

v0.20.0

Q4

One-Time-Use Credentials for Privacy

🔵 Planned

v1.0

Q4

Multi-User Family Credentials

🔵 Planned

v1.0

Q4

Support for JWT Credentials

🔵 Planned

v1.0

Q4

Support for Advanced Cryptographic Keys (ECC R1)

🔵 Planned

v1.0

Q1

User Login & Profile Management

🔵 Planned

v0.12.0

Q1

Unified Key Management for Web & Mobile

🔵 Planned

v0.12.0

Q1

W3C Data Model 2.0 & SVG Render Method

🔵 Planned

v0.13.0

Q2

Secure Key Recovery Using Shamir’s Secret Sharing

🔵 Planned

v0.13.0

Q2

Support for Advanced Cryptographic Keys (ED25519 Signature Support 2018 & 2020)

🔵 Planned

v0.13.0

Q2

Support for Advanced Cryptographic Keys (ECC K1)

🔵 Planned

v0.14.0

Q2

Support for mDoc/mDL Credentials

🔵 Planned

v0.14.0

Q2

CBOR Credential Format Support

🔵 Planned

v0.14.0

Q3

SD-JWT Credential Support

🔵 Planned

v0.14.0

Q3

Same-Device Credential Sharing Flow

🔵 Planned

v0.15.0

Q3

OpenID4VCI Support for credential offer endpoint and pre-authorised code flow

🔵 Planned

v0.15.0

Q3

Credential Revocation

🔵 Planned

v0.15.0

Q4

Advanced Privacy with BBS+ Support

🔵 Planned

v0.16.0

Q4

One-Time-Use Credentials for Privacy

🔵 Planned

v0.16.0

Q4

Multi-User Family Credentials

🔵 Planned

v1.0

Q4

Support for JWT Credentials

🔵 Planned

v1.0

Q4

Support for Advanced Cryptographic Keys (ECC R1)

🔵 Planned

v1.0

Q1

Support for ECC K1 & R1

🔵 Planned

Q1

Discovery and Metadata

  • did.json, openid verification to be created during issuer creation

🔵 Planned

Q1

Credential Revocation Mechanism

🔵 Planned

Q1

Credential Formats Support for

  1. SD JWT

  2. mDoc

🔵 Planned

Q1

Pre-authorized Code Flow

🔵 Planned

Q2

Presentation during issuance of Credential

🔵 Planned

Q2

Issuer initiated Credential Issuance

🔵 Planned

Q2

Anon Credential

🔵 Planned

Q3

VC Generation: Create Credentials from the Request Payload

🔵 Planned

Q3

Multi-issuers: Onboarding of multiple issuers

🔵 Planned

Q3

Subject Holder relationship for VC

🔵 Planned

Q3

Allow bulk generation of onetime credentials

🔵 Planned

Q4

Deferred Credential Endpoint

🔵 Planned

Q4

Multi-User Credentials

🔵 Planned

Q4

Issue a physical credential (PDF / Printable)

🔵 Planned

Q1

Inji Verify SDK

🟠 In-progress

v0.12.0

Q1

OpenIDVP: Same Device Flow (QR code based Verifiable Presentation), Multiple credential requests during the presentation

🔵 Planned

v0.12.0

Q1

Support for Country QR code - CWT Format

🟠 In-progress

Q1

Verify mDoc and mDL Credentials

🔵 Planned

Q1

Credentials Revocation

🔵 Planned

Q2

Templatizing post-VC verification on Inji Verify (SVG Rendering)

🔵 Planned

Q2

Support Server Side VC Verification: ECC- K1 and R1

🔵 Planned

Q2

Support for verification of W3C VC, SD JWT

🔵 Planned

Q2

Verify document (pdf) with multiple QR Codes

🔵 Planned

Q3

Support for multi proof: Single credential should support multiple proofs

(both embedded and linked)

🔵 Planned

Q3

GA Release:

  1. Support multiple issuers

  2. Support common crypto algorithms

  3. Support various QR codes, VPs

  4. Data Model 1.1, 2.0 VCs

  5. Scalability

  6. Bug Fixes

  7. Performance Testing - 1 mill/day

  8. Security Testing

  9. Test Coverage>80%

  10. Sonar Coverage

🔵 Planned

v1.0

Q3

Credential Correction

🔵 Planned

Q4

Offline Verification SDK

🔵 Planned

Q4

BLE based verifiable presentation

🔵 Planned

Telemetry

Note: The publication of this project is currently a work in progress and has not been released yet. Stay tuned for further announcements.

Tuvali

This is the module that supports transferring verifiable credentials (VC) over Bluetooth Low Energy (BLE).

Let's have a look at how BLE communication works in general between the two devices A & B.

Repository:

Installation:

Usage as a Kotlin library (for native android)

  1. In build.gradle.kts add the following:

    dependencies {
        implementation("io.mosip:tuvali:0.5.0-SNAPSHOT")
    }

The kotlin library has been added to your project.

Usage as a Swift library (for native ios)

  1. Download swift artifact (ios-tuvali-library) from the repository.

  2. Open your project in XCode.

  3. Goto File > Add Package Dependencies.

  4. Select Add Local option.

  5. Add the artifact folder.

The swift library has been added to your project.

Before we understand how Tuvali works, let's go through BLE communication.

How does BLE Communication work?

In BLE communication, one device is designated as Peripheral and another one designated as Central.

Peripheral can perform advertisement which can be read by a Central device and connected to it, if the advertisement is connectable.

Once the connection is made, Central can perform further actions on the device like

  • discovering services and characteristics

  • subscribing to notifications on characteristics

  • write/ read data from characteristics

  • disconnect from device

While peripheral can perform actions like

  • sending notifications to subscribed characteristics

  • respond to read requests from Central

The above diagram explains the sequence of actions for BLE communication in general.

  1. Advertisement from Peripheral

  2. Connection establishment & additional data exchange

  3. Service & Characteristic discovery from Central

  4. The characteristic subscription on Peripheral

  5. Write with response to characteristic

  6. Write without response to the characteristic

  7. Send Notification from GATT Server

  8. Disconnection from GATT Server/ Client

More details about other BLE terminology used here can be found in standard BLE specifications of 4.2 and above.

How Tuvali works with BLE to transfer VC from Central to Peripheral

Note: Tuvali is supposed to implement OpenID for VP over BLE specification. As part of it, both VP request and response transfer should be implemented. However the current version of Tuvali only transfers VC from Central to Peripheral.

In the case of Tuvali, the entire VC transfer flow can be divided into the following stages

  1. Connection Setup & Cryptographic key exchange

  2. Data transfer

  3. Connection Closure

1. Connection Setup & Cryptographic key exchange

Steps 1 to 6 mentioned in the above diagram explain how the first stage is achieved. Before even the advertisement is started, the peripheral generates a 32-byte public key. This public key is sent to Central in two parts. The first part will have 5 bytes of the public key sent as part of the advertisement payload and while the second part is sent as part of SCAN_RESP.

Since the advertisement from Peripheral is of connectable type, Central would send out a SCAN_REQ on receiving the advertisement and gets the remaining 27 bytes of the peripheral public key. Post that, Central would derive a public key pair and send its 32 bytes public key on Identify characteristic of Peripheral.

Once the public keys are exchanged between Central and Peripheral, a set of keys are derived on both sides which would be used for encryption and decryption of data on the wire.

Cryptographic Algorithm usage:

  • Ephemeral Key Pair is generated from X25519 curve

  • Key Agreement uses ECKA-DH (Elliptic Curve Key Agreement Algorithm – Diffie-Hellman) as defined in BSI TR-03111

  • Wallet and Verifier derives respective keys using HKDF as defined in RFC5869

  • Encryption/Decryption uses AES-256-GCM (192) (GCM: Galois Counter Mode) as defined in NIST SP 800-38D

2. Data transfer

Steps 7 to 11 mentioned in the above diagram explain how the second stage is achieved. Before VC is transferred, Central performs encryption and compression and communicates the resultant data size by writing to Response Size characteristic to Peripheral. The actual data transfer would happen on Submit Response characteristic.

Since the maximum allowed write value for a characteristic is limited to 512 bytes. The actual VC data is split by a component called Chunker into multiple smaller chunks. After the split, the data is transferred on the Submit responsecharacteristics one after another until all chunks are completely sent.

Peripheral on the other hand, receives data on the Submit response characteristic. The received chunks are collected and the final VC is assembled by a component called Assembler.

At the end of sending one frame of data from Central. It would request a transfer report via Transfer report request characteristic. Peripheral response with a summary of missing/corrupted chunks sequence numbers via another Transfer report summary characteristic.

Central would read the Transfer report summary to understand if the Peripheral received all the chunks properly. If the summary report has at least one chunk sequence number. Central would send those specific chunks to the Peripheral which is called the Failure frame.

The failure frame will be sent from Central repeatedly until the Transfer report summary is successful. If during the process, Central reached the maximum allowed failure frame retry limit, the transfer is halted, devices will be disconnected and an error is generated (Please refer to API documentation on how this error can be read).

  • Gzip is the Compression algorithm used with default compression level

  • Each chunk have 2 bytes of CRC-16/Kermit added. Parameters for the same are: width=16 poly=0x1021 init=0x0000 refin=true refout=true xorout=0x0000 check=0x2189 residue=0x0000 name="CRC-16/KERMIT"

3. Connection closure

Disconnect initiated by Peripheral:

  • On a successful data transfer

  • On non-recoverable error occurred on Peripheral

Peripheral notify Central to perform disconnection via Disconnect characteristic mentioned in Step 12 of the above diagram.

Disconnect initiated by Central

Central also performs disconnect in the following scenarios:

  • On a successful data transfer

  • Non-recoverable error on Central

  • Peripheral is out of range/ disconnected

  • Destroy Connection API

As part of connection closure, both central and peripheral clean the held resources, cryptographic keys, and Bluetooth resources, to ensure that the subsequent transfer happens smoothly.

Note: All the cryptographic keys generated/ derived are used only for a single VC transfer session. The library strictly ensures they are not re-used in subsequent VC transfers post connection closure.

Error Codes And Error Scenarios:

Error Code Format: <Component(2 Character)Role(1 Character)>-<Stage(3 Character)>-<Number(3 Character)>

Current Supported Stages: CON(Connection) | KEX(Key Exchange) | ENC(Encryption) | TRA(Transfer) | REP(Report) | DEC(Decryption) | UNK (Stage is unknown) Current Component+ Role Combinations: TVW(Tuvali+Wallet) | TVV(Tuvali+Verifier) | TUV(Tuvali where role is unknown)

List of Supported Error Codes:

  • UnknownException: TUV_UNK_001

  • WalletUnknownException: TVW_UNK_001

  • CentralStateHandlerException: TVW_UNK_002

  • WalletTransferHandlerException: TVW_UNK_003

  • VerifierUnknownException: TVV_UNK_001

  • PeripheralStateHandlerException: TVV_UNK_002

  • VerifierTransferHandlerException: TVV_UNK_003

  • InvalidURIException: TVW_CON_001

  • MTUNegotiationException: TVW_CON_002

  • ServiceNotFoundException: TVW_CON_003

  • TransferFailedException: TVW_REP_001

  • UnsupportedMTUSizeException: TVV_CON_001

  • CorruptedChunkReceivedException: TVV_TRA_001

  • TooManyFailureChunksException: TVV_TRA_002

Error Scenario 1: The verifier receives a Failed to transfer message and wallet receive a Disconnected message on the screen.

Possible error scenarios:

  • During VC transfer, if there is a failure in the transfer of more than 70% of the data we get an exception on the verifier side and it disconnects from the wallet.

  • After the verifier and wallet establish a connection, the wallet initiates an MTU negotiation with the verifier. If the negotiated MTU is less than 64 Bytes, then the verifier throws an exception and disconnects from the wallet.

  • If the verifier receives the size of the VC as 0, it raises an exception and disconnects from the wallet.

Error Scenario 2: The wallet receives a Failed to transfer message and the verifier receives a Disconnected message on the screen.

Possible error scenarios:

  • After the verifier and wallet establish a connection, the wallet initiates an MTU negotiation with the verifier. If the wallet is unable to negotiate the MTU with the verifier, it raises an exception and disconnects from the verifier.

  • During VC transfer, if the transfer cannot be completed within the specified limit of retries, the wallet raises an exception and disconnects from the verifier.

  • After the wallet sends all the chunks, it requests a transfer report. If the wallet is not able to send the request, it raises an exception and disconnects from the verifier.

Below are the exception message and the disconnect message which appears on the screen during the error.

This message is displayed on the device throwing the exception.

This message is displayed whenever a device gets disconnected.

Retry scenarios

  • Backoff Strategy: Exponential Backoff is a technique that retries a failing operation, with an exponentially increasing wait time, up to a maximum retry count(MAX_RETRY_LIMIT) or maximum backoff time(MAX_ELAPSE_TIME).

    Initially, it starts with 2 ms as wait time (INITIAL_WAIT_TIME) and increases exponentially with each failure until the count reaches MAX_EXPONENT after which the wait time becomes constant (INITIAL_WAIT_TIME ^ MAX_EXPONENT).

    • BLE Service Discovery: After the connection is established, the central attempts to discover all the services hosted by the peripheral. If it fails to discover our service, then the exponential backoff-based retry will kick in. Here are the values:

      • MAX_RETRY_LIMIT is 5 for Android and 10 for IOS

      • MAX_ELAPSE_TIME is 100 ms

      • MAX_EXPONENT is 5

    • Request Transfer Report [only for iOS]: After the wallet writes all the chunks to the verifier, it requests the transfer report. If the transfer report request write fails, then the exponential backoff-based retry will kick in. Here are the values:

      • MAX_RETRY_LIMIT is 5

      • MAX_ELAPSE_TIME is 100 ms

      • MAX_EXPONENT is 5

  • Dynamic MTU negotiation:

    • Android: After the connection is established, the wallet initiates an MTU negotiation with an initial value of 512 bytes. If it fails, it retries with 185 and 100 bytes subsequently with a wait time of 500 ms each. If the negotiation fails after all retries, it throws an exception and disconnects from the wallet.

    • iOS: iOS kicks off an MTU exchange automatically upon connection

Constants

  • MAX_ALLOWED_DATA_LEN (509 Bytes): Maximum data length allowed for one write for both wallet and verifier.

  • MIN_MTU_REQUIRED (64 Bytes): Minimum number of bytes required to share public key transfer of the wallet is 46. In order not to operate in edges, we chose the nearest value in the power of 2 i.e., 64.

  • MAX_FAILURE_FRAME_RETRY_LIMIT (15): Maximum limit to retry sending failure chunks to the verifier.

Characteristics UUID

  • IDENTIFY_REQUEST_CHAR_UUID (00000006-5026-444A-9E0E-D6F2450F3A77): Characteristic for sending the public key of the wallet.

  • REQUEST_SIZE_CHAR_UUID (00000004-5026-444A-9E0E-D6F2450F3A77): Characteristic for requesting VC size by wallet from verifier.

  • REQUEST_CHAR_UUID (00000005-5026-444A-9E0E-D6F2450F3A77): Characteristic for requesting the VC by the verifier.

  • RESPONSE_SIZE_CHAR_UUID (00000007-5026-444A-9E0E-D6F2450F3A77): Characteristic for sending VC size to the verifier.

  • SUBMIT_RESPONSE_CHAR_UUID (00000008-5026-444A-9E0E-D6F2450F3A77): Characteristic for sending the entire VC.

  • TRANSFER_REPORT_REQUEST_CHAR_UUID (00000009-5026-444A-9E0E-D6F2450F3A77): Characteristic for requesting for transfer report from the verifier.

  • TRANSFER_REPORT_RESPONSE_CHAR_UUID (0000000A-5026-444A-9E0E-D6F2450F3A77): Characteristic for sending transfer report to the wallet

  • VERIFICATION_STATUS_CHAR_UUID (00002037-0000-1000-8000-00805f9b34fb): Characteristic for informing the wallet if the VC is accepted or rejected.

  • DISCONNECT_CHAR_UUID (0000000B-5026-444A-9E0E-D6F2450F3A77): Characteristic for notifying the wallet to initiate the disconnection between the devices.

Service UUID

  • SERVICE_UUID (00000001-0000-1000-8000-00805f9b34fb): Service UUID of the verifier

  • SCAN_RESPONSE_SERVICE_UUID (00000002-0000-1000-8000-00805f9b34fb): Service UUID for uniquely identifying the scan response data to the wallet's SCAN_REQ

BLE Verifier

  • This is the module built for verifiers to receive VC via BLE. This is a wrapper built on Tuvali with simplified APIs.

Repository

Installation

  • Add a dependency in package.json

  • Publishing npm module is WIP. Once it's published, it can be integrated as any other npm module.

API Specification

The following APIs are exposed to instantiate, start the transfer and stop the transfer

Constructor for initialization

  • This API initializes the BLE module using the provided configuration. This initialization process allows for the sharing of configuration information for advertisement purposes. A new instance is created with each initialization.

  • It is recommended to use one instance per session and to initialize a new instance for each subsequent session.

  • The configuration passed to the constructor includes a parameter called deviceName. This name is included in the advertisement payload during the BLE advertisement. It is important to note that this field has a character limit of 11 characters.

Signature

    constructor(configOptions: ConfigOptions) {
      Initialise verifier service with provided configuration
    }
    ConfigOptions {
      deviceName: string;
    }

Parameters

Name

Description

ConfigOptions

configOptions

device name used during advertisement

deviceName is the parameter

API to start transfer

  • This API starts with advertisement for establishing the connection

  • Internally interacts with Tuvali to start advertisement

  • Update state to Advertising

  • Once the secure connection is established, navigate through to state to complete the transfer

Signature

   startTransfer() {
    Start Advertisement
    Interact with tuvali to start advertisement
    update state to Advertising
   }

API to stop transfer

  • This API has to be called explicitly to stop the connection

  • Connection can be stopped either after successful transfer or user wants to cancel the transfer

  • Once the connection is disconnected, state is updated to Idle

Signature

stopTransfer() {
 disconnect the connection
 update state to Idle
}

Types of states supported

  • Idle

  • Advertising

  • Connected

  • Secure Connection Established

  • Requested

  • Received

  • Error

  • Disconnected

Transitions between states is shown below:

Note: If either the sender or receiver decides to cancel the transfer at any stage, the state will transition to Disconnected and become Idle as a result.

Inji Wallet integration workflow with BLE Verifier SDK and Face Match SDK

eSignet

The eSignet service is utilized by Inji Wallet for online login. Users have the ability to log in to any service provider portal that is integrated with eSignet.

Online login

QR code scanning and login to the service provider portal

The user is required to open the portal integrated with eSignet and utilize the app scanner to scan the QR code.

After successfully scanning the QR code, Inji Wallet will access the API below and transmit the link code.

Link Transaction endpoint V2

After successfully completing the offline face authentication and selecting the required and optional information, the two specified APIs are invoked.

Linked Authentication Endpoint V2

Linked Consent Endpoint V2

Mimoto

Mimoto is a BFF(Backend for Frontend) for Inji Wallet. It's being used to get default configuration, download verifiable credentials (VC) and activate VC. It provides all necessary APIs to the Inji Wallet and acts as a proxy for resident services. Mimoto gets the request from Inji Wallet, performs all the validations and forwards it to respective services. Additionally, it subscribes to the web-sub event to be able to download the VC once it's ready.

Support for downloading VC from multiple Issuers

Download via eSignet

Inji Wallet allows the users to download VC by redirecting the user to eSignet UI. Multiple APIs are being called to complete the process in the backend.

Activate credentials

Credentials have to be activated in order to use them for online login. When a user selects Activate option, an OTP is sent to the user and credentials are activated.

  • To send an OTP to a user, the below API is called.

  • After successful OTP validation, a keypair is generated in the phone and the public key is synced with server. The mimoto receives a certificate and create thumbprint which it stores in the keystore securely. This is called as the activation process.

Configuration

The implementers can choose to use the existing configurations or add new configurations to them.

Issuers Listing

The user is currently on the + button on the Home screen, which will open Add new card screen, where all the issuers are displayed Below issuers list API gives out all the issuers list

To get complete configuration of the specific issuer, below api is called.

Backend Services

This section contains the guides and information that could benefit the developers, system integrators, relying parties and the end users.

For more information on backend systems, read through:

Face SDK Specifications

Introduction

This is a draft specification that is used to implement the face match in the Inji Wallet or any similar wallets.

Configure API

This API is asynchronous and can be used for initializing the implementer's SDK. During initialization, the implementers can use this API to build logic to validate the license, download the latest model file if needed, or inform the server about its usage. This API is expected to return errors when there is a critical issue with the initialization process. If the API is called more than once, then the SDK can optionally return based on the current status. The implementation of this API should support offline mode. In offline mode, the implementor should ensure smooth usage. Care should be taken by the implementor to ensure the SDK is lightweight and does not slow down the app.

  • The implementation of this API should immediately return if initialization has already been completed.

  • The implementation should not attempt to initialize multiple times unless it's necessary.

  • The implementation should work in offline mode.

  • The implementation should support auto-downloading the latest models or any other configuration/artefacts necessary.

  • To enhance logging and traceability, the implementer should accept a parameter known as traceabilityId, which helps to trace the logs on the server.

Signature

  async function configure(config: any): Promise<boolean> {
  if (already initialised & successful) {
   return true;
  }
 Initialise....
 if (successfully initialised) {
   return true;
 }
 return false;
 }

Name

Description

Type

config

Configuration with model file and matcher threshold

Any object

Inji Wallet would initialize the config as a JSON. The JSON would contain the following items

Attribute Name

Description

traceabilityId

Traceability id is used to trace the telemetry data

io.inji.sdk.*

Any configuration that starts with io.inji.sdk would be sent in the config map.

Standard Return Codes (true or false)

Response

Status

true

Success

false

Error

Face Compare API

An asynchronous API that compares two images, allowing for different image formats such as PNG, JPG, HEIC or Template. Upon completion returns a boolean value. The API has an expected timeout and it is expected that the implementors clear the memory and processing upon timeout.

  • To enhance logging and traceability, the implementors should send telemetry using traceabilityId. The id is set during the configure API call, It is expected that the same is used here. In Inji Wallet, AppId is used as traceabilityId.

  • Timeout is set in seconds.

Signature

 async function faceCompare(timeout: int ,capturedImage: string, vcImage: string): Promise<boolean> {
 logic to compare capturedImage & vcImage.....
 setTimeout(cancel);
//logic to match
 if (matched) {
   return true;
 }
   return false;
 }

Parameters

Name

Description

Type

timeout

Timeout in seconds. After this time the SDK should stop processing.

integer

capturedImage

The image that is captured by the camera

vcImage

The image that is given in the VC

Standard Return Codes (match or no match)

Response

Status

true

Matched

false

Not Matched

false

Error

Guidelines

The following guidelines apply to individuals who are developing the face SDK:

  • It is prohibited to collect any personally identifiable information (PII) or phone details.

  • Inji Wallet includes built-in telemetry, and all telemetry data must be transmitted to the designated system. Telemetry enhances Inji Wallet's observability features by capturing specific events, creating measures, and monitoring various user actions and events.

  • Recording or transmitting IP addresses, user details, Phone IMEI, phone numbers, or user photos in telemetry or logs is strictly prohibited

  • The use of device fingerprints should be limited to managing the SDK license.

OpenID4VP

OpenID4VP - Online Sharing

Library Functionalities: Processing the Request from Decoding to Verifier Response

  1. Receives the Verifier's Authorization Request sent by the consumer application (mobile wallet).

  2. Authenticates the Verifier using the received client_id and validates the whole Request to check if the required details are present or not and then returns the Authorization Request to the consumer application if all the validations are successful.

  3. Receives the list of Verifiable Credentials from the consumer application which are selected by the consumer application end-user based on the credentials requested as part of Verifier Authorization request.

  4. Constructs the vp_token without proof section and sends it back to the consumer application for generating Json Web Signature (JWS).

  5. Receives the generated signature along with the other details and generates vp_token with proof section & presentation_submission.

  6. Sends a POST request with generated vp_token and presentation_submission to the received Verifier's response_uri endpoint.

  7. Below sections details on the steps for integrating the Kotlin and Swift packages into the app. Below sections details on the steps for integrating the Kotlin and Swift packages into the app.

Supported features

Feature
Supported values

Device flow

cross device flow

Client id scheme

pre-registered, redirect_uri, did

Signed authorization request verification algorithms

ed25519

Obtaining authorization request

Obtaining presentation definition in authorization request

By value, By reference (via presentation_definition_uri)

Authorization Response mode

direct_post

Authorization Response type

vp_token

Supported Verifiable Presentations for Online sharing

Credential format: ldp_vc

Android: Kotlin package for OpenID4VP:

Repository

Installation

Note: implementation "io.mosip:inji-openID4VP:0.1.0-SNAPSHOT"

Create instance of OpenID4VP library to invoke its methods

val openID4VP = OpenID4VP("test-OpenID4VP")

APIs

Below are the APIs provided by this library:

1. authenticateVerifier

  • Receives a list of trusted verifiers & Verifier's encoded Authorization request from consumer app(mobile wallet).

  • Decodes and parse the request, extracts the clientId and verifies it against trusted verifier's list clientId.

  • Returns the Authentication response which contains validated Presentation Definition of the Authorization request.

 val authenticationResponse = openID4VP.authenticateVerifier(urlEncodedAuthorizationRequest: String, trustedVerifierJSON: List<Verifier>)

Parameters

Name
Type
Description
Sample

urlEncodedAuthorizationRequest

String

URL encoded query parameter string containing the Verifier's authorization request

"openid4vp://authorize?response_type=vp\_token &client_id=https%3A%2F%2Fclient.example.org%2Fcb.."

trustedVerifiers

List

A list of trusted Verifier objects each containing a clientId and a responseUri list

listOf(Verifier("https://verify.env1.net",listOf("https://verify.env1.net/responseUri"))

Exceptions

  1. DecodingException is thrown when there is an issue while decoding the Authorization Request

  2. InvalidQueryParams exception is thrown if

    • query params are not present in the Request

    • there is an issue while extracting the params

    • both presentation_definition and presentation_definition_uri are present in Request

    • both presentation_definition and presentation_definition_uri are not present in Request

  3. MissingInput exception is thrown if any of required params are not present in Request

  4. InvalidInput exception is thrown if any of required params value is empty or null

  5. InvalidVerifier exception is thrown if the received request client_id & response_uri are not matching with any of the trusted verifiers

  6. JWTVerification exception is thrown if there is any error in extracting public key, kid or signature verification failure.

This method will also notify the Verifier about the error by sending it to the response_uri endpoint over http post request. If response_uri is invalid and validation failed then Verifier won't be able to know about it.

2. constructVerifiablePresentation

  • Receives a map of input_descriptor id & list of verifiable credentials for each input_descriptor that are selected by the end-user.

  • Creates a vp_token without proof using received input_descriptor IDs and verifiable credentials, then returns its string representation to consumer app(mobile wallet) for signing it.

    val vpTokenWithoutProof = openID4VP.constructVerifiablePresentation(verifiableCredentials: Map<String, List<String>>)

Parameters

Name
Type
Description
Sample

verifiableCredentials

Map<String, List>

A Map which contains input descriptor id as key and corresponding matching Verifiable Credentials list as value.

mapOf("id_123" to listOf("vc1","vc2"))

Exceptions

  1. JsonEncodingFailed exception is thrown if there is any issue while serializing the vp_token without proof.

This method will also notify the Verifier about the error by sending it to the response_uri endpoint over HTTP post request. If response_uri is invalid and validation failed then Verifier won't be able to know about it.

3. shareVerifiablePresentation

  • This function constructs a vp_token with proof using received VPResponseMetadata, then sends it and the presentation_submission to the Verifier via a HTTP POST request.

  • Returns the response back to the consumer app(mobile app) saying whether it has received the shared Verifiable Credentials or not.

    val response = openID4VP.shareVerifiablePresentation(vpResponseMetadata: VPResponseMetadata)

Parameters

Name
Type
Description
Sample

vpResponseMetadata

VPResponseMetadata

This contains domain & proof details such as jws, signatureAlgorithm, publicKey, domain

VPResponseMetadata(jws = "eyJiweyrtwegrfwwaBKCGSwxjpa5suaMtgnQ",signatureAlgorithm = "RsaSignature2018",publicKey = "publicKey",domain = "https://domain.net")")

Exceptions

  1. JsonEncodingFailed exception is thrown if there is any issue while serializing the generating vp_token or presentation_submission class instances.

  2. InterruptedIOException is thrown if the connection is timed out when network call is made.

  3. NetworkRequestFailed exception is thrown when there is any other exception occurred when sending the response over http post request.

This method will also notify the Verifier about the error by sending it to the response_uri endpoint over http post request. If response_uri is invalid and validation failed then Verifier won't be able to know about it.

4. sendErrorToVerifier

  • Receives an exception and sends its message to the Verifier via an HTTP POST request.

 openID4VP.sendErrorToVerifier(exception: Exception)

Parameters

Name
Type
Description
Sample

exception

Exception

This contains the exception object

new Exception("exception message")

Exceptions

  1. InterruptedIOException is thrown if the connection is timed out when network call is made.

  2. NetworkRequestFailed exception is thrown when there is any other exception occurred when sending the response over http post request.

iOS: Swift package for OpenID4VP:

Repository

Installation

  1. Clone the repo.

  2. In your swift application go to file > add package dependency > add the https://github.com/mosip/inji-openid4vp-ios-swift in git search bar > add package.

  3. Import the library and use.

Create instance of OpenID4VP library to invoke its methods

let openID4VP = OpenID4VP(traceabilityId: "AXESWSAW123", networkManager: NetworkManager)

APIs

1. authenticateVerifier

  • Receives a list of trusted verifiers & Verifier's encoded Authorization request from consumer app(mobile wallet).

  • Takes an optional boolean to toggle the client validation.

  • Decodes and parse the request, extracts the clientId and verifies it against trusted verifier's list clientId.

  • Returns the validated Authorization request object

    let response = try authenticateVerifier(urlEncodedAuthorizationRequest: String, trustedVerifierJSON: [Verifier])

Parameters

Name
Type
Description
Sample

urlEncodedAuthorizationRequest

String

URL Encoded authorization request.

"openid4vp://authorize?response_type=vp\_token &client_id=https%3A%2F%2Fclient.example.org%2Fcb.."

trustedVerifierJSON

[Verifier]

Array of verifiers to verify the client id of the verifier.

Verifier(clientId: String, responseUris: [String])

shouldValidateClient

Bool?

Optional Boolean to toggle client validation for pre-registered client id scheme

true

Exceptions

  1. DecodingException is thrown when there is an issue while decoding the Authorization Request

  2. InvalidQueryParams exception is thrown if

    • query params are not present in the Request

    • there is an issue while extracting the params

    • both presentation_definition and presentation_definition_uri are present in Request

    • both presentation_definition and presentation_definition_uri are not present in Request

  3. MissingInput exception is thrown if any of required params are not present in Request

  4. InvalidInput exception is thrown if any of required params value is empty

  5. InvalidVerifier exception is thrown if the received request client_id & response_uri are not matching with any of the trusted verifiers

  6. JWTVerification exception is thrown if there is any error in extracting public key, kid or signature verification failure.

This method will also notify the Verifier about the error by sending it to the response_uri endpoint over http post request. If response_uri is invalid and validation failed then Verifier won't be able to know about it.

2. constructVerifiablePresentation

  • Receives a dictionary of input_descriptor id & list of verifiable credentials for each input_descriptor that are selected by the end-user.

  • Creates a vp_token without proof using received input_descriptor IDs and verifiable credentials, then returns its string representation to consumer app(mobile wallet) for signing it.

    let response = try openID4VP.constructVerifiablePresentation(credentialsMap: [String: [String]])

Parameters

Name
Type
Description
Sample

credentialsMap

[String: [String]]

Contains the input descriptor id as key and corresponding matching Verifiable Credentials as array of string.

["bank_input":["VC1","VC2"]]

Exceptions

  1. JsonEncodingFailed exception is thrown if there is any issue while serializing the vp_token without proof.

This method will also notify the Verifier about the error by sending it to the response_uri endpoint over http post request. If response_uri is invalid and validation failed then Verifier won't be able to know about it.

3. shareVerifiablePresentation

  • This function constructs a vp_token with proof using received VPResponseMetadata, then sends it and the presentation_submission to the Verifier via a HTTP POST request.

  • Returns the response back to the consumer app(mobile app) saying whether it has received the shared Verifiable Credentials or not.

    let response = try await openID4VP.shareVerifiablePresentation(vpResponseMetadata: VPResponseMetadata)

Parameters

Name
Type
Description
Sample

vpResponseMetadata

VPResponseMetadata

Contains a VPResponseMetadata which has proof details such as jws, signatureAlgorithm, publicKey, domain

VPResponseMetadata(jws: "jws", signatureAlgorithm: "signatureAlgoType", publicKey: "publicKey", domain: "domain")

Exceptions

  1. JsonEncodingFailed exception is thrown if there is any issue while serializing the generating vp_token or presentation_submission class instances.

  2. InterruptedIOException is thrown if the connection is timed out when network call is made.

  3. NetworkRequestFailed exception is thrown when there is any other exception occurred when sending the response over http post request.

This method will also notify the Verifier about the error by sending it to the response_uri endpoint over http post request. If response_uri is invalid and validation failed then Verifier won't be able to know about it.

sendErrorToVerifier

  • Receives an exception and sends its message to the Verifier via an HTTP POST request.

 openID4VP.sendErrorToVerifier(error: Error)

Parameters

Name
Type
Description
Sample

error

Error

Contains the exception object

AuthorizationConsent.consentRejectedError(message: "User rejected the consent")

Exceptions

  1. InterruptedIOException is thrown if the connection is timed out when network call is made.

  2. NetworkRequestFailed exception is thrown when there is any other exception occurred when sending the response over http post request.

OpenID4VP library and Inji Wallet integration:

The below diagram shows the interactions between Inji Wallet, Verifier and OpenID4VP library.

Note: Currently, the vp_token uses the Ed25519Signature2020 type for digital signatures.

Locale customization

Steps to Support a new language

  • Under locales folder, localization of a particular language JSON file has to be added.

  • Language JSON has to be imported in i18n.ts and load the resources to i18next as follows. import fil from './locales/fil.json'; const resources = { en, fil, ar, hi, kn, ta };

  • To ensure the language needs to be included in the const SUPPORTED_LANGUAGES.

  • To use with react, must include the key with the 't' function

About libraries

  • Inji Wallet has the capability to support multiple languages.

  • react-i18next is a set of components, hooks, and plugins that sit on top of i18next, and is specifically designed for React.

  • expo-localization allows you to localize the app, customizing the experience for specific regions, and languages. It also provides access to the locale data on the native device.

Test

Inji Mobile is a versatile digital wallet designed to securely manage, store, and share trusted data as Verifiable Credentials (VCs) through a seamless and user-friendly interface. This mobile application offers several key functionalities aimed at enhancing the user experience, ensuring robust data security, and simplifying digital credential management.

Key features include:

Inji Wallet enables users to securely download their verifiable credentials (VCs) directly onto their mobile devices. As part of this process, verification occurs to ensure the authenticity and validity of the credentials. Once verified, the VCs are securely stored using the device’s hardware-based secure keystore, ensuring that the credentials are protected from unauthorized access.

Inji Wallet offers a robust data backup feature, allowing users to protect their verifiable credentials by securely backing them up in either Google Drive (for android) or iCloud (for iOS devices). This ensures that even in the event of a device loss or replacement, users can easily restore their credentials and continue using them without re-verifying their identity with issuers.

Inji Wallet supports Single Sign-On (SSO), simplifying the authentication process by allowing users to log in using their existing credentials from trusted identity providers. This eliminates the need to manage multiple credentials and provides a seamless experience when accessing or sharing verifiable credentials across platforms.

Inji Wallet offers a seamless way to share the trusted data as verifiable credentials without internet connection, but through BLE-based (Bluetooth Low Energy) sharing. For added security, users must complete decentralized face verification for presence assurance during offline interactions, ensuring the rightful owner is sharing their credentials.

Credential Providers

Inji Wallet currently provides support for following credential providers:

Download VC using OpenID for VC Issuance Flow

  • National ID

  • Insurance

To set up a new provider that can issue VC, it can be accomplished by making a few configuration changes.

Steps:

  1. The configuration details can be found in the mimoto-issuers-config.json property file. This file is maintained separately for each deployment environment. In this repository, each environment's configuration is stored in a dedicated branch specific to that environment.

These values will be used by Inji Wallet via Mimoto. Mimoto exposes APIs which is used by the Inji Wallet application to fetch, store the issuers and their configurations in the local storage.

  • API used to fetch issuers: https://api.collab.mosip.net/v1/mimoto/issuers

  1. In mimoto-issuers-config.json, new providers can be added as per the well-known schema defined by OpenID4VCI standards.

After adding the provider in configuration, it will be displayed on the UI on Add new card screen.

  1. At present, Inji Wallet supports verification of VCs which has RSA proof type. If VC is issued with any other proof type, VC verification is bypassed and it is marked as verified.

  2. Token endpoint should also use same issuer id. Refer https://github.com/mosip/inji-config/blob/collab/mimoto-issuers-config.json#L140

  3. Once the above steps are completed, mimoto should be onboarded as an OIDC client for every issuer. Please check the steps in the below sections.

Onboarding Mimoto as OIDC Client for a new Issuer:

Use mock data from collab sandbox env

If you are looking to try out wallet and certify building locally, then you can use collab env eSignet as authorization server. Here are the details:

  1. We have configured few UINs/Individual Ids to use. These UINs can be used while configuring the data for credential. (Few Demo UINs you can use):

  1. Use wallet-demo as client id in mimoto-issuers-config.json

  2. Use wallet-demo-client as client alias in mimoto-issuers-config.json

  3. authorization server to use in well-known is https://esignet-mock.collab.mosip.net

After configuring issuers and data as mentioned above, we will be able to successfully authenticate through esigent and download credential in wallet.

Create new client-id and onboard mimoto as OIDC client

Step 1:

Please find a zip file attached to this document called certgen.zip which will help the user in creating the p12 file as well as the public-key.jwk file.

Step 2:

The Userguide.md file explains the working of the script.

Step 3:

Create a client ID using the Esignet API which is mentioned below:

Sample Request Body:

Sample Response :

  1. Clients can get renewed by demand, but that mean some manual changes are required. It is always recommended to create a client once per environment as it has no expiry. Also note that one public key and p12 file pair can be used only once . ( Unless removed from DB )

  2. The install.sh script in mimoto as well as the helm charts inside mimoto repo were changed to allow for the storage and mounting of the oidckeystore.p12 file

Step 4:

The logo URL should be uploaded to file server.

For Onboarding any new issuer, Step 1 to 4 has to be followed and p12 has to be generated.

Step 5:

Once p12 file is generated, existing keystore file has to be exported from mimoto pod and newly created p12 file has to be imported and remounted in the Mimoto pod.

Step 6:

Once mimoto is added as an OIDC client, the new issuer should be added as a partner to mimoto.

Using MOSIP services to issue MOSIP Credential:

We already have a p12 file on the mimoto pod (as explained in above section), we are not replacing or creating a second p12 file, We are only adding another key to the key-store already present.

  1. Add this newly created partner into existing keystore - download the existing p12 file from the mimoto pod using this command from the environment's terminal:

  1. Add the esignet--partner's key as alias “esignet--partner“ onto the same p12 file using a tool like keystore-explorer. Use the password used while generating p12 file

  1. The below image shows how to browse and select the client-id’s oidckeystore as the second alias. in the decryption password field should have the password of the p12 file. Note: we have used esignet-sunbird-partner as client id for reference in the attachment

  1. The below image shows how to add an alias for the new key pair, here the value is esignet-sunbird-partner.

  1. To take a backup of the original keystore.p12 use the following command

  1. Delete the existing mimotooidc secret using the following command

  1. To create a new secret containing both the keypair.

  1. Create the required secrets in the cluster such as mimoto.oidc.mock.partner.clientid and use the client ID from the response of create oidc-client request.

  2. Make sure to add the the mimoto.oidc.mock.partner.clientid inside the config-server deployment yaml file

  3. Restart the Mimoto pod to take all the changes.

Customizations

Countries also have the option to customize Inji as per their requirements. Refer to the documents below for more information on the same.

The following customizations are available in Inji:

Inji Certify

Overview

The Inji Certify service is utilized by Inji Wallet for downloading the VC.

Download VC

The user is currently on the Add new card screen and chooses an issuer(For example, Republic of Veridonia National ID Department).

  • Inji Wallet utilizes the react-native-app-auth library for authorization flow.

    • It first redirects the user to the authorization server configured respective to the Issuer (For example, e-Signet).

    • The user performs authentication (For example, on the eSignet UI, the input the necessary information such as a unique ID and OTP (One-time Password)).

    • Post successful authentication, the user is redirected back to the Inji Wallet app with an authorization code.

    • Inji Wallet then exchanges the authorization code for an access token.

  • Using the access token, Inji Wallet makes a request to the credential endpoint from Inji Certify to download the credential.

VC Issuance endpoint

For credential request, refer credential_endpoint attribute in issuer's configuration response.

Read More

Configuration

Configuration for Inji Wallet

These values will be used by Inji Wallet via Mimoto. Mimoto loads all the configurations and exposes an API which is used by the Inji Wallet application to fetch and store the configurations in the local storage.

API used to fetch these configurations: https://api.collab.mosip.net/v1/mimoto/allProperties

The implementers can choose to use the existing configurations or add new configurations to them.

The properties used by Inji Wallet are:

  • mosip.inji.faceSdkModelUrl(https://${mosip.api.public.host}/inji): This is the path of the file server from where the face SDK model can be downloaded.

  • mosip.inji.modelDownloadMaxRetry(10): The maximum times the application will try to fetch the model.

  • mosip.inji.audience(ida-binding): This is used to generate the JWT token which will be passed during online login.

  • mosip.inji.issuer(residentapp): This is used to generate the JWT token which will be passed during online login.

  • mosip.inji.warningDomainName(https://${mosip.api.public.host}): This is the mimoto domain used to access all Apis.

  • mosip.inji.aboutInjiUrl(https://docs.inji.io/inji-wallet/inji-mobile): This is the url for Inji Wallet Mobile documentation used in About Inji Wallet page.

  • mosip.inji.minStorageRequiredForAuditEntry(2): This is threshold(minimum storage space required) in MB for storing audit entries.

  • mosip.inji.minStorageRequired(2): This is threshold(minimum storage space required) in MB for storing downloaded / received vc.

Workflow customization

Here is a list of state machines and their responsibilities. The developers can choose to use the existing state machine components and customize the workflow as per their needs.

app.ts

This is the root state machine for the application. On initialisation, it starts other state machines from:

  • store.ts

  • auth.ts

  • vcMetaMachine.ts

  • settings.ts

  • activityLog.ts

  • requestMachine.ts

  • scanMachine.ts

  • backup.ts

  • backupRestore.ts

store.ts

This state machine takes care of actions related to storing and retrieving data on the mobile phone. It exposes the wrapper to all the other state machines to work with data stored on the device.

It also performs the custom encryption and decryption required for saving and retrieving data from the underlying store.

As of now, the store state machine uses following two libraries which abstracts how the data is stored between iOS and Android:

auth.ts

This state machine helps to set up authentication for the application. It allows users to choose between biometric and passcode-based authentication on the first launch. It also updates the app state as authorized or unauthorized based on user action on first launch.

On first launch, once the user selects language preference, and goes through intro sliders, user has been asked to choose the unlock method.

After selecting the unlock method as passcode or biometric, the user is navigated to Home screen Once user is on home screen, app state is considered as authorized. Once a user logs out from settings, the state is considered as unauthorized.

vcItemMachine.ts

This state machine is spawned for every VC downloaded, and tracks its lifecycle. This contains all the activities/state related to VC like:

  • load VC

  • activate VC

  • activate/delete/pin/unpin VC

  • verifies the credentials

vcMetaMachine.ts

This state machine takes care of the all the meta information related to all VCs.

issuersMachine.ts

This state machine list of issuers in the user interface, as well as downloads and caches the issuer's configuration. It also performs the following actions:

  • download credential

  • verify the verifiable credential

  • store the verifiable credential

backup.ts

This state machine performs all action related to backing up of the verifiable credentials on google drive or iCloud.

backupRestore.ts

This state machine performs all action related to restoring and verifying the backed up verifiable credentials from google drive or iCloud.

settings.ts

This state machine helps to show contents and interactions on the settings screen of the application. This facilitates options like language switch, enable/disable biometric unlock etc.

activityLog

This state machine helps to view the audit log of the different activities on the application and shows it on a separate screen. Some of the activities that are shown are VC download, VC receive, VC sent events etc.

requestMachine.ts

scanMachine.ts

QrLoginMachine.ts

This state machine facilitates flow for Login with QR code through Open ID connect from various portals. This is launched when the user opens up the scanner and scans a QR code from a website that supports login with Inji Wallet. Once the scan is performed, the user can review the required claims and select voluntary claims to be submitted. Once the submission is done successfully, the portal will be able to redirect automatically and logs the user in.

pinInput.ts

This is a utility state machine which is used to facilitate PIN/OTP login wherever required in the application.

faceSanner.ts

This is a state machine which facilitates the interactions to face scanning. It is used to support face authentication in Login with a QR code, sharing with selfies flow.

biometrics.ts

This state machine facilitates toggling biometric unlock on/off settings screen. This also allows setting up and using biometric unlock for the application.

UI customization

CSS Themes

Currently, Inji Wallet supports two themes:

  • default gradient

  • purple

We can customize the application by adding a new file under components/ui/themes and import that file in components/ui/styleUtils.ts and assign that to Theme variable in it. Default Gradient theme is referred as DefaultTheme.

App Logo and Background Images

To change app logo on homescreen

Profile logo is part of downloaded verifiable credential. If credential doesn't face/photo attribute, default profile icon is being used.

To change the profile logo, In ProfileIcon.tsx, refer

Card background is driven by wellknown exposed by issuing authoriy. If background details are not exposed, default background is being used. To change card background on home screen if not provided by issuer:

To change background on card details screen if not provided by issuer

To change the top header icons:

In HomeScreenLayout.tsx, refer

Colours

To change the text, colour and logo for Tabs:

In main.ts, there are 4 tab screens variables

image can be changed by icon attribute, text and styles can be changed by options attribute in MainLayout.tsx while rendering Navigator

Card content text color is driven by wellknown exposed by issuing authoriy. If text color is not exposed, default color is being used. To change default Label text color if not provided by issuer:

To change default Label value color if not provided by issuer:

To change the colour of + icon colour:

In HomeScreen.tsx, refer DownloadFABIcon component

To change the colours of Label in Settings:

To change the background and label colour for version section:

To change colour on add new card page:

VC Card Customization:

  • Text colour

  • Background colour

  • Logo change

&

This module is derived from the module. It is responsible for generating events that can provide valuable analytics.

presents the kotlin library for tuvali

to get details on swift artifact.

contains the artefacts in maven.

Detailed API documentation of Mimoto is available .

To get a list of issuers, API is called. For retrieving the credential types and display properties, .well-known location is referred for every issuer from the

Inji Wallet initiates authenticate API by redirecting users to eSignet UI. On eSignet UI, user is given option to enter the unique ID, the user is asked to enter an OTP on the next screen. In the backend, token API is called to get a token. Refer for more details.

After getting a token response, Inji Wallet initiates a download request. Refer

The configurable properties for mimoto can be found at . This property file is maintained as one for each deployment environment. On repository, each environment configuration is placed in a corresponding branch specific to that environment.

Refer to of Collab environment.

To ensure fraud prevention in compliance with , the faceAuth verification should include passive liveness checks, such as picture-in-picture.

format: data:image/ base64 encoded image eg: data:image/jpeg

format: data:image/ base64 encoded image eg: data:image/jpeg

This library enables consumer applications (mobile wallet) to share users Verifiable Credentials with Verifiers who request them online. It adheres to the OpenID4VP draft version 21, which outlines the standards for requesting and presenting Verifiable Credentials.

By value, By reference ( via request_uri method) [Note: Authorization request by value is not supported for the did client ID scheme, as it requires a signed request. Instead, a Request URI should be used to fetch the signed authorization request ()]

inji-openid4vp kotlin repo -

Snapshot builds are available .

inji-openid4vp-ios-swift swift repo ->

i18next is an internationalization framework. It provides the standard i18n features such as , , , and . It provides a complete solution to localize products from the web to mobile and desktop.

Refer to of Collab environment.

If new provider supports protocol, it is recommended to use issuerMachine.ts for workflow to download VC.

Type
UIN

oidckeystore.p12 file is attached password to unlock this is xy4gh6swa2i

Create a partner - following is the process of adding a new partner by the name of “esignet--partner “ onto mimoto. Refer to create a partner and onboard the partner in MOSIP Ecosystem.

The configurable properties for Inji Wallet can be found at . This property file is maintained as one for each deployment environment. On repository, each environment configuration is placed in a corresponding branch specific to that environment.

Refer to of Collab environment.

Workflow in Inji Wallet is achieved by finite-state machine components. State machines are written using a library called . All the state machines are available in the machines folder of the Inji Wallet codebase. There are few machines under the screens folder but these are too specific to those features.

- stores all the meta information and references of the encrypted VC.

- stores the encrypted VC as a separate file,

This state machine is instantiated when the user launches the verification section which displays the QR code. This QR is generated with content from a low-level . The content of the QR code is scanned by a wallet Inji Wallet application to establish connection with verifier and share the VC credential. Once the VC is received on the Verifier side, the state machine allows seeing the received VC details as well for Verification.

This state machine is instantiated when the user launches the scanner section which opens up the camera to scan the QR code presented by the Verifier. The scanned data is fed into the underlying to allow the discovery of the Verifier device and establish a connection to it. Once the connection is established, the user is allowed to select the downloaded VCs that can be shared with Verifier. The state machine also allows selfie/face verification before sharing VC.

The VC can be dynamically rendered with all the fields, and if the display properties provided in the, Inji Wallet downloads the .well-known and applies the below properties on the VC template to modify the VC render.

Cross-device-flow_Enhancements
mDoc/mDL_Wallet-Support
SIOP
ECC_Key_Support
WalletRendering
svgTemplate
SD_JWT
Holder Login
Sharmir's-OpenStandard_Implem
User_profile
OpenIDVP_SameDevice_Flow
OpenIDVCIEnhancement
BBS+
App integrity
One-time_Credentials
Multi-user_Credentials
JWT_VC_Support
ECC_Key_Support
User Login
Key_Management_Wallet
VCRendering
Sharmir's-OpenStandard_Implem
ED25519_Key-Support
ECC_Key_Support(Web)
VC Formats
CBOR_VC_Support
SD JWT VC
OpenIDVP_SameDevice_Flow
OpenID4VCI Enhancements
VC Revocation
BBS+_Support
One-time_Credentials
Multi-user_Credentials
ECC_Key_Support(Web)
SIOP_Key_Binding
ECC_Key_Support
issuer_creation
revocation_mechanism
SDJWT_VC_Format_Support
mDoc_Format_Support
pre-authorized-code-flow
presentation_during_issuance
issuer_init_cred_issuance
anon_cred
W3C_VC_Issaunce_API
multi-issuers
subject_holder_relationship
bulk_batch_issuance
deferred_credential
multi_user_cred
presentation-based-plugin
inji_verify_sdk
ovp_same_device
country_qr_code
consume_credentials_data
mDoc_mDL
credential_revocation
VC_render
ECC_K1_R1
consume_credentials_data
mDoc_mDL
multiple_QR_Verification
offline_verification_SDK
Injiverify_LTS_B1
Credential_correction
offline_verification_SDK
InjiVerify_BLE_Verification
telemetry
sunbird telemetry
tuvali
tuvali-ios-swift
tuvali
here
this
mimoto-issuers-config.json
here
here
mimoto-default.properties
this
mimoto-default.properties
Mimoto service
esignet service
ISO/IEC 30101
specification
here
here
here
LogoGitHub - biometric-technologies/biometric-sdk-react-nativeGitHub
Logonpm: @iriscan/biometric-sdk-react-nativenpm
const { t } = useTranslation('common');
<Text>{t('editLabel')}</Text>

Male (Adult)

2154189532 , 5614273165

Female (Adult)

2089250384 , 5860356276

Minor (aged btw 5-18yrs)

3963293078

Infant (aged below 5 yrs)

5134067562

RequestURL : {{ESIGNET-URL}}/v1/esignet/client-mgmt/oidc-client


{
  "requestTime": "2024-06-19T11:56:01.925Z",
  "request": {
    "clientId": "client-id", #ClientId can be given as per user choice
    "clientName": "client-name", #ClientName can be given as per user choice and this name shows on the UI
    "publicKey": "public-key" #This public key you can get from the script results ,
    "relyingPartyId": "client-id", #This value can be same as clientId
    "userClaims":  [       #Claims Section defines the different attributes of User Data taht is accessible to the OIDC client
            "birthdate",
            "address",
            "gender",
            "name",
            "phone_number",
            "picture",
            "email",
            "individual_id"
        ],
    "authContextRefs":  [ #ACR values define the various ways a user can login e.g through INJI,using Bioemtrics and Throguh OTP
            "mosip:idp:acr:linked-wallet",
            "mosip:idp:acr:biometrics",
            "mosip:idp:acr:knowledge",
            "mosip:idp:acr:generated-code"
        ],
    "logoUri": "logourl" #This is logo url which is displayed on UI,
    "redirectUris": [ "io.mosip.residentapp.inji://oauthredirect", http://injiweb.collab.mosip.net/redirect"],#These are the redirectUris for Inji wallet mobile and web both
    "grantTypes": [
      "authorization_code"
    ],
    "clientAuthMethods": [
      "private_key_jwt"
    ]
  }
}

{
    "responseTime": "2024-11-13T08:16:42.259Z",
    "response": {
        "clientId": "client-id",
        "status": "ACTIVE"
    },
    "errors": []
}
kubectl -n mimoto cp <mimoto-podname>:certs/..data/oidckeystore.p12 oidckeystore.p12
kubectl -n mimoto get secrets mimotooidc -o yaml | sed "s/name: mimotooidc/name: mimotooidc-backup/g" | kubectl -n mimoto create -f -
kubectl delete secret -n mimoto mimotooidc
kubectl -n mimoto create secret generic mimotooidc --from-file=./oidckeystore.p12
Inji Certify
Example:-
    components/ui/styleUtils.ts

    import { PurpleTheme } from './PurpleTheme';
    export const Theme = PurpleTheme;
HomeScreenLogo: require(path of logo you want to use, in string format) in a theme file

Example:-
import HomeScreenLogo from '../../../assets/InjiHomeLogo.svg';
export const DefaultTheme = {
    HomeScreenLogo: HomeScreenLogo
    ...
}
import {Icon} from 'react-native-elements';
use `person` as icon from the library
CloseCard: require(path of the image you want to use, in string format)

Example:-
export const DefaultTheme = {
    CloseCard: require('../../../assets/Card_Bg1.png'),
    ...
}
OpenCard: require(path of the image you want to use, in string format)

Example:-
export const DefaultTheme = {
    OpenCard: require('../../../assets/Card_Bg1.png'),
    ...
}
 var HomeScreenOptions = {
    headerLeft: () =>
      isIOS() || !isRTL
        ? SvgImage.InjiLogo(Theme.Styles.injiLogo)
        : screenOptions,
    headerTitle: '',
    headerRight: () =>
      isIOS() || !isRTL
        ? screenOptions
        : SvgImage.InjiLogo(Theme.Styles.injiLogo),
  };
const home: TabScreen
const scan: TabScreen
const history: TabScreen
const settings: TabScreen
Example:-
const history: TabScreen = {
  name: BOTTOM_TAB_ROUTES.history,
  component: HistoryScreen,
  icon: 'history',
  options: {
    headerTitleStyle: Theme.Styles.HistoryHeaderTitleStyle,
    title: i18n.t('MainLayout:history'),
  },
};
export const DefaultTheme = {
  Colors: {
     DetailsLabel: Colors.Gray40,
    ...
  }
}
export const DefaultTheme = {
  Colors: {
     Details: Colors.Black,
    ...
  }
}
const DownloadFABIcon: React.FC = () => {
    const plusIcon
....
}
export const DefaultTheme = {
  Colors: {
     settingsLabel: Colors.Black,
     textLabel: Colors.Grey,
    ...
  }
}
export const DefaultTheme = {
    Colors: {
      aboutVersion: Colors.Gray40,
      ...
    },
    Styles: StyleSheet.create({
      versionContainer: {
        backgroundColor: Colors.Grey6,
        margin: 4,
        borderRadius: 14,
    }
    ...
  })
}
export const DefaultTheme = {
    Styles: StyleSheet.create({
    issuerHeading: {
      fontFamily: 'Inter_600SemiBold',
      fontSize: 14,
      paddingHorizontal: 3,
      marginBottom: 2,
      marginTop: 5,
    },
    issuerDescription: {
      fontSize: 11,
      lineHeight: 14,
      color: Colors.ShadeOfGrey,
      paddingVertical: 5,
      paddingHorizontal: 3,
      paddingTop: 1.4,
    }
    ...
  })
}
{
  "display": [
    {
      "name": "MOSIP Identity Verifiable Credential",
      "locale": "en",
      "logo": {
        "url": "https://esignet.collab.mosip.net/logo.png",
        "alt_text": "a square logo of a Esignet"
      },
      "background_color": "#FDFAF9",
      "text_color": "#7C4616"
    }
  ]
}
Data URL
imageformat
Data URL
imageformat
reference
i18next
react-i18next
expo-localization
plurals
context
interpolation
format
Download
Data Backup
SSO Login
Offline Sharing (BLE-based)
mimoto-issuers-config.json
OpenID4VCI
here
here
Workflow Customization
UI Customization
Locale Customization
Configuration
Credential Provider
inji-default.properties
this
inji-default.properties
xstate
react-native-mmkv-storage
react-native-fs
.well-known
offline VC-sharing component
offline VC sharing component

Inji Mobile - Collab Guide

Pre-requisites

Before you start with setting up Inji Mobile, ensure you have the following in place.

  1. Inji Wallet APK File:

    • Transfer the apk file onto the smartphone on which it is to be installed.

  2. Inji Wallet Test Flight Access:

      • Ensure you have get the test flight application from your app store.

  3. UIN Credentials:

    • Issuance of UIN (Unique identification number) as a demo credential will allow you to explore Inji Mobile's capabilities and experience seamless VC sharing firsthand.

    Note: Please use 111111 as the OTP, for any OTP based feature in Collab environment.

  4. For sample Insurance Credentials, please provide the below details in the eSignet authentication page:

    • Policy id: 7070

    • Name: aswin

    • DOB: 19/02/2025

Step-by-Step Process

To effectively set up the Inji Mobile app and manage Verifiable Credentials (VCs), follow these detailed steps:

Step 1: Install the Inji Mobile App

Step 2: Install the Inji Mobile App - To be used as Verifier App

  1. Follow the same installation process mentioned above in step 1.

  2. Setup another instance of the Inji Mobile app on an android device, which can serve as the Verifier app.

Step 3: Download National ID VC Using UIN/VID

  1. Download your credential (VC) onto the app by using your demo UIN.

Step 4: Download Insurance Credentials Using Policy Details

  • Refer to the sample insurance credentials under 'Prerequisites' section.

  • You can view the QR Code for insurance credentials in the detailed view.

Step 5: Start Sharing the Credentials

  1. Quick Share

    • Navigate to the section titled Sharing Credentials for detailed instructions.

  2. Share with Face Verification

    • Refer to the section titled Face Authentication Flow for a step-by-step guide.

Creating your own credentials

This section outlines the process of creating your own insurance credentials, generating a QR code, and verifying the QR code using Inji Verify.

Step 1: Creation:

Inji Certify also offers to generate your own credentials which can be used for testing / development purposes.

Step 2: QR Code generation:

Using Inji Wallet app you can get the QR Code for Insurance Credentials

Step 3: QR Code verification:

Additional Resources

By following these instructions, you will be equipped to seamlessly set up the Inji Wallet application and effectively share your Verifiable Credentials.

Get In Touch

If you require any assistance or encounter any issues during the testing and integration process, kindly reach out to us through the support mechanism provided below.

  • Provide a detailed description about the support you require or provide detailed information about the issue you have encountered, including steps to reproduce, error messages, logs and any other relevant details.

Thank you. Wishing you a pleasant experience!

Workflow

This document delineates the workflow for essential functionalities of Inji Wallet.

1. First App Launch

Launch with passcode unlock method

Launch with biometric unlock method

2. Downloading, Verifying and storing credentials

Residents have the ability to download a Verifiable Credential (VC) for themselves, their family members, or friends using a single mobile device. This can be done through two methods:

While downloading the VCs, the credentials are validated and verified for the authenticity of the issuer using the signature and the proof type provided in the VC.

  • Downloading VC using OpenID for VC Issuance Flow (eSignet)

Download via eSignet

Below sections are going to detail as how Inji Wallet as an OIDC client to OpenID4VCI method of downloading a VC and illustrated implementations.

Download credentials using UIN / VID:

Download credentials using Knowledge Based Identification (KBI)

Appendix:

  • The term “identifier” in the architecture diagram refers to the unique identifier which can be used to download the credential on the esignet login Page

  • eSignet supports Various types of authorizations, ACR value is configured based on the Issuers' need to include the authorization mode in the authorization page

  • Types of Authorization Supported for Credential Download by eSignet are:

    • Login With OTP: Credential download using OTP Based authentication to authorize the user

      Illustrated Implementation: National ID credentials download

    • Login With KBI: Credential download using KBI to authorize the user. The knowledge (as described by the credential issuer to authorize) is exposed to eSignet from Registry (Issuer) through eSignet Issuance Plugins

      Illustrated Implementation: Insurance ID credentials download

3. Sharing of credentials

4. QR code login process

  • Residents can use Inji Wallet to log in to any service provider app (integrated with e-Signet) by just scanning a QR code from their portal.

  • The app performs offline face auth after scanning the QR code to verify the user's presence.

  • Once the presence is verified, the resident is given the option to choose the optional information to be shared with the service provider portal.

  • After consent is provided, the app sends a WLA (Wallet local auth) token which is a JWT token to the relying party.

  • The resident is then given the access to the portal after the token verification.

Step 1: VC activation process

Step 2: QR code login

5. Data backup and restore

From Settings screen, users can access Backup settings screen. In Backup settings screen, users can configure their preferences for data backup. The setting, configured once during the application's lifecycle, determines whether Google Drive or iCloud will be utilized based on the device platform. To restore backup data to the mobile wallet, users must log in to the same account and configure settings within the app accordingly. Additionally, restored Verifiable Credentials (VCs) should be re-activated to enable QR Code login functionality.

Local Setup

Mimoto can be deployed in local using Docker Compose setup. This service streamlines deployment and management, offering a seamless and efficient way to handle backend operations.

Below sections details the docker-compose setup to run mimoto which act as BFF for Inji Wallet and backend for Inji web. This docker compose setup is intended only for local use and not for production deployment.

What is in the docker-compose folder?

  • The certs folder holds the p12 file which is created as part of OIDC client onboarding.

  • "config" folder holds the mimoto system properties file, issuer configuration and credential template.

  • "loader_path" this has mimoto mount volume from where all the runtime dependencies are loaded to classpath.

  • "docker-compose.yml" file contains the mimoto setup.

How to run this setup?

  1. Copy the downloaded jar under loader_path directory and rename it to kernel-auth-adapter.jar

  2. Add ID providers as issuers in mimoto-issuers-config.json

  3. Start esignet services and update esignet host references in mimoto-default.properties and mimoto-issuers-config.json

  4. Update client_id and client_alias in mimoto-issuers-config.json file.

  5. Update p12 file password mosip.oidc.p12.password in mimoto-default.properties file.

  6. To start the docker-compose file, run the command docker-compose up

APIs

The mimoto APIs can be accessed as below:

http://localhost:8099/residentmobileapp/allProperties

http://localhost:8099/residentmobileapp/issuers

http://localhost:8099/residentmobileapp/issuers/Sunbird

http://localhost:8099/residentmobileapp/issuers/Sunbird/credentialTypes

Note:

  • For local env use ngrok.

    • token_endpoint in mimoto-issuers-config.json

    • mosipbox.public.url, mosip.api.public.url in mimoto-default.properties

End User Guide

Important: We are in the process of updating screenshots and content in the End User Guide to reflect our new branding. These updates will be available soon, thank you for your patience!

This document serves as a concise user guide for end users, providing comprehensive information on the features and functionalities offered by Inji Wallet.

Installing Inji Wallet

The below sections explain the steps for installing the Inji Wallet application on Android and iOS platforms.

On Android device

  1. Transfer the apk file onto the smartphone on which it is to be installed.

  2. Click on the apk file and follow the OS installation instructions.

On iOS device

  1. Install the test flight app on your device.

The below screenshots explain the next steps after you get access.

First launch of the app

After installation when you launch the app for the first time:

  • Select the preferred language.

  • You can read though a five-page tutorial for the Inji Wallet which is presented.

  • Choose a secure login method to enter the app (Biometric / PIN). This can be achieved through a PIN or the device's Biometrics (such as fingerprint or facial recognition). Once the setting is done you will be directed to the app's home page.

Downloading VC

Inji Wallet integrates with eSignet as an authorization layer to perform VC downloads based on OpenID4VCI standards. Let us understand how to download a National ID VC and an Insurance VC into the Mobile Wallet through the below sections:

Download VC via eSignet

  • Download National ID (MOSIP VC)

  • Download Insurance VC

1. Download National ID (MOSIP VC)

Download credentials using UIN / VID:

  • On the home page, a plus "+" symbol will display the list of issuers from which you can download VCs.

  • Select the issuer that states National Identity Department and choose a credential type (MOSIP National ID). Once clicked, the browser will open and take you to the eSignet page.

  • On the authorization page (eSignet page), the user has to enter the UIN / VID and provide the OTP sent to the registered mobile number/email.

  • Upon successful validation of OTP, the user will be taken back to the application and land on the loading screen. After the download process is completed, the user will be returned to the home page, where the Downloaded Credential will be available.

2. Download Insurance VC

Download credentials using KBI:

  • A plus "+" symbol on the home page will display the list of issuers from which you can download VCs.

  • Select the issuer that states Stay Protected Insurance and choose a credential type (Health Insurance, Life Insurance). Once clicked, the browser will open and take you to the eSignet page.

  • On the authorization page (eSignet page), the user has to enter the Policy Number, Full Name, and Date Of Birth(D.O.B).

  • Upon successful validation, the user will return to the application and land on the loading screen. Following the completion of the download process, the user will be returned to the home page, where the Downloaded Credential will be available.

Detailed view of the downloaded VC

Once we click on the downloaded VC on the Home Page, the detailed view opens up for the VC.

Detailed View of National ID VC

Users can see all the details of the National ID in the detailed view. In addition, the user can access the quick access menu (...) on the top right to perform actions such as Pin/Unpin, Share, Share with Selfie, QR Code Login, view Activity Log, and Remove from the detailed view of the VC.

Detailed View of Insurance VC

Users can see all the Insurance policy details in the detailed view along with the QR Code. The QR Code can be magnified which can be presented to the verifier for scanning. Through the quick access menu (...) on the top right user can also perform other actions like Share, Pin, Remove and Activity log on the VC.

Viewing the history of the downloaded VC

After completing several scenarios, we can find it by selecting the third icon in the bottom right corner when we navigate to the history page. This page will display a comprehensive list of all the events.

Activity Log for a VC:

Users can view the activity logs of a VC from the Home Page or the detailed view by choosing the menu option "View Activity Log" from the quick access menu (...).

Sharing Credentials

Pre-requisites

  • Two or more devices with Inji Wallet installed are required to share credentials. The relying party's phone should be an Android device.

  • All required permissions like Bluetooth, location, and camera access are enabled on both devices.

  • The parties involved are usually a Resident (sharing party) who wishes to share their credentials with a Relying party (receiving party), a banker, a health worker, or other professional service.

Users can now share their credentials using any of the methods listed below:

  1. Share option from the NavBar.

  2. Share or Share with Selfie option from the quick access menu (...) from a VC in the Home Page

  3. Share or Share with Selfie option from quick access menu (...) in detailed view of VC.

Let us understand the process of sharing credentials using an example and see the step-wise process for all the above three methods. Suppose a Resident wishes to share their credentials with a Relying/ Requesting party through the receiver's phone, the following steps outline the procedure for both parties involved:

Share from Share Option in NavBar

On the Sharing Party's phone:

  • The resident opens the QR Code Scanner by clicking on the Share button in the NavBar. The application now prompts for permissions.

  • Upon granting the necessary permissions, the app opens a camera where the resident can scan the QR code of the recipient's (Verifier/Relying Party) phone.

  • Once the QR code is successfully scanned, both phones will establish a Bluetooth connection.

  • The resident then needs to choose a downloaded VC and select either the Share or the Share with Selfie option.

  • The Share button will solely share the VC, while the Share with Selfie option will verify if the sender's face matches the photo in the VC before proceeding to share.

On the Relying Party's phone

  • This functionality is only available on Android devices. To access it, the receiver needs to navigate to the settings page and locate the Receive Cards option.

  • On selecting this option, it will open the QR code page. For the relying party to be able to receive a card, the resident needs to scan the QR code using a shared phone. Once the QR code is scanned and shared, the relying party will receive the VC and be able to preview its contents.

  • To view the received cards, they would need to access the settings page and find the Received Cards section. Clicking on this section will display the received cards. If the receiver has not received any card, this section will be empty.

  • Please note that the relying party can only view the received cards and will not be able to share or perform other actions with them.

Share / Share with Selfie from Home Page Quick Access menu

On the Sharing Party's phone:

  • The resident clicks on the quick access menu (...) from a VC on the Home Page and chooses the Share or Share with Selfie option from the menu.

  • The application now prompts for permissions if not granted already.

  • Upon granting the necessary permissions, the app opens a camera where the resident can scan the QR code of the recipient's (Verifier/Relying Party) phone.

  • Once the QR code is successfully scanned, both phones will establish a Bluetooth connection.

  • The Share button will solely share the VC, while the Share with Selfie option will verify if the sender's face matches the photo in the VC before proceeding to share.

On the Relying Party's phone:

  • This functionality is only available on Android devices. To access it, the receiver needs to navigate to the settings page and locate the Receive Cards option.

  • On selecting this option, it will open the QR code page. For the relying party to be able to receive a card, the resident needs to scan the QR code using a shared phone. Once the QR code is scanned and shared, the relying party will receive the VC and be able to preview its contents.

  • To view the received cards, they would need to access the settings page and find the Received Cards section. Clicking on this section will display the received cards. If the receiver has not received any card, this section will be empty.

  • Please note that the relying party can only view the received cards and will not be able to share or perform other actions with them.

Share with a selfie from VC Detailed View Quick Access menu

On the Sharing Party's phone

  • The resident clicks on the VC on the Home page and clicks on the quick access menu (...) in the detailed view. Resident can choose either Share or Share with Selfie option from the menu.

  • The application now prompts for permissions if not granted already.

  • Upon granting the necessary permissions, the app opens a camera where the resident can scan the QR code of the recipient's (Verifier/Relying Party) phone.

  • Once the QR code is successfully scanned, both phones will establish a Bluetooth connection.

  • The Share button will solely share the VC, while the Share with Selfie option will verify if the sender's face matches the photo in the VC before proceeding to share.

On the Relying Party's phone:

  • This functionality is only available on Android devices. To access it, the receiver needs to navigate to the settings page and locate the Receive Cards option.

  • On selecting this option, it will open the QR code page. For the relying party to be able to receive a card, the resident needs to scan the QR code using a shared phone. Once the QR code is scanned and shared, the relying party will receive the VC and be able to preview its contents.

  • To view the received cards, they would need to access the settings page and find the Received Cards section. Clicking on this section will display the received cards. If the receiver has not received any card, this section will be empty.

  • Please note that the relying party can only view the received cards and will not be able to share or perform other actions with them.

Pinning a VC

After clicking on the ellipsis button on the downloaded VC, a button will appear allowing for the VC to be pinned. Selecting this option will pin the specific VC to the top of the screen.

Activating a VC

There are two ways to activate the VC:

  • The first option is to click on the "Activate for online login" menu option by clicking on the quick access menu (...) of the card from the Home Page.

  • The second option is to click on the "Activate for online login" menu option by clicking on the quick access menu (...) of the card from the detailed view of the VC.

  • A confirmation alert message will be prompted upon clicking the "Activate for online login" option. Once permission is granted, the user will be directed to an OTP screen. After entering the correct OTP, the VC will be activated and projected on the screen with the same message.

Deleting a VC

There are two ways to remove/delete a VC from the wallet:

  • The first option is to click on the Remove from Wallet menu option from the quick access menu (...) of the card from the Home Page.

  • The second option is to choose the Remove from Wallet menu option from the quick access menu (...) of the card from the detailed view of the VC.

  • Upon clicking this option, the user will be prompted with a pop-up for confirmation. If the user chooses, “Yes, I confirm” the VC will be removed from the wallet.

Search

Users can now search for a VC by providing a search string in the search bar. VCs that match the search criteria will be displayed.

Data backup and restore

Backup

To backup VCs, the user has to choose their preference for the cloud based on the device they are using.

  1. Firstly, the user has to go to settings and click on the Backup and Restore menu options.

  2. The User should consent for the app to use the drive, and once consented, the application displays a backup and restore screen.

  3. In this screen, the user can manually take a backup by clicking on the Backup button and this asynchronously happens allowing the user to use the application.

  4. Users will be notified of success or failure.

Data backup - Android

Data backup- ios

Restore

To restore backed-up VCs, the user has to choose their preference of the cloud based on the device and use the same Google/apple ID that they used for taking backups.

  1. Firstly, the user has to go to settings and click on the Backup and Restore menu options.

  2. The user should consent for the app to use the drive, and once consented, the application displays a backup and restore screen.

  3. Users find the details of latest backup details in the Last Backup Details section.

  4. In this screen, the user can manually restore a backup by clicking on the Restore button and this asynchronously happens allowing the user to use the application.

  5. Users will be notified of success or failure.

Restore - Android

Restore - ios

Try It Out

Welcome to the Inji Wallet Sandbox: Here, you can try out all the features of our app in a risk-free environment. Experiment with different settings, test your use cases, and get hands-on experience with Inji Wallet’s functionalities.

Version 0.15.1

Release Name: Inji Wallet 0.15.1(Patch)

Release Type: Developer

Release Date: 27th March, 2025

Overview

We are excited to announce the release of Inji Wallet Version 0.15.1! This update focuses on branding enhancements, including updated logos and visual identity across the wallet interface. While this is a minor update, it ensures consistency with our latest branding efforts and provides a refreshed user experience.

Key Highlights

  • Updated Branding Logo: The Inji Wallet now features an updated logo and branding elements to align with the latest visual identity of the Inji ecosystem.

  • UI Enhancements: Adjustments have been made to ensure the new logo is seamlessly integrated across all screens.

Features Updated

  1. Branding Updates:

  • Replaced the previous Inji logo with the new branding logo across all wallet screens.

  • Verified logo integration in the home screen, issuer selection, and credential views.

2. UI Improvements:

  • Adjusted logo positioning for enhanced visibility.

  • Ensured seamless branding consistency across mobile and web versions.

Repository Released

Module
Version

Inji Mobile Wallet

inji-vci-client-ios-swift

pixelpass-ios-swift

Compatible Modules

Module

Version

Inji-config

eSignet

Inji Certify

Inji Verify

tuvali

tuvali-ios-swift

mimoto

vc-verifier

pixelpass

secure-keystore

secure-keystore-ios-swift

inji-vci-client

inji-openid4vp

Known Issues

Bug Fixes

No functional & technical bug fixes were included in this release as it is focused exclusively on branding updates.

Documentation Details

Version 0.16.0

Release Name: Inji Wallet 0.16.0

Release Type: Developer

Release Date: 28th April, 2025

Overview

We are excited to announce the release of Inji Wallet Version 0.16.0! This update introduces major enhancements to security, metadata management, standards compliance, and credential handling. Here's a detailed overview of the latest improvements and features:

Key Highlights

1. ED25519-2020 Key Support

  • Feature: VP signing with ED25519Signature2020.

  • Inji Mobile now uses a newer, more secure algorithm (ED25519-2020) to sign tokens for better security.

  • Inji Mobile now uses the ED25519-2020 algorithm to sign vp_token in the OpenID4VP flow, aligning with modern cryptographic standards for improved security and reliability.

2. Authorization Request URI Support

  • Feature: Streamlined Authorization Flow with request_uri.

  • QR codes now include additional information for smoother, error-free authorization requests.

  • Supports client_id, request_uri, and request_uri_method in QR codes.

  • Introduced a new Request URI Endpoint for generating signed JWT authorization requests.

  • Improved error handling and updated OpenID4VP library for seamless integration.

3. Verifier Metadata Management (Kotlin)

  • Feature: Support for Multiple Client ID Schemes in OpenID4VP.

  • Inji supports different types of verification methods, improving flexibility and error handling in Kotlin.

  • Supports verifier validation using:

    • Pre-registered schemes

    • Redirect URI schemes

    • DID schemes

  • Includes improved error handling and JOSE header compatibility.

4. Unique UID Generation for VCs

  • Feature: Remove id field and generate internal UID.

  • Each Verifiable Credential (VC) now gets a unique ID that remains the same across backup and restore.

  • Generates a UUID (v4) as a unique identifier during VC download.

  • UID is used for file naming and remains consistent across backup/restore.

  • Independent of id field presence in VC response.

5. Dynamic Well-Known Endpoint Discovery

  • Feature: Standards-compliant endpoint resolution.

  • Inji automatically finds the right URLs for issuers, reducing configuration complexity.

  • Constructs well-known URL dynamically using credential_issuer_host.

  • Removed fallback JSONs from config.

  • Issuers are now responsible for redirection handling.

  • Ensures compliance with OpenID4VCI spec and simplifies config management.

6. Verifier Metadata Management (Swift)

  • Feature: Support for Metadata Validation in iOS.

  • Inji on iOS now supports various verification methods and ensures secure token handling.

  • Adds support for pre-registered, redirect URI, and DID schemes.

  • Custom DID Resolver implemented for public key extraction.

  • Integrated with beatt83/jose-swift for JWT verification.

  • Ensures compatibility and secure Authorization Request handling in Swift SDK.

Technical Improvements

  • Enhanced QR Code logic to support complex OpenID4VP flows.

  • JWT construction and signing updated using secure algorithms.

  • Added support for mock server testing and validation.

  • Improved UI rendering for long client IDs (bug fix).

  • API updates and better error handling for missing or invalid metadata.

Features Released

List of New Features

Jira Links

Multiple client types (Swift)

Support for Multiple Client ID Schemes in OpenID4VP Flow for Swif

Multiple client types (Kotlin)

Support for Multiple Client ID Schemes in OpenID4VP Flow for Kotlin

Localized Intro Sliders on First Launch

Intro Sliders Enhancement Language to Change as per Selection

Link-Based Presentation Request

Support Request URI for authorization request in OpenIDVP

Technical Enhancement to Features

Jira Links

Unique VC Identifier

Remove "id" from Verifiable Credentials (VC) and Generate a Unique UID

Added signature format

Use ED25519-2020 key to generate VP proof

Auto-fetch wallet config

Well-known discovery at Inji Mobile to fetch well-known response

Repository Released

Module
Version

Inji Mobile Wallet

inji-openid4vp-ios-swift

inji-openid4vp

Tuvali

Compatible Modules

Module
Version

mimoto

inji-config

esignet

inji-certify

pixelpass

secure-keystore

secure-keystore-ios-swift

inji-vci-client

tuvali-ios-swift

inji-vci-client-ios-swift

pixelpass-ios-swift

vc-verifier

Known Issues

Jira Issue

Issue Description

[OpenId4VP] QR data is base64 encoded.

Invalid URL Format for OPENID4VP on Android 14 and above version.

Search is not working for the VCs from home page.

INJI- In the Credential Registry popup, when entering an invalid URL in the 'Edit Credential Registry' field, the error message is overlapping.

The activation VC is not working for a second time on the same device; the same VC displays a technical error message.

After we removed the mandatory configuration for the Mock issuer is not showing the error message in UI.

During face authentication, the camera view is not opening in all IOS device.

Automation run for sanity is failing few scenarios.

Bug Fixes

Jira Issue

Issue Description

Sunbird insurance VC download is failing with Ed25519 key.

Automation(VC Verifier) - Verification of the mDL (mso_mdoc) against VC Verifier library is failing with no classFoundException.

Disable the toggle for the biometric, but do not provide a passcode. Close and reopen the application; it still asks for a passcode to log in.

qa-inji1 - Issuer page is not loading.

DL VC download is failing in qa-inji1.

INJIMOB- We are unable to download the MOSIP VC using the RegClient UIN, as it shows an 'Invalid UIN' error.

The Help icon should be consistent across all pages.

Intermittent download errors occur, causing the application to become unusable.

After performing backup and restore, and then removing a VC, the actual count of VCs and the VCs present in the wallet are mismatched.

Error screen CTAs not working in VC download flow.

Injimobile - The download VC is stuck in a loading state.

Intermediately We are unable to download the mock mdl VC; an error message appears.

We are unable to download the mosip VC; an error message appears.

IOS - when biometric is cancelled multiple times during app launch the app data is deleted.

Online login is failing with inji app crash from device.

INJI - After providing biometric authentication, if the user clicks the cancel button, they should not be allowed to successfully download the VC.

Inji- We are unable to download the VC via MOSIP ID due to an error message stating 'Failed to send OTP.

Inji- The link from the help page leads to a 'Page Not Found' error when clicked.

INJI- Intermittently, we are unable to download Sunbird as a 'Something went wrong' screen is being displayed.

In INJI Mobile app, the issue type fails to load after selecting an issuer on Android and iOS devices.

INJIMOB - Along with Insurance certify VC, an extra mock VC is getting downloaded.

INJIMOB - Mock certify and mock fallback VC downloaded background color not reflecting, Only after close and reopen app it is reflecting.

INJIMOB - About inji detail is different from IOS to android.

Biometrics Toggle stop working after Inji tour guide is dismissed.

INJIMOB- QR login is not working, we 're sorry! due to technical error we are unable to serve your request now .please try again later.

INJIMOB- intermediately , the QR login is not working. We are encountering an error message.

In the INJI 0.12x version, issues with downloading their UIN cards.

User is getting a 'Technical error' message on the first attempt to download the VC after restarting the certify pod.

Injimobile- After we removed the mandatory configuration for the Mock, issuer is not showing the error message in UI.

Search box close button is not working unless invoked on a specific point.

Deprecated

N/A

Documentation

Setup

Repositories

Prerequisite

To perform offline sharing using BLE, we recommend below:

  • Devices with Bluetooth v4.2 and above

  • Android v23 and above for Android

Android - Build and Run

The below sections describe the steps for building the android application in Mac and Windows OS.

1a. Installation and Keystore generation on MAC

Step 1:

Configure Node & npm (recommended to use v16.19.0)

brew install nvm

nvm install 16.19.0

nvm use 16.19.0

Step 2:

Configure Yarn

brew install yarn

Step 3:

Configure Gradle & Java

curl -s "https://get.sdkman.io" | bash

sdk install gradle 7.5.1

sdk install java 17.0.13-amzn

Step 4:

Step 5:

Configure environment variables in your ~/.zshrc / or ~/.bashrc (depending upon your shell)

export ANDROID_HOME="$HOME/Library/Android/sdk"

export ANDROID_PLATFORM_TOOLS="$ANDROID_HOME/platform-tools"

export ANDROID_CMDLINE_TOOLS="$HOME/Library/Android/sdk/cmdline-tools/latest/bin/"

export PATH="$PATH:$ANDROID_PLATFORM_TOOLS:$ANDROID_CMDLINE_TOOLS"

Step 6:

Generate debug keystore for building debug build.

keytool \
 -genkey -v \
 -storetype PKCS12 \
 -keyalg RSA \
 -keysize 2048 \
 -validity 10000 \
 -storepass 'android' \
 -keypass 'android' \
 -alias androiddebugkey \
 -keystore android/app/debug.keystore \
 -dname "CN=io.mosip.residentapp,OU=,O=,L=,S=,C=US"

Export keystore

export DEBUG_KEYSTORE_ALIAS=androiddebugkey

export DEBUG_KEYSTORE_PASSWORD=android

1b. Installation and Keystore generation on Windows

Step 1:

  • Install Git

  • Use the below link to download git

https://git-scm.com/download/win
  • After installation, run Git as admin.

Step 2:

  • Install SDKMAN

  • Use the below command in Git terminal

curl -s "<https://get.sdkman.io>" | bash
  • If you encounter an error while installing sdkman, please install zip on your system using your favourite package manager.

Install zip

  1. SDKMan requires the installation of the zip utility, which is not included in the default installation of Windows Git Bash.

  2. Locate zip in the list of available files and download the zip-3.0-bin.zip archive. Extract the zip.exe file from the archive and place it in the bin folder. Location of bin folder C:\Program Files\Git\usr\bin.

  3. Finally, rerun the SDKMan installation script.

Step 3:

  • Install gradle

  • Use the command below in Git terminal.

sdk install gradle 7.5.1
  • To check the installed gradle version.

gradle -V

Step 4:

[!TIP]
Restart system

Step 5:

  • Install expo

npm install --global expo-cli

Step 6:

Step 7:

Step 8:

  • Install nvm

curl -o- <https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh> | bash

or

wget -qO- <https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh> | bash

update the nvm version

nvm install 16.19.0
nvm use 16.19.0

Step 9:

Install adb

https://sourceforge.net/projects/quickadb/

Configure ANDROID_HOME and JAVA_HOME in system environment variables

2. Command to build the application

Step 1:

  • Clone Inji repository.

Step 2:

  • Create an android/local.properties file with the following data:

sdk.dir = <location-of-the-android-sdk>
  • Alternatively, you can open the Android folder in the android studio. It will create local.properties file with sdk.dir = <location-of-the-android-sdk>.

Note:

  • Default path for MacOS: /Users/<username>/Library/Android/sdk

  • Default path for Linux: /home/<username>/Android/Sdk

  • Default path for Windows: C:\Users\<username>\AppData\Local\Android\sdk

Step 3:

  • Inji application currently supports two themes: gradient and purple.

  • The default theme of the app is gradient.

  • To change the theme of the application, go to .env file and change the value of APPLICATION_THEME to purple or orange to apply gradient theme

Step 4:

Step 5:

  • Go to the root folder of the project in the terminal.

  • Install all the dependencies using npm install.

Step 6:

Build and run the application on the device:

  • Run npm run android:mosip to build and install the application on the device.

  • Run npm run android:mosip --reset-cache to build and install the application if any change is made in the .env file.

3. Troubleshooting

If you encounter the below issue on Windows,

**FAILURE:** Build failed with an exception.

**Where:**
  Script 'C:\....\inji\node_modules\expo\scripts\autolinking.gradle' line: 2

**What went wrong:**
  A problem occurred evaluating script.
  > Could not read script 'C:\"PATH"\inji\node_modules\expo\scripts\android\autolinking_implementation.gradle' as it does not exist.
  • Run npm i expo-modules-autolinking@~1.1.0 and rebuild the app

  • Path for debug apk in Inji directory android/app/build/outputs/apk/mosip/debug

4. Setting Up Google API Services and Client ID for Data backup & Restore

Step 1:

Creating A Google Cloud Project Refer to this documentation on setting up a Google Cloud Project - https://developers.google.com/workspace/guides/create-project

Step 2:

Enabling Google Drive APIs Go to - https://console.cloud.google.com/apis/library

Search for Google drive API and Select Google Drive API from the list.

Then enable the API.

Step 3:

Create Google Consent Screen

Go to - https://console.cloud.google.com/apis/credentials/consent

Create a new Consent Screen with necessary details such as - App Name, User Support Email, App Logo and Developer Info. Once added these details Save and Continue.

Step 4:

Create Oauth Client ID

Go to - https://console.cloud.google.com/apis/credentials

Click on CREATE CREDENTIALS and choose OAuth client ID

Choose Appliation type as Android

Add in details such as Name, Package Name and SHA- Fingerptint

Note:

  • SHA-1 should be of the keystore generated for signing the APK

  • Make sure you have checked Custom URI Scheme in Advanced Settings

  • The APK signing keystore needs to be unchanged for backup feature to work as the SHA-1 is 1-1 mapped for a client ID created

Step 5:

Set Environment Variable

Once the Client ID has been created copy the client ID and add it as part of .env file.

GOOGLE_ANDROID_CLIENT_ID="<copied-client-id>"

5. Build for PlayConsole

The Internal testing version of the build can be uploaded to PlayConsole for testing. PlayConsole allows the creation of internal testers group.

Publishing build manually to PlayConsole

A Google play console developer account is a must to publish builds in PlayConsole.

  1. Set the backend URL and choose a theme (orange | purple) inside the .env file.

  2. Build the Apk or App bundle.

  3. Login to PlayConsole and create a new release inside Internal testers.

  4. Upload the Apk or App bundle to PlayConsole.

Upload in PlayConsole

  1. Once the build is uploaded and saved you will be able to see the status of the release with version name, code, API level and some more details.

  1. Select the testers group you want to share with. Once saved, you can copy the link and share the same with the testers to test the APK or App bundle.

  1. You are required to manually share the link with the testers as they will not receive any notifications when a new build is uploaded.

Publishing build via Github actions (Automation) to PlayConsole

  1. A Google PlayConsole developer account must be configured to Inji to publish builds via PlayConsole.

Testers must be added to internal testers group in Play console.

  1. To deploy the Android build to PlayConsole, select Android Custom Build workflow from github actions.

  1. Choose the branch, backend url, theme and describe about build details.

  2. Click the Run workflow button.

  3. Once the pipeline has done with building the app (takes around ~25-30min), you need to login to PlayConsole and verify the build version name and code in the internal testers track.

  4. Now, you can share the link to testers.

Note: Only those who are registered in the selected testers group will be able to download the App from Google Play.


iOS - Build and run

The below section describes the steps build the iOS application.

1. Installation and Keystore generation

Step 1:

Step 2:

Step 3:

Enable iCloud and create Containers, refer https://developer.apple.com/help/account/manage-identifiers/create-an-icloud-container/

2. Build process

  • Install all the dependencies

npm install
npx pod-install
  • Run Metro bundler in the background

npm start
  • Run Inji directly to a connected device Command to run on simulator

npm run ios

Command to run real device

npm run ios -- --device

3. Build for TestFlight

The beta version of the build can be uploaded to TestFlight for testing. TestFlight allows the creation of internal and external testing teams who will be notified once a new build is published.

Publishing build manually to TestFlight

An Apple developer account is a must to publish builds in TestFlight.

  1. Set the backend URL and choose a theme (orange | purple) inside the .env file.

  2. Archive the build using xcode.

  3. Upload the archive to Testflight.

First choose Distribute App.

Upload in TestFlight

  1. Login to TestFlight and check for the build upload status. Once the build is uploaded successfully, add Groups to provide access to testers.

  1. All the group members will be notified about the new build. Open TestFlight and install the new version.

Publishing build via Github actions (Automation) to TestFlight

An Apple developer account must be configured to Inji app to publish builds via TestFlight.

Testers must be added to group in TestFlight.

  1. To deploy the iOS build to testflight, select Inji iOS build workflow from github actions.

  1. Choose the branch, backend URL, theme, testers group from TestFlight to get the build and describe about build details.

  2. Click the Run workflow button.

  3. Once the pipeline has done with building the app (takes around ~25-30min), TestFlight notifies corresponding testers associated with the testers group in email about deployed build details.

Version 0.14.1

Release Name: Inji Wallet 0.14.1(Patch)

Release Type: Developer

Release Date: 24th Feb, 2025

Overview

This patch release addresses a critical issue related to iOS dependency management, specifically fixing the checksum of the Boost library to enable a successful build and republishing of the iOS TestFlight release.

Key Highlights

  • Fixed: Checksum issue with Boost dependency in iOS, ensuring successful package installation.

  • Build Process Improvement: The IPA is rebuilt and republished from the same branch, ensuring smooth distribution on TestFlight.

This patch ensures that iOS builds remain functional and available for testing and deployment.

Note: The current release does not alter the android-build, it stays unchanged and is same as with Inji 0.14.0.

Repository Released

Compatible Modules

Known Issues

Bug Fixes

Documentation Details:

Releases

Version: 0.16.0

Name: Inji Wallet 0.16.0

Date: 28th April, 2025

Version: 0.15.1

Name: Inji Wallet 0.15.1

Date: 27th March, 2025

Version: 0.15.0

Name: Inji Wallet 0.15.0

Date: 18th Feb, 2025

Version: 0.14.1

  • Name: Inji Wallet 0.14.1(Patch)

  • Date: 24th Feb, 2025

Version: 0.14.0

  • Name: Inji Wallet 0.14.0

  • Date: 25th Nov, 2024

Version: 0.13.1

  • Name: Inji Wallet 0.13.1 Patch release

  • Date: 10th Sep, 2024

  • Type: Developer

Version: 0.13.0

  • Name: Inji Wallet 0.13.0

  • Date: 2nd Aug, 2024

Version: 0.12.0

  • Name: Inji 0.12.0

  • Date: 31st May, 2024

Version: Inji 0.11.0-Inji

  • Name: Inji 0.11.0-Inji

  • Date: 29th March, 2024

Version: 0.11.0

  • Name: Inji 0.11.0

  • Date: 23rd February, 2024

Version: vDP2

  • Name: Inji DP2

  • Date: 22nd January, 2024

Version: 0.10.0

  • Name: Inji 0.10.0

  • Date: 19th December, 2023

Version: vDP1

  • Name: Inji DP1 (Beta)

  • Date: 28th September, 2023

Version: 0.9.1

  • Name: Inji 0.9.1 (Beta)

  • Date: 25th July, 2023

Version: 0.9.0

  • Name: Inji 0.9.0 (Beta)

  • Date: 14th April, 2023

Version: 0.8.0

  • Name: Inji 0.8.0 (Alpha)

  • Date: 20th October, 2022

Test Report

Testing Scope

The scope of testing is to verify fitment to the specification from the perspective of

  • Functionality Sanity

  • Automation UI

Verification is performed not only from the end user perspective but also from the System Integrator (SI) point of view. Hence Configurability and Extensibility of the software is also assessed. This ensures the readiness of software for use in multiple countries. Since MOSIP is an An automation Test Rig is created for the same.

The Inji testing scope revolves around sanity and covers the following flows:

  • Biometric unlock

  • Passcode unlock

  • Mosip download, activation and QR login

  • Sunbird download is working fine

  • Mock download is not working in qa-inji1 and working in collab & CRE

  • MDL download

  • Land registry

  • Sharing and share with selfie

  • Backup and restore

  • Key Management

  • Logout

  • INJI Wallet new logo

  • Remove VC is working.

  • Pinning VC is working

Test Approach

Persona based approach has been adopted to perform the IV&V, by simulating test scenarios that resemble a real-time implementation.

A Persona is a fictional character/user profile created to represent a user type that might use a product/or a service in a similar way. Persona based testing is a software testing technique that puts software testers in the customer's shoes, assesses their needs from the software and thereby determines use cases/scenarios that the customers will execute. The persona needs may be addressed through any of the following.

  • Functionality Sanity

  • Automation UI

The verification methods may differ based on how the need was addressed.

For regression check, "MOSIP Test Rig" - an automation testing suite - which is indigenously designed and developed for supporting persona-based testing. MOSIP Test Rig covers the end-to-end test execution and reporting. The end-to-end functional test scenarios are written starting from pre-registration to creation of packet in registration center, processing the packet through the registration processor, generating UIN and authenticating identity using IDA through various permutation and combinations of cases being covered. MOSIP Test Rig will be an open-source artifact which can also be enhanced and used by countries to validate the SI deliveries before going live. Persona classes include both negative and positive personas. Negative persona classes include users like Bribed Registration Office, Malicious Insider etc. The needs of positive persona classes must be met, whereas the needs of negative persona classes must be effectively restricted by the software.

UI Automation results

The below section provides details on Ui Automation by executing MOSIP functional automation Framework.

Test Rate: 100%, With Pass Rate: 100%

Here is the detailed breakdown of metrics

Test Rate: 100%, Pass Rate: 100%

Test Rate: 100%, Pass Rate: 100%

Known issue

  1. The Home page help icon link is not working for activation and remove VC, for these two links it is showing page not found.

Device and Component Details

Evaluated with INJI components

mosipqa/artifactory-server:0.10.x-INJI

mosipid/inji-certify:0.10.0

mosipid/inji-certify:0.10.0

mosipqa/inji-verify-service:develop

mosipqa/inji-verify-ui:develop

mosipid/data-share-service:1.3.0-beta.2

mosipqa/inji-web:0.11.0

mosipqa/mimoto:0.15.x

mosipqa/artifactory-server:0.10.x-INJI

mosipqa/inji-certify-with-plugins:develop

mosipqa/inji-certify-with-plugins:develop

mosipqa/inji-certify-with-plugins:develop

mosipqa/inji-certify-with-plugins:develop

mosipqa/inji-certify-with-plugins:develop

mosipqa/inji-certify-with-plugins:develop

mosipqa/dsl-packetcreator:develop

mosipdev/dsl-packetcreator:develop

mosipqa/inji-certify-with-plugins:develop

Evaluated with MOSIP Components

mosipid/mock-abis:1.2.0.2

mosipid/mock-mv:1.2.0.2

mosipid/hotlist-service:1.2.1.0

nginxinc/nginx-unprivileged:1.21.6-alpine

mosipid/admin-service:1.2.1.0

mosipid/admin-ui:1.2.0.1

mosipid/artifactory-server:1.4.1-ES

mosipid/authentication-demo-service:1.2.0.1

mosipid/authentication-demo-service:1.2.0.1

mosipdev/authentication-demo-service:develop

mosipdev/authentication-demo-service:develop

mosipid/biosdk-server:1.2.0.1

mosipqa/biosdk-server:develop

mosipdev/captcha-validation-service:develop

rancher/fleet-agent:v0.7.0

mosipid/data-share-service:1.2.0.1

mosipid/digital-card-service:1.2.0.1

mosipid/authentication-service:1.2.1.0

mosipid/authentication-internal-service:1.2.1.0

mosipid/authentication-otp-service:1.2.1.0

mosipid/credential-service:1.2.1.0

mosipdev/credential-request-generator:MOSIP-34070-v1210

mosipdev/id-repository-identity-service:MOSIP-34070-v1210

mosipid/id-repository-vid-service:1.2.1.0

mosipid/inji-verify:0.10.0

mosipid/data-share-service:1.3.0-beta.2

mosipid/inji-web:0.11.0

mosipid/mimoto:0.15.0

mosipid/kernel-auditmanager-service:1.2.0.1

mosipid/kernel-auth-service:1.2.0.1

mosipid/kernel-idgenerator-service:1.2.0.1

mosipid/kernel-masterdata-service:1.2.1.0

mosipid/kernel-notification-service:1.2.0.1

mosipid/kernel-otpmanager-service:1.2.0.1

mosipid/kernel-pridgenerator-service:1.2.0.1

mosipid/kernel-ridgenerator-service:1.2.0.1

mosipid/kernel-syncdata-service:1.2.1.0

mosipid/kernel-keymanager-service:1.2.0.1

mosipid/artifactory-server:0.10.0-INJI

mosipid/esignet:1.4.1

mosipid/inji-certify:0.10.0

mosipid/oidc-ui:1.4.1

mosipid/mock-identity-system:0.9.3

mosipid/mock-relying-party-service:0.9.3

mosipid/mock-relying-party-ui:0.9.3

mosipid/mock-smtp:1.0.0

mosipid/mosip-file-server:1.2.0.1

mosipid/artifactory-server:0.10.0-INJI

mosipid/mock-relying-party-service:0.9.3

mosipid/mock-relying-party-ui:0.9.3

mosipid/esignet:1.4.1

mosipid/inji-certify:0.10.0

mosipid/oidc-ui:1.4.1

mosipid/dsl-packetcreator:1.2.0.1

mosipid/dsl-packetcreator:1.2.0.1

mosipdev/dsl-packetcreator:develop

mosipdev/dsl-packetcreator:develop

mosipid/commons-packet-service:1.2.0.1

mosipid/pmp-ui:1.2.0.2

mosipid/partner-management-service:1.2.1.0

mosipid/policy-management-service:1.2.1.0

mosipid/pre-registration-application-service:1.2.0.1

mosipid/pre-registration-batchjob:1.2.0.1

mosipid/pre-registration-booking-service:1.2.0.1

mosipid/pre-registration-captcha-service:1.2.0.1

mosipid/pre-registration-datasync-service:1.2.0.1

mosipid/pre-registration-ui:1.2.0.1

mosipid/print:1.2.0.1

mosipid/registration-client:1.2.0.2

mosipid/registration-processor-common-camel-bridge:1.2.0.1

mosipid/registration-processor-stage-group-1:1.2.0.1

mosipid/registration-processor-stage-group-2:1.2.0.1

mosipid/registration-processor-stage-group-3:1.2.0.1

mosipid/registration-processor-stage-group-4:1.2.0.1

mosipid/registration-processor-stage-group-5:1.2.0.1

mosipid/registration-processor-stage-group-6:1.2.0.1

mosipid/registration-processor-stage-group-7:1.2.0.1

mosipid/registration-processor-notification-service:1.2.0.1

mosipid/registration-processor-dmz-packet-server:1.2.0.1

mosipid/registration-processor-reprocessor:1.2.0.1

mosipid/registration-processor-registration-status-service:1.2.0.1

mosipid/registration-processor-registration-transaction-service:1.2.0.1

mosipid/registration-processor-workflow-manager-service:1.2.0.1

mosipid/resident-service:1.2.1.0

mosipid/resident-ui:0.9.0

mosipid/artifactory-server:0.10.0-INJI

sunbird-rc-credential-schema:v2.0.0-rc3

sunbird-rc-credentials-service:v2.0.0-rc3

sunbird-rc-identity-service:v2.0.0-rc3

sunbird-rc-core:v1.0.0

mosipid/esignet:1.4.1

mosipid/inji-certify:0.10.0

mosipid/oidc-ui:1.4.1

mosipid/websub-service:1.2.0.1

mosipid/consolidator-websub-service:1.2.0.1

Devices used for Testing

Vivo Y73 with Android 12 BLE 5.0

SS Galaxy A03 core with Android 11 BLE 4.2

iPhone 11 with i-OS 15 BLE 5.0

iPhone 8 with i-OS 16 BLE 5.0

iPhone 7 with i-OS 15.6 BLE 4.2

Redmi k20 pro with Android 13 BLE 5.0

Detailed Test Metrics

Below are the detailed test metrics by performing manual/automation testing. The project metrics are derived from Defect density, Test coverage, Test execution coverage, test tracking and efficiency.

[The various metrics that assist in test tracking and efficiency are as follows:

  • Passed Test Cases Coverage: It measures the percentage of passed test cases. (Number of tests passed / Total number of tests executed) x 100

  • Failed Test Case Coverage: It measures the percentage of all the failed test cases. (Number of failed tests / Total number of test cases executed) x 100

Version 0.15.0

Release Name: Inji Wallet 0.15.0

Release Type: Developer

Release Date: 18th Feb, 2025

Overview:

We are excited to announce the release of Inji Wallet Version 0.15.0! This update brings significant improvements in credential handling, security enhancements, and expanded format support. Here are the key highlights of this release:

Key Highlights:

  • PixelPass - CWT Decode: Enhanced PixelPass capabilities with support for CWT decoding, increasing versatility in credential handling.

  • Support for Different VC Formats: Inji Wallet now supports various verifiable credential formats, including mDoc, mDL, and CBOR, broadening interoperability.

  • W3C-Based Wallet Rendering: Improved rendering for W3C-based verifiable credentials, ensuring seamless display and user experience.

  • Key Generation Enhancements: Added support for ECC (R1 & K1) and Ed25519 key generation, enhancing cryptographic flexibility.

  • OpenID4VP (Online Sharing): Implemented support for OpenID4VP, enabling secure online credential sharing.

  • VC Verification SDK Updates:

    • Added RSA support for Kotlin and Java SDKs.

    • Added EdDSA support for Kotlin and Java SDKs.

Features Covered:

  • PixelPass Enhancements:

    • Added CWT decoding capabilities to enhance credential handling.

  • Expanded VC Format Support:

    • Support for mDoc, mDL, and CBOR formats to improve compatibility across different ecosystems.

  • W3C Rendering:

    • Improved rendering logic for better user interface consistency and compliance with W3C standards.

  • Cryptographic Key Generation:

    • ECC (R1 & K1) key generation.

    • Ed25519 key generation for improved security.

  • OpenID4VP Implementation:

    • Enabled online sharing of credentials via OpenID4VP protocol.

  • VC Verification SDK Enhancements:

    • RSA support added for Kotlin and Java SDKs.

    • EdDSA support added for Kotlin and Java SDKs.

    • Swift SDK support removed.

Repository Released

Compatible Modules

Known Issues

Bug Fixes

Test Report

Testing Scope

The scope of testing is to verify fitment to the specification from the perspective of

  • Functionality

  • Deployability

  • Configurability

  • Customizability

Verification is performed not only from the end user perspective but also from the System Integrator (SI) point of view. Hence Configurability and Extensibility of the software is also assessed. This ensures the readiness of software for use in multiple countries. Since MOSIP is an "API First" product platform, Verification scope required comprehensive automation testing for all the MOSIP APIs. An automation Test Rig is created for the same.

The Inji testing scope revolves around the following flows:

  • Biometric unlock

  • Passcode unlock

  • VC download via MOSIP

  • VC download via esignet

  • VC download via Sunbird

  • Pinning a VC

  • Normal VC sharing with VID

  • Deleting VC

  • Face Auth on Resident's phone with VID

  • Multi language support

  • Credential registry

  • Backup and restore

  • Wallet binding

  • Deep link navigation

  • OpenID4VP

  • QR code Login

  • Key Management

  • Logout

Test Approach

Persona based approach has been adopted to perform the IV&V, by simulating test scenarios that resemble a real-time implementation.

A Persona is a fictional character/user profile created to represent a user type that might use a product/or a service in a similar way. Persona based testing is a software testing technique that puts software testers in the customer's shoes, assesses their needs from the software and thereby determines use cases/scenarios that the customers will execute. The persona needs may be addressed through any of the following.

  • Functionality

  • Deployability

  • Configurability

  • Customizability

The verification methods may differ based on how the need was addressed.

For regression check, "MOSIP Test Rig" - an automation testing suite - which is indigenously designed and developed for supporting persona-based testing. MOSIP Test Rig covers the end-to-end test execution and reporting. The end-to-end functional test scenarios are written starting from pre-registration to creation of packet in registration center, processing the packet through the registration processor, generating UIN and authenticating identity using IDA through various permutation and combinations of cases being covered. MOSIP Test Rig will be an open-source artifact which can also be enhanced and used by countries to validate the SI deliveries before going live. Persona classes include both negative and positive personas. Negative persona classes include users like Bribed Registration Office, Malicious Insider etc. The needs of positive persona classes must be met, whereas the needs of negative persona classes must be effectively restricted by the software.

Verified configuration

Verification is performed on various configurations as mentioned below:

  • Default configuration - with 3 Lang

  • Virtual countries

    • 1 Lang configuration

    • 2 Lang configuration

    • 3 Lang configuration

Feature Health

On Android Device:

On iOS Device:

Test execution statistics

Functional test results by modules

Below are the test metrics by performing functional testing using mock MDS and mock ABIS. The process followed was black box testing which based its test cases on the specifications of the software component under test. The functional test was performed in combination of individual module testing as well as integration testing. Test data were prepared in line with the user stories. Expected results were monitored by examining the user interface. The coverage includes GUI testing, System testing, End-To-End flows across multiple languages and configurations. The testing cycle included simulation of multiple identity schema and respective UI schema configurations.

Test Rate: 100% With Pass Rate: 90%

Here is the detailed breakdown of metrics for each module:

API verification results by modules

The below section provides details on API test metrics by executing MOSIP functional automation Framework. All external API test executions were performed at module level isolation. Each end point is tested with the test data and expectations of each test data are mapped to assert the test case.

Test Rate: 81% With Pass Rate: 100%

UI Automation results

The below section provides details on UI Automation by executing MOSIP functional automation Framework.

Test Rate: 100% With Pass Rate: 100%

Here is the detailed breakdown of metrics:

Test Rig Details:

Functional and test rig code base branch which is used for the above metrics is:

Hash Tag: SHA: sha256:01511fa220941a03f760550f3373ecc273dd6222000ab8030097858ece94ae29

VC Verifier Library Verification

Test Rate: 100% With Pass Rate: 79.38%

Testing with various device combinations

Below are the test metrics by performing VC Sharing functionality on various device combinations

Test Rate: 100% With Pass Rate: 100%

Device and Component Details:

Tested with Inji components

  • mosipqa/artifactory-server:0.10.x-INJI

  • mosipid/inji-certify:0.10.0

  • mosipid/inji-certify:0.10.0

  • mosipqa/inji-verify-service:develop

  • mosipqa/inji-verify-ui:develop

  • mosipid/data-share-service:1.3.0-beta.2

  • mosipqa/inji-web:0.11.0

  • mosipqa/mimoto:0.15.x

  • mosipqa/artifactory-server:0.10.x-INJI

  • mosipqa/inji-certify-with-plugins:develop

  • mosipqa/inji-certify-with-plugins:develop

  • mosipqa/inji-certify-with-plugins:develop

  • mosipqa/inji-certify-with-plugins:develop

  • mosipqa/inji-certify-with-plugins:develop

  • mosipqa/inji-certify-with-plugins:develop

  • mosipqa/dsl-packetcreator:develop

  • mosipdev/dsl-packetcreator:develop

  • mosipqa/inji-certify-with-plugins:develop

Tested with MOSIP components

  • mosipid/mock-abis:1.2.0.2

  • mosipid/mock-mv:1.2.0.2

  • mosipid/hotlist-service:1.2.1.0

  • nginxinc/nginx-unprivileged:1.21.6-alpine

  • mosipid/admin-service:1.2.1.0

  • mosipid/admin-ui:1.2.0.1

  • mosipid/artifactory-server:1.4.1-ES

  • mosipid/authentication-demo-service:1.2.0.1

  • mosipid/authentication-demo-service:1.2.0.1

  • mosipdev/authentication-demo-service:develop

  • mosipdev/authentication-demo-service:develop

  • mosipid/biosdk-server:1.2.0.1

  • mosipqa/biosdk-server:develop

  • mosipdev/captcha-validation-service:develop

  • rancher/fleet-agent:v0.7.0

  • mosipid/data-share-service:1.2.0.1

  • mosipid/digital-card-service:1.2.0.1

  • mosipid/authentication-service:1.2.1.0

  • mosipid/authentication-internal-service:1.2.1.0

  • mosipid/authentication-otp-service:1.2.1.0

  • mosipid/credential-service:1.2.1.0

  • mosipdev/credential-request-generator:MOSIP-34070-v1210

  • mosipdev/id-repository-identity-service:MOSIP-34070-v1210

  • mosipid/id-repository-vid-service:1.2.1.0

  • mosipid/inji-verify:0.10.0

  • mosipid/data-share-service:1.3.0-beta.2

  • mosipid/inji-web:0.11.0

  • mosipid/mimoto:0.15.0

  • mosipid/kernel-auditmanager-service:1.2.0.1

  • mosipid/kernel-auth-service:1.2.0.1

  • mosipid/kernel-idgenerator-service:1.2.0.1

  • mosipid/kernel-masterdata-service:1.2.1.0

  • mosipid/kernel-notification-service:1.2.0.1

  • mosipid/kernel-otpmanager-service:1.2.0.1

  • mosipid/kernel-pridgenerator-service:1.2.0.1

  • mosipid/kernel-ridgenerator-service:1.2.0.1

  • mosipid/kernel-syncdata-service:1.2.1.0

  • mosipid/kernel-keymanager-service:1.2.0.1

  • mosipid/artifactory-server:0.10.0-INJI

  • mosipid/esignet:1.4.1

  • mosipid/inji-certify:0.10.0

  • mosipid/oidc-ui:1.4.1

  • mosipid/mock-identity-system:0.9.3

  • mosipid/mock-relying-party-service:0.9.3

  • mosipid/mock-relying-party-ui:0.9.3

  • mosipid/mock-smtp:1.0.0

  • mosipid/mosip-file-server:1.2.0.1

  • mosipid/artifactory-server:0.10.0-INJI

  • mosipid/mock-relying-party-service:0.9.3

  • mosipid/mock-relying-party-ui:0.9.3

  • mosipid/esignet:1.4.1

  • mosipid/inji-certify:0.10.0

  • mosipid/oidc-ui:1.4.1

  • mosipid/dsl-packetcreator:1.2.0.1

  • mosipid/dsl-packetcreator:1.2.0.1

  • mosipdev/dsl-packetcreator:develop

  • mosipdev/dsl-packetcreator:develop

  • mosipid/commons-packet-service:1.2.0.1

  • mosipid/pmp-ui:1.2.0.2

  • mosipid/partner-management-service:1.2.1.0

  • mosipid/policy-management-service:1.2.1.0

  • mosipid/pre-registration-application-service:1.2.0.1

  • mosipid/pre-registration-batchjob:1.2.0.1

  • mosipid/pre-registration-booking-service:1.2.0.1

  • mosipid/pre-registration-captcha-service:1.2.0.1

  • mosipid/pre-registration-datasync-service:1.2.0.1

  • mosipid/pre-registration-ui:1.2.0.1

  • mosipid/print:1.2.0.1

  • mosipid/registration-client:1.2.0.2

  • mosipid/registration-processor-common-camel-bridge:1.2.0.1

  • mosipid/registration-processor-stage-group-1:1.2.0.1

  • mosipid/registration-processor-stage-group-2:1.2.0.1

  • mosipid/registration-processor-stage-group-3:1.2.0.1

  • mosipid/registration-processor-stage-group-4:1.2.0.1

  • mosipid/registration-processor-stage-group-5:1.2.0.1

  • mosipid/registration-processor-stage-group-6:1.2.0.1

  • mosipid/registration-processor-stage-group-7:1.2.0.1

  • mosipid/registration-processor-notification-service:1.2.0.1

  • mosipid/registration-processor-dmz-packet-server:1.2.0.1

  • mosipid/registration-processor-reprocessor:1.2.0.1

  • mosipid/registration-processor-registration-status-service:1.2.0.1

  • mosipid/registration-processor-registration-transaction-service:1.2.0.1

  • mosipid/registration-processor-workflow-manager-service:1.2.0.1

  • mosipid/resident-service:1.2.1.0

  • mosipid/resident-ui:0.9.0

  • mosipid/artifactory-server:0.10.0-INJI

  • sunbird-rc-credential-schema:v2.0.0-rc3

  • sunbird-rc-credentials-service:v2.0.0-rc3

  • sunbird-rc-identity-service:v2.0.0-rc3

  • sunbird-rc-core:v1.0.0

  • mosipid/esignet:1.4.1

  • mosipid/inji-certify:0.10.0

  • mosipid/oidc-ui:1.4.1

  • mosipid/websub-service:1.2.0.1

  • mosipid/consolidator-websub-service:1.2.0.1

Docker Compose Testing Components

  • mosipqa/inji-certify:0.10.x

  • mosipqa/inji-web:release-0.11.x

  • mosipqa/mimoto:release-0.15.x

Devices Used For Testing

  • Vivo Y73 with Android 12 BLE 5.0

  • SS Galaxy A03 core with Android 11 BLE 4.2

  • iPhone 11 with i-OS 15 BLE 5.0

  • iPhone 8 with i-OS 16 BLE 5.0

  • iPhone 7 with i-OS 15.6 BLE 4.2

  • Redmi 7A Android 10 BLE 4.2

  • Redmi note 10 lite Android 10 BLE 5.0

  • Redmi K20 pro Android 11 BLE 5.0

Detailed Test Metrics

Below are the detailed test metrics by performing manual/automation testing. The project metrics are derived from Defect density, Test coverage, Test execution coverage, test tracking and efficiency.

The various metrics that assist in test tracking and efficiency are as follows:

  • Passed Test Cases Coverage: It measures the percentage of passed test cases. (Number of tests passed / Total number of tests executed) x 100

  • Failed Test Case Coverage: It measures the percentage of all the failed test cases. (Number of failed tests / Total number of test cases executed) x 100

Execution Test Summary

  • Testing is conducted on build version mimoto 0.15.0 with ESignet 1.4.1.

  • Expired VC is tested for mock through docker compose.

  • For deep link navigation, testing is performed against build version ESignet 1.5.0.

Test Report

Testing Scope

The scope of testing is to verify fitment to the specification from the perspective of

  • Functionality

  • Deployability

  • Configurability

  • Customizability

Verification is performed not only from the end user perspective but also from the System Integrator (SI) point of view. Hence Configurability and Extensibility of the software is also assessed. This ensures the readiness of software for use in multiple countries. Since MOSIP is an “API First” product platform, Verification scope required comprehensive automation testing for all the MOSIP APIs. An automation Test Rig is created for the same.

The Inji testing scope revolves around the following flows:

  • Biometric unlock

  • Passcodes unlock

  • VC download via MOSIP

  • VC download via e-signet

  • VC downloads via Sunbird

  • Pinning a VC

  • Normal VC sharing with VID

  • Deleting VC

  • Face Auth on Resident's phone with VID

  • Multi language support

  • Credential registry

  • Backup and restore

  • Wallet binding

  • Deep link navigation

  • OpenID4VP

  • QR code Login

  • Key Management

  • Logout

Test Approach

Persona based approach has been adopted to perform the IV&V, by simulating test scenarios that resemble real-time implementation.

A Persona is a fictional character/user profile created to represent a user type that might use a product/or a service in a similar way. Persona based testing is a software testing technique that puts software testers in the customer's shoes, assesses their needs from the software and thereby determines use cases/scenarios that the customers will execute. The persona needs may be addressed through any of the following.

  • Functionality

  • Deployability

  • Configurability

  • Customizability

The verification methods may differ based on how the need was addressed.

For regression check, “MOSIP Test Rig” - an automation testing suite - which is indigenously designed and developed for supporting persona-based testing. MOSIP Test Rig covers the end-to-end test execution and reporting. The end-to-end functional test scenarios are written starting from pre-registration to creation of packet in registration center, processing the packet through the registration processor, generating UIN and authenticating identity using IDA through various permutation and combinations of cases being covered. MOSIP Test Rig will be an open-source artifact which can also be enhanced and used by countries to validate the SI deliveries before going live. Persona classes include both negative and positive personas. Negative persona classes include users like Bribed Registration Office, Malicious Insider etc. The needs of positive persona classes must be met, whereas the needs of negative persona classes must be effectively restricted by the software.

Verified configuration

Verification is performed on various configurations as mentioned below

  • Default configuration with 1 language (English).

  • Tested the application with languages including Filipino, Arabic, Kannada, Hindi and Tamil.

Feature Health

On Android Device:

On iOS Device:

Test execution statistics

Functional test results by modules

Below are the test metrics by performing functional testing using mock MDS and mock ABIS. The process followed was black box testing which based its test cases on the specifications of the software component under test. The functional test was performed in combination with individual module testing as well as integration testing. Test data were prepared in line with the user stories. Expected results were monitored by examining the user interface. The coverage includes GUI testing, System testing, End-To-End flows across multiple languages and configurations. The testing cycle included simulation of multiple identity schema and respective UI schema configurations.

Here is the detailed breakdown of metrics for each module:

API verification results by modules

The below section provides details on API test metrics by executing MOSIP functional automation Framework. All external API test executions were performed at module level isolation. Each end point is tested with the test data and expectations of each test data are mapped to assert the test case.

UI Automation results

The below section provides details on Ui Automation by executing MOSIP functional automation Framework.

Here is the detailed breakdown of metrics

Functional and test rig code base branch which is used for the above metrics is:

Hash Tag: sha256:337140dd37a9203ae551742ef1a7ccabc7986698f5e7c8cb80266c9fedeffe15

Testing with various device combinations

Below are the test metrics by performing VC Sharing functionality on various device combinations

Device and Component Details:

Tested with Inji Components (qa-inji1)

Tested with Components - Released Environment

Devices Used For Testing

Detailed Test Metrics

Below are the detailed test metrics by performing manual/automation testing. The project metrics are derived from Defect density, Test coverage, Test execution coverage, test tracking and efficiency.

The various metrics that assist in test tracking and efficiency are as follows:

Passed Test Cases Coverage: It measures the percentage of passed test cases. (Number of tests passed / Total number of tests executed) x 100

Failed Test Case Coverage: It measures the percentage of all failed test cases. (Number of failed tests / Total number of test cases executed) x 100

Execution Test Summary

  • Well known story verification was performed against the collab env.

  • Other story verification performed against released env.

Welcome to the Inji Mobile Guide tailored specifically for our Collab Environment! This guide is designed to assist you in setting up and configuring the wallet app in our sandbox Collab environment. By following the steps outlined in this guide, you will be able to smoothly install and utilize the Inji Wallet app, empowering you to explore its features and functionalities effectively. Whether you're a Developer, System Integrator, or an enthusiast eager to dive into the world of digital identity, this guide will provide you with the necessary information to get started with Inji Wallet in our environment. Let's begin this journey of seamless setup and exploration!

If you are using an Android smartphone, click to get the Inji Mobile apk file for installation.

If you are using an iOS device, click get access to the Inji Wallet app on test flight.

Fill out the here and we will generate the demo credentials, which you can use subsequently on the Inji Mobile app to download and share Verifiable Credentials (VCs).

For a step-by-step guide on how to install the Inji Mobile application, click .

You can visit this for more detailed instructions in the guide.

To learn how to download VCs using the Unique Identification Number (UIN) or Virtual ID (VID) feature, click . Refer to the section titled Download credentials using UIN / VID feature in the guide .

Refer for step-wise download.

To understand the process of sharing credentials from the Resident app to the Verifier app, click .

Discover how to share credentials with the added security of face verification by clicking .

To understand the steps to generate your own Insurance credentials, refer .

To generate a QR Code using PixelPass library, please refer to the steps .'

The above generated QR Code can be verified using Inji Verify, by uploading the QR Code. To know more, please click .

Watch this informative video titled for a visual walkthrough of the features.

Click for detailed information about Inji Wallet.

Navigate to .

After installing the application for the first time, the user will be asked to set up unlock method for it. The app supports biometric or PIN-based locks. For more details, refer to the .

This method of VC download illustrates the OpenID4VCI method of download using UIN / VID issued to the resident. In this, eSignet plays the authentication and authorisation end point to connect to the credential provider (Reference Implementation: MOSIP). To understand more about Onboarding Mimoto (Inji BFF) as an OIDC client to support credential issuance from any issuer who support OpenID4VCI protocol refer .

This method of VC download illustrates the OpenID4VCI method of download using KBI (Knowledge Based Identification). In this, eSignet plays the authentication, authorisation and credential issuance end point to connect to the credential provider. To understand more about Onboarding Mimoto (Inji BFF) as an OIDC client to support credential issuance from any issuer who supports OpenID4VCI protocol, refer .

The credentials are shared in a peer-to-peer model with the verifier application. The data exchange between devices is done using the BLE Protocol. For more information, refer to documentation.

Create loader_path folder under the docker-compose directory and download the kernel auth adapter(kernel-auth-adapter-1.2.0.1.jar) from .

Create certs folder in the same directory and create OIDC client. Add key in oidckeystore.p12 and copy this file under certs folder. Refer to create client

Replace http://localhost:8099 by public domain at following places

To install the Inji Wallet app on an Android smartphone, click to get the Inji Wallet apk file for installation.

Follow the steps mentioned .

Refer to know more about how you can explore 'Inji Wallet' in our 'sandbox collab environment'.

There are no new known issues introduced in this release. For existing known issues, refer to

client_id_scheme supported and for more details link with Readme of 0.2.x branch .

Below is the list of issues. To read in detail click ..

Below is the of fixes as part of the 0.16.0 release:

for iOS development

Configure Expo, refer .

Configure Android SDK, refer .

To address this, please visit the .

Install Java JDK, refer .

Install Android SDK, refer .

Install Node, refer .

Update mimoto url as https://api.collab.mosip.net

Update esignet host as https://esignet.collab.mosip.net

To deploy mimoto in local refer

Follow the to configure Node & npm, Expo and generate debug keystore

Configure XCode, refer .

iOS TestFlight Republish: The previous TestFlight build for release- expired due to the 90-day limit. This patch enables republishing without requiring additional changes to the release branch.

The list of known issues can be found .

Below is the list of issues. To read in detail click .

Below is the of fixes as part of the 0.15.0 release:

Github link for the xls file is

Test cases
Component Name
Version/Branch
Component Name
Version/Branch
Device Name
Operating System
BLE Version

Github link for the xls file is

Inji Wallet
Collab
here
here
form
here
section
here
here
here
Inji Wallet Product Demo to Download and Share VC
here
Community
End User Guide
here
here
Tuvali
here
here
ngrok
here
here
Inji Wallet Collab Guide
previous release notes.
Feature Documentation
Integration Guides
User Guide
QA Report
API Documentation
inji-openid4vp/README.md at release-0.2.x · mosip/inji-openid4vp
known
here
list
Feature Documentation
Integration Guides
User Guide
QA Report
API Documentation
Gradle
Java 17
Expo
Android SDK
Node
XCode
here
here
website
here
here
here
here
here
here
here
here
here
here
here
Steps

Total

Passed

Failed

Skipped

110

110

0

0

Platform

Category

Total

Passed

Failed

Skipped

iOS

Test cases

52

52

0

0

Platform

Category

Total

Passed

Failed

Skipped

Android

Test cases

58

58

0

0

Total

Passed

Failed

Skipped (N/A)

2942

2659

283

0

Module

Total

Passed

Failed

Skipped (N/A)

On Android Device

1562

1408

154

0

On iOS Device

1380

1251

129

0

Total

Passed

Failed

Ignored

Skipped

176

143

0

33

0

Total

Passed

Failed

Skipped

112

112

0

0

Module

Total

Passed

Failed

Skipped

Android

60

60

0

0

iOS

52

52

0

0

Total

Passed

Failed

Skipped

97

77

20

0

Total

Passed

Failed

Skipped

192

192

0

0

Total

Passed

Failed

Skipped (N/A)

3163

2819

344

0

Test Rate: 100% With Pass Rate: 89%

On Android Device

Total

1675

Passed

1502

Failed

173

Skipped (N/A)

0

On iOS Device

Total

1488

Passed

1317

Failed

171

Skipped (N/A)

0

Total

Passed

Failed

Ignored

Skipped

176

143

0

33

0

Test Rate: 100% With Pass Rate: 100%

Total

Passed

Failed

Skipped

122

122

0

0

Test Rate: 100% With Pass Rate: 100%

Test cases

Android

Total

64

Passed

64

Failed

0

Skipped

0

iOS

Total

58

Passed

58

Failed

0

Skipped

0

Total

Passed

Failed

Skipped

192

192

0

0

Test Rate: 100% With Pass Rate: 100%

mosipdev/dsl-orchestrator

develop

mosipdev/dsl-packetcreator

develop

mosipid/data-share-service

1.3.0-beta.2

mosipqa/dsl-orchestrator

develop

mosipqa/dsl-packetcreator

develop

mosipqa/inji-certify-with-plugins

0.11.x

mosipqa/inji-verify-service

0.11.x

mosipqa/inji-verify-service

MOSIP-CONNECT-2025

mosipqa/inji-verify-service

develop

mosipqa/inji-verify-ui

0.11.x

mosipqa/inji-verify-ui

MOSIP-CONNECT-2025

mosipqa/inji-verify-ui

develop

mosipqa/inji-web

0.12.x

mosipqa/kernel-config-server

develop

mosipqa/keycloak-init

develop

mosipqa/mimoto

0.17.x

mosipqa/postgres-init

develop

mosipdev/authentication-demo-service

develop

mosipdev/captcha-validation-service

develop

mosipdev/credential-request-generator

MOSIP-34070-v1210

mosipdev/dsl-orchestrator

develop

mosipdev/dsl-packetcreator

develop

mosipdev/id-repository-identity-service

MOSIP-34070-v1210

mosipdev2/dsl-orchestrator

develop

mosipdev2/dsl-packetcreator

develop

mosipid/admin-service

1.2.1.0

mosipid/admin-ui

1.2.0.1

mosipid/artifactory-server

0.10.0-INJI

mosipid/artifactory-server

1.4.1-ES

mosipid/authentication-demo-service

1.2.0.1

mosipid/authentication-internal-service

1.2.1.0

mosipid/authentication-otp-service

1.2.1.0

mosipid/authentication-service

1.2.1.0

mosipid/biosdk-server

1.2.0.1

mosipid/commons-packet-service

1.2.0.1

mosipid/compliance-toolkit-batch-job

1.4.0

mosipid/compliance-toolkit-service

1.4.0

mosipid/compliance-toolkit-ui

1.4.0

mosipid/consolidator-websub-service

1.2.0.1

mosipid/credential-service

1.2.1.0

mosipid/data-share-service

1.2.0.1

mosipid/data-share-service

1.3.0-beta.2

mosipid/digital-card-service

1.2.0.1

mosipid/dsl-orchestrator

1.2.0.1

mosipid/dsl-packetcreator

1.2.0.1

mosipid/esignet

1.4.1

mosipid/hotlist-service

1.2.1.0

mosipid/id-repository-vid-service

1.2.1.0

mosipid/inji-certify

0.10.0

mosipid/inji-certify

0.10.1

mosipid/inji-verify

0.10.0

mosipid/inji-web

0.11.1

mosipid/kernel-auditmanager-service

1.2.0.1

mosipid/kernel-auth-service

1.2.0.1

mosipid/kernel-idgenerator-service

1.2.0.1

mosipid/kernel-keymanager-service

1.2.0.1

mosipid/kernel-masterdata-service

1.2.1.0

mosipid/kernel-notification-service

1.2.0.1

mosipid/kernel-otpmanager-service

1.2.0.1

mosipid/kernel-pridgenerator-service

1.2.0.1

mosipid/kernel-ridgenerator-service

1.2.0.1

mosipid/kernel-syncdata-service

1.2.1.0

mosipid/mimoto

0.15.0

mosipid/mock-abis

1.2.0.2

mosipid/mock-identity-system

0.10.0

mosipid/mock-mv

1.2.0.2

mosipid/mock-relying-party-service

0.10.0

mosipid/mock-relying-party-ui

0.10.0

mosipid/mock-smtp

1.0.0

mosipid/mosip-file-server

1.2.0.1

mosipid/oidc-ui

1.4.1

mosipid/partner-management-service

1.2.1.0

mosipid/partner-onboarder

1.2.0.1

mosipid/pmp-ui

1.2.0.2

mosipid/policy-management-service

1.2.1.0

mosipid/pre-registration-application-service

1.2.0.1

mosipid/pre-registration-batchjob

1.2.0.1

mosipid/pre-registration-booking-service

1.2.0.1

mosipid/pre-registration-captcha-service

1.2.0.1

mosipid/pre-registration-datasync-service

1.2.0.1

mosipid/pre-registration-ui

1.2.0.1

mosipid/print

1.2.0.1

mosipid/registration-client

1.2.0.2

mosipid/registration-processor-common-camel-bridge

1.2.0.1

mosipid/registration-processor-dmz-packet-server

1.2.0.1

mosipid/registration-processor-notification-service

1.2.0.1

mosipid/registration-processor-registration-status-service

1.2.0.1

mosipid/registration-processor-registration-transaction-service

1.2.0.1

mosipid/registration-processor-reprocessor

1.2.0.1

mosipid/registration-processor-stage-group-1

1.2.0.1

mosipid/registration-processor-stage-group-2

1.2.0.1

mosipid/registration-processor-stage-group-3

1.2.0.1

mosipid/registration-processor-stage-group-4

1.2.0.1

mosipid/registration-processor-stage-group-5

1.2.0.1

mosipid/registration-processor-stage-group-6

1.2.0.1

mosipid/registration-processor-stage-group-7

1.2.0.1

mosipid/registration-processor-workflow-manager-service

1.2.0.1

mosipid/resident-service

1.2.1.0

mosipid/resident-ui

0.9.0

mosipid/websub-service

1.2.0.1

mosipqa/activemq-artemis

1.1.5

mosipqa/biosdk-server

develop

mosipqa/mosip-artemis-keycloak

develop

Vivo Y73

Android 12

BLE 5.0

Samsung Galaxy A03 Core

Android 11

BLE 4.2

iPhone 11

iOS 15

BLE 5.0

iPhone 8

iOS 16

BLE 5.0

iPhone 7

iOS 15.6

BLE 4.2

Redmi 7A

Android 10

BLE 4.2

Redmi Note 10 Lite

Android 10

BLE 5.0

Redmi K20 Pro

Android 11

BLE 5.0

LogoGitHub - mosip/inji-walletGitHub

Test Report

Testing Scope

The scope of testing is to verify fitment to the specification from the perspective of:

  • Functionality Sanity for iOS

  • Automation for iOS

  • Automation Mimoto API

Verification is performed not only from the end user perspective but also from the System Integrator (SI) point of view. Hence Configurability and Extensibility of the software is also assessed. This ensures the readiness of software for use in multiple countries. Since MOSIP is an "API First" product platform, Verification scope required comprehensive automation testing for all the MOSIP APIs. An automation Test Rig is created for the same.

The Inji testing scope revolves around the following flows:

  • Biometric unlock

  • Passcode unlock

  • VC download via MOSIP

  • VC download via Sunbird

  • Pinning a VC

  • Normal VC sharing

  • Deleting VC

  • Face Auth on Resident's phone

  • Multi language support

  • Backup and restore

  • Wallet binding

  • QR code Login

  • Logout

Test Approach

Persona based approach has been adopted to perform the IV&V, by simulating test scenarios that resemble a real-time implementation.

A Persona is a fictional character/user profile created to represent a user type that might use a product/or a service in a similar way. Persona based testing is a software testing technique that puts software testers in the customer's shoes, assesses their needs from the software and thereby determines use cases/scenarios that the customers will execute. The persona needs may be addressed through any of the following.

  • Functionality Sanity for iOS

  • Automation for iOS UI

  • Automation Mimoto API

The verification methods may differ based on how the need was addressed.

For regression check, "MOSIP Test Rig" - an automation testing suite - which is indigenously designed and developed for supporting persona-based testing. MOSIP Test Rig covers the end-to-end test execution and reporting. The end-to-end functional test scenarios are written starting from pre-registration to creation of packet in registration center, processing the packet through the registration processor, generating UIN and authenticating identity using IDA through various permutation and combinations of cases being covered. MOSIP Test Rig will be an open-source artifact which can also be enhanced and used by countries to validate the SI deliveries before going live. Persona classes include both negative and positive personas. Negative persona classes include users like Bribed Registration Office, Malicious Insider etc. The needs of positive persona classes must be met, whereas the needs of negative persona classes must be effectively restricted by the software.

API verification results by modules

The below section provides details on API test metrics by executing MOSIP functional automation Framework. All external API test executions were performed at module level isolation. Each end point is tested with the test data and expectations of each test data are mapped to assert the test case.

Total

Passed

Failed

Skipped

141

134

4

3

Test Rate: 97.97% , With Pass Rate: 97.10%

UI Automation results

The below section provides details on Ui Automation by executing MOSIP functional automation Framework.

Here is the detailed breakdown of metrics

IOS

Platform

Category

Test cases

iOS

Total

48

Passed

48

Failed

0

Skipped

0

Test Rate: 100% With Pass Rate: 100%

Android

Platform

Category

Test cases

Android

Total

60

Passed

60

Failed

0

Skipped

0

Test Rate: 100% With Pass Rate: 100%

Also Performed Manual Sanity with the Android APK, below is the updated result of the same:

  1. Mosip VC download is working

  2. Health insurance VC is working

  3. Life insurance VC is working

  4. Remove VC is working

  5. Pinning VC is working

  6. Share and share with selfie is working

  7. QR code login is working

  8. Backup and restore are working.

  9. Logout is working

  10. Unlock with biometric

Known issue:

  1. The Home page help icon link is not working for activation and remove VC, for these two links it is showing page not found.

Functional and test rig code base branch which is used for the above metrics is:

Hash Tag:

SHA: sha256: 58e77d26fc1b98884c11638bba70c128d27994e3

Device and Component Details

Tested with Components

mosipid/esignet:1.4.1

mosipqa/mimoto:develop

Tuvali Version - 0.5.1

Tested with MOSIP Components

mosipid/admin-service:1.2.0.1-B1

mosipid/admin-ui:1.2.0.1-B1

mosipid/artifactory-server:1.4.1-ES

mosipid/authentication-internal-service:1.2.0.1

mosipid/authentication-otp-service:1.2.0.1

mosipid/authentication-service:1.2.0.1

mosipid/biosdk-server:1.2.0.1

mosipid/commons-packet-service:1.2.0.1-B1

mosipid/config-server:1.1.2

mosipid/consolidator-websub-service:1.2.0.1-B1

mosipid/credential-request-generator:1.2.0.1

mosipid/credential-service:1.2.0.1

mosipid/data-share-service:1.2.0.1-B2

mosipid/hotlist-service:1.2.0.1-B1

mosipid/id-repository-identity-service:1.2.0.1

mosipid/id-repository-salt-generator:1.2.0.1

mosipid/id-repository-vid-service:1.2.0.1

mosipid/kernel-auth-service:1.2.0.1-B2

mosipid/kernel-idgenerator-service:1.2.0.1-B1

mosipid/kernel-keymanager-service:1.2.0.1

mosipid/kernel-notification-service:1.2.0.1-B1

mosipid/kernel-otpmanager-service:1.2.0.1-B1

mosipid/kernel-pridgenerator-service:1.2.0.1-B1

mosipid/kernel-ridgenerator-service:1.2.0.1-B1

mosipid/kernel-salt-generator:1.2.0.1-B2

mosipid/kernel-syncdata-service:1.2.0.1-B1

mosipid/keycloak-init:1.2.0.1

mosipid/keycloak-init:1.2.0.1-B2

mosipid/keycloak-init:1.2.0.1-B3

mosipid/keys-generator:1.2.0.1-B3

mosipid/masterdata-loader:1.2.0.1-B4

mosipid/mock-abis:1.2.0.1-B2

mosipid/mock-mv:1.2.0.1-B2

mosipid/mock-relying-party-service:0.9.1

mosipid/mock-relying-party-service:0.9.2

mosipid/mock-relying-party-ui:0.9.1

mosipid/mock-relying-party-ui:0.9.2

mosipid/oidc-ui:1.4.1

mosipid/partner-management-service:1.2.0.1-B3

mosipid/partner-onboarder:1.2.0.1-B4

mosipid/pmp-ui:1.2.0.1-B1

mosipid/policy-management-service:1.2.0.1-B3

mosipid/postgres-init:1.2.0.1-B4

mosipid/pre-registration-application-service:1.2.0.1-B1

mosipid/pre-registration-batchjob:1.2.0.1-B1

mosipid/pre-registration-booking-service:1.2.0.1-B1

mosipid/pre-registration-captcha-service:1.2.0.1-B1

mosipid/pre-registration-datasync-service:1.2.0.1-B1

mosipid/pre-registration-ui:1.2.0.1-B1

mosipid/print:1.2.0.1-B1

mosipid/registration-client:1.2.0.1-B1

mosipid/registration-processor-common-camel-bridge:1.2.0.1-B1

mosipid/registration-processor-dmz-packet-server:1.2.0.1-B1

mosipid/registration-processor-notification-service:1.2.0.1-B1

mosipid/registration-processor-registration-status-service:1.2.0.1-B1

mosipid/registration-processor-registration-transaction-service:1.2.0.1-B1

mosipid/registration-processor-reprocessor:1.2.0.1-B1

mosipid/registration-processor-stage-group-1:1.2.0.1-B1

mosipid/registration-processor-stage-group-2:1.2.0.1-B1

mosipid/registration-processor-stage-group-3:1.2.0.1-B2

mosipid/registration-processor-stage-group-4:1.2.0.1-B1

mosipid/registration-processor-stage-group-5:1.2.0.1-B1

mosipid/registration-processor-stage-group-6:1.2.0.1-B1

mosipid/registration-processor-workflow-manager-service:1.2.0.1-B1

mosipid/signup-service:1.0.0

mosipid/signup-ui:1.0.0

mosipid/softhsm:v2

mosipid/websub-service:1.2.0.1-B1

mosipint/digital-card-service:release-1.2.0.1-DP

mosipint/kernel-masterdata-service:develop-DP

mosipint/registration-processor-stage-group-7:develop-DP

mosipint/resident-service:develop-DP

mosipint/resident-ui:develop-DP

mosipqa/artifactory-server:0.9.0-INJI

mosipqa/artifactory-server:1.4.1-ES

mosipqa/authentication-demo-service:develop

mosipqa/automationtests:develop

mosipqa/dsl-orchestrator:develop

mosipqa/dsl-packetcreator:develop

mosipqa/inji-certify:0.9.x

mosipqa/inji-web:develop

mosipqa/kernel-auditmanager-service:1.2.0.1

mosipqa/keycloak-init:develop

mosipqa/mock-identity-system:0.9.3

mosipqa/mock-relying-party-service:0.9.x

mosipqa/mock-relying-party-ui:0.9.x

mosipqa/mock-smtp:0.0.2

mosipqa/mosip-artemis-keycloak:develop

mosipqa/mosip-file-server:develop

mosipqa/postgres-init:develop

mosipqa/softhsm:v2

Devices Used For Testing

Vivo Y73 with Android 12 BLE 5.0

SS Galaxy A03 core with Android 11 BLE 4.2

iPhone 11 with i-OS 15 BLE 5.0

iPhone 8 with i-OS 16 BLE 5.0

iPhone 7 with i-OS 15.6 BLE 4.2

Redmi 7A Android 10 BLE 4.2

Redmi note 10 lite Android 10 BLE 5.0

redmi K20 pro Android 11 BLE 5.0

Detailed Test Metrics

Below are the detailed test metrics by performing manual/automation testing. The project metrics are derived from Defect density, Test coverage, Test execution coverage, test tracking and efficiency.

The various metrics that assist in test tracking and efficiency are as follows:

  • Passed Test Cases Coverage: It measures the percentage of passed test cases. (Number of tests passed / Total number of tests executed) x 100

  • Failed Test Case Coverage: It measures the percentage of all the failed test cases. (Number of failed tests / Total number of test cases executed) x 100

0.15.1
v0.2.1
v0.6.1
0.5.0
1.5.0
0.10.1
v0.10.0
v0.5.1
v0.5.0
v0.15.2
v0.1.0
v0.6.0
v0.3.0
v0.3.0
v0.2.0
v0.1.0
INJIMOB-2325
INJIMOB-2491
INJIMOB-2337
INJIMOB-2761
INJIMOB-2471
INJIMOB-2550
INJIMOB-2452
0.16.0
v1.2.0
v1.2.0
v0.5.2
0.17.0
0.7.0
1.4.1
0.10.1
0.6.0
0.3.0
0.3.0
0.2.0
0.5.0
0.2.1
0.6.1
1.2.0
INJIMOB-2901
INJIMOB-2907
INJIMOB-2521
INJIMOB-2241
INJIMOB-2159
INJIMOB-1852
INJIMOB-1603
INJIMOB-1336
INJIMOB-2880
INJIMOB-2778
INJIMOB-2576
INJIMOB-2572
INJIMOB-2549
INJIMOB-2548
INJIMOB-2525
INJIMOB-2524
INJIMOB-2522
INJIMOB-2462
INJIMOB-2450
INJIMOB-2324
INJIMOB-2311
INJIMOB-2310
NJIMOB-2264
INJIMOB-2252
INJIMOB-2228
INJIMOB-2227
INJIMOB-2214
INJIMOB-2146
INJIMOB-2122
INJIMOB-2120
INJIMOB-2098
INJIMOB-2048
INJIMOB-2042
INJIMOB-1956
INJIMOB-1910
INJIMOB-1894
INJIMOB-1856
INJIMOB-1837
0.14.0
here
Feature Documentation
Integration Guides
User Guide
API Documentation
Release Notes
Release Notes
Release Notes
Release Notes
Release Notes
Release Notes
Release Notes
Release Notes
Release Notes
Release Notes
Release Notes
Release Notes
Release Notes
Release Notes
known
here
list
Feature Documentation
Integration Guides
User Guide
QA Report
API Documentation
here
here
Release Notes

Module

Version

Inji Mobile Wallet

Module

Version

Mimoto

Inji-config

eSignet

Inji Verify

tuvali

tuvali-ios-swift

secure-Keystore

pixelpass

pixelpass-ios-swift

Inji-vci-client

Inji-vci-client-ios-swift

Jira Issue

Issue Description

iOS build failing in PR run due to failing `pod install`

Module

Version

Inji Mobile Wallet

mimoto

vc-verifier

inji-openid4vp-ios-swift

inji-openid4vp

inji-vci-client-ios-swift

inji-vci-client

secure-keystore-ios-swift

secure-keystore

pixelpass-ios-swift

pixelpass

Module

Version

Inji-config

eSignet

Inji Certify

Inji Verify

tuvali

tuvali-ios-swift

Jira Issue

Issue Description

[OpenId4VP] QR data is base64 encoded

Invalid URL Format for OPENID4VP on Android 14 and above version

Search is not working for the VCs from home page

INJI- In the Credential Registry popup, when entering an invalid URL in the 'Edit Credential Registry' field, the error message is overlapping

The activation VC is not working for a second time on the same device; the same VC displays a technical error message.

After we removed the mandatory configuration for the Mock issuer is not showing the error message in UI

During face authentication, the camera view is not opening in all IOS device

Automation run for sanity is failing few scenarios

Jira Issue

Issue Description

Sunbird insurance VC download is failing with Ed25519 key

Automation(VC Verifier) - Verification of the mDL (mso_mdoc) against VC Verifier library is failing with no classFoundException

Disable the toggle for the biometric, but do not provide a passcode. Close and reopen the application; it still asks for a passcode to log in

qa-inji1 - Issuer page is not loading

DL VC download is failing in qa-inji1

INJIMOB- We are unable to download the MOSIP VC using the RegClient UIN, as it shows an 'Invalid UIN' error

The Help icon should be consistent across all pages

Intermittent download errors occur, causing the application to become unusable

After performing backup and restore, and then removing a VC, the actual count of VCs and the VCs present in the wallet are mismatched

Error screen CTAs not working in VC download flow

Injimobile- The download VC is stuck in a loading state

Intermediately We are unable to download the mock mdl VC; an error message appears.

We are unable to download the mosip VC; an error message appears

IOS - when biometric is cancelled multiple times during app launch the app data is deleted

Online login is failing with inji app crash from device

INJI - After providing biometric authentication, if the user clicks the cancel button, they should not be allowed to successfully download the VC

Inji- We are unable to download the VC via MOSIP ID due to an error message stating 'Failed to send OTP

Inji- The link from the help page leads to a 'Page Not Found' error when clicked

INJI- Intermittently, we are unable to download Sunbird as a 'Something went wrong' screen is being displayed

In INJI Mobile app, the issue type fails to load after selecting an issuer on Android and iOS devices

INJIMOB - Along with Insurance certify VC, an extra mock VC is getting downloaded

INJIMOB - Mock certify and mock fallback VC downloaded background color not reflecting, Only after close and reopen app it is reflecting

INJIMOB - About inji detail is different from IOS to android

Biometrics Toggle stop working after Inji tour guide is dismissed

INJIMOB- QR login is not working, we 're sorry! due to technical error we are unable to serve your request now, please try again later

INJIMOB- intermediately , the QR login is not working. We are encountering an error message

In the INJI 0.12x version, issues with downloading their UIN cards

User is getting a 'Technical error' message on the first attempt to download the VC after restarting the certify pod

Injimobile- After we removed the mandatory configuration for the Mock issuer is not showing the error message in UI

Search box close button is not working unless invoked on a specific point

Version 0.14.0

Release Name: Inji Wallet 0.14.0

Release Type: Developer Release

Release Date: 25th Nov, 2024

Overview of the Release:

We are excited to announce the release of Inji Wallet Version 0.14.0! This update introduces major enhancements and new features, particularly in credential issuance. Here are the key highlights of this release:

  • PixelPass Enhancements: Support for CBOR encoding/decoding is available, making PixelPass more versatile and efficient in handling data.

  • Integration with Inji Certify: We've integrated eSignet for authentication and Certify for streamlined credential issuance, providing a seamless experience.

  • Compliance with Draft 13 of the OpenID4VCI Spec: Inji Wallet now fully supports the latest Draft 13 changes of the OpenID4VCI specification, ensuring compatibility with the evolving standards in the industry.

  • Java upgrade in mimoto: A significant tech upgrade for mimoto to move from java11 to java21.

  • Theme Upgrade:

    • A Gradient Look and Feel: Introducing a sleek gradient-based design as the new default theme for Inji Wallet. This theme offers a modern and visually appealing user experience, enhancing usability and aesthetic appeal.

Features Covered

  1. PixelPass enhancements - Support CBOR encoding/decoding

    1. Given JSON data, it does the CBOR encode/decode.

  2. Integrate eSignet for Auth and Certify for credential issuance

    1. Authorisation partner: eSignet

    2. KBI plugin: eSignet

    3. Credential Issuance: Certify

  3. Draft 13 changes of OpenID4VCI spec - Compatibility of the credential issuance as per the latest draft of OpenID4VCI specification.

Repository Released

Repositories

Tags Released

Inji-wallet

Inji-vci-client-ios-swift

Compatible Modules:

The following table outlines the tested and certified compatibility of Inji Wallet 0.14.0 with other modules.

Module

Version

Mimoto

Inji-config

eSignet

Inji Verify

tuvali

tuvali-ios-swift

secure-Keystore

pixelpass

pixelpass-ios-swift

Inji-vci-client

Known Issues

Note: Redmi devices are not supported in this release.

Jira issue
Issue description

Inji Wallet- After clicking the + icon, the screen flickers before landing on the 'Add New Card' screen

The search box close button is not working unless invoked on a specific point

Inji Wallet- Android - History timings could be more precise

IOS- The Wallet app session should expire if the app is opened for a longer time and the user tries to log in again with the PIN to generate VC by using UIN/VID.

Inji Wallet- The error message of QR code login without an internet attempt should be revised

Inji Wallet- On the face verification page the capture button overlaps with the text

Inji Wallet- During face authentication, the camera view is not opening in all IOS device

Inji Wallet - IOS - "Share QR Code" is not working on iPhone 8.

Inji Wallet - Backup is not triggering automatically when VC is removed.

Inji Wallet- the logo of Inji Wallet stretched while booting the app

IOS -For specific devices, the User cannot see the iCloud ID in the iCloud setting section of the backup and restore page.

Inji Wallet - An error message is not proper when an invalid QR is scanned after changing the language to something other than English.

Inji Wallet- Backup & restore Name Is Different In Settings And Backup & restore Page

Backup and Restore heading Alignment is not proper on the Backup& restore page

Inji Wallet- Sometimes VC activate the button and the back button responses are very slow

Inji Wallet- ID Repo UINs are failing in VC verification

Inji Wallet- Backup doesn't append the new data but replaces the data

Upon changing the finger authentication in the device, the application does not display the error pop-up for biometrics change

Bugs Fixes

Jira issue

Issue description

Inji Wallet: When the camera access is disabled, the user clicks on the close icon error screen it redirects to the sharing screen

Inji Wallet - Unable to go back from the detailed view page

Inji Wallet- VC verification is passing for missing attribute VC

Inji Wallet- During face authentication, the camera view is wider than the face.

Inji Wallet - IOS - The "Share QR Code" feature saves both the QR Code and a text file to files.

Inji Wallet- Users are unable to upload the VC QR code shared via email and WhatsApp, or stored locally

Inji Wallet- In Android when the user clicks the + icon from the home page issuer page is not loaded

Inji Wallet - Unable to see the issuer of the credentials

Inji Wallet- Sunbird issuer is not loading and is redirecting to the 'Add New Card' screen. Trying to click any other issuer is also not working

Inji Wallet- The Intermittent share with selfie option is not getting for the National Identity department

Activation successful banner is not showing up

Inji Wallet- We are unable to download the VC Stay Protected insurance credential

Inji Wallet- When the Certify well-known is replaced with fall back well-known url in the Inji configuration The user is not redirected to the default well-known issuer

Inji Wallet- The user is not getting any error if the fallback is not working

Inji Wallet-Mock identity is not loading and is redirecting to the 'Add New Card' screen. Trying to click any other issuer is also not working

Activated option in quick access menu for VCs which doesn't have biometrics

Inji Wallet- In the mock VC, there is no profile photo, but the share option is still visible

When display properties are removed at mosip certify the user is blocked with a white screen and not able to use the app.

Update mimoto local properties file to run mimoto locally without docker-compose

Background colour not showing up in VC as per configuration in well-known

Documentation Details

Version 0.13.1

Release Name: Inji Wallet 0.13.1 Patch release

Release Version: 0.13.1

Release Type: Developer

Release Date: 10th Sep, 2024

Overview of the Release:

We are excited to announce the release of Inji Wallet Version 0.13.1! This patch release aims on critical fixes and improvements to ensure smoother integration of libraries and enhanced performance. Key updates include the bundling of dependencies with Android Archive (AAR) and JAR files, which simplifies the integration process and resolves issues related to library dependencies for the below mentioned libraries:

  • tuvali

  • inji-vci-client

  • pixelpass

  • secure-keystore

Features Covered:

  • Library Updates:

    • Updated libraries to bundle dependencies with Android Archive (AAR) and JAR formats. This ensures that all required dependencies are included within the package, reducing the need for external dependency management and minimizing conflicts during app integration.

    • These changes enhance compatibility with various Android development environments and improve the overall stability of the wallet.

Repository Released

Repositories

Tags Released

tuvali

secure-keystore

pixelpass

inji-vci-client

Inji Wallet

Compatible Modules:

The following table outlines the tested and certified compatibility of Inji Wallet 0.13.1 with other modules.

Module

Version

Mimoto

inji-config

Bugs/Security Fixes

None

Known Open Bugs

Mentioned below is the list of other known issues.

Jira issue

Issue description

In the INJI 0.12x version, issues with downloading their UIN cards.

INJIMOBILE- After clicking the + icon, the screen flickers before landing on the 'Add New Card' screen

Search box close button is not working unless invoked on a specific point

INJIMOB- Android - History timings could be more precise

IOS- Mobile app session should get expired, if the app is opened for a longer time and user tries to login again with the PIN to generate VC by using UIN/VID.

INJI - error message of QR code login without internet attempt should be revised

INJIMOB- In the face verification page the capture button overlaps with text

INJIMOB- During face authentication, the camera view is not opening in all IOS device

INJIMOB - IOS - "Share QR Code" is not working on iPhone 8.

INJIMOB - Backup is not triggering automatically when VC is removed.

INJI - logo of inji mobile stretched while booting the app

IOS -Specific devices the User not able to see the iCloud ID in iCloud setting section of backup and restore page.

INJI- Error message is not proper when invalid QR is scanned after changing language to other than English.

INJI - Backup & restore Name Is Different In Settings And in Backup & restore Page

INJI - Help Icon Language not Changing when we select other language that english

Backup and Restore heading Alignment is not proper in Backup& restore page

IOS - Associated app ID is missing in the Backup and restore page.

INJI- Sometimes VC activate the button and back button responses is very slow

INJI - Iderpo UINs are failing in VC verification

INJI - Backup doesn't append the new data, but replaces the data

Upon changing the finger authentication in the device, application does not display the error pop up for biometrics change

Documentation Details

Test Report

Testing Scope

The scope of testing is to verify fitment to the specification from the perspective of

  • Functionality

  • Deployability

  • Configurability

  • Customizability

Verification is performed not only from the end user perspective but also from the System Integrator (SI) point of view. Hence Configurability and Extensibility of the software is also assessed. This ensures the readiness of software for use in multiple countries. Since MOSIP is an “API First” product platform, Verification scope required comprehensive automation testing for all the MOSIP APIs. An automation Test Rig is created for the same.

The Inji testing scope revolves around the following flows:

  • Biometric unlock

  • Passcodes unlock

  • VC download via MOSIP

  • VC download via eSignet

  • VC download via Sunbird

  • Retrieving UIN/ via AID

  • Pinning a VC

  • Normal VC sharing with VID

  • Deleting VC

  • Face Auth on Resident's phone with VID

  • Multi language support

  • Credential registry

  • Backup and restore

  • Wallet binding

  • QR code Login

  • Logout

Test Approach

Persona based approach has been adopted to perform the IV&V, by simulating test scenarios that resemble a real-time implementation.

A Persona is a fictional character/user profile created to represent a user type that might use a product/or a service in a similar way. Persona based testing is a software testing technique that puts software testers in the customer's shoes, assesses their needs from the software and thereby determines use cases/scenarios that the customers will execute. The persona needs may be addressed through any of the following.

  • Functionality

  • Deploy ability

  • Configurability

  • Customizability

The verification methods may differ based on how the need was addressed.

For regression check, “MOSIP Test Rig” - an automation testing suite - is indigenously designed and developed for supporting persona-based testing. MOSIP Test Rig covers the end-to-end test execution and reporting. The end-to-end functional test scenarios are written starting from pre-registration to the creation of the packet in the registration center, processing the packet through the registration processor, generating UIN, and authenticating identity using IDA through various permutations and combinations of cases being covered. MOSIP Test Rig will be an open-source artifact that can also be enhanced and used by countries to validate the SI deliveries before going live. Persona classes include both negative and positive personas. Negative persona classes include users like Bribed Registration Office, Malicious Insider, etc. The needs of positive persona classes must be met, whereas the needs of negative persona classes must be effectively restricted by the software.

Verified configuration

Verification is performed on various configurations as mentioned below

  • Default configuration - with 3 Lang

  • Virtual countries

    • 1 Lang configuration

    • 2 Lang configuration

    • 3 Lang configuration

Feature Health

On Android Device:

Test execution statistics

Functional test results by modules

Below are the test metrics by performing functional testing using mock MDS and mock ABIS. The process followed was black box testing which based its test cases on the specifications of the software component under test. The functional test was performed in combination with individual module testing as well as integration testing. Test data were prepared in line with the user stories. Expected results were monitored by examining the user interface. The coverage includes GUI testing, System testing, End-To-End flows across multiple languages and configurations. The testing cycle included the simulation of multiple identity schema and respective UI schema configurations.

Total
Passed
Failed
Skipped(N/A)

1236

1085

124

27

Test Rate: 98% With Pass Rate: 89.74%

Here is the detailed breakdown of metrics for each module:

On Android:

Total Test Cases
Passed
Failed
Skipped(N/A)

1236

1085

124

27

External API verification results by modules

The below section provides details on API test metrics by executing the MOSIP functional automation Framework. All external API test executions were performed at module level isolation. Each endpoint is tested with the test data and expectations of each test data are mapped to assert the test case.

Total Test Cases
Passed
Failed
Skipped(N/A)

64

58

6

0

Test Rate: 90.6% With Pass Rate: 9.4%

Here is the detailed breakdown of metrics:

Mobile ID

Total Test Cases
Passed
Failed
Skipped(N/A)

64

58

6

0

UI Automation results

The below section provides details on Ui Automation by executing the MOSIP functional automation Framework.

Total Test Cases
Passed
Failed
Skipped(N/A)

61

59

2

0

Test Rate: 100% With Pass Rate: 96.72%

Here is the detailed breakdown of metrics:

Total Test Cases
Passed
Failed
Skipped(N/A)

61

59

2

0

Functional and test rig code base branch which is used for the above metrics is:

Hash Tag:

SHA: sha256: b477f64889c7340a1d1ca6b17601473c30d206de8de9c8a69e8879be38e1dbb5

Device and Component Details:

Tested with Components

mosipid/esignet:1.4.0

mosipqa/mimoto:develop

Tuvali Version - 0.5.1

Tested with MOSIP Components

mosipid/admin-service:1.2.0.1-B1

mosipid/admin-ui:1.2.0.1-B1

mosipid/artifactory-server:1.4.0-ES

mosipid/authentication-internal-service:1.2.0.1

mosipid/authentication-otp-service:1.2.0.1

mosipid/authentication-service:1.2.0.1

mosipid/biosdk-server:1.2.0.1

mosipid/commons-packet-service:1.2.0.1-B1

mosipid/config-server:1.1.2

mosipid/consolidator-websub-service:1.2.0.1-B1

mosipid/credential-request-generator:1.2.0.1

mosipid/credential-service:1.2.0.1

mosipid/data-share-service:1.2.0.1-B2

mosipid/hotlist-service:1.2.0.1-B1

mosipid/id-repository-identity-service:1.2.0.1

mosipid/id-repository-salt-generator:1.2.0.1

mosipid/id-repository-vid-service:1.2.0.1

mosipid/kernel-auth-service:1.2.0.1-B2

mosipid/kernel-idgenerator-service:1.2.0.1-B1

mosipid/kernel-keymanager-service:1.2.0.1

mosipid/kernel-notification-service:1.2.0.1-B1

mosipid/kernel-otpmanager-service:1.2.0.1-B1

mosipid/kernel-pridgenerator-service:1.2.0.1-B1

mosipid/kernel-ridgenerator-service:1.2.0.1-B1

mosipid/kernel-salt-generator:1.2.0.1-B2

mosipid/kernel-syncdata-service:1.2.0.1-B1

mosipid/keycloak-init:1.2.0.1

mosipid/keycloak-init:1.2.0.1-B2

mosipid/keycloak-init:1.2.0.1-B3

mosipid/keys-generator:1.2.0.1-B3

mosipid/masterdata-loader:1.2.0.1-B4

mosipid/mock-abis:1.2.0.1-B2

mosipid/mock-mv:1.2.0.1-B2

mosipid/mock-relying-party-service:0.9.1

mosipid/mock-relying-party-service:0.9.2

mosipid/mock-relying-party-ui:0.9.1

mosipid/mock-relying-party-ui:0.9.2

mosipid/oidc-ui:1.4.0

mosipid/partner-management-service:1.2.0.1-B3

mosipid/partner-onboarder:1.2.0.1-B4

mosipid/pmp-ui:1.2.0.1-B1

mosipid/policy-management-service:1.2.0.1-B3

mosipid/postgres-init:1.2.0.1-B4

mosipid/pre-registration-application-service:1.2.0.1-B1

mosipid/pre-registration-batchjob:1.2.0.1-B1

mosipid/pre-registration-booking-service:1.2.0.1-B1

mosipid/pre-registration-captcha-service:1.2.0.1-B1

mosipid/pre-registration-datasync-service:1.2.0.1-B1

mosipid/pre-registration-ui:1.2.0.1-B1

mosipid/print:1.2.0.1-B1

mosipid/registration-client:1.2.0.1-B1

mosipid/registration-processor-common-camel-bridge:1.2.0.1-B1

mosipid/registration-processor-dmz-packet-server:1.2.0.1-B1

mosipid/registration-processor-notification-service:1.2.0.1-B1

mosipid/registration-processor-registration-status-service:1.2.0.1-B1

mosipid/registration-processor-registration-transaction-service:1.2.0.1-B1

mosipid/registration-processor-reprocessor:1.2.0.1-B1

mosipid/registration-processor-stage-group-1:1.2.0.1-B1

mosipid/registration-processor-stage-group-2:1.2.0.1-B1

mosipid/registration-processor-stage-group-3:1.2.0.1-B2

mosipid/registration-processor-stage-group-4:1.2.0.1-B1

mosipid/registration-processor-stage-group-5:1.2.0.1-B1

mosipid/registration-processor-stage-group-6:1.2.0.1-B1

mosipid/registration-processor-workflow-manager-service:1.2.0.1-B1

mosipid/signup-service:1.0.0

mosipid/signup-ui:1.0.0

mosipid/softhsm:v2

mosipid/websub-service:1.2.0.1-B1

mosipint/digital-card-service:release-1.2.0.1-DP

mosipint/kernel-masterdata-service:develop-DP

mosipint/registration-processor-stage-group-7:develop-DP

mosipint/resident-service:develop-DP

mosipint/resident-ui:develop-DP

mosipqa/artifactory-server:0.9.0-INJI

mosipqa/artifactory-server:1.4.1-ES

mosipqa/authentication-demo-service:develop

mosipqa/automationtests:develop

mosipqa/dsl-orchestrator:develop

mosipqa/dsl-packetcreator:develop

mosipqa/inji-certify:0.9.x

mosipqa/inji-web:develop

mosipqa/kernel-auditmanager-service:1.2.0.1

mosipqa/keycloak-init:develop

mosipqa/mock-identity-system:0.9.0

mosipqa/mock-relying-party-service:0.9.x

mosipqa/mock-relying-party-ui:0.9.x

mosipqa/mock-smtp:0.0.2

mosipqa/mosip-artemis-keycloak:develop

mosipqa/mosip-file-server:develop

mosipqa/postgres-init:develop

mosipqa/softhsm:v2

Devices Used For Testing

Vivo Y73 with Android 12 BLE 5.0

SS Galaxy A03 core with Android 11 BLE 4.2

iPhone 11 with i-OS 15 BLE 5.0

iPhone 8 with i-OS 16 BLE 5.0

iPhone 7 with i-OS 15.6 BLE 4.2

Redmi 7A Android 10 BLE 4.2

Redmi note 10 lite Android 10 BLE 5.0

redmi K20 pro Android 11 BLE 5.0

Detailed Test metrics

Below are the detailed test metrics by performing manual/automation testing. The project metrics are derived from Defect density, Test coverage, Test execution coverage, test tracking, and efficiency.

The various metrics that assist in test tracking and efficiency are as follows:

● Passed Test Cases Coverage: It measures the percentage of passed test cases. (Number of passed tests / Total number of tests executed) x 100.

● Failed Test Case Coverage: It measures the percentage of all the failed test cases. (Number of failed tests / Total number of test cases executed) x 100.

Test Report

Testing Scope

The scope of testing is to verify fitment to the specification from the perspective of

  • Functionality

  • Deployability

  • Configurability

  • Customizability

Verification is performed not only from the end user perspective but also from the System Integrator (SI) point of view. Hence Configurability and Extensibility of the software is also assessed. This ensures the readiness of software for use in multiple countries. Since MOSIP is an “API First” product platform, Verification scope required comprehensive automation testing for all the MOSIP APIs. An automation Test Rig is created for the same.

The Inji testing scope revolves around the following flows:

  • Biometric unlock

  • Passcode unlock

  • VC download via MOSIP

  • VC download via esignet

  • VC download via Sunbird

  • Pinning a VC

  • Normal VC sharing with VID

  • Deleting VC

  • Face Auth on Resident's phone with VID

  • Multi language support

  • Credential registry

  • Backup and restore

  • Wallet binding

  • QR code Login

  • Logout

Test Approach

Persona based approach has been adopted to perform the IV&V, by simulating test scenarios that resemble a real-time implementation.

A Persona is a fictional character/user profile created to represent a user type that might use a product/or a service in a similar way. Persona based testing is a software testing technique that puts software testers in the customer's shoes, assesses their needs from the software and thereby determines use cases/scenarios that the customers will execute. The persona needs may be addressed through any of the following.

  • Functionality

  • Deployability

  • Configurability

  • Customizability

The verification methods may differ based on how the need was addressed.

For regression check, “MOSIP Test Rig” - an automation testing suite - which is indigenously designed and developed for supporting persona-based testing. MOSIP Test Rig covers the end-to-end test execution and reporting. The end-to-end functional test scenarios are written starting from pre-registration to creation of packet in registration center, processing the packet through the registration processor, generating UIN and authenticating identity using IDA through various permutation and combinations of cases being covered. MOSIP Test Rig will be an open-source artifact which can also be enhanced and used by countries to validate the SI deliveries before going live. Persona classes include both negative and positive personas. Negative persona classes include users like Bribed Registration Office, Malicious Insider etc. The needs of positive persona classes must be met, whereas the needs of negative persona classes must be effectively restricted by the software.

Verified configuration

Verification is performed on various configurations as mentioned below

  • Default configuration - with 3 Lang

  • Virtual countries

    • 1 Lang configuration

    • 2 Lang configuration

    • 3 Lang configuration

Feature Health

On Android Device:

On iOS Device:

Test execution statistics

Functional test results by modules

Below are the test metrics by performing functional testing using mock MDS and mock ABIS. The process followed was black box testing which based its test cases on the specifications of the software component under test. The functional test was performed in combination of individual module testing as well as integration testing. Test data were prepared in line with the user stories. Expected results were monitored by examining the user interface. The coverage includes GUI testing, System testing, End-To-End flows across multiple languages and configurations. The testing cycle included simulation of multiple identity schema and respective UI schema configurations.

Total

Passed

Failed

Skipped (N/A)

2461

2203

214

44

Test Rate: 98.21% With Pass Rate: 91.14%

Here is the detailed breakdown of metrics for each module:

Test cases

On Android Device

Total

1315

Passed

1169

Failed

117

Skipped (N/A)

29

On iOS Device

Total

1146

Passed

1034

Failed

97

Skipped (N/A)

15

API verification results by modules

The below section provides details on API test metrics by executing MOSIP functional automation Framework. All external API test executions were performed at module level isolation. Each end point is tested with the test data and expectations of each test data are mapped to assert the test case.

Total

Passed

Failed

Skipped

141

134

4

3

Test Rate: 97.97% With Pass Rate: 97.10%

UI Automation results

The below section provides details on Ui Automation by executing MOSIP functional automation Framework.

Total

Passed

Failed

Skipped

108

106

2

0

Test Rate: 100% With Pass Rate: 98.14%

Here is the detailed breakdown of metrics

Test cases

Android

Total

60

Passed

58

Failed

2

Skipped

0

iOS

Total

48

Passed

48

Failed

0

Skipped

0

Functional and test rig code base branch which is used for the above metrics is:

Hash Tag:

SHA: sha256: 58e77d26fc1b98884c11638bba70c128d27994e3

Testing with various device combinations

Below are the test metrics by performing VC Sharing functionality on various device combinations

Total

Passed

Failed

Skipped

192

192

0

0

Test Rate: 100% With Pass Rate: 100%

Device and Component Details:

Tested with Components

mosipid/esignet:1.4.1

mosipqa/mimoto:develop

Tuvali Version - 0.5.1

Tested with MOSIP Components

mosipid/admin-service:1.2.0.1-B1

mosipid/admin-ui:1.2.0.1-B1

mosipid/artifactory-server:1.4.1-ES

mosipid/authentication-internal-service:1.2.0.1

mosipid/authentication-otp-service:1.2.0.1

mosipid/authentication-service:1.2.0.1

mosipid/biosdk-server:1.2.0.1

mosipid/commons-packet-service:1.2.0.1-B1

mosipid/config-server:1.1.2

mosipid/consolidator-websub-service:1.2.0.1-B1

mosipid/credential-request-generator:1.2.0.1

mosipid/credential-service:1.2.0.1

mosipid/data-share-service:1.2.0.1-B2

mosipid/hotlist-service:1.2.0.1-B1

mosipid/id-repository-identity-service:1.2.0.1

mosipid/id-repository-salt-generator:1.2.0.1

mosipid/id-repository-vid-service:1.2.0.1

mosipid/kernel-auth-service:1.2.0.1-B2

mosipid/kernel-idgenerator-service:1.2.0.1-B1

mosipid/kernel-keymanager-service:1.2.0.1

mosipid/kernel-notification-service:1.2.0.1-B1

mosipid/kernel-otpmanager-service:1.2.0.1-B1

mosipid/kernel-pridgenerator-service:1.2.0.1-B1

mosipid/kernel-ridgenerator-service:1.2.0.1-B1

mosipid/kernel-salt-generator:1.2.0.1-B2

mosipid/kernel-syncdata-service:1.2.0.1-B1

mosipid/keycloak-init:1.2.0.1

mosipid/keycloak-init:1.2.0.1-B2

mosipid/keycloak-init:1.2.0.1-B3

mosipid/keys-generator:1.2.0.1-B3

mosipid/masterdata-loader:1.2.0.1-B4

mosipid/mock-abis:1.2.0.1-B2

mosipid/mock-mv:1.2.0.1-B2

mosipid/mock-relying-party-service:0.9.1

mosipid/mock-relying-party-service:0.9.2

mosipid/mock-relying-party-ui:0.9.1

mosipid/mock-relying-party-ui:0.9.2

mosipid/oidc-ui:1.4.1

mosipid/partner-management-service:1.2.0.1-B3

mosipid/partner-onboarder:1.2.0.1-B4

mosipid/pmp-ui:1.2.0.1-B1

mosipid/policy-management-service:1.2.0.1-B3

mosipid/postgres-init:1.2.0.1-B4

mosipid/pre-registration-application-service:1.2.0.1-B1

mosipid/pre-registration-batchjob:1.2.0.1-B1

mosipid/pre-registration-booking-service:1.2.0.1-B1

mosipid/pre-registration-captcha-service:1.2.0.1-B1

mosipid/pre-registration-datasync-service:1.2.0.1-B1

mosipid/pre-registration-ui:1.2.0.1-B1

mosipid/print:1.2.0.1-B1

mosipid/registration-client:1.2.0.1-B1

mosipid/registration-processor-common-camel-bridge:1.2.0.1-B1

mosipid/registration-processor-dmz-packet-server:1.2.0.1-B1

mosipid/registration-processor-notification-service:1.2.0.1-B1

mosipid/registration-processor-registration-status-service:1.2.0.1-B1

mosipid/registration-processor-registration-transaction-service:1.2.0.1-B1

mosipid/registration-processor-reprocessor:1.2.0.1-B1

mosipid/registration-processor-stage-group-1:1.2.0.1-B1

mosipid/registration-processor-stage-group-2:1.2.0.1-B1

mosipid/registration-processor-stage-group-3:1.2.0.1-B2

mosipid/registration-processor-stage-group-4:1.2.0.1-B1

mosipid/registration-processor-stage-group-5:1.2.0.1-B1

mosipid/registration-processor-stage-group-6:1.2.0.1-B1

mosipid/registration-processor-workflow-manager-service:1.2.0.1-B1

mosipid/signup-service:1.0.0

mosipid/signup-ui:1.0.0

mosipid/softhsm:v2

mosipid/websub-service:1.2.0.1-B1

mosipint/digital-card-service:release-1.2.0.1-DP

mosipint/kernel-masterdata-service:develop-DP

mosipint/registration-processor-stage-group-7:develop-DP

mosipint/resident-service:develop-DP

mosipint/resident-ui:develop-DP

mosipqa/artifactory-server:0.9.0-INJI

mosipqa/artifactory-server:1.4.1-ES

mosipqa/authentication-demo-service:develop

mosipqa/automationtests:develop

mosipqa/dsl-orchestrator:develop

mosipqa/dsl-packetcreator:develop

mosipqa/inji-certify:0.9.x

mosipqa/inji-web:develop

mosipqa/kernel-auditmanager-service:1.2.0.1

mosipqa/keycloak-init:develop

mosipqa/mock-identity-system:0.9.3

mosipqa/mock-relying-party-service:0.9.x

mosipqa/mock-relying-party-ui:0.9.x

mosipqa/mock-smtp:0.0.2

mosipqa/mosip-artemis-keycloak:develop

mosipqa/mosip-file-server:develop

mosipqa/postgres-init:develop

mosipqa/softhsm:v2

Devices Used For Testing

Vivo Y73 with Android 12 BLE 5.0

SS Galaxy A03 core with Android 11 BLE 4.2

iPhone 11 with i-OS 15 BLE 5.0

iPhone 8 with i-OS 16 BLE 5.0

iPhone 7 with i-OS 15.6 BLE 4.2

Redmi 7A Android 10 BLE 4.2

Redmi note 10 lite Android 10 BLE 5.0

redmi K20 pro Android 11 BLE 5.0

Detailed Test Metrics

Below are the detailed test metrics by performing manual/automation testing. The project metrics are derived from Defect density, Test coverage, Test execution coverage, test tracking and efficiency.

The various metrics that assist in test tracking and efficiency are as follows:

  • Passed Test Cases Coverage: It measures the percentage of passed test cases. (Number of tests passed / Total number of tests executed) x 100

  • Failed Test Case Coverage: It measures the percentage of all the failed test cases. (Number of failed tests / Total number of test cases executed) x 100

Version 0.13.0

Release Name: Inji 0.13.0

Support: Developer Release

Release Date: 2nd Aug, 2024

Overview

We are delighted to announce the release of Inji Wallet Version 0.13.0. This update includes a significant change: The Inji repository has been renamed to inji-wallet and is now compatible with Mimoto v0.13.1. In this latest version, Inji Wallet introduces the following key features:

Libraries:

  1. Native artefacts (Kotlin & Swift) available for:

    • Secure Keystore

    • Pixelpass

    • VCI client

    • Tuvali

  2. UUID changes for verifier services in tuvali

  3. Secure-keystore changes (credential request keypair change from RSA-4096 to RSA-2048 bits)

Enhancements:

  • Issuer’s Well-known as a source of truth

  • OTP flow disabled for MOSIP VC

Deployment:

  • Docker compose for mimoto

Summary

Please find below the details for the Inji Version 0.13.0 release:

Libraries:

  • Inji Wallet utilizes the Secure Keystore SDK to store keypairs, ensuring enhanced security. The SDK now includes native artifacts and is fully integrated with Inji Wallet. Additionally, the keypair generation for credential requests has been updated from RSA-4096 to RSA-2048 bits to reduce the size of the VCs.

  • Tuvali: UUID for all the verifier services is modified to reflect the UUID service definition as per the spec. In addition, Tuvali SDK which enables offline sharing based on BLE, has native artifacts (Kotlin and Swift) now and is integrated with Inji Wallet.

  • With this release, Java, Kotlin, and Swift artifacts are available for the PixelPass library, and native artifacts are integrated into the Inji Wallet app. Additionally, the Java library facilitates QR code generation on the server side.

  • The VCI client library handles credential requests from issuance, provided it has the accessToken, proof, and issuer metadata.

Enhancements:

  • The issuer's well-known URL will serve as the source of truth, providing details on locale settings for fields, credential types, display properties, and order. This URL will be accessible in the [specific location].

  • With this release, the OTP flow for downloading MOSIP VC, which connects to MOSIP ID Repo, credential service and websub has been disabled. Instead, MOSIP VC can now be downloaded using the OpenID4VCI flow.

Deployment:

Inji repo name change:

Steps to update local github configuration:

  •   Navigate to the location where your forked repository is cloned.
  •   Execute git remote -v to view the current remote configurations (origin and upstream). Update these configurations to align with the new repository name.

Repository Released

Repositories

Tags Released

inji-wallet

mimoto

inji-config

tuvali

tuvali-ios-swift

secure-keystore

pixelpass

pixelpass-ios-swift

inji-vci-client

inji-vci-client-ios-swift

Compatible Modules:

The following table outlines the tested and certified compatibility of Inji Wallet 0.13.0 with other modules.

Module
Version

Mimoto

eSignet

Inji Verify

Known Issues

Mentioned below is the list of other known issues.

Jira Issue

Description

INJIMOB- During face authentication, the camera view is not opening in all IOS device

INJIMOB- In Android when the user clicks + icon from home page issuer page is not getting loaded

INJIMOB- Users are unable to upload the VC QR code shared via email and WhatsApp, or stored locally

INJI - unable to scroll the page add new card page

INJIMOB - IOS - "Share QR Code" is not working on iPhone 8.

INJIMOB - IOS - The buttons in the INJI tour guide are not properly aligned.

INJIMOB - Android - The backup and restore process is failing on Android devices when the size of the backup exceeds 10MB.

INJIMOB - Backup is not triggering automatically when VC is removed.

INJI - logo of Inji Wallet stretched while booting the app

Inji mob- During face authentication, the camera view is wider than the face.

INJI - VC download failed because of eSignet pod being down doesn't have a proper error message

IOS -Specific devices the User not able to see the iCloud ID in iCloud setting section of backup and restore page.

INJI- Error message is not proper when invalid QR is scanned after changing language to other than English.

INJI - Backup & restore Name Is Different In Settings And in Backup & restore Page

INJI - Help Icon Language not Changing when we select other language that english

Backup and Restore heading Alignment is not proper in Backup& restore page

IOS - Associated app ID is missing in the Backup and restore page.

Inji- Date format is not proper in the e-signet Vc

INJI- Sometimes VC activate the button and back button responses is very slow

INJI - VC getting created without image while generating the UIN with lower and higher iso files.

Android - Intermediately while doing the face authentication the app is getting crashed

INJI - Iderpo UINs are failing in VC verification

Inji - Screen header and back button are overlapping

Inji- In specific devices, the Pin and Unpin feature is not working.

Android- Occasionally, unable to activate the restored VC

IOS - Upon sharing sunbird VC twice and then upon sharing Mosip VC, app crashes

Android - During face authentication, app crashes on a specific device

INJI - Backup doesn't append the new data, but replaces the data

Upon changing the finger authentication in the device, application does not display the error pop up for biometrics change

Bug Fixes:

The 0.13.0 release includes the following bug fixes:

Jira Issue
Issue Description
Severity

INJIVER- The user is unable to upload the VC QR code shared via email and WhatsApp

Critical

INJIVER-The user is unable to scan the QR code when it is stored locally

Critical

INJIVER-The user is unable to scan the VC QR code shared via email and WhatsApp

Critical

INJIMOB - IOS - The "Share with Selfie" is causing the app to crash after face verification.

Critical

INJI - VC verification is passing for missing atribute VC

Critical

INJI - VC download failed because of eSignet pod being down doesn't have a proper error message

Major

Share with selfie flow from card mini view in home page is not showing the Share with Selfie pop-up before face verification.

Major

INJI - onboarding of new issuer is affecting the existing issuers

Blocker

Inji- E-Mail OTP channel is not mentioned on the OTP verification page.

Minor

Documentation

Version 0.11.0-Inji

Release Name: Inji 0.11.0-Inji

Support: Developer Release

Release Date: 29th March, 2024

Overview

We are excited to announce the release of Inji Version 0.11.0 . This release is compatible with v0.11.0 Mimoto release. As part of 0.11.0, Inji introduces below mentioned key features:

  • VC download using KBI

  • Data backup and restore

  • Improved UI / UX

In the recent past, Inji Wallet app had undergone GenderMag analysis which addresses gender / inclusivity bias in software. In this release, we have incorporated GenderMag features for UI / UX in inclusivity space.

Summary

Please find below the details for the Inji Version 0.11.0 release:

VC download using KBI method

Data backup and restore

Inji Wallet currently offers data backup and restore functionality using Google Drive for Android and iCloud for iOS to safely store residents' Verifiable Credentials(VCs) on resident's preferred cloud platform. This ensures security and accessibility. Resident can also easily restore backed up information as required, and thereby enabling seamless user experience whether the resident uses Android or iOS.

GenderMag

The GenderMag Method is a process and also a set of materials helpful in investigating gender biases during resident's problem-solving experiences with software. Gendermag adheres to Human Computer Interaction (HCI) principles and thereby factor in gender differences interaction with software. As part of GenderMag walkthrough, we have identified inclusivity bugs with respect to UI / UX in Inji Wallet. Version 0.11.0 includes UI / UX changes for P1 items.

Repository Released

Repositories

Tags Released

Inji

mimoto

tuvali

mosip-config

Secure-Keystore

mosip-onboarder

Known Issues

Mentioned below is the list of other known issues.

Jira issue
Issue description

Android- Occasionally, unable to activate the restored VC

Inji-Unable to download when user attempted to restore VCs in a new device

INJI- Unable to download the card with a new UIN

IOS - Upon sharing sunbird VC twice and then upon sharing Mosip VC, app crashes

Android - During face authentication, app crashes on a specific device

INJI - Backup doesn't append the new data, but replaces the data

Android- Specific device, Redmi 7A- During face authentication, app crashes

Redmi 6A device is not compatible with Inji's Tuwali version

Upon changing the finger authentication in the device, application does not display the error pop up for biometrics change

Android - All downloaded VC's are deleted in specific device

Inji- Even upon Wallet failure, the verifier receives success message on the specific devices

Android - Couldn't share VCs between Two specific android devices

Android - Unable to share VC for specific combination

Android - VC transfer fails intermittently for specific device

Inji- The Inji application is not stable. Occasionally, unable to activate the VC

Verifier app crashes upon face authentication

Inji - Unable to save received VC error. Displays as Identity proofs are tampered

Unable able to retrieve VID / UIN from the AID which is raised through pre-registration process

Android - Couldn't share VC between two specific android devices as device crashes

Ios - Redmi 6A doesn't connect with any IOS devices

Android - Redmi 6A idoesn't connect with any android devices

Error message for Invalid OTP is not correctly displayed during VC activation

Bug Fixes

Jira issue
Severity
Issue description

Critical

Inji - App crashes during click of OTP re-send button of download through AID

Critical

Android - Received VC's are deleted

Critical

Android - App crashes during the first launch

Critical

Inji- Occasionally, user is unable to share immediately

Major

Inji-During activation, VC in ID details page displays the green color toaster message on home screen

Major

Inji- MOSIP logo changes according to the issuer

Major

Inji - Deleted VC's HMAC data is not deleted

Major

Inji-Paragraph border is displayed in color, orange for purple theme selection

Major

Loading time for VC is longer than expected time

Major

Inji- VC sharing is failing intermittently using selfie with share feature

Major

App closes upon re-send code during VC activation through kebab popup

Documentation

Version 0.11.0

Release Name: Inji 0.11.0

Upgrade From: Inji 0.10.0

Support: Support Release

Release Date: 23rd February, 2024

Overview

We are excited to announce the first independent release of Mimoto, officially named version 0.11.0. This release is built upon Inji 0.10.0 and primarily focuses on the following:

  • Onboarding a new VC Issuer

  • Mimoto-Issuer onfiguration changes

Summary

Please find below the details for the 0.11.0 release:

Repository Released

Repositories

Tags Released

mimoto

mosip-config

Documentation

Version 0.12.0

Release Name: Inji 0.12.0

Support: Developer Release

Release Date: 31st May, 2024

Overview

We are delighted to announce the release of Inji Wallet Version 0.12.0 . This release is compatible with v0.12.0 Mimoto release. As part of 0.12.0, Inji Wallet introduces below mentioned key features:

1. Features added to the Download Functionality:

  • Credential Type Selection

  • VC Verification

  • QR Code Generation for VC

2. Library:

  • QR Code Generation: PixelPass

3. UI/UX Enhancements:

  • Card View UI Changes

  • VC Share Optimization

  • Activity Log Enhancements

  • GenderMag Fixes

4. Data Backup Enhancements

Inji Wallet app addresses gender / inclusivity bias in software through GenderMag analysis. In this release, we have incorporated GenderMag fixes for UI / UX in inclusivity space.

Summary

Please find below the details for the Inji Version 0.12.0 release:

Features added to the Download Functionality:

Credential Type Selection:

Inji Wallet now allows users to select the type of credential they need, giving them the option to choose from a list of Credential Types issued by the ID provider. This enables users to download Verifiable Credentials that match their selection.

VC Verification:

Inji Wallet provides the functionality to verify Verifiable Credentials using the Digital Bazaar library. The issuer's signature is verified based on the proof type provided by the issuer. Currently, we support the RSA signature type, and we will soon add support for the Ed25519 proof type.

QR code generation for VC:

PixelPass, part of the Inji Credentialing stack, generates QR codes for Verifiable Credentials within the Inji Wallet. It's specifically designed for smaller data sets when the ID provider doesn't send a QR code along with the Verifiable Credential. Users can view and use this QR code for verification purposes by the relying party or service provider.

Library

QR Code Generation: PixelPass

UI/UX enhancements:

Inji Wallet version 0.12.0 introduces enhanced UI to deliver a seamless user experience with an intuitive design. The UI modifications included in this release are:

Card View UI Changes:

  • Users can now view the card in two ways:

    • A mini view on the Home Page with a quick access menu.

    • A detailed view.

  • Additionally, the Settings menu has been moved to the NavBar for easier access.

VC Share Optimization:

  • With the quick access menu in the mini view of the card:

    • Users can quickly initiate a Share or Share with Selfie action from the card to be shared.

Activity Log enhancements:

The audit logs have been enhanced to elevate the user experience. Now, they include the card type, along with the card number and the action performed, for better readability.

GenderMag P2 items:

  • Enhanced text to clarify the next steps and reasons for permission requests.

  • Improved user experience by providing clear notifications for success or failure, including a success screen or error banner with the reason for failure during VC sharing and face verification.

Data backup enhancements:

As part of the 0.12.0 release, the following enhancements have been made to the Data Backup feature:

  1. Cloud as the Primary Source:

  • The backup file stored in the cloud will be the primary source of truth.

  • Once the backup file is downloaded and restored, it is automatically removed from the local app storage to ensure that the latest backup file is always restored.

  1. iCloud Section Visibility:

  • The iCloud Section is now visible in the Backup & Restore settings screen, allowing users to easily manage their backup.

  1. User Notification:

  • When the user initiates a Backup or Restore process, a banner will be displayed to inform users about the ongoing process.

Repository Released

Known Issues

Mentioned below is the list of other known issues.

Bug Fixes

Below are the list of fixes as part of 0.12.0 release:

Documentation

Version DP1

Release Name: Inji vDP1

Upgrade From: Inji 0.9.1 (Patch)

Support: Developer Preview Release1

Release Date: 28th September, 2023

Overview

The developer preview version of Inji Wallet is the release on top of Inji 0.9.1. Key highlights of the release are:

  • Enhanced UI

  • Additional functional flows in Inji

  • Internal enhancements

  • Bug fixes

Summary

Below is the detailed summary of the release.

Change in UI implementation

  • New UI for Inji Wallet:

    • This redesign promises an enriched user experience.

    • Introduction sliders have been introduced.

    • Helpful FAQ screens are provided.

    • VC pinning is now available.

      • Currently, the pinning feature supports a single VC.

    • Easy VC removal from Inji Wallet.

    • Improved audit log filtering based on VC.

Change in functional implementation

  • Branding the App as Inji Wallet:

    • We've rebranded the application, transitioning from Resident App to the more streamlined and recognisable Inji Wallet.

  • Ability to Choose Language During App Setup:

    • Inji Wallet app users can configure the application in six distinct languages:

      • English

      • Filipino

      • Arabic

      • Hindi

      • Kannada

      • Tamil

  • Warning When Device Storage is Beyond the Threshold:

    • Inji Wallet now offers customisable storage limits:

      • For VC downloads, the threshold is set to 5MB. When the device's remaining storage space falls below this limit, Inji Wallet displays a warning message. However, users can still continue to verify and share VCs.

      • For Inji Wallet audit logs, the threshold is set to 1MB. Once the device reaches this limit, Inji users will be restricted to viewing VCs, unable to perform additional actions.

  • Traceability with Unique ID for Customer Support:

    • We've implemented a unique identification called as an Application ID for customer support interactions. Each support request is now assigned a traceable and distinct ID, allowing our support teams to efficiently track, manage, and resolve customer issues.

Internal improvements

  • Improved Bluetooth State and Permission Handling:

    • We have refined the management of Bluetooth states and permissions.

  • Removed Google Nearby Implementation:

  • Encrypted VC’s Metadata:

    • We now calculate and securely store an encrypted HASH (HMAC SHA256) of the VC's metadata key in the database, bolstering data security.

Bug fixes

Repository Released

Documentation

Test Report

Scope

The scope of testing is to verify fitment to the specification from the perspective of:

  • Functionality

  • Deployability

  • Configurability

  • Customizability

Verification is performed not only from the end-user perspective but also from the System Integrator (SI) point of view. Hence, the configurability and extensibility of the software is also assessed. This ensures readiness of software for use in multiple countries. Since MOSIP is an “API First” product platform, verification scope required comprehensive automation testing for all the MOSIP APIs. An automation Test Rig is created for the same.

The Inji Wallet testing scope revolves around the following flows:

  • Biometric unlock

  • Passcode unlock

  • VC download via MOSIP

  • VC download via eSignet

  • Retrieving UIN/VID via AID

  • Pinning a VC

  • Normal VC sharing with VID

  • Deleting VC

  • Face Auth on Resident's phone with VID

  • Multi language support

  • Wallet binding

  • QR code Login

  • Logout

Test approach

Persona based approach has been adopted to perform the IV&V(Independent Verification and Validation) by simulating the test scenarios that resemble a real-time implementation.

A Persona is a fictional character/ user profile created to represent a user type that might use a product/ or a service in a similar way. Persona based testing is a software testing technique that puts software testers in the customer's shoes, assesses their needs from the software and thereby determines use cases/ scenarios that the customers will execute. The persona needs may be addressed through any of the following:

  • Functionality

  • Deployability

  • Configurability

  • Customizability

The verification methods may differ based on how the need was addressed.

For regression check, MOSIP Test Rig, an automation testing suite is indigenously designed and developed for supporting persona based testing. MOSIP Test Rig covers the end-to-end test execution and reporting. The end-to-end functional test scenarios are written starting from pre-registration, to creation of packet in registration center, processing the packet through the registration processor, generating UIN and authenticating identity using IDA through various permutation and combinations of cases being covered. MOSIP Test Rig will be an open source artifact which can also be enhanced and used by countries to validate the SI deliveries before going live. Persona classes include both negative and positive personas. Negative persona classes include users like Bribed Registration Office, Malicious Insider etc. The needs of positive persona classes must be met, whereas the needs of negative persona classes must be effectively restricted by the software.

Verified configuration

Verification is performed on various configurations as mentioned below:

  • Default configuration - with 3 languages

  • Virtual countries

    • 1 Lang configuration

    • 2 Lang configuration

    • 3 Lang configuration

Feature health

Test execution statistics

Functional test results

Below are the test metrics for Inji Wallet by performing functional testing using mockMDS and mockABIS. The process followed was black box testing which based its test cases on the specifications of the software component under test. Functional test was performed in combination of individual module testing as well as integration testing. Test data were prepared inline with the user stories. Expected results were monitored by examining the user interface. The coverage includes GUI testing, System testing, End-To-End flows across multiple languages and configurations. The testing cycle included simulation of multiple identity schema and respective UI schema configurations.

Test Rate: 96% with Pass Rate: 86%

Here is the detailed breakdown of metrics:

On Android Device

  • Total Test cases: 733

    • Passed: 625

    • Failed: 76

    • Skipped: 32

On iOS Device

  • Total Test cases: 661

    • Passed: 541

    • Failed: 100

    • Skipped: 20

External API verification results by modules

Below section provides details on API test metrics by executing MOSIP functional automation Framework. All external API test executions were performed at module level isolation. Each endpoint is tested with the test data and expectations of each test data are mapped to assert the test case.

Test Rate: 100% with Pass Rate: 98.34%

Here is the detailed breakdown of metrics:

Inji Wallet

eSignet

Note:

Functional and test rig code base branch which is used for the above metrics is:

Commit Sha: 6641489c9ea2129daaf6989c7e6d73bae528a4c0

UI Verification results by modules

Below section provides details on UI test metrics by executing MOSIP UI Automation Framework. Test executions were performed at module level isolation. Each end point is tested with the test data and expectations of each test data are mapped to assert the test case.

Here is the detailed breakdown of metrics:

Android

iOS

Testing with various device combinations

Below are the test metrics by performing VC Sharing functionality on various device combinations.

Test Rate: 100% with Pass Rate: 100%

Detailed Test Metrics

Below are the detailed test metrics by performing manual/ automation testing. The project metrics are derived from Defect density, Test coverage, Test execution coverage, test tracking and efficiency.

The various metrics that assist in test tracking and efficiency are as follows:

  • Passed Test Cases Coverage: It measures the percentage of passed test cases. (Number of passed tests / Total number of tests executed) x 100

  • Failed Test Case Coverage: It measures the percentage of all the failed test cases. (Number of failed tests / Total number of test cases executed) x 100

Test Report

Scope

The scope of testing is to verify fitment to the specification from the perspective of:

  • Functionality

  • Deployability

  • Configurability

  • Customizability

Verification is performed not only from the end-user perspective but also from the System Integrator (SI) point of view. Hence, the configurability and extensibility of the software is also assessed. This ensures readiness of software for use in multiple countries. Since MOSIP is an “API First” product platform, verification scope required comprehensive automation testing for all the MOSIP APIs. An automation Test Rig is created for the same.

The Inji Wallet testing scope revolves around the following flows:

  • Biometric unlock

  • Passcode unlock

  • VC download via MOSIP

  • VC download via eSignet

  • Retrieving UIN via AID

  • Pinning a VC

  • Normal VC sharing with VID

  • Deleting VC

  • Face Auth on Resident's phone with VID

  • Multi language support

  • Credential registry

  • Backup and restore

  • Wallet binding

  • QR code Login

  • Logout

Test approach

Persona based approach has been adopted to perform the IV&V(Independent Verification and Validation) by simulating the test scenarios that resemble a real-time implementation.

A Persona is a fictional character / user profile created to represent a user type that might use a product/ or a service in a similar way. Persona based testing is a software testing technique that puts software testers in the customer's shoes, assesses their needs from the software and thereby determines use cases/ scenarios that the customers will execute. The persona needs may be addressed through any of the following:

  • Functionality

  • Deployability

  • Configurability

  • Customizability

The verification methods may differ based on how the need was addressed.

For regression check, MOSIP Test Rig, an automation testing suite is indigenously designed and developed for supporting persona based testing. MOSIP Test Rig covers the end-to-end test execution and reporting. The end-to-end functional test scenarios are written starting from pre-registration, to creation of packet in registration center, processing the packet through the registration processor, generating UIN and authenticating identity using IDA through various permutation and combinations of cases being covered. MOSIP Test Rig will be an open source artifact which can also be enhanced and used by countries to validate the SI deliveries before going live. Persona classes include both negative and positive personas. Negative persona classes include users like Bribed Registration Office, Malicious Insider etc. The needs of positive persona classes must be met, whereas the needs of negative persona classes must be effectively restricted by the software.

Verified configuration

Verification is performed on various configurations as mentioned below.

  • Default configuration - with 3 Languages

  • Virtual countries

    • 1 language configuration

    • 2 language configuration

    • 3 language configuration

Feature health

On Android Device:

On iOS Device

Test execution statistics

Functional test results

Below are the test metrics for Inji Wallet by performing functional testing using mockMDS and mockABIS. The process followed was black box testing which based its test cases on the specifications of the software component under test. Functional test was performed in combination of individual module testing as well as integration testing. Test data were prepared inline with the user stories. Expected results were monitored by examining the user interface. The coverage includes GUI testing, System testing, End-To-End flows across multiple languages and configurations. The testing cycle included simulation of multiple identity schema and respective UI schema configurations.

Test Rate: 97.60% with Pass Rate: 88.31%

Here is the detailed breakdown of metrics:

On Android Device

  • Total Test cases: 950

    • Passed: 810

    • Failed: 114

    • Skipped (N/A): 26

On iOS Device

  • Total Test cases: 873

    • Passed: 800

    • Failed: 55

    • Skipped: 18

External API verification results by modules

Below section provides details on API test metrics by executing MOSIP functional automation Framework. All external API test executions were performed at module level isolation. Each endpoint is tested with the test data and expectations of each test data are mapped to assert the test case.

Test Rate: 99.09% with Pass Rate: 94.22%

Here is the detailed breakdown of metrics:

Mobile ID

eSignet

UI Automation results

Below section provides details on UI Automation by executing MOSIP functional automation Framework.

Test Rate: 100% with Pass Rate: 87.50%

Here is the detailed breakdown of metrics

Android

ios

Functional and test rig code base branch which is used for the above metrics is:

Hash Tag: sha256 : f010aee8b1e7f25cfb2284b20779cb5b8b6bd2efdd8a22b1e3c6d3a20194411a

Testing with various device combinations

Below are the test metrics by performing VC Sharing functionality on various device combinations.

Test Rate: 100% with Pass Rate: 72.8%

Detailed Test Metrics

Below are the detailed test metrics by performing manual/automation testing. The project metrics are derived from Defect density, Test coverage, Test execution coverage, test tracking and efficiency.

The various metrics that assist in test tracking and efficiency are as follows:

  • Passed Test Cases Coverage: It measures the percentage of passed test cases. (Number of passed tests / Total number of tests executed) x 100

  • Failed Test Case Coverage: It measures the percentage of all the failed test cases. (Number of failed tests / Total number of test cases executed) x 100

Test Report

Testing Scope

The scope of testing is to verify fitment to the specification from the perspective of

  • Functionality

  • Deployability

  • Configurability

  • Customizability

Verification is performed not only from the end user perspective but also from the System Integrator (SI) point of view. Hence Configurability and Extensibility of the software is also assessed. This ensures the readiness of software for use in multiple countries. Since MOSIP is an “API First” product platform, Verification scope required comprehensive automation testing for all the MOSIP APIs. An automation Test Rig is created for the same.

The Inji testing scope revolves around the following flows:

  • Biometric unlock

  • Passcodes unlock

  • VC download via MOSIP

  • VC download via eSignet

  • VC download via Sunbird

  • Retrieving UIN/ via AID

  • Pinning a VC

  • Normal VC sharing with VID

  • Deleting VC

  • Face Auth on Resident's phone with VID

  • Multi language support

  • Credential registry

  • Backup and restore

  • Wallet binding

  • QR code Login

  • Logout

Test Approach

Persona based approach has been adopted to perform the IV&V, by simulating test scenarios that resemble a real-time implementation.

A Persona is a fictional character/user profile created to represent a user type that might use a product/or a service in a similar way. Persona based testing is a software testing technique that puts software testers in the customer's shoes, assesses their needs from the software and thereby determines use cases/scenarios that the customers will execute. The persona needs may be addressed through any of the following.

  • Functionality

  • Deploy ability

  • Configurability

  • Customizability

The verification methods may differ based on how the need was addressed.

For regression check, “MOSIP Test Rig” - an automation testing suite - which is indigenously designed and developed for supporting persona-based testing. MOSIP Test Rig covers the end-to-end test execution and reporting. The end-to-end functional test scenarios are written starting from pre-registration to creation of packet in registration center, processing the packet through the registration processor, generating UIN and authenticating identity using IDA through various permutation and combinations of cases being covered. MOSIP Test Rig will be an open-source artifact which can also be enhanced and used by countries to validate the SI deliveries before going live. Persona classes include both negative and positive personas. Negative persona classes include users like Bribed Registration Office, Malicious Insider etc. The needs of positive persona classes must be met, whereas the needs of negative persona classes must be effectively restricted by the software.

Verified configuration

Verification is performed on various configurations as mentioned below

  • Default configuration - with 3 Lang

  • Virtual countries

    • 1 Lang configuration

    • 2 Lang configuration

    • 3 Lang configuration

Feature Health

On Android Device:

On iOS Device:

Test execution statistics

Functional test results by modules

Below are the test metrics by performing functional testing using mock MDS and mock ABIS. The process followed was black box testing which based its test cases on the specifications of the software component under test. The functional test was performed in combination with individual module testing as well as integration testing. Test data were prepared in line with the user stories. Expected results were monitored by examining the user interface. The coverage includes GUI testing, System testing, End-To-End flows across multiple languages and configurations. The testing cycle included simulation of multiple identity schema and respective UI schema configurations.

Here is the detailed breakdown of metrics for each module:

External API verification results by modules

Below section provides details on API test metrics by executing MOSIP functional automation Framework. All external API test executions were performed at module level isolation. Each end point is tested with the test data and expectations of each test data are mapped to assert the test case.

Here is the detailed breakdown of metrics

UI Automation results

Below section provides details on Ui Automation by executing MOSIP functional automation Framework.

Here is the detailed breakdown of metrics

Functional and test rig code base branch which is used for the above metrics is:

Hash Tag:

SHA: sha256: b477f64889c7340a1d1ca6b17601473c30d206de8de9c8a69e8879be38e1dbb5

Testing with various device combinations

Below are the test metrics by performing VC Sharing functionality on various device combinations

Detailed Test metrics

Below are the detailed test metrics by performing manual/automation testing. The project metrics are derived from Defect density, Test coverage, Test execution coverage, test tracking and efficiency.

The various metrics that assist in test tracking and efficiency are as follows:

  • Passed Test Cases Coverage: It measures the percentage of passed test cases. (Number of passed tests / Total number of tests executed) x 100

  • Failed Test Case Coverage: It measures the percentage of all the failed test cases. (Number of failed tests / Total number of test cases executed) x 100

Test Report

Testing Scope

The scope of testing is to verify fitment to the specification from the perspective of

  • Functionality

  • Deployability

  • Configurability

  • Customizability

Verification is performed not only from the end user perspective but also from the System Integrator (SI) point of view. Hence Configurability and Extensibility of the software is also assessed. This ensures readiness of software for use in multiple countries. Since MOSIP is an “API First” product platform, Verification scope required comprehensive automation testing for all the MOSIP APIs. An automation Test Rig is created for the same.

The Inji testing scope revolves around the following flows:

  • Biometric unlock

  • Passcode unlock

  • VC download via MOSIP

  • VC download via esignet

  • VC download via Sunbird

  • Retriving UIN/ via AID

  • Pinning a VC

  • Normal VC sharing with VID

  • Deleting VC

  • Face Auth on Resident's phone with VID

  • Multi language support

  • Credential registry

  • Backup and restore

  • Wallet binding

  • QR code Login

  • Logout

Test Approach

Persona based approach has been adopted to perform the IV&V, by simulating test scenarios that resemble a real-time implementation.

A Persona is a fictional character/user profile created to represent a user type that might use a product/or a service in a similar way. Persona based testing is a software testing technique that puts software testers in the customer's shoes, assesses their needs from the software and thereby determines use cases/scenarios that the customers will execute. The persona needs may be addressed through any of the following.

  • Functionality

  • Deployability

  • Configurability

  • Customizability

The verification methods may differ based on how the need was addressed.

For regression check, “MOSIP Test Rig” - an automation testing suite - which is indigenously designed and developed for supporting persona based testing. MOSIP Test Rig covers the end to end test execution and reporting. The end to end functional test scenarios are written starting from pre-registration, to creation of packet in registration center, processing the packet through the registration processor, generating UIN and authenticating identity using IDA through various permutation and combinations of cases being covered. MOSIP Test Rig will be an open source artifact which can also be enhanced and used by countries to validate the SI deliveries before going live. Persona classes include both negative and positive personas. Negative persona classes include users like Bribed Registration Office, Malicious Insider etc. The needs of positive persona classes must be met, whereas the needs of negative persona classes must be effectively restricted by the software.

Verified configuration

Verification is performed on various configurations as mentioned below

  • Default configuration - with 3 Lang

  • Virtual countries

    • 1 Lang configuration

    • 2 Lang configuration

    • Lang configuration

Feature Health

On Android Device:

On iOS Device:

Test execution statistics

Functional test results by modules

Below are the test metrics by performing functional testing using mock MDS and mock ABIS. The process followed was black box testing which based its test cases on the specifications of the software component under test. Functional test was performed in combination of individual module testing as well as integration testing. Test data were prepared in line with the user stories. Expected results were monitored by examining the user interface. The coverage includes GUI testing, System testing, End-To-End flows across multiple languages and configurations. The testing cycle included simulation of multiple identity schema and respective UI schema configurations.

Here is the detailed breakdown of metrics for each module:

External API verification results by modules

Below section provides details on API test metrics by executing MOSIP functional automation Framework. All external API test executions were performed at module level isolation. Each end point is tested with the test data and expectations of each test data are mapped to assert the test case.

Here is the detailed breakdown of metrics

UI Automation results

Below section provides details on Ui Automation by executing MOSIP functional automation Framework.

Here is the detailed breakdown of metrics

Functional and test rig code base branch which is used for the above metrics is:

Hash Tag:

SHA: sha256:c2a71c11f19a6585e6cfd3ae8ab70130babb2077e27714f5fc225b986e7c14d0

Testing with various device combinations

Below are the test metrics by performing VC Sharing functionality on various device combinations

Detailed Test metrics

Below are the detailed test metrics by performing manual/automation testing. The project metrics are derived from Defect density, Test coverage, Test execution coverage, test tracking and efficiency.

  • The various metrics that assist in test tracking and efficiency are as follows:

  • Passed Test Cases Coverage: It measures the percentage of passed test cases. (Number of passed tests / Total number of tests executed) x 100

  • Failed Test Case Coverage: It measures the percentage of all the failed test cases. (Number of failed tests / Total number of test cases executed) x 100

Version DP2

Release Name: Inji vDP2

Upgrade From: Inji 0.10.0

Support: Developer Preview Release2

Release Date: 22nd January, 2024

Overview

The Developer Preview Version 2 release is an additional release on top of Inji 0.10.0. This release primarily emphasizes:

  • UI enhancements

  • Internal enhancements

  • Security fixes

  • Bug fixes

Summary

Below is the detailed summary of the release.

UI enhancements

  • As a part of the VC sharing feature or listing of VCs for QR login, the Pinned VC will now appear on top of the VC list.

  • User can now provide one time consent for a selected VC while sharing the claims during QR code login.

  • Additionally, a search bar has been added to the Add new card screen to improve user experience by allowing users to search for issuers based on the title.

  • Furthermore, any rendering issues in the user interface have been resolved.

Internal enhancements

  • Secure KeyStore and Tuvali have been integrated as independent NPM modules within the INJI framework. For further information, please refer to the provided documentation.

  • Additionally, all image assets have been converted from png to svg format. This transition ensures the presence of a single asset set, and the color of the icons will now be dynamically rendered based on the application's theme.

Security Fixes

The critical vulnerabilities identified by OWASP dependency check have been addressed:

  • The expo-app-loading package has been replaced with expo-splash-screen for the purpose of app loading.

  • In order to enhance security for devices without hardware backed keystore, the crypto-js package has been substituted with node-forge for encryption, decryption, and HMAC generation.

Bug fixes

Functional Fixes

App Crash

BLE issues

Face Authentication

UX issues

UI issues

Repository Released

Documentation

Given a JSON and a Mapper(similar to ) are given, it maps the JSON with Mapper and then does the CBOR encode/decode.

Below is the list of known issues. To read in detail and view all the issues related to Inji Verify please click .

Below is the of fixes as part of the 0.14.0 release:

Redmi devices are not supported in this release. To know more, refer.

To simplify the deployment process for Mimoto in local environment, a Docker Compose file is now available. Click to know more.

The Inji repo is renamed to

Redmi devices are not supported in this release. To know more, refer .

To know more about the GenderMag UI/UX changes in the application, please refer .

Inji Wallet has proven capability to integrate with any credential issuer supporting OpenID protocol and issues Verifiable Credentials (VCs) based on OpenID4VCI standards. To demonstrate the implementation of VC download using KBI (Knowledge Based Identification), Inji Wallet when integrated with , can connect with any issuer preferring KBI-based identification.

To know more about, KBI, refer .

Redmi devices are not supported in this release. To know more, refer .

Onboarding a new VC Issuer: For each new VC Issuer, Mimoto must be onboarded as an OIDC client to . To know more, refer .

Mimoto-Issuer configuration changes: Changes to authentication and well-known configuration details will be included in the mimoto-issuers configuration. To know more, refer .

To know more about the GenderMag UI/UI changes in the Inji Wallet application, please refer.

To prevent failures during download caused by verification of Verifiable Credentials with any other signature type, this step needs to be bypassed. Learn more about the steps .

To know more about QR code verification, read about Inji Verify .

To read more about PixelPass library refer .

Redmi devices are not supported in this release. To know more, refer.

Jira issue
Issue description
Jira issue
Severity
Issue description

We've transitioned to using for Bluetooth Low Energy (BLE) communication, enhancing the connectivity experience.

Bug fix: Reduced the app size for Android #

Bug fix: Resolved connectivity issue when sharing VC #

Bug fix: Fixed QR/ Esignet login using INJI app #,

Bug fix: Resolved BLE issues #,

To know more about Inji Wallet, watch the !

Link for the .

Link for the

Git hub link for the xls file is .

Github link for the xls file is .

Efforts have been made to improve the security of data in the default file located in the mmkv folder under the task.

To know more about Inji, watch the !

0.14.1
0.14.0
v0.3.0
v1.4.1
v0.10.0
v0.5.1
v0.5.0
v0.2.1
v0.2.1
v0.2.0
v0.1.1
v0.1.1
Inji Mobile Wallet-2653
v0.15.0
v0.15.2
v1.1.0
v0.1.0
v0.1.0
v0.2.0
v0.2.0
v0.3.0
v0.3.0
v0.6.0
v0.6.0
0.5.0
1.5.0
0.10.1
v0.10.0
v0.5.1
v0.5.0
INJIMOB-2901
INJIMOB-2907
INJIMOB-2521
INJIMOB-2241
INJIMOB-2159
INJIMOB-1852
INJIMOB-1603
INJIMOB-1336
INJIMOB-2880
INJIMOB-2778
INJIMOB-2576
INJIMOB-2572
INJIMOB-2549
INJIMOB-2548
INJIMOB-2525
INJIMOB-2524
INJIMOB-2522
INJIMOB-2462
INJIMOB-2450
INJIMOB-2324
INJIMOB-2311
INJIMOB-2310
NJIMOB-2264
INJIMOB-2252
INJIMOB-2228
INJIMOB-2227
INJIMOB-2214
INJIMOB-2146
INJIMOB-2122
INJIMOB-2120
INJIMOB-2098
INJIMOB-2048
INJIMOB-2042
INJIMOB-1956
INJIMOB-1910
INJIMOB-1894
INJIMOB-1856
INJIMOB-1837
claim 169
here
list
Feature Documentation
Integration Guides
User Guide
QA Report
API Documentation
here
Feature Documentation
Integration Guides
User Guide
QA Report
API Documentation
here
inji-wallet
here
Feature Documentation
Integration Guides
User Guide
QA Report
API Documentation
here
eSignet 1.4.0
here
here
Feature Documentation
Integration Guides
User Guide
QA Report
API Documentation
eSignet
here
here
Feature Documentation
Integration Guides
User Guide
API Documentation

Total

Passed

Failed

Skipped

1394

1166

176

52

Total

Passed

Failed

Skipped

1268

1247

17

4

Total

Passed

Failed

Skipped

154

152

2

0

Total

Passed

Failed

Skipped

1114

1095

15

4

Total

Passed

Failed

Skipped

102

61

41

0

Total

Passed

Failed

Skipped

52

36

16

0

Total

Passed

Failed

Skipped

50

25

25

0

Total

Passed

Failed

Skipped

152

152

0

0

Total

Passed

Failed

Skipped

1823

1610

169

44

Total

Passed

Failed

Skipped

1436

1353

68

13

Total

Passed

Failed

Skipped

157

143

14

0

Total

Passed

Failed

Skipped

1279

1210

54

13

Total

Passed

Failed

Skipped

128

112

16

0

Total

Passed

Failed

Skipped

72

64

8

0

Total

Passed

Failed

Skipped

56

48

8

0

Total

Passed

Failed

Skipped

213

155

61

0

Total

Passed

Failed

Skipped (N/A)

2303

2034

226

43

Test Rate: 98% With Pass Rate: 90%

Test cases

On Android Device

Total

1236

Passed

1085

Failed

124

Skipped (N/A)

27

On iOS Device

Total

1067

Passed

949

Failed

102

Skipped (N/A)

16

Total

Passed

Failed

Skipped

1335

1275

32

28

Test Rate: 97.9% With Pass Rate: 97.5%

Test cases

Mobile ID

Total

63

Passed

61

Failed

2

Skipped

0

eSignet

Total

1272

Passed

1214

Failed

30

Skipped

28

Total

Passed

Failed

Skipped

120

107

13

0

Test Rate: 100% With Pass Rate: 89.16%

Test cases

Android

Total

63

Passed

54

Failed

9

Skipped

0

iOS

Total

57

Passed

53

Failed

4

Skipped

0

Total

Passed

Failed

Skipped

192

192

0

0

Test Rate: 100% With Pass Rate: 100%

Total

Passed

Failed

Skipped (N/A)

2118

1975

103

40

Test Rate: 98% With Pass Rate : 95%

Test cases

On Android Device

Total

1112

Passed

1005

Failed

81

Skipped (N/A)

26

On iOS Device

Total

1006

Passed

970

Failed

22

Skipped (N/A)

14

Total

Passed

Failed

Skipped

1436

1426

6

4

Test Rate: 99.72% With Pass Rate: 99.30%

Test cases

Mobile ID

Total

157

Passed

157

Failed

0

Skipped

0

eSignet

Total

1279

Passed

1269

Failed

6

Skipped

4

Total

Passed

Failed

Skipped

162

146

16

0

Test Rate: 100% With Pass Rate: 90.12%

Test cases

Android

Total

82

Passed

75

Failed

7

Skipped

0

iOS

Total

80

Passed

71

Failed

9

Skipped

0

Total

Passed

Failed

Skipped

213

155

61

0

Test Rate: 100% With Pass Rate: 72.8%

v0.14.0
v0.1.1
v0.14.0
v0.3.0
v1.4.1
v0.10.0
v0.5.1
v0.5.0
v0.2.1
v0.2.1
v0.2.0
v0.1.1
Inji Wallet-1896
Inji Wallet-1837
Inji Wallet-1748
Inji Wallet-1745
Inji Wallet-1744
Inji Wallet-1604
Inji Wallet-1603
Inji Wallet-1530
Inji Wallet-1490
Inji Wallet-1481
Inji Wallet-1265
Inji Wallet-1261
Inji Wallet-1259
Inji Wallet-1256
Inji Wallet-1252
Inji Wallet-1248
Inji Wallet-868
Inji Wallet-689
Inji Wallet-886
Inji Wallet-1410
Inji Wallet-1418
Inji Wallet-1422
Inji Wallet-1531
Inji Wallet-1591
Inji Wallet-1600
Inji Wallet-1814
Inji Wallet-1816
Inji Wallet-1820
Inji Wallet-1836
Inji Wallet-1849
Inji Wallet-1850
Inji Wallet-1854
Inji Wallet-1855
Inji Wallet-1858
Inji Wallet-1897
Inji Wallet-1898
Inji Wallet-2050
Inji Wallet-2051
v0.5.1
v0.2.1
v0.2.1
v0.1.1
v0.13.1
0.13.1
0.1.2
INJIMOB-1910
INJIMOB-1896
INJIMOB-1837
INJIMOB-1748
INJIMOB-1745
INJIMOB-1744
INJIMOB-1604
INJIMOB-1603
INJIMOB-1530
INJIMOB-1490
INJIMOB-1481
INJIMOB-1265
INJIMOB-1261
INJIMOB-1259
INJIMOB-1258
INJIMOB-1256
INJIMOB-1255
INJIMOB-1252
INJIMOB-1248
INJIMOB-868
INJIMOB-689
v0.13.0
v0.13.1
v0.1.2
v0.5.0
v0.5.0
v0.2.0
v0.2.0
v0.2.0
v0.1.0
v0.1.0
0.13.1
1.4.0
0.9.0
INJIMOB-1603
INJIMOB-1600
INJIMOB-1591
INJIMOB-1574
INJIMOB-1530
INJIMOB-1503
INJIMOB-1499
INJIMOB-1490
INJIMOB-1481
INJIMOB-1422
INJIMOB-1403
INJIMOB-1265
INJIMOB-1261
INJIMOB-1259
INJIMOB-1258
INJIMOB-1256
INJIMOB-1255
INJIMOB-1253
INJIMOB-1252
INJIMOB-1251
INJIMOB-1250
INJIMOB-1248
INJIMOB-1239
INJIMOB-1002
INJIMOB-968
INJIMOB-875
INJIMOB-872
INJIMOB-868
INJIMOB-689
INJIMOB-1552
INJIMOB-1551
INJIMOB-1550
INJIMOB-1537
INJIMOB-1418
INJIMOB-1403
INJIMOB-1240
INJIMOB-1192
INJIMOB-323
v0.11.0
v0.11.0
v0.4.7
v0.11.0-INJI
v0.1.7
v1.2.0.1
INJIMOB-968
INJIMOB-946
INJIMOB-937
INJIMOB-875
INJIMOB-872
INJIMOB-868
INJIMOB-836
INJIMOB-705
INJIMOB-689
INJIMOB-548
INJIMOB-529
INJIMOB-523
INJIMOB-522
INJIMOB-520
INJIMOB-491
INJIMOB-447
INJIMOB-406
INJIMOB-320
INJIMOB-306
INJIMOB-272
INJIMOB-269
INJIMOB-50
INJIMOB-703
INJIMOB-572
INJIMOB-714
INJIMOB-713
INJIMOB-709
INJIMOB-760
INJIMOB-699
INJIMOB-694
INJIMOB-559
INJIMOB-377
INJIMOB-327
v0.11.0
v0.11.0-INJI
here
here
here
here
here
Feature Documentation
Integration Guides
User Guide
QA Report
API Documentation
Tuvali
INJI-103
INJI-207
INJI-209
INJI-49
INJI-146
INJI-70
Feature Documentation
User Guide
QA Report
video
detailed test report
detailed test report
here
here
INJI-467
Feature Documentation
User Guide
QA Report
video

Repositories

Tags Released

Inji

mimoto

mosip-config

IOS -Specific devices the User not able to see the iCloud ID in iCloud setting section of backup and restore page.

INJI- Error message is not proper when invalid QR is scanned after changing language to other than English.

INJI - Backup & restore Name Is Different In Settings And in Backup & restore Page

INJI - Help Icon Language not Changing when we select other language that english

Backup and Restore heading Alignment is not proper in Backup& restore page

IOS - Associated app ID is missing in the Backup and restore page.

Inji- Date format is not proper in the e-signet Vc

INJI- Sometimes VC activate the button and back button responses is very slow

INJI - VC getting created without image while generating the UIN with lower and higher iso files.

Android - Intermediately while doing the face authentication the app is getting crashed

INJI - Iderpo UINs are failing in VC verification

Inji - Screen header and back button are overlapping

INJI - onboarding of new issuer is affecting the existing issuers

Inji- In specific devices, the Pin and Unpin feature is not working.

Android- Occasionally, unable to activate the restored VC

IOS - Upon sharing sunbird VC twice and then upon sharing Mosip VC, app crashes

Android - During face authentication, app crashes on a specific device

INJI - Backup doesn't append the new data, but replaces the data

Upon changing the finger authentication in the device, application does not display the error pop up for biometrics change

Blocker

inji - we are observing a download error message

Critical

Inji-Downloading error is observed when we were trying to restore VCs in a new device.

Critical

INJI- after deleting the backed up data it is not reflecting in the app

Critical

INJI - we are able to restore when there is no data to restore

Critical

IOS - app is not responsive in few senarios

Critical

INJI - once we delete a restored VC, we are not able to delete or pin other restore VC

Critical

IOS - device specific data is backuped if the Icloud is shared in multiple device

Critical

IOS - in specific device we are not able to restore VC

Critical

IOS- While deleting a single VC all downloaded VCs are getting deleted

Critical

INJI- The Backup button and restore button both are clickable at the same time

Critical

INJI - face auth is not working in room brightness on all devices

Critical

Getting tampered error pop up without tampering any vc in Vivo Y73.-- update: all devices

Critical

Inji- The Inji application is not stable sometimes we are not able to activate the VC

Major

INJIUI :- share button text is not translating to another language for ios

Major

Backup and restore screen the back button's response is slow.

Major

INJI- sunbird Vc is not rendering properly for a few second in sharing card page and received card page

Major

VC Select screen appears in a flash when the user clicks on Share from NavBar after navigating to Home page from the ID Transfer successful screen.

Major

android - receive card header is fully in caps

Major

INJI - few elements are not changing when the app converted to rtl

Major

Inji- We are missing the face validating popup and the Face match successfully popup.

Major

"Id details" section of downloaded card through e-signet don't have green tick mark in status.

Minor

Inji-In the intro sliders, the heading on the backup data page mentions "Data Backup."

Minor

INJI - The date format for downloaded and received are different for the same VC.

Minor

Inji- In download id screen enter the random 10 digits number it was showing UIN/VID/AID is invalid.

Minor

IOS- After downloading the sunbird Vc Unwanted space in between tick icon and valid

Minor

INJI-There was a glitch on previous connected screen for a second.

Repositories

Tags Released

Inji

Mimoto

Issue ID

Description

Unable to get error message when download retry count is updated to 10.

iOS - app data erased when we logout in offline.

We are not able to scan the e-signet QR code In iOS device.

App resets on re-launch after VC activation in iOS.

Logout not working in iOS version of Inji.

iOS - language preference is again asked when we logged out of the app.

UIN of previously downloaded VC is wrongly pre-filled in AID screen.

VC sharing is failing intermittently on Android.

Pinned VC's audit logs are missing.

Issue ID

Description

Android - app crashing while saving VC from eSignet, if the hardware keystore is rejected by user.

Android- The Inji app is crashing intermediately.

Issue ID

Description

Android - specific verifier is not connecting with wallet.

Cross-platform - App couldn't recognize if the Bluetooth is turned off while in connection state.

Android - We are able to receive VC even if we turned off Bluetooth in specific devices.

Handle timeout during VC share via BLE.

Issue ID

Description

The app couldn't recognize resident face when there are changes.

Issue ID

Description

iOS- once we share VC through share with selfie, we are not getting successful screen in the wallet.

iOS - Loading Screen is missing after Face Auth.

Button name in "Status" page is not matching as per the requirement provided.

The navigation button to go back from the ID details page is missing, not matching the wireframe provided.

While logging out for the first time the language selection and tour guide show up.

There is no popup to cancel the download card.

The back button is not working on few places of the app.

While sharing the VC, if we click on scan icon, application displays the camera.

Issue ID

Description

UI - text search field in Add new card screen does not match wireframe.

Not getting "setting up" message under loading screen (intermittent screen).

'+' icon used for downloading VC is occupying three dots ellipses of last VC.

The face authentication button is not as per the theme color.

A page from wireframe is missing in the application.

On 'Received Card' screen expanded view of VC is not working.

The successful QR code login audit is not matching the wireframe.

There are few elements still in color, orange in the purple theme.

The app is not aligned properly with the smaller display phone.

Share button is not aligned properly in iOS and Android.

"It is necessary" text in consent screen is getting overlapped with page slider in smaller devices.

Try again button is not aligned properly upon change language to Tamil (when no internet connection).

Intermittent: Getting double toaster message on home screen.

Capture button text is not getting displayed completely.

In the connecting page user is getting some orange color box.

The error pop-up is not user friendly and not matching the UI.

The Download pop-up should stay longer.

Time stamp should be removed in OTP screen once it is expired.

Repositories

Tags Released

Inji

config

Features

Here is a comprehensive summary of the features offered by Inji Web.

Download Verifiable Credentials (VC):

Inji Web's user-friendly interface simplifies the process of downloading your VCs as PDF files in four simple steps. Here’s how it works:

  • Access the Inji web portal: Users can access the Inji Web Portal which is compatible with popular browsers such as Chrome, Firefox, Safari and Edge to mention a few

  • Select Issuer and Credential: Users can easily choose an issuer from the provided list and select the credential type offered by the issuer

  • Verification Process: Verification ensures that only authorized individuals can access and download the requested VCs. This adds an extra layer of security, preventing unauthorized access and ensuring that credentials are obtained only by the rightful owner

  • Download Credential: Users can securely download and store their digital VCs in PDF format

Store Verifiable Credentials (VC):

Inji Web provides users with a secure and reliable way to store Verifiable Credentials using Durian, a highly secure data storage solution. The downloaded credential is safely stored within the platform, ensuring they have access to it whenever needed via a QR Code. This secure storage feature guarantees that credentials are protected from unauthorized access while remaining accessible for future use.

The stored credentials are available anytime, enabling users to retrieve them quickly without having to repeat the download process. Whether for personal use or to meet credential presentation requests, Inji Web ensures your VCs are always securely stored and readily available.

Share Verifiable Credentials (VC):

Inji Web makes it easy for users to share their Verifiable Credentials with service providers or organizations. Each downloaded credential includes a QR code embedded within the PDF, offering multiple ways to share it. Users can present the QR code in person by printing the PDF or upload the file directly to a verifier's website for remote verification.

For added convenience, Inji Web supports online sharing methods where users can respond to a verifier’s presentation request, allowing seamless sharing of the VC. This flexible sharing feature empowers users to share their credentials securely and effortlessly, adapting to different verification environments.

Test Report

Scope

The scope of testing is to verify fitment to the specification from the perspective of:

  • Functionality

  • Deployability

  • Configurability

  • Customizability

Verification is performed not only from the end-user perspective but also from the System Integrator (SI) point of view. Hence, the configurability and extensibility of the software is also assessed. This ensures readiness of software for use in multiple countries. Since MOSIP is an “API First” product platform, verification scope required comprehensive automation testing for all the MOSIP APIs. An automation Test Rig is created for the same.

The Inji Wallet testing scope revolves around the following flows:

  • Biometric Unlock

  • Passcode Unlock

  • VC download with VID

  • Renaming VC / Edit tag for VID

  • Normal VC sharing with VID

  • Online and Offine mode sharing

  • Face Auth on Resident's phone with VID

  • Multi language support

  • Wallet binding

  • QR code Login

Test approach

Persona based approach has been adopted to perform the IV&V(Independent Verification and Validation) by simulating the test scenarios that resemble a real-time implementation.

A Persona is a fictional character/ user profile created to represent a user type that might use a product/ or a service in a similar way. Persona based testing is a software testing technique that puts software testers in the customer's shoes, assesses their needs from the software and thereby determines use cases/ scenarios that the customers will execute. The persona needs may be addressed through any of the following:

  • Functionality

  • Deployability

  • Configurability

  • Customizability

The verification methods may differ based on how the need was addressed.

For regression check, MOSIP Test Rig, an automation testing suite is indigenously designed and developed for supporting persona based testing. MOSIP Test Rig covers the end-to-end test execution and reporting. The end-to-end functional test scenarios are written starting from pre-registration, to creation of packet in registration center, processing the packet through the registration processor, generating UIN and authenticating identity using IDA through various permutation and combinations of cases being covered. MOSIP Test Rig will be an open source artifact which can also be enhanced and used by countries to validate the SI deliveries before going live. Persona classes include both negative and positive personas. Negative persona classes include users like Bribed Registration Office, Malicious Insider etc. The needs of positive persona classes must be met, whereas the needs of negative persona classes must be effectively restricted by the software.

Feature health

Test execution statistics

Functional test results

Below are the test metrics for Inji Wallet by performing functional testing using mockMDS and mockABIS. The process followed was black box testing which based its test cases on the specifications of the software component under test. Functional test was performed in combination of individual module testing as well as integration testing. Test data were prepared inline with the user stories. Expected results were monitored by examining the user interface. The coverage includes GUI testing, System testing, End-To-End flows across multiple languages and configurations. The testing cycle included simulation of multiple identity schema and respective UI schema configurations.

Total

Passed

Failed

Skipped

359

319

40

0

Test Rate: 100% with Pass Rate : 88%

Here is the detailed breakdown of metrics:

On Android Device

  • Total Test cases: 185

    • Passed: 177

    • Failed: 8

    • Skipped: 0

On iOS Device

  • Total Test cases: 174

    • Passed: 142

    • Failed: 32

    • Skipped: 0

External API verification results for Inji Wallet

Below section provides details on API test metrics by executing MOSIP functional automation Framework. The external API test executions were performed at module level isolation. Each end point is tested with the test data and expectations of each test data are mapped to assert the test case.

Total

Passed

Failed

Skipped

37

36

1

0

Test Rate: 100% with Pass Rate : 97%

Testing End-to-end flow(s)

End-to-end flows are a set of stateful test cases that expects the results across multiple modules. The test does not cover the intermediary stages, rather concentrates on the end result for a given data. The test covers both negative scenarios and positive scenarios with real world scenarios. Below are the end-to-end scenarios test metrics by executing MOSIP Automation Framework.

Total

Passed

Failed

Skipped

84

63

21

0

Test Rate: 100% with Pass Rate: 75%

Testing with various device combinations

Below are the test metrics by performing VC Sharing functionality on various device combinations.

Total

Passed

Failed

Skipped

192

160

32

0

Test Rate: 100% with Pass Rate : 83%

Detailed test metrics

Below are the detailed test metrics by performing manual/ automation testing. The project metrics are derived from Defect density, Test coverage, Test execution coverage, test tracking and efficiency.

The various metrics that assist in test tracking and efficiency are as follows:

  • Passed Test Cases Coverage: It measures the percentage of passed test cases. (Number of passed tests / Total number of tests executed) x 100

  • Failed Test Case Coverage: It measures the percentage of all the failed test cases. (Number of failed tests / Total number of test cases executed) x 100

Overview

What is Inji Web?

With its simple and intuitive interface, Inji Web offers features similar to the mobile wallet, catering to a variety of use cases. Whether you are a resident needing VCs for identity verification, a student seeking academic credentials, a professional verifying employment, or an organization enhancing business operations, Inji Web provides easy access to your credentials tailored to your specific needs.

By facilitating the issuance, verification and sharing of credentials in a secure and efficient manner, Inji Web plays a pivotal role in fostering trust amongst the service providers.

How does Inji web work?

  • Users can simply visit the Inji web portal, where they can select an issuer from the list of trusted options and choose the desired credential for download

  • To proceed, users are required to authenticate themselves by providing relevant information such as National ID, Registration Number, Name, Date of Birth, etc., enabling them to securely manage, store, and share the credential

  • Upon successful validation, the Verifiable credential is promptly downloaded as a PDF, along with a QR code issued by the Issuer

  • Once downloaded, users have the flexibility to share the Verifiable credential with relying parties either as a physical copy or by facilitating QR code scanning or uploading the PDF on the verifier site

  • As we progress, additional features are planned to be seamlessly integrated into Inji Web

  • Inji ensures the integrity of digital signatures provided by issuers for each ID before Verifiable Credentials are downloaded as PDFs within the system

Backend systems

Inji Web interacts with:

More on Inji Web:

Version 0.9.0

Release Name: Inji 0.9.0 (Beta)

Release Date: 14th April, 2023

Overview

The 0.9.0 version of Inji Wallet is the beta release which covers essential features such as Downloading and sharing the VC, Wallet binding, face authentication on resident' phone, etc.

Features Covered

The basic features such as,

  • Biometric Unlock

  • Passcode Unlock

  • VC download with VID

  • Renaming VC / Edit tag for VID

  • Normal VC sharing with VID

  • Online and Offine mode sharing

  • Face Auth on Resident's phone with VID

  • Multi-language support

  • Wallet binding

  • QR code Login

  • Logout

are available as part of this release.

Documentation

Version 0.9.1

Release Name: Inji 0.9.1 (Patch)

Upgrade From: Inji 0.9.0 (Beta)

Support: Developer Release

Release Date: 25th July, 2023

Overview

The 0.9.1 version of Inji Wallet is the first patch release on top of Inji 0.9.0. This release has bug fixes for features like Downloading and sharing the VC, Wallet binding, face authentication on resident’s phone, etc.

Summary

Below is a summary of some of the important bug fixes made in this version.

  • Added capabilitities to transfer the VC to more number of devices with an increase in device compatibility.

  • Introduction of error codes in case the transfer of VC fails.

  • Based on the android devices, Inji Wallet now asks for only the required Bluetooth permissions.

  • Migrated to MMKV storage from Async storage. With this, the devices can now store more number of VCs.

  • Renew auth token after expiry in Mimoto.

  • Added support for Filipino language (Philippines language).

  • Added support for languages whose semantics are Right-to-Left.

  • Added feature to restrict the downloading of ID card when the download of the card via UIN is blocked.

  • Updated VC thumbprints when the same VC is downloaded multiple times on the same device and is activated.

Internal Improvements

The 0.9.1 version of Inji Wallet mainly focuses on bug fixes along with some internal improvements like:

  • Ability to build on Windows

  • Abilty to build and push iOS builds to TestFlight without any human intervention

Change in implementation

The older version of Inji Wallet app (0.9.0) will not be compatible with the newer version of Inji, due to the following reasons:

  • The storage has been changed from Async Storage to mmkv storage, which are two different storage mechanisms.

  • The VC sharing might break as Tuvali has updated the type of data shared across devices, hence it can cause array index out of bounds exception.

Bug fixes

Documentation

Test Report

Scope

The scope of testing is to verify fitment to the specification from the perspective of:

  • Functionality

  • Deployability

  • Configurability

  • Customizability

Verification is performed not only from the end user perspective but also from the System Integrator (SI) point of view. Hence, the configurability and extensibility of the software is also assessed. This ensures readiness of software for use in multiple countries. Since MOSIP is an “API First” product platform, verification scope required comprehensive automation testing for all the MOSIP APIs. An automation Test Rig is created for the same.

In this release, the testing scope has been focused around the hotfixes for Inji Wallet along with the addition of the below new features:

  • Moving away from Google Nearby API definitions

  • Optimization of Save VC flow

Test Approach

Persona based approach has been adopted to perform the IV&V(Independent Verification and Validation) by simulating the test scenarios that resemble a real-time implementation.

A Persona is a fictional character/ user profile created to represent a user type that might use a product/ or a service in a similar way. Persona based testing is a software testing technique that puts software testers in the customer's shoes, assesses their needs from the software and thereby determines use cases/scenarios that the customers will execute. The persona needs may be addressed through any of the following.

  • Functionality

  • Deployability

  • Configurability

  • Customizability

The verification methods may differ based on how the need was addressed.

For regression check, “MOSIP Test Rig”- an automation testing suite - which is indigenously designed and developed for supporting persona based testing. MOSIP Test Rig covers the end to end test execution and reporting. The end to end functional test scenarios are written starting from pre-registration, to creation of packet in registration center, processing the packet through the registration processor, generating UIN and authenticating identity using IDA through various permutation and combinations of cases being covered. MOSIP Test Rig will be an open source artifact which can also be enhanced and used by countries to validate the SI deliveries before going live. Persona classes include both negative and positive personas. Negative persona classes include users like Bribed Registration Office, Malicious Insider etc. The needs of positive persona classes must be met, whereas the needs of negative persona classes must be effectively restricted by the software.

Verified configuration

Verification is performed on various configurations as mentioned below:

Default configuration (with 6 languages)

* English
* Arabic
* Filipino
* Hindi
* Tamil
* Kannada

Feature Health

Test execution statistics

Functional test results

Below are the test metrics by performing functional testing using mockMDS and mockABIS. The process followed was black box testing which based its test cases on the specifications of the software component under test. Functional test was performed in combination of individual module testing as well as integration testing. Test data were prepared in line with the user stories. Expected results were monitored by examining the user interface. The coverage includes GUI testing, System testing, End-To-End flows across multiple languages and configurations. The testing cycle included simulation of multiple identity schema and respective UI schema configurations.

Total

Passed

Failed

Skipped

396

337

40

19

Test Rate: 95% with Pass Rate : 89%

Here is the detailed breakdown of metrics for each module:

On Android Device

  • Total Test cases: 206

    • Passed: 185

    • Failed: 17

    • Skipped: 4

On iOS Device

  • Total Test cases: 190

    • Passed: 152

    • Failed: 23

    • Skipped: 15

External API verification results for Inji

Below section provides details on API test metrics by executing MOSIP functional automation Framework. All external API test executions were performed at module level isolation. Each end point is tested with the test data and expectations of each test data are mapped to assert the test case.

Total

Passed

Failed

Skipped

154

149

5

0

Test Rate: 100% with Pass Rate : 96%

Testing with various device combinations

Below are the test metrics by performing VC Sharing functionality on various device combinations:

Total

Passed

Failed

Skipped

192

192

0

0

Test Rate: 100% with Pass Rate : 100%

Detailed Test metrics

Below are the detailed test metrics by performing manual/ automation testing. The project metrics are derived from Defect density, Test coverage, Test execution coverage, test tracking and efficiency.

The various metrics that assist in test tracking and efficiency are as follows:

● Passed Test Cases Coverage: It measures the percentage of passed test cases. (Number of passed tests / Total number of tests executed) x 100

● Failed Test Case Coverage: It measures the percentage of all the failed test cases. (Number of failed tests / Total number of test cases executed) x 100

Version 0.10.0

Release Name: Inji 0.10.0

Upgrade From: Inji 0.9.0

Support: Developer Release

Release Date: 19th December, 2023

Overview

We are pleased to announce the release of Inji Version 0.10.0. This release builds upon Inji 0.9.1, introducing key features and improvements.

  • OpenID Support for Verifiable Credentials: Inji 0.10.0 introduces support for OpenID, facilitating the issuance of verifiable credentials.

  • Enhanced Security for Personally Identifiable Information (PII) Data: A significant focus has been placed on reinforcing security measures related to Personally Identifiable Information (PII) data.

  • Facial Recognition for Transaction Authorization: This version introduces advanced facial recognition capabilities to elevate the security of transaction authorization processes.

  • Improved UI/UX: User Interface (UI) and User Experience (UX) have undergone refinement to provide users with an intuitive and aesthetically pleasing interaction.

  • Application ID (AID): Inji 0.10.0 now includes an Application ID, contributing to streamlined identification and tracking.

Summary

Below is the detailed summary of the release.

Enhanced UI/UX

  • A redesigned interface promises improved usability and a more intuitive experience.

  • Navigation buttons have been updated to prominently display primary functionalities.

  • Secondary functionalities, such as viewing received Verifiable Credentials (VC) and displaying QR codes, have been relocated under the settings menu for a streamlined experience.

  • The introduction of new and detailed error messages, along with app warnings, aims to enhance transparency and overall usability.

Enhanced Security

  • Securely stored encryption of private keys using the Android hardware keystore for heightened security.

  • Implemented hash algorithms for verifying the integrity of downloaded and received Verifiable Credentials (VCs).

  • Enhanced password security with the implementation of password hashing algorithms.

  • App now proactively responds to security breaches by initiating a self-reset or eliminating tampered Verifiable Credentials (VCs).

OpenID Support

  • Inji now seamlessly integrates with OpenID, expanding support for Verifiable Credentials (VC).

  • The app is now equipped to onboard Identity Providers (IdP), offering users a choice when interacting with issuers.

  • Introduces new screens allowing users to select issuers before downloading Verifiable Credentials (VC).

  • eSignet and MOSIP have been successfully onboarded as Identity Providers within Inji.

Advanced Facial Recognition authorization

Inji now employs advanced facial recognition libraries for secure and seamless authorization of Verifiable Credential (VC) transfers.

Application ID for Customer Support

A unique application ID is now associated with each unique installation of Inji. It is made accessible to the users.

Repository Released

Repositories

Tags Released

mimoto

inji

tuvali

mosip-config

secure-keystore

mosip-onboarder

Known Issues

Bug Fixes

Documentation

Test Report

Scope

The scope of testing is to verify fitment to the specification from the perspective of:

  • Functionality

  • Deployability

  • Configurability

  • Customizability

Verification is performed not only from the end-user perspective but also from the System Integrator (SI) point of view. Hence, the configurability and extensibility of the software is also assessed. This ensures readiness of software for use in multiple countries. Since MOSIP is an “API First” product platform, verification scope required comprehensive automation testing for all the MOSIP APIs. An automation Test Rig is created for the same.

The Inji Wallet testing scope revolves around the following flows:

  • Biometric unlock

  • Passcode unlock

  • VC download via MOSIP

  • VC download via eSignet

  • Retrieving UIN/VID via AID

  • Pinning a VC

  • Normal VC sharing with VID

  • Deleting VC

  • Face Auth on Resident's phone with VID

  • Multi language support

  • Wallet binding

  • QR code Login

  • Logout

Test approach

Persona based approach has been adopted to perform the IV&V(Independent Verification and Validation) by simulating the test scenarios that resemble a real-time implementation.

A Persona is a fictional character/ user profile created to represent a user type that might use a product/ or a service in a similar way. Persona based testing is a software testing technique that puts software testers in the customer's shoes, assesses their needs from the software and thereby determines use cases/ scenarios that the customers will execute. The persona needs may be addressed through any of the following:

  • Functionality

  • Deployability

  • Configurability

  • Customizability

The verification methods may differ based on how the need was addressed.

For regression check, MOSIP Test Rig, an automation testing suite is indigenously designed and developed for supporting persona based testing. MOSIP Test Rig covers the end-to-end test execution and reporting. The end-to-end functional test scenarios are written starting from pre-registration, to creation of packet in registration center, processing the packet through the registration processor, generating UIN and authenticating identity using IDA through various permutation and combinations of cases being covered. MOSIP Test Rig will be an open source artifact which can also be enhanced and used by countries to validate the SI deliveries before going live. Persona classes include both negative and positive personas. Negative persona classes include users like Bribed Registration Office, Malicious Insider etc. The needs of positive persona classes must be met, whereas the needs of negative persona classes must be effectively restricted by the software.

Feature health

Test execution statistics

Functional test results

Below are the test metrics for Inji Wallet by performing functional testing using mockMDS and mockABIS. The process followed was black box testing which based its test cases on the specifications of the software component under test. Functional test was performed in combination of individual module testing as well as integration testing. Test data were prepared inline with the user stories. Expected results were monitored by examining the user interface. The coverage includes GUI testing, System testing, End-To-End flows across multiple languages and configurations. The testing cycle included simulation of multiple identity schema and respective UI schema configurations.

Total

Passed

Failed

Skipped

1087

863

177

47

Test Rate: 95% with Pass Rate : 82%

Here is the detailed breakdown of metrics:

On Android Device

  • Total Test cases: 602

    • Passed: 476

    • Failed: 99

    • Skipped: 27

On iOS Device

  • Total Test cases: 485

    • Passed: 387

    • Failed: 78

    • Skipped: 20

External API verification results by modules

Below section provides details on API test metrics by executing MOSIP functional automation Framework. All external API test executions were performed at module level isolation. Each endpoint is tested with the test data and expectations of each test data are mapped to assert the test case.

Total

Passed

Failed

Skipped

1268

1262

6

0

Test Rate: 100% with Pass Rate: 99.52%

Here is the detailed breakdown of metrics:

Inji Wallet

Total

Passed

Failed

Skipped

154

152

2

0

eSignet

Total

Passed

Failed

Skipped

1114

1110

4

0

Note:

Functional and test rig code base branch which is used for the above metrics is:

Commit Id is: 103e0606

Hash Tag: afedb56a2977844286bc4cbfedb8263507efa823a3d7d5a7b3cbd601ac22d120

Testing with various device combinations

Below are the test metrics by performing VC Sharing functionality on various device combinations.

Total

Passed

Failed

Skipped

40

40

0

0

Test Rate: 100% with Pass Rate : 100%

Detailed Test Metrics

Below are the detailed test metrics by performing manual/ automation testing. The project metrics are derived from Defect density, Test coverage, Test execution coverage, test tracking and efficiency.

The various metrics that assist in test tracking and efficiency are as follows:

  • Passed Test Cases Coverage: It measures the percentage of passed test cases. (Number of passed tests / Total number of tests executed) x 100

  • Failed Test Case Coverage: It measures the percentage of all the failed test cases. (Number of failed tests / Total number of test cases executed) x 100

Technology Stack

UI & Rest end points

The table below outlines the frameworks, tools, and technologies employed by Inji Web:

Deployment

The table below specifies the tools to deploy Inji Web:

eSignet - Authentication Layer

Let's explore how eSignet integrates with Inji Web and provides authentication solutions for the download workflow as follows:

Download VC

  • The User navigates to the Home page of the Inji web application and selects an issuer and credential type

  • Next, the authentication page is displayed which is the interface provided by eSignet.

  • The user enters the required information, such as Policy Number, Name, and Date of Birth. Subsequently, the system gets redirected back to Mimoto to add a client_id and generate a key pair, initiating the request to download the credential

  • Once Mimoto provides the response with the client_id and key, the credential endpoint of the issuer is invoked to get the credentials

Credential endpoint

Once the access token is received via the token endpoint from eSignet, Mimoto invokes this endpoint to obtain the Verifiable Credential.

Note: The endpoint attribute is present in the issuer's well-known configuration.

Backend services

The backend services section provides an in-depth overview of the backend components and functionalities of Inji Web. It offers insights into data management, authentication processes, and communication between the frontend and backend systems.

Architecture

Inji Web is an intuitive, user-friendly portal designed to helps users to access Verifiable Credentials.

The architecture diagram below illustrates the structure and components of Inji Web, offering a detailed explanation of how the platform operates and how its various elements interact to deliver its features and functionality.

Architecture Components

Let's briefly explore the key components of the architecture that constitute Inji Web:

  1. Inji Web: A React-based, user-friendly web portal that allows users to easily download Verifiable Credentials.

  2. Backend for Frontend (BFF): Mimoto acts as the BFF layer for Inji Web, managing both authentication and credential requests. It processes authentication through eSignet for secure user authorization and token issuance, while handling credential issuance requests via Certify.

  3. Authentication Layer: eSignet handles the authentication process, authorizing users, issuing access tokens, and preparing credentials by retrieving necessary data from the credential issuer.

  4. Credential Issuer: Any credential issuer that supports the OpenID4VCI protocol can be listed as a trusted issuer. These issuers provide the user data required for creating and downloading Verifiable Credentials.

  5. Durian: Durian provides persistent storage for Verifiable Credentials, allowing them to be securely stored and accessed later.

Develop

This section offers an overview of the architecture and technologies utilized in Inji Web, ensuring compatibility, security, and efficiency in the management of Verifiable Credentials.

Mimoto - BFF

Mimoto serves as a Backend for Frontend (BFF) for Inji Web, handling retrieval of default configurations and downloading VCs. It offers essential APIs to Inji Web, facilitates validations, and forwards requests to relevant services.

In mimoto-issuers-config.json, new providers can be added as per the well-known schema.

Mimoto endpoints used by Inji Web:

  1. Fetch Issuers:

  1. Fetch Issuer's Configuration:

  1. Download PDF:

  1. Fetch Issuer Credentials:

This API fetches the list of Credential Types offered by the issuer, sourced from the well-known configuration of the issuer. Users can filter credentials based on search parameter.

https://api.collab.mosip.net/v1/mimoto/issuers/{issuer-id}/.well-known

Method Type: GET

Parameter:

issuerid: ID of the issuer in string type.

Response

Response code 200

{
  "credential_issuer": "https://injicertify-insurance.dev1.mosip.net",
  "authorization_servers": [
    "https://esignet-insurance.dev1.mosip.net"
  ],
  "credential_endpoint": "https://injicertify-insurance.dev1.mosip.net/v1/certify/issuance/credential",
  "credential_configurations_supported": {
    "InsuranceCredential": {
      "format": "ldp_vc",
      "scope": "sunbird_rc_insurance_vc_ldp",
      "order": [
        "fullName",
        "policyName",
        "policyExpiresOn",
        "policyIssuedOn",
        "policyNumber",
        "mobile",
        "dob",
        "gender",
        "benefits",
        "email"
      ],
      "proof_types_supported": {
        "jwt": {
          "proof_signing_alg_values_supported": [
            "RS256",
            "PS256"
          ]
        }
      },
      "credential_definition": {
        "type": [
          "VerifiableCredential",
          "InsuranceCredential"
        ],
        "credentialSubject": {
          "fullName": {
            "display": [
              {
                "name": "Name",
                "locale": "en"
              }
            ]
          },
          "mobile": {
            "display": [
              {
                "name": "Phone Number",
                "locale": "en"
              }
            ]
          },
          "dob": {
            "display": [
              {
                "name": "Date of Birth",
                "locale": "en"
              }
            ]
          },
          "gender": {
            "display": [
              {
                "name": "Gender",
                "locale": "en"
              }
            ]
          },
          "benefits": {
            "display": [
              {
                "name": "Benefits",
                "locale": "en"
              }
            ]
          },
          "email": {
            "display": [
              {
                "name": "Email Id",
                "locale": "en"
              }
            ]
          },
          "policyIssuedOn": {
            "display": [
              {
                "name": "Policy Issued On",
                "locale": "en"
              }
            ]
          },
          "policyExpiresOn": {
            "display": [
              {
                "name": "Policy Expires On",
                "locale": "en"
              }
            ]
          },
          "policyName": {
            "display": [
              {
                "name": "Policy Name",
                "locale": "en"
              }
            ]
          },
          "policyNumber": {
            "display": [
              {
                "name": "Policy Number",
                "locale": "en"
              }
            ]
          }
        }
      },
      "display": [
        {
          "name": "Health Insurance",
          "locale": "en",
          "logo": {
            "url": "https://raw.githubusercontent.com/tw-mosip/file-server/master/StayProtectedInsurance.png",
            "alt_text": "a square logo of a Veridonia"
          },
          "background_image": {
            "uri": "https://api.dev1.mosip.net/inji/veridonia-logo.png"
          },
          "background_color": "#FDFAF9",
          "text_color": "#7C4616"
        }
      ]
    },
    "LifeInsuranceCredential": {
      "format": "ldp_vc",
      "scope": "life_insurance_vc_ldp",
      "order": [
        "fullName",
        "policyName",
        "policyExpiresOn",
        "policyIssuedOn",
        "policyNumber",
        "mobile",
        "dob",
        "gender",
        "benefits",
        "email"
      ],
      "proof_types_supported": {
        "jwt": {
          "proof_signing_alg_values_supported": [
            "RS256",
            "ES256"
          ]
        }
      },
      "credential_definition": {
        "type": [
          "VerifiableCredential",
          "LifeInsuranceCredential"
        ],
        "credentialSubject": {
          "fullName": {
            "display": [
              {
                "name": "Name",
                "locale": "en"
              }
            ]
          },
          "mobile": {
            "display": [
              {
                "name": "Phone Number",
                "locale": "en"
              }
            ]
          },
          "dob": {
            "display": [
              {
                "name": "Date of Birth",
                "locale": "en"
              }
            ]
          },
          "gender": {
            "display": [
              {
                "name": "Gender",
                "locale": "en"
              }
            ]
          },
          "benefits": {
            "display": [
              {
                "name": "Benefits",
                "locale": "en"
              }
            ]
          },
          "email": {
            "display": [
              {
                "name": "Email Id",
                "locale": "en"
              }
            ]
          },
          "policyIssuedOn": {
            "display": [
              {
                "name": "Policy Issued On",
                "locale": "en"
              }
            ]
          },
          "policyExpiresOn": {
            "display": [
              {
                "name": "Policy Expires On",
                "locale": "en"
              }
            ]
          },
          "policyName": {
            "display": [
              {
                "name": "Policy Name",
                "locale": "en"
              }
            ]
          },
          "policyNumber": {
            "display": [
              {
                "name": "Policy Number",
                "locale": "en"
              }
            ]
          }
        }
      },
      "display": [
        {
          "name": "Life Insurance",
          "locale": "en",
          "logo": {
            "url": "https://raw.githubusercontent.com/tw-mosip/file-server/master/StayProtectedInsurance.png",
            "alt_text": "a square logo of a Veridonia"
          },
          "background_image": {
            "uri": "https://api.dev1.mosip.net/inji/veridonia-logo.png"
          },
          "background_color": "#FDFAF9",
          "text_color": "#7C4616"
        }
      ]
    }
  }
}

Customizations

Countries have the option to customize Inji Web as per their requirements. Refer to the documents below for more information on the same.

The following customizations are available in Inji Web:

Credential Providers

Inji Web currently provides support for following credential providers:

Download VC using OpenID for VC Issuance Flow (eSignet)

  • National ID

  • Insurance

To set up a new provider that can issue VC, it can be accomplished by making a few configuration changes.

Steps:

  1. The configuration details can be found in the mimoto-issuers-config.json property file. This file is maintained separately for each deployment environment. In this repository, each environment's configuration is stored in a dedicated branch specific to that environment.

These values will be used by Inji Wallet via Mimoto. Mimoto exposes APIs which is used by the Inji Wallet application to fetch, store the issuers and their configurations in the local storage.

  • API used to fetch issuers: https://api.mosip.io/v1/mimoto/residentmobileapp/issuers

  • API used to fetch issuer's configuration: https://api.mosip.io/v1/mimoto/residentmobileapp/issuers/${issuerId}

  1. In mimoto-issuers-config.json, new providers can be added as per the well-known schema defined by OpenID4VCI standards.

After adding the provider in configuration, it will be displayed on the UI on Add new card screen.

  • If it doesn't support OpenID4VCI protocol, new state machine needs to be added. Please refer to issuerMachine.ts and EsignetMosipVCItemMachine.ts.

  1. At present, Inji Wallet supports verification of VCs which has RSA proof type. If VC is issued with any other proof type, verification will fail and VC will not be downloaded. To bypass this VC verification, we need to use issuer id as "Sunbird".

Refer https://github.com/mosip/mosip-config/blob/collab1/mimoto-issuers-config.json#L71 as reference. Here, credential_issuer should be "Sunbird" and then add all the configuration.

  1. Token endpoint should also use same issuer id. Refer https://github.com/mosip/mosip-config/blob/collab1/mimoto-issuers-config.json#L143

  2. Onboarding Mimoto as OIDC Client for a new Issuer:

  • Mimoto OIDC client is now added as an optional partner, which can be onboarded through partner onboarder as per requirement.

  • Client ID is created randomly by using the PMS API, and there is no client Secret for that.

  • Clients can be renewed upon request, however, this will require some manual adjustments. It is recommended to create a client only once per environment as they do not expire.

  • Modifications were made to the install.sh script within the Mimoto software, along with adjustments to the helm charts in the Mimoto repository, in order to facilitate the storage and mounting of the oidckeystore.p12 file.

  • For Onboarding the new issuer, the same steps have to be followed and p12 has to be generated.

  • Once the p12 file is generated, the existing keystore file should be exported from the Mimoto pod. The newly created p12 file must then be imported and remounted in the Mimoto POD.

UI Customizations

Below sections provides instructions on how themes can be customized in Inji Web application.

Steps:

InjiWeb uses two different files to handle the customization in UI.

1. tailwind.config.js:

Here, properties related to the font and colors for each component is maintained.

2. index.css

Setting Defaults for Inji Web Application :

DEFAULT_THEME: This property helps you to customize the theme, currently Inji Web Supports two different Themes

DEFAULT_LANG: - This property helps you to specify the default language during the deployment.

DEFAULT_TITLE: - This property helps you to specify the default title of the INJIWEB during the deployment.

Locale Customizations

Inji Web offers multi-lingual support. At present, 3 Indian and 3 international Languages are supported.

  1. English

  2. Arabic

  3. French

  4. Tamil

  5. Hindi

  6. Kannada

Steps to support a new language

  1. Under locales folder, localization of a particular language JSON file has to be added.

  2. Language JSON has to be imported in i18n.ts and load the resources to i18next as follows:

  • import ta from './locales/ta.json';

  • const resources = { en, fr, ar, hi, kn, ta };

  1. Ensure the language display mapping is done in the LanguagesSupported variable in i18n.ts

  2. To use with react, must include the key with the 't' function <Text>{t('editLabel')}</Text>

About libraries

Below specified libraries are used in the Inji Web react project to support localization:

Configurations

The following section aims to outline the necessary configuration files required for seamless operation and customization of Inji Web and Mimoto:

Inji Web:

Below property files define the configurations for default properties which are consumed by Inji Web.

  • inji-default.properties - Default Configuration for Inji Web App is provided here

  • credential-template.html - PDF Template for Inji Web Credential Download is available here

Mimoto:

  • mimoto-default.properties - Contains default Configuration for Mimoto

  • mimoto-issuers-config.json - Issuers related configuration are provided here.

For more detailed information on each step and the underlying systems, click .

For more detailed information on each step and the underlying systems, click .

For more detailed information on each step and the underlying systems, click .

Link for the .

Inji Web, akin to the , is a user-friendly web portal designed to facilitate the process of securely downloading, storing, managing and sharing Verifiable Credentials through a web interface. This easy-to-use platform enables users to access and store their credentials, ensuring confident presentation to service providers for verification and service access, with ease and reliability. Rooted by the principles of inclusivity, Inji Web endeavors to empower individuals to access benefits or services even without smartphones.

Inji Web application is built using the and utilizes Mimoto as the BFF (Backend for Frontend). The digital verifiable credentials produced by the application adhere to the .

Furthermore, Inji Web is designed to be compatible with the protocol, offering the flexibility to onboard various Identity Providers (IdP). This empowers users with multiple options for Verifiable Credential (VC) issuers

for managing issuers details, facilitate VC download and generate PDF

for authentication

To learn more about the Features provided by Inji Web, click

For information on the Roadmap for Inji Web, click .

Bug fix: All the binded VCs will be shown and every binded VC can be used for online login irrespective of the timeframe of binding. #

Bug fix: Tuvali now has the capability to specify an error code to let Inji know where the error has occurred during VC sharing instead of displaying the default error message. #

Bug fix: Added capability to build APKs on Windows. # #

Bug fix: In iOS, when the user tries to go back from the OTP screen while generating VID from AID, Inji was crashing. As a fix, it was made sure that the models (overlays) are not overlapping. #

Bug fix: Inji now has the capability to render the resident's demographic information in the language chosen by the Residents. #

Bug fix: Inji now has the capability to identify when the App is low on storage and notify the same to the Residents. #

Bug fix: During wallet binding when the auth token is expired, the first call made for wallet binding will be used for refreshing the auth token, which then makes the current call to fail and subsequent calls to succeed. As a fix, the wallet binding call will refresh the token and complete the binding process. #

Bug fix: Inji Wallet had a restriction to the overall storage size, in that, we were not able to download more than 29 VCs. As a fix, we migrated from Async storage to MMKV which does not have any upper limit on the storage size. #

Bug fix: In the Home Screen, the tab indicators were not properly working in RTL. After the fix, RTL is being rendered properly. #

Bug fix: The VCs that are added were getting stored in the app memory rather than user data. As a fix, MMKV storage was introduced (as opposed to async storage) to solve this by moving the VC data to user data instead of App memory. #

Bug fix: A few texts were not being rendered in Arabic. The Arabic translations were added to make sure when the resident has chosen Arabic language, all the data is being rendered in Arabic. #

Bug fix: Inji Wallet application was not consistent in different locales, and some literals were not properly translated in the native languages. As a fix, all the missed out translations were added. # #

Bug fix: The error popup shown during the BLE transfer is updated, the popup will now contain few error codes which depicts different stages where the failure has happened in the BLE layer. #

Bug fix: There was a delay in reading and writing the VC from the device, so the storage mechanism has been changed from Async Storage to MMKV Storage, which ensures faster reading and writing. #

Bug fix: Few devices failed to establish the connection while sharing of VCs were initiated (Vivo Y73 & Redmi K20 Pro). To resolve this, setting preferred PHY was removed and missing BLE permissions for Android 12 and above were added. #

Bug fix: The VC transfers from iOS device always failed when Android 13 was the Verifier. As a fix, Bluetooth negotiation was updated to support Google Pixel (Android 13). #

To know more about Inji Wallet, watch the !

Link for the .

Redmi devices are not supported for this release. To know more, refer to .

The user will now be redirected to the MOSIP page successfully from the About INJI screen. Earlier the link was crashing the app. #

The user will be able to login into eSignet portal via QR code, using the VC activated on Home screen via. ellipsis menu. #

App will prompt and remove tampered VC. #

The user will be asked for language preference only at new installation. #

Previously used UIN/VID will not be suggested in the AID field for VC download. #

The user will be able to see the detailed view of Received VC. #

The user will be redirected to an intermittent downloading screen, when download is triggered from OpenID supported issuer. #

Link for the .

Tool / Technology
Version
Description
License

18.2v

React enables building user interfaces from individual units called components.

4.9.5

A strongly typed programming language that builds on JavaScript and uses type inference to give great tooling without additional code.

3.4.3

A utility-first CSS framework that streamlines web development by providing a set of pre-designed utility classes for rapid styling without writing custom CSS, promoting consistency and scalabilitystrong>.

14.2.1

The React Testing Library is a very lightweight solution for testing React components

29.7.0

Jest is a well-known JavaScript testing framework and is extensively used to test React applications

Tool / Technology
Version
Description
License

20.4 and above

Docker is a set of platform as a service (PaaS) products that use OS-level virtualization to deliver software in packages called containers.

npm is the package manager for the Node JavaScript platform. It puts modules in place so that node can find them, and manages dependency conflicts intelligently

depends on Inji-web version

Helm helps in managing Kubernetes applications - helps define, install, and upgrade even the most complex Kubernetes application. Charts are easy to create, version, share, and publish — so start using Helm and stop the copy-and-paste.

eSignet provides a user-friendly and efficient method for individuals to authenticate themselves and a access online services. Serving as a dependable identity provider for relying party applications, it grants access to services without requiring additional login credentials. eSignet also provides a secure means of verifying an individual's identity against trusted identity providers, such as national identity databases, driver's license systems, passport systems, or other trusted sources. The level of assurance here is determined by the authentication factor employed. To know more about eSignet, click .

To support credential issuance from any issuer compatible with the OpenID4VCI protocol, Mimoto must be onboarded as an OIDC client. Refer for more details on how to onboard Mimoto (BFF) as an OIDC client.

Detailed API documentation for Mimoto is accessible .

Configuration details to set up a new provider that can issue VC, can be found in the mimoto-issuers-config.json property file. Refer to of Collab environment.

Refer to of Collab environment.

If new provider supports protocol, it is recommended to use issuerMachine.ts and EsignetMosipVCItemMachine.ts for workflow to download VC.

In itself, there is a script by the name create-signing-certs.sh which creates the certificates as well as the oidckeystore.p12.

Inji Web is built using library.

: i18next is an internationalization framework. It provides the standard i18n features such as , , , and . It provides a complete solution to localize products in the web.

: react-i18next is a set of components, hooks, and plugins that sit on top of i18next, and is specifically designed for React.

repo contains all the necessary configurations for the Inji Stack.

acts as a BFF layer for both Web and the Wallet. Below mentioned property files define the configurations of default properties which are consumed by Mimoto.

v0.12.0
v0.12.0
v0.12.0
INJIMOB-1265
INJIMOB-1261
INJIMOB-1259
INJIMOB-1258
INJIMOB-1256
INJIMOB-1255
INJIMOB-1253
INJIMOB-1252
INJIMOB-1251
INJIMOB-1250
INJIMOB-1248
INJIMOB-1239
INJIMOB-1192
INJIMOB-1002
INJIMOB-968
INJIMOB-875
INJIMOB-872
INJIMOB-868
INJIMOB-689
INJIMOB-685
INJIMOB-946
INJIMOB-909
INJIMOB-908
INJIMOB-885
INJIMOB-869
INJIMOB-867
INJIMOB-866
INJIMOB-865
INJIMOB-864
INJIMOB-763
INJIMOB-531
INJIMOB-491
INJIMOB-1279
INJIMOB-901
INJIMOB-895
INJIMOB-746
INJIMOB-741
INJIMOB-737
INJIMOB-704
INJIMOB-511
INJIMOB-948
INJIMOB-947
INJIMOB-925
INJIMOB-894
INJIMOB-822
Inji Developer Preview Release1- vDP1
Mimoto vDP1
INJI-556
INJI-555
INJI-474
INJI-590
INJI-363
INJI-362
INJI-332
INJI-295
INJI-262
INJI-552
INJI-533
INJI-521
INJI-156
INJI-154
INJI-625
INJI-516
INJI-549
INJI-558
INJI-546
INJI-512
INJI-480
INJI-299
INJI-259
INJI-223
INJI-593
INJI-494
INJI-478
INJI-440
INJI-427
INJI-329
INJI-300
INJI-261
INJI-260
INJI-618
INJI-545
INJI-492
INJI-479
INJI-446
INJI-445
INJI-388
INJI-324
INJI-322
Inji Developer Preview Release2- vDP2
Release vDP2
here
here
here
detailed test report
Inji Wallet
React framework
Verifiable Credentials (VC) Data Model
OpenID
Mimoto APIs
eSignet APIs
here
here
Feature Documentation
User Guide
QA Report
INJI-80
INJI-71
INJI-53
INJI-30
INJI-46
INJI-44
INJI-42
INJI-41
INJI-38
INJI-36
INJI-35
INJI-34
INJI-33
INJI-32
INJI-28
INJI-7
INJI-39
INJI-68
Feature Documentation
User Guide
QA Report
video
detailed test report
known issues in Redmi device
INJI 225
INJI 253
INJI 397
INJI 362
INJI 332
INJI 329
INJI 458
Feature Documentation
Integration Guides
User Guide
QA Report
API Documentation
detailed test report
here
here
here
mimoto-issuers-config.json
```jsx
/** @type {import('tailwindcss').Config} */
module.exports = {
    darkMode: 'selector',
    content: [
        "./src/**/**/*.{js,jsx,ts,tsx}",
    ],
    theme: {
        extend: {
            fontFamily:{
                base: 'var(--iw-font-base)',
            },
            colors: {
                iw: {
                    background: 'var(--iw-color-background)',
                    header: 'var(--iw-color-header)',
                    footer: 'var(--iw-color-footer)',
                    title: 'var(--iw-color-title)',
                    subTitle: 'var(--iw-color-subTitle)',
                    searchTitle: 'var(--iw-color-searchTitle)',
                    primary: 'var(--iw-color-primary)',
                    helpAccordionHover: 'var(--iw-color-helpAccordionHover)',
                    shadow: 'var(--iw-color-shadow)',
                    spinningLoaderPrimary: 'var(--iw-color-spinningLoaderPrimary)',
                    spinningLoaderSecondary: 'var(--iw-color-spinningLoaderSecondary)',
                    navigationBar: 'var(--iw-color-navigationBar)',
                    languageGlobeIcon: 'var(--iw-color-languageGlobeIcon)',
                    languageArrowIcon: 'var(--iw-color-languageArrowIcon)',
                    languageCheckIcon: 'var(--iw-color-languageCheckIcon)',
                    closeIcon: 'var(--iw-color-closeIcon)',
                    searchIcon: 'var(--iw-color-searchIcon)',
                    tileBackground: 'var(--iw-color-tileBackground)',
                    shieldSuccessIcon: 'var(--iw-color-shieldSuccessIcon)',
                    shieldErrorIcon: 'var(--iw-color-shieldErrorIcon)',
                    shieldLoadingIcon: 'var(--iw-color-shieldLoadingIcon)',
                    shieldSuccessShadow: 'var(--iw-color-shieldSuccessShadow)',
                    shieldErrorShadow: 'var(--iw-color-shieldErrorShadow)',
                    shieldLoadingShadow: 'var(--iw-color-shieldLoadingShadow)',
                }
            }
        },
    },
    plugins: [require('tailwindcss-rtl')],
}

```
    * This file maintains the css properties for each theme in the css variables.
    * During the deployment, the theme properties will get applied based on the theme selected.

```jsx

@layer base {
    :root {
        --iw-font-base: "Inter", sans-serif;
        --iw-color-background: #FFFFFF;
        --iw-color-header: #000000;
        --iw-color-shieldLoadingIcon: #ff914b;
        --iw-color-shieldSuccessShadow: #f1f7ee;
        --iw-color-shieldErrorShadow: #FEF2F2;
        --iw-color-shieldLoadingShadow: #f6dfbe;
    }
    .purple_theme {
        --iw-font-base: "Gentium Plus", serif;
        --iw-color-background: #bcaaf3;
        --iw-color-header: #8f69ec;
        --iw-color-shieldErrorIcon: #4518de;
        --iw-color-shieldLoadingIcon: #5b32f1;
        --iw-color-shieldSuccessShadow: #f1f7ee;
        --iw-color-shieldErrorShadow: #FEF2F2;
        --iw-color-shieldLoadingShadow: #f6dfbe;
    }
}
```
In the env.config.js file, below properties is used to customize the application during the deployment.

```jsx
window._env_ = {
		...
		DEFAULT_LANG: "en",
    DEFAULT_THEME: "",
    DEFAULT_TITLE: "Inji Web",
    ...
};
```
1. Default Theme - “”
2. Purple Theme - “purple_theme”
export const LanguagesSupported: LanguageObject[] = [
    {label: "English", value: 'en'},
    {label: "தமிழ்", value: 'ta'},
    {label: "ಕನ್ನಡ", value: 'kn'},
    {label: "हिंदी", value: 'hi'},
    {label: "Français", value: 'fr'},
    {label: "عربي", value: 'ar'}
]

Supported Browsers

Inji Web is currently compatible and certified with the following browsers:

Sl. No.
Browser
Version

1.

Google Chrome

103.0.5060.114 and above

2.

Mozilla Firefox

100.0 and above

3.

Microsoft Edge

104.0.1293.47 and above

4.

Mac Safari

14.1 and above

v0.10.0
v0.10.0
v0.4.7
v0.10.0-INJI
v0.1.4
v1.2.0.1-B4
React JS
MIT License
TypeScript
Tailwind CSS
@testing-library/react
Jest
Docker
OpenSource License
npm
Artistic License 2.0
Helm Chart (MOSIP)
UI Customization
Locale Customization
Credential Provider
mimoto-issuers-config.json
OpenID4VCI
mosip-onboarding
tailwind CSS
i18next
plurals
context
interpolation
format
react-i18next
inji-config
Mimoto

Link Transaction endpoint V2

post

The link transaction endpoint is invoked from Wallet-app.

  1. Validates the link-code and its expiry and generates the linkTransactionId. This linkTransactionId is linked to transactionId returned from /oauth-details endpoint.

  2. Returns the auth-factors, clientName, logoUrl, User claims, authorize scopes along with linkTransactionId.

Note: Wallet-app will hereafter address the transaction with this linkTransactionId for the /authenticate and /consent endpoints.

Body
requestTimestringRequired
Responses
200
OK
application/json
post
POST /v1/esignet/linked-authorization/v2/link-transaction HTTP/1.1
Host: esignet.collab.mosip.net
Content-Type: application/json
Accept: */*
Content-Length: 83

{
  "requestTime": "2023-09-22T08:01:10.000Z",
  "request": {
    "linkCode": "xl4cnYtLQkGRxUj"
  }
}
200

OK

{
  "responseTime": "2023-09-22T08:01:13.000Z",
  "response": {
    "linkTransactionId": "qwert_yt46_hX0xlBJNExl9cnYtL8kGvcbf555",
    "clientName": {
      "eng": "Fastlane e-Sim Service",
      "fra": "Service e-Sim de Fastlane",
      "ara": "خدمة فاست لين e-SIM"
    },
    "logoUrl": "https://fastlane.com/logo.png",
    "authFactors": [
      [
        {
          "type": "OTP",
          "count": 0,
          "subTypes": null
        }
      ]
    ],
    "authorizeScopes": [],
    "credentialScopes": [],
    "essentialClaims": [
      "name",
      "address"
    ],
    "voluntaryClaims": [
      "email",
      "phone_number"
    ],
    "configs": {
      "sbi.env": "Staging",
      "sbi.threshold.face": 40,
      "sbi.threshold.finger": 40,
      "sbi.threshold.iris": 40
    }
  },
  "errors": null
}

Linked Authentication Endpoint V2

post

Once end user provides the user identifier (UIN/VID) and all the required auth challenge to the Wallet-app, this endpoint will be invoked from wallet-app.

Supported auth-challenge depends on the integrated authentication server.

  1. Validates linkedTransactionId.

  2. Validates null / empty individualId.

  3. Invokes kyc-auth call to integrated authentication server (IDA).

  4. Relays error from integrated authentication server to UI on failure.

  5. It validates stored userconsent against the requested claims and scopes

On Authentication Success: linkTransactionId and consentAction is returned in the below response without any errors.

On Authentication Failure: Error list will be set with the errors returned from the integrated authentication server.

Body
requestTimestringRequiredPattern: yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
Responses
200
OK
application/json
post
POST /v1/esignet/linked-authorization/v2/authenticate HTTP/1.1
Host: esignet.collab.mosip.net
Content-Type: application/json
Accept: */*
Content-Length: 235

{
  "requestTime": "2023-09-22T08:01:10.000Z",
  "request": {
    "linkedTransactionId": "qwert_yt46_hX0xlBJNExl9cnYtL8kGvcbf555",
    "individualId": "34543276756",
    "challengeList": [
      {
        "authFactorType": "OTP",
        "challenge": "111111",
        "format": "alpha-numeric"
      }
    ]
  }
}
200

OK

{
  "responseTime": "2023-09-22T08:01:13.000Z",
  "response": {
    "linkedTransactionId": "qwert_yt46_hX0xlBJNExl9cnYtL8kGvcbf555",
    "consentAction": "CAPTURE"
  },
  "errors": []
}

Linked Consent Endpoint V2

post

Once the authentication is successful and user consent is obtained, this endpoint will be invoked by the wallet app to send the accepted consent and permitted scopes.

  1. Validates linkedTransactionId.

  2. Validate accepted claims and permitted scopes in the request and the signature.

  3. If valid, stores the accepted claims, permitted scopes and signature in the consent registry.

Body
requestTimestringRequiredPattern: yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
Responses
200
OK
application/json
post
POST /v1/esignet/linked-authorization/v2/consent HTTP/1.1
Host: esignet.collab.mosip.net
Content-Type: application/json
Accept: */*
Content-Length: 241

{
  "requestTime": "2023-09-22T08:01:13.000Z",
  "request": {
    "linkedTransactionId": "qwert_yt46_hX0xlBJNExl9cnYtL8kGvcbf555",
    "permittedAuthorizeScopes": [],
    "acceptedClaims": [
      "name",
      "email",
      "phone_number",
      "address"
    ],
    "signature": "<detached signature>"
  }
}
200

OK

{
  "responseTime": "2023-09-22T08:01:14.000Z",
  "response": {
    "linkedTransactionId": "qwert_yt46_hX0xlBJNExl9cnYtL8kGvcbf555"
  },
  "errors": []
}

VC Issuance endpoint

post

Once the access token is received via the token endpoint, Wallet should invoke this endpoint to get the verifiable credential.

Authorizations
Body
formatundefined · enumRequired

Format of the Credential to be issued.

Possible values:
Responses
200
OK
application/json
400
Bad Request
application/json
401
Unauthorized
application/json
post
POST /v1/esignet/vci/credential HTTP/1.1
Host: esignet.collab.mosip.net
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 1475

{
  "format": "ldp_vc",
  "credential_definition": {
    "type": [
      "VerifiableCredential",
      "SampleVerifiableCredential_ldp"
    ],
    "@context": [
      "https://www.w3.org/2018/credentials/v1"
    ]
  },
  "proof": {
    "proof_type": "jwt",
    "jwt": "eyJ0eXAiOiJvcGVuaWQ0dmNpLXByb29mK2p3dCIsImFsZyI6IlJTMjU2IiwiandrIjp7Imt0eSI6IlJTQSIsIm4iOiJtYzdzbWdHd0N6ZzZ5WENoM2ZYc3hTc2ROZlFzM3BTZGdZZUstdnpnYWZCQkNBTnZ2YWxqeUJ2YTlYZzA5YWhLMG9KV0hZY2p3Rm5QeU5uX0dkSjJValZPRlJDbllZNWZvejUxbmt0NUJod2l1V1IteWpZN2NZaXI5MjAySlI2RldaNExpamVVNm54WUVrbnFxZ1B6LXZmU0pSa2M5b2t6VEJ4LW9qb0FaOWJTaUJqMm9XNzVsWkhrMlBoU0NkTDNtQzUyaVRkUWpra2NFNHY0ZVpzWVBrZVROSmlmWE1sQ1J3Mlg0X1N6d2N3YkNNWUJqWlhRUFJ1OXdudEJqd0NUOGZTaDJjZVlCdUs4YlViQXBLelhDSGotUnAwZHMyMDdtbEFhcnRlRURhMS1qbW5ZYWxxS2lfQ2tzU1ZuNEQyMThXOWZHSElYcEJlSXBTWjlHc3hHdXciLCJlIjoiQVFBQiIsImtpZCI6IkY1R0hPai1STHF0S19TSUtabmx4ckpoTFN4MFAyVlZsNFVzTXpuT1ByNW8iLCJhbGciOiJSUzI1NiIsInVzZSI6InNpZyJ9fQ.eyJpYXQiOjE2OTg2NDY2NDMsIm5iZiI6MTY5ODY0NjY0MywiZXhwIjoxNjk4NjQ3MjQ4LCJqdGkiOiJPR0J3RjRCNGNsSWJzWUxGT3ZWM2IiLCJhdWQiOiJodHRwczovL2VzaWduZXQtbW9jay5jb2xsYWIubW9zaXAubmV0L3YxL2VzaWduZXQiLCJub25jZSI6IllXZUluR2MwdVljcHQ1TlZLcTVYIiwiaXNzIjoiODhWanQzNGM1VHd6MW9KIn0.MMVBHdIpvmRwBw4-MY6LaE4p-k5NwCRcwktKCK3MvNiJ5LNqx_Z4lJ23x359IxFtpMNbH0xnC0ajU-mYLJRJ7WsbKWemENmHp3e7nRDzDlDufu92vzh_dmHvxmcxQQKEEr_xH5c8vypUANsAbg8Ltas6eoe5jFoSrS-Oi4TNplw8aoS4cdH16ezEdb1RtluSKi5tajM9eS2reREj3sFXyVphxIxCUD6VbwuvByPPOWhSVf4bW_pCAoztiRJ9Fc_WXR7XLTIn3i46QczopaBIp8xPwEbBE_cl3Lo9etA0oLOxnRz6bzk5sa-ZtvVnsW4vOusy3mzSjVe10oHxWgw2CQ"
  }
}
{
  "format": "ldp_vc",
  "credential": {
    "issuanceDate": "2023-10-30T06:17:28.025Z",
    "credentialSubject": {
      "gender": "Male",
      "name": "John Doe",
      "id": "did:jwk:eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsInVzZSI6InNpZyIsImtpZCI6IkY1R0hPai1STHF0S19TSUtabmx4ckpoTFN4MFAyVlZsNFVzTXpuT1ByNW8iLCJhbGciOiJSUzI1NiIsIm4iOiJtYzdzbWdHd0N6ZzZ5WENoM2ZYc3hTc2ROZlFzM3BTZGdZZUstdnpnYWZCQkNBTnZ2YWxqeUJ2YTlYZzA5YWhLMG9KV0hZY2p3Rm5QeU5uX0dkSjJValZPRlJDbllZNWZvejUxbmt0NUJod2l1V1IteWpZN2NZaXI5MjAySlI2RldaNExpamVVNm54WUVrbnFxZ1B6LXZmU0pSa2M5b2t6VEJ4LW9qb0FaOWJTaUJqMm9XNzVsWkhrMlBoU0NkTDNtQzUyaVRkUWpra2NFNHY0ZVpzWVBrZVROSmlmWE1sQ1J3Mlg0X1N6d2N3YkNNWUJqWlhRUFJ1OXdudEJqd0NUOGZTaDJjZVlCdUs4YlViQXBLelhDSGotUnAwZHMyMDdtbEFhcnRlRURhMS1qbW5ZYWxxS2lfQ2tzU1ZuNEQyMThXOWZHSElYcEJlSXBTWjlHc3hHdXcifQ==",
      "email": "john.doe@mail.com"
    },
    "id": "urn:uuid:3978344f-8596-4c3a-a978-8fcaba3903c5",
    "proof": {
      "type": "RsaSignature2018",
      "created": "2023-10-30T06:17:28Z",
      "proofPurpose": "assertionMethod",
      "verificationMethod": "https://esignet-mock.collab.mosip.net/v1/esignet/oauth/.well-known/jwks.json",
      "jws": "eyJ4NWMiOlsiTUlJRHZUQ0NBcVdnQXdJQkFnSUk1VHhveEYydjhRQXdEUVlKS29aSWh2Y05BUUVMQlFBd2R6RUxNQWtHQTFVRUJoTUNTVTR4Q3pBSkJnTlZCQWdNQWt0Qk1SSXdFQVlEVlFRSERBbENRVTVIUVV4UFVrVXhEVEFMQmdOVkJBb01CRWxKVkVJeEdqQVlCZ05WQkFzTUVVMVBVMGxRTFZSRlEwZ3RRMFZPVkVWU01Sd3dHZ1lEVlFRRERCTjNkM2N1Ylc5emFYQXVhVzhnS0ZKUFQxUXBNQjRYRFRJek1ETXlOVEV3TWpFeE1Wb1hEVEkyTURNeU5ERXdNakV4TVZvd2Z6RUxNQWtHQTFVRUJoTUNTVTR4Q3pBSkJnTlZCQWdNQWt0Qk1SSXdFQVlEVlFRSERBbENRVTVIUVV4UFVrVXhEVEFMQmdOVkJBb01CRWxKVkVJeEdqQVlCZ05WQkFzTUVVMVBVMGxRTFZSRlEwZ3RRMFZPVkVWU01TUXdJZ1lEVlFRRERCdDNkM2N1Ylc5emFYQXVhVzhnS0U5SlJFTmZVMFZTVmtsRFJTa3dnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFDeGJpYUt3M082dlI0SHczaExDc3FiQ1czRkc4UEthQ0RabDZNTUlEblVlbCtJa1FDMmxscTgrWlRMcmE3S1ViT294UHVxVzhwNDFmdVRqSlNzK0x3aEpRV3J2S2htbDB5THRSVkJCOUVTR2l5NVFYaWNSODBxVWRScjN3eVhRZkJGTFFEN1lRb1l4MUZMTUxaR21IYmd2N3Rnc3hxY2k1NEFjTTZmb1BXaUd0Z2NZbjJRenRsbTRjZ3FuWVNmcThDc3dtZ3o5N052ckxDRXF3bFhRZkpGQVZlRFF2SXFxNk00dkNkcXFLaldtNjlRVjlCUXUrczdCYkpFbUtGRDVtRTRhdWFwWW4zbWZLeXJWaGFGUGpFUW5iMHA0V3dGR3YzYTROTEFPRXVqVkJlVjUzZjJmdUZqSUxzZnBMK3MzRERRYUlYbEJKa3p3dWdjdWZ5Z1MzRm5BZ01CQUFHalJUQkRNQklHQTFVZEV3RUIvd1FJTUFZQkFmOENBUUV3SFFZRFZSME9CQllFRkg4dXN2ME52ekZHaWx4Sko2dExBYkVLSUJMQk1BNEdBMVVkRHdFQi93UUVBd0lDaERBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQWQ2ZVJmTzFZbHN2YXRMSktWZGVNcStzclhlYjNTblZJM0ZQSWlQa3d2STNsM1pmUVQ1ZzE0NWc2ajEzQisvOFZUNGFWZXBDZU5PbWNIczc3Y2g0OWxIUmg4anF3UXlqUFBsc1NmcW5Kd0JGUmRvNStkRnB5elZNeFdDUzBFRWJqb3RkZ2pvci9YaVVoRmFGMkhkZThyeHNnZWNmaUFZZS9nWnFZZjYzOFRxRi9RTnFCaTRhbitGQmNtT0FDalR6THE5Z01tSnJYa2h3V3V5dm5Sc0hKM2g2ZXd0b0RMN2gycm5QK2hBT1o3ckd1SEhDaVVXayt6eUcxdjdKT0NwSUJ2TEJyalpVbzNDRmxacEs3NERkbHBSVU1nK3JvcVdDNnFkTmZuemc5dFZBb1ZlVy9uUHAweit1QUtmb2w2NENlRUJmUmsrUXV2SmRyKzhCL1JaOHp4QT09Il0sIng1dCNTMjU2IjoiZkxnNTQ5dGFabmViUGZ6OTVlRzhyZXZuX2lSU2luMTFKZGxteFhOaUE5RSIsImtpZCI6IktPX21UcF9zVDB6bEZFVWRfblR0aGZvOXRFOVNfbUZCcno5MXBmN3lEUUEiLCJhbGciOiJSUzI1NiJ9..pZkf21YoT2mqzYlEJy9fkBartMTvEMMOUZPXw4-HIc6DeDUTqAMcRSkEfP1_ozvBE1ukxzqM2_IYpdQCVbYXEsCQLAXUmDQTfbdf8GImWBkRV7hXpCAJCN14A69trZCLvsW0jhIkIoSwPSszGk4MZ9rW7fBRpG9kbCF4nWajP5nRsPdC6tSckHWlHAWus0IhsYhSh85y2VYtBHTZ9g_NaB5S2pSp4MR_BBFdlpSfrgoepr7D9EY1hhU-b8vbjve9QnGSesqfPXUOKMwNA5UZ7tUYStWX8y9-19wwC3e_FjKhnKXMZrlAhCOLSL5O81r3ZWI3bpfOufHFZIZ7_gdvnQ"
    },
    "type": [
      "VerifiableCredential",
      "Person"
    ],
    "@context": [
      "https://www.w3.org/2018/credentials/v1",
      "https://schema.org/"
    ],
    "issuer": "did:example:123456789"
  }
}

Customize VC PDF Template

Configuring Credential Template

This guide help you customize and configuring credential templates using the Velocity Template Language (VTL) syntax. It explains how data from the mimoto service is passed into a template, how you can configure fields in the template, and how to retrieve and display the relevant data dynamically. This also includes a sample template to guide users in writing their own templates.

Overview

The mimoto service pass data to a Velocity Template for rendering, This allows the you to define which fields you want to display and how you want to structure the credential templates. You can customize the template with your own fields and data, making it flexible and easy to adapt.

Mimoto Service Flow

  1. Data Preparation: The mimoto service gathers all the required display properties and field values for the credential from the issuer wellknown.

  2. Template Retrieval: The user provides the issuerId and credentialType which are used to check if a custom template exists in the configuration service.

  3. Field Mapping: The template is populated dynamically using field names and values passed from the backend.

Template Retrieval and Configuration

Template Retrieval Mechanism

The mimoto service checks if a specific template is available based on the issuerId and credentialType by querying the config service. If a template is found, it is used; otherwise, a default template is applied. A dynamic name for the template file which mimoto service search is made with this combination issuerId-credentialType-template.html. For example if issuerId is Mimoto and credentialType is MosipVerifiableCredential then service will search for Mosip-MosipVerifiableCredential-template.html file in the configuration service.

If the profile is local while running mimoto, the template is fetched from a local directory; else, it fetches from a configuration service.

Understanding available Data Fields in the template

Credential Issuer Information:

  • titleName: The credential display name provided by the issuer (MOSIP Verifiable Credentials).

  • logoUrl: The logo of the issuer (https://api.collab.mosip.net/inji/mosip-logo.png) which can be included in the template as part of the issuer's branding.

  • backgroundColor: Background color for the credential provided by the issuer.

  • backgroundImage: A background image URL (https://api.collab.mosip.net/inji/mosip-logo.png)which can be used to customize the appearance of the credential.

  • textColor: The color of the text in the credential( #000000).

  • qrCodeImage:

  • face:If face is available as part of the credential.

Dynamic Fields

Data fields are dynamically fetched in the velocity template from the rowProperties object.

  • If orderProperty is present: The rowProperties map will contain the fields from credentialSubject in the order specified by orderProperty of issuer wellknown. Each entry in rowProperties will map the field name (e.g., fullName, phone) to a Map with the display name as the key and the credential value as the value.

  • If orderProperty is not present: All fields in credentialSubject of issuer wellknown will be included in rowProperties, and they will be picked in the order they appear in the redentialSubject. Each field will again be mapped to a Map with the corresponding display name and its value. The rowProperties map will look like this for example:

{
    "fullName": {
        "Full Name": "Some Name"
    },
    "phone": {
        "Phone Number": "+1234567890"
    },
    "gender": {
        "Gender": "Male"
    }
}

Customizing the Template

Now that you understand the available properties, you can customize your template using these dynamic values. In your custom credential template (HTML file), you will use placeholders for each property to dynamically populate the content.

Example for rendering the Full Name field:

#foreach($field in ['fullName'])
    #set($data = $rowProperties.get($field))
    #if($data && $data.size() > 0)
        #foreach($entry in $data.entrySet())
            <div>
                <label>$entry.key</label>
                <div>$entry.value</div>
            </div>
        #end
    #end
#end

Example for logoUrl

<img src="../../../../unsegregated/$logoUrl" alt="Issuer Logo" class="logo" />

This pattern can be used for any other field such as Policy Number, Email, Gender, etc., by updating the $field name.

Sample Templates

Mimoto

eSignet

Technology Stack

Architecture

Supported Browsers

Backend Services

StayProtected-InsuranceCredential-template.html
StayProtected-InsuranceCredential-template.html
6KB
certgen.zip
archive
Cover

Inji Mobile

Cover

Inji Web

Cover

Inji Verify

Inji Wallet Architecture
Cover

Cover

Cover

Cover

Cover

Cover

Valid Verifiable Credentials
Expired Verifiable Credentials
Invalid Verifiable Credential
BLE Communication
OpenID for VP over BLE Implementation
Exception Message
State diagram
Verifier App integration
Original p12 file as downloaded from environment
Importing a new keypair
Selection of OIDC Keystore
Alias for the new keypair
Add keypairs to keystore.p12
Installation of Inji Wallet on iOS mobile device
Installation of Inji Wallet on iOS mobile device
Pinning a VC
Pinning a VC
Pinning a VC
GCP API Library
GCP Drive API Enable
GCP Create Client ID
GCP Create Client ID
GCP Create Client ID
Internal testers
img.png
img.png
img.png
img.png
img.png
img.png
Testflight testers
img.png
img.png
img.png
img.png
img.png
img.png
img.png
Feature Health
Android Device Feature Health Report
iOS Device Feature Health Report
LogoGitHub - mosip/ble-verifier-sdkGitHub
get

This API provides data with search capability to populate the list of supported issuers in Inji Web, which is then displayed under the List of Issuers

Query parameters
searchstringOptional
Responses
200
OK
application/json
get
GET /residentmobileapp/issuers HTTP/1.1
Host: api.collab.mosip.net
Accept: */*
200

OK

{
  "id": "mosip.resident.vid",
  "version": "v1",
  "str": null,
  "responsetime": "2022-10-31T05:08:14.846Z",
  "metadata": null,
  "response": {
    "issuers": [
      {
        "credential_issuer": "MOSIPInsurance",
        "protocol": "OpenId4VCI",
        "display": [
          {
            "name": "MOSIP Insurance",
            "logo": {
              "url": "https://api.collab.mosip.net/inji/mosip-logo.png",
              "alt_text": "MOSIP-Logo"
            },
            "title": "Download via LIC",
            "description": "Enter your policy number to download your card.",
            "language": "en"
          }
        ],
        "client_id": "3yz7-j3xRzU3SODdoNgSGvO_cD8UijH3AIWRDAg1x-M",
        ".well-known": "http://localhost:8088/.well-known/openid-credential-issuer"
      },
      {
        "credential_issuer": "MOSIPNationalID",
        "protocol": "OpenId4VCI",
        "display": [
          {
            "name": "MOSIP National ID",
            "logo": {
              "url": "https://api.collab.mosip.net/inji/mosip-logo.png",
              "alt_text": "MOSIP-Logo"
            },
            "title": "Download via LIC",
            "description": "Enter your policy number to download your card.",
            "language": "en"
          }
        ],
        "client_id": "3yz7-j3xRzU3SODdoNgSGvO_cD8UijH3AIWRDAg1x-M",
        ".well-known": "http://localhost:8088/.well-known/openid-credential-issuer"
      }
    ]
  }
}
get

This API provides the complete configuration details for the specific issuers passed in the path variable

Path parameters
issuer-idstringRequired
Responses
200
OK
application/json
get
GET /residentmobileapp/issuers/{issuer-id} HTTP/1.1
Host: api.collab.mosip.net
Accept: */*
200

OK

{
  "id": "mosip.mimoto.issuers",
  "version": "v1",
  "str": null,
  "responsetime": "2024-04-25T05:56:55.890Z",
  "metadata": null,
  "response": {
    "credential_issuer": "ESignet",
    "protocol": "OpenId4VCI",
    "display": [
      {
        "name": "e-Signet",
        "logo": {
          "url": "https://api.collab.mosip.net/inji/mosip-logo.png",
          "alt_text": "mosip-logo"
        },
        "title": "Download MOSIP Credentials",
        "description": "Download credentials by providing UIN or VID",
        "language": "en"
      },
      {
        "name": "e-Signet",
        "logo": {
          "url": "https://api.collab.mosip.net/inji/mosip-logo.png",
          "alt_text": "شعار موسيب"
        },
        "title": "قم بتنزيل بيانات اعتماد MOSIP",
        "description": "توفير UIN أو VIDقم بتنزيل بيانات الاعتماد عن طريق",
        "language": "ar"
      },
      {
        "name": "e-Signet",
        "logo": {
          "url": "https://api.collab.mosip.net/inji/mosip-logo.png",
          "alt_text": "मोसिप लोगो"
        },
        "title": "MOSIP क्रेडेंशियल डाउनलोड करेंं",
        "description": "यूआईएन या वीआईडी प्रदान करके क्रेडेंशियल डाउनलोड करें",
        "language": "hi"
      },
      {
        "name": "e-Signet",
        "logo": {
          "url": "https://api.collab.mosip.net/inji/mosip-logo.png",
          "alt_text": "mosip ಲೋಗೋ"
        },
        "title": "MOSIP ರುಜುವಾತುಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ",
        "description": "UIN ಅಥವಾ VID ಒದಗಿಸುವ ಮೂಲಕ ರುಜುವಾತುಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ",
        "language": "kn"
      },
      {
        "name": "e-Signet",
        "logo": {
          "url": "https://api.collab.mosip.net/inji/mosip-logo.png",
          "alt_text": "mosip லோகோ"
        },
        "title": "MOSIP சான்றுகளைப் பதிவிறக்கவும்",
        "description": "UIN அல்லது VIDஐ வழங்குவதன் மூலம் நற்சான்றிதழ்களைப் பதிவிறக்கவும்",
        "language": "ta"
      },
      {
        "name": "e-Signet",
        "logo": {
          "url": "https://api.collab.mosip.net/inji/mosip-logo.png",
          "alt_text": "logo ng mosip"
        },
        "title": "I-download ang Mga Kredensyal ng MOSIP",
        "description": "Mag-download ng mga kredensyal sa pamamagitan ng pagbibigay ng UIN o VID",
        "language": "fil"
      }
    ],
    "client_id": "DEqVWfdKe9cQWikLdjak3vlDF0Pq7jtnwTcGdEXoT1I",
    "redirect_uri": "io.mosip.residentapp.inji://oauthredirect",
    "scopes_supported": [
      "mosip_identity_vc_ldp"
    ],
    "authorization_endpoint": "https://esignet.collab.mosip.net/authorize",
    "authorization_audience": "https://esignet.collab.mosip.net/v1/esignet/oauth/v2/token",
    "token_endpoint": "https://api.collab.mosip.net/residentmobileapp/get-token/ESignet",
    "proxy_token_endpoint": "https://esignet.collab.mosip.net/v1/esignet/oauth/v2/token",
    "credential_endpoint": "https://esignet.collab.mosip.net/v1/esignet/vci/credential",
    "credential_type": [
      "VerifiableCredential",
      "MOSIPVerifiableCredential"
    ],
    "credential_audience": "https://esignet.collab.mosip.net",
    "client_alias": "mpartner-default-mimotooidc",
    "additional_headers": {
      "Accept": "application/json"
    },
    ".well-known": "https://esignet.collab.mosip.net/.well-known/openid-credential-issuer"
  },
  "errors": []
}
get

This API is responsible for generating PDFs for the received VC content. It fetches display properties from the well-known configuration of the issuer and incorporates them into the predefined template of the PDF file.

Path parameters
issuer-idstringRequired
credentialTypestringRequired
Header parameters
BearerstringRequired
Responses
200
OK
application/pdf
Responsestring · binary
get
GET /residentmobileapp/issuers/{issuer-id}/credentials/{credentialType}/download HTTP/1.1
Host: api.collab.mosip.net
Bearer: text
Accept: */*
200

OK

{
  "id": null,
  "version": "v1",
  "str": null,
  "responsetime": "2022-10-31T05:07:34.789Z",
  "metadata": null,
  "response": null,
  "errors": [
    {
      "errorCode": "RESIDENT-APP-036",
      "errorMessage": "Invalid Credential Type Id"
    }
  ]
}
get

This API provides data with search capability to populate the list of supported issuers in Inji Web, which is then displayed under the List of Issuers

Query parameters
searchstringOptional
Responses
200
OK
application/json
get
GET /residentmobileapp/issuers HTTP/1.1
Host: api.collab.mosip.net
Accept: */*
200

OK

{
  "id": "mosip.resident.vid",
  "version": "v1",
  "str": null,
  "responsetime": "2022-10-31T05:08:14.846Z",
  "metadata": null,
  "response": {
    "issuers": [
      {
        "credential_issuer": "MOSIPInsurance",
        "protocol": "OpenId4VCI",
        "display": [
          {
            "name": "MOSIP Insurance",
            "logo": {
              "url": "https://api.collab.mosip.net/inji/mosip-logo.png",
              "alt_text": "MOSIP-Logo"
            },
            "title": "Download via LIC",
            "description": "Enter your policy number to download your card.",
            "language": "en"
          }
        ],
        "client_id": "3yz7-j3xRzU3SODdoNgSGvO_cD8UijH3AIWRDAg1x-M",
        ".well-known": "http://localhost:8088/.well-known/openid-credential-issuer"
      },
      {
        "credential_issuer": "MOSIPNationalID",
        "protocol": "OpenId4VCI",
        "display": [
          {
            "name": "MOSIP National ID",
            "logo": {
              "url": "https://api.collab.mosip.net/inji/mosip-logo.png",
              "alt_text": "MOSIP-Logo"
            },
            "title": "Download via LIC",
            "description": "Enter your policy number to download your card.",
            "language": "en"
          }
        ],
        "client_id": "3yz7-j3xRzU3SODdoNgSGvO_cD8UijH3AIWRDAg1x-M",
        ".well-known": "http://localhost:8088/.well-known/openid-credential-issuer"
      }
    ]
  }
}
get

This API provides the complete configuration details for the specific issuers passed in the path variable

Path parameters
issuer-idstringRequired
Responses
200
OK
application/json
get
GET /residentmobileapp/issuers/{issuer-id} HTTP/1.1
Host: api.collab.mosip.net
Accept: */*
200

OK

{
  "id": "mosip.mimoto.issuers",
  "version": "v1",
  "str": null,
  "responsetime": "2024-04-25T05:56:55.890Z",
  "metadata": null,
  "response": {
    "credential_issuer": "ESignet",
    "protocol": "OpenId4VCI",
    "display": [
      {
        "name": "e-Signet",
        "logo": {
          "url": "https://api.collab.mosip.net/inji/mosip-logo.png",
          "alt_text": "mosip-logo"
        },
        "title": "Download MOSIP Credentials",
        "description": "Download credentials by providing UIN or VID",
        "language": "en"
      },
      {
        "name": "e-Signet",
        "logo": {
          "url": "https://api.collab.mosip.net/inji/mosip-logo.png",
          "alt_text": "شعار موسيب"
        },
        "title": "قم بتنزيل بيانات اعتماد MOSIP",
        "description": "توفير UIN أو VIDقم بتنزيل بيانات الاعتماد عن طريق",
        "language": "ar"
      },
      {
        "name": "e-Signet",
        "logo": {
          "url": "https://api.collab.mosip.net/inji/mosip-logo.png",
          "alt_text": "मोसिप लोगो"
        },
        "title": "MOSIP क्रेडेंशियल डाउनलोड करेंं",
        "description": "यूआईएन या वीआईडी प्रदान करके क्रेडेंशियल डाउनलोड करें",
        "language": "hi"
      },
      {
        "name": "e-Signet",
        "logo": {
          "url": "https://api.collab.mosip.net/inji/mosip-logo.png",
          "alt_text": "mosip ಲೋಗೋ"
        },
        "title": "MOSIP ರುಜುವಾತುಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ",
        "description": "UIN ಅಥವಾ VID ಒದಗಿಸುವ ಮೂಲಕ ರುಜುವಾತುಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ",
        "language": "kn"
      },
      {
        "name": "e-Signet",
        "logo": {
          "url": "https://api.collab.mosip.net/inji/mosip-logo.png",
          "alt_text": "mosip லோகோ"
        },
        "title": "MOSIP சான்றுகளைப் பதிவிறக்கவும்",
        "description": "UIN அல்லது VIDஐ வழங்குவதன் மூலம் நற்சான்றிதழ்களைப் பதிவிறக்கவும்",
        "language": "ta"
      },
      {
        "name": "e-Signet",
        "logo": {
          "url": "https://api.collab.mosip.net/inji/mosip-logo.png",
          "alt_text": "logo ng mosip"
        },
        "title": "I-download ang Mga Kredensyal ng MOSIP",
        "description": "Mag-download ng mga kredensyal sa pamamagitan ng pagbibigay ng UIN o VID",
        "language": "fil"
      }
    ],
    "client_id": "DEqVWfdKe9cQWikLdjak3vlDF0Pq7jtnwTcGdEXoT1I",
    "redirect_uri": "io.mosip.residentapp.inji://oauthredirect",
    "scopes_supported": [
      "mosip_identity_vc_ldp"
    ],
    "authorization_endpoint": "https://esignet.collab.mosip.net/authorize",
    "authorization_audience": "https://esignet.collab.mosip.net/v1/esignet/oauth/v2/token",
    "token_endpoint": "https://api.collab.mosip.net/residentmobileapp/get-token/ESignet",
    "proxy_token_endpoint": "https://esignet.collab.mosip.net/v1/esignet/oauth/v2/token",
    "credential_endpoint": "https://esignet.collab.mosip.net/v1/esignet/vci/credential",
    "credential_type": [
      "VerifiableCredential",
      "MOSIPVerifiableCredential"
    ],
    "credential_audience": "https://esignet.collab.mosip.net",
    "client_alias": "mpartner-default-mimotooidc",
    "additional_headers": {
      "Accept": "application/json"
    },
    ".well-known": "https://esignet.collab.mosip.net/.well-known/openid-credential-issuer"
  },
  "errors": []
}

Wallet Binding - Generate Otp

post

This api is used to generate otp for wallet binding. This api is used as a proxy to call Identity Provider - Send Binding OTP Endpoint api internally.

Body
requestTimestringOptional
Responses
200
OK
application/json
post
POST /residentmobileapp/binding-otp HTTP/1.1
Host: api.collab.mosip.net
Content-Type: application/json
Accept: */*
Content-Length: 99

{
  "requestTime": "{{$isoTimestamp}}",
  "request": {
    "individualId": "3816083254",
    "otpChannels": [
      "EMAIL"
    ]
  }
}
200

OK

{
  "id": null,
  "version": null,
  "str": null,
  "responsetime": null,
  "metadata": null,
  "response": {
    "maskedEmail": "mono@mono.com",
    "maskedMobile": "7897897890"
  },
  "errors": []
}

Wallet Binding - Bind Credential with wallet

post

This api is used to bind the credential with wallet. This api is used as a proxy to call Identity Provider - Wallet binding Endpoint api internally.

Body
requestTimestringOptional

The request time

Responses
200
OK
application/json
post
POST /residentmobileapp/wallet-binding HTTP/1.1
Host: api.collab.mosip.net
Content-Type: application/json
Accept: */*
Content-Length: 1012

{
  "requestTime": "2023-01-17T05:38:41.869Z",
  "request": {
    "authFactorType": "WLA",
    "format": "jwt",
    "individualId": "3816083254",
    "publicKey": "-----BEGIN RSA PUBLIC KEY-----\nMIICCgKCAgEAxo8hdrLl6nXyPSeSJu8xgmBBwVutacZS57rmIlHeKJfjYhKLT51v\n0k2IQqN2v6A3HOZqzKXh41p3RrxdSndkqqHwS0BLEVPNpKqYoEbe0tUICDpDSFaa\n7w87Z/OSGrw8bKpxmUT0xZ70+DGPhnWlMvPV5xenG1bVtf/vEq7cwQei1iNbNQRb\nqw/57e9LgmXdmbh/v5XOllT7rlUFmVFm4V4J3u6NH9iOPGlIKTplBlYyxlx6ayaR\n09Z6z4RJICG1MIipCv5qJwuzzXXpBja6gEG4xsN5K4W6b5GLt3IuzMMaQmReseRR\n46s53vBp7aqq1wrjs/CZ1SZqZ5ZG/nUchjTv+Nir0vPR9acvPB5j5qDgfdVz2sT/\nYL1HoeFPOIgcY1ydz+tUBm9F4AMCMZa7GbEmtAIWvxlQp6emo50/opdb51B3Teh3\neVQ+JqYYhOpuTEv0uHfhonXEsNfpGyttjR0FSAH2c6mI6UULi/PfLgcvKuqkhE+7\nlB0SFd852C993GqsY7qfxW1GvJpXYRvo6oRoFO8sj+St36MkmzJbm56AQn/9KWd5\nRLh13xrIUVRnW48y/Blchw/C68Ez1bmCyDeVe1WBPwel0zPl62jCtKawzCQiZcTL\n/ejmlKFHKQd980MwWN18OVakKU52CkO0NT+9ovgi0TRfLKvG6PQ1qGECAwEAAQ==\n-----END RSA PUBLIC KEY-----\n",
    "challengeList": [
      {
        "authFactorType": "OTP",
        "challenge": "111111",
        "format": "alpha-numeric"
      }
    ]
  }
}
200

OK

{
  "id": null,
  "version": null,
  "str": null,
  "responsetime": null,
  "metadata": null,
  "response": {
    "certificate": "-----BEGIN CERTIFICATE-----\nMIIDqjCCApKgAwIBAgIGAYW+PCLUMA0GCSqGSIb3DQEBCwUAMBMxETAPBgNVBAMT\nCE1vY2stSURBMB4XDTIzMDExNzA1MzgxMFoXDTIzMDEyNzA1MzgxMFowGTEXMBUG\nA1UEAxMOTW9jay11c2VyLW5hbWUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK\nAoICAQDGjyF2suXqdfI9J5Im7zGCYEHBW61pxlLnuuYiUd4ol+NiEotPnW/STYhC\no3a/oDcc5mrMpeHjWndGvF1Kd2SqofBLQEsRU82kqpigRt7S1QgIOkNIVprvDztn\n85IavDxsqnGZRPTFnvT4MY+GdaUy89XnF6cbVtW1/+8SrtzBB6LWI1s1BFurD/nt\n70uCZd2ZuH+/lc6WVPuuVQWZUWbhXgne7o0f2I48aUgpOmUGVjLGXHprJpHT1nrP\nhEkgIbUwiKkK/monC7PNdekGNrqAQbjGw3krhbpvkYu3ci7MwxpCZF6x5FHjqzne\n8GntqqrXCuOz8JnVJmpnlkb+dRyGNO/42KvS89H1py88HmPmoOB91XPaxP9gvUeh\n4U84iBxjXJ3P61QGb0XgAwIxlrsZsSa0Aha/GVCnp6ajnT+il1vnUHdN6Hd5VD4m\nphiE6m5MS/S4d+GidcSw1+kbK22NHQVIAfZzqYjpRQuL898uBy8q6qSET7uUHRIV\n3znYL33caqxjup/FbUa8mldhG+jqhGgU7yyP5K3foySbMlubnoBCf/0pZ3lEuHXf\nGshRVGdbjzL8GVyHD8LrwTPVuYLIN5V7VYE/B6XTM+XraMK0prDMJCJlxMv96OaU\noUcpB33zQzBY3Xw5VqQpTnYKQ7Q1P72i+CLRNF8sq8bo9DWoYQIDAQABMA0GCSqG\nSIb3DQEBCwUAA4IBAQAmbgQcW22AnrP/GH5lzt+Fy6t20lxqpMDIc3rCO6dzXMCR\n9ocjwLj7E243jGFbhHzC8637qOC8b5bYLZL2ND9ZehSu0qdz/0U0Kwt81rj/lihk\nvhD6xgx8g966AMZcZ0iQncyTzbdEukq6jMAtYfWvAu41rL0H5qvIFvxLHGOoxOYV\n0XZslWTC8B8TB3hzQ+HHexxSZbLSbB+sHFShubOlqqxE/zMj2O+c2FGYSOKlbTXi\nTd4m1WY/eJ4+0XjvEAAMZqLSLtnF5U1POz2onnk0u/lzsRnpxiqJY2++1WmCnuAT\nwDIwNEeAPotfm6tM1TjWuwakYrbSY7Ru0YjaFC1S\n-----END CERTIFICATE-----\n",
    "encryptedWalletBindingId": "qeCUuKEjRDUiDHfbYAsHv5L4RCiHe_KE7eKKjpw7jIo",
    "expireDateTime": "2023-01-27T05:38:10.000Z",
    "thumbprint": "rOe3ifBa0uIuKfArURKRKK5psE8YVdWxXbQoDXAvntk",
    "keyId": "1673933890260"
  },
  "errors": []
}