@open-charging-cloud/wwcp-poi 0.1.0 → 0.1.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.
Files changed (38) hide show
  1. package/CHANGELOG.md +155 -1
  2. package/README.md +70 -8
  3. package/dist/common.d.ts +9 -0
  4. package/dist/common.d.ts.map +1 -1
  5. package/dist/history/apply.d.ts.map +1 -1
  6. package/dist/index.d.ts +1 -0
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +1671 -198
  9. package/dist/index.js.map +1 -1
  10. package/dist/keys.d.ts.map +1 -1
  11. package/dist/network/certificates.d.ts +6 -4
  12. package/dist/network/certificates.d.ts.map +1 -1
  13. package/dist/network/evTaler.d.ts +13 -0
  14. package/dist/network/evTaler.d.ts.map +1 -1
  15. package/dist/network/identifications.d.ts +15 -2
  16. package/dist/network/identifications.d.ts.map +1 -1
  17. package/dist/network/partyKeys.d.ts.map +1 -1
  18. package/dist/network/roamingNetwork.d.ts +9 -0
  19. package/dist/network/roamingNetwork.d.ts.map +1 -1
  20. package/dist/network/versionTexts.d.ts +3 -2
  21. package/dist/network/versionTexts.d.ts.map +1 -1
  22. package/dist/network/writtenForm.d.ts +24 -0
  23. package/dist/network/writtenForm.d.ts.map +1 -0
  24. package/dist/proofs/keyStatement.d.ts +6 -1
  25. package/dist/proofs/keyStatement.d.ts.map +1 -1
  26. package/dist/proofs/signingKeyCertificate.d.ts +5 -0
  27. package/dist/proofs/signingKeyCertificate.d.ts.map +1 -1
  28. package/dist/proofs/stationProof.d.ts +3 -2
  29. package/dist/proofs/stationProof.d.ts.map +1 -1
  30. package/dist/proofs/trustContext.d.ts +50 -0
  31. package/dist/proofs/trustContext.d.ts.map +1 -0
  32. package/dist/verifier/chargingStation.d.ts +2 -1
  33. package/dist/verifier/chargingStation.d.ts.map +1 -1
  34. package/dist/verifier/trust.d.ts +3 -2
  35. package/dist/verifier/trust.d.ts.map +1 -1
  36. package/dist/verifier/version.d.ts +2 -1
  37. package/dist/verifier/version.d.ts.map +1 -1
  38. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,6 +1,160 @@
1
1
  # Changelog
2
2
 
3
- ## 0.1.0 (unreleased)
3
+ ## Unreleased
4
+
5
+ ## 0.1.1 (2026-10-31)
6
+
7
+ `TrustContext`, for apps that import a trust anchor before they trust its keys. `TrustContext.evaluate` checks a key
8
+ statement against the identity keys of a trust anchor the app trusts locally and reports its signatures, signers, quorum
9
+ and validity apart (`TrustEvaluation`); a context only when all of them hold, `TrustContext.create` throws otherwise.
10
+ The context keeps the holders of the trust anchor and its quorum, and binds the roaming network, its operator, the
11
+ signed key statement and the time of the evaluation. `OperatorTrust.of` and `fromOperatorJSON`, `verifyVersion`,
12
+ `verifyChargingStation`, `ChargingStationProof.verify` and `verifyCheckpoint` take it in place of a trust anchor; given
13
+ a trust anchor, they verify as before. The app keeps storing and showing its decisions and creates a context from its
14
+ current decisions for every verification. Tested with genuine signatures, the proofs of the conformance tests and in
15
+ Chromium.
16
+
17
+ S31 and S32 of WWCP_POI `d6b0127`. A release keeps its version: a new version is a new release, so that a
18
+ certificate naming a release names the version that was assessed. A change set updating or removing the `version` of a
19
+ transparency software release is refused, and so is one removing a release and adding it again with another version,
20
+ after its last change (`ChangedTransparencySoftwareVersion`; versions compared trimmed and without case, as
21
+ `TransparencySoftwareVersion` compares them). The `notifiedBodyNumber` and `notifiedFor` of a conformity assessment
22
+ body are the roaming network operator's, which vets the body, also once the body has keys: a body issuing a
23
+ certificate under a legislation the same change set adds to its `notifiedFor` signs it together with the operator. A
24
+ number names one body, in every version and after every change set (`DuplicateNotifiedBodyNumber`).
25
+ `tests/releasesAndBodies.test.ts`, after `A_release_keeps_its_version` and
26
+ `The_roaming_network_operator_says_what_a_body_is_notified_for`.
27
+
28
+ A conformity assessment body is refused as its constructor in WWCP_POI refuses it, in its words and order: a
29
+ `notifiedBodyNumber` not of four digits (nothing after them, also no line feed, since WWCP_POI `f53d220`), a legislation
30
+ of `notifiedFor` empty or given twice (with case), a certificate issued under a legislation it is not notified for
31
+ (exactly as written, its certificates in the ordinal order of their identifications), each wrapped as WWCP_POI wraps it,
32
+ e.g. "The given JSON representation of a conformity assessment body is invalid: The certificate 'PTB-2026-0042' is issued
33
+ under the legislation 'CRA', which the conformity assessment body 'PTB' is not notified for! (Parameter 'Certificates')";
34
+ before them a `notifiedBodyNumber` that is no text and a `notifiedFor` that is no array of texts. A version is refused
35
+ for what WWCP_POI refuses of an entity as it reads it before what it refuses of the network made of them, the
36
+ identifications unique within the network last. Checked against WWCP_POI3 itself, on 33 versions of QA: the same, but
37
+ for two refusals of one body at once, a key and its number. In a change set WWCP_POI names the change ("Change 0: …"),
38
+ this library refuses the version it leads to.
39
+
40
+ The four vectors of WWCPPOIConformanceTests `d4a4928` vendored, `poi-refusals.json` of 93 vectors: a key of a party
41
+ whose `notAfter` is written with an offset, as a date only or as null, and one whose key is another CBOR of the same
42
+ COSE key. WWCP_POI refuses them too since `a425530` (D13 there, SPECIFICATION.md 2, Written forms), as this library did;
43
+ the key not in deterministic CBOR now in its words: "Invalid COSE key: Invalid deterministic CBOR: the key of the public
44
+ key '…' is not written as the deterministic CBOR of its COSE key!"
45
+
46
+
47
+ The four vectors of WWCPPOIConformanceTests `ad7c73e` vendored, `poi-refusals.json` of 97 vectors: a conformity
48
+ assessment body as its constructor in WWCP_POI checks it, a certificate issued under a legislation it is not notified
49
+ for, a notified body number of three digits, a legislation notified for empty, one given twice (D14 there, found against
50
+ `1f914ac`, fixed by `4ff1fc2` here).
51
+
52
+ The legislations a conformity assessment body is notified for are refused unless written in their ordinal order, as
53
+ WWCP_POI writes them (Achim's decision of 2026-10-29, as D13 decided it for keys): WWCP_POI takes another order and
54
+ writes it sorted, which written again would be another text than the one hashed. Refused as the body is read, before
55
+ what its constructor checks, in the words of this library: "The legislations the conformity assessment body 'PTB' is
56
+ notified for are written in their ordinal order!"
57
+
58
+ The four vectors of WWCPPOIConformanceTests `012ce9d` vendored, `poi-refusals.json` of 101 vectors: a conformity
59
+ assessment body as the content holds it, notified for legislations out of their ordinal order, with a notified body
60
+ number that is no text, with a notifiedFor that is no array of texts, and with the number of another body. WWCP_POI
61
+ refuses the order since `8108522`, in the words of this library.
62
+
63
+ WWCP_POI `f53d220`: its regular expressions end with `\z`, no longer with `$`, which in .NET matched before a last line
64
+ feed as well. A notified body number "0102" with a line feed is refused, which this library had taken as WWCP_POI took
65
+ it; a certificate timestamp with a line feed after its offset was refused here already, as every check of this library
66
+ ends at the end of its text.
67
+
68
+ The content as WWCP_POI writes it (SPECIFICATION.md 2, Written forms): what WWCP_POI takes of a version and writes otherwise
69
+ is refused, as written again it would be another text than the one hashed (Achim's decision of 2026-10-29, as D13
70
+ decided it for keys and 9decdb5 for the legislations a body is notified for). Of every entity, `notWrittenAsHeld`, as a
71
+ version is read, after everything WWCP_POI refuses of it, so that its words come first: what the content orders
72
+ (its ordered lists, `POIJSON.OrderedIds`, entities, keys, exchanges) out of its ordinal order, the texts of an ordered list
73
+ untrimmed, a list WWCP_POI writes only with an element given empty (about ninety; not the versions, releases and energy
74
+ meters of a certificate, the elements of a price, the exchanges of a merchant, the identity keys of a key statement), a
75
+ property given as null, an embedded object naming a JSON-LD context, a text in languages not naming each language as
76
+ Styx writes it, in lower case, with a text, a timestamp not UTC to the millisecond; custom data held as given. Of a key of
77
+ a party, a property WWCP_POI does not read; of an EV Taler merchant and its exchanges, such a property, a base URL not as
78
+ Hermod writes it, trimmed and with its scheme, and a currency not by its code. In the words of this library, e.g.
79
+ "'chargingStationOperators[0].chargingPools[1].paymentOptions' is not written as the content holds it: its elements are in the
80
+ order the content holds them in!". The new values of a change set are checked by the same rules (`asGiven`), as
81
+ WWCP_POI refuses a new value the content holds otherwise, "e.g. an empty array written as none". Found by probing
82
+ WWCP_POI3 at 8108522 with 201 versions of QA: of the 20 it takes and writes otherwise this library took all, and
83
+ refuses all now; every one it takes as given is taken, every one it refuses refused, and every version of the frozen run
84
+ is written as the content holds it. `tests/writtenForm.test.ts`.
85
+
86
+ What the constructor of the roaming network refuses, of a version, in the words of WWCP_POI: as an argument of its
87
+ parameter, which its TryParse names, e.g. "The given JSON representation of a roaming network is invalid: The notified
88
+ body number '0102' of the conformity assessment body 'PTB' is the one of the conformity assessment body 'BSI' already!
89
+ (Parameter 'ConformityAssessmentBodies')", in its order (the groups of providers and the offers before the releases): the
90
+ identifications unique within the network, and the key statement and the certificates of the roaming network operator
91
+ (`KeyStatementError`, 'Operator'), its key statement of another network now before its certificates. After the last change
92
+ of a change set they are named bare, in the order WWCP_POI checks them there (`RoamingNetwork.afterChangeSet`). The
93
+ golden vectors held the inner words only. Checked against WWCP_POI3 at 8108522 on 10 versions of QA.
94
+
95
+ The roaming network operator, its key statement and the certificates of its signing keys in the words and order of
96
+ WWCP_POI3 (the TryParse of `RoamingNetworkOperator`, `RoamingNetworkKeyStatement` and
97
+ `RoamingNetworkSigningKeyCertificate`), e.g. "A key statement requires its minConsensus, a whole number from 1 to 255!",
98
+ "Invalid key in the identityKeys of a key statement!", "A signing key certificate requires the signingKey it certifies!";
99
+ what this library refuses besides (properties it does not know, identity keys out of their order) after them. What the
100
+ constructor of the operator refuses as an argument of it, "The given JSON representation of a roaming network operator is
101
+ invalid: …": a certificate by the same identity key given twice, which this library took, a signing key certified in two
102
+ forms, a key both a signing and an identity key, a quorum its keys do not have; the holder of a key as it names it ("the
103
+ holder 'BetaOrg'"). The tree hash algorithms of a roaming network as `POITreeHashAlgorithms` names them, four refusals for
104
+ the one of this library. An entity without its identification as Styx refuses it, "Missing JSON property '@id'!", which
105
+ this library took but of the roaming network and its operator (`invalidIdentification`, first of all), and one of another
106
+ JSON type in the words of the kinds WWCP_POI3 refuses it of ("Invalid 'charging pool identification'!"). Certificates and
107
+ the versions of stations, meters, their templates and models without the prefix this library gave them ("The certificate
108
+ '…': "), as WWCP_POI3 names them, with the parameter its constructor names ("(Parameter 'Versions')", 'HardwareRevisions',
109
+ 'FirmwareVersions', 'Legislation', 'NotBefore', 'EnergyMeters'), a version twice in a model as an argument of the model; a
110
+ certificate without its identification, of a certified meter a model of another JSON type, in its words.
111
+
112
+ Of the written form also, as WWCP_POI3 takes and writes it otherwise: an entity without its lastChange, which it writes as
113
+ its created; a party without its name, which it makes up of its kind and identification ("Charging Station Manufacturer
114
+ 'GraphDefined'"); a text in languages without a language, but the name of a charging station operator, which it writes
115
+ so; the releases of a certificate and the URLs of an open source license left out, which it writes also empty; the energy
116
+ meters of a certificate given empty; an identification and the type of a charging connector given as a number.
117
+
118
+ Probed against WWCP_POI3 at 8108522 with 617 versions of QA, of every kind of object a property it does not read, every
119
+ property of it removed and given in another JSON type, the tree hash algorithms and the quorum of the operator, and 10
120
+ of certificates and models: none it takes as given is refused here; of what it refuses, this library refuses all in its
121
+ words but 20, of what it takes and writes otherwise all but the properties it does not read (25 kinds, which it leaves
122
+ out). Not ported yet: properties of another JSON type or missing that WWCP_POI3 refuses (168, in the words of every kind)
123
+ and the references it checks (23, of templates, tariffs, members, manufacturers, models, releases and certificates).
124
+ `tests/operator.test.ts`, and in `writtenForm`, `identifications` and `certificates`.
125
+
126
+ The 27 vectors of WWCPPOIConformanceTests `1c36c6d` vendored, `poi-refusals.json` of 128 vectors: versions not written as
127
+ the content holds them (`version-held-*`), the 20 versions WWCP_POI3 at 8108522 took and wrote otherwise and more of their
128
+ kinds (bodies, keys, payment options and exchanges out of their order, an untrimmed payment option, lists given empty, a
129
+ property given as null, embedded JSON-LD contexts, texts in languages not as Styx writes them, a timestamp with an offset,
130
+ properties of keys, merchants and exchanges not read, URLs and currencies not as written), ten with their eTags as
131
+ published, their reasons in the words of this library, which refuses them since `5c534d4`. WWCP_POI refuses them as well
132
+ since D15 of WWCPPOIConformanceTests, fixed there in `1c36c6d` (SPECIFICATION.md 2: a reader MUST refuse a version not
133
+ written so).
134
+
135
+ The written form as WWCP_POI3 refuses it since WWCP_POI `3de830a`, which writes a version again and walks both
136
+ (RoamingNetwork.WrittenForm.cs, FirstNotWritten): `notWritten` walks a version in that order and in those words, the
137
+ reasons of this library, which WWCP_POI took over, and two of its own. "the content leaves it out", of a property given
138
+ that WWCP_POI does not write: of every entity a property its type in WWCP_POI3 neither writes (ToJSON) nor reads
139
+ (PropertyKeys), drawn from it at `3de830a` for 33 kinds and checked against the 605 versions it wrote in the frozen run
140
+ and the probes, of a key statement, its signatures, a certificate of a signing key, a coordinate, a price component and
141
+ a public key of a meter as well; `dataLicenseIds`, which a version names completely (`dataLicenses`), a license it does not know
142
+ in its words; a text in languages without a language WWCP_POI reads. "the content holds it as '…'", of a value it writes
143
+ otherwise, by the path of that value: the lastChange of an entity naming none (its created), the name of a party naming
144
+ none (not of grid and parking operators), the lists it writes also empty, an identification given as a number, texts
145
+ its types write trimmed (identifications, references, currencies, versions, e-mail addresses, URLs), URLs with the
146
+ scheme https, the identification of a charging station operator in upper case, the role of a meter, the legal status of
147
+ a release and signature methods as they are named, coordinates as doubles (50.92710 as 50.9271; quantities keep their
148
+ decimals). Of a release and its licenses, a certificate and the meters it was issued with, a property they do not read
149
+ as WWCP_POI2 refuses it ("Unknown property 'x'."). The roaming network and its operator compared without case and
150
+ trimmed, as their types read them, also of the key statement and the certificates, signed as read. Seven cases keep the
151
+ words of this library, refused where it reads them, before the written form, as WWCP_POI takes them over (Achim's
152
+ decision of 2026-10-30): a property of a key of a party, of an EV Taler merchant or of an exchange, the merchant base URL,
153
+ the base URL and the currency of an exchange not as written. Probed against WWCP_POI3 at `3de830a` with 1257 versions of
154
+ QA: none it takes is refused here; of what it refuses as written otherwise, all in its words but those seven.
155
+
156
+
157
+ ## 0.1.0 (2026-10-29)
4
158
 
5
159
  The first milestone: the examples A1 to A14 of WWCP_POI (commit `33447ac`) checked in TypeScript.
6
160
 
package/README.md CHANGED
@@ -2,8 +2,9 @@
2
2
 
3
3
  [![CI](https://github.com/OpenChargingCloud/WWCP_POI.TS/actions/workflows/ci.yml/badge.svg)](https://github.com/OpenChargingCloud/WWCP_POI.TS/actions/workflows/ci.yml)
4
4
  [![Nightly](https://github.com/OpenChargingCloud/WWCP_POI.TS/actions/workflows/nightly.yml/badge.svg)](https://github.com/OpenChargingCloud/WWCP_POI.TS/actions/workflows/nightly.yml)
5
+ [![npm](https://img.shields.io/npm/v/@open-charging-cloud/wwcp-poi)](https://www.npmjs.com/package/@open-charging-cloud/wwcp-poi)
5
6
 
6
- Verifies what a roaming network of [WWCP POI 3](https://github.com/OpenChargingCloud/WWCP_POI) publishes about its
7
+ Verifies what a roaming network of [WWCP/POI](https://github.com/OpenChargingCloud/WWCP_POI) publishes about its
7
8
  charging stations and their tariffs, from the **trust anchor** of the roaming network alone: the QR code its operator
8
9
  publishes, naming the identity keys of the operator and its quorum.
9
10
 
@@ -41,6 +42,8 @@ This repository vendors the vectors and runs them in its own suite (`tests/confo
41
42
 
42
43
  ## Installation
43
44
 
45
+ From npm, as [`@open-charging-cloud/wwcp-poi`](https://www.npmjs.com/package/@open-charging-cloud/wwcp-poi):
46
+
44
47
  ```bash
45
48
  npm install @open-charging-cloud/wwcp-poi
46
49
  ```
@@ -194,10 +197,10 @@ epoch2.root.commit.id; // the published genesis of epoch 2, 128 hexadecimal d
194
197
  | Canonical JSON, deterministic CBOR (Styx) | complete, including Styx's string escaping and decimals as `System.Decimal` holds them |
195
198
  | Keys, thumbprints, signatures | EC2, OKP and AKP COSE keys, read in the words of WWCP_POI; all signature algorithms of section 4; the key usages `infrastructure`, `tariffs`, `priceStatements`, `models`, `software`, `certificates`, `payments`, `party` |
196
199
  | Trust anchors | QR code (`WWCP/TA-2:` and Base45 of CBOR), URL and JSON forms, read and written; key statements followed by succession |
197
- | Roaming networks | ETags `json`, `cbor`, `effectiveTree`; the roaming network operator, its key statement and certificates; the keys of every party and of the roaming network operator as WWCP_POI reads them, none twice, none both a signing and an identity key, no identity key naming usages; the identifications unique within the network (grid connection points, energy meters, parking entities, transparency software releases and certificates, energy meter templates and groups, groups of operators and providers, offers), each once, compared as the C# types compare them; hardware revisions, firmware versions and serial numbers as WWCP_POI reads them, not empty, no whitespace at either end, those of a model each once; certificates as WWCP_POI reads them, for exactly one model, with its versions and releases |
200
+ | Roaming networks | ETags `json`, `cbor`, `effectiveTree`; the roaming network operator, its key statement and certificates; the keys of every party and of the roaming network operator as WWCP_POI reads them, none twice, none both a signing and an identity key, no identity key naming usages; the identifications unique within the network (grid connection points, energy meters, parking entities, transparency software releases and certificates, energy meter templates and groups, groups of operators and providers, offers), each once, compared as the C# types compare them; hardware revisions, firmware versions and serial numbers as WWCP_POI reads them, not empty, no whitespace at either end, those of a model each once; certificates as WWCP_POI reads them, for exactly one model, with its versions and releases; the conformity assessment bodies issuing them as WWCP_POI reads them, a notified body number of four digits for one body only, the legislations they are notified for neither empty nor twice, in their ordinal order, a certificate only under one of them; the content as WWCP_POI writes it (SPECIFICATION.md 2): what it takes and writes otherwise is refused, as written again it would be another text than the one hashed (ordered lists out of their order or with untrimmed texts, lists it leaves out given empty or writes also empty left out, properties given as null, embedded objects naming a JSON-LD context, texts in languages not as Styx writes them or empty, timestamps not UTC to the millisecond, entities without their lastChange, parties without their name, identifications given as numbers, properties of keys and of EV Taler merchants and exchanges it does not read, their base URLs and currencies not as it writes them); the roaming network operator, its key statement and certificates, the tree hash algorithms and the identifications of entities in the words of WWCP_POI.; of every entity what its type in WWCP_POI3 neither writes nor reads, and values it writes otherwise (trimmed, with a scheme, in its case, coordinates as doubles), in the words of its written form since 3de830a ("the content leaves it out", "the content holds it as …"). Not yet: properties of another JSON type or missing, the formats of identifications, and the references, which WWCP_POI refuses |
198
201
  | Effective members (9.2) | EVSEs, charging stations, charging pools, charging tariffs, energy meters. Parking spaces and energy meters of grid connection points taking templates are refused, not calculated |
199
202
  | Proofs (8.4), attestations (8.5) | complete, with the manufacturers and models of the station and its meters, the transparency software releases and certificates of the meters; subject attestations do not count for a whole proof |
200
- | Change sets (4) | `Add`, `Remove`, `UpdateProperty`, `RemoveProperty` of parties (charging station operators, e-mobility providers, grid and parking operators, charging station and energy meter manufacturers, transparency software manufacturers, conformity assessment bodies), the roaming network and its operator, of charging pools, stations, EVSEs, tariffs, templates and groups of charging station operators, energy meter templates and groups, models of manufacturers, transparency software releases and certificates, with their owners' signatures, quorum and proof of possession, and the properties a change set may change. Element changes, preconditions, offers and the entities of providers, grid and parking operators are refused, not applied. The references the C# implementation checks after every change set (a manufacturer, model, release or certificate a station, meter or certificate names) are not checked again: the `afterETags` of the change set pin the version it leads to. The identifications unique within the network are, as in every version |
203
+ | Change sets (4) | `Add`, `Remove`, `UpdateProperty`, `RemoveProperty` of parties (charging station operators, e-mobility providers, grid and parking operators, charging station and energy meter manufacturers, transparency software manufacturers, conformity assessment bodies), the roaming network and its operator, of charging pools, stations, EVSEs, tariffs, templates and groups of charging station operators, energy meter templates and groups, models of manufacturers, transparency software releases and certificates, with their owners' signatures, quorum and proof of possession, and the properties a change set may change: not the version of a release, also not by removing it and adding it again; the `notifiedBodyNumber` and `notifiedFor` of a conformity assessment body by the roaming network operator only. Element changes, preconditions, offers and the entities of providers, grid and parking operators are refused, not applied. The references the C# implementation checks after every change set (a manufacturer, model, release or certificate a station, meter or certificate names) are not checked again: the `afterETags` of the change set pin the version it leads to. The identifications unique within the network are, as in every version |
201
204
  | Histories (5, 10, 11) | linear histories from snapshots, anchored in the trust anchor as a peer of WWCP_POI starts (10.5): a snapshot of a checkpoint by the checkpoint, signed as the roaming network operator, a snapshot of the head by its attestations, none without a trust anchor unless taken unanchored explicitly; commits, checkpoints, their lines and signatures, signed ones only with a verifier; proofs of commits, archive segments; epochs: their profiles, the final checkpoint, the genesis of the next epoch, its first checkpoint. Merges are not taken yet; no peer, no server |
202
205
  | Price statements (12) | statements, chains, checkpoint trees and proofs in every epoch |
203
206
  | Runtime status (12.5) | status updates, frames of the WebSocket, the runtime status of a snapshot. No WebSocket client: the app brings its own |
@@ -210,6 +213,65 @@ And whatever it calculated otherwise than the C# implementation would end in oth
210
213
  refused as well.
211
214
 
212
215
 
216
+ ## Local authorization and shared trust contexts
217
+
218
+ An app that lets its users import a trust anchor before they trust its keys does not hand that anchor to a verifier: a
219
+ verifier given a `TrustAnchor` trusts every identity key it pins. The app evaluates a `TrustContext` instead, from the
220
+ identity keys it trusts locally:
221
+
222
+ ```ts
223
+ import { ChargingStationProof, RoamingNetworkOperator, TrustContext, verifyChargingStation } from '@open-charging-cloud/wwcp-poi';
224
+
225
+ // The key statement and the identity keys of the operator as the proof gives them: trusted only once evaluated.
226
+ const proof = ChargingStationProof.parse(proofJSON);
227
+ const operator = RoamingNetworkOperator.parse(proof.roamingNetwork['operator'], anchor.id);
228
+
229
+ if (operator.keyStatement !== undefined) {
230
+
231
+ const result = TrustContext.evaluate(anchor, operator.keyStatement, {
232
+ trustedIdentityKeyIds: locallyAuthorizedKeyIds,
233
+ otherIdentityKeys: operator.identityKeys,
234
+ at: Date.now()
235
+ });
236
+
237
+ // Show signatures, signers, quorum and validity apart. canTrustKeys allows importing
238
+ // validly signed data even without a trusted quorum.
239
+ if (result.context !== undefined) {
240
+ const station = verifyChargingStation(result.context, proof, { evseId: 'DE*GEF*E1*1' });
241
+ }
242
+
243
+ }
244
+ ```
245
+
246
+ `TrustContext.evaluate` keeps of the holders of the trust anchor the identity keys the app trusts, and checks every
247
+ signature of the key statement and that its key was valid when the statement was signed, that the statement is valid at
248
+ `at`, that it names the holders of the trusted keys as the trust anchor does, and that trusted keys of as many holders
249
+ as the larger of both quorums signed it. Two trusted keys of one holder still count once. A context exists only when all
250
+ of that holds; `TrustContext.create` evaluates the same and throws otherwise.
251
+
252
+ The context binds what is verified with it to the roaming network, its operator and the signed content of the key
253
+ statement, which a statement embedded without its JSON-LD context gives as well. Another key statement, even one signed
254
+ genuinely, needs another evaluation: a context does not follow the keys of the operator to their successors by itself.
255
+ Other valid signatures, or the same in another order, do not change the content; every signature given and the trusted
256
+ quorum are checked again.
257
+
258
+ `OperatorTrust.of` and `fromOperatorJSON`, `verifyVersion`, `verifyChargingStation`, `ChargingStationProof.verify` and
259
+ `verifyCheckpoint` take a context in place of a trust anchor. A context is evaluated for one time: `at` is that time or
260
+ left out, another time needs another context. Given a trust anchor, they verify as before, trusting every key it pins.
261
+ The other APIs taking a trust anchor, among them `verifyEvidence` and `POIClient`, take only one the app has authorized:
262
+ they are no way around its local policy.
263
+
264
+ The app keeps storing and showing its decisions, choosing keys and excluding them locally. It reads its current
265
+ decisions consistently and creates a context from them for every verification: a context is no authority to store, nor
266
+ to use again after a key was withdrawn or deleted or the policy changed, and does not see what changes after it was
267
+ created. The library needs no IndexedDB, localStorage, network, DOM, Node or anything of an app.
268
+
269
+ Removing a pinned key from the local roots removes the trust it started with. A key statement signed by the quorum may
270
+ still name it among its identity keys and so delegate to it: excluding a key locally is no global revocation or deny
271
+ list. Revocation and verified succession need policies of their own. Unknown imports, invalid evidence and expired data
272
+ never give an authorized context.
273
+
274
+
213
275
  ## Tests
214
276
 
215
277
  ```bash
@@ -277,12 +339,12 @@ npx tsx examples/validate-examples.ts D:\Coding\OpenChargingCloud\WWCP_POI\examp
277
339
  ## Publishing
278
340
 
279
341
  ```
280
- npm version 0.1.0 --no-git-tag-version
342
+ npm version 0.1.1 --no-git-tag-version
281
343
  git commit -a
282
- git tag -s v0.1.0 -m "v0.1.0"
283
- git push origin master v0.1.0
284
- git push git1 master v0.1.0
285
- git push git2 master v0.1.0
344
+ git tag -s v0.1.1 -m "v0.1.1"
345
+ git push origin master v0.1.1
346
+ git push git1 master v0.1.1
347
+ git push git2 master v0.1.1
286
348
 
287
349
  npm run verify
288
350
  npm pack --dry-run
package/dist/common.d.ts CHANGED
@@ -27,6 +27,15 @@ export declare function parseTimestamp(text: string, what?: string): number;
27
27
  export declare function toTimestamp(time: number | Date): string;
28
28
  export declare function requireTimestamp(object: JSONObject, property: string, what?: string): number;
29
29
  export declare function optionalTimestamp(object: JSONObject, property: string, what?: string): number | undefined;
30
+ /** A timestamp as POI writes it, of the given property; undefined where it is none or written otherwise. */
31
+ export declare function timestampAt(object: JSONObject, property: string): number | undefined;
32
+ /**
33
+ * A text the given object must name, refused as Styx refuses it where it names none (`ParseMandatory`): "Missing JSON
34
+ * property '@id'!".
35
+ */
36
+ export declare function mandatoryText(object: JSONObject, property: string, what?: string): string;
37
+ /** The text of the given property, where it is one and not empty. */
38
+ export declare function nonemptyText(object: JSONObject, property: string): string | undefined;
30
39
  /** Now, or the given point in time, as milliseconds since 1970. */
31
40
  export declare const timeOf: (at?: number | Date | string) => number;
32
41
  /** The first text of a multilingual text, e.g. `{"en": "Quality Assurance"}`. */
@@ -1 +1 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,OAAO,EAAE,MAAwC,mBAAmB,CAAC;AAC9E,OAAO,EAA0B,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI1G,iFAAiF;AACjF,eAAO,MAAM,cAAc,+CAA+C,CAAC;AAM3E,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAIpF;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAIlF;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAKzF;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAOtG;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAI,EAAE,GAAG,SAA0B,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAKlI;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAI,EAAE,GAAG,SAA0B,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI/I;AAED,2CAA2C;AAC3C,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CASzF;AAED,qEAAqE;AACrE,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAIjG;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAIpF;AAQD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAgB,GAAG,MAAM,CAezE;AAED,wCAAwC;AACxC,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAUvD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5F;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGzG;AAED,mEAAmE;AACnE,eAAO,MAAM,MAAM,GAAI,KAAK,MAAM,GAAG,IAAI,GAAG,MAAM,KAAG,MAIT,CAAC;AAG7C,iFAAiF;AACjF,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAKzE"}
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,OAAO,EAAE,MAAwC,mBAAmB,CAAC;AAC9E,OAAO,EAA0B,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI1G,iFAAiF;AACjF,eAAO,MAAM,cAAc,+CAA+C,CAAC;AAM3E,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAIpF;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAIlF;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAKzF;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAOtG;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAI,EAAE,GAAG,SAA0B,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAKlI;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAI,EAAE,GAAG,SAA0B,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI/I;AAED,2CAA2C;AAC3C,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CASzF;AAED,qEAAqE;AACrE,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAIjG;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAIpF;AAQD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAgB,GAAG,MAAM,CAezE;AAED,wCAAwC;AACxC,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAUvD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5F;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGzG;AAED,4GAA4G;AAC5G,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAUpF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAIzF;AAED,qEAAqE;AACrE,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGrF;AAED,mEAAmE;AACnE,eAAO,MAAM,MAAM,GAAI,KAAK,MAAM,GAAG,IAAI,GAAG,MAAM,KAAG,MAIT,CAAC;AAG7C,iFAAiF;AACjF,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAKzE"}
@@ -1 +1 @@
1
- {"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../src/history/apply.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,cAAc,EAAE,MAAsB,8BAA8B,CAAC;AAE9E,OAAO,KAAK,EAAU,SAAS,EAAE,MAAc,gBAAgB,CAAC;AAwnChE;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CA6IjF;AAuBD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,GAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,cAAc,CA+DvI"}
1
+ {"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../src/history/apply.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,cAAc,EAAE,MAAsB,8BAA8B,CAAC;AAK9E,OAAO,KAAK,EAAU,SAAS,EAAE,MAAc,gBAAgB,CAAC;AAwiChE;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CA6IjF;AAuBD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,GAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,cAAc,CAoEvI"}
package/dist/index.d.ts CHANGED
@@ -29,6 +29,7 @@ export { RoamingNetwork, RoamingNetworkOperator, ROAMING_NETWORK_CONTEXT } from
29
29
  export { EV_TALER_EXCHANGE_CONTEXT, EV_TALER_MERCHANT_CONTEXT, EV_TALER_PAYMENT_MEANS, EV_TALER_PAYMENT_OPTION, evTalerMerchantOf, isTalerPublicKey, paymentOptionName, type EVTalerExchange, type EVTalerMerchant } from './network/evTaler.ts';
30
30
  export { effectiveContent, effectiveChargingStationOperator } from './network/effective.ts';
31
31
  export { CHILD_ARRAYS, effectiveTreeETag, entityDigest, prunedTree, skeleton } from './network/tree.ts';
32
+ export { TrustContext, type TrustEvaluation, type TrustEvaluationOptions } from './proofs/trustContext.ts';
32
33
  export { TrustAnchor, TRUST_ANCHOR_CONTEXT, TRUST_ANCHOR_QR_PREFIX, type I18NText } from './proofs/trustAnchor.ts';
33
34
  export { KeyStatement, KEY_STATEMENT_CONTEXT, type KeyStatementSignature } from './proofs/keyStatement.ts';
34
35
  export { SigningKeyCertificate, SIGNING_KEY_CERTIFICATE_CONTEXT } from './proofs/signingKeyCertificate.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}