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

Encrypt

Decrypt

Limited

Limited

Verify (existing)

Issue Credentials

Update DID Document

See Also

  • gateway - DID operations

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

  • {did-methods}[DID Method Registry]