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

Inji

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Inji Wallet

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...

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...

Supported Integrations

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.

Specifications

Test Report

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:

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

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.

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

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.

  • Navigate to .

  • 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.

\

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.

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!

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?

For code contributions, refer .

To engage with us on our community forum, visit .

License

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

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.

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

Contact Us

Have a question or feedback? We are here for you!

Reach out to us through the channel that best fits your purpose, as outlined below.

Community Forum Join the conversation at to ask questions, share ideas, and explore discussions about MOSIP and its solutions.


Feedback We truly value your input. Every suggestion counts in shaping our products and processes. Click to share your feedback and help us make Inji better. \


Other Queries For anything more specific or direct, feel free to write to us at [email protected] — we’re happy to connect!


Telemetry

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

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

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:

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

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.

Refer to know more about how you can explore 'Inji Wallet' in our 'sandbox collab environment'.

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.

Roadmap 2025
Roadmap 2024
here
here
Infrastructure Requirements
community.mosip.io
here
telemetry
sunbird telemetry
Inji Wallet Collab Guide
link
link
Community
Cover

Inji Mobile

Cover

Inji Web

Cover

Inji Verify

Inji Mobile

Mimoto service
esignet service
Inji Certify

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

core
Mozilla Public License 2.0
herein

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.

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)).

VC Issuance endpoint

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

Read More

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:

  • Workflow Customization

  • UI Customization

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.

  • 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.

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

Configuration

Configuration for Inji Wallet

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

Refer to inji-default.properties of Collab environment.

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.

Integration Guides

This section provides guidelines and specifications for integrating any software development kit (SDK) with Inji Wallet. It also contains references to available SDKs and tools that developers, system integrators, relying parties, and end users may find useful.

SDK Integration Specifications

To ensure seamless integration with Inji Wallet, SDKs must follow these requirements:

  • Availability

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.

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.

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.

  • Locale Customization
    Configuration
    Credential Provider
    Data Backup

    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.

    SSO Login

    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.

    Offline Sharing (BLE-based)

    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.

    Download
    CC license Image

    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.

    i18next
    react-i18next
    expo-localization
    plurals
    context
    interpolation
    format
    <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>
    const { t } = useTranslation('common');
    <Text>{t('editLabel')}</Text>
    
    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.

    • The SDK should be published as an npm module for integration with React Native applications.

    • For Android, integration must be supported via a Maven dependency.

    • For iOS, integration must be supported via Swift Package Manager (SPM). For example, the npm modules tuvali and secure-keystore demonstrate suitable implementations.

  • API Design

    • Provide a simple API surface for easy integration.

    • Must include an initialization API (e.g., init or a constructor API).

    • Include all necessary functional APIs to perform core actions.

    • Provide a disconnect API to safely detach the SDK when needed.

    • Preferably design APIs to be asynchronous, allowing users to continue app usage without UI blocking.

  • Traceability & Logging

    • APIs may optionally accept a parameter such as traceabilityId to enhance logging and request traceability.

  • Build Your Own Wallet with Inji Libraries

    Use Inji’s modular SDKs and libraries to assemble a wallet tailored to your needs. Each library provides specific capabilities that can be integrated into your application.

    Build your own wallet using Inji libraries – click here!

    List of Libraries and SDKs

    • VCI Client Library – Issue and download Verifiable Credentials (VCs).

    • PixelPass Library – Compress, encode, and decode JSON for QR codes.

    • OpenID4VP Library – Enable credential sharing through OpenID4VP protocols.

    • BLE Verifier Library – Verify VCs received over Bluetooth.

    • (BLE Sharing) – Share credentials offline via Bluetooth Low Energy.

    • – Manage secure storage of keys and sensitive data.

    • – Add biometric face matching for enhanced verification.

    • – (Details coming soon!) for monitoring and analytics.

    "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. Create loader_path folder under the docker-compose directory and download the kernel auth adapter(kernel-auth-adapter-1.2.0.1.jar) from here.

    2. Copy the downloaded jar under loader_path directory and rename it to kernel-auth-adapter.jar

    3. Add ID providers as issuers in mimoto-issuers-config.json

    4. Start esignet services and update esignet host references in mimoto-default.properties and mimoto-issuers-config.json

    5. 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

    6. Update client_id and client_alias in mimoto-issuers-config.json file.

    7. Update p12 file password mosip.oidc.p12.password in mimoto-default.properties file.

    8. 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.

    • Replace http://localhost:8099 by ngrok public domain at following places

      • token_endpoint in mimoto-issuers-config.json

      • mosipbox.public.url, mosip.api.public.url in mimoto-default.properties

    Inji

    Overview

    Inji is a verifiable credentialing stack that provides a way to share tamper-proof, instantly verifiable data which is cryptographically signed by a trusted issuer, and users can store them securely on their devices or browsers and share them when needed.

    • Issuer: The entity that issues the credential and makes claims about the subject (e.g., a university issuing a degree, a government issuing a passport, an employer issuing a work permit). The issuer cryptographically signs the VC. Inji's 'Issuance-module' is called Inji Certify.

    • Holder: The individual or entity which possesses the credential (e.g., the student with the degree, the citizen with the passport, the employee with the work permit). The holder stores and manages their VCs. Inji's 'Holder-module' is called .

    • Verifier: The entity that requests and verifies the credential to confirm a claim (e.g., an employer checking a degree, a border agent checking a passport, a landlord checking a work permit). The verifier checks the cryptographic proofs to ensure the VC's authenticity and integrity. .

    Some everyday examples of Verifiable Credentials include:

    • A national ID issued as a digital credential

    • A diploma issued by a university

    • A background verification report from an employer

    • A subsidy or benefit eligibility certificate from a government agency

    VCs allow:

    • Instant verification, even offline

    • User control over when and how data is shared

    • Interoperability across platforms and borders

    • Reduced fraud and manual checks

    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.

    Inji’s Key Capabilities

    Secure Issuance: Issue verifiable credentials with digital signatures, ensuring authenticity. Cross-Platform Accessibility: Available via mobile app or web interface, ensuring inclusivity for all users. Privacy-Preserving Sharing: Users control what they share, with whom, and for how long. Offline Compatibility: Works in low-connectivity or offline environments, critical for inclusion. Fast, Trusted Verification: Credentials can be verified quickly and securely, even by non-technical service providers.

    Inji Stack Components

    Inji Certify– Credential Issuance

    Enables trusted entities to issue digitally signed credentials. Supports:

    • Multiple formats: JSON-LD, SD-JWT,mDOC and many more. A tool that enables issuers to seamlessly connect with existing data sources to issue verifiable credentials.

    • Connecting with existing databases and offering configurable credential schemas, it caters to diverse use cases across different sectors and industries.

    • Revocation management

    • Ledger and credential status checks

    Inji Wallet – Credential Holding and Sharing

    Empowers users to manage their credentials on different devices:

    • Inji Mobile: Android and iOS app to download, store, and present credentials securely

    • Inji Web: Browser-based wallet for users without smartphones, offering print and share features

    Inji Verify – Credential Verification

    Allows service providers and organizations to:

    • Scan and validate credentials

    • Check credential status (validity, expiry, revocation)

    • Integrate with the existing relying party or service providers

    Real-World Applications

    Domain
    Example Applications

    Interoperability and Standards

    Inji follows widely adopted open standards, ensuring flexibility and long-term sustainability:

    • W3C Verifiable Credentials Data Model

    • OpenID for Verifiable Presentation (OpenID4VP)

    • OpenID for Verifiable Credential Issuance (OpenID4VCI)

    • Claim 169

    Inji: How the Pieces Work Together

    This section will contain a clear diagram illustrating the interaction between Inji Certify, Inji Wallet (mobile + web), Inji Verify. The diagram should also show the components involved to build Inji.

    How it works?

    • Issuance: An issuer creates a digital credential with claims about a subject and cryptographically signs it.

    • Holding: The signed credential is then given to the holder, who stores it securely in a digital wallet or similar application.

    • Presentation: When needed, the holder can present the VC (or a verifiable presentation, which can include multiple VCs or selectively disclosed information) to a verifier.

    Summary

    Inji provides a secure, inclusive, and interoperable solution for issuing and managing digital credentials. By enabling individuals to hold their credentials and share them when needed, Inji supports faster access to services while protecting privacy and reducing fraud. Whether you are:

    • A user needing better control over their identity and credentials,

    • An issuer needing to deliver secure digital certificates, or

    • A verifier needing reliable proof of information, Inji offers the tools you need to make digital credentialing simple, trusted, and universal.

    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.

    The current specification is in draft state.

    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

    • 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.

    • 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.

    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

    • Maven Snapshots are available

    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:

    In build.gradle.kts:

    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.

    Detailed API documentation of Mimoto is available here.

    Support for downloading VC from multiple Issuers

    • 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

    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.

    • 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

    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 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.

    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.

    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:

    Code Contribution

    Overview

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

    Repositories

    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 Mobile 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.

    The Inji Mobile Wallet adopts a layered architecture pattern, ensuring clear separation of concerns and robust security for verifiable credentials. Built with React Native, it delivers a seamless, cross-platform experience on both iOS and Android.

    Architecture Layers

    Releases

    Version: 0.20.0

    Name: Inji Mobile Wallet 0.20.0

    Date: 22nd October, 2025

  • 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:

    We 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 Process

    The process to contribute the code is present here. Once code is submitted, it is reviewed through the following 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

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

    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.

    Tuvali Library
    Secure Keystore Library
    Face Match SDK
    Telemetry
    here
    Version: 0.19.0

    Name: Inji Mobile Wallet 0.19.0

    Date: 8th September, 2025

    Release Notes

    Version: 0.18.0

    Name: Inji Mobile Wallet 0.18.0

    Date: 19th August, 2025

    Release Notes

    Version: 0.17.0

    Name: Inji Mobile Wallet 0.17.0

    Date: 25th July, 2025

    Release Notes

    Version: 0.17.1

    Name: Mimoto 0.17.1(Patch)

    Date: 16th June, 2025

    Release Notes

    Version: 0.16.0

    Name: Inji Mobile Wallet 0.16.0

    Date: 28th April, 2025

    Release Notes

    Version: 0.15.1

    Name: Inji Mobile Wallet 0.15.1

    Date: 27th March, 2025

    Release Notes

    Version: 0.15.0

    Name: Inji Mobile Wallet 0.15.0

    Date: 18th Feb, 2025

    Release Notes

    Version: 0.14.1

    • Name: Inji Mobile Wallet 0.14.1(Patch)

    • Date: 24th Feb, 2025

    • Release Notes

    Version: 0.14.0

    • Name: Inji Mobile Wallet 0.14.0

    • Date: 25th Nov, 2024

    • Release Notes

    Version: 0.13.1

    • Name: Inji Mobile Wallet 0.13.1 Patch release

    • Date: 10th Sep, 2024

    • Type: Developer

    • Release Notes

    Version: 0.13.0

    • Name: Inji Mobile Wallet 0.13.0

    • Date: 2nd Aug, 2024

    • Release Notes

    Version: 0.12.0

    • Name: Inji Mobile Wallet 0.12.0

    • Date: 31st May, 2024

    • Release Notes

    Version: Inji 0.11.0-Inji

    • Name: Inji Mobile Wallet 0.11.0

    • Date: 29th March, 2024

    • Release Notes

    Version: 0.11.0

    • Name: Inji Mobile Wallet 0.11.0

    • Date: 23rd February, 2024

    • Release Notes

    Version: vDP2

    • Name: Inji Mobile Wallet DP2

    • Date: 22nd January, 2024

    • Release Notes

    Version: 0.10.0

    • Name: Inji Mobile Wallet 0.10.0

    • Date: 19th December, 2023

    • Release Notes

    Version: vDP1

    • Name: Inji Mobile Wallet DP1 (Beta)

    • Date: 28th September, 2023

    • Release Notes

    Version: 0.9.1

    • Name: Inji Mobile Wallet 0.9.1 (Beta)

    • Date: 25th July, 2023

    • Release Notes

    Version: 0.9.0

    • Name: Inji Mobile Wallet 0.9.0 (Beta)

    • Date: 14th April, 2023

    • Release Notes

    Version: 0.8.0

    • Name: Inji Mobile Wallet 0.8.0 (Alpha)

    • Date: 20th October, 2022

    Release Notes
    1. Presentation Layer (Green)

    • Component: Inji Wallet UI (React Native)

    • Purpose: Renders the user interface and manages application state using xState.

    • Features: Cross-platform UI, declarative state management, user interaction handling.

    1. Communication Bridge Layer (Yellow)

    • Component: React Native Bridge

    • Purpose: Enables communication between JavaScript and native code (Java, Kotlin, Swift).

    • Functionality: Accesses native platform features from React Native.

    1. Native Platform Layer (Orange)

    • Components: Android Native Modules (Kotlin), iOS Native Modules (Swift), External Modules

    • Purpose: Handles platform-specific operations and SDK integrations.

    1. Device Hardware & API Layer (Blue)

    • Component: Device APIs & SDKs (Camera, Bluetooth, etc.)

    • Purpose: Interfaces with device hardware and system APIs for features like camera access and BLE communication.

    1. Backend Services Layer (Purple)

    • Component: Mimoto (Backend for Frontend)

    • Purpose: Orchestrates API calls, formats data, and manages authentication between the app and backend services.

    Detailed Component Breakdown

    React Native Application Components

    • UI Screens & Components: User interface elements and screens.

    • State & Context: Application state management with context providers.

    • API Communication: Uses React Native Fetch for backend requests.

    • Local Storage: MMKV for high-performance key-value storage and local caching.

    Native Modules

    • Secure Keystore: Manages cryptographic keys and secure storage.

    • VCI Client: Handles verifiable credential issuance.

    • VC Verifier: Validates and verifies credentials.

    • Pixelpass: Renders and displays credentials securely.

    • OpenId4VP: Implements OpenID for Verifiable Presentations.

    • Tuvali: Enables BLE-based peer-to-peer credential sharing.

    External Modules

    • Face Match SDK: Provides biometric authentication and face matching.

    Data Flow & Component Interactions

    • Vertical Flow: User Input → UI Screens → State Management → API Calls → Data Persistence (MMKV/Cache) → Native Operations → Hardware Access

    • Horizontal Integrations:

      • Backend Communication: Mimoto (BFF)

      • Security: Secure Keystore

      • Credential Management: VCI Client, VC Verifier

      • Peer-to-Peer Sharing: Tuvali (BLE)

      • Biometric Security: Face Match SDK

    Key Architectural Principles

    • Layered Separation: Distinct boundaries between UI, business logic, and data.

    • Cross-Platform Compatibility: Single codebase for iOS and Android.

    • Security-First Design: Hardware-backed keystore and biometric integration.

    • Modular Architecture: Independent native modules for extensibility.

    • Standards Compliance: OpenID4VP and W3C Verifiable Credentials.

    • Performance Optimization: MMKV storage and local caching.

    Technology Stack Summary

    • Frontend: React Native, xState

    • State Management: xState

    • Storage: MMKV

    • Native Development: Kotlin (Android), Swift (iOS)

    • Communication: BLE (Tuvali), HTTP (REST APIs)

    • Security: Secure keystore, biometric authentication

    • Standards: OpenID4VP, W3C Verifiable Credentials

    This architecture ensures scalability, security, and maintainability, delivering a seamless digital credential management experience.

    Inji Wallet Architecture

    Inji Web

    here
    dependencyResolutionManagement {
      repositories {
        google()
        mavenCentral()
      }
    }
    dependencyResolutionManagement {
      repositories {
        google()
        mavenCentral()
        maven("https://oss.sonatype.org/content/repositories/snapshots/")
      }
    }
    
    ---
    
    
    ## 📘 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.
    ---

    Schema and credential registry management

    Others

    Many more

    ISO/IEC 18013-5: mDoc/mDL
  • IETF SD-JWT-based Verifiable Credentials

  • W3C based SD-JWT-based Verifiable Credentials

  • DID (Decentralised Identifiers) support

  • Verification
    : The verifier uses the cryptographic proofs within the VC to confirm that it was issued by a trusted party and has not been tampered with. This verification often involves checking against a "Verifiable Data Registry" where public keys of issuers are stored.

    Healthcare

    Immunization records, medical certifications

    Education

    Degrees, training certificates, learning records

    Social Welfare

    Benefit eligibility, ration cards

    Finance

    KYC credentials, account onboarding

    Mobility

    Driving licenses, transportation passes

    Employment

    Job credentials, background checks

    Inji Wallet
    Inji Verify
    Inji's Triangle Of Trust
    Component Diagram

    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 phone numbers and device fingerprints should be limited to managing the SDK license.

  • ISO/IEC 30101
    Setup your development machine
    1. Fork the repository.

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

    3. Set the upstream project as the original from where you forked. E.g.:

    4. Make sure you never directly push upstream.

    5. Confirm the origin and upstream.

      This should display origin and upstream as below:

    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.

    3. On your local repo, switch to a branch if you are working on an older release or stay in main/develop 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.

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

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

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

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

    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).

    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.

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

    this
    mimoto-issuers-config.json
    here
    here
    mimoto-default.properties
    this
    mimoto-default.properties

    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

    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

    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

    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.

    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

    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 .

    Technical Stack

    Wallet Application

    The following table summarizes the main technologies, tools, and frameworks used to build the Inji Wallet application:

    Tool / Technology
    Version
    Description
    License

    Native Libraries

    The following table lists the technologies, tools, and frameworks used for building native libraries:

    Tool / Technology
    Version
    Description
    License

    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

    Parameters

    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

    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

    Types of states supported

    • Idle

    • Advertising

    • Connected

    • Secure Connection Established

    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

    Workflow customization

    Workflow in Inji Wallet is achieved by finite-state machine components. State machines are written using a library called xstate. 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.

    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:

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

    • - stores the encrypted VC as a separate file,

    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

    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.

    scanMachine.ts

    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.

    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.

    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

    Compatible Modules

    Known Issues

    There are no new known issues introduced in this release. For existing known issues, refer to

    Bug Fixes

    No functional & technical bug fixes were included in this release as it is focused exclusively on branding updates.

    Documentation Details

    Resources

    Overview

    The resources section provides a comprehensive introduction to the Inji modules — Inji Mobile Wallet, Inji Web Wallet, Inji Verify, and Inji Certify, showcasing how its modules deliver trusted, low-cost, and scalable credential management across sectors.

    Each demonstration video explains the product’s purpose, setup, features, and practical applications. Together, they offer an end-to-end understanding of how verifiable credentials can be issued, held, and verified instantly, across both digital and paper-based formats.

    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:

    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.

    Inji Mobile - Collab Guide

    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!

    Pre-requisites

    Before you start with setting up Inji Mobile, ensure you have the following in place.

    Version 0.17.1

    Release Name: Mimoto 0.17.1(Patch)

    Release Type: Developer

    Release Date: 16th June, 2025

    Overview

    We are pleased to announce the patch release of Mimoto Version 0.17.1. This release brings targeted fixes to enhance the reliability and correctness of the Mimoto API test automation suite. These changes ensure smooth compatibility by stabilizing test rig behaviour, ensuring proper handling of transaction identifiers, and validating negative test scenarios more intelligently.

    Test Report

    Testing Scope

    The scope of testing is to validate Mimoto error code compatibility with eSignet 1.5.1 and 1.4.1 through comprehensive API automation, ensuring consistent error handling and response validation.

    Transaction ID

    • Update: Modified nonce value to be unique for each run.

    Sunbird Authentication

    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.

    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.

    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:

    $ git clone https://github.com/<your_github_id>/inji.git
    $ cd inji
    $ git remote add upstream https://github.com/mosip/inji.git
    $ git remote set-url --push upstream no_push
    $ git fetch upstream
    $ git checkout upstream/<branch> 
    $ git switch -c issue-<issue number>
    $ git pull upstream <branch> 
    $ git commit -m "[#1234] Adding new feature in inji module"
    $ git pull upstream <branch> 
    $ git push --set-upstream origin issue-<issue number>
  • eSignet 1.5.1: Changed authentication factor type to KBI.

  • eSignet 1.4.1: Configuration - Set sunbirdInsuranceAuthFactorType=KBA in config maps.

  • Binding OTP Negative Test Cases

    • Condition: Test case passes if either of the following error codes is present:

      • IDA-MLC-009

      • binding_auth_failed

    MOSIP is an “API First” product platform, Verification scope requires comprehensive automation testing for all the MOSIP APIs. An automation Test Rig is created for the same. MOSIP, being an API-first platform, mandates thorough and scalable automated testing across all its APIs.

    The Inji testing scope revolves around the following flows:

    • API Automation

    Test Approach

    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 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 SI deliveries before going live. Persona classes include both positive and negative aspects. 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.

    Test execution statistics

    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 in 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
    Ignored
    Skipped

    176

    143

    0

    33

    0

    Test Rate: 100% With Pass Rate: 100%

    The 33 Ignored test cases are AID OTP related test cases.

    Functional and test rig code base branch which is used for the above metrics is:

    Hash Tag: sha256: bc5ed1fda337784340216f5fcd3c38b85ff5a227c662331a817092076a69f5ef

    Device and Component Details:

    Tested with Inji components qa-inji1

    • Image: docker.io/mosipid/data-share-service:1.3.0-beta.2

    • Image: mosipqa/postgres-init:develop

    • Image: docker.io/mosipqa/inji-web:develop

    • Image: docker.io/mosipqa/mimoto:develop

    • Image: docker.io/mosipid/keys-generator:1.3.0-beta.2

    • Image: mosipqa/kernel-config-server:develop

    • Image: docker.io/mosipqa/apitest-mimoto:0.17.x

    • Image: docker.io/mosipqa/artifactory-server:0.10.x-INJI

    Tested with components - Released env

    • Image: docker.io/mosipqa/artifactory-server:0.10.x-INJI

    • Image: mosipqa/kernel-config-server:develop

    • Image: docker.io/mosipid/data-share-service:1.3.0-beta.2

    • Image: docker.io/mosipid/keys-generator:1.3.0-beta.2

    • Image: docker.io/mosipid/minio-client-util:latest

    • Image: docker.io/mosipid/artifactory-server:1.4.1-ES

    • Image: docker.io/mosipid/authentication-demo-service:1.2.0.1

    • Image: docker.io/mosipid/captcha-validation-service:0.1.0-beta.1

    • Image: docker.io/mosipid/data-share-service:1.2.0.1

    • Image: docker.io/mosipid/authentication-service:1.2.1.0

    • Image: docker.io/mosipid/authentication-internal-service:1.2.1.0

    • Image: docker.io/mosipid/authentication-otp-service:1.2.1.0

    • Image: docker.io/mosipid/credential-service:1.2.2.1

    • Image: docker.io/mosipid/credential-request-generator:1.2.2.1

    • Image: docker.io/mosipid/id-repository-identity-service:1.2.2.1

    • Image: docker.io/mosipid/id-repository-vid-service:1.2.2.1

    • Image: mosipid/apitest-inji-verify:0.12.3

    • Image: docker.io/mosipid/data-share-service:1.3.0-beta.2

    • Image: docker.io/mosipid/inji-web:0.12.0

    • Image: docker.io/mosipid/mimoto:0.17.0

    • Image: docker.io/mosipid/mosip-artemis-keycloak:1.2.0.1

    • Image: docker.io/mosipid/kernel-keymanager-service:1.2.1.0

    • Image: docker.io/mosipid/partner-onboarder:1.2.0.1

    • Image: docker.io/mosipid/artifactory-server:0.10.0-INJI

    • Image: docker.io/mosipid/apitest-inji-certify:0.11.0

    • Image: docker.io/mosipid/esignet-with-plugins:1.5.1

    • Image: docker.io/mosipid/inji-certify-with-plugins:0.11.0

    • Image: docker.io/mosipid/oidc-ui:1.5.1

    • Image: docker.io/mosipid/mock-identity-system:0.10.1

    • Image: mosipid/apitest-esignet:1.5.1

    • Image: mosipid/apitest-inji-certify:0.11.0

    • Image: docker.io/mosipid/inji-certify-with-plugins:0.11.0

    • Image: docker.io/mosipid/mock-smtp:1.0.0

    • Image: docker.io/mosipid/mosip-file-server:1.2.0.1

    • Image: docker.io/mosipid/artifactory-server:0.10.0-INJI

    • Image: docker.io/mosipid/apitest-inji-certify:0.11.0

    • Image: docker.io/mosipid/esignet-with-plugins:1.5.1

    • Image: docker.io/mosipid/inji-certify-with-plugins:0.11.0

    • Image: docker.io/mosipid/oidc-ui:1.5.1

    • Image: docker.io/mosipid/kernel-keymanager-service:1.2.1.0

    • Image: docker.io/mosipid/partner-onboarder:1.2.0.1

    • Image: docker.io/mosipid/artifactory-server:0.10.0-INJI

    • Image: docker.io/mosipid/apitest-inji-certify:0.11.0

    • Image: docker.io/mosipid/esignet-with-plugins:1.5.1

    • Image: docker.io/mosipid/inji-certify-with-plugins:0.11.0

    • Image: docker.io/mosipid/oidc-ui:1.5.1

    • Image: docker.io/mosipid/mock-identity-system:0.10.1

    • Image: docker.io/mosipid/mock-relying-party-service:0.10.1

    • Image: docker.io/mosipid/mock-relying-party-ui:0.10.1

    • Image: mosipid/apitest-esignet:1.5.1

    • Image: docker.io/mosipid/inji-certify-with-plugins:0.11.0

    • Image: docker.io/mosipid/mock-smtp:1.0.0

    • Image: docker.io/mosipid/mosip-file-server:1.2.0.1

    • Image: docker.io/mosipid/artifactory-server:0.10.0-INJI

    • Image: docker.io/mosipid/apitest-inji-certify:0.11.0

    • Image: docker.io/mosipid/mock-relying-party-service:0.10.1

    • Image: docker.io/mosipid/mock-relying-party-ui:0.10.1

    • Image: docker.io/mosipid/esignet-with-plugins:1.5.1

    • Image: docker.io/mosipid/inji-certify-with-plugins:0.11.0

    • Image: docker.io/mosipid/oidc-ui:1.5.1

    Execution Test Summary

    • Fixed error code scenarios in Mimoto 0.17.1 API automation as part of this release, tested against ESignet 1.5.1 and made them compatible with Esignet 1.4.1.

    Github link for the xls file is here.

    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

    • Feature Documentation

    • User Guide

    • QA Report

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

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

  • 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
    react-native-mmkv-storage
    react-native-fs
    offline VC-sharing component
    offline VC sharing component

    React Native

    0.74.5

    JavaScript framework for building native mobile apps using React.

    MIT License

    TypeScript

    5.3.3

    Strongly typed language that builds on JavaScript, enabling static type checking and improved tooling.

    Apache-2.0 License

    Jest

    29.7.0

    JavaScript testing framework, commonly used for React applications.

    MIT License

    Android

    minSDk - 24, compileSDK - 34, targetSDK - 34

    Mobile OS based on Linux kernel, used for building and running the app on Android devices.

    iOS

    14

    Mobile OS developed by Apple for its devices. Swift is used for iOS development.

    Kotlin

    2.0.0 Java 17

    Modern statically typed programming language.

    Android

    minSDk 23 compileSDK 34

    Mobile OS based on a modified Linux kernel and open-source software, designed for touchscreen devices. Used to build the app for Android devices.

    iOS

    14

    Mobile OS developed by Apple for smartphones. Swift is used for iOS development.

    Requested

  • Received

  • Error

  • Disconnected

  • Name

    Description

    ConfigOptions

    configOptions

    device name used during advertisement

    deviceName is the parameter

    State diagram
    Verifier App integration

    vc-verifier

    pixelpass

    secure-keystore

    secure-keystore-ios-swift

    inji-vci-client

    inji-openid4vp

    API Documentation

    Inji Mobile Wallet

    0.15.1

    inji-vci-client-ios-swift

    v0.2.1

    pixelpass-ios-swift

    v0.6.1

    Module

    Version

    Inji-config

    0.5.0

    eSignet

    1.5.0

    Inji Certify

    0.10.1

    Inji Verify

    v0.10.0

    tuvali

    v0.5.1

    tuvali-ios-swift

    v0.5.0

    previous release notes.
    Feature Documentation
    Integration Guides
    User Guide
    QA Report

    mimoto

    Video Playlist

    Watch the complete series on YouTube: Inji Stack Demonstration Playlist

    1. Inji Stack: Overview

    What you'll learn:

    • An introduction to the Inji Stack, the open-source suite by MOSIP for verifiable credentials.

    • Explanation of how the core modules like Inji Certify, Inji Wallet, and Inji Verify work together to create a trusted digital credential ecosystem.

    • Overview of Inji's role in enabling secure, interoperable, and privacy-preserving data exchange.

    • Demonstrates the potential of verifiable credentials in sectors like education, healthcare, governance and many more.

    2. Inji Mobile Wallet: Product Overview

    What you'll learn:

    • Comprehensive walkthrough of the Inji Mobile Wallet app.

    • Demonstrates secure storage, management, and sharing of verifiable credentials.

    • Covers key features:

      • Selective disclosure for privacy-preserving data sharing.

      • Offline verification via Bluetooth Low Energy (BLE).

      • OpenID4VP-based interoperability with verifiers.

      • Multi-issuer and multi-credential handling.

      • Highlights use cases in travel, employment, public service delivery and many more.

    3. Inji Web Wallet: Product Overview

    What you'll learn:

    • Introduction to the Inji Web Wallet, a browser-based wallet that complements the mobile app.

    • Demonstrates credential management and secure sharing using QR codes in both digital and printed form.

    • Explains how the web wallet supports W3C VC, OpenID4VP, and ISO standards for global interoperability.

    • Showcases accessibility for users without smartphones or in assisted-use environments.

    4. Inji Web Wallet: Local Setup Guide

    What you'll learn:

    • Step-by-step guide to setting up the Inji Web Wallet locally using IntelliJ instead of Docker for faster iteration.

    • Walkthrough of dependencies, configuration steps, and environment setup.

    • Demonstrates how to load and test credentials within the local environment.

    5. Inji Wallet: Mimoto Setup

    What you'll learn:

    • Configuration of Mimoto backend for Inji Wallet integration using Docker Compose.

    • This setup provides a ready-to-run local Docker environment for Mimoto, which acts as the backend for Inji Web and the BFF (Backend-for-Frontend) for Inji Mobile, enabling secure OIDC-based authentication and credential exchange.

    • It helps developers quickly configure, test, and integrate Mimoto with Inji services in a non-production environment.

    6. Inji Verify: Product Overview -- Your Gateway to Trusted Verifiable Credential Verification

    What you'll learn:

    • Overview of Inji Verify, the verifier module for digital and paper-based credential verification.

    • Demonstrates secure, instant QR-based verification workflows.

    • Highlights modular SDK integration, interoperability with OpenID4VP, and verifier backend service.

    7. Inji Verify: Technical Deep Dive

    What you'll learn:

    • Detailed explanation of Inji Verify's architecture, including backend services, SDKs, and UI components.

    • Covers OpenID4VP flows, handling of verifiable presentations, and data validation.

    • Shows how to run Verify locally using Docker Compose and how to integrate SDK components into React-based applications.

    8. Inji Certify: Product Overview

    What you'll learn:

    • Introduction to Inji Certify, the credential issuance module of the Inji Stack.

    • Demonstrates how authorized entities can issue, manage, and revoke verifiable digital credentials.

    • Explains interoperability with OpenID4VC, W3C VC, and other standards.

    9. Inji Certify: Local Setup & Deployment using Docker Compose

    What you'll learn:

    • Step-by-step local deployment of Inji Certify using Docker Compose.

    • Explains configuration of plug-ins, environment variables, and credential templates.

    • Demonstrates issuance and revocation flows in a local testing environment.

    10. Inji Certify: Technical Deep Dive -- Verifiable Credential Issuance

    What you'll learn:

    • In-depth look at Inji Certify's credential issuance architecture.

    • Explains credential templates, signing algorithms, revocation APIs, and integration with data sources.

    • Details plug-in architecture for flexible issuance from multiple registries or databases.


    Inji Ecosystem Workshop

    Note: The video resources listed below are earlier recordings from webinars held in 2024. While they are not being archived at this time, they remain available as they provide useful context and practical demonstrations that may still benefit viewers.

    1. 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.

    2. 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.

    3. 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.

    4. 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.

    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

    • inji-vci-client repo is here

      • Maven snapshots available here

    Installation

    Snapshot builds are available here.

    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

    Name
    Type
    Description
    Sample

    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

    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.

    • For kotlin refer here

    • For ios refer here

    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

    Name
    Type
    Description
    Sample

    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

    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.

    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.

    Inji Wallet APK File:

    • If you are using an Android smartphone, click here to get the Inji Mobile apk file for installation.

    • Transfer the apk file onto the smartphone on which it is to be installed.

  • Inji Wallet Test Flight Access:

    • If you are using an iOS device, click here get access to the Inji Wallet app on test flight.

      • Ensure you have get the test flight application from your app store.

  • 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.

    • Now you can self generate your own UIN Credential using the Collab environment.

    • Click on the Get UIN button located at the top-right corner of the page. This will open the Self Registration Form, Alternatively, you can simply click on this to self register. You need to duly fill the self registration form.

    • On successful registration the UIN is sent to you over the email you used for registration, For more details you follow the .

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

  • 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

    1. For a step-by-step guide on how to install the Inji Mobile application, click here.

    2. You can visit this section for more detailed instructions in the guide.

    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.

    2. To learn how to download VCs using the Unique Identification Number (UIN) or Virtual ID (VID) feature, click here. Refer to the section titled Download credentials using UIN / VID feature in the guide .

    Step 4: Download Insurance Credentials Using Policy Details

    • Refer to the sample insurance credentials under 'Prerequisites' section.

    • Refer here for step-wise download.

    • You can view the QR Code for insurance credentials in the detailed view.

    Step 5: Start Sharing the Credentials

    1. Quick Share

      • To understand the process of sharing credentials from the Resident app to the Verifier app, click here.

      • Navigate to the section titled Sharing Credentials for detailed instructions.

    2. Share with Face Verification

      • Discover how to share credentials with the added security of face verification by clicking .

      • 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.

    To understand the steps to generate your own Insurance credentials, refer here.

    Step 2: QR Code generation:

    Using Inji Wallet app you can get the QR Code for Insurance Credentials

    To generate a QR Code using PixelPass library, please refer to the steps here.'

    Step 3: QR Code verification:

    The above generated QR Code can be verified using Inji Verify, by uploading the QR Code. To know more, please click here.

    Additional Resources

    Watch this informative video titled Inji Wallet Product Demo to Download and Share VC for a visual walkthrough of the features.

    Click here for detailed information about Inji Wallet.

    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.

    • Navigate to Community.

    • 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!

    Inji Wallet
    Collab
    Key Highlights

    1. Unique Transaction ID Handling

    Feature: Dynamic nonce and transaction ID generation

    • Test rig updated to generate unique transaction ID and nonce values per test run.

    • Prevents failures due to repeated values in sequential or parallel executions.

    • Ensures that test results reflect functional correctness rather than stale or reused state.

    2. Auth Factor Update for Sunbird Authentication

    Feature: Configurable authFactorType for Sunbird

    • In esignet environment v1.4.1, the auth factor type for Sunbird Insurance was updated to KBI.

    • Introduced config support via sunbirdInsuranceAuthFactorType=KBA in config maps for flexible override.

    • Fix ensures authentication flows work correctly across all test environments using the correct factor types.

    3. Flexible Error Code Assertion for Negative OTP Binding

    Feature: Enhanced negative scenario validation

    • For binding OTP negative test cases, the allowed error codes are now:

      • IDA-MLC-009

      • binding_auth_failed

    • If either code is returned in response, the test will now be marked as passed.

    • Prevents false negatives and aligns validation logic with expected backend behaviour.

    Technical Improvements

    • POM Version update.

    • Improved assertion logic for OTP binding negative flows.

    • Configurable authentication flows for issuer-specific authFactorTypes.

    • Nonce and transaction ID generation are randomized at runtime.

    • Ensures stability and accuracy of automated tests in CI/CD pipelines.

    Features Released

    N/A

    Repository Released

    Module

    Version

    mimoto

    Compatible Modules

    Module
    Version

    Inji Mobile Wallet

    Inji Web Wallet

    Inji Verify

    esignet

    inji-config

    Inji Certify

    Known Issues

    N/A

    Bug Fixes

    N/A

    Deprecated

    N/A

    Documentation

    • Feature Documentation

    • Integration Guides

    • User Guide

    • QA Report

    Key Highlights
    • Fixed: Checksum issue with Boost dependency in iOS, ensuring successful package installation.

    • iOS TestFlight Republish: The previous TestFlight build for release-0.14.0 expired due to the 90-day limit. This patch enables republishing without requiring additional changes to the release branch.

    • 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

    Module

    Version

    Inji Mobile Wallet

    Compatible Modules

    Module

    Version

    Mimoto

    Inji-config

    eSignet

    Inji Verify

    tuvali

    tuvali-ios-swift

    Known Issues

    The list of known issues can be found here.

    Bug Fixes

    Jira Issue

    Issue Description

    iOS build failing in PR run due to failing `pod install`

    Documentation Details:

    • Feature Documentation

    • Integration Guides

    • User Guide

    • API Documentation

    Onboarding a new VC Issuer

  • Mimoto-Issuer onfiguration changes

  • Summary

    Please find below the details for the 0.11.0 release:

    • Onboarding a new VC Issuer: For each new VC Issuer, Mimoto must be onboarded as an OIDC client to eSignet. To know more, refer here.

    • Mimoto-Issuer configuration changes: Changes to authentication and well-known configuration details will be included in the mimoto-issuers configuration. To know more, refer here.

    Repository Released

    Repositories

    Tags Released

    mimoto

    mosip-config

    Documentation

    • Feature Documentation

    • Integration Guides

    • User Guide

    • API Documentation

    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:

    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.

    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 :

    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.

    • 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.

    and verifier app can acknowledge it.

    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.

    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:

    on Verifier:

    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

    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:

    Tuvali & Inji Integration

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

    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.

    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.

    This guide explains the use of mock data for following:

    Building Verifiable Credentials Wallet with Inji Libraries

    Overview

    This guide provides step-by-step documentation for building a Kotlin-based verifiable credential wallet from scratch using Inji stack libraries. The purpose of this guide is to demonstrate how developers can leverage the Inji ecosystem to securely download, verify, store, and present verifiable credentials (VCs). The guide is currently focused on Android-based implementations, but all the Inji libraries are also available in Swift for iOS.

    This guide is aimed at developers who want to either create a custom wallet or enhance an existing application to support VC-based digital identity functionality.

    The sample app illustrates how to:

    UI customization

    CSS Themes

    Currently, Inji Wallet supports two themes:

    • default gradient

    Workflow

    End-to-End Workflow for Inji Mobile Wallet

    Credential Download via OpenID4VCI Flow

    This workflow describes how Inji Wallet downloads a Verifiable Credential (VC) from an issuing authority using the OpenID4VCI protocol.

    Test Report

    Testing Scope

    The scope of testing is to verify fitment to the specification from the perspective of

    • Functionality

    • Deployability

    Overview

    Inji Web isn't just a web interface – it's a bridge to digital inclusion, enabling secure and seamless access to digital identity and credentials, even without a smartphone. Built to support open and equitable digital ecosystems for everyone.

    Inji Web, akin to the , is an open-source, standards-compliant web-based wallet that enables users to securely download, manage, and share Verifiable Credentials (VCs) 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 in the principles of inclusivity, it empowers individuals to access benefits or services, even without smartphones.

    Inji Web is a reference implementation which can be adopted by ecoystem partners, countries, system integrators (SIs), governments and organizations—built with the community.

    • Service Providers can extend, customize, or white-label the solution

        constructor(configOptions: ConfigOptions) {
          Initialise verifier service with provided configuration
        }
        ConfigOptions {
          deviceName: string;
        }
       startTransfer() {
        Start Advertisement
        Interact with tuvali to start advertisement
        update state to Advertising
       }
    stopTransfer() {
     disconnect the connection
     update state to Idle
    }
    val credentialResponse: CredentialResponse? = VCIClient().requestCredential(
                            IssuerMetaData( CREDENTIAL_AUDIENCE, CREDENTIAL_ENDPOINT, DOWNLOAD_TIMEOUT, CREDENTIAL_TYPE, CREDENTIAL_FORMAT ),
                            proofJwt,
                            accessToken
                        )
    
    https://github.com/mosip/inji-vci-client-ios-swift/
    let requestCredential = try await VCIClient().requestCredential(issuerMeta: IssuerMeta, proofJwt: Proof, accessToken: String)
    <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);
    $ git remote -v
    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)
    link
    Generating Demo Credentials Guide
    here
    v0.15.2
    v0.1.0
    v0.6.0
    v0.3.0
    v0.3.0
    v0.2.0
    v0.1.0

    durian(data share)

    v1.3.0-beta.2

    API Documentation
    0.17.1
    v0.16.0
    v0.12.0
    v0.12.3
    1.5.1
    0.8.0
    0.11.0

    secure-Keystore

    v0.2.1

    pixelpass

    v0.2.1

    pixelpass-ios-swift

    v0.2.0

    Inji-vci-client

    v0.1.1

    Inji-vci-client-ios-swift

    v0.1.1

    0.14.1
    0.14.0
    v0.3.0
    v1.4.1
    v0.10.0
    v0.5.1
    v0.5.0
    Inji Mobile Wallet-2653
    v0.11.0
    v0.11.0-INJI

    ""

    ""

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

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

  • on completion of key exchange between Wallet and Verifier
  • ErrorEvent

    • on any error in Wallet or Verifier

  • DisconnectedEvent

    • on BLE disconnection between Wallet and Verifier

  • spec

    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.

    • Now you can self generate your own UIN Credential using the Collab environment.

      • Click on the Get UIN button located at the top-right corner of the page. This will open the Self Registration Form, Alternatively, you can simply click on this link to self register. You need to duly fill the self registration form.

      • On successful registration the UIN is sent to you over the email you used for registration, For more details you follow the .

    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 obtain sample verifiable credentials embedded in a QR code, please initiate the process by following the steps to generate the QR code, click here!

    2. 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

    Valid Verifiable Credentials - Data Model v2.0

    Data Model v2.0

    Sample QR code - Valid VC Data

    Valid Verifiable Credentials - Data Model v1.1

    Data Model v1.1

    Verifiable QR Code - Expired VC

    Expired Verifiable Credentials

    Sample QR code - Expired VC Data

    Verifiable QR Code - Invalid VC

    Invalid Verifiable Credential

    Sample QR code - Invalid VC Data

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

    Collab
    • Securely generate and manage cryptographic keys

    • Download credentials from trusted issuers

    • Verify the authenticity of credentials

    • Store and display credentials to end users

    • Optionally present credentials via QR code

    Note: The terms “custom wallet” and “verifiable credentials wallet” are used interchangeably throughout this document. Both refer to a wallet application built using Inji libraries to securely download, verify, store, and present verifiable credentials (VCs).

    Key Features of the Custom Wallet

    By following this “build your own digital credentials wallet” flow, your application achieves:

    • Secure Key Management

      • Hardware-backed RS256/ES256 keys, safely managed by Secure Keystore.

    • End-to-End Credential Issuance

      • Complete flow from user authentication to credential download.

    • Credential Verification

      • Ensures authenticity with cryptographic checks and expiry validation.

    • Secure Storage & Display

      • Verified credentials are saved in the app and rendered as cards for users.

    • Issuer Management

      • Supports multiple trusted issuers and their metadata.

    • Credential Presentation

      • Option to present credentials via QR code (Pixelpass).

    • Extensible Architecture

      • Modular libraries allow developers to extend or replace parts of the flow.

    For the detailed feature list of Inji Mobile Wallet, refer here !

    Prerequisites for Building a Custom Wallet

    Before starting, ensure you have:

    • Android Studio (latest stable version)

    • Kotlin (with Gradle support)

    • Internet access for API calls to the Authorization Server and Issuing Authority

    • Trusted Issuer configuration (issuer metadata like client_id, credential_configuration_id, redirect_uri, etc.)

    Inji Libraries Used for Building a Custom Wallet

    The custom wallet application integrates several Inji stack libraries, which provide ready-made methods for credential flows.

    Component
    Library
    Primary Function

    Secure Keystore

    Generates and stores cryptographic key pairs (RS256 / ES256). Used to create Proof JWT.

    VCI Client

    Handles the credential issuance protocol: authorization, token exchange, proof generation, and downloading the credential.

    VC Verifier

    Verifies credentials by checking digital signatures, expiration, and issuer authenticity.

    Pixelpass (optional)

    Setup

    1. Create Activity

      • In Android Studio, create a new project with an empty activity.

    2. Add Dependencies

      • Open app/build.gradle and add the required dependencies for the Inji libraries:

        implementation "org.inji:inji-actor-secure-keystore:<version>" implementation "org.inji:inji-vci-client:<version>" implementation "org.inji:inji-vc-verifier:<version>" implementation "org.inji:inji-pixelpass:<version>" // optional

    3. Resolve Dependencies

      • Sync the project to fetch dependencies.

      • You can now call the methods provided by the Inji libraries.

    Step-by-step guide:

    The flow below shows how the custom verifiable credentials wallet downloads and verifies a credential.

    Step 1: Initialization & Key Generation

    • Call generate_key_pair() from Secure Keystore.

      • Generates RS256 or ES256 key pair, stored in Android hardware keystore.

    • Retrieve issuer metadata (client_id, redirect_uri, etc.) from trusted issuers list.

    • Call request_credential_from_trusted_issuer() in VCI Client , passing credential configuration and client metadata.

    Step 2: User Authorization

    • VCI Client returns a callback requiring user authorization.

    • Wallet opens a web-view to the Authorization Server.

    • User authenticates, and an authorization code is returned to the wallet.

    • Wallet sends the authorization code to the VCI Client, fulfilling the callback.

    Step 3: Token Exchange

    • VCI Client triggers get_token_response callback.

    • Wallet makes a POST request to the token endpoint with auth code.

    • Authorization Server responds with an access token + cNonce.

    • Wallet returns a token response to the VCI Client.

    Step 4: Proof Generation & Credential Download

    • VCI Client requests a Proof JWT (get_proof_JWT).

    • Wallet constructs JWT with claims: nonce, aud, iat, exp.

    • Wallet uses Secure Keystore to sign JWT.

    • Wallet sends signed Proof JWT to VCI Client.

    • VCI Client requests credentials from Issuing Authority and returns the final credential JSON.

    Step 5: Verification & Storage

    • Wallet calls verify() from VC Verifier 🔎, passing credential JSON.

    • VC Verifier checks validity (signature, expiry, issuer).

    • Verification result returned (True/False with message).

    • If valid, the wallet stores credentials and renders as a card view.

    Optional Step: Credential Presentation

    • Wallet calls Pixelpass to generate QR code.

    • Pixelpass returns a QR image for displaying to the verifier.

    Using Inji libraries and SDKs, which are built on open standards, developers can build their own custom wallets or integrate these libraries into existing applications, effectively transforming them into VC-based wallets.\

    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:

    The VC can be dynamically rendered with all the fields, and if the display properties provided in the .well-known, Inji Wallet downloads the .well-known and applies the below properties on the VC template to modify the VC render.

    • Text colour

    • Background colour

    • Logo change

    Actors:
    • Inji Wallet: Orchestrates the process, interacts with VCI Client and Secure Keystore.

    • Secure Keystore: Signs cryptographic proofs.

    • VCI Client: Manages OpenID4VCI communication with the Issuing Authority.

    • Authorization Server: Authenticates the user (e.g., eSignet).

    • Issuing Authority: Issues the VC.

    • VC Verifier: Verifies credential authenticity.

    • Pixelpass: Handles QR code generation and encoding.

    Workflow Steps:

    1. Key Pair Generation: On first use, Inji Wallet generates and securely stores a cryptographic key pair via the Secure Keystore.

    2. VC Download Request: User initiates VC download (via UIN/VID or KBI). Wallet instructs VCI Client to start the OpenID4VCI issuance flow.

    3. User Authentication: VCI Client redirects the user to the Authorization Server. User authenticates (OTP, KBI, etc.). Authorization Server returns an auth code.

    4. Token Exchange: Wallet exchanges the auth code for an access token and nonce from the Authorization Server.

    5. Proof Construction: Wallet creates a proof JWT with the nonce, sends it to Secure Keystore for signing, and receives the signed proof JWT.

    6. Credential Issuance Request: VCI Client sends the signed proof JWT to the Issuing Authority. Issuer returns the VC.

    7. Credential Verification: Wallet verifies the VC with the VC Verifier (checks signature and schema). If verification fails, an error is shown.

    8. VC Storage and Rendering: Verified credentials are securely stored. For some credentials, a QR code is cached for offline use.

    Verifiable Presentation (VP) Sharing via OpenID4VP Flow

    This workflow explains how Inji Wallet shares selected VCs with a verifier (Relying Party) using the OpenID4VP protocol.

    Actors:

    • User: Selects credentials and provides consent.

    • Inji Wallet: Manages the process, interacts with OpenID4VP Module and Secure Keystore.

    • Secure Keystore: Signs VP tokens.

    • OpenID4VP Module: Validates requests and structures the VP token.

    • Relying Party (Verifier): Requests and validates credentials.

    Workflow Steps:

    1. QR Code Creation: The verifier generates a QR code containing the authentication request.

    2. QR Code Scan: User scans the QR code in Inji Wallet, which extracts the auth request.

    3. Auth Request Validation: Wallet passes the request to the OpenID4VP Module for validation (issuer, signature, expiry, audience).

    4. Display Matching VCs & User Consent: Wallet finds matching credentials, displays them, and the user selects which to share and gives consent.

    5. Construct Unsigned VP Token: Wallet sends selected VCs and metadata to the OpenID4VP Module, which constructs the VP token (unsigned).

    6. Sign VP Token: OpenID4VP Module sends the unsigned VP token to Secure Keystore for signing. The signed VP token is returned.

    7. Send Auth Response to Verifier: Wallet sends the signed VP token and presentation_submission to the verifier. The verifier validates the response and, if successful, completes the transaction.

    Features Flow

    This document delineates the workflow for essential functionalities of Inji Wallet.

    1. First App Launch

    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 End User Guide.

    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:

    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 here.

    Download credentials using Knowledge Based Identification (KBI)

    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 here.

    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

    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 Tuvali documentation.

    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.

    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 the readiness of software for use in multiple countries.

    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 the Resident's phone with VID

    • Multi-language support

    • Credential registry

    • Backup and restore

    • Wallet binding

    • Deep link navigation

    • OpenID4VP

    • QR code Login

    • Key Management

    • Credential Offer

    • SD JWT VC download

    • Logout

    Test Approach

    A 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's 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.

    Verified configuration

    Verification is performed on various configurations as mentioned below

    • Default configuration - with 1 Lang

    Feature Health

    • On Android Device:

    • On iOS Device:

    Test execution statistics

    Functional test results by modules

    Below are the test metrics for performing functional testing using mock MDS and mock ABIS. The process followed was black box testing, which was based 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, and end-to-end flows across multiple languages and configurations. The testing cycle included the simulation of multiple identity schemas and respective UI schema configurations.

    Total
    Passed
    Failed
    Skipped (N/A)
    Pass Rate

    3900

    3493

    407

    0

    89%

    Test Rate: 100% execution coverage achieved.

    Here is the detailed breakdown of metrics for each module:

    Platform
    Total
    Passed
    Failed
    Skipped (N/A)

    Android Device

    2038

    1839

    199

    0

    iOS Device

    1862

    1654

    208

    0

    Testing with various device combinations

    Below are the test metrics by performing VC Sharing functionality on various device combinations:

    Total
    Passed
    Failed
    Skipped
    Pass Rate

    240

    210

    30

    0

    87.5%

    Test Rate: 100% execution coverage achieved.

    Device and Component Details:

    Tested with Inji Components (qa-inji1)

    • mosipqa/inji-verify-service:0.14.x

    • mosipqa/inji-verify-ui:0.14.x

    • mosipqa/inji-certify-with-plugins:0.12.x

    • mosipqa/apitest-mimoto:0.18.x

    • mosipqa/mimoto:0.19.x

    • mosipqa/inji-web:0.14.x

    Tested with Components (Released env)

    • mosipid/mimoto:0.18.1

    • mosipid/apitest-mimoto:0.18.1

    • mosipid/inji-verify-service:0.13.1

    • mosipid/inji-verify-ui:0.13.1

    • mosipid/apitest-inji-certify:0.11.0

    • mosipid/inji-web:0.13.1

    • mosipid/esignet-with-plugins:1.6.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/kernel-notification-service:1.2.0.1

    • mosipid/registration-processor-stage-group-1:1.2.1.1

    Devices Used for Testing

    • Vivo Y73 with Android 13, BLE 5.0

    • Samsung Galaxy A03 Core with Android 11, BLE 4.2

    • iPhone 11 with iOS 18.3.2, BLE 5.0

    • iPhone 7 with iOS 15.8, BLE 4.2

    • Redmi 7A with Android 10, BLE 4.2

    • Redmi 6A with Android 9, BLE 4.2

    • Techno POVA 6 NEO – Android 14

    • iTel – Android 14

    • iPhone 14 – iOS 18.5

    • OPPO A59 5G – Android 15

    • ONE PLUS 12R – Android 15

    • Xiaomi RedMi NOTE 13 PRO – Android 15

    • Infinix NOTE 50X 5G – Android 15

    • iPhone 13 – iOS 18.5

    Detailed Test Metrics

    Below are the detailed test metrics from performing manual 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

    Github link for the detailed report is here

  • Governments can deploy it for inclusive, public-facing identity journeys

  • Developers can contribute, fork, and innovate to suit local needs

  • It’s ideal for communities with limited smartphone access and ensures full interoperability with open digital identity ecosystems using:

    Core Design Principles

    • Web Accessibility for All Full credential access via desktop or shared devices.

    • Standard-Compliant Architecture Based on OpenID4VCI, W3C VC Data Model, IETF SD-JWT, and OpenID4VP support for presenting JSON-LD Verifiable Credentials to any compliant verifier.

    • User-Controlled Credential Sharing Complete control over how, when, and with whom to share.

    • Modular and Configurable Login System Supports Google and other OpenID-compliant IdPs.

    • Trustworthy Credential Lifecycle Credentials are digitally signed by issuers, tamper-evident, and easily verifiable.

    Capabilities Snapshot

    Multiple Credential Format Support

    Inji Wallet is designed for interoperability and flexibility by supporting a wide range of credential formats:

    • W3C Verifiable Credentials (JSON-LD VCs) Data Model 1.1

      • Standards-based credential format is widely adopted across ecosystems.

      • Suitable for general-purpose credential issuance and verification.

    • IETF SD-JWT

      • IETF SD-JWT Verifiable Credentials: Enables holders to download and share credentials in IETF SD-JWT format. This allows users to share only the necessary attributes while keeping other data private, ensuring privacy-preserving credential sharing.

      • Allows users to share only the required claims with verifiers via the OpenIDVP flow, where these selectively disclosable claims can be shared as per the user's need. (Coming Soon)

    • OpenID4VP Credential Presentation for JSON-LD VC Format

      • Enables users to present W3C JSON-LD Verifiable Credentials directly to verifiers using OpenID4VP flows.

      • Fully interoperable with Inji Verify and any OpenID4VP-compliant verifier.

    • Login with Any IdP Access your wallet using Google or any OpenID-compliant Identity Provider.

    • Download from Trusted Issuers Select an issuer, enter UIN/VID/Registration Number or any unique identifier, and securely download credentials.

    • Web Wallet Storage (Post-login) Credentials are stored in your secure, logged-in web wallet session, enabling access across sessions and devices, depending on configuration.

      • Verifiable Credentials are now stored in the “Stored Cards” section.

      • You can view and download the credential as a PDF file locally on your system, or print it out once downloaded.

      • You can reset your passcode if you forget it during login. However, the option to change the passcode after logging in is currently not available.

    • Local PDF Download Support

      Optionally download credentials as PDFs with embedded QR codes for physical copies. Users can present these PDFs to verifiers to access services without requiring a web session.

    • Easy Credential Sharing and Presentation Share credentials via QR code scan, PDF upload, or printed presentation. Present Credentials via OpenID4VP: Users can now share JSON-LD VCs using a live, secure OpenID4VP presentation flow.

    • Interoperability with Verifiers Fully compatible with Inji Verify and other OpenID4VP-compliant verifier portals.

    • Flexible Identity Inputs Authenticate using UIN, Date of Birth, or Registration Number for credential retrieval.

    How It Works

    1. Login & Onboarding Authenticate via Google or another OpenID-compliant IdP.

    2. Choose Issuer & Credential Select from available issuers and credential types.

    3. Authenticate Identity Provide UIN, Date of Birth, or Registration Number.

    4. Download Credential Receive a PDF with an embedded QR code.

    5. Share Credential via Scan & Upload

      • Upload the PDF containing the QR code to the verifier portal.

      • Scan the QR code from the PDF via the verifier portal.

      • Present the credentials in printed form

    6. Share via OpenID4VP Presentation Flow

      • Select the credential you wish to present.

      • Inji Web launches an OpenID4VP flow with the verifier.

      • User reviews and approves credential sharing.

    7. Use as Guest (No Login) Skip login using Guest Mode — no IdP required.

      • Direct credential download only (no storage in web wallet).

    Sneak Peek: Upcoming Features

    • W3C VC Data Model 2.0 Support

    • SVG-based Credential Templates

    • Sharing of IETF SD-JWT Selective Disclosure via OpenIDVP

    • Presentation During Issuance

    • Credential Revocation

    Technology and Integration

    Inji Web interacts with:

    • Mimoto APIs for managing issuer details, facilitating VC download and generating PDF

    • eSignet APIs for authentication

    Get Involved

    For any queries, contributions, or to collaborate, join us on the Inji community forum or raise a PR via the GitHub repository.

    Inji Wallet

    Overview

    Inji Mobile isn't just a wallet – it’s a gateway to digital trust, empowering every individual to carry their identity with dignity, privacy, and control. — Inspired by the vision of open, inclusive digital identity ecosystems.

    Inji Mobile is an open-source mobile wallet built to securely receive, store, manage, and share Verifiable Credentials (VCs), whether online or offline. Designed in line with global standards such as W3C VC Data Model, OpenID4VCI, OpenID4VP, ISO 18013-5 (mDL), and IETF SD-JWT, Inji Mobile enables individuals to carry digital identity, documents, certificates, etc., with full privacy, consent, and control.

    Whether you're a citizen accessing government services, a developer building digital identity applications, or a verifier validating credentials, Inji Mobile offers a trusted, standards-compliant foundation for secure and privacy-preserving interactions. As a reference implementation, Inji Mobile is both a ready-to-use wallet and a modular solution; its SDKs, libraries, and components can be used independently or bundled into custom apps, depending on the adopter’s needs and specific use cases.

    Core Design Principles

    • Interoperability-First Complies with major standards: OpenID4VCI, OpenID4VP, W3C Data Model, IETF SD-JWT, JWT VC, and ISO mDL/mDoc.

    • Offline Functionality BLE-based VC sharing and offline face authentication, ensuring usability even in no-connectivity environments.

    • User Sovereignty Credentials are held entirely by the user, with granular consent-driven sharing.

    Capabilities Snapshot

    Multiple Credential Format Support

    Inji Wallet is designed for interoperability and flexibility by supporting a wide range of credential formats:

    • W3C Verifiable Credentials (JSON-LD VCs) Data Model 1.1 and Data Model 2.0

      • Standards-based credential format is widely adopted across ecosystems.

      • Suitable for general-purpose credential issuance and verification.

    • ISO 18013-5 (mDL)

    This multi-format support allows Inji Wallet to work seamlessly across different ecosystems, ensuring compatibility, security, and user privacy.

    Secure Storage of VCs

    • Digitally signed credentials from trusted issuers

    • Encrypted and integrity-verified local storage.

    • Supports multiple credential formats including W3C JSON-LD VCs, ISO mDL/mDoc, and IETF SD-JWT.

    Seamless Credential Sharing

    • Offline sharing via

    • Online presentation using QR-code SSO and

    • Supports same-device and cross-device interactions

    Authentication & Face Verification

    • Offline face match verification to authenticate the user during VC sharing

    • Device-level biometric/passcode unlock for app access

    Deep Link-Based SSO (Wallet Login Authentication - WLA)

    • Tap-to-login via QR code scanning

    • Smart redirection to service post-verification

    • Works across any OpenID4VP-compliant verifier

    Credential Download via Pre-Auth Code

    • Download credentials via pre-authorized flow

    • Supports various credential types: national IDs, driver's licenses, health cards, academic degrees, etc.

    SD-JWT OpenIDVP Support

    • Inji Mobile supports Selective Disclosure JWT (SD-JWT) credentials.

    • Enables privacy-preserving presentations, where users can share only the specific attributes required by a verifier, rather than the entire credential.

    • Fully compliant with the OpenID for Verifiable Presentations Draft 23 (OpenID4VP) specification for SD-JWT.

    • Improves compatibility with ecosystems adopting

    SVG-Based Credential Rendering

    • Introduces support for SVG templates via the Inji VC Renderer library.

    • Allows credentials to be rendered in a visually rich, scalable, and customizable format.

    • Enables dynamic layouts, inclusion of logos, photos, and design elements, while staying aligned with the W3C VC Data Model 2.0.

    How It Works

    1. Credential Download Users can obtain VCs using their unique identifiers (UIN/VID or other methods), authenticate via OTP, and securely store them.

    2. Credential Storage All credentials are stored encrypted, verified using the issuer’s digital signature, and integrity is validated via a unique HASH. In addition to standard VC formats, Inji Mobile supports JSON-LD, ISO mDL/mDoc and IETF SD-JWT credentials, ensuring the privacy-preserving selective disclosure of claims during verification.

    3. Sharing Credentials Users can share credentials:

    Sneak Peek: Upcoming Features

    • Support for W3C Data Model 2.0 and SVG Templates

    • IETF SD-JWT-based Selective Disclosure via OpenID4VP

    • Support for JWT-format credentials

    • Presentation During Issuance

    Technology and Integration

    1. The app leverages

    • Wallet configuration and trusted issuer setup

    • VC download

    • Holder binding of credentials (public key association)

    1. Refer to

    • Fetch issuer's well-known metadata

    • Download VCs (OpenID4VCI flow)

    1. Additionally, it utilises to enable seamless online login for users.

    Summary

    Inji Mobile is more than just a credential wallet; it’s a reference implementation for inclusive, offline-capable, standards-compliant digital identity. With full support for online and offline VC flows, strong cryptographic safeguards, and a user-first design, it provides a powerful tool for citizens, developers, and governments alike. Inji Mobile gives you the interoperable building blocks you need.

    Get Involved

    For any queries, contributions, or to collaborate, join us on the or raise a PR via the .

    Features

    Inji Mobile is an open-source digital wallet designed to enable individuals to receive, store, and present Verifiable Credentials (VCs) securely, both online and offline. Purpose-built to align with global standards like W3C VC, OpenID4VCI, OpenID4VP, IETF SD-JWT, and ISO 18013-5 (mDL), it brings interoperability, user autonomy, and strong cryptographic guarantees to digital identity ecosystems.

    Core Mobile Wallet Features

    1. Multiple Credential Format Support

    Inji Wallet is designed for interoperability and flexibility by supporting a wide range of credential formats:

    • W3C Verifiable Credentials (JSON-LD VCs) Data Model 1.1

      • Standards-based credential format is widely adopted across ecosystems.

      • Suitable for general-purpose credential issuance and verification.

    • ISO 18013-5 (mDL)

    This multi-format support allows Inji Wallet to work seamlessly across different ecosystems, ensuring compatibility, security, and user privacy.

    2. Download, Verify, and Share Verifiable Credentials

    Inji Wallet makes it easy and secure for residents to manage their digital identity and credentials. From downloading and verifying to sharing and backing up Verifiable Credentials (VCs), this guide outlines all key features and workflows available in the wallet.

    2.1 Downloading Verifiable Credentials

    a) OpenID for VC Issuance

    Residents can download VCs from trusted issuers integrated with OpenID for the VCI protocol.

    Example Issuers:

    • Republic of Veridonia National ID Department - National ID

    • StayProtected Insurance - Insurance Credentials

    • Republic of Veridonia Tax Department - Tax ID

    • AgroVeritas Property & Land Registry - Land Record

    b) Pre-Authorised Credential Offers (Without Transaction Code)

    • Users download credentials directly using a credential_offer URI

    • No login required; pre-auth code embedded in the offer

    • Used in mass issuance or public campaigns (e.g., vaccination certificates, offline cards)

    c) Pre-Authorised Credential Offers (With Transaction Code)

    • Adds a one-time transaction code (OTP / claim code) to bind issuance to the user

    • User enters code in-app to retrieve VC securely

    • Ideal for privacy-sensitive issuance (e.g., mDL, insurance)

    2.2 Verifying Credential Authenticity

    Inji Mobile Wallet uses robust cryptographic libraries to verify that the VC is:

    • Digitally signed by a trusted issuer, ensuring the credential originates from a valid and recognized entity.

    • Cryptographically valid based on proof type — verifying the integrity of the data using the appropriate proof mechanisms (e.g., JSON-LD proof, JWT, IETF SD-JWT, etc.).

    • Not revoked or expired — performing revocation status checks using status lists, revocation registries, or endpoints defined in the VC metadata.

    3. Sharing Verifiable Credentials

    Inji Wallet supports secure sharing of Verifiable Credentials (VCs) in multiple ways — both online and offline — with strong privacy and authentication.

    Method
    Description
    Connectivity
    User Control / Notes

    Note: All methods include user consent and privacy-by-design to ensure secure, context-aware interactions.

    4. SVG-based Credential Rendering

    • Inji Wallet now supports SVG-based credential rendering for Data Model 2.0 VCs.

    • This allows credentials issued under the Data Model 2.0 schema to be displayed as secure, dynamic SVG visuals within the wallet.

    • The rendering ensures that displayed information (such as name, ID, issuer, and other attributes) directly corresponds to the cryptographically verified credential data.

    5. Additional Mobile Wallet Features

    5.1 Backup and Restore

    Inji Wallet includes a secure, one-time backup setup based on the platform:

    Platform
    Backup Option
    Notes

    Ideal for:

    • Phone upgrades

    • App crashes or resets

    5.2 User-Friendly Interface & Quick Actions

    Designed for ease of use with intuitive UI components:

    • Multiple VC Views: Mini cards to full detail

    • Separation of Downloaded vs. Received VCs

    • Quick Access Menu: Share, Share with Selfie via the kebab menu (⋮) on card

    • Select from a list of credential types offered by the issuer.

    5.3 Wallet Security & Device Features

    • Biometric / Passcode Access

      • App requires authentication on every open or session timeout

      • Supports Android biometrics and Apple Face ID / Touch ID

    • Private Key Storage in Secure Enclave

    6. Features in the Pipeline

    • Revocation Status

    • Presentation during Issuance

    • Injii Mobile Wallet Login

    • Claim 169 QR Code Parsing and Download

    Read More

    Check the to explore the above-mentioned features.

    Components

    Inji Wallet utilizes multiple libraries to provide a seamless experience.

    These library are accessible as AAR for Android app and SPM(Swift Package Manager) for iOS App. Android libraries are written in Kotlin and can be easily integrated with cross platform applications like React Native or Flutter. This helps with seamless integration with other mobile wallets.

    The libraries are as follows:

    1. Secure Keystore SDK

    2. VCI Client SDK

    3. PixelPass SDK

    4. Tuvali - Sharing via BLE SDK

    5. OpenID4VP - Online Sharing SDK

    6. Face Match SDK

    7. Telemetry SDK(coming soon)

    1. Tuvali - Sharing via BLE SDK

    • This library facilitates the transfer of downloaded Verifiable Credential from the Wallet to Verifier.

    • 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.

    Wallet
    Verifier
    VC transfer support
    • 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:

    • To learn more about Tuvali's implementation, refer .

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

    2. Face Match SDK

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

    This SDK internally employs a tflite model, which is now bundled within the app. The face matcher functionality is also available via the NPM module, which is already integrated for offline face authentication in Inji Wallet.

    The SDK is employed in two scenarios: During Both Offline and Online 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. This process is supported for both offline VC sharing (e.g., via BLE) and online login (e.g., scanning a QR code from the relying party portal and logging in using Inji Wallet). Refer to check the API specifications for the face matcher model.

    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:

    • For Android: Refer to the .

    • For iOS: Refer to the .

    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.

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

    Note:

    • Compatible with devices that support a hardware keystore.

    • To understand the library and access API documentation, refer .

    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.

    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.

    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. Validates the received Authorization Request to check if the required details are present or not and then returns the Authorization Request to the consumer application once 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).

    Note:

    • Refer to the inji-openid4vp repository

    7. Telemetry SDK

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

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

    To know more about each of these, refer .

    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.

    Signature

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

    Standard Return Codes (true or false)

    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 ensure fraud prevention in compliance with , the faceAuth verification should include passive liveness checks, such as picture-in-picture.

    • 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.

    Signature

    Parameters

    Standard Return Codes (match or no match)

    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

    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.

    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

    ● Credential Offer

    ● 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.

    Verified configuration

    Verification is performed on various configurations as mentioned below

    ● Default configuration - with 1 Lang

    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:

    Testing with various device combinations

    Below are the test metrics by performing VC Sharing functionality on various device combinations

    Device and Component Details:

    Detailed Test Metrics

    Below are the detailed test metrics by performing manual 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

    Special keys used to identify the face for rendering a credential are verified for the available positive flow, since support for other types of verification is not yet available.

    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.

    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

    • 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. # #

    Documentation

    • To know more about Inji Wallet, watch the !

    https://www.npmjs.com/package/@iriscan/biometric-sdk-react-nativewww.npmjs.com
    GitHub - biometric-technologies/biometric-sdk-react-nativeGitHub

    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:

    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:

    Version 0.19.0

    Release Name: Inji Mobile Wallet 0.19.0

    Release Type: Developer

    Release Date: 8th Sept, 2025

    Overview

    This release of Inji Mobile Wallet v0.19.0 strengthens support for IETF SD-JWT Verifiable Credentials (VCs) and enhances the VC verification experience across Android and iOS with updates in our vc-verifier library.

    Key highlights include IETF

    Test Report

    Testing Scope

    The scope of testing is to verify fitment to the specification from the perspective of

    • Functionality

    • Deployability

    Test Report

    Testing Scope

    The scope of testing is to verify fitment to the specification from the perspective of

    • Functionality Sanity

    • Automation UI

    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

    Test Report

    Scope

    The scope of testing is to verify fitment to the specification from the perspective of:

    • Functionality

    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:

    GitHub - mosip/inji-walletGitHub
    GitHub - mosip/ble-verifier-sdkGitHub
    OPENID4VP://connect?name=STADONENTRY&key=8520f0098930a754748b7ddcb43ef75a0dbf3a0d26381af4eba4a98eaa9b4e6a
    var verifier = Verifier()
    var uri = verifier.startAdvertisement()
    println(uri)
    var wallet = Wallet()
    wallet.startConnection(uri)
    OPENID4VP://connect:?name=OVPMOSIP&key=69dc92a2cc91f02258aa8094d6e2b62877f5b6498924fbaedaaa46af30abb364
    wallet.sendData(payload);
    verifier.sendVerificationStatus(status);
    wallet.subscribe {
      event  ->
      // Add the code that needs to run once event is received
    }
    verifier.subscribe {
      event  ->
      // Add the code that needs to run once data is received
    }
    wallet.disconnect();
    verifier.disconnect();
    {
        "credential": {
            "credentialSubject": {
                "gender": "Male",
                "primaryCropType": "Maize",
                "mobileNumber": "9876543210",
                "postalCode": "453000",
                "landArea": "3 hectares",
                "fullName": "John Doe",
                "secondaryCropType": "Rice",
                "dateOfBirth": "25-05-1990",
                "face": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAFCAYAAABW1IzHAAAAHklEQVQokWNgGPaAkZHxPyMj439sYrSQo51PBgsAALa0ECF30JSdAAAAAElFTkSuQmCC",
                "farmerID": "987654321",
                "villageOrTown": "Koramangala",
                "district": "Bangalore",
                "id": "did:jwk:eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsInVzZSI6InNpZyIsImtpZCI6Iml3Qkl1Q2QzaFU1NlBWM3VTc3gzekhMc1E4SXdYckdHdmh6YkE1VlJuQkEiLCJhbGciOiJSUzI1NiIsIm4iOiJtMWlMQ0prNzA5VkpIbUF2MURsWUxsblA0UDEtLXFfU3Q3aVo3WjhWbXk0d0Mxb2FTQWxXdjFXZjlKQXg2YmQ3OXdMbDhINEkwa25GeG9FbkktTUhvOUtGRXpFcGdJNXZIUHY2X0M2dWI4RmUwaXphRVFXTlY3VEpVRG54MVZ5OU5UZS15ekFVd2dfWk91Y0pFb3hyQW54VXM5OFcyTWpyUmtZdHVQcTlKRUxVTzRJM0wxX1B5S21hRG8zN0xCR3NVamhLVmQ0X0VzTkVPQ3AwQTZwbnBaUUd1S1RteXVhMUVYSDhLWUVTSEZ4alA4NGVCaGk0YmZPSWMwQjQ2VlZrVG81WG9TeUtnRi1xemRyTGFQRGJwZGxBaVNKMEJ5Vk5jaUE3Z2ctWEJLQkV0QVd1b19EQ3pYZUsxREJKT2txMXlkWEJzeWdjeGtpVmdobnFtUTFsVHcifQ==",
                "state": "Karnataka",
                "landOwnershipType": "Owner"
            },
            "validUntil": "2027-10-09T03:08:19.711Z",
            "validFrom": "2025-10-09T03:08:19.711Z",
            "type": [
                "VerifiableCredential",
                "FarmerCredential"
            ],
            "@context": [
                "https://www.w3.org/ns/credentials/v2",
                "https://piyush7034.github.io/my-files/farmer.json",
                "https://w3id.org/security/suites/ed25519-2020/v1"
            ],
            "issuer": "did:web:piyush7034.github.io:my-files:sample-ed25519",
            "credentialStatus": {
                "statusPurpose": "revocation",
                "statusListIndex": "7",
                "id": "http://localhost:8090/v1/certify/credentials/status-list/649d3d36-2719-42eb-9f00-ac479a906059#7",
                "type": "BitstringStatusListEntry",
                "statusListCredential": "http://localhost:8090/v1/certify/credentials/status-list/649d3d36-2719-42eb-9f00-ac479a906059"
            },
            "proof": {
                "type": "Ed25519Signature2020",
                "created": "2025-10-08T21:38:19Z",
                "proofPurpose": "assertionMethod",
                "verificationMethod": "did:web:piyush7034.github.io:my-files:sample-ed25519#LYs95rEHKsqm1_TIFJxffLUXHZL1rM_h-UuwRi6PtN4",
                "proofValue": "z5Z3Rj9rhV5b6whiq4EgZaD8gmtsBtfMEqwNXAgasCxtBRCpc35DkiGFyRfy8NYDtXBDX6RjAUpWfgNGn94t2ywgm"
            }
        }
    }
    {
        "credential": {
            "issuanceDate": "2025-10-09T03:05:40.782Z",
            "credentialSubject": {
                "gender": "Male",
                "primaryCropType": "Maize",
                "mobileNumber": "9876543210",
                "postalCode": "453000",
                "landArea": "3 hectares",
                "fullName": "John Doe",
                "secondaryCropType": "Rice",
                "dateOfBirth": "25-05-1990",
                "face": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAFCAYAAABW1IzHAAAAHklEQVQokWNgGPaAkZHxPyMj439sYrSQo51PBgsAALa0ECF30JSdAAAAAElFTkSuQmCC",
                "farmerID": "987654321",
                "villageOrTown": "Koramangala",
                "district": "Bangalore",
                "id": "did:jwk:eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsInVzZSI6InNpZyIsImtpZCI6IkVIdXU5eU5MN1VFcnFDd0hWOUdPTk5KWWdxQmVvMVhUTmY0OU95Tk1LN0EiLCJhbGciOiJSUzI1NiIsIm4iOiJ2VmF1dFFYa3JMUXVaU2hGWWFDNkRMNEZOcnMzcm5meTVkVjhyWVJRQnhyOW1oZllfdGxwTzc5QzRiZnplS1BzaVBXN0c4NEMtZGt4QlNOR3RXV0wwdy1oX3JOd3Y2eUFMT1VZaGdtcnZVeGhWakhCRzFMdTFtTUhERF9JZlpJb0lpV1JRZkpvMGZYMFBzZ2FrRWhIZmxjWHdPNk1DaVItNGVNTUdhNU0zR2ViTVQtUHlsQVVKYzJiN2NoaGFvTlJYQWNWbTBsZTFmUG5RRGJfQ21XMENxOW9kOHFjQUwtellqc0F3MnJzMWxhZ3RDcTdsSXVIWkszUnF2U0NQb2lmSG1ZZEZvdzZnNkF5eTlyNzhxc2VwYkU3d3JDYS1aRF92TkxHblpTbXVac3RicmxxZkxfelFfdnlwNjM1NTMtRmNPNGlKNW1Md0w4Z2pwTWRrVmVMRFEifQ==",
                "state": "Karnataka",
                "landOwnershipType": "Owner"
            },
            "type": [
                "VerifiableCredential",
                "FarmerCredential"
            ],
            "@context": [
                "https://www.w3.org/2018/credentials/v1",
                "https://piyush7034.github.io/my-files/farmer.json",
                "https://w3id.org/security/suites/ed25519-2020/v1"
            ],
            "issuer": "did:web:piyush7034.github.io:my-files:sample-ed25519",
            "expirationDate": "2027-10-09T03:05:40.782Z",
            "proof": {
                "type": "Ed25519Signature2020",
                "created": "2025-10-08T21:35:40Z",
                "proofPurpose": "assertionMethod",
                "verificationMethod": "did:web:piyush7034.github.io:my-files:sample-ed25519#LYs95rEHKsqm1_TIFJxffLUXHZL1rM_h-UuwRi6PtN4",
                "proofValue": "z3BW5Tx6ZHJ53rriixAwkrbjGEurLP5eNWwZQQkmEMEEWtLK5qJRThA6wyuyaiin7ucfaUDk4H2BKVBLpSAqcDPcu"
            }
        }
    }
    {
        "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": "[email protected]",
            "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"
        }
    }
    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"
        }
      ]
    }

    Verifier receives a cryptographically verifiable VP.

    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.

    Total

    Passed

    Failed

    Skipped

    110

    110

    0

    0

    Test Rate: 100%, With Pass Rate: 100%

    Here is the detailed breakdown of metrics

    Platform

    Category

    Total

    Passed

    Failed

    Skipped

    iOS

    Test cases

    52

    52

    0

    0

    Test Rate: 100%, Pass Rate: 100%

    Platform

    Category

    Total

    Passed

    Failed

    Skipped

    Android

    Test cases

    58

    58

    0

    0

    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

  • 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

    Modular Security Architecture Combines robust cryptography with flexible authentication mechanisms and strong privacy guarantees.
  • Cross-Platform Native Implementation Built in React Native with Kotlin (Android) and Swift (iOS) integrations for native performance.

  • Mobile Driving License and Mobile Document specification.

  • Supports use cases like identity verification in transport, law enforcement, and service access.

  • IETF SD-JWT

    • IETF SD-JWT Verifiable Credentials: Enables holders to download and share credentials in IETF SD-JWT format. This allows users to share only the necessary attributes while keeping other data private, ensuring privacy-preserving credential sharing.

    • Allows users to share only the required claims with verifiers via the OpenIDVP flow, where these selectively disclosable claims can be shared as per the user's need. (Coming Soon in the upcoming release)

  • SD-JWT and OpenID-based verifiable presentation
    .
    Improves on-screen display and print-ready credential rendering experience.

    Offline using BLE

  • Online by scanning QR codes via OpenID4VP

  • Simple Upload and Scan of QR codes

  • Face Verification Optional offline face authentication ensures the right holder is presenting credentials during in-person verifications.

  • Consent & Privacy Credential sharing is consent-based, giving users full control over what data is shared and with whom.

  • Wallet Login with IdPs (OpenID4VP-based WLA)

  • Credential Revocation Support

  • Bluetooth Low Energy (BLE)
    OpenID4VP
    Mimoto APIs
    Inji Certify APIs
    eSignet APIs
    Inji community forum
    GitHub repository
    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.

  • 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. #INJI-46

  • Bug fix: Inji now has the capability to render the resident's demographic information in the language chosen by the Residents. #INJI-44

  • Bug fix: Inji now has the capability to identify when the App is low on storage and notify the same to the Residents. #INJI-42

  • 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. #INJI-41

  • 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. #INJI-38

  • Bug fix: In the Home Screen, the tab indicators were not properly working in RTL. After the fix, RTL is being rendered properly. #INJI-36

  • 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. #INJI-35

  • 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. #INJI-34

  • 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. #INJI-33 #INJI-32

  • 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. #INJI-28

  • 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. #INJI-7

  • 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. #INJI-39

  • 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). #INJI-68

  • INJI-80
    INJI-71
    INJI-53
    INJI-30
    Feature Documentation
    User Guide
    QA Report
    video
    Generating Demo Credentials Guide

    Generates QR codes for credential presentation.

    Issuing Authority (Certify)

    inji-certify

    Authority from which the final credential (VC) is issued and downloaded.

    Authorization Server (AS)

    (External)

    Service where users authenticate to get authorization codes. In case of Inji eSignet can also be used as authorization server as it is a MOSIP product so both are compatible.

    secure-keystore
    inji-vci-client
    vc-verifier
    pixelpass
    To understand Tuvali and Inji Wallet integration, along with API documentation, refer here.
  • Maven snapshots are available here

  • Maven snapshots are available here.
    JS Implementation
  • Swift Implementation

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

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

  • To check the NPM module, click here.

  • Maven snapshots are available [here]

    • For Android

    • For Java

  • Swift Implementation
  • To understand about the installation and the API documentation, refer here.

  • Maven snapshots are available here

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

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

  • Swift Repository
  • To understand about the installation and the API documentation, refer here.

  • Maven snapshots are available here

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

  • Android

    Android

    Yes

    iOS

    Android

    Yes

    Android

    iOS

    No

    iOS

    iOS

    Kotlin Implementation
    Swift Implementation
    here
    here
    Tensorflow
    Google ML Kit
    iriscan/biometric-sdk-react-native
    here
    secure-keystore Kotlin library
    secure-keystore-iOS Swift library
    here
    here
    Claim 169
    Kotlin Implementation
    Kotlin Implementation
    Kotlin Repository
    telemetry
    sunbird telemetry
    Integration Guides

    No

    205

    Skipped (N/A)

    0

    mosipid/esignet-with-plugins:1.5.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/kernel-notification-service:1.2.0.1

    mosipid/registration-processor-stage-group-1:1.2.1.1

    Infinix NOTE 50X 5G - Android 15

    iPhone 13 - iOS 18.5

    Total

    Passed

    Failed

    Skipped (N/A)

    3874

    3095

    401

    0

    Test Rate: 100% With Pass Rate: 89%

    Total Test cases

    2025

    Passed

    1829

    Failed

    196

    Skipped (N/A)

    0

    iOS

    Number of testcases

    Total Test cases

    1849

    Passed

    1644

    Total

    Passed

    Failed

    Skipped

    240

    217

    23

    0

    Test Rate: 100% With Pass Rate: 90.41%

    mosipqa/inji-verify-service:0.14.x

    mosipqa/inji-verify-ui:0.14.x

    mosipqa/inji-certify-with-plugins:0.12.x

    mosipqa/apitest-mimoto:0.18.x

    mosipqa/mimoto:0.18.x

    mosipqa/inji-web:0.13.x

    Tested with components - Released env

    mosipid/mimoto:0.18.1

    mosipid/apitest-mimoto:0.18.1

    mosipid/inji-verify-service:0.13.0

    mosipid/inji-verify-ui:0.13.0

    mosipid/apitest-inji-certify:0.11.0

    Vivo Y73 with Android 13 BLE 5.0

    SS Galaxy A03 core with Android 11 BLE 4.2

    iPhone 11 with iOS 18.3.2 BLE 5.0

    iPhone 8 with i-OS 16.7 BLE 5.0

    iPhone 7 with iphone 15.8 BLE 4.2

    Redmi 7A Android 10 BLE 4.2

    Redmi 6A Android 9 BLE 4.2

    Techno POVA 6 NEO - Android 14

    iTel - Android 14

    iPhone 14 - iOS 18.5

    OPPO A59 5G - Android 15

    ONE PLUS 12R - Android 15

    Failed

    mosipid/inji-web:0.13.1

    Xiaomi RedMi NOTE 13 PRO - Android 15

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

  • Timeout is set in seconds.
    The use of device fingerprints should be limited to managing the SDK license.

    Name

    Description

    Type

    config

    Configuration with model file and matcher threshold

    Any object

    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.

    Response

    Status

    true

    Success

    false

    Error

    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

    Data URL format: data:image/imageformat base64 encoded image eg: data:image/jpeg

    vcImage

    The image that is given in the VC

    Data URL format: data:image/imageformat base64 encoded image eg: data:image/jpeg

    Response

    Status

    true

    Matched

    false

    Not Matched

    false

    Error

    ISO/IEC 30101
      async function configure(config: any): Promise<boolean> {
      if (already initialised & successful) {
       return true;
      }
     Initialise....
     if (successfully initialised) {
       return true;
     }
     return false;
     }
     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;
     }
  • Mobile Driving License and Mobile Document specification.

  • Supports use cases like identity verification in transport, law enforcement, and service access.

  • IETF SD-JWT

    • IETF SD-JWT Verifiable Credentials: Enables holders to download and share credentials in IETF SD-JWT format. This allows users to share only the necessary attributes while keeping other data private, ensuring privacy-preserving credential sharing.

    • Allows users to share only the required claims with verifiers via the OpenIDVP flow, where these selectively disclosable claims can be shared as per the user's need.

  • Veridonia Department of Motor Vehicles - mDoc

    Untampered — confirming that no field or claim in the credential has been altered since issuance.
  • Bound to the correct holder (where applicable) — verifying holder binding in cases where the VC includes a subject proof (e.g., via DID or SD-JWT binding).

  • Fine-grained VC selection and SSO login

    OpenID4VP – Cross-Device

    Scan verifier’s QR from another device → present VCs post face verification. Example: Sharing of JSON-LD,mDoc VCs etc

    Online

    Secure, decentralized VC presentation

    OpenID4VP – Same Device

    Tap QR on browser → deep-link opens wallet → share credentials. Example: Sharing of JSON-LD,mDoc VCs etc

    Online

    Seamless redirect

    SD-JWT Verifiable Presentation (VP) Support

    • Inji Wallet supports OpenID for Verifiable Presentations (OpenID4VP) flow for credentials in the IETF SD-JWT format.

    • Holders can selectively disclose specific claims while keeping other attributes private.

    • This ensures privacy-preserving credential sharing with verifiers, aligning with IETF SD-JWT and OpenID4VP standards.

    Online

    Consent-based sharing

    This enhancement improves readability, user trust, and consistency while maintaining alignment with the underlying verifiable data.
  • Support for SVG rendering for other data models may be added in future versions.

  • Choose only the VCs they want to download, ensuring relevance and control.

  • VCs grouped by type (ID, insurance, education)

  • Recent VCs shown first

  • Private keys are stored using Android Keystore / iOS Secure Enclave

  • Keys cannot be exported or tampered

  • QR Code Sharing

    Generate QR using PixelPass. Scan or upload on verifier portal.

    Online

    Quick and compact

    BLE (Bluetooth) Sharing

    Share VCs offline using Bluetooth Low Energy.

    Offline

    Peer-to-peer; face match supported

    SSO via QR Code

    Scan QR on service portal → share selected VCs after user consent.

    Online

    Android

    Google Drive

    Select Google account

    iOS

    iCloud

    Uses logged-in Apple account

    Inji Mobile Wallet Repository
  • 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.

  • 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

    Screen name: Retrieve your UIN/VID on clicking link

    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.

    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.

    Refer to mimoto-issuers-config.json of Collab 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.

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

    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):

    Type
    UIN

    Male (Adult)

    2154189532 , 5614273165

    Female (Adult)

    2089250384 , 5860356276

    Minor (aged btw 5-18yrs)

    3963293078

    Infant (aged below 5 yrs)

    5134067562

    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. oidckeystore.p12 file is attached here password to unlock this is xy4gh6swa2i

    4. 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:

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

    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

    Original p12 file as downloaded from environment
    Importing a new keypair
    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

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

    Alias for the new keypair
    Add keypairs to keystore.p12
    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.

    6KB
    certgen.zip
    archive
    Open
    SD-JWT issuance and download flow
    , updates to the
    VC Verifier Library
    , support for
    x509 certificates in SD-JWT
    , and improvements in handling credential formats such as
    mDoc VCs, JSON-LD VCs, and mDL VCs
    .

    This release also delivers important bug fixes and updates to improve stability, error handling, and multi-language support.

    ⚠️ Warning: Signature verification support is limited on iOS. Since the vc-verifier library is not available for iOS, signature verification is currently not performed for mso_mdoc and SD-JWT credential formats. For LDP-VC(JSON-LD), signature verification is supported only for RSA key suites; verification for EC and Ed25519 is not yet available.

    Refer to the library ReadMe to know more about this update.

    Key Highlights

    New Feature Addition

    SD-JWT VC Format Support

    • Constructed IETF SD-JWT VC Issuance Payloads in VCI Client Library (Kotlin & Swift).

    • Added IETF SD-JWT Validation and Disclosure Display after verification.

    • Integrated IETF SD-JWT VC Verification into the VC Verifier Library.

    • Refer to the to know more about this feature

    Technical Enhancements

    VC Verifier Library Enhancements

    • SD-JWT VC: Support added for x509 certificate chains as per IETF draft section 3.5-3.2.1.

    • Improved parsing of JSON payloads in OVP sharing flows with multi-language support (including Arabic).

    • Refer to the library ReadMe to know more about these enhancements.

    Minor Updates to the existing feature

    Credential Handling

    • Updates to the LDP VC(JSON-LD) display property to ensure metadata is refreshed from the database.

    • Improved error handling for VC activation and downloads (MOSIP VCs, Mock VCs, MDL VCs).

    • Fixed the BLE rendering issue for VCs shared without internet connectivity.

    Features Released

    Type
    Feature / Enhancements/Technical Upgrades
    Jira Link

    Technical addtion in Library for new feature support

    SD-JWT VC Validation

    Functional addtion in Wallet UI

    Display SD-JWT Disclosures After Verification

    Technical addtion in Library for new feature support

    SD-JWT VC Verification in VC Verifier Library

    Technical addtion in Library for new feature support

    Construct SD-JWT VC Issuance Payload — Kotlin

    Repositories Released

    Module
    Version

    inji-wallet

    inji-vci-client

    inji-vci-client-ios-swift

    vc-verifer

    Compatible Modules

    Module
    Version

    mimoto

    inji-config

    Inji Certify

    Inji Verify

    eSignet

    Known Issues

    Below is the list of key known issues specific to this release. For all known issues, click here.

    Jira Issue
    Description

    VC Verifier – SD-JWT without signature does not return errorCode.

    Enhancement to download nested VCs – nested symbol not proper.

    Information popup page is lengthy and needs UI improvement.

    Bug Fixes

    Below is the list of bug fixes as part of the 0.19.0 release:

    Jira Issue
    Description

    Unable to download MOSIP VC; error screen “Something went wrong”.

    LDP VC display property not updated until storage cleared.

    Unable to download Mock VC; error “Something went wrong”.

    Unable to activate VC due to technical error message.

    VC not rendered when shared over BLE without internet.

    Intermittent failures in MDL VC download.

    Release Documentation

    • Feature Documentation

    • QA Report

    Additional Resources

    • Feature Documentation - Contains detailed explanations of all available features of Inji Mobile Waller and its usage.

    • Integration Guides - Provides step-by-step instructions to integrate Inji Mobile Wallet with an external system.

    • End User Guide - Offers end-to-end guidance for end users on setup and daily usage.

    • API Documentation - Includes comprehensive details of all APIs, endpoints, request/response formats, and examples.

    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.

    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.

    Verified configuration

    Verification is performed on various configurations as mentioned below

    • Default configuration - with 1 Lang\

    Feature Health

    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.

    Total
    Passed
    Failed
    Skipped (N/A)

    3718

    3359

    359

    0

    Test Rate: 100% With Pass Rate: 90%

    ** Here is the detailed breakdown of metrics for each module**:

    Test cases

    On Android Device

    Total

    1946

    Passed

    1768

    Failed

    178

    Testing with various device combinations

    Below are the test metrics by performing VC Sharing functionality on various device combinations

    Total
    Passed
    Failed
    Skipped

    192

    179

    13

    0

    Test Rate: 100% With Pass Rate: 93.22%

    Device and Component Details:

    Tested Components

    QA Environment (qa-inji1)

    • mosipqa/inji-verify-service:0.13.x

    • mosipqa/inji-verify-ui:0.13.x

    • mosipqa/inji-certify-with-plugins:develop

    • mosipid/apitest-mimoto:0.17.1

    • mosipqa/mimoto:develop

    • mosipqa/inji-web:0.13.x

    Released Environment

    • mosipid/apitest-mimoto:0.17.1

    • mosipid/apitest-mimoto:0.17.1

    • mosipid/inji-verify-service:0.12.3

    • mosipid/inji-verify-ui:0.12.3

    • mosipid/inji-certify-with-plugins:0.11.0

    • mosipid/inji-web:0.12.0

    • mosipid/esignet-with-plugins:1.5.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/kernel-notification-service:1.2.0.1

    • mosipid/registration-processor-stage-group-1:1.2.1.1

    Devices Used for Testing

    Device
    OS Version
    BLE Version

    Vivo Y73

    Android 13

    5.0

    Samsung Galaxy A03 Core

    Android 11

    4.2

    iPhone 11

    iOS 18.3.2

    5.0

    iPhone 8

    iOS 16.7

    Italicized device names indicate devices used for specific compatibility or regression testing.

    Detailed Test Metrics

    Below are the detailed test metrics by performing manual 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 and wallet metadata story verification was performed against the qa-inji1 env.

    Other story verification performed against released env.

    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

    Android Device Feature Health Report
    iOS Device Feature Health Report

    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

    Link for the detailed test report.

  • 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

    • 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.

    • 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:

      • We've transitioned to using for Bluetooth Low Energy (BLE) communication, enhancing the connectivity experience.

    • 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

    • Bug fix: Reduced the app size for Android #INJI-103

    • Bug fix: Resolved connectivity issue when sharing VC #INJI-207

    • Bug fix: Fixed QR/ Esignet login using INJI app #INJI-209, INJI-49

    • Bug fix: Resolved BLE issues #,

    Repository Released

    Repositories

    Tags Released

    Inji

    Mimoto

    Documentation

    • Feature Documentation

    • User Guide

    • QA Report

    • To know more about Inji Wallet, watch the video!

    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

    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

    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

    Link for the

    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.

    To know more about the GenderMag UI/UX changes in the application, please refer .

    Summary

    Please find below the details for the Inji Version 0.11.0 release:

    VC download using KBI method

    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 .

    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

    Known Issues

    Redmi devices are not supported in this release. To know more, refer .

    Mentioned below is the list of other known issues.

    Jira issue
    Issue description

    Bug Fixes

    Jira issue
    Severity
    Issue description

    Documentation

    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
    /binding-otp

    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
    /wallet-binding
    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
    /issuers
    200

    OK

    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
    /issuers/{issuer-id}
    200

    OK

    Test Report

    Testing Scope

    The scope of testing is to verify fitment to the specification from the perspective of

    • Functionality

    • Deployability

    Test Report

    Testing Scope

    The scope of testing is to verify fitment to the specification from the perspective of

    • Functionality

    • Deployability

    Test Report

    Scope

    The scope of testing is to verify fitment to the specification from the perspective of:

    • Functionality

    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.

    Test Report

    Scope

    The scope of testing is to verify fitment to the specification from the perspective of:

    • Functionality

    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:

    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
    The wallet validates signed authorization requests and presents only the chosen claims, ensuring security and consent-driven sharing.

    INJIMOB-697

    INJIMOB-785

    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.

    INJIMOB-784

    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"

    INJIMOB-783

    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

    INJIMOB-778

    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

    INJIMOB-745

    INJIMOB-680

    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.

    INJIMOB-722

    INJIMOB-725
    INJIMOB-702
    INJIMOB-698
    Get it now using your AID
    INJIMOB-843
    INJIMOB-843

    INJIMOB-3205

    Technical addtion in Library for new feature support

    Construct SD-JWT VC Issuance Payload — Swift

    INJIMOB-3394

    Technical addtion in Library for new feature support

    OVP sharing payload parsing for Arabic language VCs

    INJIMOB-3367

    feature description
    INJIMOB-3412
    INJIMOB-3366
    INJIMOB-3365
    0.19.0
    0.5.0
    0.5.0
    1.4.0
    0.18.1
    0.10.0
    0.12.0
    0.13.1
    1.6.1
    INJIMOB-3526
    INJIMOB-3525
    INJIMOB-3515
    INJIMOB-3512
    INJIMOB-3504
    INJIMOB-3394
    INJIMOB-3179
    INJIMOB-2944
    INJIMOB-2771

    Hindi

  • Kannada

  • Tamil

  • 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.
    Tuvali
    INJI-146
    INJI-70
    Inji Developer Preview Release1- vDP1
    Mimoto vDP1
    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

  • 3 language configuration

    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

    detailed test report

    Skipped (N/A)

    0

    On iOS Device

    Total

    1772

    Passed

    1591

    Failed

    181

    Skipped (N/A)

    0

    5.0

    iPhone 7

    iOS 15.8

    4.2

    Redmi 7A

    Android 10

    4.2

    Redmi Note 10 Lite

    Android 13

    5.0

    Redmi K20 Pro

    Android 13

    5.0

    Redmi 6A

    Android 9

    4.2

    Logo
    200

    OK

    200

    OK

    {
      "id": null,
      "version": null,
      "str": null,
      "responsetime": null,
      "metadata": null,
      "response": {
        "maskedEmail": "[email protected]",
        "maskedMobile": "7897897890"
      },
      "errors": []
    }
    {
      "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": []
    }
    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"
        ]
      }
    }
    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"
          }
        ]
      }
    }
    GET /residentmobileapp/issuers HTTP/1.1
    Host: api.collab.mosip.net
    Accept: */*
    
    {
      "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 /residentmobileapp/issuers/{issuer-id} HTTP/1.1
    Host: api.collab.mosip.net
    Accept: */*
    
    {
      "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": []
    }

    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

    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

    API Documentation

    Repositories

    Tags Released

    Inji

    v0.11.0

    mimoto

    v0.11.0

    tuvali

    v0.4.7

    mosip-config

    v0.11.0-INJI

    Secure-Keystore

    v0.1.7

    mosip-onboarder

    v1.2.0.1

    INJIMOB-968

    Android- Occasionally, unable to activate the restored VC

    INJIMOB-946

    Inji-Unable to download when user attempted to restore VCs in a new device

    INJIMOB-937

    INJI- Unable to download the card with a new UIN

    INJIMOB-875

    IOS - Upon sharing sunbird VC twice and then upon sharing Mosip VC, app crashes

    INJIMOB-872

    Android - During face authentication, app crashes on a specific device

    INJIMOB-868

    INJI - Backup doesn't append the new data, but replaces the data

    INJIMOB-703

    Critical

    Inji - App crashes during click of OTP re-send button of download through AID

    INJIMOB-572

    Critical

    Android - Received VC's are deleted

    INJIMOB-714

    Critical

    Android - App crashes during the first launch

    INJIMOB-713

    Critical

    here
    eSignet 1.4.0
    here
    here
    Feature Documentation
    Integration Guides
    User Guide
    QA Report

    Inji- Occasionally, user is unable to share immediately

    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.

    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

    • Credential Offer

    • SD JWT VC download

    • SVG VC

    • 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's 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.

    Verified configuration

    Verification is performed on various configurations as mentioned below

    • Default configuration - with 1 Lang • 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 the simulation of multiple identity schema and respective UI schema configurations.

    Total

    Passed

    Failed

    Skipped (N/A)

    4068

    3659

    409

    0

    Test Rate: 100%  Pass Rate: 89.94%\

    Here is the detailed breakdown of metrics for each module:

    Platform

    Test Case Type

    Count

    On Android Device

    Total

    2118

    Passed

    1918

    Failed

    200

    Skipped (N/A)

    0

    API test rig results:

    Below are the test metrics for Mimoto API Test rig:

    Total

    Passed

    Failed

    Known Issue / Ignored

    316

    279

    0

    KI-4 and Ignored-33

    Test Rate: 88%  Pass Rate: 100%

    VC Verifier Library result:

    Below are the test metrics for VC Verifier:

    Total

    Passed

    Failed

    Known Issue / Ignored

    122

    85

    37

    0

    Test Rate: 100%  Pass Rate: 69.67%\

    Testing with various device combinations

    Below are the test metrics for performing the VC Sharing functionality on various device combinations

    Total

    Passed

    Failed

    Skipped

    240

    220

    20

    0

    Test Rate: 100% With Pass Rate: 91.66%

    Device and Component Details:

    Devices Used For Testing

    Vivo Y73 with Android 13 BLE 5.0

    SS Galaxy A03 core with Android 11 BLE 4.2

    iPhone 11 with iOS 18.3.2 BLE 5.0

    iPhone 7 with iphone 15.8 BLE 4.2

    Redmi 7A Android 10 BLE 4.2

    Redmi 6A Android 9 BLE 4.2

    Techno POVA 6 NEO - Android 14 BLE 5.0

    iTel - Android 14 BLE 5.0

    iPhone 14 - iOS 18.6.2 BLE 5.3

    OPPO A59 5G - Android 13 BLE 5.3

    ONE PLUS 12R - ANDROID 15 BLE 5.3

    \

    Tested with Inji components qa-inji1

    mosipqa/inji-verify-service:0.15.x

    mosipqa/inji-verify-ui:0.15.x

    mosipqa/inji-certify-with-plugins:0.12.x

    mosipqa/apitest-mimoto:0.19.x

    mosipqa/mimoto:develop

    mosipqa/inji-web:develop

    Tested with components - Released env

    mosipid/mimoto:0.19.0

    mosipid/apitest-mimoto:0.19.0

    mosipid/inji-certify-with-plugins:0.12.1

    mosipid/esignet-with-plugins:1.6.2

    Detailed Test Metrics

    Below are the detailed test metrics by performing manual 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

    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.

    Total
    Passed
    Failed
    Skipped (N/A)

    2118

    1975

    103

    40

    Test Rate: 98% With Pass Rate : 95%

    Here is the detailed breakdown of metrics for each module:

    Test cases

    On Android Device

    Total

    1112

    Passed

    1005

    Failed

    81

    Skipped (N/A)

    26

    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.

    Total
    Passed
    Failed
    Skipped

    1436

    1426

    6

    4

    Test Rate: 99.72% With Pass Rate: 99.30%

    Here is the detailed breakdown of metrics

    Test cases

    Mobile ID

    Total

    157

    Passed

    157

    Failed

    0

    Skipped

    0

    UI Automation results

    Below section provides details on Ui Automation by executing MOSIP functional automation Framework.

    Total
    Passed
    Failed
    Skipped

    162

    146

    16

    0

    Test Rate: 100% With Pass Rate: 90.12%

    Here is the detailed breakdown of metrics

    Test cases

    Android

    Total

    82

    Passed

    75

    Failed

    7

    Skipped

    0

    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

    Total
    Passed
    Failed
    Skipped

    213

    155

    61

    0

    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

    Github link for the xls file is here.

    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.

    Total

    Passed

    Failed

    Skipped

    1394

    1166

    176

    52

    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.

    Total

    Passed

    Failed

    Skipped

    1268

    1247

    17

    4

    Test Rate: 100% with Pass Rate: 98.34%

    Here is the detailed breakdown of metrics:

    Inji Wallet

    Total

    Passed

    Failed

    Skipped

    154

    152

    2

    0

    eSignet

    Total

    Passed

    Failed

    Skipped

    1114

    1095

    15

    4

    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.

    Total

    Passed

    Failed

    Skipped

    102

    61

    41

    0

    Here is the detailed breakdown of metrics:

    Android

    Total

    Passed

    Failed

    Skipped

    52

    36

    16

    0

    iOS

    Total

    Passed

    Failed

    Skipped

    50

    25

    25

    0

    Testing with various device combinations

    Below are the test metrics by performing VC Sharing functionality on various device combinations.

    Total

    Passed

    Failed

    Skipped

    152

    152

    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

    Link for the detailed test report.

  • 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

    Redmi devices are not supported for this release. To know more, refer to known issues in Redmi device.

    Bug Fixes

    1. The user will now be redirected to the MOSIP page successfully from the About INJI screen. Earlier the link was crashing the app. #INJI 225

    2. The user will be able to login into eSignet portal via QR code, using the VC activated on Home screen via. ellipsis menu. #INJI 253

    3. App will prompt and remove tampered VC. #INJI 397

    4. The user will be asked for language preference only at new installation. #

    5. Previously used UIN/VID will not be suggested in the AID field for VC download. #

    6. The user will be able to see the detailed view of Received VC. #

    7. The user will be redirected to an intermittent downloading screen, when download is triggered from OpenID supported issuer. #

    Documentation

    • Feature Documentation

    • Integration Guides

    • User Guide

    • QA Report

    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)

    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

    Link for the detailed test report.

    • 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

    Redmi devices are not supported in this release. To know more, refer here.

    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

    Documentation Details

    • Feature Documentation

    • Integration Guides

    • User Guide

    • QA Report

    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:

    • tuvali presents the kotlin library for tuvali

    • to get details on swift artifact.

    • contains the artefacts in maven.

    Installation:

    Usage as a Kotlin library (for native android)

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

    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.

    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

    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

    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

    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:

    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.

    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

    Version 0.20.0

    Release Name: Inji Mobile Wallet 0.20.0

    Release Type: Developer

    Release Date: 22nd October, 2025

    Overview

    This release of Inji Mobile Wallet v0.20.0 brings major advancements in OpenID4VP and SD-JWT interoperability, expanded SVG-based credential rendering, and numerous stability and compliance improvements across both Android (Kotlin) and iOS (Swift) platforms.

    With the inclusion of SD-JWT OpenID4VP support, trusted verifier enhancements, and SVG template integration using the inji-vc-renderer library, the wallet now provides greater flexibility and standards compliance for verifiable credential issuance, storage, and sharing.

    This release also includes critical bug fixes addressing verification issues, alignment inconsistencies, and multi-language display errors, ensuring a more seamless and reliable user experience.

    Key Highlights

    New Feature Additions

    • SD-JWT OpenID4VP Implementation

      • Added complete SD-JWT VP sharing for both Android (Kotlin) and iOS (Swift) platforms, which allows selective sharing of claims with the verifier.

      • Refer to the library folder to know more about this update.

      • Refer to the to know more about this feature

    Technical Enhancements

    OpenIDVP and Verifier Enhancements

    • Implemented OpenIDVP compliance with support for signed JWT–based authorization requests.

    • Introduced support for jwks_uri trusted verifier configurations for dynamic key resolution.

    • Added configuration to allow unsigned requests for pre-registered verifiers, useful for local or mock setups.

    • Enhanced verifier trust flow by enabling public key resolution using the

    Features Released

    Type
    Feature / Enhancement / Technical Upgrade
    Jira Link

    Repositories Released

    Module
    Version

    Compatible Modules

    Module
    Version

    Known Issues

    Below is the list of key known issues specific to this release. For all known issues, .

    Jira Issue
    Description

    Bug Fixes

    Below is the list of bug fixes as part of the release:

    Jira Issue
    Description

    Release Documentation

    Additional Resources

    • - Contains detailed explanations of all available features of Inji Mobile Waller and its usage.

    • - Provides step-by-step instructions to integrate Inji Mobile Wallet with an external system.

    • - Offers end-to-end guidance for end users on setup and daily usage.

    • - Includes comprehensive details of all APIs, endpoints, request/response formats, and examples.

    Test Report

    Testing Scope

    The scope of testing is to verify fitment to the specification from the perspective of

    • Functionality

    • Deployability

    Test Report

    Scope

    The scope of testing is to verify fitment to the specification from the perspective of:

    • Functionality

    * English
    * Arabic
    * Filipino
    * Hindi
    * Tamil
    * Kannada
    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-709
    INJIMOB-760
    INJIMOB-699
    INJIMOB-694
    INJIMOB-559
    INJIMOB-377
    INJIMOB-327
    INJI 362
    INJI 332
    INJI 329
    INJI 458
    API Documentation
    v0.10.0
    v0.10.0
    v0.4.7
    v0.10.0-INJI
    v0.1.4
    v1.2.0.1-B4

    INJIMOB-1604

    INJIMOB- In the face verification page the capture button overlaps with text

    INJIMOB-1603

    INJIMOB- During face authentication, the camera view is not opening in all IOS device

    INJIMOB-1530

    INJIMOB - IOS - "Share QR Code" is not working on iPhone 8.

    INJIMOB-1490

    INJIMOB - Backup is not triggering automatically when VC is removed.

    INJIMOB-1481

    INJI - logo of inji mobile stretched while booting the app

    INJIMOB-1265

    IOS -Specific devices the User not able to see the iCloud ID in iCloud setting section of backup and restore page.

    INJIMOB-1261

    INJI- Error message is not proper when invalid QR is scanned after changing language to other than English.

    INJIMOB-1259

    INJI - Backup & restore Name Is Different In Settings And in Backup & restore Page

    INJIMOB-1258

    INJI - Help Icon Language not Changing when we select other language that english

    INJIMOB-1256

    Backup and Restore heading Alignment is not proper in Backup& restore page

    INJIMOB-1255

    IOS - Associated app ID is missing in the Backup and restore page.

    INJIMOB-1252

    INJI- Sometimes VC activate the button and back button responses is very slow

    INJIMOB-1248

    INJI - Iderpo UINs are failing in VC verification

    INJIMOB-868

    INJI - Backup doesn't append the new data, but replaces the data

    INJIMOB-689

    Upon changing the finger authentication in the device, application does not display the error pop up for biometrics change

    API Documentation
    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
    Logo

    On iOS Device

    Total

    1950

    Passed

    1741

    Failed

    209

    Skipped (N/A)

    0

    Xiaomi RedMi NOTE 13 PRO - Android 15 BLE 5.2

    Infinix NOTE 50X 5G - ANDROID 15 BLE 5.4

    iPhone 13 - iOS 18.6.2 BLE 5.0

    mosipid/authentication-service:1.2.1.0

    mosipid/authentication-internal-service:1.2.1.0

    mosipid/authentication-otp-service:1.2.1.0

    mosipid/kernel-notification-service:1.2.0.1

    mosipid/registration-processor-stage-group-1:1.2.1.1

    On iOS Device

    Total

    1006

    Passed

    970

    Failed

    22

    Skipped (N/A)

    14

    eSignet

    Total

    1279

    Passed

    1269

    Failed

    6

    Skipped

    4

    iOS

    Total

    80

    Passed

    71

    Failed

    9

    Skipped

    0

    Add the artifact folder.

    Write with response to characteristic

  • Write without response to the characteristic

  • Send Notification from GATT Server

  • Disconnection from GATT Server/ Client

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

    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

  • 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

  • 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.

  • tuvali-ios-swift
    tuvali
    BLE Communication
    OpenID for VP over BLE Implementation
    Exception Message
        dependencies {
            implementation("io.mosip:tuvali:0.5.0-SNAPSHOT")
        }

    SVG Template Rendering Support

    • Introduced SVG-based VC rendering through integration of the inji-vc-renderer library in Kotlin and Swift.

    • Refer to the library docs folder to know more about this update.

    • Refer to the feature description to know more about this feature

    did:client-id-scheme
    method.
  • Improved public key resolution in iOS wallets using the verification method for better interoperability.

  • Feature

    SVG Template Rendering Support (Swift)

    vc-verifier

    mimoto

    inji-config

    The same device flow is not working for the preregistered reference QR code; displays 'Request could not be processed'. Resolved issue: INJIMOB-3554

    [Kotlin] Input Descriptor ID from presentation definition is not mapped properly with the presentation submission. Resolved issue: INJIMOB-3543

    VCVerifer - SD JWT - errorCode is not proper when invalid iss is shared. Resolved issue: INJIMOB-3535

    VCVerifer - SD JWT - without leaf cert and public key from x5c not receiving the errorCode. Resolved issue: INJIMOB-3530

    Enhancement: In the mock UI, layout does not fit properly in mobile view; alignment is incorrect. Resolved issue: INJIMOB-3492

    Enhancement: In the mock UI, the copy buttons are displayed inside the response. Resolved issue: INJIMOB-3491

    Enhancement: Include draft 21 QR code in mock UI along with draft 23 QR code. Resolved issue: INJIMOB-3490

    When VC activated - log from the history is not proper. Resolved issue: INJIMOB-3453

    Enhancement: OVP sharing payload fails to parse JSON when credentialSubject contains Arabic language VC. Resolved issue: INJIMOB-3385

    VC is not getting rendered when shared over BLE without internet. Resolved issue: INJIMOB-3205

    INJIMOB - After successfully downloading the MOSIP VC, closing and reopening the app shows a download error. Resolved issue: INJIMOB-3143

    INJIMOB - App crashes after sharing collab mock VC when VC receiver clicks out of successful popup. Resolved issue: INJIMOB-2998

    INJIMOB - iOS: After providing correct fingerprint for authentication, access to keys is not granted. Resolved issue: INJIMOB-2147

    INJI - Downloaded VC is stuck in loading state. Resolved issue: INJIMOB-384

    Inji - Alignment issue occurring in the APK. Resolved issue: INJIMOB-273

    Unable to download the Mock VC and land. Error message: 'Something went wrong. Please try again.' Resolved issue: INJICERT-1131

    Feature

    SD-JWT Support – OpenIDVP Library (Kotlin)

    INJIMOB-3513

    Feature

    SD-JWT Support – OpenIDVP Library (Swift)

    INJIMOB-3514

    Feature

    UI Implementation – SD-JWT OpenIDVP

    INJIMOB-3532

    Feature

    SVG Template Rendering Support (Kotlin)

    inji-wallet

    0.20.0

    inji-vc-renderer

    0.1.0

    inji-vc-renderer-ios-swift

    0.1.0

    inji-vci-client

    0.6.0

    inji-vci-client-ios-swift

    0.6.0

    inji-openid4vp

    0.5.0

    Inji Certify

    0.12.1

    Inji Verify

    0.14.0

    eSignet

    1.6.2

    INJIMOB-3530

    VCVerifer - SD JWT - without leaf cert and public key from x5c, not receiving the errorCode.

    INJIMOB-3526

    VCVerifer - SD JWT - without signature, not receiving the errorCode.

    INJIMOB-1530

    iOS - "Share QR Code" is not working on iPhone 8.

    MOSIP-41315

    INJIMOB UI - While running the UI automation, even after entering a valid OTP, it shows as invalid, causing a few test cases to fail.

    MOSIP-28935

    Inji Android - Samsung Galaxy A03 Core is not connecting with Vivo Y73. Resolved issue: MOSIP-28935

    INJIMOB-3591

    Unable to render VC if outer display is missing in well-known. Resolved issue: INJIMOB-3591

    INJIMOB-3590

    INJIMOBIL - After clicking the "+" icon, a "Something went wrong" error screen appears. Resolved issue: INJIMOB-3590

    INJIMOB-3584

    INJI-mobile - Unable to scan VP verification QR code with new Inji-mobile LSH build. Resolved issue: INJIMOB-3584

    INJIMOB-3567

    SVG - VC with face - not getting 'Share with Selfie' option. Resolved issue: INJIMOB-3567

    docs
    feature description
    click here
    0.20.0
    Feature Documentation
    QA Report
    Feature Documentation
    Integration Guides
    End User Guide
    API Documentation

    inji-openid4vp-ios-swift

    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.

    Total

    Passed

    Failed

    Skipped (N/A)

    2303

    2034

    226

    43

    Test Rate: 98% With Pass Rate: 90%

    Here is the detailed breakdown of metrics for each module:

    Test cases

    On Android Device

    Total

    1236

    Passed

    1085

    Failed

    124

    Skipped (N/A)

    27

    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.

    Total

    Passed

    Failed

    Skipped

    1335

    1275

    32

    28

    Test Rate: 97.9% With Pass Rate: 97.5%

    Here is the detailed breakdown of metrics

    Test cases

    Mobile ID

    Total

    63

    Passed

    61

    Failed

    2

    Skipped

    0

    UI Automation results

    Below section provides details on Ui Automation by executing MOSIP functional automation Framework.

    Total

    Passed

    Failed

    Skipped

    120

    107

    13

    0

    Test Rate: 100% With Pass Rate: 89.16%

    Here is the detailed breakdown of metrics

    Test cases

    Android

    Total

    63

    Passed

    54

    Failed

    9

    Skipped

    0

    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

    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

    Git hub link for the xls file is here.

    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

    Link for the detailed test report.

    OpenID4VP

    OpenID4VP - Online Sharing

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

    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. Validates the received Authorization Request to check if the required details are present or not, and then returns the Authorization Request to the consumer application once 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).

    Supported features

    Feature
    Supported values

    Android: Kotlin package for OpenID4VP:

    Repository

    • inji-openid4vp kotlin repo -

    Installation

    Snapshot builds are available .

    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.

    Parameters

    Name
    Type
    Description
    Sample

    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

    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.

    Parameters

    Name
    Type
    Description
    Sample

    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.

    Parameters

    Name
    Type
    Description
    Sample

    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.

    Parameters

    Name
    Type
    Description
    Sample

    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

    • inji-openid4vp-ios-swift swift repo ->

    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

    Parameters

    Name
    Type
    Description
    Sample

    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

    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.

    Parameters

    Name
    Type
    Description
    Sample

    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.

    Parameters

    Name
    Type
    Description
    Sample

    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.

    Parameters

    Name
    Type
    Description
    Sample

    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.

    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. Given a JSON and a Mapper(similar to ) are given, it maps the JSON with Mapper and then does the CBOR encode/decode.

    2. Integrate eSignet for Auth and Certify for credential issuance

    Repository Released

    Compatible Modules:

    The following table outlines the tested and certified compatibility of Inji Wallet 0.14.0 with other modules.

    Known Issues

    Below is the list of known issues. To read in detail and view all the issues related to Inji Verify please click .

    Note: Redmi devices are not supported in this release.

    Jira issue
    Issue description

    Bugs Fixes

    Below is the of fixes as part of the 0.14.0 release:

    Documentation Details

    Test Report

    Testing Scope

    The scope of testing is to verify fitment to the specification from the perspective of

    • Functionality

    • Deployability

    INJIMOB-3497
    INJIMOB-3499
    0.5.0
    1.5.0
    0.19.2
    0.11.1
    INJIMOB-3554
    INJIMOB-3543
    INJIMOB-3535
    INJIMOB-3530
    INJIMOB-3492
    INJIMOB-3491
    INJIMOB-3490
    INJIMOB-3453
    INJIMOB-3385
    INJIMOB-3205
    INJIMOB-3143
    INJIMOB-2998
    INJIMOB-2147
    INJIMOB-384
    INJIMOB-273
    INJICERT-1131

    On iOS Device

    Total

    1067

    Passed

    949

    Failed

    102

    Skipped (N/A)

    16

    eSignet

    Total

    1272

    Passed

    1214

    Failed

    30

    Skipped

    28

    iOS

    Total

    57

    Passed

    53

    Failed

    4

    Skipped

    0

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

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

  • 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.

  • Authorization Response type

    vp_token

    Supported Verifiable Presentations for Online sharing

    Credential format: ldp_vc and mso_mdoc

    both presentation_definition and presentation_definition_uri are present in Request

  • both presentation_definition and presentation_definition_uri are not present in Request

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

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

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

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

  • both presentation_definition and presentation_definition_uri are present in Request

  • both presentation_definition and presentation_definition_uri are not present in Request

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

  • InvalidInput exception is thrown if any of required params value is empty

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

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

  • Device flow

    cross device flow

    Client id scheme

    pre-registered, redirect_uri, did

    Signed authorization request verification algorithms

    ed25519

    Obtaining authorization request

    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 (reference)]

    Obtaining presentation definition in authorization request

    By value, By reference (via presentation_definition_uri)

    Authorization Response mode

    direct_post and direct_post.jwt

    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"))

    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"))

    vpResponseMetadata

    VPResponseMetadata

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

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

    exception

    Exception

    This contains the exception object

    new Exception("exception message")

    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

    credentialsMap

    [String: [String]]

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

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

    vpResponseMetadata

    VPResponseMetadata

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

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

    error

    Error

    Contains the exception object

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

    here
    here
    here

    true

  • Authorisation partner: eSignet

  • KBI plugin: eSignet

  • Credential Issuance: Certify

  • Draft 13 changes of OpenID4VCI spec - Compatibility of the credential issuance as per the latest draft of OpenID4VCI specification.

  • pixelpass

    pixelpass-ios-swift

    Inji-vci-client

    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

    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

    API Documentation

    Repositories

    Tags Released

    Inji-wallet

    v0.14.0

    Inji-vci-client-ios-swift

    v0.1.1

    Module

    Version

    Mimoto

    v0.14.0

    Inji-config

    v0.3.0

    eSignet

    v1.4.1

    Inji Verify

    v0.10.0

    tuvali

    v0.5.1

    tuvali-ios-swift

    v0.5.0

    Inji Wallet-1896

    Inji Wallet- After clicking the + icon, the screen flickers before landing on the 'Add New Card' screen

    Inji Wallet-1837

    The search box close button is not working unless invoked on a specific point

    Inji Wallet-1748

    Inji Wallet- Android - History timings could be more precise

    Inji Wallet-1745

    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-1744

    Inji Wallet- The error message of QR code login without an internet attempt should be revised

    Inji Wallet-1604

    Inji Wallet- On the face verification page the capture button overlaps with the text

    Jira issue

    Issue description

    Inji Wallet-886

    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-1410

    Inji Wallet - Unable to go back from the detailed view page

    Inji Wallet-1418

    Inji Wallet- VC verification is passing for missing attribute VC

    Inji Wallet-1422

    Inji Wallet- During face authentication, the camera view is wider than the face.

    Inji Wallet-1531

    Inji Wallet - IOS - The "Share QR Code" feature saves both the QR Code and a text file to files.

    Inji Wallet-1591

    Inji Wallet- Users are unable to upload the VC QR code shared via email and WhatsApp, or stored locally

    claim 169
    here
    list
    Feature Documentation
    Integration Guides
    User Guide
    QA Report

    secure-Keystore

    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:

    Feature Health

    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

    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.

    Version 0.17.0

    Release Name: Inji Mobile Wallet 0.17.0

    Release Type: Developer

    Release Date: 25th July, 2025

    Overview

    This release of Inji Mobile Wallet v0.17.0 introduces multiple improvements, feature completions, and critical bug fixes across iOS and Android platforms. The release focuses on enhancing OpenID4VP cross-device flow and new feature addition for OpenIDVP same-device flow, credential verification, offline sharing stability, UI accessibility, and backwards compatibility.

    Key Highlights

    These highlight the most important new features and user-facing improvements introduced in this release:

    • Cross-device OpenID4VP support (mDL / mDoc)

    • Same-device OpenID4VP support (mDL / mDoc) and W3C JSON-LD VC

    • Improved error handling in VC sharing and verification flows

    • Crash and UI fixes in credential download and sharing features

    Technical Improvements

    These represent backend, SDK, library-level, and protocol support enhancements to improve system performance, compatibility, and interoperability.

    • Wallet Metadata Support [Kotlin]: Wallet now responds with metadata during request_uri POST call, including supported algorithms, endpoints, and response types, improving OpenID4VP interoperability.

    • Enhancement for OpenIDVP Proof Verification Addressed issues in vp_token creation, including:

      • Empty holder field

      • Improper UUID usage in ID

    Features Released

    List of New Features
    Jira Link

    Repository Released

    Module
    Version

    Compatible Modules

    Module
    Version

    Known Issues

    Below is the list of known issues. To read in detail,

    Jira Issue
    Issue Description

    Bug Fixes

    Below is the list of fixes as part of the release:

    Jira Issue
    Description

    Deprecated

    N/A

    Documentation

    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

    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

    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

    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

    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

    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.

    Github link for the xls file is

    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.

    To know more about the GenderMag UI/UI changes in the Inji Wallet application, please refer.

    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.

    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 .

    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.

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

    Library

    QR Code Generation: PixelPass

    To read more about PixelPass library refer .

    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

    Redmi devices are not supported in this release. To know more, refer.

    Mentioned below is the list of other known issues.

    Jira issue
    Issue description

    Bug Fixes

    Below are the list of fixes as part of 0.12.0 release:

    Jira issue
    Severity
    Issue description

    Documentation

     val authenticationResponse = openID4VP.authenticateVerifier(urlEncodedAuthorizationRequest: String, trustedVerifierJSON: List<Verifier>)
        val vpTokenWithoutProof = openID4VP.constructVerifiablePresentation(verifiableCredentials: Map<String, List<String>>)
        val response = openID4VP.shareVerifiablePresentation(vpResponseMetadata: VPResponseMetadata)
     openID4VP.sendErrorToVerifier(exception: Exception)
        let response = try authenticateVerifier(urlEncodedAuthorizationRequest: String, trustedVerifierJSON: [Verifier])
        let response = try openID4VP.constructVerifiablePresentation(credentialsMap: [String: [String]])
        let response = try await openID4VP.shareVerifiablePresentation(vpResponseMetadata: VPResponseMetadata)
     openID4VP.sendErrorToVerifier(error: Error)
    v0.2.1
    v0.2.1
    v0.2.0
    v0.1.1
    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-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
    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

  • 3 Lang configuration

    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

  • 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

  • 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

  • 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

    here

    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

    iOS and Kotlin implementations now aligned with OpenIDVP Draft 21 and Draft 23 support

  • Secure and user-consent-backed VC sharing with improved selfie validation

  • VC Verifier SDK (ECC K1 – Kotlin): Kotlin artefact introduced for VC verification using ECC K1 keys, improving compatibility with OpenID ecosystems.

  • [Enhancement - PixelPass] Kotlin Multi-Platform (KMP) Support: Enables QR code generation using PixelPass across Android and iOS with a shared Kotlin module.

  • WLA Login via Deep Link on iOS: Allows users on the same mobile device to tap on a QR code and launch Inji Wallet directly, supporting seamless same-device login via deep linking.

  • Display Profile Image Only if Face is Present: Enhances user experience by showing the profile image only when the VC includes a valid biometric (face/photo), avoiding empty or placeholder images.

  • Addition of canonicalization

  • Support for direct_post.jwt (Kotlin & Swift): Both Android and iOS wallets now support JWT-based direct post in line with the OpenID VP spec.

  • Enhance VCI Client Library for W3C VC Data Model 1.1: Added support for broader claims structure in line with VC Data Model 1.1, enabling more diverse credential types.

  • Increased Test Coverage for PixelPass Module (>80%): Improves quality and stability of the QR generation logic, with extensive test coverage across supported scenarios.

  • OpenIDVP Backward Compatibility with Draft 21 [Swift]

    OpenIDVP Backward Compatibility with Draft 21 [Kotlin]

    QR Code Generation via PixelPass using Kotlin Multi-Platform

    Verification Support: VC Verifier SDK (ECC key - ECC K1)- Kotlin artefact

    After claim sharing, user is not redirected to health portal on iOS.

    Four negative test cases of wallet_binding fail due to IDA-MLC-009 – Invalid Input Parameter.

    App crashes intermittently when user flips the camera during QR scan.

    IDA UIN (created via automation) VC download fails with IDA-BIA-006 error.

    App crashes when flip camera button is pressed on scan screen.

    Sharing the MOSIP VC takes longer than expected.

    Intro slider overlaps with Backup & Restore page content.

    Intro slider alignment is incorrect on low-end devices.

    Unable to download mDL VC – 'Error Occurred' screen shown.

    Intermittent failure in downloading mDL VC.

    Consent Required screen breaks when client_id is too long.

    App crashes when sharing VC using 'Share with Selfie' option.

    iOS: QR code shows invalid when authorization_encrypted_response_alg is empty (works in Android).

    DID web URL parsing issue.

    Help page link leads to 'Page Not Found' error.

    Display property for claims is optional and not handled properly.

    VC verification failing due to incorrect data encoding.

    Downloaded VC files getting removed automatically intermittently.

    Display property in credential type is optional and not rendered correctly.

    Kannada/Tamil language: Intro slider heading gets cut off.

    Kannada/Tamil language: Intro slider content is missing.

    Invalid biometric input doesn't immediately show passcode fallback (appears after 3rd attempt).

    iOS: QR still scannable even when invalid response URL exists in mimoto-trusted-verifiers.json.

    QR scan succeeds even after removing ClientID from app.json.

    Clicking 'Download StayProtected Insurance' intermittently redirects to issuer homepage.

    StayProtected / Health Insurance downloads intermittently show 'An error occurred' screen.

    VC activity logs not updating when viewed from 'View Activity Log'.

    iOS: Online login failing with technical error.

    API Documentation

    Same Device Flow - OpenIDVP [Swift]

    INJIMOB-3190

    Same Device Flow - OpenIDVP [Kotlin]

    INJIMOB-3154

    mDoc OpenIDVP Support - Cross Device Flow [Kotlin]

    INJIMOB-3153

    mDoc OpenIDVP Support - Cross Device Flow [Swift]

    INJIMOB-3015

    Implement Draft 23 Changes for Verifiable Presentations [Kotlin]

    INJIMOB-3083

    Implement Draft 23 Changes for Verifiable Presentations [Swift]

    INJIMOB-2810

    inji-wallet

    0.17.0

    inji-openid4vp-ios-swift

    0.3.0

    inji-openid4vp

    0.3.0

    pixelpass

    0.7.0

    pixelpass-ios-swift

    0.6.2

    inji-vci-client

    0.3.0

    mimoto

    0.17.1

    inji-config

    0.8.0

    Inji Certify

    0.11.0

    esignet

    1.5.1

    Inji Verify

    v0.12.3

    vc-verifier

    1.3.0

    INJIMOB-3391

    New Wallet Nonce has to be created for each transaction.

    INJIMOB-3288

    VCVerifier – credentialStatus_Type is empty; expected error is not valid.

    INJIMOB-3285

    VCVerifier – credentialStatus_ID is empty; expected error is not valid.

    INJIMOB-3276

    VCVerifier – Optional field Evidence_ID is empty; expected error is not valid.

    INJIMOB-3274

    Setup error screen does not display 'Proceed' CTA when setup is incomplete – only 'OK' is shown.

    INJIMOB-3273

    Redirect not working in Firefox browser on iOS.

    INJIMOB-3370

    iOS - Application crashes when consent is declined and user clicks 'Yes, Proceed'.

    INJIMOB-3217

    App crashes during OVP QR code scan if only pre-registered client ID scheme is configured in wallet metadata.

    INJIMOB-3212

    In OVP flow, 'Share with Self' button disabled when photo is present in VC, while 'Share' is enabled.

    INJIMOB-3155

    Invalid VC gets downloaded if the well-known URL is incorrectly updated.

    INJIMOB-3139

    'publicKeyId' empty for DID scheme still allows VC sharing in iOS, expected error missing.

    INJIMOB-3138

    Removing well-known endpoint causes issuer VCs to remain stuck in loading state.

    click here
    0.17.0
    Feature Documentation
    Integration Guides
    User Guide
    QA Report

    inji-vci-client-ios-swift

    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

    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.

    API Documentation

    Repositories

    Tags Released

    Inji

    v0.12.0

    mimoto

    v0.12.0

    mosip-config

    v0.12.0

    INJIMOB-1265

    IOS -Specific devices the User not able to see the iCloud ID in iCloud setting section of backup and restore page.

    INJIMOB-1261

    INJI- Error message is not proper when invalid QR is scanned after changing language to other than English.

    INJIMOB-1259

    INJI - Backup & restore Name Is Different In Settings And in Backup & restore Page

    INJIMOB-1258

    INJI - Help Icon Language not Changing when we select other language that english

    INJIMOB-1256

    Backup and Restore heading Alignment is not proper in Backup& restore page

    INJIMOB-1255

    IOS - Associated app ID is missing in the Backup and restore page.

    INJIMOB-685

    Blocker

    inji - we are observing a download error message

    INJIMOB-946

    Critical

    Inji-Downloading error is observed when we were trying to restore VCs in a new device.

    INJIMOB-909

    Critical

    INJI- after deleting the backed up data it is not reflecting in the app

    INJIMOB-908

    Critical

    here
    here
    here
    here
    here
    Feature Documentation
    Integration Guides
    User Guide
    QA Report

    INJI - we are able to restore when there is no data to restore

    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.

    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.

    Repository Released

    Compatible Modules

    Known Issues

    Below is the list of issues. To read in detail click .

    Bug Fixes

    Below is the of fixes as part of the 0.15.0 release:

    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

    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.

    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:

    • To simplify the deployment process for Mimoto in local environment, a Docker Compose file is now available. Click to know more.

    Inji repo name change:

    The Inji repo is renamed to

    Steps to update local github configuration:

    Repository Released

    Compatible Modules:

    The following table outlines the tested and certified compatibility of Inji Wallet 0.13.0 with other modules.

    Module
    Version

    Known Issues

    Redmi devices are not supported in this release. To know more, refer .

    Mentioned below is the list of other known issues.

    Bug Fixes:

    The 0.13.0 release includes the following bug fixes:

    Jira Issue
    Issue Description
    Severity

    Documentation

    Features

    Inji Web Wallet is a browser-based, open-source digital wallet designed for secure download, verification, storage, and sharing of Verifiable Credentials (VCs). It supports OpenID4VCI, OpenID4VP, IETF SD-JWT, and W3C VC standards—no app install required.

    Multiple Credential Format Support

    Inji Wallet is designed for interoperability and flexibility by supporting a wide range of credential formats:

    • W3C Verifiable Credentials (JSON-LD VCs) Data Model 1.1

      • Standards-based credential format is widely adopted across ecosystems.

      • Suitable for general-purpose credential issuance and verification.

      • Supports OpenID4VP-based live presentation of JSON-LD VCs to any compliant verifier

    • ISO 18013-5 (mDL)

      • Mobile Driving License and Mobile Document specification.

      • Supports use cases like identity verification in transport, law enforcement, and service access.

    • IETF SD-JWT

      • IETF SD-JWT Verifiable Credentials: Enables holders to download and share credentials in IETF SD-JWT format. This allows users to share only the necessary attributes while keeping other data private, ensuring privacy-preserving credential sharing.

      • Allows users to share only the required claims with verifiers via the OpenIDVP flow, where these selectively disclosable claims can be shared as per the user's need. (Coming Soon in the upcoming release)

    This multi-format support allows Inji Wallet to work seamlessly across different ecosystems, ensuring compatibility, security, and user privacy.

    Login with Any Identity Provider (IdP)

    • Supports Google and other OpenID-compliant IdPs

    • Credentials are stored securely in the browser-based wallet after login, enabling access across sessions and devices, depending on the configuration.

    • Verifiable Credentials are now stored in the “Stored Cards” section.

    • You can view and download the credential as a PDF file locally on your system, or print it out once downloaded.

    Guest Mode (No Login Required)

    • Ideal for privacy-sensitive or public campaigns

    • Credentials are downloaded directly to the local device (not stored in the wallet)

    Credential Download Options

    • OpenID for VC Issuance: Interoperable with trusted issuers

    • Example Issuers:

      • Republic of Veridonia National ID Department - National ID

      • StayProtected Insurance - Insurance Credentials

    Verifying Credential Authenticity

    • Inji Web Wallet uses robust cryptography to verify that the VC is:

      • Digitally signed by a trusted issuer

      • Cryptographically valid based on its proof type

      • Tamper-evident and verifiable using Inji Verify or any compliant verifier

    Storage Options

    Type
    Description

    Credential Sharing Options

    Method
    Description
    Connectivity

    User Experience Highlights

    • Browser-based; no app installation needed

    • Clear distinction between wallet-stored and locally stored credentials

    • Guided flows and contextual help for all users

    Format
    Signature Algorithm
    Web Wallet (Login)
    Guest Mode (Without Login)
    Notes

    Features in the Pipeline

    • Selective Disclosure using SD-JWT via OpenIDVP Flow

    • Presentation During Issuance

    • Revocation Status

    • Support of mDoc/mDL VC format

    Read More

    • Feature Demo Video (Coming Soon)

    Setup

    Repositories

    Prerequisite

    Version 0.18.0

    Release Name: Inji Mobile Wallet 0.18.0

    Release Type: Developer

    Release Date: 19th Aug, 2025

    Overview

    This release of Inji Mobile Wallet v0.18.0 introduces the Credential Offer feature with Pre-Authorized Code flow, along with enhancements to the VCI client libraries, UI/UX refinements, and major bug fixes across Android and iOS.

    The release strengthens support for OpenID4VCI and OpenID4VP specifications

    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:

    Test Report

    Testing Scope

    The scope of testing is to verify fitment to the specification from the perspective of

    • Functionality

    • Deployability

    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:

    INJIMOB-3234
    INJIMOB-3233
    INJIMOB-2633
    INJIMOB-1699
    0.3.0
    INJIMOB-3272
    INJIMOB-3270
    INJIMOB-3262
    INJIMOB-3254
    INJIMOB-3213
    INJIMOB-3125
    INJIMOB-2976
    INJIMOB-2951
    INJIMOB-2944
    INJIMOB-2771
    INJIMOB-3129
    INJIMOB-3126
    INJIMOB-3124
    INJIMOB-3102
    INJIMOB-3080
    INJIMOB-3056
    INJIMOB-3055
    INJIMOB-3054
    INJIMOB-3027
    INJIMOB-2977
    INJIMOB-2974
    INJIMOB-2877
    INJIMOB-2845
    INJIMOB-2821
    INJIMOB-2776
    INJIMOB-2775
    INJIMOB-2575
    INJIMOB-2404
    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-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

    You can reset your passcode if you forget it during login. However, the option to change the passcode after logging in is currently not available.

    Republic of Veridonia Tax Department - Tax ID

  • AgroVeritas Property & Land Registry - Land Record

  • W3C JSON-LD

    RS256 (RSA with SHA-256)

    Supported

    Supported

    Backward compatibility; legacy systems

    W3C JSON-LD

    ECC K1

    Supported

    Supported

    Common in OpenID ecosystem

    W3C JSON-LD

    ECC R1

    Planned

    Planned

    Strong elliptic curve variant

    W3C Data Integrity 2.0

    RS256

    Planned

    Planned

    JWS with canonicalized digest

    W3C Data Integrity 2.0

    EdDSA (Ed25519)

    Planned

    Planned

    Based on JWS EdDSA

    W3C Data Integrity 2.0

    ES256K

    Planned

    Planned

    JWS-based signing with secp256k1

    W3C Data Integrity 2.0

    ES256

    Planned

    Planned

    Strong elliptic curve variant

    JWT VC

    RS256

    Planned

    Planned

    Planned under VC-JWT compliance

    JWT VC

    ES256K

    Planned

    Planned

    Awaiting certification

    JWT VC

    ES256

    Planned

    Planned

    Under consideration

    JWT VC

    x509 (PKI v3)

    Planned

    Planned

    Public key in JWT header; x509 cert chain planned

    SD-JWT VC

    RS256

    Supported

    Supported

    SD-JWT verification being integrated

    SD-JWT VC

    ES256K

    Supported

    Supported

    Selective Disclosure compatible

    SD-JWT VC

    ES256

    Planned

    Supported

    Strong elliptic curve variant

    SD-JWT VC

    EdDSA (Ed25519)

    Supported

    Supported

    Not yet supported in Certify (issuer side)

    SD-JWT VC

    x509 (PKI v3)

    In Progress

    In Progress

    Used for advanced SD-JWT scenarios

    mDoc / mDL

    RS256

    Planned

    Planned

    Used in mobile document ecosystems

    mDoc / mDL

    EdDSA(Ed25519)

    Planned

    Planned

    Widely used in mobile identity contexts

    mDoc / mDL

    ES256K

    Planned

    Planned

    Used in various driver license implementations

    mDoc / mDL

    ES256

    Planned

    Planned

    Emerging support for high-security mobile documents

    mDoc / mDL

    x509 (PKI v3)

    Planned

    Planned

    x509 certificate chain

    Web Wallet Storage

    Stored securely in the web wallet after login

    Local Storage (Guest)

    Downloaded PDF with embedded QR for offline use

    Scan PDF

    Scan PDF on verifier portal (Inji Verify)

    Online

    Print or Screenshot

    For physical presentation or screen scanning

    Offline

    Upload PDF

    Used in verifier workflows like Inji Verify

    Online

    OpenID4VP Presentation

    • Users can present JSON-LD VCs through an OpenID4VP-compliant flow.

    • Enables secure, real-time credential sharing with user consent.

    • Fully interoperable with Inji Verify and other compliant verifiers

    W3C JSON-LD

    ED25519 2018

    Supported

    Supported

    Compact, fast signatures with high security

    W3C JSON-LD

    ED25519 2020

    Supported

    Supported

    Enhanced key format with better structure

    Inji Web Wallet User Guide
    Feature Workflows

    Online

    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.

  • 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.

  • secure-keystore-ios-swift

    secure-keystore

    pixelpass-ios-swift

    pixelpass

    During face authentication, the camera view is not opening in all IOS device

    Automation run for sanity is failing few scenarios

    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

    API Documentation

    Module

    Version

    Inji Mobile Wallet

    v0.15.0

    mimoto

    v0.15.2

    vc-verifier

    v1.1.0

    inji-openid4vp-ios-swift

    v0.1.0

    inji-openid4vp

    v0.1.0

    inji-vci-client-ios-swift

    v0.2.0

    Module

    Version

    Inji-config

    0.5.0

    eSignet

    1.5.0

    Inji Certify

    0.10.1

    Inji Verify

    v0.10.0

    tuvali

    v0.5.1

    tuvali-ios-swift

    v0.5.0

    Jira Issue

    Issue Description

    INJIMOB-2901

    [OpenId4VP] QR data is base64 encoded

    INJIMOB-2907

    Invalid URL Format for OPENID4VP on Android 14 and above version

    INJIMOB-2521

    Search is not working for the VCs from home page

    INJIMOB-2241

    INJI- In the Credential Registry popup, when entering an invalid URL in the 'Edit Credential Registry' field, the error message is overlapping

    INJIMOB-2159

    The activation VC is not working for a second time on the same device; the same VC displays a technical error message.

    INJIMOB-1852

    After we removed the mandatory configuration for the Mock issuer is not showing the error message in UI

    Jira Issue

    Issue Description

    INJIMOB-2880

    Sunbird insurance VC download is failing with Ed25519 key

    INJIMOB-2778

    Automation(VC Verifier) - Verification of the mDL (mso_mdoc) against VC Verifier library is failing with no classFoundException

    INJIMOB-2576

    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

    INJIMOB-2572

    qa-inji1 - Issuer page is not loading

    INJIMOB-2549

    DL VC download is failing in qa-inji1

    INJIMOB-2548

    INJIMOB- We are unable to download the MOSIP VC using the RegClient UIN, as it shows an 'Invalid UIN' error

    known
    here
    list
    Feature Documentation
    Integration Guides
    User Guide
    QA Report

    inji-vci-client

    Tuvali
  • UUID changes for verifier services in tuvali

  • Secure-keystore changes (credential request keypair change from RSA-4096 to RSA-2048 bits)

  • The VCI client library handles credential requests from issuance, provided it has the accessToken, proof, and issuer metadata.

    pixelpass-ios-swift

    inji-vci-client

    inji-vci-client-ios-swift

    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

    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

    API Documentation

    Repositories

    Tags Released

    inji-wallet

    v0.13.0

    mimoto

    v0.13.1

    inji-config

    v0.1.2

    tuvali

    v0.5.0

    tuvali-ios-swift

    v0.5.0

    secure-keystore

    v0.2.0

    Mimoto

    0.13.1

    eSignet

    1.4.0

    Inji Verify

    0.9.0

    Jira Issue

    Description

    INJIMOB-1603

    INJIMOB- During face authentication, the camera view is not opening in all IOS device

    INJIMOB-1600

    INJIMOB- In Android when the user clicks + icon from home page issuer page is not getting loaded

    INJIMOB-1591

    INJIMOB- Users are unable to upload the VC QR code shared via email and WhatsApp, or stored locally

    INJIMOB-1574

    INJI - unable to scroll the page add new card page

    INJIMOB-1530

    INJIMOB - IOS - "Share QR Code" is not working on iPhone 8.

    INJIMOB-1503

    INJIMOB - IOS - The buttons in the INJI tour guide are not properly aligned.

    INJIMOB-1552

    INJIVER- The user is unable to upload the VC QR code shared via email and WhatsApp

    Critical

    INJIMOB-1551

    INJIVER-The user is unable to scan the QR code when it is stored locally

    Critical

    INJIMOB-1550

    INJIVER-The user is unable to scan the VC QR code shared via email and WhatsApp

    Critical

    INJIMOB-1537

    INJIMOB - IOS - The "Share with Selfie" is causing the app to crash after face verification.

    here
    inji-wallet
    here
    Feature Documentation
    Integration Guides
    User Guide
    QA Report

    pixelpass

    Critical

    Gradle

  • Java 17

  • Expo

  • Android SDK

  • Node

  • XCode for iOS development

  • 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)

    Step 2:

    Configure Yarn

    Step 3:

    Configure Gradle & Java

    Step 4:

    Configure Expo, refer here.

    Step 5:

    Configure Android SDK, refer here.

    Configure environment variables in your ~/.zshrc / or ~/.bashrc (depending upon your shell)

    Step 6:

    Generate debug keystore for building debug build.

    Export keystore

    1b. Installation and Keystore generation on Windows

    Step 1:

    • Install Git

    • Use the below link to download git

    • After installation, run Git as admin.

    Step 2:

    • Install SDKMAN

    • Use the below command in Git terminal

    • 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. To address this, please visit the website.

    3. 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.

    4. Finally, rerun the SDKMan installation script.

    Step 3:

    • Install gradle

    • Use the command below in Git terminal.

    • To check the installed gradle version.

    gradle -V

    Step 4:

    • Install Java JDK, refer here.

    Step 5:

    • Install expo

    Step 6:

    • Install Android SDK, refer here.

    Step 7:

    • Install Node, refer here.

    Step 8:

    • Install nvm

    or

    update the nvm version

    Step 9:

    Install adb

    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:

    • 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:

    • Update mimoto url as https://api.collab.mosip.net here

    • Update esignet host as https://esignet.collab.mosip.net here

    • To deploy mimoto in local refer here

    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,

    • 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

    GCP API Library

    Search for Google drive API and Select Google Drive API from the list.

    Then enable the API.

    GCP Drive API Enable

    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

    GCP Create Client ID

    Click on CREATE CREDENTIALS and choose OAuth client ID

    GCP Create Client ID

    Choose Appliation type as Android

    GCP Create Client ID

    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.

    Internal testers

    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

    img.png
    img.png
    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.

    img.png
    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.

    img.png
    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.

    img.png
    1. To deploy the Android build to PlayConsole, select Android Custom Build workflow from github actions.

    img.png
    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:

    Follow the Steps to configure Node & npm, Expo and generate debug keystore

    Step 2:

    Configure XCode, refer here.

    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

    • Run Metro bundler in the background

    • Run Inji directly to a connected device Command to run on simulator

    Command to run real 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.

    Testflight testers

    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.

    img.png

    Upload in TestFlight

    img.png
    img.png
    1. Login to TestFlight and check for the build upload status. Once the build is uploaded successfully, add Groups to provide access to testers.

    img.png
    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.

    img.png
    1. To deploy the iOS build to testflight, select Inji iOS build workflow from github actions.

    img.png
    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.

    img.png
    , improves interoperability, and enhances stability and accessibility.

    Key Highlights

    • Credential Offer with Pre-Authorized Code Flow

      • Scan and redeem credential offers for pre-authorized VC downloads directly into the wallet.

      • Supported both with and without a transaction code.

      • Backend & frontend implementation for Android (Kotlin) and iOS (Swift).

    • Library Enhancements & Upgrades

      • Upgraded VCI Client Libraries (Kotlin & Swift) with Credential Offer + VC Data Model 1.1 extensions.

      • Error handling aligned with OpenID4VP specification.

      • Singleton pattern for VCI Client & OVP Library instances.

    • UI/UX Improvements

      • Error response handling and fallback logic for JSON-LD VC & mDoc when well-known metadata is missing.

      • Enhanced audit logs, transaction code display, and photo rendering in VCs.

      • Reference UI flows for credential offer with/without transaction code.

    Technical Improvements

    • Backend support for Credential Offer (Swift & Kotlin).

    • VC rendering fallback logic for mDoc & JSON-LD when issuer metadata is unavailable.

    • Wallet nonce generation per transaction for stronger security.

    • Trusted issuer list maintained within the wallet.

    • Multiple crash/stability fixes in iOS same-device flow, OVP scans, VC sharing.

    • Interoperability improvements for OpenID4VCI & OpenID4VP compliance.

    Features

    New Feature
    Jira Link

    Credential Offer Support – Pre-Authorized Code Flow

    Technical Enhancements

    Enhancement
    Jira Link

    Enhance VCI Client Library (Kotlin)

    Enhance VCI Client Library (Swift)

    Error Response Handling – OpenIDVP (Kotlin)

    Error Response Handling – OpenIDVP (Swift)

    VC Display Fallback for JSON-LD VC

    VC Display Fallback for mDoc

    Repositories Released

    Module
    Version

    inji-wallet

    inji-openid4vp-ios-swift

    inji-openid4vp

    inji-vci-client

    inji-vci-client-ios-swift

    pixelpass-ios-swift

    Compatible Modules

    Module
    Version

    mimoto

    inji-config

    Inji Certify

    Inji Verify

    eSignet

    vc-verifier

    Known Issues

    Below is the list of known issues. To read in detail, click here

    Jira Issue
    Description

    In the search bar, search for “mock” and select the mock identity issue. The first attempt is not clickable; it becomes clickable only on the second attempt.

    In the mock UI, the copy buttons are displayed inside the response.

    In the mock UI, we currently have only the draft 23 QR code. It would be better to also include the draft 21 QR code, as it would help the user.

    In the mock UI, only the download button is highlighted, while the other buttons are not.

    Add the decoded payload for all schemas, as it is difficult for users to read.

    Add a description for each API schema on the home screen.

    Bug Fixes

    Below is the list of bug fixes as part of the 0.18.0 release:

    Jira Issue
    Description

    When internet is turned off, the back button gets stuck in the loading state.

    Same device flow for both Pre-Registered and By Reference shows: “Request can't be processed.”

    Android – After activating VC via Health Portal QR code, error “There is no bound card available to verify.”

    iOS – Initial screen does not appear after fresh install.

    Unable to take a backup despite VC being downloaded.

    iOS – App crashes after tapping OVP QR → declining consent → selecting “Yes, proceed.”

    Documentation

    • Feature Documentation

    • Integration Guides

    • User Guide

    • QA Report

    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.

    • client_id_scheme supported and for more details link with Readme of 0.2.x branch .

    Features Released

    List of New Features

    Jira Links

    Multiple client IDs (Swift)

    Support for Multiple Client ID Schemes in OpenID4VP Flow for Swif

    Multiple client IDs (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

    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

    Known Issues

    Below is the list of known issues. To read in detail click here..

    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.

    Bug Fixes

    Below is the list of fixes as part of the 0.16.0 release:

    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.

    Deprecated

    N/A

    Documentation

    • Feature Documentation

    • Integration Guides

    • User Guide

    • QA Report

    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

    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

    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

    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

  • 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.

    • Efforts have been made to improve the security of data in the default file located in the mmkv folder under the INJI-467 task.

    Bug fixes

    Functional Fixes

    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.

    App Crash

    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.

    BLE issues

    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.

    Face Authentication

    Issue ID

    Description

    The app couldn't recognize resident face when there are changes.

    UX issues

    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.

    UI issues

    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.

    Repository Released

    Repositories

    Tags Released

    Inji

    config

    Documentation

    • Feature Documentation

    • User Guide

    • QA Report

    • To know more about Inji, watch the video!

      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.
    brew install nvm
    
    nvm install 16.19.0
    
    nvm use 16.19.0
    brew install yarn
    curl -s "https://get.sdkman.io" | bash
    
    sdk install gradle 7.5.1
    
    sdk install java 17.0.13-amzn
    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"
    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 DEBUG_KEYSTORE_ALIAS=androiddebugkey
    
    export DEBUG_KEYSTORE_PASSWORD=android
    https://git-scm.com/download/win
    curl -s "<https://get.sdkman.io>" | bash
    sdk install gradle 7.5.1
    [!TIP]
    Restart system
    npm install --global expo-cli
    curl -o- <https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh> | bash
    wget -qO- <https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh> | bash
    nvm install 16.19.0
    nvm use 16.19.0
    https://sourceforge.net/projects/quickadb/
    sdk.dir = <location-of-the-android-sdk>
    **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.
    npm install
    npx pod-install
    npm start
    npm run ios
    npm run ios -- --device
    v0.2.0
    v0.3.0
    v0.3.0
    v0.6.0
    v0.6.0
    INJIMOB-1603
    INJIMOB-1336
    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
    v0.2.0
    v0.2.0
    v0.1.0
    v0.1.0
    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-1418
    INJIMOB-1403
    INJIMOB-1240
    INJIMOB-1192
    INJIMOB-323

    Trusted Issuer List Management in Wallet

    INJIMOB-3346

    INJIMOB-3486

    In the OVP flow, if the user sets limit_disclosure to an invalid value and then scans the QR code for 'By Reference', the DID does not display the message 'Problem with response'.

    INJIMOB-3483

    Android – Mock VC download is failing in v1 issuer. It shows an "An error occurred" screen.

    INJIMOB-3480

    iOS – The application crashes after scanning the QR code when the optional field client_metadata is removed from the authorization request.

    INJIMOB-3479

    App idle 1 minute share VC and BLE transfer time in share with selfie in verifier end showing Bluetooth connection lost issue.

    INJIMOB-3477

    MOSIP VC not getting loaded on home page when downloaded from release issuer.

    INJIMOB-3476

    Credential Offer – Error message is not proper for invalid transaction code scenario.

    INJIMOB-3475

    Credential Offer – iOS alignment is not proper from scan and download option when language changed to Kannada on iPhone 13.

    INJIMOB-3470

    History is not getting logged properly when a single quote is added in the name from display.

    INJIMOB-3469

    Info icon is not coming for other languages than English on ID details view page.

    INJIMOB-3468

    iOS – 'National Identity Department' issuer name and description is not showing properly for other languages when internet is off.

    INJIMOB-3467

    App idle 1 minute share VC and BLE transfer time in share with selfie in verifier end showing Bluetooth connection lost issue.

    INJIMOB-3466

    Credential Offer – Android VC is not getting verified post backup and restore.

    INJIMOB-3464

    iOS – After pinning the VC (MOSIP ID) and attempting to share with 'Share with Selfie' with an invalid face, the error screen buttons ("Retry" and "Home") are unresponsive.

    INJIMOB-3458

    After successfully sharing the VC, the address field in ID de

    INJIMOB-3435

    iOS – App crashes after tapping OVP QR and unlocking, showing “Oops, an error occurred.”

    INJIMOB-3434

    iOS – App crashes after tapping OVP QR and unlocking with error “Oops, an error occurred.”

    INJIMOB-3432

    iOS – App crashes after tapping OVP QR and clicking the “close” icon.

    INJIMOB-3430

    iOS – App crashes after scanning OVP QR and clicking “Reject.”

    INJIMOB-3429

    Exposed ngRok API URL not providing QR codes with latest mock-services.

    INJIMOB-3428

    Unable to install applications from TestFlight.

    INJIMOB-3427

    Issuer list cached but not shown offline on second attempt.

    INJIMOB-3423

    During OVP Health VC sharing, response time has increased compared to earlier.

    INJIMOB-3422

    Inji Verify – Unable to download Sunbird VC; error screen shown.

    INJIMOB-3414

    OpenIDVP – Error for unsupported key types.

    INJIMOB-3413

    c_nonce expected outside access token as per OpenIDVCI specification.

    INJIMOB-3410

    After sharing MOSIP IDA VC, receiver device shows duplicate photos.

    INJIMOB-3405

    Credential Offer – Missing space after full stop in message text.

    INJIMOB-3403

    Credential Offer – iOS crash after initial VC download fails then retry with valid auth.

    INJIMOB-3402

    Credential Offer – Wrong redirect when retrying VC download after invalid OTP.

    INJIMOB-3401

    Credential Offer – Audit log not updated when app is reopened.

    INJIMOB-3400

    Credential Offer – “Try Again” button not working on No Internet page.

    INJIMOB-3398

    Credential Offer – Transaction Code UI misaligned; “Show More” option unnecessary.

    INJIMOB-3391

    New wallet nonce not created for each transaction.

    INJIMOB-3389

    VCI Client & OVP Library should be singleton in Wallet.

    INJIMOB-3370

    iOS – App crashes when consent is declined and user clicks “Yes, Proceed.”

    INJIMOB-3316

    Unable to download Sunbird VC – “Something went wrong” screen.

    INJIMOB-3314

    OVP – Only pre-registered scheme configured, but all schemes still working.

    INJIMOB-3141

    OVP – Inconsistent error messages for invalid client_id between Android and iOS.

    INJIMOB-3137

    OVP – Inconsistent error messages for invalid didDocumentUrl between Android and iOS.

    INJIMOB-3122

    OVP iOS – Requester name not displayed properly.

    INJIMOB-2900

    VP sharing not working even with valid response URI.

    INJIMOB-2018

    After VC download, green toaster confirmation not displayed on home screen.

    API Documentation
    INJIMOB-3419
    INJIMOB-3187
    INJIMOB-3206
    INJIMOB-3191
    INJIMOB-3192
    INJIMOB-3349
    INJIMOB-3352
    0.18.0
    0.4.0
    0.4.0
    0.4.0
    0.4.0
    0.6.3
    0.18.1
    0.9.1
    0.11.0
    0.13.1
    1.5.1
    1.3.0
    INJIMOB-3498
    INJIMOB-3491
    INJIMOB-3490
    INJIMOB-3489
    INJIMOB-3488
    INJIMOB-3487
    INJIMOB-3465
    INJIMOB-3452
    INJIMOB-3440
    INJIMOB-3439
    INJIMOB-3438
    INJIMOB-3437

    Added signature format

    Use ED25519-2020 key to generate VP proof

    INJIMOB-2550

    Auto-fetch wallet config

    Well-known discovery at Inji Mobile to fetch well-known response

    INJIMOB-2452

    secure-keystore-ios-swift

    0.3.0

    inji-vci-client

    0.2.0

    tuvali-ios-swift

    0.5.0

    inji-vci-client-ios-swift

    0.2.1

    pixelpass-ios-swift

    0.6.1

    vc-verifier

    1.2.0

    INJIMOB-1603

    During face authentication, the camera view is not opening in all IOS device.

    INJIMOB-1336

    Automation run for sanity is failing few scenarios.

    INJIMOB-2525

    The Help icon should be consistent across all pages.

    INJIMOB-2524

    Intermittent download errors occur, causing the application to become unusable.

    INJIMOB-2522

    After performing backup and restore, and then removing a VC, the actual count of VCs and the VCs present in the wallet are mismatched.

    INJIMOB-2462

    Error screen CTAs not working in VC download flow.

    INJIMOB-2450

    Injimobile - The download VC is stuck in a loading state.

    INJIMOB-2324

    Intermediately We are unable to download the mock mdl VC; an error message appears.

    INJIMOB-2311

    We are unable to download the mosip VC; an error message appears.

    INJIMOB-2310

    IOS - when biometric is cancelled multiple times during app launch the app data is deleted.

    NJIMOB-2264

    Online login is failing with inji app crash from device.

    INJIMOB-2252

    INJI - After providing biometric authentication, if the user clicks the cancel button, they should not be allowed to successfully download the VC.

    INJIMOB-2228

    Inji- We are unable to download the VC via MOSIP ID due to an error message stating 'Failed to send OTP.

    INJIMOB-2227

    Inji- The link from the help page leads to a 'Page Not Found' error when clicked.

    INJIMOB-2214

    INJI- Intermittently, we are unable to download Sunbird as a 'Something went wrong' screen is being displayed.

    INJIMOB-2146

    In INJI Mobile app, the issue type fails to load after selecting an issuer on Android and iOS devices.

    INJIMOB-2122

    INJIMOB - Along with Insurance certify VC, an extra mock VC is getting downloaded.

    INJIMOB-2120

    INJIMOB - Mock certify and mock fallback VC downloaded background color not reflecting, Only after close and reopen app it is reflecting.

    INJIMOB-2098

    INJIMOB - About inji detail is different from IOS to android.

    INJIMOB-2048

    Biometrics Toggle stop working after Inji tour guide is dismissed.

    INJIMOB-2042

    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-1956

    INJIMOB- intermediately , the QR login is not working. We are encountering an error message.

    INJIMOB-1910

    In the INJI 0.12x version, issues with downloading their UIN cards.

    INJIMOB-1894

    User is getting a 'Technical error' message on the first attempt to download the VC after restarting the certify pod.

    INJIMOB-1856

    Injimobile- After we removed the mandatory configuration for the Mock, issuer is not showing the error message in UI.

    INJIMOB-1837

    Search box close button is not working unless invoked on a specific point.

    inji-openid4vp/README.md at release-0.2.x · mosip/inji-openid4vp
    API Documentation
    INJIMOB-2325
    INJIMOB-2491
    INJIMOB-2337
    INJIMOB-2761
    INJIMOB-2471
    0.16.0
    v0.2.0
    v0.2.0
    v0.5.2
    0.17.0
    0.7.0
    1.4.1
    0.10.1
    0.6.0
    0.3.0
    INJIMOB-2901
    INJIMOB-2907
    INJIMOB-2521
    INJIMOB-2241
    INJIMOB-2159
    INJIMOB-1852
    INJIMOB-2880
    INJIMOB-2778
    INJIMOB-2576
    INJIMOB-2572
    INJIMOB-2549
    INJIMOB-2548

    INJI-332

    UIN of previously downloaded VC is wrongly pre-filled in AID screen.

    INJI-295

    VC sharing is failing intermittently on Android.

    INJI-262

    Pinned VC's audit logs are missing.

    INJI-259

    The back button is not working on few places of the app.

    INJI-223

    While sharing the VC, if we click on scan icon, application displays the camera.

    INJI-300

    The successful QR code login audit is not matching the wireframe.

    INJI-261

    There are few elements still in color, orange in the purple theme.

    INJI-260

    The app is not aligned properly with the smaller display phone.

    INJI-618

    Share button is not aligned properly in iOS and Android.

    INJI-545

    "It is necessary" text in consent screen is getting overlapped with page slider in smaller devices.

    INJI-492

    Try again button is not aligned properly upon change language to Tamil (when no internet connection).

    INJI-479

    Intermittent: Getting double toaster message on home screen.

    INJI-446

    Capture button text is not getting displayed completely.

    INJI-445

    In the connecting page user is getting some orange color box.

    INJI-388

    The error pop-up is not user friendly and not matching the UI.

    INJI-324

    The Download pop-up should stay longer.

    INJI-322

    Time stamp should be removed in OTP screen once it is expired.

    INJI-556
    INJI-555
    INJI-474
    INJI-590
    INJI-363
    INJI-362
    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-593
    INJI-494
    INJI-478
    INJI-440
    INJI-427
    INJI-329
    Inji Developer Preview Release2- vDP2
    Release vDP2

    On iOS Device

    Total

    1146

    Passed

    1034

    Failed

    97

    Skipped (N/A)

    15

    iOS

    Total

    48

    Passed

    48

    Failed

    0

    Skipped

    0

    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

    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. To install the Inji Wallet app on an Android smartphone, click to get the Inji Wallet apk file for installation.

    2. Transfer the apk file onto the smartphone on which it is to be installed.

    3. Click on the apk file and follow the OS installation instructions.

    On iOS device

    1. Install the test flight app on your device.

    2. Follow the steps mentioned .

    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.

    Download of Verifiable Credentials

    Inji Wallet supports VC downloads using eSignet as the authorization layer. Some of the available use-cases include:

    • Download National ID (MOSIP VC)

    • Download Insurance VC

    • And many more use-cases available to explore via eSignet!

    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.

    Download Credential by Scanning a QR Code (Credential Offer with Pre-Auth Code)

    This flow allows you to download credentials simply by scanning a QR code, without login or manual input of ID/Identifier or other data.

    1. Pre-Authorized Credential Offer (Without Transaction Code)

    Used in public campaigns or mass rollouts (e.g., vaccine certificates, land cards).

    1. On the issuer’s website, or from a flyer/poster, scan the QR code using the Scan & Download option available in Inji Wallet.

    2. Click on the "+" (Add Credential) icon.

    1. Select the first option: Scan & Download.

    1. Scan the QR code from the issuer's website or printed material.

    1. If this is your first time interacting with the issuer, a trust screen will appear asking you to trust the issuer.

    2. You can proceed to trust and add the issuer to your trusted list or decline as per your preference. This prompt appears only once per issuer.

      • If you Decline, the download will not proceed further.

    1. The wallet recognizes the embedded credential offer, without needing to log in or enter any data, your credential starts downloading.

    2. You’ll see a success message and the VC will appear in your wallet.

    B. Pre-Authorized Credential Offer (With Transaction Code)

    Used for personalized and secure issuance (e.g., mDL, insurance).

    1. On the issuer’s website, or from a flyer/poster, scan the QR code using the Scan & Download option available in Inji Wallet.

    2. Click on the "+" (Add Credential) icon.

    1. Select the first option: Scan & Download.

    1. Scan the QR code from the issuer's website or printed material.

    1. If this is your first time interacting with the issuer, a trust screen will appear asking you to trust the issuer.

    1. You can proceed to trust and add the issuer to your trusted list or decline as per your preference. This prompt appears only once per issuer.

      • If you Decline, the download will not proceed further.

      • If you Allow, the download will proceed further.

    1. After entering the code, the wallet retrieves the credential securely.

    1. The wallet recognizes the embedded credential offer, Without needing to log in or enter any data, your credential starts downloading.

    2. You’ll see a success message and the VC will appear in your wallet.

    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 (...).

    Credential Sharing Methods

    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.

    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.

    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.

    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.

    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.

    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.

    Verifiable Credential Sharing & Presentation via OpenID4VP

    Note: Screenshots will be added soon to enhance the user experience and better explain the steps shown below.

    Inji Wallet supports two primary modes of sharing Verifiable Credentials (VCs) using the OpenID4VP protocol:

    • Same-Device Flow, where the wallet and verifier are accessed from the same mobile device.

    • Cross-Device Flow, where the wallet and verifier operate on separate devices.

    Both flows support standard JSON-LD VCs, mDL (ISO 18013-5), and IETF SD-JWT credentials for full or non-selective disclosure sharing. For privacy-preserving selective disclosure, the SD-JWT VP flow is followed, as described below.

    Cross-Device Flow (OpenID4VP)

    This method is used when the Inji Wallet is on a mobile phone, and the verifier (such as a service provider portal, kiosk, or scanner) operates on a different device (e.g., laptop or tablet).

    Steps to Present Credentials:

    1. Verifier generates a QR code on their system/portal requesting specific credentials.

    2. On your Inji Wallet, tap the QR scanner icon from the home screen or use the “Share” option.

    3. Scan the QR code displayed by the verifier.

    4. The wallet reads the verifier’s request and shows you a list of matching credentials

    Same-Device Flow (OpenID4VP)

    This method is useful when you’re accessing a portal from the same mobile device that has the Inji Wallet installed.

    Steps to Present Credentials:

    1. On your phone browser, visit the service portal that is requesting your credentials.

    2. Tap on the “QR Code” or similar button.

    3. This opens a deep link that launches your Inji Wallet app automatically.

    4. The wallet fetches the verifier’s request.

    Selective Disclosure Flow (IETF SD-JWT VP)

    This method allows users to share only specific claims from an IETF SD-JWT credential, ensuring privacy-preserving and minimal disclosure of information.

    Steps to Present Credentials with SD-JWT VP:

    1. Access the verifier’s portal or service (same-device or cross-device).

    2. Initiate the credential request using the OpenID4VP flow.

    3. The verifier specifies required claims (e.g., Name, Date of Birth).

    4. The Inji Wallet parses the SD-JWT credential

    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.

    Restore - Android

    Restore - ios

    GitHub - mosip/inji-walletGitHub

    If you Allow, the download will proceed further.

    You will be prompted to enter a Transaction Code / OTP provided by the issuer via SMS or Email.

    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.

  • 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.

    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.

    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.

    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.

    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.

    .
  • You are prompted for face authentication.

  • Choose the credentials you want to share.

  • Tap “Share” to proceed. The wallet sends the Verifiable Presentation (VP) to the verifier securely.

  • You’ll see a confirmation message once the sharing is complete.

  • A list of matching credentials is displayed.

  • You will be asked for face authentication.

  • Choose the credentials to be shared.

  • Tap “Share”.

  • You are automatically redirected back to the service portal (Android).

    • On iOS, you may need to manually switch back to the browser.

  • and identifies which claims can be selectively disclosed.
  • The wallet displays:

    • The verifier’s details and request information.

    • A list of available claims within the SD-JWT credential.

  • The user can select only the claims they wish to share.

  • The wallet generates a Verifiable Presentation (VP) containing only the selected claims.

  • You are prompted for authentication (Face) if VC contains a face photo.

  • Upon confirmation, the SD-JWT VP is securely shared with the verifier.

  • A success message confirms completion of the privacy-preserving sharing process.

  • Users will be notified of success or failure.

    here
    here
    Installation of Inji Wallet on iOS mobile device
    Installation of Inji Wallet on iOS mobile device
    image
    image
    image
    image
    image
    image
    image
    Pinning a VC
    Pinning a VC
    Pinning a VC

    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

    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:

    Test cases

    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)

    Component Name
    Version/Branch

    Tested with Components - Released Environment

    Component Name
    Version/Branch

    Devices Used For Testing

    Device Name
    Operating System
    BLE Version

    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.

    Github link for the xls file is

    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

  • On iOS Device

    Total

    1488

    Passed

    1317

    Failed

    171

    Skipped (N/A)

    0

    Total

    58

    Passed

    58

    Failed

    0

    Skipped

    0

    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

    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

    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

    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

    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

    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

    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

    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

    here

    iOS

    BLE 5.0

    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.

    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.

    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.

    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
    AuthorizationstringRequired
    Logo
  • 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
    /linked-authorization/v2/link-transaction
    200

    OK

    Validates linkedTransactionId.

  • Validates null / empty individualId.

  • Invokes kyc-auth call to integrated authentication server (IDA).

  • Relays error from integrated authentication server to UI on failure.

  • 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
    /linked-authorization/v2/authenticate
    200

    OK

  • Validate accepted claims and permitted scopes in the request and the signature.

  • 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
    /linked-authorization/v2/consent
    200

    OK

    Access token received from /token endpoint

    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
    /vci/credential
    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"
      }
    }
    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>"
      }
    }
    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"
      }
    }
    {
      "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
    }
    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"
          }
        ]
      }
    }
    {
      "responseTime": "2023-09-22T08:01:13.000Z",
      "response": {
        "linkedTransactionId": "qwert_yt46_hX0xlBJNExl9cnYtL8kGvcbf555",
        "consentAction": "CAPTURE"
      },
      "errors": []
    }
    {
      "responseTime": "2023-09-22T08:01:14.000Z",
      "response": {
        "linkedTransactionId": "qwert_yt46_hX0xlBJNExl9cnYtL8kGvcbf555"
      },
      "errors": []
    }
    {
      "format": "ldp_vc",
      "credential": {
        "issuanceDate": "2023-10-30T06:17:28.025Z",
        "credentialSubject": {
          "gender": "Male",
          "name": "John Doe",
          "id": "did:jwk:eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsInVzZSI6InNpZyIsImtpZCI6IkY1R0hPai1STHF0S19TSUtabmx4ckpoTFN4MFAyVlZsNFVzTXpuT1ByNW8iLCJhbGciOiJSUzI1NiIsIm4iOiJtYzdzbWdHd0N6ZzZ5WENoM2ZYc3hTc2ROZlFzM3BTZGdZZUstdnpnYWZCQkNBTnZ2YWxqeUJ2YTlYZzA5YWhLMG9KV0hZY2p3Rm5QeU5uX0dkSjJValZPRlJDbllZNWZvejUxbmt0NUJod2l1V1IteWpZN2NZaXI5MjAySlI2RldaNExpamVVNm54WUVrbnFxZ1B6LXZmU0pSa2M5b2t6VEJ4LW9qb0FaOWJTaUJqMm9XNzVsWkhrMlBoU0NkTDNtQzUyaVRkUWpra2NFNHY0ZVpzWVBrZVROSmlmWE1sQ1J3Mlg0X1N6d2N3YkNNWUJqWlhRUFJ1OXdudEJqd0NUOGZTaDJjZVlCdUs4YlViQXBLelhDSGotUnAwZHMyMDdtbEFhcnRlRURhMS1qbW5ZYWxxS2lfQ2tzU1ZuNEQyMThXOWZHSElYcEJlSXBTWjlHc3hHdXcifQ==",
          "email": "[email protected]"
        },
        "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"
      }
    }

    Roadmap 2024

    Inji Wallet

    Inji Mobile

    Q1: Jan24 - Mar24

    Q2: Apr24 - Jun24

    Q3: Jul24 - Sep24

    Q4: Oct24 - Dec24

    Inji Web

    Q1: Jan24 - Mar24

    Q2: Apr24 - Jun24

    Q3: Jul24 - Sep24

    Q4: Oct24 - Dec24

    Inji-Certify

    Q1: Jan24 - Mar24

    Q2: Apr24 - Jun24

    Q3: Jul24 - Sep24

    Q4: Oct24 - Dec24

    Inji -Verify

    Q1: Jan24 - Mar24

    Q2: Apr24 - Jun24

    Q3: Jul24 - Sep24

    Q4: Oct24 - Dec24

    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

    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

    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

    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

    Quarter

    Feature

    Status

    Feature Details

    Release Details

    Q1-Q4

    Threat modelling.

    In-progress

    Threat Modeling

    Q1

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

    Completed

    SDK

    vDP2

    Q1

    Quarter

    Feature

    Status

    Feature Details

    Release Details

    Q2

    1. Fetch & download credentials in PDF format

    2. Issuer and credential type selection

    Completed

    Fetch & Download

    v0.8.0

    Q2

    Localization

    Completed

    Localization

    v0.9.0

    Q2

    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

    easy_deployment_certify_v0

    v0.8.0

    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

    inji_certify_rel_0.9.0

    v0.9.0

    Q3

    Quarter

    Feature

    Status

    Feature Details

    Release Details

    Q2

    Web-based VC Verification functionality

    Completed

    vc_verification

    v0.8.0

    Q2

    UI/UX Enhancements based on GenderMag

    Completed

    GenderMag_UI/UX

    v0.9.0

    Q2

    Sunbird RC - Issuer integration

    Responsive View

    Movement to Data Model 2.0

    Mobile Responsive Version - Upload and Scan feature

    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+
    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
    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
    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

    Roadmap 2025

    Here we present the product roadmap for the entire Inji Stack for the calendar year 2025. The annual product cycle for the Inji Stack begins in January and concludes in December.

    For detailed module-wise roadmaps, please refer to the following:

    • Inj Wallet

      • Inji Mobile

    Prioritization: Through this roadmap the startegic or adaptive prioritization, if there is, has been indicated as below:

    • Add [ ➕ ]: Added new.

    • Strategic priortization [ ↑ ] : Brought ahead in schedule.

    Inji Wallet

    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.

    Inji Mobile

    Quarter🗓️
    Feature 🛠️
    Details 📊
    Status 📝
    Release 📌
    Notes 📖

    Inji Web

    Quarter 🗓️
    Feature 🛠️
    Details 📊
    Status 📝
    Release 📌
    Notes 📖

    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.

    Quarter 🗓️
    Feature 🛠️
    Details 📊
    Status 📝
    Release 📌
    Notes 📖

    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.

    Quarter 🗓️
    Feature 🛠️
    Details 📊
    Status 📝
    Release 📌

    Adaptive reschedule [ ↓ ]: Is moved to approaching quarters.

    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.

    Q1

    Support of mDL/mDoc Credentials

    🟢 Completed

    Q2

    Cross-Device Enhancements for Credential Sharing

    ( OpenIDVP :Verifier Metadata Management)

    🟢 Completed

    Moved to Q2

    Q2➕

    VC Verifier SDK (Kotlin): ECC K1 Verification Support

    🟢 Complete

    Added to Q2

    Q2➕

    Sharing of mDL/mDoc via OpenIDVP

    🟢 Complete

    Added to Q2

    Q2➕

    Complaint to of OpenIDVP Spec

    🟢 Complete

    Added to Q2

    Q2➕

    WLA login through deep link in iOS

    🟢 Complete

    Added to Q2

    Q2↑

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

    🟢 Complete

    Moved to Q2 to Q3

    Q3

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

    🟢 Complete

    Q3↓

    Support for SD-JWT Credentials Format

    🟢 Complete

    v0.19.0

    Moved to Q3 from Q2

    Q4↓

    W3C Data Model 2.0 & SVG Render Method

    &

    🟢 Complete

    Moved to Q4 from Q2

    Q4➕

    Selective Disclosure via OpenIDVP

    🟢 Complete

    Added to Q4

    Q4↓

    Credential Revocation

    🟠 In-Progress

    v0.21.0

    Moved to Q4 from Q3

    2026↓

    Presentation During Issuance

    🟠 In-Progress

    v0.22.0

    Q4 Moved to 2026

    2026↓

    Support for Advanced Cryptographic Keys (ECC R1)

    🔵 Planned

    NA

    Q4

    Moved to 2026

    2026↓

    Support for JWT Credentials Format

    🔵 Planned

    NA

    Q4

    Moved to 2026

    2026↓

    Wallet Login with Unified Key Management

    🔵 Planned

    NA

    Q3

    Moved to 2026

    2026↓

    Profile Creation Using a Single Credential

    🔵 Planned

    NA

    Q3

    Moved to 2026

    2026↓

    Secure Key Recovery with Shamir’s Secret Sharing

    🔵 Planned

    NA

    Q3

    Moved to 2026

    2027↓

    Advanced Privacy Features with BBS+

    🔵 Planned

    NA

    Q3

    Moved to 2026

    2027↓

    Android App Security with Play Integrity

    🔵 Planned

    NA

    Q3

    Moved to 2027

    2027↓

    Multi-User Family Credentials

    🔵 Planned

    NA

    Q4

    Moved to 2027

    2027↓

    One-Time Use Credentials for Privacy

    🔵 Planned

    NA

    Q4

    Moved to 2027

    2027↓

    Secure Wallet Setup with Key Binding

    (SIOP)

    🔵 Planned

    NA

    Q1

    Moved to 2027

    Q2

    Enabling customisation of PDF Template

    🟢 Complete

    Q3+

    User Login with IDP

    🟢 Complete

    Added to Q3

    Q3+

    Enable RSA256 Signature Suites for Login Flow

    🟢 Complete

    Q3↓

    Enable Ed25519 2018 and 2020 Signature Suites for Login Flow

    🟢 Complete

    Q3↓

    Enable ECC K1 Signature Suites for Login Flow

    🟢 Complete

    Q4↓

    SD-JWT Credential Support

    🟢 Complete

    Moved to Q4 from Q3

    Q4+

    Enable Ed25519 2018 and 2020 Signature Suites for Guest Login (Without Login)

    🟢 Complete

    Added to Q4

    Q4+

    Enable ECC K1 Signature Suites for Guest Login (Without Login)

    🟢 Complete

    Added to Q4

    Q4+

    OpenIDVP Support for JSON-LD(W3C) VCs

    🟠 In-Progress

    v0.15.0

    Added to Q4

    2026↓

    Credential Revocation

    🔵 Planned

    v0.16.0

    Q4

    Moved to 2026

    2026↓

    W3C Data Model 2.0 & SVG Render Method

    🔵 Planned

    v0.16.0

    Q4

    Moved to 2026

    2026↓

    OpenIDVP Support for SD-JWT

    🔵 Planned

    NA

    Q4

    Moved to 2026

    2026↓

    Support for Advanced Cryptographic Keys (ECC R1)

    🔵 Planned

    NA

    Q4

    Moved to 2026

    2026↓

    Secure Key Recovery Using Shamir’s Secret Sharing

    🔵 Planned

    NA

    Q2

    Moved to 2026

    2026↓

    Support for mDoc/mDL Credentials

    🔵 Planned

    NA

    Q2

    Moved to 2026

    2026↓

    CBOR Credential Format Support

    🔵 Planned

    NA

    Q2

    Moved to 2026

    2026↓

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

    🔵 Planned

    NA

    Q3

    Moved to 2026

    2026↓

    Advanced Privacy with BBS+ Support

    🔵 Planned

    NA

    Q3

    Moved to 2026

    2026↓

    Support for JWT Credentials

    🔵 Planned

    NA

    Q3

    Moved to 2026

    2026↓

    Unified Key Management for Web & Mobile

    🔵 Planned

    NA

    Q1

    Moved to 2026

    2027↓

    One-Time-Use Credentials for Privacy

    🔵 Planned

    NA

    Q3

    Moved to 2027

    2027↓

    Multi-User Family Credentials

    🔵 Planned

    NA

    Q3

    Moved to 2027

    Q1

    Implementation of Data Provider Plugin

    🟢 Completed

    Q1

    ED25519 (2018 & 2020) VC Signing

    🟢 Completed

    Q2

    Support for ECC K1

    🟢 Completed

    Moved to Q2 from Q1

    Q2+

    Support for ED25519 (2018 & 2020)

    🟢 Completed

    Added to Q1

    Q2+

    OAuth Support with external authentication

    🟢 Completed

    Added to Q1

    Q3↓

    Add New Credential Type to Issuer

    🟢 Completed

    Moved to Q3 from Q2

    Q3↓

    Support for ECC R1

    🟢 Completed

    Moved to Q3 from Q1

    Q3+

    Support for Data Integrity

    🟢 Completed

    Added to Q3

    Q3↓

    Credential Revocation Mechanism

    🟠 In-Progress

    & 0.13.0

    Moved to Q3 from Q1

    Q3↓

    Credential Formats Support for - SD JWT

    🟠 In-Progress

    & 0.13.0

    Moved to Q3 from Q1

    Q3↓

    Credential Formats Support for -mDoc

    🟠 In-Progress

    0.13.0

    Moved to Q3 from Q2

    Q3↓

    Pre-authorized Code Flow

    🔵 Planned

    0.14.0

    Moved to Q2 from Q1

    Q3↓

    Presentation during issuance of Credential

    🔵 Planned

    0.14.0

    Moved to Q3 from Q2

    Q3+

    Claim 169 Support with QR Code Generation

    🔵 Planned

    0.14.0

    Added to Q3

    Q3↓

    Anon Credential

    🔵 Planned

    TBD

    Moved to Q3 from Q2

    Q3

    VC Generation: Create Credentials from the Request Payload

    🔵 Planned

    TBD

    Q3

    Multi-issuers: Onboarding of multiple issuers

    🔵 Planned

    TBD

    Q3

    Subject Holder relationship for VC

    🔵 Planned

    TBD

    Q3

    Allow bulk generation of onetime credentials

    🔵 Planned

    TBD

    Q4

    Deferred Credential Endpoint

    🔵 Planned

    TBD

    Q4

    Multi-User Credentials

    🔵 Planned

    TBD

    Q4

    Issue a physical credential (PDF / Printable)

    🔵 Planned

    TBD

    Inji Verify SDK: OpenID4VP- VP Verification component (cross device flow) and publish as an NPM module

    🟢 Completed

    Q1

    Migration of Inji Verify backend from H2 in memory DB to PostgreSQL DB

    🟢 Completed

    Q2

    Inji Verify SDK: Scan/ Upload Component and publish as an NPM module

    🟢 Completed

    Q2

    Server Setup for VC and VP Proof Verification in vc-verifier library

    🟢 Completed

    Q3

    OpenIDVP Same Device Flow (via deeplink): Integrate to Inji Verify SDK

    🟠 In-Progress

    0.14.0

    Q3

    OpenID4VP Draft 23: Implement DID-based client_id Scheme

    🟠 In-Progress

    0.14.0

    Q3

    OpenID4VP: Authorization Request via request_uri for did client id

    🟠 In-Progress

    0.14.0

    Q3

    OpenIDVP: Same Device Flow (via DC API)

    🟠 In-Progress

    0.14.0

    Q3

    SD JWT (IETF) VC and VP support

    🔵 Planned

    0.15.0

    Q4

    Support Server Side VC Verification: ECC- K1 and R1

    🔵 Planned

    0.16.0

    Q4

    Inji Verify SDK Support apart from React applications for Wider Framework Compatibility

    I

    🔵 Planned

    TBD

    Q4

    Claim 169 QR Code

    🔵 Planned

    TBD

    Q4

    Verify SD- JWT (W3C) VC

    🔵 Planned

    TBD

    Q4

    Revoked Credentials

    🔵 Planned

    TBD

    Q4

    Verify mDoc and mDL

    🔵 Planned

    TBD

    2026

    OpenID4VP - Cross device and same device flows alongside Web wallets

    🔵 Planned

    NA

    2026

    Templatizing post-VC verification (SVG Rendering)

    🔵 Planned

    NA

    2026

    Support for Country QR code - CWT Format

    🔵 Planned

    NA

    2026

    Multi-language Support for VC during verification

    🔵 Planned

    NA

    2026

    Verify document(pdf) with multiple QR Codes

    🔵 Planned

    NA

    2026

    Support for multi proof: Single credential should support multiple proofs

    🔵 Planned

    NA

    2026

    GA Release

    🔵 Planned

    NA

    2026

    Credential Correction

    🔵 Planned

    NA

    2026

    Offline Verification SDK

    🔵 Planned

    NA

    2026

    BLE based verifiable presentation

    🔵 Planned

    NA

    Q1

    iOS Keystore: RSA, ECC R1/K1, Ed25519 Key Generation Support

    ECC_Key_Support

    🟢 Completed

    v0.15.0

    Q1

    OpenIDVP : Cross-Device Flow

    OpenID4VP

    Q1

    Enabling VC Validity for Verification

    🟢 Complete

    v0.11.0

    Q1

    Enable RSA256 Signature Suites for Guest Login(without login)

    Q1

    Local deployment using docker compose

    Local_Deplyment

    🟢 Completed

    0.10.1

    Q1

    Support for VC data model 2.0

    Data_Model_2.0

    Q1

    OpenIDVP: Cross Device Flow (QR code based Verifiable Presentation)

    OpenIDVP_CrossDeviceFlow

    🟢 Completed

    0.11.0, 0.11.1, 0.12.3

    Q1

    Upgrades in OpenID4VP - Draft 21 specification

    Draft21_OpenIDVP_adoption

    🟢 Completed

    0.11.0

    Inji Web
    Inji Certify
    Inji Verify
    OpenIDVP
    OpenID4VCI

    🟢 Completed

    🟢 Complete

    🟢 Completed

    Q1

    v0.15.0
    mDoc/mDL_Wallet-Support
    v0.15.0
    Cross-device-flow_Enhancements
    v0.16.0
    ECC_Key_Support
    v0.17.0
    mDoc/mDL_Wallet-Support
    v0.17.0
    Draft 23
    Draft23_OpenIDVP
    v0.17.0
    Deeplink_login
    v0.17.0
    OpenIDVP_SameDevice_Flow
    v0.17.0
    OpenIDVCIEnhancement
    v0.18.0
    SD_JWT
    WalletRendering
    svgTemplate
    v0.20.0
    SD_JWT
    v0.20.0
    Credential_Revocation
    presentation_during_issuance
    ECC_Key_Support
    JWT_VC_Support
    Holder Login
    User_profile
    Sharmir's-OpenStandard_Implem
    BBS+
    App integrity
    Multi-user_Credentials
    One-time_Credentials
    SIOP
    v0.11.0
    v0.12.0
    User Login
    v0.13.0
    v0.13.0
    ED25519_Key-Support
    v0.13.0
    ECC_Key_Support(Web)
    v0.13.0
    SD JWT VC
    v0.14.0
    v0.14.0
    v0.14.0
    VC Revocation
    VCRendering
    SD JWT VC
    SIOP_Key_Binding
    Sharmir's-OpenStandard_Implem
    VC Formats
    CBOR_VC_Support
    OpenID4VCI Enhancements
    BBS+_Support
    ECC_Key_Support(Web)
    Key_Management_Wallet
    One-time_Credentials
    Multi-user_Credentials
    0.10.1
    Data_Provider_plugin
    0.10.1
    ED25519_Key_Support
    0.10.1
    ECC_K1_Key_Support
    0.11.0
    ED25519_Key_Support
    0.11.0
    OAuth_Support
    0.11.0
    Add_New_VC
    0.12.0
    ECC_R1_Key_Support
    0.12.0
    Data_Integrity
    0.12.0
    revocation_mechanism
    0.12.0
    SDJWT_VC_Format_Support
    0.12.0
    mDoc_Format_Support
    pre-authorized-code-flow
    presentation_during_issuance
    QRCode_Generation
    anon_cred
    W3C_VC_Issaunce_API
    multi-issuers
    subject_holder_relationship
    bulk_batch_issuance
    deferred_credential
    multi_user_cred
    presentation-based-plugin
    InjiVerify_SDK
    0.12.3
    InjiVerify_Backend_Migration
    0.12.3
    InjiVerify_SDK
    0.13.0
    VC_VP_Proof_Verification
    0.13.0
    OpenIDVP_Same_Device_Flow
    OpenIDVP_Draft23_Adoption
    OpenIDVP_Auth_Request
    OpenIDVP_Same_Device_Flow
    SD-JWT_Support
    ECC-K1_R1_Support
    njiVerify_SDK
    Claim_169_QRCode
    SD_JWT_Support
    Credential_Revocation
    mDoc_mDL_Support
    SVG_Rendering
    Country_QR_Code
    Multi_Language_Support
    Multiple_QR_Verification
    Offline_SDK_Verification
    InjiVerify_LTS_B1
    Credential_Correction
    Offline_Verification_SDK
    InjiVerify_BLE_Verification

    Inji Deployment Guide

    Overview

    Inji is a digital credentialing stack that enables users to securely download, store, share, and verify credentials. This guide is structured to provide a comprehensive approach for deploying the Inji stack (Inji Certify, Mimoto, Inji Web and Inji Verify). Not only the Inji Stack, this deployment guide has taken an approach to cover everything from deploying Wireguard to Base Infrastructure setup, Core Infra setup to configurations and finally the Inji Stack deployment.

    Do I need to read through the entire guide to be able to deploy Inji?

    This is the first question you could ask and the answer is No! If you have the Infrastructure ready and you just want to deploy the Inji stack you can directly jump to the section.

    How is this guide structured and organized?

    1. : Provides an overview of the Inji stack, deployment scenarios, required skill sets, system architecture, and key considerations for on-premise deployments.

    2. : Outlines infrastructure details, hardware/software/network requirements, and initial setup steps.

    3. : Guides you through setting up the foundational infrastructure for Inji, including Kubernetes provisioning, NGINX configuration, networking, and optionally, the observability cluster and monitoring module.

    Each section provides direct steps and references to external resources for a streamlined deployment experience.

    Typical Deployment Scenarios

    The scenarios listed below are only a few examples. Inji Stack can support many more deployment possibilities depending on the country, organization, or individual requirements.

    Deployment Scenario
    Modules Included
    Countries / Use Case Example

    Basic Skill-sets Required

    Deploying Inji Stack is easier while you have Base Infrastructure ready, still, if you want to deploy it 'On-Premise' and from scratch, this guide helps you with the instructions to achieve this.

    Note: The basic Skill-sets mentioned below, in fact, expects you to know the following to be able to deploy it from scratch and that too on a bare metal servers (On-Premise). This should not get intimidating as in typical scenarios we expect the infrastructure to be deployed by an experienced 'System-Admin/DevOps'. However in case you want to evangelize Inji in your organization and want to have a hands-on with the deployment, this guide helps you with the steps and instructions to achieve this.

    • Linux System Administration: Proficiency in Linux command-line operations, user and permission management, and basic networking.

    • Networking Fundamentals: Knowledge of firewalls, load balancers, DNS, and secure network configuration.

    • Containerisation: Experience with Docker or similar container technologies for building and managing service containers.

    • Kubernetes Administration

    Deployment Architecture of Inji

    Links to the deployment architecture diagrams below take you to respective sections of this guide and illustrate the high-level deployment architecture for Inji Stack, showing how core components interact within the Kubernetes cluster, including ingress, services, and external integrations.

    • Inji Wallet

    Typical Deployment Order

    For a smooth and error-free setup of the Inji Stack, it is recommended to follow the deployment order starting with Inji Certify, followed by mimoto backend for Inji Wallet(Mobile+Web), next the Inji Web Wallet, and finally Inji Verify. This sequence ensures that foundational services and dependencies are available before deploying modules that rely on them, leading to a more stable and seamless deployment experience.

    Deployment Considerations for On-Premise Inji Stack

    The section helps you to have a quick understanding of what you should expect when you go about deploying Inji-Stack, especially if you are deploying it 'On-Premise' and from scratch.

    • Inji modules are deployed as microservices in a Kubernetes cluster.

    • Wireguard is used as a trust network extension to access the admin, control, and observation panes.

    • Inji uses Nginx server for:

      • SSL termination

    Prerequisites for Overall Deployment

    While we have placed the Prerequisites specific to a section under respective sections itself, here, this 'Prerequisites' lists the common ones which you will need no matter which component you are deploying such as Wireguard, PC - Tools and Utilities etc.

    Personal Computer

    Follow the steps mentioned here to install the required tools on your personal computer to create and manage the k8's cluster.

    Operating Systems

    The Inji stack can be deployed with a PC having one of the following operating systems, however for this guide we have considered a linux machine with Ubuntu 22.04 LTS.

    • Linux (Ubuntu 22.04 LTS - recommended for production deployments)

    • Windows

    • macOS (OSX)

    Tools and Utilities

    You should have these tools installed on your local machine from where you will be running the ansible playbooks to create and manage the k8 cluster using RKE1.

    • - version > 2.12.4

    • Command line utilities:

      • - version 2.12.4 or higher

      • - any client version above 3.0.0 and add below repos as well

    • : version:

    • : version: 1.15.0

    • Create a directory as mosip in your PC and:

      • clone k8’s infra repo with tag : 1.2.0.2 (whichever is the latest version) inside mosip directory. git clone https://github.com/mosip/k8s-infra -b v1.2.0.2

    Setting Up Wireguard

    Note: In case you already have VPN configured to access nodes privately please skip Wireguard installation and continue to use the same VPN.

    Wireguard bastian server provides secure private channel to access Inji cluster. Bastian server restricts public access, and enables access to only those clients who have their public key listed in Wireguard server.

    WireGuard is a modern, fast, and secure VPN (Virtual Private Network) protocol and software that creates encrypted tunnels between devices.

    • Wireguard bastian server provides secure private channel to access Inji cluster.

    • Bastian server restricts public access, and enables access to only those clients who have their public key listed in Wireguard server.

    • Bastion server listens on UDP port 51820.

    Note: You can also refer to for more on Wireguard configuration and management.

    Prerequisites to Set Up Wireguard

    Wireguard Bastion Host

    • VMs and Hardware Specifications

      • 1 VM (ensure to set up active-passive for HA)

      • Specification - 2 vCPUs, 4 GB RAM, 8 GB Storage (HDD)

    • Server Network Interfaces

    Setting up Wireguard VM and wireguard bastion server

    Before proceeding, Create a Wireguard server VM with the mentioned specification under 'Prerequisites' above. This VM will be used to set up the Wireguard server. Once the VM is ready, open the required ports on the Bastion server VM.

    Open required ports in the Bastian server VM

    Configure the firewall on the Bastion server virtual machine to allow network traffic through specific ports needed for your application or remote access.

    • cd $K8_ROOT/wireguard/

    • Create copy of hosts.ini.sample as hosts.ini and update the required details for wireguard VM

    • cp hosts.ini.sample hosts.ini

    Note:

    • Remove [Cluster] complete section from copied hosts.ini file.

    • Execute ports.yml to enable ports on VM level using ufw:ansible-playbook -i hosts.ini ports.yaml

    Note:

    • Permission of the pem files to access nodes should have 400 permission. sudo chmod 400 ~/.ssh/privkey.pem

    • These ports are only needed to be opened for sharing packets over UDP.

    Install docker

    • execute docker.yml to install docker and add user to docker group:

    • Setup Wireguard server

      • SSH to wireguard VM

      • ssh -i <path to .pem> ubuntu@<Wireguard server public ip>

      • Create directory for storing wireguard config files. mkdir -p wireguard/config

    Note:

    • Increase the number of peers above in case more than 30 wireguard client confs (-e PEERS=30) are needed.

    • Change the directory to be mounted to wireguard docker as per need. All your wireguard confs will be generated in the mounted directory (-v /home/ubuntu/wireguard/config:/config

    Setup Wireguard Client on your PC

    • Install Wireguard client on your PC using .

    • Assign wireguard.conf:

    • SSH to the wireguard server VM.

    • cd /home/ubuntu/wireguard/config

    • Once connected to wireguard, you should be now able to login using private IP’s.

    Base Infrastructure Setup

    What do we mean here by Base Infrastructure Setup?

    "Base Infrastructure Setup" refers to preparing all foundational resources and configurations needed before deploying the Inji stack. This includes provisioning servers/VMs, configuring networks and firewalls, setting up SSL certificates, installing Kubernetes clusters and required tools (Docker, kubectl, Helm, etc.), establishing secure access (e.g., Wireguard VPN), and deploying essential services like NGINX, storage, monitoring, and logging. It ensures the environment is ready for Inji stack installation.

    • Provisioning foundational resources required for the Inji stack, including:

      • Virtual machines (VMs) or servers as per hardware requirements.

      • Network configuration (internal connectivity, firewall rules, DNS).

      • SSL certificate setup for secure communications.

    Prerequisites for Base Infrastructure Setup

    Before deploying any Inji Stack module, ensure that the following common prerequisites are met. These requirements apply to all modules and must be fulfilled to guarantee a smooth and successful deployment process.

    On-Prem Server Requirements

    Note: You can deploy Inji on an environment and operating system that supports Kubernetes-based deployments. Ensure your chosen OS and infrastructure meet the prerequisites and compatibility requirements. Note: This guide references using Ubuntu Server 22.04 LTS. Note: For large-scale deployments or environments with strict security requirements, an on-premises setup is recommended. For pilot projects, demonstrations, or rapid prototyping, a cloud-based deployment may be more suitable.

    Note: Virtual Machines (VMs) can use any operating system as per convenience. For this installation guide, Ubuntu OS is referenced throughout.

    VMs-Virtual Machines (Hardware, Network, Certificate and DNS) - Along with Nginx server (use Loadbalancer if required)

    • VMs and Hardware Specifications

      • 3 VMs (allocate etcd, control plane, and worker nodes accordingly for HA)

      • Specification - 8 vCPUs, 32 GB RAM, 64 GB Storage (HDD)

    • Network Interfaces

    Note: Network Requirements

    • All the VM's should be able to communicate with each other.

    • Need stable Intra network connectivity between these VM's.

    DNS Requirements

    Below is a sample mapping of domain names to their respective IP addresses and purposes for a typical Inji deployment. Update these as per your environment.

    • rancher.xyz.net

      • Maps to: Private IP of Nginx server or load balancer (Observation cluster)

      • Purpose: Rancher dashboard for monitoring and managing the Kubernetes cluster.

    • keycloak.xyz.net

    Note: Ensure all DNS records are created and point to the correct IP addresses (public or private) as per your network design. For private domains, access is typically restricted via Wireguard VPN.

    PC Requirements

    See the section for common prerequisites required for all deployments.

    Setting Up Kubernetes Cluster

    Note: For detailed VM provisioning steps and hardware/network prerequisites, see the above for VM - Hardware specification and more.

    • Find the kubernetes infrastructure repository which contains the scripts to install and configure Kubernetes cluster with required monitoring, logging and alerting tools.

      • After reviewing the k8s-infra repository and ensuring that you also have all the required tools and utilities installed on your local machine, the next step is to provision and configure your Kubernetes cluster nodes (VMs or servers) according to the hardware and network requirements specified under 'Prerequisites' above. Once your nodes are ready and accessible, proceed to run the provided Ansible playbooks and scripts from the k8s-infra repository to set up the Kubernetes cluster, networking, and essential infrastructure components.

    K8s (Kubernetes) Cluster Configuration

    Ingress and Storage Class setup

    Ingress setup

    It is a service mesh for the MOSIP K8 cluster which provides transparent layers on top of existing microservices along with powerful features enabling a uniform and more efficient way to secure, connect, and monitor services.

    • cd $K8_ROOT/mosip/on-prem/istio

    • ./install.sh

    • This will bring up all the Istio components and the Ingress Gateways.

    • Check Ingress Gateway services:

    Storage classes (NFS)

    Multiple storage classes options are available for onprem K8's cluster. In this reference deployment will continue to use NFS as a storage class.

    • Move to nfs directory in your personel computer.

    • Create a copy of hosts.ini.sample as hosts.ini.

    • Update the NFS machine details in hosts.ini file.

      Note :

      • Add below mentioned details:

      • ansible_host : internal IP of NFS server. eg. 10.12.23.21. In our reference implementation using nginx server

    Note:

    • Output should show the cluster name to confirm you are pointing to right kubernetes cluster.

    • If not pointing to right K8 cluster change the kubeconfig to connect to right K8 cluster.

    • SSH to the nfs node:

    • Clone k8s-infra repo in nginx VM:

    • Move to the nfs directory:

    • Execute script to install nfs server:

    Note: > * Script prompts for below mentioned user inputs: > > > ..... > Please Enter Environment Name: <envName> > ..... > ..... > ..... > [ Export the NFS Share Directory ] > exporting *:/srv/nfs/mosip/<envName> > NFS Server Path: /srv/nfs/mosip/<envName> > > > * envName: env name eg. dev/qa/uat...

    • Switch to your personel computer and excute below mentioned commands:

    • Post installation check:

      • Check status of NFS Client Provisioner from your PC, make sure pointing to right kubeconfig file.

    • Check status of nfs-client storage class.

    Inji K8's (Kubernetes) cluster Nginx server setup

    SSL certificate creation

    • For Nginx server setup, we need ssl certificate, add the same into Nginx server.

    • Incase valid ssl certificate is not there generate one using letsencrypt:

      • SSH into the nginx server

      • Install Pre-requisites:

    • Generate wildcard SSL certificates for your domain name.

      • sudo certbot certonly --agree-tos --manual --preferred-challenges=dns -d *.sandbox.mosip.net -d sandbox.mosip.net

        • replace sanbox.mosip.net with your domain.

    Nginx server setup for Inji K8's cluster

    • Move to nginx directory in your local:

    • cd $K8_ROOT/mosip/on-prem/nginx/

    • Open required ports :

      • Use any editor to create new hosts.ini

    • Add below mentioned lines with updated details of nginx server to the hosts.ini and save.

    • Execute below mentoned command to open required ports:

    • Login to the nginx server node.

    • Clone k8s-infra

    • Provide below mentioned inputs as and when prompted

      • MOSIP nginx server internal ip

      • MOSIP nginx server public ip

      • Publically accessible domains (comma seperated with no whitespaces)

    Check Overall nginx and istio wiring

    • Install httpbin: This utility docker returns http headers received inside the cluster.

    • httpbin can be used for general debugging - to check ingress, headers etc. Make sure pointing to right kubeconfig file.

    • To see what is reaching the httpbin (example, replace with your domain name):

    [Optional] Monitoring module deployment

    Note :

    • Monitoring in the sandbox environment is optional and can be deployed if required.

    • For production environments, alternative monitoring tools can be used.

    • These steps can also be skipped in development environments if monitoring is not needed.

    • Prometheus and Grafana and Alertmanager tools are used for cluster monitoring.

    • Select 'Monitoring' App from Rancher console -> Apps & Marketplaces.

    • In Helm options, open the YAML file and disable Nginx Ingress.

    • Click on Install

    [Optional] Alerting setup

    Note:

    • Alerting in the sandbox environment is optional and can be deployed if required.

    • For production environments, alternative alerting tools can be used.

    • These steps can also be skipped in development environments if alerting is not needed.

    • Alerting is part of cluster monitoring, where alert notifications are sent to the configured email or slack channel.

    • Install Default alerts along some of the defined custom alerts:

    • Alerting is installed.

    [Optional] Logging module setup and installation

    Note :

    • Logging in the sandbox environment is optional and can be deployed if required.

    • For production environments, alternative logging tools can be used.

    • These steps can also be skipped in development environments if logging is not needed.

    Inji uses and elasticsearch to collect logs from all services and reflect the same in Kibana Dashboard.

    • Install Rancher FluentD system : Required for screpping logs outs of all the microservices from Inji k8 cluster.

      • Install Logging from Apps and marketplace within the Rancher UI.

      • Select Chart Version 100.1.3+up3.17.7 from Rancher console -> Apps & Marketplaces.

    Open kibana dashboard from https://kibana.sandbox.xyz.net.

    Kibana --> Menu (on top left) --> Dashboard --> Select the dashboard.

    Core Infrastructure Components Setup

    This section covers the installation and configuration of essential infrastructure components required for the Inji stack, including configmaps, databases, object storage, secrets management, configuration server, and artifactory.

    Inji Stack Configmap: For inji K8's env

    • inji-stack-config configmap: For inji K8's env, inji-stack-config configmap in default namespace contains Domain related information. Follow below steps to add domain details for inji-stack-config configmap.

    • Update the domain names in inji-stack-cm.yaml correctly for your environment.

    Note: You can find the inji-stack-cm.yaml file in the deployment scripts or configuration directory of the Inji stack repository, typically under the deploy or k8s folder. If it is not present, you can create it using the sample configmap YAML provided in this guide, and then update the domain names as per your environment before applying it to your Kubernetes cluster

    conf-secret installation

    Config Server Installation

    Create values.yaml

    This ensures that values.yaml is available for your Helm install command and can be referenced directly during the config-server deployment.

    • Create a values.yaml file that will contain the configuration for the chart and send it to your config-server installation.

    • Review values.yaml and make sure git repository parameters are as per your installation and enable only the required environment variables.

    • Open the file and paste the following content into it in the same directory where values.yaml is created.

    • Run the Script

    Inji Stack Deployment

    Once Prerequisites, Base Infrastructure, and the Core Infrastructure Setup and Configuration are complete, now you can proceed with the deployment of the Inji stack components.

    For detailed deployment steps, architecture, and module-level instructions, refer to the following:

    • Inji Wallet

    Deploying Inji Certify

    While you have a deployment environment ready, you can now proceed with the installation of Inji Certify by following the steps explained here.

    Note: Before deploying Inji Certify, it is recommended to always use the latest . Each release includes enhancements, technical upgrades, and new features to ensure the best experience.

    Understanding the Deployment Approach for Inji Certify

    Inji Certify is deployed as containerized microservices in your Kubernetes cluster.

    Deployment Architecture for Inji Certify

    Where Will it Run?

    • Target Environment: Your main Kubernetes cluster

    • Deployment Method: Helm charts that pull Docker images from container registries

    • Access Point: Through your configured NGINX ingress at https://injicertify.sandbox.xyz.net

    What Gets Installed?

    1. Kubernetes Pods: Running Inji Certify microservices

    2. Services: For internal communication

    3. Ingress Rules: For external access via NGINX

    4. ConfigMaps & Secrets: For configuration and credentials

    Deployment Process

    Step 1: Pre-Deployment Checklist

    Before deploying Inji Certify, ensure the following infrastructure components and configurations are in place as mentioned

    Step 2: Prepare Your Deployment Environment

    From your local machine, you'll run deployment scripts that:

    • Connect to your Kubernetes cluster via kubectl

    • Deploy containerized services using Helm charts

    • Configure ingress rules through Istio

    Step 3: Clone and Navigate to Deployment Scripts

    Step 4: Deploy Redis (if not already deployed)

    Step 5: Initialize Database

    Step 6: Deploy Inji Certify Microservices

    What Happens During Installation

    1. Helm Charts Execution: Downloads and deploys Docker containers

    2. Service Registration: Services register with config-server for configuration

    3. Database Initialization: Creates required tables and seed data

    4. Ingress Configuration: Configures routes through Istio gateway

    ###3 Verification Steps

    Check Pod Status

    Note : Ensure nelow mentioned services are listed in the output result of above command. You can even check Rancher incase deployed. 1. inji-certify 2. inji-softhsm

    Verify Service Endpoints

    Note : Ensure below mentioned services are listed in the output result of above command. You can even check Rancher incase deployed. 1. inji-certify 2. inji-softhsm

    Test External Access

    Success Criteria for Inji Certify Deployment

    1. Deployment Scripts Executed Successfully

      • All deployment scripts (install.sh) for Redis and Inji Certify microservices complete without errors.

      • No failed Helm releases or container pull issues during deployment.

    Important Notes

    • Remote Deployment: You deploy from your local machine to the remote K8s cluster

    • Container Registry: Docker images are pulled from public/private registries during deployment

    • Configuration: All configuration comes from your config-server and configmaps

    Troubleshooting

    If deployment fails, check:

    1. Cluster Connectivity: kubectl cluster-info

    2. Prerequisites: Ensure config-server, postgres, redis are running

    3. Resources: Verify cluster has sufficient CPU/memory

    4. Network: Ensure ingress and DNS are properly configured

    You can also refer to the file for deployment steps given in individual module repositories.

    Need help or have questions? In case you encounter any issues or have queries while using or deploying the application, please post them in the . The community and maintainers are available to assist you.

    Deploying Mimoto backend for Inji Wallet

    This section provides a structured, step-by-step guide to deploy Mimoto, which serves as the backend for Inji Mobile Wallet and Inji Web Wallet. Follow these instructions to ensure a successful and reproducible deployment.

    Note: Before deploying mimoto, it is recommended to always use the latest released version. Each release includes enhancements, technical upgrades, and new features to ensure the best experience.

    Understanding the Deployment Approach of Mimoto

    Mimoto is deployed as containerized microservices in your Kubernetes cluster.

    Where Will it Run?

    • Target Environment: Your main Kubernetes cluster

    • Deployment Method: Helm charts and shell scripts that pull Docker images from container registries

    • Access Point: Through your configured NGINX ingress (domain as configured)

    What Gets Installed?

    1. Kubernetes Pods: Running Mimoto microservices

    2. Services: For internal communication

    3. Ingress Rules: For external access via NGINX/Istio

    4. ConfigMaps & Secrets: For configuration and credentials

    Deployment Process

    Step 1: Pre-Deployment Checklist

    Before deploying the mimoto (backend for Inji Wallet), ensure the following infrastructure components and configurations are in place as mentioned below:

      • Note: Before running the Postgres install script, update the POSTGRES_HOST value in install.sh with the correct PostgreSQL host.

    Step 2: Clone and Navigate to Deployment Scripts

    Step 3: Install Redis (If Not Already Installed)

    To install Redis, run:

    Step 4: Initialize Database

    Update the values file for PostgreSQL initialization as needed, then run:

    Step 5: Install Partner Onboarder

    To install the Partner Onboarder module:

    During the execution of the install.sh script, you will be prompted to provide information for the S3 bucket, including its name and URL.

    Once the job completes, log in to your S3 or NFS storage and verify the reports. There should be no failures.

    Note: If you are running the Onboarder in a separate INJI cluster, update the extraEnvVars section in values.yaml accordingly.

    Step 6: Install Mimoto

    Before installing Mimoto, ensure that the database host and port are correctly configured in the values.yaml file.

    To install Mimoto:

    During the execution of the install.sh script, you will be prompted to specify whether a public domain and a valid SSL certificate are present on the server.

    • If the server does not have a public domain and valid SSL certificate, select n. This will enable an init-container with an emptyDir volume, which will download the server's self-signed SSL certificate and mount it to the Java keystore (cacerts) within the container. This is useful for deployments using self-signed SSL certificates.

    Step 6: Onboarding a New Issuer for VCI

    To onboard a new issuer for VCI:

    1. Create a folder named certs in the root directory.

    2. Inside certs, create a file named oidckeystore.p12.

    3. Store the keys as different aliases for each issuer in this file.

    For more details, refer to the official documentation or the relevant section in the repository.

    Verification Steps

    • Check Pod Status:

    • Check Service Endpoints:

    • Test External Access:

    Important Notes

    • Remote Deployment: You deploy from your local machine to the remote K8s cluster.

    • Container Registry: Docker images are pulled from public/private registries during deployment.

    • Configuration: All configuration comes from your config-server and configmaps.

    Success Criteria for Mimoto Deployment

    Note: Screenshots for each success criteria step will be added shortly to provide a visual reference.

    1. Deployment Scripts Executed Successfully

      • All installation scripts (install.sh) for Redis, Partner Onboarder, and Mimoto complete without errors.

      • No failed Helm releases or container pull issues during deployment.

    Troubleshooting

    If deployment fails, check:

    1. Cluster Connectivity: kubectl cluster-info

    • This command checks if your local kubectl is properly configured and can communicate with the Kubernetes cluster.

    • It displays information about the cluster's master and services, confirming that your connection is active and functional.

    1. Prerequisites: Ensure config-server, postgres, redis are running

    2. Resources: Verify cluster has sufficient CPU/memory

    3. Network: Ensure ingress and DNS are properly configured

    4. Logs: Check pod logs for errors: kubectl logs <pod-name> -n mimoto

    You can also refer to the file for deployment steps given in individual module repositories.

    Need help or have questions? In case you encounter any issues or have queries while using or deploying the application, please post them in the . The community and maintainers are available to assist you.

    Deploying Inji Web Wallet

    This section explains how to deploy the Inji Web Wallet, which comes with a reference web UI and DataShare. This web UI serves as a sample implementation to help integrators and countries build their own customized user interface.

    Note: Before deploying Inji Web Wallet, it is recommended to always use the latest . Each release includes enhancements, technical upgrades, and new features to ensure the best experience.

    Understanding the Deployment Approach of Inji Web Wallet

    Inji Web UI and dataShare are deployed as containerized microservices in your Kubernetes cluster.

    Deployment Architecture for Inji Web Wallet

    Where Will It Run?

    • Target Environment: Your main Kubernetes cluster

    • Deployment Method: Helm charts that pull Docker images from container registries

    • Access Point: Through your configured NGINX ingress at https://injiweb.sandbox.xyz.net (and DataShare endpoints as configured)

    What Gets Installed?

    1. Kubernetes Pods: Running Inji Web UI and DataShare microservices

    2. Services: For internal communication

    3. Ingress Rules: For external access via NGINX/Istio

    4. ConfigMaps & Secrets: For configuration and credentials

    Deployment Process of Inji Web Wallet

    Step 1: Pre-Deployment Checklist

    Before deploying Inji Web Wallet, ensure the following infrastructure components and configurations are in place as mentioned below:

    Step 2: Prepare Your Deployment Environment

    From your local machine, you'll run deployment scripts that:

    • Connect to your Kubernetes cluster via kubectl

    • Deploy containerized services using Helm charts

    • Configure ingress rules through Istio/NGINX

    Step 4: Clone and Navigate to Deployment Scripts

    Step 5: Prepare Configuration

    • Review and update the values.yaml file for your environment (domain names, DB connection, object store endpoints, etc.).

    • Ensure the active_profile_env parameter in the config map of the config-server-share is set to:

    Step 6: Deploy DataShare (if required)

    If DataShare is a separate module, deploy it first:

    Step 6: Deploy Inji Web UI

    From the deploy directory:

    Step 7: Verification Steps

    • Check pod status:

    • Check service endpoints:

    • Test external access:

    Step 8: Post-Installation Configuration

    • Confirm that the active_profile_env in the config-server-share config map is set as described above.

    • Ensure DNS records for injiweb.sandbox.xyz.net and any DataShare endpoints are correctly mapped to your ingress controller.

    Important Notes

    • Remote Deployment: You deploy from your local machine to the remote K8s cluster

    • Container Registry: Docker images are pulled from public/private registries during deployment

    • Configuration: All configuration comes from your config-server and configmaps

    Success Criteria for Inji Web Wallet Deployment

    Note: Screenshots for each success criteria step will be added shortly to provide a visual reference.

    Your deployment is successful if:

    1. Pods are Running and Healthy

    • All pods in the injiweb namespace show STATUS = Running and READY counts match.

    • kubectl get pods -n injiweb shows no CrashLoopBackOff or Error.

    1. Services are Registered and Reachable

    • kubectl get services -n injiweb lists expected Inji Web and DataShare services.

    • Each service has a valid ClusterIP or LoadBalancer.

    1. Configuration is Applied Correctly

    • Ensure the active_profile_env parameter in the config map of the config-server-share is set to: default,inji-default, standalone

    • No config fetch errors appear in Inji Web pod logs.

    1. Ingress/DNS is Working

    • DNS entries (e.g., injiweb.sandbox.xyz.net) point correctly to your ingress controller.

    • Running curl k https://injiweb.sandbox.xyz.net/health returns HTTP 200 with a healthy response.

    1. DataShare Module (if deployed) is Accessible

    • DataShare pods are up and healthy.

    • DataShare endpoints are reachable and registered in Kubernetes.

    1. No Critical Errors in Logs

    • Reviewing logs (kubectl logs <pod-name> -n injiweb) shows no failures during startup or runtime.

    Troubleshooting

    If deployment fails, check:

    1. Cluster Connectivity: kubectl cluster-info

    • This command checks if your local kubectl is properly configured and can communicate with the Kubernetes cluster.

    • It displays information about the cluster's master and services, confirming that your connection is active and functional.

    1. Prerequisites: Ensure config-server, postgres, redis are running

    2. Resources: Verify cluster has sufficient CPU/memory

    3. Network: Ensure ingress and DNS are properly configured

    4. Logs: Check pod logs for errors: kubectl logs <pod-name> -n injiweb

    You can also refer to the file for deployment steps given in individual module repositories.

    Need help or have questions? In case you encounter any issues or have queries while using or deploying the application, please post them in the . The community and maintainers are available to assist you.

    Deploying Inji Verify

    This section provides step-by-step instructions to install Inji Verify. Please follow these guidelines to make sure a successful setup in your environment.

    Note: Before deploying Inji Verify, it is recommended to always use the latest . Each release includes enhancements, technical upgrades, and new features to ensure the best experience.

    Understanding the Deployment Approach of Inji Verify

    Inji Verify is deployed as containerized microservices in your Kubernetes cluster.

    Deployment Architecture for Inji Verify

    Where Will It Run??

    • Target Environment: Your main Kubernetes cluster

    • Deployment Method: Helm charts that pull Docker images from container registries

    • Access Point: Through your configured NGINX ingress at https://injiverify.sandbox.xyz.net

    What Gets Installed?

    1. Kubernetes Pods: Running Inji Verify microservices

    2. Services: For internal communication

    3. Ingress Rules: For external access via NGINX

    4. ConfigMaps & Secrets: For configuration and credentials

    Deployment Process of Inji Verify

    Step 1: Pre-Deployment Checklist

    Before deploying Inji Verify, ensure the following infrastructure components and configurations are in place as mentioned

    Step 2: Prepare Your Deployment Environment

    From your local machine, you'll run deployment scripts that:

    • Connect to your Kubernetes cluster via kubectl

    • Deploy containerized services using Helm charts

    • Configure ingress rules through Istio

    Step 3: Clone and Navigate to Deployment Scripts

    Step 4: Initialize Database

    Update the values file for PostgreSQL initialization as needed.

    Step 5: Deploy Inji Verify Microservices

    What Happens During Installation

    1. Helm Charts Execution: Downloads and deploys Docker containers

    2. Service Registration: Services register with config-server for configuration

    3. Database Initialization: Creates required tables and seed data

    4. Ingress Configuration: Configures routes through Istio gateway

    Verification Steps

    Check Pod Status

    Verify Service Endpoints

    Test External Access

    Managing Inji Verify Services

    • Delete all services:

    • Restart all services:

    Important Notes

    • Remote Deployment: You deploy from your local machine to the remote K8s cluster

    • Container Registry: Docker images are pulled from public/private registries during deployment

    • Configuration: All configuration comes from your config-server and configmaps

    Success Criteria for Inji Verify Deployment

    Note: Screenshots for each success criteria step will be added shortly to provide a visual reference.

    1. Deployment Scripts Executed Successfully

      • Deployment scripts (install-all.sh) complete without errors.

      • No failed Helm releases or container pull issues during deployment.

    2. Pods Running and Healthy

    Troubleshooting

    If deployment fails, check:

    1. Cluster Connectivity: kubectl cluster-info

    • This command checks if your local kubectl is properly configured and can communicate with the Kubernetes cluster.

    • It displays information about the cluster's master and services, confirming that your connection is active and functional.

    1. Prerequisites: Ensure config-server, postgres, redis are running

    2. Resources: Verify cluster has sufficient CPU/memory

    3. Network: Ensure ingress and DNS are properly configured

    4. Logs: Check pod logs for errors: kubectl logs <pod-name> -n inji-verify

    You can also refer to the file for deployment steps given in individual module repositories.

    Contribution and Community

    We welcome contributions from everyone!

    Check to learn how you can contribute code to this application. If you have any questions or run into issues while trying out the application, feel free to post them in the — we’ll be happy to help you out.



    : Explains the external services required—such as the database, artifactory, etc.,—and provides steps for their installation and configuration.
  • Inji Stack Deployment: Offers step-by-step instructions to deploy Inji modules (Certify, Wallet, Verify) along with configuration guidance.

  • Contribution and Community: Highlights how you can contribute code, share feedback, or reach out for support while working with the application.

  • Hybrid Deployment

    Some modules on-premise, some on cloud

    Countries with regulatory/data residency constraints, for example issuer to be on-prem while the inji wallet is deployed on cloud

    Phased Rollout Deployment

    Gradual deployment of modules/regions

    Pilot projects or regional rollouts

    : Understanding of Kubernetes concepts, cluster setup, resource management, and troubleshooting.
  • Helm: Familiarity with Helm for managing Kubernetes manifests and deployments.

  • Database Management: Basic skills in managing PostgreSQL or similar databases, including initialization and schema setup.

  • Configuration Management: Ability to manage application configuration files, secrets, and certificates securely.

  • Monitoring and Logging: Understanding of logging and monitoring tools to observe system health and troubleshoot issues.

  • Security Best Practices: Awareness of secure credential handling, certificate management, and access control.

  • Scripting: Basic scripting skills (e.g., Bash, Python) for automation and operational tasks.

  • Familiarity with CI/CD Pipelines: Understanding of continuous integration and deployment processes is a plus.

  • Inji Verify

    Reverse Proxy

  • CDN/Cache management

  • Load balancing

  • Kubernetes (k8's) cluster is administered using the rke tools and kubectl commands.

  • We have two k8's clusters:

    • Observation cluster [Optional] - This cluster is part of the observation plane and assists with administrative tasks. By design, this is kept independent from the actual cluster as a good security practice and to ensure clear segregation of roles and responsibilities. As a best practice, this cluster or its services should be internal and should never be exposed to the external world.

      • Rancher is used for managing the Inji cluster.

      • Keycloak in this cluster is used to manage user access and rights for the observation plane.

      • It is recommended to configure log monitoring and network monitoring in this cluster during production deployment.

      • In case you have an internal container registry, then it should run here.

    • Inji cluster - This cluster runs all the Inji components and core infrastructure components like kafka, Postgres, minio, etc.

      • Inji Services are deployed in this cluster.

  • clone mosip-infra with tag : 1.2.0.2 (whichever is the latest version) inside mosip directory. git clone https://github.com/mosip/mosip-infra -b v1.2.0.2

  • Set below mentioned variables in bashrc and excute command source .bashrc

  • Note: Above mentioned environment variables will be used throughout the installation to move between one directory to other to run install scripts.

  • Wireguard Client - Refer to the Setup Wireguard Client on your PC section for the instructions.

  • Private interface: On the same internal network as all other nodes (e.g., local NAT network).

  • Public interface: Either a direct public IP or a firewall/NAT rule forwarding UDP port 51820 to this interface's IP address.

  • Add below mentioned details:
    • ansible_host : public IP of Wireguard Bastion server. eg. 100.10.20.56

    • ansible_user : user to be used for installation. In this ref-impl we use Ubuntu user.

    • ansible_ssh_private_key_file : path to pem key for ssh to wireguard server. eg. ~/.ssh/wireguard-ssh.pem

    Take necessary measure on firewall level so that the Wireguard server can be reachable on 51820/udp.

  • Install and start wireguard server using docker as given below:

  • ).

    assign one of the PR for yourself and use the same from the PC to connect to the server.

    • create assigned.txt file to assign the keep track of peer files allocated and update everytime some peer is allocated to someone.

      • use ls cmd to see the list of peers.

      • get inside your selected peer directory, and add mentioned changes in peer.conf:

        • cd peer1

        • nano peer1.conf

          • Delete the DNS IP.

  • add peer.conf in your PC’s /etc/wireguard directory as wg0.conf.

  • start the wireguard client and check the status:

  • Setting up Kubernetes clusters:

    • Installing and configuring Kubernetes (using RKE, Rancher, etc.).

    • Ensuring cluster nodes are accessible and properly networked.

  • Configuring supporting infrastructure:

    • Installing Docker and required CLI tools (kubectl, helm, ansible, istioctl).

    • Setting up passwordless SSH access to all nodes.

    • Preparing configuration files (hosts.ini, values.yaml, etc.).

  • Deploying essential services:

    • Setting up NGINX for SSL termination, reverse proxy, and load balancing.

    • Configuring storage classes (e.g., NFS) for persistent storage.

    • Setting up monitoring, logging, and alerting tools (Prometheus, Grafana, Fluentd, etc.).

  • Establishing secure access:

    • Installing and configuring Wireguard VPN for secure cluster access.

    • Ensuring only authorized users can access the infrastructure.

  • Importing clusters into management tools (e.g., Rancher) for centralized administration.

  • Internal interface: On the same internal network as all other nodes, with internet access.

  • Wildcard SSL Certificate for the Inji K8s Cluster

    • A valid wildcard SSL certificate for the domain used to access the inji Kubernetes cluster.

    • This certificate must be stored inside the Nginx server VM for the inji cluster.

    • For example, a domain like *.sandbox.xyz.net could serve as the corresponding example.

  • All the VM's should have stable internet connectivity for docker image download (in case of local setup ensure to have a locally accessible docker registry).

  • Maps to: Private IP of Nginx server (Observation cluster)

  • Purpose: Administrative IAM tool (Keycloak) for Kubernetes administration.

  • sandbox.xyz.net

    • Maps to: Private IP of Nginx server (MOSIP cluster)

    • Purpose: Index page for links to MOSIP environment dashboards (not for production/UAT use).

  • api-internal.sandbox.xyz.net

    • Maps to: Private IP of Nginx server (MOSIP cluster)

    • Purpose: Internal APIs, accessible privately over Wireguard.

  • api.sandbox.xyz.net

    • Maps to: Public IP of Nginx server (MOSIP cluster)

    • Purpose: Publicly exposed APIs.

  • iam.sandbox.xyz.net

    • Maps to: Private IP of Nginx server (MOSIP cluster)

    • Purpose: OpenID Connect server (default: Keycloak) for service access, accessible over Wireguard.

  • postgres.sandbox.xyz.net

    • Maps to: Private IP of Nginx server (MOSIP cluster)

    • Purpose: Points to Postgres server, connect via port forwarding over Wireguard.

  • injiweb.sandbox.xyz.net

    • Maps to: Public IP of Nginx server (MOSIP cluster)

    • Purpose: Public access to Inji Web portal.

  • injicertify.sandbox.xyz.net

    • Maps to: Public IP of Nginx server (MOSIP cluster)

    • Purpose: Public access to Inji Certify portal.

  • injiverify.sandbox.xyz.net

    • Maps to: Public IP of Nginx server (MOSIP cluster)

    • Purpose: Public access to Inji Verify portal.

  • Run env-check-setup.yaml to check if cluster nodes are fine and doesn't have known issues in it.
    • cd $K8_ROOT/rancher/on-prem

    • Create copy of hosts.ini.sample as hosts.ini and update the required details for MOSIP k8 cluster nodes.

    • cp hosts.ini.sample hosts.ini

    Note:

    • Ensure you are inside on-prem directory as mentioned above.

    • ansible_host : internal IP of nodes. eg. 100.10.20.56, 100.10.20.57 ...

    • ansible_user : user to be used for installation. In this ref-implementation we use Ubuntu user.

    • ansible_ssh_private_key_file : path to pem key for ssh to wireguard server. eg. ~/.ssh/nodes-ssh.pem

    • ansible-playbook -i hosts.ini env-check-setup.yaml

    • This ansible checks if localhost mapping ia already present in /etc/hosts file in all cluster nodes, if not it adds the same.

  • Setup passwordless ssh into the cluster nodes via pem keys. (Ignore if VM’s are accessible via pem’s).

    • Generate keys on your PC

      • ssh-keygen -t rsa

    • Copy the keys to remote rancher node VM’s:

      • ssh-copy-id <remote-user>@<remote-ip>

    • SSH into the node to check password-less SSH

      • ssh -i ~/.ssh/<your private key> <remote-user>@<remote-ip>

    • Rancher UI : (deployed in Observation K8 cluster)

  • Open ports and Install docker on Inji K8 Cluster node VM’s.

    • cd $K8_ROOT/mosip/on-prem

    • create copy of hosts.ini.sample as hosts.ini and update the required details for wireguard VM.

      • cp hosts.ini.sample hosts.ini

    • Update vpc_ip variable in ports.yaml with vpc CIDR ip to allow access only from machines inside same vpc.

      Note:

      • CIDR Range will be shared by the Infra provider.

      • Make sure all the nodes are covered in the provided CIDR range. (nginx server, K8 cluster nodes for observation as well as mosip).

    • execute ports.yml to enable ports on VM level using ufw:

      • ansible-playbook -i hosts.ini ports.yaml

    • Disable swap in cluster nodes. (Ignore if swap is already disabled)

      • ansible-playbook -i hosts.ini swap.yaml

      Caution: Always verify swap status with swapon --show before running the playbook to avoid unnecessary operations.

    • execute docker.yml to install docker and add user to docker group:

      • ansible-playbook -i hosts.ini docker.yaml

  • Creating RKE Cluster Configuration file

    • rke config

    • Command will prompt for nodal details related to cluster, provide inputs w.r.t below mentioned points:

      • SSH Private Key Path :

      • Number of Hosts:

      • SSH Address of host :

      • SSH User of host :

      • Make all the nodes Worker host by default.

      • To create an HA cluster, specify more than one host with role Control Plane and etcd host.

    • Network Plugin Type : Continue with canal as default network plugin.

    • For rest for other configuration opt the required or default value.

  • As result of rke config command cluster.yml file will be generated inside same directory, update the below mentioned fields:

    • nano cluster.yml

    • Remove the default Ingress install

    • Update the name of the kubernetes cluster in cluster.yaml

    • For production deplopyments edit the cluster.yml, according to this .

  • Setup up the cluster:

    • Once cluster.yml is ready, you can bring up the kubernetes cluster using simple command.

      • This command assumes the cluster.yml file is in the same directory as where you are running the command.

        • rke up

      • The last line should read Finished building Kubernetes cluster successfully to indicate that your cluster is ready to use.

      • Copy the kubeconfig files

    • To access the cluster using kubeconfig file use any one of the below method:

    • cp $HOME/.kube/<cluster_name>_config $HOME/.kube/config

    Alternatively

  • Test cluster access:

    • kubectl get nodes

    • Command will result in details of the nodes of the rancher cluster.

  • Save Your files

    • Save a copy of the following files in a secure location, they are needed to maintain, troubleshoot and upgrade your cluster.:

      • cluster.yml: The RKE cluster configuration file.

      • kube_config_cluster.yml: The for the cluster, this file contains credentials for full access to the cluster.

      • cluster.rkestate: The , this file contains credentials for full access to the cluster.

  • kubectl get svc -n istio-system

  • Note: Response should contain service names as mentioned below.

    • istio-ingressgateway: external facing istio service.

    • istio-ingressgateway-internal: internal facing istio service.

    • istiod: Istio daemon for replicating the changes to all envoy filters.

    ansible_user : user to be used for installation, in this ref-impl we use Ubuntu user.

  • ansible_ssh_private_key_file : path to pem key for ssh to wireguard server. eg. ~/.ssh/wireguard-ssh.pem .

  • Make sure Kubeconfig file is set correctly to point to required mosip cluster.

  • Enable firewall with required ports:

    The default challenge HTTP is changed to DNS challenge, as we require wildcard certificates.

  • Create a DNS record in your DNS service of type TXT with host _acme-challenge.sandbox.xyz.net, with the string prompted by the script.

  • Wait for a few minutes for the above entry to get into effect. ** Verify**: host -t TXT _acme-challenge.sandbox.mosip.net

  • Press enter in the certbot prompt to proceed.

  • Certificates are created in /etc/letsencrypt on your machine.

  • Certificates created are valid for 3 months only.

  • Wildcard SSL certificate renewal. This will increase the validity of the certificate for next 3 months.

  • file:

    SSL cert path

  • SSL key path

  • Cluster node ip's (comma seperated no whitespace)

  • Post installation check

    • sudo systemctl status nginx

    • Steps to uninstall nginx (incase it is required) sudo apt purge nginx nginx-common

    • DNS mapping: Once nginx server is installed sucessfully, create DNS mapping for observation cluster related domains as mentioned in DNS requirement section.

  • Incase skipping execute below commands to install monitoring crd as the same is required by mosip services:
    .

    Monitoring should be deployed which includes deployment of prometheus, grafana and alertmanager.

  • Create slack incoming webhook.

  • After setting slack incoming webhook update slack_api_url and slack_channel_name in alertmanager.yml.

    • cd $K8_ROOT/monitoring/alerting/

    • nano alertmanager.yml

    • Update:

  • Update Cluster_name in patch-cluster-name.yaml.

  • cd $K8_ROOT/monitoring/alerting/

  • nano patch-cluster-name.yaml

  • Update:

  • Configure Rancher FluentD
    • Create clusteroutput

      • kubectl apply -f clusteroutput-elasticsearch.yaml

    • Start clusterFlow

      • kubectl apply -f clusterflow-elasticsearch.yaml

    • Install elasticsearch, kibana and Istio addons\

    • set min_age in elasticsearch-ilm-script.sh and execute the same.

    • min_age : is the minimum no. of days for which indices will be stored in elasticsearch.

    • Inji provides set of Kibana Dashboards for checking logs and throughputs.

      • Brief description of these dashboards are as follows:

        • contains the logstash Index Pattern required by the rest of the dashboards.

        • contains a Search dashboard which shows only the error logs of the services, called

  • Import dashboards:

    • cd K8_ROOT/logging

    • ./load_kibana_dashboards.sh ./dashboards <cluster-kube-config-file>

  • View dashboards

  • Inji Verify

    Note: Before running the Postgres install script, update the POSTGRES_HOST value in install.sh with the correct PostgreSQL host.

  • Config Server Secerts

  • Config Server

  • Artifactory

  • Redis Installation

  • Health Checks: Verifies all pods are running and healthy

    Pods Running and Healthy
    • All Inji Certify-related pods are in Running or Completed status.

    • Verified via kubectl get pods -n inji-certify

  • Services Registered and Reachable

    • Microservices register successfully with the config-server.

    • All services are listed and accessible within the cluster:kubectl get services -n inji-certify

  • Database Initialized Correctly

    • PostgreSQL tables and seed data are created as per init_values.yaml.

    • No database errors during initialization.

  • Ingress Configured Properly

    • Istio ingress rules are correctly applied.

    • Services are reachable externally through the configured gateway.

  • External Access Verified

    • Health endpoint responds successfully curl -k https://injicertify.sandbox.xyz.net/health

    • HTTP 200 response received.

  • Config Server Secrets

  • Config Server Installation

  • Artifactory Installation

    • For installation instructions, refer to the artifactory installation guide.

    • Artifactory is used to store, manage, and distribute build artifacts (such as Docker images, Helm charts, binaries, and other deployment packages) required by the Inji stack and related services. Installing Artifactory ensures that all deployment dependencies are securely managed and easily accessible during automated deployments and upgrades.

    • Why install Artifactory?

      • Centralizes storage of deployment artifacts for consistency and reliability.

      • Enables version control and traceability of all build packages.

      • Facilitates automated CI/CD pipelines by providing a secure and scalable repository.

      • Supports integration with Kubernetes, Docker, and Helm for seamless deployments.

  • Redis Installation

  • Redis Installed and Running
    • Redis pod is running and healthy.

    • Verified via:kubectl get pods -n mimoto

  • Database Initialized Correctly

    • PostgreSQL tables and seed data are created as per values.yaml.

    • No database errors during initialization.

  • Partner Onboarder Installed and Functional

    • Partner Onboarder module installed without errors.

    • Reports are successfully generated and visible in S3 or NFS storage.

    • Correct S3 bucket configuration provided during installation.

  • Mimoto Installed Successfully

    • Database host and port are correctly configured in values.yaml.

    • SSL certificate handling works correctly (self-signed or public domain).

    • All Mimoto pods are running and healthy.

  • Onboarding New Issuer for VCI

    • certs/oidckeystore.p12 is correctly created with all required keys and aliases.

    • Issuer onboarding can be verified through logs or API calls.

  • Pods Running and Healthy

    • All Mimoto-related pods are in Running or Completed status.

    • Verified via kubectl get pods -n mimoto

  • Services Registered and Reachable

    • All microservices are listed and accessiblekubectl get services -n mimoto

  • External Access Verified

    • Health endpoint responds successfully curl -k https://<your-mimoto-domain>/health

    • HTTP 200 response received.

  • Postgres Installation
  • Config Server Installation

  • Object store installation

    • Note: Before running the minio install script, update the EXTERNAL_HOST value in install.sh with the correct minio host.

  • Note: Before running the Postgres install script, update the POSTGRES_HOST value in install.sh with the correct PostgreSQL host.

    Health Checks: Verifies all pods are running and healthy

    • All Inji Verify pods are in Running or Completed status.

    • Verified via kubectl get pods -n inji-verify

  • Services Registered and Reachable

    • Microservices are registered with the config-server.

    • All services are listed and accessible within the cluster kubectl get services -n inji-verify

  • Database Initialized Correctly

    • PostgreSQL tables and seed data are created as per init_values.yaml.

    • No database errors during initialization.

  • Ingress Configured Properly

    • Istio ingress rules are correctly applied.

    • Services are reachable externally through the configured gateway.

  • External Access Verified

    • Health endpoint responds successfully curl -k https://injiverify.sandbox.xyz.net/health

    • HTTP 200 response received.

  • Service Management Functional

    • Ability to restart services using ./restart-all.sh.

    • Ability to delete services using ./delete-all.sh.

  • Full Stack Deployment (with eSignet)

    Certify, Web Wallet, Verify, Mimoto

    Countries using MOSIP eSignet for authentication

    Full Stack Deployment (without eSignet / own Auth Server)

    Certify, Web Wallet, Verify, Mimoto

    Countries using their own authentication servers

    Module-Specific Deployment (with eSignet)

    Selected modules based on requirement

    Certify + Verify: Issuance & verification focus

    Module-Specific Deployment (without eSignet)

    Selected modules based on requirement

    Inji Stack Deployment
    Introduction
    Prerequisites
    Base Infrastructure Setup
    Core Infrastructure Configuration
    Inji Certify
    Inji Web Wallet
    Mimoto(backend for Wallet)
    Ansible
    kubectl
    helm
    rke
    1.3.10
    Istioctl
    Wireguard Administrator's Guide
    steps
    Tools and Utilities
    Prerequisites
    here
    Istio
    Rancher Fluentd
    conf-secret installation
    Inji Certify
    Inji Web Wallet
    Mimoto(backend for Wallet)
    released version
    above
    Base Infrastructure
    Core Infrastructure
    Inji Stack ConfigMap
    Postgres Installation
    ReadMe
    MOSIP Community
    Base Infrastructure
    Core Infrastructure
    Postgres Installation
    ReadMe
    MOSIP Community
    released version
    Base Infrastructure
    Core Infrastructure
    inji-stack-config ConfigMap
    Config Server Secrets
    ReadMe
    MOSIP Community
    released version
    above
    Base Infrastructure
    Core Infrastructure
    inji-stack-config ConfigMap
    Postgres Installation
    ReadMe
    here
    MOSIP Community

    Web Wallet + Mobile Wallet: Credential holding/presentation

    sudo docker run -d \
    --name=wireguard \
    --cap-add=NET_ADMIN \
    --cap-add=SYS_MODULE \
    -e PUID=1000 \
    -e PGID=1000 \
    -e TZ=Asia/Calcutta \
    -e PEERS=30 \
    -p 51820:51820/udp \
    -v /home/ubuntu/wireguard/config:/config \
    -v /lib/modules:/lib/modules \
    --sysctl="net.ipv4.conf.all.src_valid_mark=1" \
    --restart unless-stopped \
    ghcr.io/linuxserver/wireguard
    peer1 :   peername
    peer2 :   xyz
    ingress:
    provider: none
    helm repo add bitnami https://charts.bitnami.com/bitnami
    helm repo add mosip https://mosip.github.io/mosip-helm
    ansible-playbook -i hosts.ini docker.yaml
    sudo systemctl start wg-quick@wg0
    sudo systemctl status wg-quick@wg0
    cd $K8_ROOT/nfs
    cp hosts.ini.sample hosts.ini
    
    kubectl config view
      ansible-playbook -i ./hosts.ini nfs-ports.yaml
    ssh -i ~/.ssh/nfs-ssh.pem ubuntu@<internal ip of nfs server>
    
    git clone https://github.com/mosip/k8s-infra -b v1.2.0.1
    cd /home/ubuntu/k8s-infra/nfs/
    
    sudo ./install-nfs-server.sh
    
    cd $K8_ROOT/nfs/ <!-- mosip or inji -->
    ./install-nfs-client-provisioner.sh
    Note: 
    
    Script prompts for:
    * NFS Server: NFS server ip for persistence.
    * NFS Path : NFS path for storing the persisted data. eg. /srv/nfs/mosip/
    kubectl -n nfs get deployment.apps/nfs-client-provisioner 
      kubectl get storageclass
      NAME                 PROVISIONER                            RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
      longhorn (default)   driver.longhorn.io                     Delete          Immediate           true                   57d
      nfs-client           cluster.local/nfs-client-provisioner   Delete          Immediate           true                   40s
      sudo apt update -y
      sudo apt-get install software-properties-common -y
      sudo add-apt-repository ppa:deadsnakes/ppa
      sudo apt-get update -y
      sudo apt-get install python3.8 -y
      sudo apt install letsencrypt -y
      sudo apt install certbot python3-certbot-nginx -y
      nano hosts.ini
    [nginx]
    node-nginx ansible_host=<internal ip> ansible_user=root ansible_ssh_private_key_file=<pvt .pem file>
      ansible-playbook -i hosts.ini mosip/on-prem/nginx/nginx_ports.yaml
    
      cd $K8_ROOT/mosip/on-prem/nginx
      sudo ./install.sh
      cd $K8_ROOT/utils/httpbin
      ./install.sh
    curl https://api.sandbox.xyz.net/httpbin/get?show_env=true
    curl https://api-internal.sandbox.xyz.net/httpbin/get?show_env=true
     ingressNginx:
     enabled: false
    spec:
    externalLabels:
    cluster: <YOUR-CLUSTER-NAME-HERE>
    cd $K8_ROOT/monitoring/alerting/
    ./install.sh
    kubectl apply -f - <<EOF
    ## The data here is of generic interest to modules in different namespaces hence this is marked as inji-stack-config.
    ## Replace your domain names here.
    ## api-host:  External public access. (Typically required only in production rollouts).
    ## api-internal-host: Internal secure access over Wireguard.
    ## By default all domains and subdomains listed below point to api-internal-host. Modify this default behavior ONLY in production rollout as follows:
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: inji-stack-config
      namespace: default
    data:
      inji-version: develop
      installation-domain: sandbox.xyz.net
      api-host: api.sandbox.xyz.net
      iam-external-host: iam.sandbox.xyz.net
      api-internal-host: api-internal.sandbox.xyz.net
      injiweb-host: injiweb.sandbox.xyz.net
      injiverify-host: injiverify.sandbox.xyz.net
      injicertify-host: injicertify.sandbox.xyz.net
      inji-postgres-host: postgres.sandbox.xyz.net
      esignet-mock-host: esignet-mock.sandbox.xyz.net
      mosipid-identity-esignet-host: esignet-mosipid.sandbox.xyz.net
      esignet-insurance-host: esignet-insurance.sandbox.xyz.net
      minio-host: minio.sandbox.mosip.net
    EOF
    cd /path/to/config-server/
    touch values.yaml
      touch values.yaml
    gitRepo:
      uri: https://github.com/mosip/inji-config
      version: release-0.8.x
      ## Folders within the base repo where properties may be found.
      searchFolders: ""
      private: false
      ## User name of user who has access to the private repo. Ignore for public repo
      username: ""
      token: ""
    ```
    ```
    envVariables:
      - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_API_PUBLIC_HOST
        valueFrom:
          configMapKeyRef:
            name: inji-stack-config
            key: api-host
        enabled: true
    
      - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_API_INTERNAL_HOST
        valueFrom:
          configMapKeyRef:
            name: inji-stack-config
            key: api-internal-host
        enabled: true
    
      - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_PARTNER_CRYPTO_P12_PASSWORD
        valueFrom:
          secretKeyRef:
            key: mosip-partner-crypto-p12-password
            name: conf-secrets-various
        enabled: false
    
      - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MPARTNER_DEFAULT_MOBILE_SECRET
        valueFrom:
          secretKeyRef:
            key: mpartner_default_mobile_secret
            name: keycloak-client-secrets
        enabled: false
    
      - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_KEYCLOAK_INTERNAL_URL
        valueFrom:
          configMapKeyRef:
            name: keycloak-host
            key: keycloak-internal-url
        enabled: false
    
      - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_KEYCLOAK_EXTERNAL_URL
        valueFrom:
          configMapKeyRef:
            name: keycloak-host
            key: keycloak-external-url
        enabled: false
    
      - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_KEYCLOAK_INTERNAL_HOST
        valueFrom:
          configMapKeyRef:
            name: keycloak-host
            key: keycloak-internal-host
        enabled: false
    
      - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_KEYCLOAK_EXTERNAL_HOST
        valueFrom:
          configMapKeyRef:
            name: keycloak-host
            key: keycloak-external-host
        enabled: false
    
      - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_DB_DBUSER_PASSWORD
        valueFrom:
          secretKeyRef:
            name: db-common-secrets
            key: db-dbuser-password
        enabled: false
    
      - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_S3_ACCESSKEY
        valueFrom:
          configMapKeyRef:
            name: s3
            key: s3-user-key
        enabled: false
    
      - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_S3_REGION
        valueFrom:
          configMapKeyRef:
            name: s3
            key: s3-region
        enabled: false
    
      - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_S3_SECRETKEY
        valueFrom:
          secretKeyRef:
            name: s3
            key: s3-user-secret
        enabled: false
    
      - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_ESIGNET_HOST
        valueFrom:
          configMapKeyRef:
            key: esignet-host
            name: inji-stack-config
        enabled: false
        
      - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_ESIGNET_MOCK_HOST
        valueFrom:
          configMapKeyRef:
            key: esignet-mock-host
            name: inji-stack-config
        enabled: true
    
      - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIPID_IDENTITY_ESIGNET_HOST
        valueFrom:
          configMapKeyRef:
            key: mosipid-identity-esignet-host
            name: inji-stack-config
        enabled: false
    
      - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_ESIGNET_INSURANCE_HOST
        valueFrom:
          configMapKeyRef:
            key: esignet-insurance-host
            name: inji-stack-config
        enabled: false  
    
      - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_INJI_DATASHARE_HOST
        valueFrom:
          configMapKeyRef:
            key: inji-datashare-host
            name: inji-stack-config
        enabled: false
    
      - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_INJIWEB_HOST
        valueFrom:
          configMapKeyRef:
            key: injiweb-host
            name: inji-stack-config
        enabled: true
    
      - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_INJIVERIFY_HOST
        valueFrom:
          configMapKeyRef:
            key: injiverify-host
            name: inji-stack-config
        enabled: true
    
      - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_INJICERTIFY_HOST
        valueFrom:
          configMapKeyRef:
            key: injicertify-host
            name: inji-stack-config
        enabled: true
    
    ```
    
    * Create a file named `configserver.sh`:
    
    ```sh
      touch configserver.sh
    #!/bin/bash
    # Installs config-server
    ## Usage: ./install.sh [kubeconfig]
    
    if [ $# -ge 1 ] ; then
    export KUBECONFIG=$1
    fi
    
    NS=config-server
    CHART_VERSION=12.0.1
    
    read -p "Is conf-secrets module installed?(Y/n) " yn
    if [ $yn = "Y" ]; then read -p "Is values.yaml for config-server chart set correctly as part of Pre-requisites?(Y/n) " yn; fi
    if [ $yn = "Y" ]
    then
    echo Create $NS namespace
    kubectl create ns $NS
    
        # set commands for error handling.
        set -e
        set -o errexit   ## set -e : exit the script if any statement returns a non-true return value
        set -o nounset   ## set -u : exit the script if you try to use an uninitialised variable
        set -o errtrace  # trace ERR through 'time command' and other functions
        set -o pipefail  # trace ERR through pipes
    
        echo Istio label
        kubectl label ns $NS istio-injection=enabled --overwrite
        helm repo update
    
        UTIL_URL=https://raw.githubusercontent.com/mosip/mosip-infra/master/deployment/v3/utils/copy_cm_func.sh
        COPY_UTIL=./copy_cm_func.sh
        DST_NS=config-server # DST_NS: Destination namespace
        wget -q $UTIL_URL -O copy_cm_func.sh && chmod +x copy_cm_func.sh
        echo Copy configmaps and secrets
        $COPY_UTIL configmap inji-stack-config default $NS
        if kubectl -n conf-secrets get secret conf-secrets-various >/dev/null 2>&1; then
            $COPY_UTIL secret conf-secrets-various conf-secrets $NS
        else
            echo "Skipping copy, conf-secrets-various secret not found"
        fi
        if kubectl -n s3 get configmap s3 >/dev/null 2>&1 && kubectl -n s3 get secret s3 >/dev/null 2>&1; then
            $COPY_UTIL configmap s3 s3 $NS
            $COPY_UTIL secret s3 s3 $NS
        else
            echo "Skipping copy, s3 config or secret not found"
        fi
    
        echo Installing config-server
        helm -n $NS install config-server mosip/config-server -f values.yaml --wait --version $CHART_VERSION
        echo Installed Config-server.
    else
    echo Exiting the MOSIP installation. Please meet the pre-requisites and than start again.
    kill -9 `ps --pid $$ -oppid=`; exit
    fi
        chmod +x configserver.sh
        ./configserver.sh
    # On your local machine (connected to K8s cluster via kubectl)
    git clone https://github.com/mosip/inji-certify.git
    cd inji-certify/deploy
    cd redis
    ./install.sh
    cd ../db_scripts
    # Update init_values.yaml with your database configuration, update the necessary parameters for your PostgreSQL database. Provide path or how to navigate to this yaml in cloned repo.
    ./init_db.sh
    cd ../inji-certify
    ./install.sh
    kubectl get pods -n inji-certify
    kubectl get services -n inji-certify
    curl -k https://injicertify.sandbox.xyz.net/health
    # On your local machine (connected to K8s cluster via kubectl)
    git clone https://github.com/mosip/mimoto.git
    cd mimoto/deploy
    cd deploy/redis
    ./install.sh
    cd ../../db_scripts
    ./init_db.sh
    cd ../partner-onboarder
    ./install.sh
    cd ../deploy/mimoto
    ./install.sh
    kubectl get pods -n mimoto
    kubectl get services -n mimoto
    curl -k https://<your-mimoto-domain>/health
    git clone https://github.com/mosip/inji-web.git
    cd inji-web/deploy
    default,inji-default,standalone
    cd datashare
    ./install.sh
    cd ..
    cd injiweb
    ./install.sh
    kubectl get pods -n injiweb
    kubectl get services -n injiweb
    curl -k https://injiweb.sandbox.xyz.net/health
    git clone https://github.com/mosip/inji-verify.git
    cd inji-verify/deploy
    cd ../db_scripts
    # Update init_values.yaml with your database configuration, update the necessary parameters for your PostgreSQL database.
    ./init_db.sh
    cd ../deploy
    ./install-all.sh
    kubectl get pods -n inji-verify
    kubectl get services -n inji-verify
    curl -k https://injiverify.sandbox.xyz.net/health
    ./delete-all.sh
    ./restart-all.sh
    export INJI_ROOT=<location of mosip directory>
    export K8_ROOT=$INJI_ROOT/k8s-infra
    export INFRA_ROOT=$INJI_ROOT/mosip-infra
    helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
    helm repo update
    kubectl create ns cattle-monitoring-system
    helm -n cattle-monitoring-system install rancher-monitoring-crd mosip/rancher-monitoring-crd
    Update the allowed IP's to subnets CIDR ip . e.g. 10.10.20.0/23
  • Share the updated peer.conf with respective peer to connect to wireguard server from Personel PC.

  • MOSIP Error Logs
    dashboard.
  • 03-service-logs.ndjson contains a Search dashboard which show all logs of a particular service, called Inji Service Logs dashboard.

  • 04-insight.ndjson contains dashboards which show insights into Inji processes, like the number of UINs generated (total and per hr), the number of Biometric deduplications processed, number of packets uploaded etc, called Inji Insight dashboard.

  • 05-response-time.ndjson contains dashboards which show how quickly different MOSIP Services are responding to different APIs, over time, called Response Time dashboard.

  • RKE Cluster Hardening Guide
    Kubeconfig file
    Kubernetes Cluster State file
    01-logstash.ndjson
    02-error-only-logs.ndjson

    Note:

    Ignored scenarios are not related to particular use cases and 34 scenarios are known issues can be tracked from , ,

    Is host (<node1-ip>) a Control Plane host (y/n)? [y]: y
    Is host (<node1-ip>) a Worker host (y/n)? [n]: y
    Is host (<node1-ip>) an etcd host (y/n)? [n]: y
    `cluster_name: sandbox-name`
    INFO[0000] Building Kubernetes cluster
    INFO[0000] [dialer] Setup tunnel for host [10.0.0.1]
    INFO[0000] [network] Deploying port listener containers
    INFO[0000] [network] Pulling image [alpine:latest] on host [10.0.0.1]
    ...
    INFO[0101] Finished building Kubernetes cluster successfully
    cp kube_config_cluster.yml $HOME/.kube/<cluster_name>_config
    chmod 400 $HOME/.kube/<cluster_name>_config
    * `export KUBECONFIG="$HOME/.kube/<cluster_name>_config`
    global:
    resolve_timeout: 5m
    slack_api_url: <YOUR-SLACK-API-URL>
    ...
    slack_configs:
    - channel: '<YOUR-CHANNEL-HERE>'
    send_resolved: true
    cd $K8_ROOT/logging
    ./intall.sh
     cd $K8_ROOT/logging
    
    ./elasticsearch-ilm-script.sh
    INJICERT-681
    INJICERT-1118
    INJICERT-1176