Skip to content

Error parsing PEM formatted EC key #442

Description

@augjoh

When parsing the following key:

> cat test.mjs 
import jose from 'node-jose';

const key = `-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgGhxHIBRF78CETf2Y
4naT6iLT5UJVgy9Pa7TMEMSRCSehRANCAAQ/Idg7BVShuglkq7uV5gN9Bo4tCJIi
ZLAWMdYCKfsfhGk0SRwGKO8WejalYv8YhudHIrwakIcLY0DkkeBAPyOw
-----END PRIVATE KEY-----`;

jose.JWK.asKey(key, 'pem')

Nodejs throws an error:

> node test.mjs
node:internal/buffer:86
    throw new ERR_BUFFER_OUT_OF_BOUNDS();
          ^

RangeError [ERR_BUFFER_OUT_OF_BOUNDS]: Attempt to access memory outside buffer bounds
    at boundsError (node:internal/buffer:86:11)
    at readUInt16BE (node:internal/buffer:334:5)
    at Buffer.<anonymous> (node:internal/buffer:1008:50)
    at Object.import ([...]/node_modules/node-jose/lib/jwk/eckey.js:325:20)
    at [...]/node_modules/node-jose/lib/jwk/keystore.js:198:28
    at Array.forEach (<anonymous>)
    at importFrom ([...]/node_modules/node-jose/lib/jwk/keystore.js:188:25)
    at JWKStore.value ([...]/node_modules/node-jose/lib/jwk/keystore.js:303:19)
    at JWKStore.asKey ([...]/node_modules/node-jose/lib/jwk/keystore.js:692:12)
    at file:///[...]/test.mjs:9:10 {
  code: 'ERR_BUFFER_OUT_OF_BOUNDS'
}

Node.js v24.14.1

The key itself seems to be fine (for openssl):

> openssl ec -in key.pem -text -check
read EC key
Private-Key: (256 bit)
priv:
    1a:1c:47:20:14:45:ef:c0:84:4d:fd:98:e2:76:93:
    ea:22:d3:e5:42:55:83:2f:4f:6b:b4:cc:10:c4:91:
    09:27
pub:
    04:3f:21:d8:3b:05:54:a1:ba:09:64:ab:bb:95:e6:
    03:7d:06:8e:2d:08:92:22:64:b0:16:31:d6:02:29:
    fb:1f:84:69:34:49:1c:06:28:ef:16:7a:36:a5:62:
    ff:18:86:e7:47:22:bc:1a:90:87:0b:63:40:e4:91:
    e0:40:3f:23:b0
ASN1 OID: prime256v1
NIST CURVE: P-256
EC Key valid.
writing EC key
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIBocRyAURe/AhE39mOJ2k+oi0+VCVYMvT2u0zBDEkQknoAoGCCqGSM49
AwEHoUQDQgAEPyHYOwVUoboJZKu7leYDfQaOLQiSImSwFjHWAin7H4RpNEkcBijv
Fno2pWL/GIbnRyK8GpCHC2NA5JHgQD8jsA==
-----END EC PRIVATE KEY-----

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions