|
| 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