
Research
Malicious npm Packages Impersonate Flashbots SDKs, Targeting Ethereum Wallet Credentials
Four npm packages disguised as cryptographic tools steal developer credentials and send them to attacker-controlled Telegram infrastructure.
keystore-idb
Advanced tools
In-browser key management with IndexedDB and the Web Crypto API.
Securely store and use keys for encryption, decryption, and signatures. IndexedDB and Web Crypto keep keys safe from malicious javascript.
Supports both RSA (RSASSA-PKCS1-v1_5 & RSA-OAEP) and Elliptic Curves (P-256, P-381 & P-521).
ECC (Elliptic Curve Cryptography) is only available on Chrome. Firefox and Safari do not support ECC and must use RSA. Specifically, this is an issue with storing ECC keys in IndexedDB
Below is the default config and all possible values Note: these are given as primitives, but in Typescript you can use the included enums
const defaultConfig = {
type: 'ecc', // 'ecc' | 'rsa'
curve: 'P-256', // 'P-256' | 'P-384' | 'P-521'
rsaSize: 2048, // 1024 | 2048 | 4096
symmAlg: 'AES-CTR', // 'AES-CTR' | 'AES-GCM' | 'AES-CBC'
symmLen: 128, // 128 | 192 | 256
hashAlg: 'SHA-256', // 'SHA-1' | 'SHA-256' | 'SHA-384' | 'SHA-512'
charSize: 16, // 8 | 16
storeName: 'keystore', // any string
exchangeKeyName: 'exchange-key', // any string
writeKeyName: 'write-key', // any string
}
Note: if you don't include a crypto "type" ('ecc' | 'rsa'
), the library will check if your browser supports ECC. If so (Chrome), it will use ECC, if not (Firefox, Safari) it will fall back to RSA.
import keystore from 'keystore-idb'
async function run() {
await keystore.clear()
const ks1 = await keystore.init({ storeName: 'keystore' })
const ks2 = await keystore.init({ storeName: 'keystore2' })
const msg = "Incididunt id ullamco et do."
// exchange keys and write keys are separate because of the Web Crypto API
const exchangeKey1 = await ks1.publicExchangeKey()
const writeKey1 = await ks1.publicWriteKey()
const exchangeKey2 = await ks2.publicExchangeKey()
// these keys get exported as strings
console.log('exchangeKey1: ', exchangeKey1)
console.log('writeKey1: ', writeKey1)
console.log('exchangeKey2: ', exchangeKey2)
const sig = await ks1.sign(msg)
const valid = await ks2.verify(msg, sig, writeKey1)
console.log('sig: ', sig)
console.log('valid: ', valid)
const cipher = await ks1.encrypt(msg, exchangeKey2)
const decipher = await ks2.decrypt(cipher, exchangeKey1)
console.log('cipher: ', cipher)
console.log('decipher: ', decipher)
}
run()
# install dependencies
yarn
# run development server
yarn start
# build
yarn build
# test
yarn test
# test w/ reloading
yarn test:watch
# publish (run this script instead of npm publish!)
./publish.sh
v0.15.5
max
parameter (based on rejection sampling) in randomBuf
rng.FAQs
In-browser key management with IndexedDB and the Web Crypto API
The npm package keystore-idb receives a total of 158 weekly downloads. As such, keystore-idb popularity was classified as not popular.
We found that keystore-idb demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 8 open source maintainers 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.
Research
Four npm packages disguised as cryptographic tools steal developer credentials and send them to attacker-controlled Telegram infrastructure.
Security News
Ruby maintainers from Bundler and rbenv teams are building rv to bring Python uv's speed and unified tooling approach to Ruby development.
Security News
Following last week’s supply chain attack, Nx published findings on the GitHub Actions exploit and moved npm publishing to Trusted Publishers.