Skip to content

baseid-eidas

The eidas crate provides EU eIDAS 2.0 compliance types, implementing the Person Identification Data (PID) model from the Architecture Reference Framework, qualified electronic attestations of attributes, level of assurance mapping, and ETSI TS 119 612 trust lists.

  • EU PID data modelEuPid struct with mandatory attributes (family_name, given_name, birth_date) and 9 optional attributes per the ARF specification, with field-length validation
  • QEAA attestationsAttestation type with three trust tiers: unqualified EAA, EAA from QTSP, and fully qualified QEAA with legal effect
  • Level of Assurance mapping — bidirectional mapping between eIDAS LoA strings (Low/Substantial/High) and baseid-core AssuranceLevel
  • Trust listsInMemoryTrustList implementing ETSI TS 119 612 with service type classification (PID Provider, QTSP Signature/Seal, EAA/QEAA Issuer, Wallet Provider)
  • Service status tracking — Active/Suspended/Revoked/Deprecated status per trust list entry, with queries filtering to active services only
use baseid_eidas::pid::{EuPid, EuPidOptional, EuPidMetadata};
// Create an EU PID with mandatory + optional attributes
let pid = EuPid {
family_name: "Mustermann".to_string(),
given_name: "Erika".to_string(),
birth_date: "1984-01-26".to_string(),
optional: EuPidOptional {
age_over_18: Some(true),
nationality: Some("DE".to_string()),
resident_country: Some("DE".to_string()),
..Default::default()
},
metadata: EuPidMetadata {
issuance_date: "2025-01-01".to_string(),
expiry_date: "2030-01-01".to_string(),
issuing_authority: "Bundesdruckerei GmbH".to_string(),
issuing_country: "DE".to_string(),
},
};
// Validate field lengths (max 150 chars per spec)
pid.validate().unwrap();
use baseid_eidas::trust_list::{
InMemoryTrustList, TrustedServiceProvider, TrustService,
TrustServiceType, TrustServiceStatus,
};
let mut tl = InMemoryTrustList::new();
tl.add_provider(TrustedServiceProvider {
name: "German PID Provider".to_string(),
country: "DE".to_string(),
services: vec![TrustService {
service_type: TrustServiceType::PidProvider,
status: TrustServiceStatus::Active,
name: "PID Issuance".to_string(),
service_digital_identity: Some("did:web:pid.bdr.de".to_string()),
}],
});
// Query active services by type
let pid_providers = tl.find_active_services(TrustServiceType::PidProvider);
// Check if an identity is trusted for a service type
assert!(tl.is_trusted("did:web:pid.bdr.de", TrustServiceType::PidProvider));
// Filter providers by country
let de_providers = tl.providers_by_country("DE");
use baseid_eidas::loa::{from_eidas_loa, to_eidas_loa};
use baseid_core::types::AssuranceLevel;
let level = from_eidas_loa("high").unwrap();
assert_eq!(level, AssuranceLevel::High);
let name = to_eidas_loa(AssuranceLevel::Substantial);
assert_eq!(name, "Substantial");
TierDescription
EaaUnqualified EAA — no formal trust requirements
EaaFromQtspEAA from a Qualified Trust Service Provider
QeaaFully qualified — legal effect equivalent to paper attestations
TypeDescription
PidProviderIssues Person Identification Data
QtspSignatureQualified electronic signatures
QtspSealQualified electronic seals
EaaIssuerElectronic Attestation of Attributes
QeaaIssuerQualified Electronic Attestation of Attributes
WalletProviderEUDI Wallet provider
  • baseid-coreAssuranceLevel type used in LoA mapping
  • baseid-haip — HAIP profile for eIDAS 2.0 EUDI Wallet interoperability
  • baseid-mdl — mDL format used as mdoc carrier for PID credentials
  • baseid-oid4vci — credential issuance protocol for PID distribution