@agenticprimitives/privacy-credentials

中文文档
0.0.0-alpha.21发布于 2026/10/26MITTypeScriptES Module零依赖近 30 天下载 2496

Privacy presentation layer (spec 305 / G-6): selectively-disclosed SD-JWT VC presentations, pairwise relationship pseudonyms, spec-304 issuer-key facet verification. One suite per request, never a fallback ladder.

原始使用文档
文档目录3 节
  1. What it does
  2. Design rules
  3. Status

@agenticprimitives/privacy-credentials

Part of Agentic Primitives — the open-source trust substrate for agentic applications: identity that can sign, authority checked at act time, evidence the owner carries. Developer kit · All packages

The privacy presentation layer — turns vault-held credentials into selectively-disclosed, pairwise-pseudonymous presentations a verifier can check without learning more than the transaction requires.

Spec: specs/305-privacy-credentials.md · Issuer keys: specs/304-issuer-key-facets.md · Doctrine: the ADR-0010 amendment ("the Smart Agent address is the accountability root, not the default presentation identifier") and the alignment audit §6.2 (eIDAS 2.0 Art 5a makes selective disclosure + unlinkability EU market-access requirements).

What it does

import {
  issueSdJwt, presentSdJwt, verifyPresentation,
  generateHolderSecret, pairwiseHandle,
  createIssuerKeyResolver,
} from '@agenticprimitives/privacy-credentials';

// ISSUER (an org SA with a spec-304 facet key; sign = injected KMS ES256):
const credential = await issueSdJwt({
  issuer: orgCaip10, keyId: 'issuer-key:sd-jwt:2026-07', vct: 'ap:procurement-delegate',
  sdClaims: { authorizedRole: 'procurement.delegate', counterpartyClass: 'approved.vendor' },
  holderPublicKeyJwk, sign: kmsEs256Signer,
});
// → into the holder's vault.

// HOLDER (presents to ONE verifier, revealing ONE claim):
const handle = await pairwiseHandle(holderSecret, 'vendor.example'); // stable HERE, unlinkable elsewhere
const payload = await presentSdJwt({
  sdJwt: credential, discloseClaims: ['authorizedRole'],
  audience: request.audience, nonce: request.nonce, holderSign,
});

// VERIFIER (no AP runtime needed — chain checks injected):
const resolveIssuerKey = createIssuerKeyResolver(lookupSignedFacet, {
  verifySaSignature,   // UniversalSignatureValidator read
  checkAttestation,    // AttestationRegistry liveness read
});
const res = await verifyPresentation(
  { type: 'PrivatePresentationV1', suite: 'sd-jwt', relationshipHandle: handle, payload },
  request,
  { resolveIssuerKey },
);
// res.claims === { authorizedRole: 'procurement.delegate' } — and nothing else.

The verifier learns: the claim it asked for, that a custody-governed Smart Agent issued it (via the spec-304 facet binding), and that the presenter holds the credential (key binding bound to this audience + nonce). It does not learn the holder's SA, the other claims, or anything that links this presentation to the same holder's presentations elsewhere.

Design rules

  • One suite per proof request (ADR-0013): sd-jwt (selective disclosure of claim values under a pairwise pseudonym) and openac-sd-jwt-p256 (zero-knowledge predicates over the same credential — no value, no credential, no issuer signature and no device key reach the verifier); bbs-bls12381-g2, anoncreds-v1 and zk-predicate are reserved enum slots that reject, never a fallback ladder.
  • Predicates reject on sd-jwt — that suite can't prove amount <= limit; refusing beats silently revealing the field. A request with predicates names openac-sd-jwt-p256, whose proving backend is injected (ProvingBackendPort; @agenticprimitives/privacy-credentials-openac binds openac-sdk).
  • One visit per audience: a presentation may carry a nullifier (deriveNullifier), deterministic per device key and audience, which the verifier's store consumes. Its grade is asserted — OpenAC emits no nullifier in-circuit — and the receipt says so.
  • Issuer facet first: a revoked or unresolvable spec-304 facet fails the whole presentation.
  • Dependency-free (WebCrypto only — Node ≥ 20 and workerd); chain reads and KMS signing are injected ports.

Status

Live (zkID Z1–Z6, spec 444): the sd-jwt suite with pairwise pseudonyms; the openac-sd-jwt-p256 predicate suite over an injected proving port; spec-304 issuer facets resolved and re-verified through the chain; nullifiers; status presentations against the issuer's live-credential row (@agenticprimitives/estate-projection). A federation door admits a nameless visitor on "over 18 and a member of your organization", with a credential the organization's own agent issued and a device key the key service holds. Reserved: BBS, AnonCreds and an in-circuit nullifier.

版本与发布记录

@agenticprimitives/privacy-credentials 共发布 21 个版本,首次发布于 2026/07/14;过去 12 个月发布了 21 个版本。

版本发布日期距今
0.0.0-alpha.21latest2026/10/2612 天前
0.0.0-alpha.202026/10/1722 天前
0.0.0-alpha.192026/10/1622 天前
0.0.0-alpha.182026/10/1622 天前
0.0.0-alpha.172026/10/1622 天前
0.0.0-alpha.162026/10/1622 天前

关于 @agenticprimitives/privacy-credentials 的常见问题

@agenticprimitives/privacy-credentials 是什么?

Privacy presentation layer (spec 305 / G-6): selectively-disclosed SD-JWT VC presentations, pairwise relationship pseudonyms, spec-304 issuer-key facet verification. One suite per request, never a fallback ladder.

如何安装 @agenticprimitives/privacy-credentials?

在项目目录运行 npm install @agenticprimitives/privacy-credentials,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@agenticprimitives/types(^1.0.0-alpha.45)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@agenticprimitives/privacy-credentials 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@agenticprimitives/privacy-credentials 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@agenticprimitives/privacy-credentials 可以商用吗?

@agenticprimitives/privacy-credentials 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@agenticprimitives/privacy-credentials 的下载量有多少?

根据 npm 官方下载统计,@agenticprimitives/privacy-credentials 在 2026/10/05 – 2026/11/03 这 30 天内被下载 2,496 次,日均约 83 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@agenticprimitives/privacy-credentials 还在维护吗?

最新版本 0.0.0-alpha.21 发布于 2026/10/26(12 天前);至今共发布 21 个版本,其中过去 12 个月发布了 21 个;首次发布于 2026/07/14。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。