Skip to content

Commit f7bb6af

Browse files
authored
docs: add initial docs of Introduction PODs section, with some diagrams (#285)
1 parent 3b4edab commit f7bb6af

File tree

5 files changed

+64
-0
lines changed

5 files changed

+64
-0
lines changed

book/src/SUMMARY.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
- [POD types](./podtypes.md)
2323
- [SignedPOD](./signedpod.md)
2424
- [MainPOD](./mainpod.md)
25+
- [Introduction PODs](./introductionpods.md)
2526
- [Examples](./examples.md)
2627

2728
# Architecture
65 KB
Loading
63.4 KB
Loading
68.6 KB
Loading

book/src/introductionpods.md

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# Introduction PODs
2+
3+
Introduction PODs are a kind of POD used to introduce any cryptographic data
4+
structure into the POD system. This allows the POD system to reason about
5+
cryptographic data and cryptographic primitives that are not part of the POD
6+
system itself.
7+
8+
An example of an IntroductionPod are the `Ed25519Pod` and the `EcdsaPod`, both
9+
of them allowing to incorporate their respective kind of signature schemes that
10+
are not supported in the core of the POD system.
11+
This allows to the POD system to incorporate data validated by those
12+
Introduction PODs, and recursively use it in future proofs combining them with
13+
any logical reasoning together with other PODs.
14+
15+
For example, we could have an scenario where we use 3 different Introduction
16+
PODs (Ed25519Pod, RSAPod, EcdsaPod), to prove that a user controls an Ethereum
17+
wallet *AND* a GitHub account. To do so, the user would produce a new `MainPod`
18+
which proves that the user has signed a certain message with the given ECDSA key
19+
(Ethereum wallet) *AND* with either the given Ed25519 key *OR* the RSA key (from
20+
a GitHub account).
21+
22+
<img src="img/introductionpod-mainpod.png" style="max-width:80%;" />
23+
24+
### Interface
25+
The interface of a `IntroductionPod` is just the one of the
26+
[RecursivePod](https://github.com/0xPARC/pod2/tree/3ea0d5be71ce98971305076b220079a1b2b7a8d0/src/middleware/mod.rs#L823)
27+
trait, together with matching the expected `vds_root` of the used `VDSet` in the
28+
`MainPod`, and using the same circuit configuration for the proof verification.
29+
30+
This means that as long as we fit into the `RecursivePod` interface, the
31+
`IntroductionPod` will fit into the recursive verification chain of the
32+
`MainPods`.
33+
34+
### Different configurations
35+
There are some cases, where the operations needed for the `IntroductionPod`
36+
require a different circuit configuration than the standard recursive circuit
37+
configuration that is used for the `MainPods`.
38+
39+
In those cases, we do a previous recursive step, where we verify the logic of
40+
the intended `IntroductionPod`, and then the proof of this circuit is the one
41+
verified in the real `IntroductionPod`.
42+
43+
This is done in order to be able to *converge* the different circuit
44+
configuration shape (and thus different `common_data`) into a new proof that can
45+
be verified with the standard configuration (used for the MainPods).
46+
47+
<img src="img/introductionpod-2-steps.png" style="max-width:80%;" />
48+
49+
Notice that this is not a requirement for implementing a new `IntroductionPod`,
50+
and if the IntroductionPod logic can be directly verified with the standard
51+
recursion configuration, we don't need this previous recursive step.
52+
53+
As examples of the two-recursive steps approach, we have the `EcdsaPod` and the
54+
`Ed25519Pod`. Both of them, require different circuit configurations that would
55+
not match the one used for the standard recursion with `MainPods`. Therefore we
56+
first generate a circuit proof of correct signature verification, and then this
57+
proof is the one actually verified in the `EcdsaPod`/`Ed25519Pod` respectively,
58+
not the original signature itself.
59+
60+
<img src="img/introductionpod-2-steps-ecdsa-example.png" style="max-width:80%;" />
61+
62+
> Examples of `IntroductionPods` can be found at the git repository
63+
> [github.com/0xPARC/introduction-pods](https://github.com/0xPARC/introduction-pods/).

0 commit comments

Comments
 (0)