Version:

did_status Enum

namespace keychainenum class did_status

Overview

The did_status enumeration represents the lifecycle status of W3C Decentralized Identifiers (DIDs) within the Keychain system.

Syntax

namespace keychain {
    enum class did_status {
        ACTIVE,     // DID is active and usable
        INACTIVE,   // DID is temporarily inactive
        REVOKED,    // DID has been permanently revoked
        EXPIRED,    // DID has expired
        SUSPENDED   // DID is suspended pending review
    };
}

Members

ACTIVE

Value: did_status::ACTIVE

DID is active and fully operational.

Characteristics: * Can be used for all cryptographic operations * All associated keys are valid * DID document is current and accessible * Default status for newly created DIDs

INACTIVE

Value: did_status::INACTIVE

DID is temporarily inactive but not revoked.

Characteristics: * Cryptographic operations may be restricted * Can be reactivated without creating new DID * Useful for temporary suspensions * Keys remain valid but usage is limited

REVOKED

Value: did_status::REVOKED

DID has been permanently revoked and cannot be used.

Characteristics: * All cryptographic operations are forbidden * Cannot be reactivated * Associated keys are invalidated * Terminal status - irreversible

EXPIRED

Value: did_status::EXPIRED

DID has reached its expiration date.

Characteristics: * No longer valid for new operations * Existing signatures may still verify * Can potentially be renewed * Automatic status change based on timestamps

SUSPENDED

Value: did_status::SUSPENDED

DID is suspended pending administrative review.

Characteristics: * Temporarily blocked from operations * Under investigation or review * Can be restored to ACTIVE status * Administrative action required

Usage

#include <keychain/keychain.h>

// Check DID status before operations
keychain::did identity_did = persona.get_did();
auto status = identity_did.get_status();

switch (status) {
    case keychain::did_status::ACTIVE:
        // Proceed with operation
        break;
    case keychain::did_status::INACTIVE:
        // Warn user and optionally reactivate
        std::cout << "DID is inactive" << std::endl;
        break;
    case keychain::did_status::REVOKED:
        throw std::runtime_error("Cannot use revoked DID");
    case keychain::did_status::EXPIRED:
        std::cout << "DID has expired, renewal required" << std::endl;
        break;
    case keychain::did_status::SUSPENDED:
        std::cout << "DID is suspended" << std::endl;
        break;
}

// Status management
void manage_did_lifecycle(keychain::did& did) {
    // Check expiration
    if (did.is_expired()) {
        // Status automatically becomes EXPIRED
        assert(did.get_status() == keychain::did_status::EXPIRED);
    }

    // Administrative actions
    if (security_violation_detected()) {
        did.suspend();  // Sets status to SUSPENDED
    }

    // Permanent revocation
    if (compromise_confirmed()) {
        did.revoke();   // Sets status to REVOKED
    }
}

Status Transitions

Valid transitions between DID statuses:

stateDiagram-v2
    [*] --> ACTIVE : DID created
    ACTIVE --> INACTIVE : Deactivate
    ACTIVE --> SUSPENDED : Suspend
    ACTIVE --> REVOKED : Revoke
    ACTIVE --> EXPIRED : Expires
    INACTIVE --> ACTIVE : Reactivate
    INACTIVE --> SUSPENDED : Suspend
    INACTIVE --> REVOKED : Revoke
    SUSPENDED --> ACTIVE : Restore
    SUSPENDED --> REVOKED : Revoke
    EXPIRED --> ACTIVE : Renew
    EXPIRED --> REVOKED : Revoke
    REVOKED --> [*] : Terminal

Operations by Status

Operation ACTIVE INACTIVE REVOKED EXPIRED SUSPENDED

Sign

YES

NO

NO

NO

NO

Encrypt

YES

NO

NO

NO

NO

Decrypt

YES

Limited

NO

Limited

NO

Verify (existing)

YES

YES

YES

YES

YES

Issue Credentials

YES

NO

NO

NO

NO

Update DID Document

YES

NO

NO

NO

NO

See Also

  • gateway - DID operations

  • {w3c-did-spec}[W3C DID Specification]

  • {did-methods}[DID Method Registry]