-
Notifications
You must be signed in to change notification settings - Fork 102
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
Enforce key format in keyset creation #918
Conversation
src/Pact/Native/Keysets.hs
Outdated
keyFormats = [ed25519Hex] | ||
|
||
enforceKeyFormats :: HasInfo i => i -> KeySet -> Eval e () | ||
enforceKeyFormats i (KeySet ks _p) = foldM go () ks |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
enforceKeyFormats i (KeySet ks _p) = foldM go () ks | |
enforceKeyFormats i (KeySet ks _p) = traverse_ go ks | |
where | |
go k = unless (any ($ k) keyFormats) $ evalError' i "Invalid keyset" |
traverse_
from Data.Foldable
doesn't need Traversable
.
* Enforce key format in keyset creation * more tests * review golf * only support lowercase hex Co-authored-by: Stuart Popejoy <[email protected]>
|
||
-- | Supported key formats. | ||
keyFormats :: [KeyFormat] | ||
keyFormats = [ed25519Hex] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should these formats be scheme-aware?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Schemes are not wallet-supported atm and with this change will need upgrades for support; they also need to be self-identifying so that e.g. an ETH sig will be smth like eth:0xadf5adf4a...
at which point this mechanism will naturally support adding that.
(env-exec-config ["EnforceKeyFormats"]) | ||
(env-data | ||
{ 'bad: ['foo] | ||
, 'short: ["12440d374865bdf0a3349634a70d1317fc279e7e13db98f2199ac5e7378975"] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we add one character to this short test to cover the largest possible number of failure cases?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This PR has merged but I manually checked and that case works.
(env-data | ||
{ 'bad: ['foo] | ||
, 'short: ["12440d374865bdf0a3349634a70d1317fc279e7e13db98f2199ac5e7378975"] | ||
, 'long: ["12440d374865bdf0a3349634a70d1317fc279e7e13db98f2199ac5e7378975eaea"] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ditto for shortening this long one by one character. Since we're operating in the string domain it's characters, not after-decoded bytes, that are the fundamental unit.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Manually checked.
No description provided.