@attest-it/core 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -34,6 +34,8 @@ interface AttestItSettings {
34
34
  publicKeyPath: string;
35
35
  /** Path to the attestations file */
36
36
  attestationsPath: string;
37
+ /** Path to the seals file */
38
+ sealsPath: string;
37
39
  /** Default command to execute for attestation (can be overridden per suite) */
38
40
  defaultCommand?: string;
39
41
  /** Key provider configuration for signing attestations */
@@ -189,6 +191,7 @@ declare const configSchema: z.ZodObject<{
189
191
  maxAgeDays: z.ZodDefault<z.ZodNumber>;
190
192
  publicKeyPath: z.ZodDefault<z.ZodString>;
191
193
  attestationsPath: z.ZodDefault<z.ZodString>;
194
+ sealsPath: z.ZodDefault<z.ZodString>;
192
195
  defaultCommand: z.ZodOptional<z.ZodString>;
193
196
  keyProvider: z.ZodOptional<z.ZodObject<{
194
197
  type: z.ZodUnion<[z.ZodEnum<["filesystem", "1password"]>, z.ZodString]>;
@@ -229,6 +232,7 @@ declare const configSchema: z.ZodObject<{
229
232
  maxAgeDays: z.ZodDefault<z.ZodNumber>;
230
233
  publicKeyPath: z.ZodDefault<z.ZodString>;
231
234
  attestationsPath: z.ZodDefault<z.ZodString>;
235
+ sealsPath: z.ZodDefault<z.ZodString>;
232
236
  defaultCommand: z.ZodOptional<z.ZodString>;
233
237
  keyProvider: z.ZodOptional<z.ZodObject<{
234
238
  type: z.ZodUnion<[z.ZodEnum<["filesystem", "1password"]>, z.ZodString]>;
@@ -269,6 +273,7 @@ declare const configSchema: z.ZodObject<{
269
273
  maxAgeDays: z.ZodDefault<z.ZodNumber>;
270
274
  publicKeyPath: z.ZodDefault<z.ZodString>;
271
275
  attestationsPath: z.ZodDefault<z.ZodString>;
276
+ sealsPath: z.ZodDefault<z.ZodString>;
272
277
  defaultCommand: z.ZodOptional<z.ZodString>;
273
278
  keyProvider: z.ZodOptional<z.ZodObject<{
274
279
  type: z.ZodUnion<[z.ZodEnum<["filesystem", "1password"]>, z.ZodString]>;
@@ -441,6 +446,7 @@ declare const configSchema: z.ZodObject<{
441
446
  maxAgeDays: number;
442
447
  publicKeyPath: string;
443
448
  attestationsPath: string;
449
+ sealsPath: string;
444
450
  defaultCommand?: string | undefined;
445
451
  keyProvider?: {
446
452
  type: string;
@@ -501,6 +507,7 @@ declare const configSchema: z.ZodObject<{
501
507
  maxAgeDays: z.ZodDefault<z.ZodNumber>;
502
508
  publicKeyPath: z.ZodDefault<z.ZodString>;
503
509
  attestationsPath: z.ZodDefault<z.ZodString>;
510
+ sealsPath: z.ZodDefault<z.ZodString>;
504
511
  defaultCommand: z.ZodOptional<z.ZodString>;
505
512
  keyProvider: z.ZodOptional<z.ZodObject<{
506
513
  type: z.ZodUnion<[z.ZodEnum<["filesystem", "1password"]>, z.ZodString]>;
@@ -673,14 +680,17 @@ declare const policySchema: z.ZodObject<{
673
680
  maxAgeDays: z.ZodDefault<z.ZodNumber>;
674
681
  publicKeyPath: z.ZodDefault<z.ZodString>;
675
682
  attestationsPath: z.ZodDefault<z.ZodString>;
683
+ sealsPath: z.ZodDefault<z.ZodString>;
676
684
  }, "strict", z.ZodTypeAny, {
677
685
  maxAgeDays: number;
678
686
  publicKeyPath: string;
679
687
  attestationsPath: string;
688
+ sealsPath: string;
680
689
  }, {
681
690
  maxAgeDays?: number | undefined;
682
691
  publicKeyPath?: string | undefined;
683
692
  attestationsPath?: string | undefined;
693
+ sealsPath?: string | undefined;
684
694
  }>>;
685
695
  team: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
686
696
  name: z.ZodString;
@@ -738,6 +748,7 @@ declare const policySchema: z.ZodObject<{
738
748
  maxAgeDays: number;
739
749
  publicKeyPath: string;
740
750
  attestationsPath: string;
751
+ sealsPath: string;
741
752
  };
742
753
  team?: Record<string, {
743
754
  name: string;
@@ -761,6 +772,7 @@ declare const policySchema: z.ZodObject<{
761
772
  maxAgeDays?: number | undefined;
762
773
  publicKeyPath?: string | undefined;
763
774
  attestationsPath?: string | undefined;
775
+ sealsPath?: string | undefined;
764
776
  } | undefined;
765
777
  team?: Record<string, {
766
778
  name: string;
@@ -1070,7 +1082,7 @@ declare function parseOperationalContent(content: string, format: 'yaml' | 'json
1070
1082
  * The merge strategy prioritizes security-critical fields from the policy
1071
1083
  * configuration while combining operational fields from both sources:
1072
1084
  *
1073
- * - **Policy settings** (maxAgeDays, publicKeyPath, attestationsPath) are used as-is
1085
+ * - **Policy settings** (maxAgeDays, publicKeyPath, attestationsPath, sealsPath) are used as-is
1074
1086
  * - **Operational settings** (defaultCommand, keyProvider) are added from operational config
1075
1087
  * - **Team and gates** come exclusively from policy config
1076
1088
  * - **Suites and groups** come exclusively from operational config
@@ -1263,6 +1275,8 @@ interface KeyGenerationResult {
1263
1275
  publicKeyPath: string;
1264
1276
  /** Human-readable storage location description */
1265
1277
  storageDescription: string;
1278
+ /** Whether the private key is encrypted with a passphrase */
1279
+ encrypted?: boolean;
1266
1280
  }
1267
1281
  /**
1268
1282
  * Options for key generation via provider.
@@ -1273,6 +1287,8 @@ interface KeygenProviderOptions {
1273
1287
  publicKeyPath: string;
1274
1288
  /** Overwrite existing keys */
1275
1289
  force?: boolean;
1290
+ /** Passphrase to encrypt the private key (filesystem provider only) */
1291
+ passphrase?: string;
1276
1292
  }
1277
1293
  /**
1278
1294
  * Abstract interface for key storage providers.
@@ -1514,6 +1530,8 @@ interface KeygenOptions {
1514
1530
  publicPath?: string;
1515
1531
  /** Overwrite existing keys (default: false) */
1516
1532
  force?: boolean;
1533
+ /** Passphrase to encrypt the private key with AES-256 (optional) */
1534
+ passphrase?: string;
1517
1535
  }
1518
1536
  /**
1519
1537
  * Options for signing data.
@@ -1528,6 +1546,8 @@ interface SignOptions {
1528
1546
  keyRef?: string;
1529
1547
  /** Data to sign (string or Buffer) */
1530
1548
  data: string | Buffer;
1549
+ /** Passphrase for encrypted private keys (optional) */
1550
+ passphrase?: string;
1531
1551
  }
1532
1552
  /**
1533
1553
  * Options for verifying signatures.
@@ -1560,6 +1580,13 @@ declare function getDefaultPrivateKeyPath(): string;
1560
1580
  * @public
1561
1581
  */
1562
1582
  declare function getDefaultPublicKeyPath(): string;
1583
+ /**
1584
+ * Get the default YubiKey encrypted key path based on OS.
1585
+ * - macOS/Linux: ~/.config/attest-it/yubikey-private.enc
1586
+ * - Windows: %APPDATA%\attest-it\yubikey-private.enc
1587
+ * @public
1588
+ */
1589
+ declare function getDefaultYubiKeyEncryptedKeyPath(): string;
1563
1590
  /**
1564
1591
  * Generate a new RSA-2048 keypair using OpenSSL.
1565
1592
  *
@@ -1811,6 +1838,8 @@ interface OnePasswordAccount {
1811
1838
  url: string;
1812
1839
  /** User UUID */
1813
1840
  user_uuid: string;
1841
+ /** Human-readable account name (e.g., "North Family") */
1842
+ name?: string;
1814
1843
  }
1815
1844
  /**
1816
1845
  * Information about a 1Password vault.
@@ -1850,7 +1879,7 @@ declare class OnePasswordKeyProvider implements KeyProvider {
1850
1879
  static isInstalled(): Promise<boolean>;
1851
1880
  /**
1852
1881
  * List all 1Password accounts.
1853
- * @returns Array of account information
1882
+ * @returns Array of account information including human-readable names
1854
1883
  */
1855
1884
  static listAccounts(): Promise<OnePasswordAccount[]>;
1856
1885
  /**
@@ -2393,6 +2422,77 @@ declare function saveLocalConfigSync(config: LocalConfig, configPath?: string):
2393
2422
  * @public
2394
2423
  */
2395
2424
  declare function getActiveIdentity(config: LocalConfig): Identity | undefined;
2425
+ /**
2426
+ * Get the user's home public keys directory.
2427
+ *
2428
+ * This returns ~/.attest-it/public-keys, which is different from the
2429
+ * config directory (~/.config/attest-it). The public keys directory
2430
+ * is designed to be easily shareable and discoverable.
2431
+ *
2432
+ * @returns Path to the user's home public keys directory
2433
+ * @public
2434
+ */
2435
+ declare function getHomePublicKeysDir(): string;
2436
+ /**
2437
+ * Get the project public keys directory.
2438
+ *
2439
+ * This returns .attest-it/public-keys relative to the given project root.
2440
+ * The project public keys directory is used for CI/GitHub Actions to
2441
+ * verify attestation seals.
2442
+ *
2443
+ * @param projectRoot - The project root directory (defaults to cwd)
2444
+ * @returns Path to the project public keys directory
2445
+ * @public
2446
+ */
2447
+ declare function getProjectPublicKeysDir(projectRoot?: string): string;
2448
+ /**
2449
+ * Check if a project has attest-it configuration.
2450
+ *
2451
+ * @param projectRoot - The project root directory (defaults to cwd)
2452
+ * @returns True if the project has .attest-it/config.yaml or similar
2453
+ * @public
2454
+ */
2455
+ declare function hasProjectConfig(projectRoot?: string): boolean;
2456
+ /**
2457
+ * Result from saving public keys.
2458
+ * @public
2459
+ */
2460
+ interface SavePublicKeyResult {
2461
+ /** Path where the key was saved in the user's home directory */
2462
+ homePath: string;
2463
+ /** Path where the key was saved in the project directory, if applicable */
2464
+ projectPath?: string;
2465
+ }
2466
+ /**
2467
+ * Save a public key to the user's home directory and optionally to the project directory.
2468
+ *
2469
+ * This saves the public key as a base64-encoded string (matching the format in config.yaml)
2470
+ * to:
2471
+ * 1. ~/.attest-it/public-keys/<slug>.pem (always)
2472
+ * 2. ./.attest-it/public-keys/<slug>.pem (if project has attest-it config)
2473
+ *
2474
+ * @param slug - The identity slug (used for the filename)
2475
+ * @param publicKey - The base64-encoded public key
2476
+ * @param projectRoot - The project root directory (defaults to cwd)
2477
+ * @returns Paths where the key was saved
2478
+ * @public
2479
+ */
2480
+ declare function savePublicKey(slug: string, publicKey: string, projectRoot?: string): Promise<SavePublicKeyResult>;
2481
+ /**
2482
+ * Save a public key to the user's home directory and optionally to the project directory (sync).
2483
+ *
2484
+ * This saves the public key as a base64-encoded string (matching the format in config.yaml)
2485
+ * to:
2486
+ * 1. ~/.attest-it/public-keys/<slug>.pem (always)
2487
+ * 2. ./.attest-it/public-keys/<slug>.pem (if project has attest-it config)
2488
+ *
2489
+ * @param slug - The identity slug (used for the filename)
2490
+ * @param publicKey - The base64-encoded public key
2491
+ * @param projectRoot - The project root directory (defaults to cwd)
2492
+ * @returns Paths where the key was saved
2493
+ * @public
2494
+ */
2495
+ declare function savePublicKeySync(slug: string, publicKey: string, projectRoot?: string): SavePublicKeyResult;
2396
2496
 
2397
2497
  /**
2398
2498
  * Authorization logic for attest-it v2.0.
@@ -2530,38 +2630,42 @@ declare function verifySeal(seal: Seal, config: AttestItConfig): SignatureVerifi
2530
2630
  * Read seals from the seals.json file (async).
2531
2631
  *
2532
2632
  * @param dir - Directory containing .attest-it/seals.json
2633
+ * @param sealsPathOverride - Optional explicit path to seals file (from config.settings.sealsPath)
2533
2634
  * @returns The seals file contents, or an empty seals file if the file doesn't exist
2534
2635
  * @throws Error if file exists but cannot be read or parsed
2535
2636
  * @public
2536
2637
  */
2537
- declare function readSeals(dir: string): Promise<SealsFile>;
2638
+ declare function readSeals(dir: string, sealsPathOverride?: string): Promise<SealsFile>;
2538
2639
  /**
2539
2640
  * Read seals from the seals.json file (sync).
2540
2641
  *
2541
2642
  * @param dir - Directory containing .attest-it/seals.json
2643
+ * @param sealsPathOverride - Optional explicit path to seals file (from config.settings.sealsPath)
2542
2644
  * @returns The seals file contents, or an empty seals file if the file doesn't exist
2543
2645
  * @throws Error if file exists but cannot be read or parsed
2544
2646
  * @public
2545
2647
  */
2546
- declare function readSealsSync(dir: string): SealsFile;
2648
+ declare function readSealsSync(dir: string, sealsPathOverride?: string): SealsFile;
2547
2649
  /**
2548
2650
  * Write seals to the seals.json file (async).
2549
2651
  *
2550
2652
  * @param dir - Directory containing .attest-it/seals.json
2551
2653
  * @param sealsFile - The seals file to write
2654
+ * @param sealsPathOverride - Optional explicit path to seals file (from config.settings.sealsPath)
2552
2655
  * @throws Error if file cannot be written
2553
2656
  * @public
2554
2657
  */
2555
- declare function writeSeals(dir: string, sealsFile: SealsFile): Promise<void>;
2658
+ declare function writeSeals(dir: string, sealsFile: SealsFile, sealsPathOverride?: string): Promise<void>;
2556
2659
  /**
2557
2660
  * Write seals to the seals.json file (sync).
2558
2661
  *
2559
2662
  * @param dir - Directory containing .attest-it/seals.json
2560
2663
  * @param sealsFile - The seals file to write
2664
+ * @param sealsPathOverride - Optional explicit path to seals file (from config.settings.sealsPath)
2561
2665
  * @throws Error if file cannot be written
2562
2666
  * @public
2563
2667
  */
2564
- declare function writeSealsSync(dir: string, sealsFile: SealsFile): void;
2668
+ declare function writeSealsSync(dir: string, sealsFile: SealsFile, sealsPathOverride?: string): void;
2565
2669
 
2566
2670
  /**
2567
2671
  * Seal verification logic and states.
@@ -2621,4 +2725,4 @@ declare function verifyAllSeals(config: AttestItConfig, seals: SealsFile, finger
2621
2725
  */
2622
2726
  declare const version = "0.0.0";
2623
2727
 
2624
- export { type AttestItConfig, type AttestItSettings, type Attestation, type AttestationsFile, type CliExperiencePreferences, type Config, ConfigNotFoundError, ConfigValidationError, type CreateSealOptions, type VerifyOptions$1 as CryptoVerifyOptions, type KeyPair as Ed25519KeyPair, FilesystemKeyProvider, type FilesystemKeyProviderOptions, type FingerprintConfig, type FingerprintOptions, type FingerprintResult, type GateConfig, type Identity, type KeyGenerationResult, type KeyPaths, type KeyProvider, type KeyProviderConfig, type KeyProviderFactory, KeyProviderRegistry, type KeyProviderSettings, type KeyRetrievalResult, type KeygenOptions, type KeygenProviderOptions, type LocalConfig, LocalConfigValidationError, type MacOSKeychain, MacOSKeychainKeyProvider, type MacOSKeychainKeyProviderOptions, type OnePasswordAccount, OnePasswordKeyProvider, type OnePasswordKeyProviderOptions, type OnePasswordVault, type OperationalConfig, OperationalValidationError, type PolicyConfig, PolicyValidationError, type PrivateKeyRef, type ReadSignedAttestationsOptions, type Seal, type SealVerificationResult, type SealsFile, type SignOptions, SignatureInvalidError, type SignatureVerificationResult, type SuiteConfig, type SuiteVerificationResult, type TeamMember, type UserPreferences, type ValidationError, type ValidationErrorType, type VerificationState, type VerificationStatus, type VerifyOptions, type VerifyResult, type WriteSignedAttestationsOptions, type YubiKeyInfo, YubiKeyProvider, type YubiKeyProviderOptions, canonicalizeAttestations, checkOpenSSL, computeFingerprint, computeFingerprintSync, createAttestation, createSeal, findAttestation, findConfigPath, findTeamMemberByPublicKey, generateKeyPair as generateEd25519KeyPair, generateKeyPair$1 as generateKeyPair, getActiveIdentity, getAttestItConfigDir, getAttestItHomeDir, getAuthorizedSignersForGate, getDefaultPrivateKeyPath, getDefaultPublicKeyPath, getGate, getLocalConfigPath, getPreference, getPreferencesPath, getPublicKeyFromPrivate, isAuthorizedSigner, listPackageFiles, loadConfig, loadConfigSync, loadLocalConfig, loadLocalConfigSync, loadPreferences, mergeConfigs, operationalSchema, parseDuration, parseOperationalContent, parsePolicyContent, policySchema, readAndVerifyAttestations, readAttestations, readAttestationsSync, readSeals, readSealsSync, removeAttestation, resolveConfigPaths, saveLocalConfig, saveLocalConfigSync, savePreferences, setAttestItHomeDir, setKeyPermissions, setPreference, sign$1 as sign, sign as signEd25519, toAttestItConfig, upsertAttestation, validateSuiteGateReferences, verify$1 as verify, verifyAllSeals, verifyAttestations, verify as verifyEd25519, verifyGateSeal, verifySeal, version, writeAttestations, writeAttestationsSync, writeSeals, writeSealsSync, writeSignedAttestations };
2728
+ export { type AttestItConfig, type AttestItSettings, type Attestation, type AttestationsFile, type CliExperiencePreferences, type Config, ConfigNotFoundError, ConfigValidationError, type CreateSealOptions, type VerifyOptions$1 as CryptoVerifyOptions, type KeyPair as Ed25519KeyPair, FilesystemKeyProvider, type FilesystemKeyProviderOptions, type FingerprintConfig, type FingerprintOptions, type FingerprintResult, type GateConfig, type Identity, type KeyGenerationResult, type KeyPaths, type KeyProvider, type KeyProviderConfig, type KeyProviderFactory, KeyProviderRegistry, type KeyProviderSettings, type KeyRetrievalResult, type KeygenOptions, type KeygenProviderOptions, type LocalConfig, LocalConfigValidationError, type MacOSKeychain, MacOSKeychainKeyProvider, type MacOSKeychainKeyProviderOptions, type OnePasswordAccount, OnePasswordKeyProvider, type OnePasswordKeyProviderOptions, type OnePasswordVault, type OperationalConfig, OperationalValidationError, type PolicyConfig, PolicyValidationError, type PrivateKeyRef, type ReadSignedAttestationsOptions, type SavePublicKeyResult, type Seal, type SealVerificationResult, type SealsFile, type SignOptions, SignatureInvalidError, type SignatureVerificationResult, type SuiteConfig, type SuiteVerificationResult, type TeamMember, type UserPreferences, type ValidationError, type ValidationErrorType, type VerificationState, type VerificationStatus, type VerifyOptions, type VerifyResult, type WriteSignedAttestationsOptions, type YubiKeyInfo, YubiKeyProvider, type YubiKeyProviderOptions, canonicalizeAttestations, checkOpenSSL, computeFingerprint, computeFingerprintSync, createAttestation, createSeal, findAttestation, findConfigPath, findTeamMemberByPublicKey, generateKeyPair as generateEd25519KeyPair, generateKeyPair$1 as generateKeyPair, getActiveIdentity, getAttestItConfigDir, getAttestItHomeDir, getAuthorizedSignersForGate, getDefaultPrivateKeyPath, getDefaultPublicKeyPath, getDefaultYubiKeyEncryptedKeyPath, getGate, getHomePublicKeysDir, getLocalConfigPath, getPreference, getPreferencesPath, getProjectPublicKeysDir, getPublicKeyFromPrivate, hasProjectConfig, isAuthorizedSigner, listPackageFiles, loadConfig, loadConfigSync, loadLocalConfig, loadLocalConfigSync, loadPreferences, mergeConfigs, operationalSchema, parseDuration, parseOperationalContent, parsePolicyContent, policySchema, readAndVerifyAttestations, readAttestations, readAttestationsSync, readSeals, readSealsSync, removeAttestation, resolveConfigPaths, saveLocalConfig, saveLocalConfigSync, savePreferences, savePublicKey, savePublicKeySync, setAttestItHomeDir, setKeyPermissions, setPreference, sign$1 as sign, sign as signEd25519, toAttestItConfig, upsertAttestation, validateSuiteGateReferences, verify$1 as verify, verifyAllSeals, verifyAttestations, verify as verifyEd25519, verifyGateSeal, verifySeal, version, writeAttestations, writeAttestationsSync, writeSeals, writeSealsSync, writeSignedAttestations };
package/dist/index.d.ts CHANGED
@@ -30,6 +30,8 @@ interface AttestItSettings {
30
30
  publicKeyPath: string;
31
31
  /** Path to the attestations file */
32
32
  attestationsPath: string;
33
+ /** Path to the seals file */
34
+ sealsPath: string;
33
35
  /** Default command to execute for attestation (can be overridden per suite) */
34
36
  defaultCommand?: string;
35
37
  /** Key provider configuration for signing attestations */
@@ -255,6 +257,7 @@ declare const configSchema: z.ZodObject<{
255
257
  }>>;
256
258
  maxAgeDays: z.ZodDefault<z.ZodNumber>;
257
259
  publicKeyPath: z.ZodDefault<z.ZodString>;
260
+ sealsPath: z.ZodDefault<z.ZodString>;
258
261
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
259
262
  attestationsPath: z.ZodDefault<z.ZodString>;
260
263
  defaultCommand: z.ZodOptional<z.ZodString>;
@@ -295,6 +298,7 @@ declare const configSchema: z.ZodObject<{
295
298
  }>>;
296
299
  maxAgeDays: z.ZodDefault<z.ZodNumber>;
297
300
  publicKeyPath: z.ZodDefault<z.ZodString>;
301
+ sealsPath: z.ZodDefault<z.ZodString>;
298
302
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
299
303
  attestationsPath: z.ZodDefault<z.ZodString>;
300
304
  defaultCommand: z.ZodOptional<z.ZodString>;
@@ -335,6 +339,7 @@ declare const configSchema: z.ZodObject<{
335
339
  }>>;
336
340
  maxAgeDays: z.ZodDefault<z.ZodNumber>;
337
341
  publicKeyPath: z.ZodDefault<z.ZodString>;
342
+ sealsPath: z.ZodDefault<z.ZodString>;
338
343
  }, z.ZodTypeAny, "passthrough">>>;
339
344
  suites: z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodEffects<z.ZodObject<{
340
345
  command: z.ZodOptional<z.ZodString>;
@@ -457,6 +462,7 @@ declare const configSchema: z.ZodObject<{
457
462
  } | undefined;
458
463
  maxAgeDays: number;
459
464
  publicKeyPath: string;
465
+ sealsPath: string;
460
466
  } & { [k: string]: unknown };
461
467
  suites: Record<string, {
462
468
  command?: string | undefined;
@@ -529,6 +535,7 @@ declare const configSchema: z.ZodObject<{
529
535
  }>>;
530
536
  maxAgeDays: z.ZodDefault<z.ZodNumber>;
531
537
  publicKeyPath: z.ZodDefault<z.ZodString>;
538
+ sealsPath: z.ZodDefault<z.ZodString>;
532
539
  }, z.ZodTypeAny, "passthrough">;
533
540
  suites: Record<string, {
534
541
  command?: string | undefined;
@@ -700,14 +707,17 @@ declare const policySchema: z.ZodObject<{
700
707
  attestationsPath: z.ZodDefault<z.ZodString>;
701
708
  maxAgeDays: z.ZodDefault<z.ZodNumber>;
702
709
  publicKeyPath: z.ZodDefault<z.ZodString>;
710
+ sealsPath: z.ZodDefault<z.ZodString>;
703
711
  }, "strict", z.ZodTypeAny, {
704
712
  attestationsPath: string;
705
713
  maxAgeDays: number;
706
714
  publicKeyPath: string;
715
+ sealsPath: string;
707
716
  }, {
708
717
  attestationsPath?: string | undefined;
709
718
  maxAgeDays?: number | undefined;
710
719
  publicKeyPath?: string | undefined;
720
+ sealsPath?: string | undefined;
711
721
  }>>;
712
722
  team: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
713
723
  email: z.ZodOptional<z.ZodString>;
@@ -741,6 +751,7 @@ declare const policySchema: z.ZodObject<{
741
751
  attestationsPath: string;
742
752
  maxAgeDays: number;
743
753
  publicKeyPath: string;
754
+ sealsPath: string;
744
755
  };
745
756
  team?: Record<string, {
746
757
  email?: string | undefined;
@@ -764,6 +775,7 @@ declare const policySchema: z.ZodObject<{
764
775
  attestationsPath?: string | undefined;
765
776
  maxAgeDays?: number | undefined;
766
777
  publicKeyPath?: string | undefined;
778
+ sealsPath?: string | undefined;
767
779
  } | undefined;
768
780
  team?: Record<string, {
769
781
  email?: string | undefined;
@@ -1064,7 +1076,7 @@ declare function parseOperationalContent(content: string, format: 'json' | 'yaml
1064
1076
  * The merge strategy prioritizes security-critical fields from the policy
1065
1077
  * configuration while combining operational fields from both sources:
1066
1078
  *
1067
- * - **Policy settings** (maxAgeDays, publicKeyPath, attestationsPath) are used as-is
1079
+ * - **Policy settings** (maxAgeDays, publicKeyPath, attestationsPath, sealsPath) are used as-is
1068
1080
  * - **Operational settings** (defaultCommand, keyProvider) are added from operational config
1069
1081
  * - **Team and gates** come exclusively from policy config
1070
1082
  * - **Suites and groups** come exclusively from operational config
@@ -1257,6 +1269,8 @@ interface KeyGenerationResult {
1257
1269
  publicKeyPath: string;
1258
1270
  /** Human-readable storage location description */
1259
1271
  storageDescription: string;
1272
+ /** Whether the private key is encrypted with a passphrase */
1273
+ encrypted?: boolean;
1260
1274
  }
1261
1275
  /**
1262
1276
  * Options for key generation via provider.
@@ -1267,6 +1281,8 @@ interface KeygenProviderOptions {
1267
1281
  publicKeyPath: string;
1268
1282
  /** Overwrite existing keys */
1269
1283
  force?: boolean;
1284
+ /** Passphrase to encrypt the private key (filesystem provider only) */
1285
+ passphrase?: string;
1270
1286
  }
1271
1287
  /**
1272
1288
  * Abstract interface for key storage providers.
@@ -1508,6 +1524,8 @@ interface KeygenOptions {
1508
1524
  publicPath?: string;
1509
1525
  /** Overwrite existing keys (default: false) */
1510
1526
  force?: boolean;
1527
+ /** Passphrase to encrypt the private key with AES-256 (optional) */
1528
+ passphrase?: string;
1511
1529
  }
1512
1530
  /**
1513
1531
  * Options for signing data.
@@ -1522,6 +1540,8 @@ interface SignOptions {
1522
1540
  keyRef?: string;
1523
1541
  /** Data to sign (string or Buffer) */
1524
1542
  data: Buffer | string;
1543
+ /** Passphrase for encrypted private keys (optional) */
1544
+ passphrase?: string;
1525
1545
  }
1526
1546
  /**
1527
1547
  * Options for verifying signatures.
@@ -1554,6 +1574,13 @@ declare function getDefaultPrivateKeyPath(): string;
1554
1574
  * @public
1555
1575
  */
1556
1576
  declare function getDefaultPublicKeyPath(): string;
1577
+ /**
1578
+ * Get the default YubiKey encrypted key path based on OS.
1579
+ * - macOS/Linux: ~/.config/attest-it/yubikey-private.enc
1580
+ * - Windows: %APPDATA%\attest-it\yubikey-private.enc
1581
+ * @public
1582
+ */
1583
+ declare function getDefaultYubiKeyEncryptedKeyPath(): string;
1557
1584
  /**
1558
1585
  * Generate a new RSA-2048 keypair using OpenSSL.
1559
1586
  *
@@ -1805,6 +1832,8 @@ interface OnePasswordAccount {
1805
1832
  url: string;
1806
1833
  /** User UUID */
1807
1834
  user_uuid: string;
1835
+ /** Human-readable account name (e.g., "North Family") */
1836
+ name?: string;
1808
1837
  }
1809
1838
  /**
1810
1839
  * Information about a 1Password vault.
@@ -1844,7 +1873,7 @@ declare class OnePasswordKeyProvider implements KeyProvider {
1844
1873
  static isInstalled(): Promise<boolean>;
1845
1874
  /**
1846
1875
  * List all 1Password accounts.
1847
- * @returns Array of account information
1876
+ * @returns Array of account information including human-readable names
1848
1877
  */
1849
1878
  static listAccounts(): Promise<OnePasswordAccount[]>;
1850
1879
  /**
@@ -2383,6 +2412,77 @@ declare function saveLocalConfigSync(config: LocalConfig, configPath?: string):
2383
2412
  * @public
2384
2413
  */
2385
2414
  declare function getActiveIdentity(config: LocalConfig): Identity | undefined;
2415
+ /**
2416
+ * Get the user's home public keys directory.
2417
+ *
2418
+ * This returns ~/.attest-it/public-keys, which is different from the
2419
+ * config directory (~/.config/attest-it). The public keys directory
2420
+ * is designed to be easily shareable and discoverable.
2421
+ *
2422
+ * @returns Path to the user's home public keys directory
2423
+ * @public
2424
+ */
2425
+ declare function getHomePublicKeysDir(): string;
2426
+ /**
2427
+ * Get the project public keys directory.
2428
+ *
2429
+ * This returns .attest-it/public-keys relative to the given project root.
2430
+ * The project public keys directory is used for CI/GitHub Actions to
2431
+ * verify attestation seals.
2432
+ *
2433
+ * @param projectRoot - The project root directory (defaults to cwd)
2434
+ * @returns Path to the project public keys directory
2435
+ * @public
2436
+ */
2437
+ declare function getProjectPublicKeysDir(projectRoot?: string): string;
2438
+ /**
2439
+ * Check if a project has attest-it configuration.
2440
+ *
2441
+ * @param projectRoot - The project root directory (defaults to cwd)
2442
+ * @returns True if the project has .attest-it/config.yaml or similar
2443
+ * @public
2444
+ */
2445
+ declare function hasProjectConfig(projectRoot?: string): boolean;
2446
+ /**
2447
+ * Result from saving public keys.
2448
+ * @public
2449
+ */
2450
+ interface SavePublicKeyResult {
2451
+ /** Path where the key was saved in the user's home directory */
2452
+ homePath: string;
2453
+ /** Path where the key was saved in the project directory, if applicable */
2454
+ projectPath?: string;
2455
+ }
2456
+ /**
2457
+ * Save a public key to the user's home directory and optionally to the project directory.
2458
+ *
2459
+ * This saves the public key as a base64-encoded string (matching the format in config.yaml)
2460
+ * to:
2461
+ * 1. ~/.attest-it/public-keys/<slug>.pem (always)
2462
+ * 2. ./.attest-it/public-keys/<slug>.pem (if project has attest-it config)
2463
+ *
2464
+ * @param slug - The identity slug (used for the filename)
2465
+ * @param publicKey - The base64-encoded public key
2466
+ * @param projectRoot - The project root directory (defaults to cwd)
2467
+ * @returns Paths where the key was saved
2468
+ * @public
2469
+ */
2470
+ declare function savePublicKey(slug: string, publicKey: string, projectRoot?: string): Promise<SavePublicKeyResult>;
2471
+ /**
2472
+ * Save a public key to the user's home directory and optionally to the project directory (sync).
2473
+ *
2474
+ * This saves the public key as a base64-encoded string (matching the format in config.yaml)
2475
+ * to:
2476
+ * 1. ~/.attest-it/public-keys/<slug>.pem (always)
2477
+ * 2. ./.attest-it/public-keys/<slug>.pem (if project has attest-it config)
2478
+ *
2479
+ * @param slug - The identity slug (used for the filename)
2480
+ * @param publicKey - The base64-encoded public key
2481
+ * @param projectRoot - The project root directory (defaults to cwd)
2482
+ * @returns Paths where the key was saved
2483
+ * @public
2484
+ */
2485
+ declare function savePublicKeySync(slug: string, publicKey: string, projectRoot?: string): SavePublicKeyResult;
2386
2486
 
2387
2487
  /**
2388
2488
  * Authorization logic for attest-it v2.0.
@@ -2520,38 +2620,42 @@ declare function verifySeal(seal: Seal, config: AttestItConfig): SignatureVerifi
2520
2620
  * Read seals from the seals.json file (async).
2521
2621
  *
2522
2622
  * @param dir - Directory containing .attest-it/seals.json
2623
+ * @param sealsPathOverride - Optional explicit path to seals file (from config.settings.sealsPath)
2523
2624
  * @returns The seals file contents, or an empty seals file if the file doesn't exist
2524
2625
  * @throws Error if file exists but cannot be read or parsed
2525
2626
  * @public
2526
2627
  */
2527
- declare function readSeals(dir: string): Promise<SealsFile>;
2628
+ declare function readSeals(dir: string, sealsPathOverride?: string): Promise<SealsFile>;
2528
2629
  /**
2529
2630
  * Read seals from the seals.json file (sync).
2530
2631
  *
2531
2632
  * @param dir - Directory containing .attest-it/seals.json
2633
+ * @param sealsPathOverride - Optional explicit path to seals file (from config.settings.sealsPath)
2532
2634
  * @returns The seals file contents, or an empty seals file if the file doesn't exist
2533
2635
  * @throws Error if file exists but cannot be read or parsed
2534
2636
  * @public
2535
2637
  */
2536
- declare function readSealsSync(dir: string): SealsFile;
2638
+ declare function readSealsSync(dir: string, sealsPathOverride?: string): SealsFile;
2537
2639
  /**
2538
2640
  * Write seals to the seals.json file (async).
2539
2641
  *
2540
2642
  * @param dir - Directory containing .attest-it/seals.json
2541
2643
  * @param sealsFile - The seals file to write
2644
+ * @param sealsPathOverride - Optional explicit path to seals file (from config.settings.sealsPath)
2542
2645
  * @throws Error if file cannot be written
2543
2646
  * @public
2544
2647
  */
2545
- declare function writeSeals(dir: string, sealsFile: SealsFile): Promise<void>;
2648
+ declare function writeSeals(dir: string, sealsFile: SealsFile, sealsPathOverride?: string): Promise<void>;
2546
2649
  /**
2547
2650
  * Write seals to the seals.json file (sync).
2548
2651
  *
2549
2652
  * @param dir - Directory containing .attest-it/seals.json
2550
2653
  * @param sealsFile - The seals file to write
2654
+ * @param sealsPathOverride - Optional explicit path to seals file (from config.settings.sealsPath)
2551
2655
  * @throws Error if file cannot be written
2552
2656
  * @public
2553
2657
  */
2554
- declare function writeSealsSync(dir: string, sealsFile: SealsFile): void;
2658
+ declare function writeSealsSync(dir: string, sealsFile: SealsFile, sealsPathOverride?: string): void;
2555
2659
 
2556
2660
  /**
2557
2661
  * Seal verification logic and states.
@@ -2611,4 +2715,4 @@ declare function verifyAllSeals(config: AttestItConfig, seals: SealsFile, finger
2611
2715
  */
2612
2716
  declare const version = "0.0.0";
2613
2717
 
2614
- export { type AttestItConfig, type AttestItSettings, type Attestation, type AttestationsFile, type CliExperiencePreferences, type Config, ConfigNotFoundError, ConfigValidationError, type CreateSealOptions, type VerifyOptions$1 as CryptoVerifyOptions, type KeyPair as Ed25519KeyPair, FilesystemKeyProvider, type FilesystemKeyProviderOptions, type FingerprintConfig, type FingerprintOptions, type FingerprintResult, type GateConfig, type Identity, type KeyGenerationResult, type KeyPaths, type KeyProvider, type KeyProviderConfig, type KeyProviderFactory, KeyProviderRegistry, type KeyProviderSettings, type KeyRetrievalResult, type KeygenOptions, type KeygenProviderOptions, type LocalConfig, LocalConfigValidationError, type MacOSKeychain, MacOSKeychainKeyProvider, type MacOSKeychainKeyProviderOptions, type OnePasswordAccount, OnePasswordKeyProvider, type OnePasswordKeyProviderOptions, type OnePasswordVault, type OperationalConfig, OperationalValidationError, type PolicyConfig, PolicyValidationError, type PrivateKeyRef, type ReadSignedAttestationsOptions, type Seal, type SealVerificationResult, type SealsFile, type SignOptions, SignatureInvalidError, type SignatureVerificationResult, type SuiteConfig, type SuiteVerificationResult, type TeamMember, type UserPreferences, type ValidationError, type ValidationErrorType, type VerificationState, type VerificationStatus, type VerifyOptions, type VerifyResult, type WriteSignedAttestationsOptions, type YubiKeyInfo, YubiKeyProvider, type YubiKeyProviderOptions, canonicalizeAttestations, checkOpenSSL, computeFingerprint, computeFingerprintSync, createAttestation, createSeal, findAttestation, findConfigPath, findTeamMemberByPublicKey, generateKeyPair as generateEd25519KeyPair, generateKeyPair$1 as generateKeyPair, getActiveIdentity, getAttestItConfigDir, getAttestItHomeDir, getAuthorizedSignersForGate, getDefaultPrivateKeyPath, getDefaultPublicKeyPath, getGate, getLocalConfigPath, getPreference, getPreferencesPath, getPublicKeyFromPrivate, isAuthorizedSigner, listPackageFiles, loadConfig, loadConfigSync, loadLocalConfig, loadLocalConfigSync, loadPreferences, mergeConfigs, operationalSchema, parseDuration, parseOperationalContent, parsePolicyContent, policySchema, readAndVerifyAttestations, readAttestations, readAttestationsSync, readSeals, readSealsSync, removeAttestation, resolveConfigPaths, saveLocalConfig, saveLocalConfigSync, savePreferences, setAttestItHomeDir, setKeyPermissions, setPreference, sign$1 as sign, sign as signEd25519, toAttestItConfig, upsertAttestation, validateSuiteGateReferences, verify$1 as verify, verifyAllSeals, verifyAttestations, verify as verifyEd25519, verifyGateSeal, verifySeal, version, writeAttestations, writeAttestationsSync, writeSeals, writeSealsSync, writeSignedAttestations };
2718
+ export { type AttestItConfig, type AttestItSettings, type Attestation, type AttestationsFile, type CliExperiencePreferences, type Config, ConfigNotFoundError, ConfigValidationError, type CreateSealOptions, type VerifyOptions$1 as CryptoVerifyOptions, type KeyPair as Ed25519KeyPair, FilesystemKeyProvider, type FilesystemKeyProviderOptions, type FingerprintConfig, type FingerprintOptions, type FingerprintResult, type GateConfig, type Identity, type KeyGenerationResult, type KeyPaths, type KeyProvider, type KeyProviderConfig, type KeyProviderFactory, KeyProviderRegistry, type KeyProviderSettings, type KeyRetrievalResult, type KeygenOptions, type KeygenProviderOptions, type LocalConfig, LocalConfigValidationError, type MacOSKeychain, MacOSKeychainKeyProvider, type MacOSKeychainKeyProviderOptions, type OnePasswordAccount, OnePasswordKeyProvider, type OnePasswordKeyProviderOptions, type OnePasswordVault, type OperationalConfig, OperationalValidationError, type PolicyConfig, PolicyValidationError, type PrivateKeyRef, type ReadSignedAttestationsOptions, type SavePublicKeyResult, type Seal, type SealVerificationResult, type SealsFile, type SignOptions, SignatureInvalidError, type SignatureVerificationResult, type SuiteConfig, type SuiteVerificationResult, type TeamMember, type UserPreferences, type ValidationError, type ValidationErrorType, type VerificationState, type VerificationStatus, type VerifyOptions, type VerifyResult, type WriteSignedAttestationsOptions, type YubiKeyInfo, YubiKeyProvider, type YubiKeyProviderOptions, canonicalizeAttestations, checkOpenSSL, computeFingerprint, computeFingerprintSync, createAttestation, createSeal, findAttestation, findConfigPath, findTeamMemberByPublicKey, generateKeyPair as generateEd25519KeyPair, generateKeyPair$1 as generateKeyPair, getActiveIdentity, getAttestItConfigDir, getAttestItHomeDir, getAuthorizedSignersForGate, getDefaultPrivateKeyPath, getDefaultPublicKeyPath, getDefaultYubiKeyEncryptedKeyPath, getGate, getHomePublicKeysDir, getLocalConfigPath, getPreference, getPreferencesPath, getProjectPublicKeysDir, getPublicKeyFromPrivate, hasProjectConfig, isAuthorizedSigner, listPackageFiles, loadConfig, loadConfigSync, loadLocalConfig, loadLocalConfigSync, loadPreferences, mergeConfigs, operationalSchema, parseDuration, parseOperationalContent, parsePolicyContent, policySchema, readAndVerifyAttestations, readAttestations, readAttestationsSync, readSeals, readSealsSync, removeAttestation, resolveConfigPaths, saveLocalConfig, saveLocalConfigSync, savePreferences, savePublicKey, savePublicKeySync, setAttestItHomeDir, setKeyPermissions, setPreference, sign$1 as sign, sign as signEd25519, toAttestItConfig, upsertAttestation, validateSuiteGateReferences, verify$1 as verify, verifyAllSeals, verifyAttestations, verify as verifyEd25519, verifyGateSeal, verifySeal, version, writeAttestations, writeAttestationsSync, writeSeals, writeSealsSync, writeSignedAttestations };