Conversation
…evoked'
docusigner now signs audit events, starting with 'revoked' — a sender
withdrawing a document they had already sent. Two corrections follow, both to
descriptions; no field, type or enum changes.
signedPayload said the actor signs `${action}|${envelopeId}|${actorEName}|
${occurredAt}`. What is actually signed is that composition with a domain tag,
hashed and prefixed: `audit_<sha256(docusigner.audit.v1|...)>`. The tag keeps
an audit signature from being replayable as a signature on a document, and the
hash keeps the string short and fixed-length so it survives a QR a phone camera
has to read. A verifier following the old sentence would recompose a string
that never existed and conclude a good signature was bad, which is the worst
way for a schema to be wrong.
The class description named 'declined' as the action worth signing. 'revoked'
belongs beside it for the same reason — it is a statement its author may have
to defend — and the timing is worth stating: the withdrawal is written
unsigned the instant it takes effect, because stopping a document must not
wait for somebody to find their phone, and is signed straight afterwards.
isAttested is what tells the two apart, and an unsigned one must never be read
as the sender's own statement.
Contributor
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Advanced Run ID: Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to #1111, which registered docusigner's five ontologies. Descriptions only — no field, type or enum changes, and the
schemaIdis unchanged.docusigner now writes signed audit events for the first time. The occasion is withdrawal: a sender stopping a document they had already sent out for signature.
1.
signedPayloaddescribed a string we do not sign.It said the composition is
${action}|${envelopeId}|${actorEName}|${occurredAt}. What the wallet actually signs is that composition with a domain tag, hashed and prefixed:The tag is domain separation — an audit signature must not be replayable as a signature on a document. The hash keeps the signed string short and of fixed length (70 characters), which matters because it travels to the wallet inside a QR code somebody has to photograph.
This is the kind of schema error worth fixing quickly: a verifier following the old sentence recomposes a string that never existed, and concludes that a perfectly good signature is bad.
2. The class description named only
declinedas the action worth signing.revokedbelongs beside it — it is equally a statement its author may have to defend. The description now also states the timing, because the timing is a deliberate design choice rather than an implementation detail: the withdrawal is written unsigned the instant it takes effect, since stopping a document must not wait for somebody to find their phone, and the signature is asked for immediately afterwards.isAttestedis what tells a reader which of the two they are holding, and an unsigned one must never be read as the sender's own statement.🤖 Generated with Claude Code