Skip to content

Improve scrypt params compatibility between different libraries for encrypted JSON#428

Open
Fingerling42 wants to merge 1 commit intoJAMdotTech:masterfrom
Fingerling42:feature/scrypt-params
Open

Improve scrypt params compatibility between different libraries for encrypted JSON#428
Fingerling42 wants to merge 1 commit intoJAMdotTech:masterfrom
Fingerling42:feature/scrypt-params

Conversation

@Fingerling42
Copy link
Copy Markdown

The problem:

@polkadot/keyring now uses a higher default scrypt cost parameter N, which increases the memory required for key derivation to about 128 MB (N=2^17, r=8, p=1). py-polkadot-sdk calls scrypt with maxmem=2**26 (64 MB). Since these parameters are hardcoded, this results in incompatibility between the generated keypair JSON in one library and its decoding in another. In particular, in py-polkadot-sdk decryption of an otherwise valid exported JSON fails with the following error:

nacl.exceptions.ValueError: Memory limit would be exceeded with the chosen n, r, p

The context:
We at Robonomics encountered this issue when trying to export a dapp-generated account to a Python-based integration. Details: airalab/homeassistant-robonomics-integration#90

Proposed solution:
This PR increases the default scrypt memory limit for decoding, adds configurable scrypt parameters to encoding/decoding helpers, and aligns the allowed scrypt parameter presets with @polkadot/keyring. For backward compatibility, the existing legacy encode defaults are left unchanged.

Let me know if this PR is not suitable or if anything needs to be corrected.

Since scrypt parameters were hardcoded, this broke JSON
encryption/decryption compatibility between the Polkadot JS and
Python libraries. Because of this, the ability to configure these
parameters and validate them is added. The default scrypt memory
limit for decoding is increased. Legacy encode defaults remain
unchanged for backward compatibility.
@Fingerling42
Copy link
Copy Markdown
Author

@arjanz Could I ask you to look at this PR?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant