@vorionsys/atsf-core 0.1.0 → 0.2.1
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/README.md +12 -12
- package/dist/api/server.d.ts.map +1 -1
- package/dist/api/server.js +463 -35
- package/dist/api/server.js.map +1 -1
- package/dist/arbitration/index.d.ts.map +1 -1
- package/dist/arbitration/index.js +8 -6
- package/dist/arbitration/index.js.map +1 -1
- package/dist/audit/key-manager.d.ts +118 -0
- package/dist/audit/key-manager.d.ts.map +1 -0
- package/dist/audit/key-manager.js +565 -0
- package/dist/audit/key-manager.js.map +1 -0
- package/dist/basis/evaluator.d.ts +31 -0
- package/dist/basis/evaluator.d.ts.map +1 -1
- package/dist/basis/evaluator.js +205 -10
- package/dist/basis/evaluator.js.map +1 -1
- package/dist/basis/parser.d.ts +210 -210
- package/dist/basis/parser.js.map +1 -1
- package/dist/carbon-aware/carbon-metrics.d.ts +151 -0
- package/dist/carbon-aware/carbon-metrics.d.ts.map +1 -0
- package/dist/carbon-aware/carbon-metrics.js +370 -0
- package/dist/carbon-aware/carbon-metrics.js.map +1 -0
- package/dist/carbon-aware/carbon-router.d.ts +101 -0
- package/dist/carbon-aware/carbon-router.d.ts.map +1 -0
- package/dist/carbon-aware/carbon-router.js +400 -0
- package/dist/carbon-aware/carbon-router.js.map +1 -0
- package/dist/chain/index.d.ts +147 -0
- package/dist/chain/index.d.ts.map +1 -0
- package/dist/chain/index.js +219 -0
- package/dist/chain/index.js.map +1 -0
- package/dist/cognigate/index.d.ts +33 -4
- package/dist/cognigate/index.d.ts.map +1 -1
- package/dist/cognigate/index.js +199 -24
- package/dist/cognigate/index.js.map +1 -1
- package/dist/common/adapters.d.ts +172 -0
- package/dist/common/adapters.d.ts.map +1 -0
- package/dist/common/adapters.js +329 -0
- package/dist/common/adapters.js.map +1 -0
- package/dist/common/config.d.ts +168 -163
- package/dist/common/config.d.ts.map +1 -1
- package/dist/common/config.js +2 -0
- package/dist/common/config.js.map +1 -1
- package/dist/common/index.d.ts +1 -0
- package/dist/common/index.d.ts.map +1 -1
- package/dist/common/index.js +1 -0
- package/dist/common/index.js.map +1 -1
- package/dist/common/types.d.ts +67 -16
- package/dist/common/types.d.ts.map +1 -1
- package/dist/common/types.js +4 -0
- package/dist/common/types.js.map +1 -1
- package/dist/enforce/index.d.ts +226 -16
- package/dist/enforce/index.d.ts.map +1 -1
- package/dist/enforce/index.js +196 -49
- package/dist/enforce/index.js.map +1 -1
- package/dist/governance/fluid-workflow.d.ts +217 -0
- package/dist/governance/fluid-workflow.d.ts.map +1 -0
- package/dist/governance/fluid-workflow.js +491 -0
- package/dist/governance/fluid-workflow.js.map +1 -0
- package/dist/governance/index.d.ts +1 -0
- package/dist/governance/index.d.ts.map +1 -1
- package/dist/governance/index.js +1 -0
- package/dist/governance/index.js.map +1 -1
- package/dist/index.d.ts +9 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -3
- package/dist/index.js.map +1 -1
- package/dist/intent/index.d.ts +127 -10
- package/dist/intent/index.d.ts.map +1 -1
- package/dist/intent/index.js +121 -16
- package/dist/intent/index.js.map +1 -1
- package/dist/langchain/executor.d.ts +19 -5
- package/dist/langchain/executor.d.ts.map +1 -1
- package/dist/langchain/executor.js +287 -36
- package/dist/langchain/executor.js.map +1 -1
- package/dist/langchain/index.d.ts +2 -1
- package/dist/langchain/index.d.ts.map +1 -1
- package/dist/langchain/index.js +3 -1
- package/dist/langchain/index.js.map +1 -1
- package/dist/langchain/tools.d.ts.map +1 -1
- package/dist/langchain/tools.js +2 -1
- package/dist/langchain/tools.js.map +1 -1
- package/dist/langchain/types.d.ts +41 -0
- package/dist/langchain/types.d.ts.map +1 -1
- package/dist/layers/index.d.ts +1 -1
- package/dist/layers/index.d.ts.map +1 -1
- package/dist/persistence/file.d.ts +35 -3
- package/dist/persistence/file.d.ts.map +1 -1
- package/dist/persistence/file.js +138 -11
- package/dist/persistence/file.js.map +1 -1
- package/dist/persistence/index.d.ts +11 -1
- package/dist/persistence/index.d.ts.map +1 -1
- package/dist/persistence/index.js +25 -1
- package/dist/persistence/index.js.map +1 -1
- package/dist/persistence/sqlite.d.ts +135 -0
- package/dist/persistence/sqlite.d.ts.map +1 -0
- package/dist/persistence/sqlite.js +372 -0
- package/dist/persistence/sqlite.js.map +1 -0
- package/dist/persistence/supabase.d.ts +93 -0
- package/dist/persistence/supabase.d.ts.map +1 -0
- package/dist/persistence/supabase.js +219 -0
- package/dist/persistence/supabase.js.map +1 -0
- package/dist/persistence/types.d.ts +5 -1
- package/dist/persistence/types.d.ts.map +1 -1
- package/dist/phase6/ceiling.d.ts +177 -0
- package/dist/phase6/ceiling.d.ts.map +1 -0
- package/dist/phase6/ceiling.js +463 -0
- package/dist/phase6/ceiling.js.map +1 -0
- package/dist/phase6/context.d.ts +207 -0
- package/dist/phase6/context.d.ts.map +1 -0
- package/dist/phase6/context.js +603 -0
- package/dist/phase6/context.js.map +1 -0
- package/dist/phase6/index.d.ts +79 -0
- package/dist/phase6/index.d.ts.map +1 -0
- package/dist/phase6/index.js +152 -0
- package/dist/phase6/index.js.map +1 -0
- package/dist/phase6/presets.d.ts +148 -0
- package/dist/phase6/presets.d.ts.map +1 -0
- package/dist/phase6/presets.js +467 -0
- package/dist/phase6/presets.js.map +1 -0
- package/dist/phase6/provenance.d.ts +148 -0
- package/dist/phase6/provenance.d.ts.map +1 -0
- package/dist/phase6/provenance.js +545 -0
- package/dist/phase6/provenance.js.map +1 -0
- package/dist/phase6/role-gates/index.d.ts +7 -0
- package/dist/phase6/role-gates/index.d.ts.map +1 -0
- package/dist/phase6/role-gates/index.js +7 -0
- package/dist/phase6/role-gates/index.js.map +1 -0
- package/dist/phase6/role-gates/kernel.d.ts +84 -0
- package/dist/phase6/role-gates/kernel.d.ts.map +1 -0
- package/dist/phase6/role-gates/kernel.js +258 -0
- package/dist/phase6/role-gates/kernel.js.map +1 -0
- package/dist/phase6/role-gates/policy.d.ts +110 -0
- package/dist/phase6/role-gates/policy.d.ts.map +1 -0
- package/dist/phase6/role-gates/policy.js +157 -0
- package/dist/phase6/role-gates/policy.js.map +1 -0
- package/dist/phase6/role-gates.d.ts +164 -0
- package/dist/phase6/role-gates.d.ts.map +1 -0
- package/dist/phase6/role-gates.js +536 -0
- package/dist/phase6/role-gates.js.map +1 -0
- package/dist/phase6/types.d.ts +1827 -0
- package/dist/phase6/types.d.ts.map +1 -0
- package/dist/phase6/types.js +450 -0
- package/dist/phase6/types.js.map +1 -0
- package/dist/phase6/weight-presets/canonical.d.ts +93 -0
- package/dist/phase6/weight-presets/canonical.d.ts.map +1 -0
- package/dist/phase6/weight-presets/canonical.js +122 -0
- package/dist/phase6/weight-presets/canonical.js.map +1 -0
- package/dist/phase6/weight-presets/deltas.d.ts +144 -0
- package/dist/phase6/weight-presets/deltas.d.ts.map +1 -0
- package/dist/phase6/weight-presets/deltas.js +184 -0
- package/dist/phase6/weight-presets/deltas.js.map +1 -0
- package/dist/phase6/weight-presets/index.d.ts +8 -0
- package/dist/phase6/weight-presets/index.d.ts.map +1 -0
- package/dist/phase6/weight-presets/index.js +8 -0
- package/dist/phase6/weight-presets/index.js.map +1 -0
- package/dist/phase6/weight-presets/merger.d.ts +79 -0
- package/dist/phase6/weight-presets/merger.d.ts.map +1 -0
- package/dist/phase6/weight-presets/merger.js +161 -0
- package/dist/phase6/weight-presets/merger.js.map +1 -0
- package/dist/proof/index.d.ts +50 -1
- package/dist/proof/index.d.ts.map +1 -1
- package/dist/proof/index.js +122 -3
- package/dist/proof/index.js.map +1 -1
- package/dist/proof/merkle.d.ts +195 -0
- package/dist/proof/merkle.d.ts.map +1 -0
- package/dist/proof/merkle.js +412 -0
- package/dist/proof/merkle.js.map +1 -0
- package/dist/proof/zk-proofs.d.ts +218 -0
- package/dist/proof/zk-proofs.d.ts.map +1 -0
- package/dist/proof/zk-proofs.js +531 -0
- package/dist/proof/zk-proofs.js.map +1 -0
- package/dist/trust-engine/ceiling-enforcement/audit.d.ts +98 -0
- package/dist/trust-engine/ceiling-enforcement/audit.d.ts.map +1 -0
- package/dist/trust-engine/ceiling-enforcement/audit.js +160 -0
- package/dist/trust-engine/ceiling-enforcement/audit.js.map +1 -0
- package/dist/trust-engine/ceiling-enforcement/index.d.ts +6 -0
- package/dist/trust-engine/ceiling-enforcement/index.d.ts.map +1 -0
- package/dist/trust-engine/ceiling-enforcement/index.js +6 -0
- package/dist/trust-engine/ceiling-enforcement/index.js.map +1 -0
- package/dist/trust-engine/ceiling-enforcement/kernel.d.ts +112 -0
- package/dist/trust-engine/ceiling-enforcement/kernel.d.ts.map +1 -0
- package/dist/trust-engine/ceiling-enforcement/kernel.js +158 -0
- package/dist/trust-engine/ceiling-enforcement/kernel.js.map +1 -0
- package/dist/trust-engine/context-policy/enforcement.d.ts +62 -0
- package/dist/trust-engine/context-policy/enforcement.d.ts.map +1 -0
- package/dist/trust-engine/context-policy/enforcement.js +104 -0
- package/dist/trust-engine/context-policy/enforcement.js.map +1 -0
- package/dist/trust-engine/context-policy/factory.d.ts +75 -0
- package/dist/trust-engine/context-policy/factory.d.ts.map +1 -0
- package/dist/trust-engine/context-policy/factory.js +130 -0
- package/dist/trust-engine/context-policy/factory.js.map +1 -0
- package/dist/trust-engine/context-policy/index.d.ts +6 -0
- package/dist/trust-engine/context-policy/index.d.ts.map +1 -0
- package/dist/trust-engine/context-policy/index.js +6 -0
- package/dist/trust-engine/context-policy/index.js.map +1 -0
- package/dist/trust-engine/creation-modifiers/index.d.ts +5 -0
- package/dist/trust-engine/creation-modifiers/index.d.ts.map +1 -0
- package/dist/trust-engine/creation-modifiers/index.js +5 -0
- package/dist/trust-engine/creation-modifiers/index.js.map +1 -0
- package/dist/trust-engine/creation-modifiers/types.d.ts +112 -0
- package/dist/trust-engine/creation-modifiers/types.d.ts.map +1 -0
- package/dist/trust-engine/creation-modifiers/types.js +166 -0
- package/dist/trust-engine/creation-modifiers/types.js.map +1 -0
- package/dist/trust-engine/decay-profiles.d.ts +159 -0
- package/dist/trust-engine/decay-profiles.d.ts.map +1 -0
- package/dist/trust-engine/decay-profiles.js +210 -0
- package/dist/trust-engine/decay-profiles.js.map +1 -0
- package/dist/trust-engine/index.d.ts +144 -5
- package/dist/trust-engine/index.d.ts.map +1 -1
- package/dist/trust-engine/index.js +320 -15
- package/dist/trust-engine/index.js.map +1 -1
- package/dist/trust-engine/phase6-types.d.ts +123 -0
- package/dist/trust-engine/phase6-types.d.ts.map +1 -0
- package/dist/trust-engine/phase6-types.js +88 -0
- package/dist/trust-engine/phase6-types.js.map +1 -0
- package/package.json +26 -10
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Q4: Weight Presets - Weight Merger
|
|
3
|
+
* Combines canonical ACI weights with Axiom deltas to produce final trust weights
|
|
4
|
+
*
|
|
5
|
+
* Architecture:
|
|
6
|
+
* - Deterministic merge process
|
|
7
|
+
* - Audit trail of all weight decisions
|
|
8
|
+
* - Supports multiple merge strategies
|
|
9
|
+
* - Version tracking
|
|
10
|
+
*/
|
|
11
|
+
import { CANONICAL_TRUST_WEIGHTS, TOTAL_TRUST_WEIGHT, getCanonicalWeightMetrics, } from './canonical.js';
|
|
12
|
+
import { validateDeltaAdjustments } from './deltas.js';
|
|
13
|
+
/**
|
|
14
|
+
* Merge canonical weights with delta adjustments
|
|
15
|
+
*/
|
|
16
|
+
export function mergeWeights(deltas = [], strategy = 'deltaOverride') {
|
|
17
|
+
const canonical = CANONICAL_TRUST_WEIGHTS;
|
|
18
|
+
switch (strategy) {
|
|
19
|
+
case 'canonical':
|
|
20
|
+
// Ignore deltas, return canonical
|
|
21
|
+
return { ...canonical };
|
|
22
|
+
case 'deltaOverride':
|
|
23
|
+
// Apply deltas directly as overrides
|
|
24
|
+
{
|
|
25
|
+
const adjusted = { ...canonical };
|
|
26
|
+
for (const delta of deltas) {
|
|
27
|
+
// Check expiration
|
|
28
|
+
if (delta.expiresAt && new Date() > delta.expiresAt) {
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
const metric = delta.metric;
|
|
32
|
+
adjusted[metric] = Math.max(0, adjusted[metric] + delta.adjustment);
|
|
33
|
+
}
|
|
34
|
+
return adjusted;
|
|
35
|
+
}
|
|
36
|
+
case 'blended':
|
|
37
|
+
// Blend canonical and deltas proportionally
|
|
38
|
+
{
|
|
39
|
+
const adjusted = { ...canonical };
|
|
40
|
+
const validDeltas = deltas.filter((d) => !d.expiresAt || new Date() <= d.expiresAt);
|
|
41
|
+
if (validDeltas.length === 0) {
|
|
42
|
+
return adjusted;
|
|
43
|
+
}
|
|
44
|
+
// Average the adjustments across all deltas
|
|
45
|
+
const deltaMap = {};
|
|
46
|
+
for (const delta of validDeltas) {
|
|
47
|
+
const metric = delta.metric;
|
|
48
|
+
if (!deltaMap[metric]) {
|
|
49
|
+
deltaMap[metric] = [];
|
|
50
|
+
}
|
|
51
|
+
deltaMap[metric].push(delta.adjustment);
|
|
52
|
+
}
|
|
53
|
+
// Apply averaged adjustments
|
|
54
|
+
for (const [metric, adjustments] of Object.entries(deltaMap)) {
|
|
55
|
+
const avgAdjustment = adjustments.reduce((a, b) => a + b, 0) / adjustments.length;
|
|
56
|
+
adjusted[metric] = Math.max(0, adjusted[metric] + avgAdjustment);
|
|
57
|
+
}
|
|
58
|
+
return adjusted;
|
|
59
|
+
}
|
|
60
|
+
default:
|
|
61
|
+
throw new Error(`Unknown merge strategy: ${strategy}`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Merge weights and validate the result
|
|
66
|
+
*/
|
|
67
|
+
export function mergeAndValidateWeights(deltas = [], strategy = 'deltaOverride') {
|
|
68
|
+
// Validate deltas first
|
|
69
|
+
const canonicalRecord = CANONICAL_TRUST_WEIGHTS;
|
|
70
|
+
const validation = validateDeltaAdjustments(canonicalRecord, deltas);
|
|
71
|
+
if (!validation.valid) {
|
|
72
|
+
return {
|
|
73
|
+
weights: { ...CANONICAL_TRUST_WEIGHTS },
|
|
74
|
+
valid: false,
|
|
75
|
+
errors: validation.errors,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
// Merge weights
|
|
79
|
+
const weights = mergeWeights(deltas, strategy);
|
|
80
|
+
// Perform post-merge validation
|
|
81
|
+
const errors = [];
|
|
82
|
+
// Check all metrics are non-negative
|
|
83
|
+
for (const [metric, value] of Object.entries(weights)) {
|
|
84
|
+
if (value < 0) {
|
|
85
|
+
errors.push(`${metric} is negative: ${value}`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
weights,
|
|
90
|
+
valid: errors.length === 0,
|
|
91
|
+
errors,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Create an audit record for weight computation
|
|
96
|
+
*/
|
|
97
|
+
export function createWeightAuditRecord(canonicalWeights, appliedDeltas, finalWeights, strategy = 'deltaOverride', agentId, domain) {
|
|
98
|
+
const totalWeight = Object.values(finalWeights).reduce((sum, w) => sum + w, 0);
|
|
99
|
+
return {
|
|
100
|
+
timestamp: new Date(),
|
|
101
|
+
agentId,
|
|
102
|
+
domain,
|
|
103
|
+
strategy,
|
|
104
|
+
canonicalWeights,
|
|
105
|
+
appliedDeltas,
|
|
106
|
+
finalWeights,
|
|
107
|
+
totalWeight,
|
|
108
|
+
valid: totalWeight >= 900 && totalWeight <= 1100, // Allow 10% variance
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Compare canonical vs. merged weights to show impact of deltas
|
|
113
|
+
*/
|
|
114
|
+
export function compareWeights(finalWeights, canonicalWeights = CANONICAL_TRUST_WEIGHTS) {
|
|
115
|
+
const comparison = {};
|
|
116
|
+
for (const metric of Object.keys(canonicalWeights)) {
|
|
117
|
+
const key = metric;
|
|
118
|
+
const can = canonicalWeights[key];
|
|
119
|
+
const fin = finalWeights[key];
|
|
120
|
+
const delta = fin - can;
|
|
121
|
+
const percentChange = can !== 0 ? (delta / can) * 100 : 0;
|
|
122
|
+
comparison[metric] = {
|
|
123
|
+
canonical: can,
|
|
124
|
+
final: fin,
|
|
125
|
+
delta,
|
|
126
|
+
percentChange,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
return comparison;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Format weights for display
|
|
133
|
+
*/
|
|
134
|
+
export function formatWeightsForDisplay(weights) {
|
|
135
|
+
const metrics = getCanonicalWeightMetrics();
|
|
136
|
+
const lines = ['Trust Weight Distribution:', ''];
|
|
137
|
+
for (const metric of metrics) {
|
|
138
|
+
const value = weights[metric.name.toLowerCase().replace(/ /g, '')];
|
|
139
|
+
if (value !== undefined) {
|
|
140
|
+
const percentage = ((value / TOTAL_TRUST_WEIGHT) * 100).toFixed(1);
|
|
141
|
+
lines.push(`${metric.name.padEnd(25)} ${value.toString().padEnd(4)} pts (${percentage}%)`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
const total = Object.values(weights).reduce((sum, w) => sum + w, 0);
|
|
145
|
+
lines.push('');
|
|
146
|
+
lines.push(`Total: ${total} points`);
|
|
147
|
+
return lines.join('\n');
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Compute agent's final trust score using merged weights
|
|
151
|
+
*/
|
|
152
|
+
export function computeTrustScore(weights, metrics) {
|
|
153
|
+
const score = metrics.successRatio * weights.successRatio +
|
|
154
|
+
metrics.authorizationHistory * weights.authorizationHistory +
|
|
155
|
+
metrics.cascadePrevention * weights.cascadePrevention +
|
|
156
|
+
metrics.executionEfficiency * weights.executionEfficiency +
|
|
157
|
+
metrics.behaviorStability * weights.behaviorStability;
|
|
158
|
+
// Clamp to 0-1000
|
|
159
|
+
return Math.max(0, Math.min(1000, Math.round(score)));
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=merger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merger.js","sourceRoot":"","sources":["../../../src/phase6/weight-presets/merger.ts"],"names":[],"mappings":"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"}
|
package/dist/proof/index.d.ts
CHANGED
|
@@ -2,10 +2,33 @@
|
|
|
2
2
|
* PROOF - Immutable Evidence System
|
|
3
3
|
*
|
|
4
4
|
* Creates and maintains cryptographically sealed records of all governance decisions.
|
|
5
|
+
* Uses Ed25519 for cryptographic signing of proof records.
|
|
5
6
|
*
|
|
6
7
|
* @packageDocumentation
|
|
7
8
|
*/
|
|
8
9
|
import type { Proof, Decision, Intent, ID } from '../common/types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Ed25519 key pair for signing proofs
|
|
12
|
+
*/
|
|
13
|
+
export interface SigningKeyPair {
|
|
14
|
+
publicKey: string;
|
|
15
|
+
privateKey: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Signing configuration for proof service
|
|
19
|
+
*/
|
|
20
|
+
export interface SigningConfig {
|
|
21
|
+
/** Private key for signing (base64-encoded Ed25519) */
|
|
22
|
+
privateKey?: string;
|
|
23
|
+
/** Public key for verification (base64-encoded Ed25519) */
|
|
24
|
+
publicKey?: string;
|
|
25
|
+
/** Key ID for multi-key scenarios */
|
|
26
|
+
keyId?: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Generate a new Ed25519 key pair for signing
|
|
30
|
+
*/
|
|
31
|
+
export declare function generateKeyPair(): SigningKeyPair;
|
|
9
32
|
/**
|
|
10
33
|
* Proof creation request
|
|
11
34
|
*/
|
|
@@ -43,6 +66,10 @@ export declare class ProofService {
|
|
|
43
66
|
private proofs;
|
|
44
67
|
private chain;
|
|
45
68
|
private lastHash;
|
|
69
|
+
private privateKey;
|
|
70
|
+
private publicKey;
|
|
71
|
+
private keyId;
|
|
72
|
+
constructor(config?: SigningConfig);
|
|
46
73
|
/**
|
|
47
74
|
* Create a new proof record
|
|
48
75
|
*/
|
|
@@ -71,6 +98,25 @@ export declare class ProofService {
|
|
|
71
98
|
* Calculate hash for a proof record
|
|
72
99
|
*/
|
|
73
100
|
private calculateHash;
|
|
101
|
+
/**
|
|
102
|
+
* Sign data with Ed25519 private key
|
|
103
|
+
* @returns Base64-encoded signature, or empty string if no key configured
|
|
104
|
+
*/
|
|
105
|
+
private sign;
|
|
106
|
+
/**
|
|
107
|
+
* Verify Ed25519 signature
|
|
108
|
+
* @returns true if valid, false if invalid or no public key
|
|
109
|
+
*/
|
|
110
|
+
private verifySignature;
|
|
111
|
+
/**
|
|
112
|
+
* Get the public key for external verification
|
|
113
|
+
* @returns Base64-encoded public key, or null if not configured
|
|
114
|
+
*/
|
|
115
|
+
getPublicKey(): string | null;
|
|
116
|
+
/**
|
|
117
|
+
* Check if signing is enabled
|
|
118
|
+
*/
|
|
119
|
+
isSigningEnabled(): boolean;
|
|
74
120
|
/**
|
|
75
121
|
* Get chain statistics
|
|
76
122
|
*/
|
|
@@ -82,6 +128,9 @@ export declare class ProofService {
|
|
|
82
128
|
}
|
|
83
129
|
/**
|
|
84
130
|
* Create a new PROOF service instance
|
|
131
|
+
* @param config Optional signing configuration
|
|
85
132
|
*/
|
|
86
|
-
export declare function createProofService(): ProofService;
|
|
133
|
+
export declare function createProofService(config?: SigningConfig): ProofService;
|
|
134
|
+
export { type MerkleNode, type MerkleProof, type MerkleAnchor, type ExternalAnchor, type BatchAggregationResult, type MerkleAggregationConfig, buildMerkleTree, generateMerkleProof, verifyMerkleProof, MerkleAggregationService, createMerkleAggregationService, } from './merkle.js';
|
|
135
|
+
export { type PedersenCommitment, type RangeProof, type ThresholdProof, type MembershipProof, type TrustTierProof, type CompositeProof, type ZKVerificationResult, type ZKProofConfig, createCommitment, verifyCommitment, generateRangeProof, verifyRangeProof, generateThresholdProof, verifyThresholdProof, generateMembershipProof, verifyMembershipProof, generateTrustTierProof, verifyTrustTierProof, ZKProofService, createZKProofService, } from './zk-proofs.js';
|
|
87
136
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/proof/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/proof/index.ts"],"names":[],"mappings":"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"}
|
package/dist/proof/index.js
CHANGED
|
@@ -2,11 +2,23 @@
|
|
|
2
2
|
* PROOF - Immutable Evidence System
|
|
3
3
|
*
|
|
4
4
|
* Creates and maintains cryptographically sealed records of all governance decisions.
|
|
5
|
+
* Uses Ed25519 for cryptographic signing of proof records.
|
|
5
6
|
*
|
|
6
7
|
* @packageDocumentation
|
|
7
8
|
*/
|
|
9
|
+
import * as nodeCrypto from 'node:crypto';
|
|
8
10
|
import { createLogger } from '../common/logger.js';
|
|
9
11
|
const logger = createLogger({ component: 'proof' });
|
|
12
|
+
/**
|
|
13
|
+
* Generate a new Ed25519 key pair for signing
|
|
14
|
+
*/
|
|
15
|
+
export function generateKeyPair() {
|
|
16
|
+
const { publicKey, privateKey } = nodeCrypto.generateKeyPairSync('ed25519');
|
|
17
|
+
return {
|
|
18
|
+
publicKey: publicKey.export({ type: 'spki', format: 'der' }).toString('base64'),
|
|
19
|
+
privateKey: privateKey.export({ type: 'pkcs8', format: 'der' }).toString('base64'),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
10
22
|
/**
|
|
11
23
|
* PROOF service for evidence management
|
|
12
24
|
*/
|
|
@@ -14,6 +26,33 @@ export class ProofService {
|
|
|
14
26
|
proofs = new Map();
|
|
15
27
|
chain = [];
|
|
16
28
|
lastHash = '0'.repeat(64);
|
|
29
|
+
privateKey = null;
|
|
30
|
+
publicKey = null;
|
|
31
|
+
keyId;
|
|
32
|
+
constructor(config) {
|
|
33
|
+
this.keyId = config?.keyId ?? 'default';
|
|
34
|
+
if (config?.privateKey) {
|
|
35
|
+
this.privateKey = nodeCrypto.createPrivateKey({
|
|
36
|
+
key: Buffer.from(config.privateKey, 'base64'),
|
|
37
|
+
format: 'der',
|
|
38
|
+
type: 'pkcs8',
|
|
39
|
+
});
|
|
40
|
+
// Derive public key from private key
|
|
41
|
+
this.publicKey = nodeCrypto.createPublicKey(this.privateKey);
|
|
42
|
+
logger.info({ keyId: this.keyId }, 'Signing key loaded');
|
|
43
|
+
}
|
|
44
|
+
else if (config?.publicKey) {
|
|
45
|
+
this.publicKey = nodeCrypto.createPublicKey({
|
|
46
|
+
key: Buffer.from(config.publicKey, 'base64'),
|
|
47
|
+
format: 'der',
|
|
48
|
+
type: 'spki',
|
|
49
|
+
});
|
|
50
|
+
logger.info({ keyId: this.keyId }, 'Verification-only key loaded');
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
logger.warn('No signing key configured - proofs will not be signed');
|
|
54
|
+
}
|
|
55
|
+
}
|
|
17
56
|
/**
|
|
18
57
|
* Create a new proof record
|
|
19
58
|
*/
|
|
@@ -28,12 +67,14 @@ export class ProofService {
|
|
|
28
67
|
outputs: request.outputs,
|
|
29
68
|
hash: '', // Will be calculated
|
|
30
69
|
previousHash: this.lastHash,
|
|
31
|
-
signature: '', //
|
|
70
|
+
signature: '', // Will be signed after hash calculation
|
|
32
71
|
createdAt: new Date().toISOString(),
|
|
33
72
|
};
|
|
34
73
|
// Calculate hash
|
|
35
74
|
proof.hash = await this.calculateHash(proof);
|
|
36
75
|
this.lastHash = proof.hash;
|
|
76
|
+
// Sign the proof hash
|
|
77
|
+
proof.signature = this.sign(proof.hash);
|
|
37
78
|
// Store
|
|
38
79
|
this.proofs.set(proof.id, proof);
|
|
39
80
|
this.chain.push(proof);
|
|
@@ -95,6 +136,16 @@ export class ProofService {
|
|
|
95
136
|
if (proof.hash !== expectedHash) {
|
|
96
137
|
issues.push('Hash mismatch');
|
|
97
138
|
}
|
|
139
|
+
// Verify signature
|
|
140
|
+
if (proof.signature) {
|
|
141
|
+
if (!this.verifySignature(proof.hash, proof.signature)) {
|
|
142
|
+
issues.push('Invalid signature');
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
else if (this.publicKey) {
|
|
146
|
+
// Signature missing but we have a key configured
|
|
147
|
+
issues.push('Signature missing');
|
|
148
|
+
}
|
|
98
149
|
// Verify chain linkage
|
|
99
150
|
if (proof.chainPosition > 0) {
|
|
100
151
|
const previous = this.chain[proof.chainPosition - 1];
|
|
@@ -158,6 +209,49 @@ export class ProofService {
|
|
|
158
209
|
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
|
159
210
|
return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');
|
|
160
211
|
}
|
|
212
|
+
/**
|
|
213
|
+
* Sign data with Ed25519 private key
|
|
214
|
+
* @returns Base64-encoded signature, or empty string if no key configured
|
|
215
|
+
*/
|
|
216
|
+
sign(data) {
|
|
217
|
+
if (!this.privateKey) {
|
|
218
|
+
return '';
|
|
219
|
+
}
|
|
220
|
+
const signature = nodeCrypto.sign(null, Buffer.from(data), this.privateKey);
|
|
221
|
+
return signature.toString('base64');
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Verify Ed25519 signature
|
|
225
|
+
* @returns true if valid, false if invalid or no public key
|
|
226
|
+
*/
|
|
227
|
+
verifySignature(data, signature) {
|
|
228
|
+
if (!this.publicKey) {
|
|
229
|
+
// No key to verify with - skip signature verification
|
|
230
|
+
return true;
|
|
231
|
+
}
|
|
232
|
+
try {
|
|
233
|
+
return nodeCrypto.verify(null, Buffer.from(data), this.publicKey, Buffer.from(signature, 'base64'));
|
|
234
|
+
}
|
|
235
|
+
catch {
|
|
236
|
+
return false;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Get the public key for external verification
|
|
241
|
+
* @returns Base64-encoded public key, or null if not configured
|
|
242
|
+
*/
|
|
243
|
+
getPublicKey() {
|
|
244
|
+
if (!this.publicKey) {
|
|
245
|
+
return null;
|
|
246
|
+
}
|
|
247
|
+
return this.publicKey.export({ type: 'spki', format: 'der' }).toString('base64');
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Check if signing is enabled
|
|
251
|
+
*/
|
|
252
|
+
isSigningEnabled() {
|
|
253
|
+
return this.privateKey !== null;
|
|
254
|
+
}
|
|
161
255
|
/**
|
|
162
256
|
* Get chain statistics
|
|
163
257
|
*/
|
|
@@ -172,8 +266,33 @@ export class ProofService {
|
|
|
172
266
|
}
|
|
173
267
|
/**
|
|
174
268
|
* Create a new PROOF service instance
|
|
269
|
+
* @param config Optional signing configuration
|
|
175
270
|
*/
|
|
176
|
-
export function createProofService() {
|
|
177
|
-
return new ProofService();
|
|
271
|
+
export function createProofService(config) {
|
|
272
|
+
return new ProofService(config);
|
|
178
273
|
}
|
|
274
|
+
// =============================================================================
|
|
275
|
+
// MERKLE AGGREGATION
|
|
276
|
+
// =============================================================================
|
|
277
|
+
export {
|
|
278
|
+
// Functions
|
|
279
|
+
buildMerkleTree, generateMerkleProof, verifyMerkleProof,
|
|
280
|
+
// Service
|
|
281
|
+
MerkleAggregationService, createMerkleAggregationService, } from './merkle.js';
|
|
282
|
+
// =============================================================================
|
|
283
|
+
// ZERO-KNOWLEDGE PROOFS
|
|
284
|
+
// =============================================================================
|
|
285
|
+
export {
|
|
286
|
+
// Primitives
|
|
287
|
+
createCommitment, verifyCommitment,
|
|
288
|
+
// Range proofs
|
|
289
|
+
generateRangeProof, verifyRangeProof,
|
|
290
|
+
// Threshold proofs
|
|
291
|
+
generateThresholdProof, verifyThresholdProof,
|
|
292
|
+
// Membership proofs
|
|
293
|
+
generateMembershipProof, verifyMembershipProof,
|
|
294
|
+
// Trust tier proofs
|
|
295
|
+
generateTrustTierProof, verifyTrustTierProof,
|
|
296
|
+
// Service
|
|
297
|
+
ZKProofService, createZKProofService, } from './zk-proofs.js';
|
|
179
298
|
//# sourceMappingURL=index.js.map
|
package/dist/proof/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/proof/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/proof/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Merkle Tree Aggregation Service
|
|
3
|
+
*
|
|
4
|
+
* Implements batch proof aggregation using Merkle trees for:
|
|
5
|
+
* - Efficient batch verification
|
|
6
|
+
* - External anchoring (blockchain, timestamping services)
|
|
7
|
+
* - Privacy-preserving proof disclosure
|
|
8
|
+
*
|
|
9
|
+
* Key Features:
|
|
10
|
+
* - SHA-256 based Merkle tree construction
|
|
11
|
+
* - Incremental tree building
|
|
12
|
+
* - Compact inclusion proofs
|
|
13
|
+
* - Anchor commitments for external verification
|
|
14
|
+
*
|
|
15
|
+
* @packageDocumentation
|
|
16
|
+
*/
|
|
17
|
+
import type { Proof } from '../common/types.js';
|
|
18
|
+
/**
|
|
19
|
+
* Merkle tree node
|
|
20
|
+
*/
|
|
21
|
+
export interface MerkleNode {
|
|
22
|
+
hash: string;
|
|
23
|
+
left?: MerkleNode;
|
|
24
|
+
right?: MerkleNode;
|
|
25
|
+
data?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Merkle inclusion proof
|
|
29
|
+
*/
|
|
30
|
+
export interface MerkleProof {
|
|
31
|
+
/** Leaf hash being proven */
|
|
32
|
+
leafHash: string;
|
|
33
|
+
/** Proof path (sibling hashes) */
|
|
34
|
+
path: Array<{
|
|
35
|
+
hash: string;
|
|
36
|
+
position: 'left' | 'right';
|
|
37
|
+
}>;
|
|
38
|
+
/** Root hash */
|
|
39
|
+
root: string;
|
|
40
|
+
/** Leaf index in tree */
|
|
41
|
+
leafIndex: number;
|
|
42
|
+
/** Total leaves in tree */
|
|
43
|
+
treeSize: number;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Merkle tree anchor commitment
|
|
47
|
+
*/
|
|
48
|
+
export interface MerkleAnchor {
|
|
49
|
+
/** Unique anchor ID */
|
|
50
|
+
anchorId: string;
|
|
51
|
+
/** Merkle root hash */
|
|
52
|
+
rootHash: string;
|
|
53
|
+
/** Number of leaves in tree */
|
|
54
|
+
leafCount: number;
|
|
55
|
+
/** Timestamp of anchor creation */
|
|
56
|
+
timestamp: Date;
|
|
57
|
+
/** External anchor references */
|
|
58
|
+
externalAnchors: ExternalAnchor[];
|
|
59
|
+
/** Signature of root by anchor service */
|
|
60
|
+
signature?: string;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* External anchor reference
|
|
64
|
+
*/
|
|
65
|
+
export interface ExternalAnchor {
|
|
66
|
+
/** Type of external anchor */
|
|
67
|
+
type: 'ethereum' | 'bitcoin' | 'rfc3161' | 'custom';
|
|
68
|
+
/** Transaction hash or reference ID */
|
|
69
|
+
reference: string;
|
|
70
|
+
/** Anchor timestamp */
|
|
71
|
+
timestamp?: Date;
|
|
72
|
+
/** Confirmation status */
|
|
73
|
+
confirmed: boolean;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Batch aggregation result
|
|
77
|
+
*/
|
|
78
|
+
export interface BatchAggregationResult {
|
|
79
|
+
/** Anchor record */
|
|
80
|
+
anchor: MerkleAnchor;
|
|
81
|
+
/** Proofs for each item */
|
|
82
|
+
proofs: Map<string, MerkleProof>;
|
|
83
|
+
/** Time taken in ms */
|
|
84
|
+
durationMs: number;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Build Merkle tree from leaf hashes
|
|
88
|
+
*/
|
|
89
|
+
export declare function buildMerkleTree(leafHashes: string[]): MerkleNode | null;
|
|
90
|
+
/**
|
|
91
|
+
* Generate Merkle proof for a leaf
|
|
92
|
+
*/
|
|
93
|
+
export declare function generateMerkleProof(leafHashes: string[], leafIndex: number): MerkleProof | null;
|
|
94
|
+
/**
|
|
95
|
+
* Verify a Merkle proof
|
|
96
|
+
*/
|
|
97
|
+
export declare function verifyMerkleProof(proof: MerkleProof): boolean;
|
|
98
|
+
/**
|
|
99
|
+
* Merkle aggregation configuration
|
|
100
|
+
*/
|
|
101
|
+
export interface MerkleAggregationConfig {
|
|
102
|
+
/** Minimum items before auto-anchor */
|
|
103
|
+
minBatchSize: number;
|
|
104
|
+
/** Maximum items before forced anchor */
|
|
105
|
+
maxBatchSize: number;
|
|
106
|
+
/** Maximum time before auto-anchor (ms) */
|
|
107
|
+
maxBatchAgeMs: number;
|
|
108
|
+
/** Enable external anchoring */
|
|
109
|
+
enableExternalAnchoring: boolean;
|
|
110
|
+
/** External anchor service URLs */
|
|
111
|
+
externalAnchorServices?: {
|
|
112
|
+
ethereum?: string;
|
|
113
|
+
bitcoin?: string;
|
|
114
|
+
rfc3161?: string;
|
|
115
|
+
};
|
|
116
|
+
/** Signing key for anchors */
|
|
117
|
+
signingKey?: string;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Merkle Aggregation Service
|
|
121
|
+
*
|
|
122
|
+
* Aggregates proofs into Merkle trees for efficient batch verification
|
|
123
|
+
* and external anchoring.
|
|
124
|
+
*/
|
|
125
|
+
export declare class MerkleAggregationService {
|
|
126
|
+
private config;
|
|
127
|
+
private pending;
|
|
128
|
+
private anchors;
|
|
129
|
+
private proofsByAnchor;
|
|
130
|
+
private anchorTimer;
|
|
131
|
+
private signingKey;
|
|
132
|
+
constructor(config?: Partial<MerkleAggregationConfig>);
|
|
133
|
+
/**
|
|
134
|
+
* Add an item for aggregation
|
|
135
|
+
*/
|
|
136
|
+
addItem(id: string, data: string): Promise<void>;
|
|
137
|
+
/**
|
|
138
|
+
* Add a proof for aggregation
|
|
139
|
+
*/
|
|
140
|
+
addProof(proof: Proof): Promise<void>;
|
|
141
|
+
/**
|
|
142
|
+
* Force anchor current batch
|
|
143
|
+
*/
|
|
144
|
+
anchor(): Promise<BatchAggregationResult | null>;
|
|
145
|
+
/**
|
|
146
|
+
* Submit to external anchoring services
|
|
147
|
+
*/
|
|
148
|
+
private submitExternalAnchors;
|
|
149
|
+
/**
|
|
150
|
+
* Submit RFC 3161 timestamp request
|
|
151
|
+
*/
|
|
152
|
+
private submitRFC3161Timestamp;
|
|
153
|
+
/**
|
|
154
|
+
* Submit Ethereum anchor
|
|
155
|
+
*/
|
|
156
|
+
private submitEthereumAnchor;
|
|
157
|
+
/**
|
|
158
|
+
* Get anchor by ID
|
|
159
|
+
*/
|
|
160
|
+
getAnchor(anchorId: string): MerkleAnchor | undefined;
|
|
161
|
+
/**
|
|
162
|
+
* Get proof for an item
|
|
163
|
+
*/
|
|
164
|
+
getProof(anchorId: string, itemId: string): MerkleProof | undefined;
|
|
165
|
+
/**
|
|
166
|
+
* Verify item inclusion in an anchor
|
|
167
|
+
*/
|
|
168
|
+
verifyInclusion(anchorId: string, itemId: string, data: string): boolean;
|
|
169
|
+
/**
|
|
170
|
+
* Get all anchors
|
|
171
|
+
*/
|
|
172
|
+
getAllAnchors(): MerkleAnchor[];
|
|
173
|
+
/**
|
|
174
|
+
* Get pending count
|
|
175
|
+
*/
|
|
176
|
+
getPendingCount(): number;
|
|
177
|
+
/**
|
|
178
|
+
* Get statistics
|
|
179
|
+
*/
|
|
180
|
+
getStats(): {
|
|
181
|
+
totalAnchors: number;
|
|
182
|
+
totalProofs: number;
|
|
183
|
+
pendingItems: number;
|
|
184
|
+
externalAnchors: number;
|
|
185
|
+
};
|
|
186
|
+
/**
|
|
187
|
+
* Cleanup resources
|
|
188
|
+
*/
|
|
189
|
+
destroy(): void;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Create a Merkle aggregation service
|
|
193
|
+
*/
|
|
194
|
+
export declare function createMerkleAggregationService(config?: Partial<MerkleAggregationConfig>): MerkleAggregationService;
|
|
195
|
+
//# sourceMappingURL=merkle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merkle.d.ts","sourceRoot":"","sources":["../../src/proof/merkle.ts"],"names":[],"mappings":"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"}
|