Adjust graph details, add some more detail to the backends section.

This commit is contained in:
Heiko Schaefer 2021-08-28 14:00:49 +02:00
parent 0cdf5ce2a4
commit 4ba7a4707f

View file

@ -30,12 +30,12 @@ The project consists of the following crates:
graph BT graph BT
OP["openpgp-card-pcsc <br/> (pcsclite backend)"] --> OC OP["openpgp-card-pcsc <br/> (pcsclite backend)"] --> OC
OS["openpgp-card-scdc <br/> (scdaemon backend)"] --> OC["openpgp-card <br/> (low level API)"] OS["openpgp-card-scdc <br/> (scdaemon backend)"] --> OC["openpgp-card <br/> (low level API)"]
OC --> OCS["openpgp-card-sequoia <br/> (high level, sequoia based API)"] OC --> OCS["openpgp-card-sequoia <br/> (high level Sequoia PGP-based API)"]
OC -.-> U1[non-sequoia/low level user application] OC -.-> U2[applications using low level API]
OCS -.-> U2[sequoia-based user application] OCS -.-> U3[Sequoia PGP-based applications]
classDef userApp stroke-dasharray: 5 5; classDef userApp fill:#f8f8f8,stroke-dasharray: 5 5;
class U1,U2 userApp; class U1,U2,U3 userApp;
``` ```
### The openpgp-card crate ### The openpgp-card crate
@ -45,18 +45,26 @@ offering an API at roughly the level of abstraction of that specification,
using Rust data structures. using Rust data structures.
(However, this crate may work around some minor quirks of specific card (However, this crate may work around some minor quirks of specific card
models, in order to offer clients a somewhat uniform view) models, in order to offer clients a somewhat uniform view)
This crate and its API do not depend or rely on an OpenPGP implementation.
This crate and its API do not depend or rely on any particular OpenPGP
implementation.
### Backends ### Backends
Implement: Typically, `openpgp-card` will be used with the `openpgp-card-pcsc` backend,
which uses the standard pcsclite library to communicate with cards.
However, alternative backends can be used and may be useful.
The experimental, alternative `openpgp-card-scdc` backend uses scdaemon from
the GnuPG project as a low-level transport layer to interact with OpenPGP
cards.
- functionality to find and connect to a card (these Backends implement:
operations may vary significantly between different backends), and
- a very simple communication primitive, by implementing the 1) functionality to find and connect to a card (these operations may vary
`CardClient` trait: significantly between different backends), and
sending individual APDU commands and receiving responses.
2) a very simple communication primitive, by implementing the `CardClient`
trait, to send individual APDU commands and receive responses.
All higher level and/or OpenPGP card-specific logic (including command All higher level and/or OpenPGP card-specific logic (including command
chaining) is handled in the `openpgp-card` layer. chaining) is handled in the `openpgp-card` layer.