PeculiarVentures/webcrypto

RSA Public Key re-export results in malformed buffer

WorldThirteen opened this issue · 2 comments

When @peculiar/webcrypto is used as a crypto engine, RSA public key re-export result is invalid.

Here is a sample code:

import { Crypto } from '@peculiar/webcrypto';

const crypto = new Crypto();

const algorithm = {
  name: 'RSASSA-PKCS1-v1_5',
  hash: 'SHA-256',
  publicExponent: new Uint8Array([1, 0, 1]),
  modulusLength: 2048,
};
const keys = await crypto.subtle.generateKey(algorithm, true, ['sign', 'verify'])

const cryptoKeyBuffer = await crypto.subtle.exportKey('spki', keys.publicKey);
console.log(cryptoKeyBuffer.byteLength); // will log 294

const reImportedKey = await crypto.subtle.importKey('spki', cryptoKeyBuffer, algorithm, true, ['verify']);
const reExportedKey = await crypto.subtle.exportKey('spki', reImportedKey);

console.log(reExportedKey.byteLength); // will log 22, invalid bytelength.

The same code for WebCrypto in browser implementation or WebCrypto in the node will result in a valid re-exported buffer with the same length and ability to import/export countless times.

I can't reproduce this issue. I've tried to run this scrip using TS and JS implementations. No success.

I need more information about it. OS version, NodeJS version, module and dependencies versions

I found that my example was invalid (the latest console log should use another variable). I have edited the initial comment.

Environments where it was possible to reproduce:

  • MacOS 12.6, CPU M1 Pro, Node v16.17.0 (ARM);
  • MacOS 12.6, CPU IntelCore i7, Node v16.17.0 (ARM);
  • Docker Image node:16.15.1.
Dependencies tree (cure related to webcrypto)
npm ls @peculiar/webcrypto @peculiar/asn1-schema @peculiar/json-schema pvtsutils tslib webcrypto-core

├─┬ @peculiar/asn1-schema@2.3.0
│ ├─┬ asn1js@3.0.5
│ │ ├── pvtsutils@1.3.2 deduped
│ │ └── tslib@2.4.0 deduped
│ ├── pvtsutils@1.3.2 deduped
│ └── tslib@2.4.0
├─┬ @peculiar/webcrypto@1.1.7
│ ├── @peculiar/asn1-schema@2.3.0 deduped
│ ├─┬ @peculiar/json-schema@1.1.12
│ │ └── tslib@2.2.0
│ ├── pvtsutils@1.3.2 deduped
│ ├── tslib@2.2.0
│ └─┬ webcrypto-core@1.2.0
│   ├── @peculiar/asn1-schema@2.3.0 deduped
│   ├── @peculiar/json-schema@1.1.12 deduped
│   ├── pvtsutils@1.3.2 deduped
│   └── tslib@2.2.0
└── tslib@1.14.1

I've noticed that I have used not the most recent version, so I've updated it to the latest and the issue is gone.
Seems it was a dependency tree issue, but in such a case, I would like to receive an expectation instead of an invalid buffer.

Since the issue is not reproducible with the latest version and clear dependency tree, closing.