Security News
GitHub Removes Malicious Pull Requests Targeting Open Source Repositories
GitHub removed 27 malicious pull requests attempting to inject harmful code across multiple open source repositories, in another round of low-effort attacks.
@phc/format
Advanced tools
📝 PHC string format serializer/deserializer
Coded with ❤️ by Simone Primarosa.
The PHC String Format is an attempt to specify a common hash string format that’s a restricted & well defined subset of the Modular Crypt Format. New hashes are strongly encouraged to adhere to the PHC specification, rather than the much looser Modular Crypt Format.
Do you believe that this is useful?
Has it saved you time?
Or maybe you simply like it?
If so, show your appreciation with a Star ⭐️.
npm install --save @phc/format
const phc = require('@phc/format');
const phcobj = {
id: 'pbkdf2-sha256',
params: {i: '6400'},
salt: Buffer.from('0ZrzXitFSGltTQnBWOsdAw', 'base64'),
hash: Buffer.from('Y11AchqV4b0sUisdZd0Xr97KWoymNE0LNNrnEgY4H9M', 'base64'),
};
const phcstr = "$pbkdf2-sha256$i=6400$0ZrzXitFSGltTQnBWOsdAw$Y11AchqV4b0sUisdZd0Xr97KWoymNE0LNNrnEgY4H9M";
phc.serialize(phcobj);
// => phcstr
phc.deserialize(phcstr);
// => phcobj
Using the raw
and strict
parameters you can even serialize/deserialize
PHC strings that does not strictly adhere to the 'standard', like the one
used by argon2
const phc = require('@phc/format');
const phcobj = {
id: 'argon2i',
raw: 'v=19', <- Note the v parameter
params: {
m: '120',
t: '5000',
p: '2'
},
salt: Buffer.from('iHSDPHzUhPzK7rCcJgOFfg', 'base64'),
hash: Buffer.from('J4moa2MM0/6uf3HbY2Tf5Fux8JIBTwIhmhxGRbsY14qhTltQt+Vw3b7tcJNEbk8ium8AQfZeD4tabCnNqfkD1g', 'base64'),
};
const phcstr = "$argon2i$v=19$m=120,t=5000,p=2$iHSDPHzUhPzK7rCcJgOFfg$J4moa2MM0/6uf3HbY2Tf5Fux8JIBTwIhmhxGRbsY14qhTltQt+Vw3b7tcJNEbk8ium8AQfZeD4tabCnNqfkD1g"; <- Note the v parameter
phc.serialize(phcobj);
// => phcstr
phc.deserialize(phcstr);
// => throws an error since there are more than 4 fields (a field is one $)
phc.deserialize(phcstr, false);
// => phcobj
With the same philosophy you can even serialize/deserialize MCF formatted strings.
const phc = require('@phc/format');
const phcobj = {
id: 'pbkdf2-sha256',
raw: '6400',
salt: Buffer.from('0ZrzXitFSGltTQnBWOsdAw', 'base64'),
hash: Buffer.from('Y11AchqV4b0sUisdZd0Xr97KWoymNE0LNNrnEgY4H9M', 'base64'),
};
const phcstr = "$pbkdf2-sha256$6400$0ZrzXitFSGltTQnBWOsdAw$Y11AchqV4b0sUisdZd0Xr97KWoymNE0LNNrnEgY4H9M";
phc.serialize(phcobj);
// => phcstr
phc.deserialize(phcstr);
// => throws an error since the second field (a field is one $) is not a valid
// params string
phc.deserialize(phcstr, false);
// => phcobj
string
Generates a PHC string using the data provided.
Object
Parses data from a PHC string.
string
Generates a PHC string using the data provided.
Kind: global function
Returns: string
- The hash string adhering to the PHC format.
Param | Type | Description |
---|---|---|
opts | Object | Object that holds the data needed to generate the PHC string. |
opts.id | string | Symbolic name for the function. |
[opts.raw] | string | Additional raw data added after the identifier. It's here to support argon2 v parameter and to generate MCF formatted strings. |
[opts.params] | Object | Parameters of the function. |
[opts.salt] | Buffer | The salt as a binary buffer. |
[opts.hash] | Buffer | The hash as a binary buffer. |
Object
Parses data from a PHC string.
Kind: global function
Returns: Object
- The object containing the data parsed from the PHC string.
Param | Type | Default | Description |
---|---|---|---|
phcstr | string | A PHC string to parse. | |
strict | boolean | true | If false does not throw an error if there is one filed not unrecognized. The content of the unrecognized filed will be stored in the raw property of the output object. This is useful to parse out of specs parameters like the 'v' present in the argon2 hash format or to parse MCF formatted strings. |
Contributions are REALLY welcome and if you find a security flaw in this code, PLEASE report it.
Please check the contributing guidelines for more details. Thanks!
See also the list of contributors who participated in this project.
This project is licensed under the MIT License - see the license file for details.
FAQs
PHC string format serializer/deserializer
The npm package @phc/format receives a total of 182,640 weekly downloads. As such, @phc/format popularity was classified as popular.
We found that @phc/format demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
GitHub removed 27 malicious pull requests attempting to inject harmful code across multiple open source repositories, in another round of low-effort attacks.
Security News
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
Security News
Node.js will be enforcing stricter semver-major PR policies a month before major releases to enhance stability and ensure reliable release candidates.