-
Notifications
You must be signed in to change notification settings - Fork 26
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Adding support for multiple signatures #31
Comments
Good notes @bodymindarts -- but I think we'd want to continue to use the JWT standard rather than JWS. JWTs use three Base64-URL strings concatenated together with The signature object, which is now just a single signature, would have to contain all the signatures (we would need some way to encode those, but that's easy enough). The verifier, however, would need to be passed the redeem script (or something of the like). |
Yeah I thought JWT was a superset of JWS / JWE but now I see that a JWS is only considered a JWT when serialized in its compact form. In that case the JWS standard for serializing multiple signatures won't help.
As to the verifier needing the redeem script. If the verification scheme sufficiently identifies the type of signature (1 sig, multi-sig, segwit-multi-sig) then the verifier would be able to reconstruct the redeem script (with the help of bitcoinjs-lib) without it needing to be passed in. Alternatively where do you think the code that constructs the redeem script should live? |
The redeem script cannot be constructed from the address alone. In bitcoin, the last part of the scriptSig reveals that redeem script. We could use the same encoding as bitcoin (and encode a |
It can be constructed from the public keys (which obviously need to be provided, ie part of the payload) |
I would like to document the required steps for making this library support multiple signatures as per the JWS standard
Support General JWS JSON Serialization Syntax
the schema is:
Additional code
the current structure of the code is very much relying on the assumption of there being 1 signature. Instead of trying to add code to the existing classes I would add use-case specific classes and potentially if deemed useful extract / generalize the code to work for 1 or N sigs.
this would mean adding the following files:
Payload structure
public_keys
this is already an array in the current structure so no problems here.iss
this holds the address of the bucket which is the bitcoin address connected to the exposed public key(eg.did:btc-addr:1Bjw4R9q38f8NR6TPy64YDsHLqYgR5BvNa
). There are multiple ways of deriving a multi sig address from a set of public keys. When represented as aP2SH
address bip-0067 describes how to create a deterministic address. Potentially we may also want to supportp2sh-p2wsh
.How would we identify which address generation scheme should be used?
['p2pkh', 'p2sh', 'p2sh-p2swsh']
or sinceps2h
could mean a lot of other things than a multi-sig address perhaps:['p2pkh', 'multi-sig', 'segwit-multi-sig']
And under what key should this information be stored in the payload?
The text was updated successfully, but these errors were encountered: