Crypto-View

documenso/documenso

Readiness score
92 of 100
How this is calculated · previous scan 92
Cryptographic posture
Quantum-vulnerable 1 Reduced margin 12 Could not be determined 9 Quantum-safe 21
To address1
Key establishment1
Inventory only1
Total findings44
What was analysed
Branch Not at a branch head The commit was given directly and is not the tip of any branch in the repository.
Commit f0ab7c112e3c39656b0153b67fbf25fd9616e96f fix: add more logging for errors on sign or complete (#3151)
Committed 2026-08-05 01:29 UTC
Scanned 2026-09-10 07:48 UTC 19 hours ago
Coverage 2219 files, 2082 javascript

Earlier scans of this repository

15 scans · score 92 → 92 · compare any two
15 scans · 92 → 92 (unchanged). The filled point is the scan you are reading.
Scanned Commit Score To address
4 hours ago e1ad4a2c55b4 main 92 1 Compare
5 hours ago e1ad4a2c55b4 main 92 1 Compare
18 hours ago b97c22a6074d main 92 1 Compare
19 hours ago f0ab7c112e3c 92 1 Compare
19 hours ago this scan f0ab7c112e3c 92 1
21 hours ago b97c22a6074d main 92 1 Compare
1 day ago 389390c88494 main 92 1 Compare
1 day ago 389390c88494 main 92 1 Compare
1 day ago 389390c88494 main 92 1 Compare
1 day ago 389390c88494 main 92 1 Compare
3 days ago 2cac63a000e2 main 92 1 Compare
3 days ago 2cac63a000e2 main 92 1 Compare
4 days ago 2cac63a000e2 main 92 1 Compare
10 days ago 5082b475a0b7 main 92 1 Compare
11 days ago f0ab7c112e3c 92 1 Compare

Every repository in this history is re-scanned weekly.

List of cryptographic assets

RSA2048-bit Quantum-vulnerable Recorded traffic 1 place See details

Classical key pair generated with Node crypto

`crypto.generateKeyPair()` or its synchronous form. The detector resolves the algorithm through a `promisify()` wrapper and through an import alias, both of which are common enough that missing them would leave real key generation unreported.

A quantum computer of sufficient size breaks this completely. It has to be replaced, not tuned. Broken by Shor's algorithm on a cryptographically relevant quantum computer.

What to do. ML-KEM-768 for encryption, ML-DSA-65 for signatures. Node exposes neither yet, so this usually means an addon or a service boundary.

  1. packages/ee/server-only/lib/create-email-domain.ts:89 const { publicKey, privateKey } = await generateKeyPairAsync('rsa', {
js.generatekeypair · CWE-327
unknown Could not be determined 1 place See details

Cryptographic library in the dependency manifest

A dependency known to implement classical asymmetric cryptography. Its presence is inventory, not a finding about this codebase: the library may never be called with a quantum-vulnerable algorithm.

The project depends on a cryptography library. Listed so the inventory is complete; it is not by itself a problem.

What to do. Check the version. Several of these libraries have shipped ML-KEM and ML-DSA support since 2024, so the migration may need an upgrade rather than a replacement.

  1. packages/lib/package.json:51 "jose": "^6.1.2",
dep.crypto-library
CSPRNG Quantum-safe 7 places See details

Random number generation

`crypto.randomBytes()`, `randomUUID()` or `getRandomValues()`. A platform CSPRNG is not a quantum exposure; it is recorded because an inventory that omits the randomness source is incomplete. `Math.random()` is a separate, present-day defect.

This is where the software gets its random numbers. Quantum computers do not weaken it.

What to do. No action.

  1. apps/remix/server/security-headers.ts:59 crypto.getRandomValues(buf);
  2. packages/auth/server/lib/session/session.ts:31 crypto.getRandomValues(bytes);
  3. packages/ee/server-only/lib/send-organisation-account-link-confirmation-email.ts:61 const token = crypto.randomBytes(20).toString('hex');
  4. packages/lib/jobs/definitions/emails/send-admin-user-created-email.handler.ts:33 token: crypto.randomBytes(18).toString('hex'),
  5. packages/lib/server-only/2fa/setup-2fa.ts:23 const secret = crypto.randomBytes(10);
  6. packages/lib/server-only/user/forgot-password.ts:21 const token = crypto.randomBytes(18).toString('hex');
  7. packages/lib/server-only/user/send-confirmation-token.ts:13 const token = crypto.randomBytes(20).toString('hex');
js.rng
bcrypt Quantum-safe Renamed import 3 places See details

Password hashing or key derivation

A password hashing or key derivation function. Not a quantum exposure, and part of the inventory: a cryptographic bill of materials that omits how passwords are stored is not complete.

This is how passwords are stored. Quantum computers do not meaningfully weaken it.

What to do. Argon2id for new work. PBKDF2 needs a high iteration count to stay defensible.

  1. packages/lib/server-only/auth/hash.ts:10 return bcryptHashSync(password, SALT_ROUNDS);
  2. packages/prisma/seed/organisations.ts:48 password: hashSync('password'),
  3. packages/prisma/seed/users.ts:44 password: hashSync(password),
js.kdf
HMAC Quantum-safe 1 place See details

JWT signed with a classical algorithm

A JOSE `alg` value. RS*, PS*, ES* and EdDSA sign with a quantum-vulnerable key; HS* is an HMAC and is not affected. `alg: 'none'` is reported as a critical defect today.

No known quantum attack changes how strong this is. A keyed MAC is not affected by Shor and only marginally by Grover.

What to do. No standardised post-quantum JOSE algorithm exists yet. Keep token lifetimes short.

js.jwt.algorithm · CWE-327
SHA-512 Quantum-safe 1 place See details

Hash function in use

`createHash()` or `subtle.digest()`. The digest is read from the argument, so one rule covers the family: MD5 and SHA-1 are reported as broken, SHA-256 as a reduced margin, SHA-384 and above as inventory.

No known quantum attack changes how strong this is. No known quantum algorithm changes the security margin.

What to do. SHA-256 as the floor, SHA-384 where the digest protects something long-lived.

  1. packages/lib/server-only/auth/hash.ts:18 return crypto.createHash('sha512').update(input).digest('hex');
js.hash · CWE-328

Cryptographic assets

Algorithm Assessment What it means Occurrences
SHA-256 Reduced margin Pre-image resistance falls to about 128 bits of quantum work. Adequate for most uses; SHA-384 restores the full margin where a signature must last decades. 12
bcrypt Quantum-safe A password hashing function. Grover offers only a marginal speed-up against a deliberately slow function, so quantum computing is not the concern here. 9
unknown Could not be determined The algorithm could not be established from the source - chosen at runtime, or decided somewhere this scan does not reach. 9
CSPRNG Quantum-safe A cryptographically secure random number generator provided by the platform. Not weakened by a quantum computer. 7
ChaCha20-Poly1305 Quantum-safe No known quantum algorithm changes the security margin. 3
RSA Quantum-vulnerable Broken by Shor's algorithm on a cryptographically relevant quantum computer. 1
HMAC Quantum-safe A keyed MAC is not affected by Shor and only marginally by Grover. 1
SHA-512 Quantum-safe No known quantum algorithm changes the security margin. 1

Imported cryptographic libraries

Library Files
@oslojs/crypto hash functions and constant-time helpers 11
crypto the Node crypto module 9
@node-rs/bcrypt password hashing 6
@noble/ciphers symmetric encryption 3