Replies: 4 comments 9 replies
-
"CESR looks complex because it's a clever protocol. SAID isn't technically CESR but uses CESR concepts, i.e., the code table and the encoding process described in the #58 (comment) above." I'm a big fan of clever, but a simple to implement without additional complexity is going to win. Ease of adoption is a winner over clever. There are two approaches to make clever more easy to adopt. Write it out better making the line of uptake clear and easy without having to sift through tons of documentation or pick something already more accessible which meets the main requirements. Both solutions have benefits and trade-offs. I would love to have it explained why CESR is so clever for schema digests. People who aren't coders are going to be making business decisions about this and there should be something compelling for the complexity. What is so compelling? I believe there is something here, but I would like to hear it articulated. |
Beta Was this translation helpful? Give feedback.
-
We don’t need to understand the design decisions. I stated I would use different ones, but so be it and I’m fine if you don’t like those decisions. What is needed is a clear definition in the spec. of how to generate a digest, and how to verify it. The current definition saying “use a SAID” and pointing to the expired SAID spec is not working. |
Beta Was this translation helpful? Give feedback.
-
If I need to defend the choice of spec then I need to be able to defend, or at least understand design decisions. Anyone picking this, and then having to explain why it takes much more developer time to develop because of design choices will need to defend this choice. Sam Smith's specification is not finalized but a work in progress undergoing active development, is it even versioned at this point? Why not put it in OCAv3? Then OCAv2 would be using standards widely adopted (canonicalize using JSON canonicalization, hash using multihash). Version 3 can come out virtually the same but with the fancy new CESR support (and even come out quickly), version 2 can be used immediately with documented tools. |
Beta Was this translation helpful? Give feedback.
-
Checking in on canonicalization - OCA schema orders everything according to JSON canonicalization method, except it pulls out two special terms, The Does anyone know how JSON canonicalization handles words like: ᐃᓄᒃᑎᑐᑦ Can anyone post an example JSON only, including the As a reminder, here is the JSON code of a Capture Base from the .zip schema bundle (no Is
|
Beta Was this translation helpful? Give feedback.
-
The recent ORFG meetings have shown uncertainties and ambiguities in understanding the rationale behind particular design choices made in OCA v1.
OCA Canonical form. We defined (currently missing in the spec!) the OCA canonical form as a synthesis of human readability and machine actionability. OCA Bundles tend to be read from time to time for various reasons. We, therefore, introduced custom ordering into the Bundle, purposely ignoring existing standards like https://datatracker.ietf.org/doc/rfc8785/ . We furthermore found Sam Smith's concept (introduced in KERI events) to start with the
version
attribute (usually serialized tov
) incredibly useful in OCA-related concepts like the OCA Bundle. Specifically, starting withv
enables the pre-validation of the Bundle, even without deserializing the JSON. It is possible becausev
is a fixed length attribute that contains not only a version but also the length of the content. We, therefore, always know where to look for the version upon which we can employ proper parsing mechanics (becausev
always starts the JSON and is fixed length). Next tov
is the digest (d
) of the Bundle. On the one hand, having it at the beginning of the JSON is convenient because it's the most "misleading" attribute, precisely its value (just looking at it can tell us whether it's the same Bundle or something different). On the other hand, having it exactly right afterv
enables us to run optimizations when calculating the SAID. It is doable becausev
is a fixed length, sod
is also a fixed length. When serializing to JSON, we can replace certain characters in plain old string by replacing specific bytes. Such an approach is crucial for improving serialization speed. Except for thev
andd
attributes, OCA serialization is compatible with the aforementionedJSON Canonicalization Scheme
.SAID, SAD, and CESR. SAD is the document, i.e., OCA Bundle. SAID is the self-addressing identifier of a SAD. SAID conceptually is part of CESR (i.e. code tables) that works with SADs (therefore, distinct spec). The SAID/SAD duo gives the unambiguous recipe for calculating the document identifier, that is, its SAID. To quote the spec:
To clarify, a SAID is different from a standard content address or content-addressable identifier in that a standard content-addressable identifier may not be included inside the contents it addresses.
This is the SAID novelty that no other concept addresses. The other reason OCA uses SAIDs is the compatibility of the HCF ecosystem. Since 2020, we have been developing https://dkms.colossi.network/, which is the KERI protocol under the hood. KERI is Sam Smith's invention, and understandably, it also consumes his other concepts, such as CESR and SAID.SAID, furthermore, is forward-compatible with hashing algorithms that have yet to be established or invented via its code tables. OCA, in this regard, must also be forward-compatible. We are specifically interested in the first and second pre-image resistance for any hashing algorithm in OCA, and historically, MD5 and SHA1 were found to lack these properties.
OCA doesn't specifically require full-fledged CESR support. It implicitly uses a subset of it by employing SAID. SAID requires a code table from CESR and encoding mechanics. The benefits of using full-fledged CESR (and what CESR is) are out of the scope of this discussion, but they are definitely use-case-specific. For an idea, see Extracting
s
from ACDC into CESR-based protocol WebOfTrust/ietf-cesr#45 .As of 2024, most concepts from Sam Smith's tech stack have been fully described in specifications. As stated above, OCA has greatly benefited from these concepts and has applied them to solve various problems. We also purposely don't describe some of the mechanics in OCA spec because they're already documented in other specs, especially those related to SAID. Finally, we're always open to considering new concepts for the next major release. If there's a concept that outperforms Sam's invention in any way, we'd love to hear about it.
Edit: Elaborate more on CESR.
Beta Was this translation helpful? Give feedback.
All reactions