@mikeargento/bitgraph-audit 0.1.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/LICENSE +21 -0
- package/README.md +11 -0
- package/dist/anchors.d.ts +31 -0
- package/dist/anchors.d.ts.map +1 -0
- package/dist/anchors.js +116 -0
- package/dist/anchors.js.map +1 -0
- package/dist/anomalies.d.ts +42 -0
- package/dist/anomalies.d.ts.map +1 -0
- package/dist/anomalies.js +642 -0
- package/dist/anomalies.js.map +1 -0
- package/dist/attestation.d.ts +20 -0
- package/dist/attestation.d.ts.map +1 -0
- package/dist/attestation.js +795 -0
- package/dist/attestation.js.map +1 -0
- package/dist/audit.d.ts +19 -0
- package/dist/audit.d.ts.map +1 -0
- package/dist/audit.js +116 -0
- package/dist/audit.js.map +1 -0
- package/dist/authority.d.ts +37 -0
- package/dist/authority.d.ts.map +1 -0
- package/dist/authority.js +126 -0
- package/dist/authority.js.map +1 -0
- package/dist/aws-nitro-root-ca.d.ts +24 -0
- package/dist/aws-nitro-root-ca.d.ts.map +1 -0
- package/dist/aws-nitro-root-ca.js +44 -0
- package/dist/aws-nitro-root-ca.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +257 -0
- package/dist/cli.js.map +1 -0
- package/dist/contents-hash.d.ts +30 -0
- package/dist/contents-hash.d.ts.map +1 -0
- package/dist/contents-hash.js +73 -0
- package/dist/contents-hash.js.map +1 -0
- package/dist/export.d.ts +64 -0
- package/dist/export.d.ts.map +1 -0
- package/dist/export.js +192 -0
- package/dist/export.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/ingest.d.ts +36 -0
- package/dist/ingest.d.ts.map +1 -0
- package/dist/ingest.js +828 -0
- package/dist/ingest.js.map +1 -0
- package/dist/reconstruct.d.ts +40 -0
- package/dist/reconstruct.d.ts.map +1 -0
- package/dist/reconstruct.js +400 -0
- package/dist/reconstruct.js.map +1 -0
- package/dist/report-json.d.ts +3 -0
- package/dist/report-json.d.ts.map +1 -0
- package/dist/report-json.js +290 -0
- package/dist/report-json.js.map +1 -0
- package/dist/report-md.d.ts +3 -0
- package/dist/report-md.d.ts.map +1 -0
- package/dist/report-md.js +853 -0
- package/dist/report-md.js.map +1 -0
- package/dist/rlp.d.ts +37 -0
- package/dist/rlp.d.ts.map +1 -0
- package/dist/rlp.js +120 -0
- package/dist/rlp.js.map +1 -0
- package/dist/tar.d.ts +47 -0
- package/dist/tar.d.ts.map +1 -0
- package/dist/tar.js +483 -0
- package/dist/tar.js.map +1 -0
- package/dist/temporal.d.ts +55 -0
- package/dist/temporal.d.ts.map +1 -0
- package/dist/temporal.js +461 -0
- package/dist/temporal.js.map +1 -0
- package/dist/types.d.ts +1389 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/validity.d.ts +21 -0
- package/dist/validity.d.ts.map +1 -0
- package/dist/validity.js +86 -0
- package/dist/validity.js.map +1 -0
- package/dist/verify-tiers.d.ts +11 -0
- package/dist/verify-tiers.d.ts.map +1 -0
- package/dist/verify-tiers.js +120 -0
- package/dist/verify-tiers.js.map +1 -0
- package/dist/witness.d.ts +25 -0
- package/dist/witness.d.ts.map +1 -0
- package/dist/witness.js +308 -0
- package/dist/witness.js.map +1 -0
- package/package.json +42 -0
- package/src/anchors.ts +168 -0
- package/src/anomalies.ts +773 -0
- package/src/attestation.ts +878 -0
- package/src/audit.ts +136 -0
- package/src/authority.ts +165 -0
- package/src/aws-nitro-root-ca.ts +47 -0
- package/src/cli.ts +284 -0
- package/src/contents-hash.ts +95 -0
- package/src/export.ts +278 -0
- package/src/index.ts +122 -0
- package/src/ingest.ts +967 -0
- package/src/reconstruct.ts +491 -0
- package/src/report-json.ts +331 -0
- package/src/report-md.ts +1067 -0
- package/src/rlp.ts +142 -0
- package/src/tar.ts +587 -0
- package/src/temporal.ts +629 -0
- package/src/types.ts +1528 -0
- package/src/validity.ts +90 -0
- package/src/verify-tiers.ts +137 -0
- package/src/witness.ts +407 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"witness.js","sourceRoot":"","sources":["../src/witness.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAErF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAYrD,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAC9B,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAClC,MAAM,gBAAgB,GAAG,qBAAqB,CAAC;AAC/C,MAAM,mBAAmB,GAAG,4CAA4C,CAAC;AAEzE,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAoB,EACpB,cAAoC;IAEpC,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAwB,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAE1F,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;QAC3C,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAClC,MAAM,OAAO,GAAyB;gBACpC,WAAW,EAAE,WAAW,CAAC,IAAI;gBAC7B,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM;gBAC9B,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM;aAC/B,CAAC;YACF,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvB,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;YAClC,SAAS;QACX,CAAC;QAED,wDAAwD;QACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAsB,CAAC;QAChD,MAAM,OAAO,GAAI,OAAO,CAAC,WAAsB,CAAC,WAAW,EAAE,CAAC;QAC9D,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;YAC1D,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC;YAChD,OAAO,OAAO,KAAK,SAAS,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC;QAEH,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAyB;gBACpC,WAAW,EAAE,WAAW,CAAC,IAAI;gBAC7B,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,mBAAmB;gBAC3B,MAAM,EACJ,kFAAkF;oBAClF,8CAA8C;gBAChD,iBAAiB,EAAE,QAAQ;aAC5B,CAAC;YACF,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvB,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;YAClC,SAAS;QACX,CAAC;QAED,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YACpD,MAAM,WAAW,GAAG,WAAW,KAAK,SAAS,IAAI,CAAC,MAAM,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAC;YAC3F,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;YACvG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvB,IAAI,CAAC,OAAO,CAAC,QAAQ;gBAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAChC,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,WAA8B,EAC9B,WAA0B;IAE1B,MAAM,OAAO,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC3C,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO;YACL,WAAW,EAAE,WAAW,CAAC,IAAI;YAC7B,eAAe,EAAE,WAAW,CAAC,SAAS;YACtC,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM;YAC9B,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM;SAC/B,CAAC;IACJ,CAAC;IACD,MAAM,WAAW,GAAG,MAAM,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAC5D,OAAO,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;AAClG,CAAC;AAiBD,SAAS,aAAa,CAAC,WAA8B;IACnD,MAAM,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC;IAE9B,4BAA4B;IAC5B,MAAM,YAAY,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC;IACvC,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;QACrC,OAAO,SAAS,CAAC,yCAAyC,CAAC,CAAC;IAC9D,CAAC;IACD,MAAM,WAAW,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC;IACrC,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACzF,OAAO,SAAS,CAAC,sDAAsD,CAAC,CAAC;IAC3E,CAAC;IACD,MAAM,SAAS,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC;IACjC,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACvE,OAAO,SAAS,CAAC,8DAA8D,CAAC,CAAC;IACnF,CAAC;IAED,kEAAkE;IAClE,MAAM,WAAW,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IAC7C,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC,iDAAiD,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,KAAuC,CAAC;IAC5C,IAAI,CAAC;QACH,KAAK,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP,MAAM,EAAE,qBAAqB;gBAC7B,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC/D;SACF,CAAC;IACJ,CAAC;IAED,0DAA0D;IAC1D,MAAM,YAAY,GAAG,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;IAE3D,OAAO;QACL,YAAY;QACZ,KAAK;QACL,WAAW,EAAE,SAAS;QACtB,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC;KACnC,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,MAAc;IAC/B,OAAO,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,EAAE,EAAE,CAAC;AAC9D,CAAC;AAED,8EAA8E;AAC9E,iDAAiD;AACjD,8EAA8E;AAE9E,SAAS,YAAY,CACnB,OAAuB,EACvB,WAAmB,EACnB,eAAuB,EACvB,WAAsC,EACtC,WAAoB;IAEpB,MAAM,YAAY,GAAG,OAAO,CAAC,YAAsB,CAAC;IACpD,MAAM,IAAI,GAAG;QACX,WAAW;QACX,eAAe;QACf,iBAAiB,EAAE,YAAY;KAChC,CAAC;IACF,MAAM,IAAI,GAAG,CAAC,MAAmB,EAAE,MAAc,EAAE,KAAgC,EAAwB,EAAE,CAAC,CAAC;QAC7G,GAAG,IAAI;QACP,QAAQ,EAAE,KAAK;QACf,MAAM;QACN,MAAM;QACN,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChF,CAAC,CAAC;IAEH,wEAAwE;IACxE,4DAA4D;IAC5D,IAAI,WAAW,KAAK,SAAS,IAAI,CAAC,WAAW,EAAE,CAAC;QAC9C,OAAO,IAAI,CACT,wBAAwB,EACxB,wFAAwF,CACzF,CAAC;IACJ,CAAC;IAED,kEAAkE;IAClE,MAAM,OAAO,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC/C,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,YAAY,EAAE,CAAC;QACpE,OAAO,IAAI,CACT,uBAAuB,EACvB,OAAO,KAAK,SAAS;YACnB,CAAC,CAAC,qEAAqE;YACvE,CAAC,CAAC,0FAA0F,CAC/F,CAAC;IACJ,CAAC;IAED,oEAAoE;IACpE,mEAAmE;IACnE,mEAAmE;IACnE,sBAAsB;IACtB,MAAM,MAAM,GAAG,oBAAoB,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC;IAChE,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,IAAI,CACT,yBAAyB,EACzB,gFAAgF,CACjF,CAAC;IACJ,CAAC;IACD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9D,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC;QACrC,OAAO,IAAI,CACT,yBAAyB,EACzB,oGAAoG,CACrG,CAAC;IACJ,CAAC;IAED,0CAA0C;IAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAyC,CAAC;IAChE,MAAM,UAAU,GAAG,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC9C,IAAI,UAAU,KAAK,SAAS,IAAI,CAAC,CAAC,UAAU,YAAY,UAAU,CAAC,EAAE,CAAC;QACpE,OAAO,IAAI,CACT,sBAAsB,EACtB,mBAAmB,mBAAmB,iDAAiD,CACxF,CAAC;IACJ,CAAC;IACD,MAAM,YAAY,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAClD,IAAI,YAAY,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC;QAC3C,OAAO,IAAI,CACT,+BAA+B,EAC/B,kCAAkC,OAAO,CAAC,aAAa,sCAAsC,YAAY,EAAE,EAC3G,EAAE,WAAW,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,CACtC,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC3C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,SAAS,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACvD,IAAI,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,YAAY,EAAE,CAAC;YAClE,OAAO,IAAI,CACT,+BAA+B,EAC/B,iDAAiD,SAAS,sCAAsC,YAAY,EAAE,EAC9G,EAAE,WAAW,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,CACtC,CAAC;QACJ,CAAC;IACH,CAAC;IACD,IAAK,OAAO,CAAC,WAAsB,CAAC,WAAW,EAAE,KAAK,YAAY,EAAE,CAAC;QACnE,OAAO,IAAI,CACT,+BAA+B,EAC/B,kFAAkF,EAClF,EAAE,WAAW,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,CACtC,CAAC;IACJ,CAAC;IAED,wCAAwC;IACxC,MAAM,aAAa,GAAG,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACpD,IAAI,aAAa,KAAK,SAAS,IAAI,CAAC,CAAC,aAAa,YAAY,UAAU,CAAC,EAAE,CAAC;QAC1E,OAAO,IAAI,CACT,sBAAsB,EACtB,mBAAmB,sBAAsB,8CAA8C,EACvF,EAAE,WAAW,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,CACtC,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAClD,IAAI,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAChD,OAAO,IAAI,CACT,sBAAsB,EACtB,8CAA8C,EAC9C,EAAE,WAAW,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,CACtC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,GAAG,IAAI;QACP,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,MAAM,CAAC,YAAY,CAAC;QACjC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC;KAC7B,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,iBAAiB,CAAC,KAAoB;IAC7C,OAAO,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,eAAe,CAAC,KAAoB;IAC3C,OAAO,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,eAAe,CAAC,KAAoB,EAAE,KAAa;IAC1D,MAAM,WAAW,GAAI,KAAK,CAAC,KAA4C,CAAC,aAAa,CAAC,CAAC;IACvF,IAAI,WAAW,KAAK,IAAI,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAC1F,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,KAAK,GAAI,WAAuC,CAAC,KAAK,CAAC,CAAC;IAC9D,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,SAAS,aAAa,CAAC,KAAoB;IACzC,MAAM,QAAQ,GAAI,KAAK,CAAC,KAA4C,CAAC,UAAU,CAAC,CAAC;IACjF,IAAI,QAAQ,KAAK,IAAI,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjF,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,KAAK,GAAI,QAAoC,CAAC,WAAW,CAAC,CAAC;IACjE,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,4EAA4E;AAC5E,SAAS,oBAAoB,CAAC,KAAyB;IACrD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC7C,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAC/E,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,UAAU,CAAC,CAAa,EAAE,CAAa;IAC9C,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,IAAI,IAAK,CAAC,CAAC,CAAC,CAAY,GAAI,CAAC,CAAC,CAAC,CAAY,CAAC;IAC/E,OAAO,IAAI,KAAK,CAAC,CAAC;AACpB,CAAC;AAED,SAAS,SAAS,CAAC,OAA6B;IAC9C,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,MAAqB;QACnC,IAAI,EAAE,OAAO,CAAC,WAAW;QACzB,OAAO,EAAE,4BAA4B,OAAO,CAAC,MAAM,IAAI,qBAAqB,8EAA8E;QAC1J,OAAO,EAAE;YACP,GAAG,CAAC,OAAO,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9F,GAAG,CAAC,OAAO,CAAC,iBAAiB,KAAK,SAAS;gBACzC,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE;gBAClD,CAAC,CAAC,EAAE,CAAC;SACR;KACF,CAAC;AACJ,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@mikeargento/bitgraph-audit",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Offline audit of BitGraph proof bundles: ingest, tiered verification, causal reconstruction, divergence reporting.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"bin": {
|
|
10
|
+
"bitgraph-audit": "./dist/cli.js"
|
|
11
|
+
},
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"import": "./dist/index.js",
|
|
15
|
+
"types": "./dist/index.d.ts"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"files": [
|
|
19
|
+
"dist",
|
|
20
|
+
"src",
|
|
21
|
+
"README.md",
|
|
22
|
+
"LICENSE"
|
|
23
|
+
],
|
|
24
|
+
"scripts": {
|
|
25
|
+
"build": "tsc",
|
|
26
|
+
"prepack": "tsc",
|
|
27
|
+
"typecheck": "tsc --noEmit",
|
|
28
|
+
"bench": "node scripts/bench-audit.mjs"
|
|
29
|
+
},
|
|
30
|
+
"engines": {
|
|
31
|
+
"node": ">=20"
|
|
32
|
+
},
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"@mikeargento/bitgraph-verify": "^1.1.0",
|
|
35
|
+
"@noble/hashes": "^1.4.0"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@noble/ed25519": "^2.1.0",
|
|
39
|
+
"@types/node": "^20.0.0",
|
|
40
|
+
"typescript": "^5.4.0"
|
|
41
|
+
}
|
|
42
|
+
}
|
package/src/anchors.ts
ADDED
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
// Copyright (c) 2024-2026 Mike Argento. Licensed under the MIT License. See LICENSE.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* bitgraph-audit anchor identification (G5)
|
|
5
|
+
*
|
|
6
|
+
* Ethereum anchors are ordinary chain members minted by the anchor
|
|
7
|
+
* service: same counter sequence, same prevB64 links, same signing key as
|
|
8
|
+
* every other proof on the chain. What makes a proof an anchor is the
|
|
9
|
+
* SIGNED attribution:
|
|
10
|
+
*
|
|
11
|
+
* - attribution.name === "Ethereum Anchor" is the discriminator.
|
|
12
|
+
* - attribution.message carries the Ethereum block hash string.
|
|
13
|
+
* - attribution.title carries the block number, only inside the signed
|
|
14
|
+
* Etherscan URL.
|
|
15
|
+
* - artifact.digestB64 is SHA-256 over the block-hash STRING.
|
|
16
|
+
*
|
|
17
|
+
* The unsigned metadata.type === "ethereum-anchor" is corroboration only:
|
|
18
|
+
* agreement and disagreement are recorded, and metadata alone never makes
|
|
19
|
+
* a proof an anchor. The unsigned metadata.anchor block timestamp is
|
|
20
|
+
* never read; wall-clock evidence comes exclusively from verified anchor
|
|
21
|
+
* witnesses (witness.ts). No wall-clock time is ever derived from a block
|
|
22
|
+
* number.
|
|
23
|
+
*
|
|
24
|
+
* Run after verifyObservedProofs so the records carry the run
|
|
25
|
+
* verification status; identification itself reads only the signed body.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
import type {
|
|
29
|
+
AnchorIdentification,
|
|
30
|
+
AnchorRecord,
|
|
31
|
+
AuditFinding,
|
|
32
|
+
IngestResult,
|
|
33
|
+
ObservedProof,
|
|
34
|
+
} from "./types.js";
|
|
35
|
+
|
|
36
|
+
const ANCHOR_ATTRIBUTION_NAME = "Ethereum Anchor";
|
|
37
|
+
const ANCHOR_METADATA_TYPE = "ethereum-anchor";
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Strict Etherscan block URL, the exact form the anchor service signs
|
|
41
|
+
* (packages/hosted/src/bitcoin-anchor.ts): https://etherscan.io/block/{n}.
|
|
42
|
+
* Anything else is reported unparseable and the block number treated as
|
|
43
|
+
* absent, never guessed.
|
|
44
|
+
*/
|
|
45
|
+
const ETHERSCAN_BLOCK_URL = /^https:\/\/etherscan\.io\/block\/([0-9]+)$/;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Identify anchor proofs among the observed proofs. Read-only and
|
|
49
|
+
* deterministic (observation order).
|
|
50
|
+
*/
|
|
51
|
+
export function identifyAnchors(ingest: IngestResult): AnchorIdentification {
|
|
52
|
+
const anchors: AnchorRecord[] = [];
|
|
53
|
+
const metadataOnlyProofHashes: string[] = [];
|
|
54
|
+
const findings: AuditFinding[] = [];
|
|
55
|
+
|
|
56
|
+
for (const proof of ingest.proofs) {
|
|
57
|
+
const attributionName = readAttributionField(proof, "name");
|
|
58
|
+
const metadataType = readMetadataType(proof);
|
|
59
|
+
const signedAnchor = attributionName === ANCHOR_ATTRIBUTION_NAME;
|
|
60
|
+
|
|
61
|
+
if (!signedAnchor) {
|
|
62
|
+
if (metadataType === ANCHOR_METADATA_TYPE) {
|
|
63
|
+
// Unsigned claim with no signed backing: recorded, never trusted.
|
|
64
|
+
metadataOnlyProofHashes.push(proof.proofHash);
|
|
65
|
+
findings.push({
|
|
66
|
+
code: "anchor-metadata-only-claim",
|
|
67
|
+
...pathOf(proof),
|
|
68
|
+
message:
|
|
69
|
+
"unsigned metadata.type claims ethereum-anchor, but the signed attribution does not " +
|
|
70
|
+
"identify this proof as an anchor. Metadata is advisory and unsigned; the proof is " +
|
|
71
|
+
"not treated as an anchor.",
|
|
72
|
+
details: { proofHash: proof.proofHash },
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Corroboration between the signed discriminator and the unsigned
|
|
79
|
+
// metadata. Only a present-but-different type disagrees; an absent
|
|
80
|
+
// type is simply absent corroboration.
|
|
81
|
+
const corroboration =
|
|
82
|
+
metadataType === ANCHOR_METADATA_TYPE
|
|
83
|
+
? ("agrees" as const)
|
|
84
|
+
: metadataType === undefined
|
|
85
|
+
? ("absent" as const)
|
|
86
|
+
: ("disagrees" as const);
|
|
87
|
+
if (corroboration === "disagrees") {
|
|
88
|
+
findings.push({
|
|
89
|
+
code: "anchor-metadata-disagreement",
|
|
90
|
+
...pathOf(proof),
|
|
91
|
+
message:
|
|
92
|
+
`signed attribution identifies an Ethereum anchor, but unsigned metadata.type is ` +
|
|
93
|
+
`${JSON.stringify(metadataType)}. The signed field governs; the disagreement is recorded.`,
|
|
94
|
+
details: { proofHash: proof.proofHash, metadataType: metadataType as string },
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
const blockHash = readAttributionField(proof, "message");
|
|
99
|
+
const title = readAttributionField(proof, "title");
|
|
100
|
+
const blockNumber = title !== undefined ? (ETHERSCAN_BLOCK_URL.exec(title)?.[1] ?? undefined) : undefined;
|
|
101
|
+
if (blockNumber === undefined) {
|
|
102
|
+
findings.push({
|
|
103
|
+
code: "anchor-title-unparseable",
|
|
104
|
+
...pathOf(proof),
|
|
105
|
+
message:
|
|
106
|
+
title === undefined
|
|
107
|
+
? "anchor proof carries no signed attribution.title; the signed block number is absent"
|
|
108
|
+
: "anchor attribution.title does not parse as an Etherscan block URL; the signed block number is treated as absent",
|
|
109
|
+
details: {
|
|
110
|
+
proofHash: proof.proofHash,
|
|
111
|
+
...(title !== undefined ? { title } : {}),
|
|
112
|
+
},
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
const verification = proof.verification;
|
|
117
|
+
anchors.push({
|
|
118
|
+
proofHash: proof.proofHash,
|
|
119
|
+
...(proof.epochId !== undefined ? { epochId: proof.epochId } : {}),
|
|
120
|
+
chainId: proof.chainId,
|
|
121
|
+
...(proof.counter !== undefined ? { counter: proof.counter } : {}),
|
|
122
|
+
...(proof.slotCounter !== undefined ? { slotCounter: proof.slotCounter } : {}),
|
|
123
|
+
...(blockHash !== undefined ? { blockHash } : {}),
|
|
124
|
+
...(blockNumber !== undefined ? { blockNumber } : {}),
|
|
125
|
+
metadataCorroboration: corroboration,
|
|
126
|
+
...(verification !== undefined
|
|
127
|
+
? {
|
|
128
|
+
verificationTier: verification.tier,
|
|
129
|
+
verificationStatus: verification.status,
|
|
130
|
+
...(verification.reason !== undefined ? { verificationReason: verification.reason } : {}),
|
|
131
|
+
}
|
|
132
|
+
: {}),
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return { anchors, metadataOnlyProofHashes, findings };
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// ---------------------------------------------------------------------------
|
|
140
|
+
// Field readers (tolerant: structural problems belong to the verification
|
|
141
|
+
// dimension, not to anchor identification)
|
|
142
|
+
// ---------------------------------------------------------------------------
|
|
143
|
+
|
|
144
|
+
function readAttributionField(
|
|
145
|
+
proof: ObservedProof,
|
|
146
|
+
field: "name" | "title" | "message"
|
|
147
|
+
): string | undefined {
|
|
148
|
+
const attribution = (proof.proof as unknown as Record<string, unknown>)["attribution"];
|
|
149
|
+
if (attribution === null || typeof attribution !== "object" || Array.isArray(attribution)) {
|
|
150
|
+
return undefined;
|
|
151
|
+
}
|
|
152
|
+
const value = (attribution as Record<string, unknown>)[field];
|
|
153
|
+
return typeof value === "string" ? value : undefined;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
function readMetadataType(proof: ObservedProof): string | undefined {
|
|
157
|
+
const metadata = (proof.proof as unknown as Record<string, unknown>)["metadata"];
|
|
158
|
+
if (metadata === null || typeof metadata !== "object" || Array.isArray(metadata)) {
|
|
159
|
+
return undefined;
|
|
160
|
+
}
|
|
161
|
+
const value = (metadata as Record<string, unknown>)["type"];
|
|
162
|
+
return typeof value === "string" ? value : undefined;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
function pathOf(proof: ObservedProof): { path?: string } {
|
|
166
|
+
const path = proof.sources[0]?.path;
|
|
167
|
+
return path !== undefined ? { path } : {};
|
|
168
|
+
}
|