setAutoPadding(false) has no effect, and ECB modes reject iv: null
まだ誰も着手していません。
評価
- 難易度
- 2/5
- 見積もり時間
- 1〜3時間
- 初心者へのやさしさ
- 76/100
- issue の種類
- バグ
- 明瞭さ
- 明確に書かれている
- 活発さ
- 活発
- 技術スタック
- javascript, node.js
- 領域
- backend, cryptography
調査の方向性
issueでコンストラクターを含み、テスト対象のmasterリビジョンに一致するとされている index.js から始め、iv の扱いとcipherがpaddingをどのように委譲するかを調べてください。次に、des.js のpadding動作と既存のテストがあれば確認してください。完了条件は、setAutoPadding(false) がNodeと同じパディングなしの暗号文を生成し、ECBの構築が例外を投げずに iv: null を受け入れることです。
索引モデルが issue の本文から書いたものです。
説明
setAutoPadding(false) is a no-op on DES ciphers, so PKCS#7 padding is always added on encrypt and stripped on decrypt. Separately, ECB modes (des-ecb, des-ede, des-ede3) throw when iv is null, which Node's crypto.createCipheriv accepts.
const DES = require('browserify-des');
const crypto = require('crypto');
const key = Buffer.alloc(24, 1), iv = Buffer.alloc(8, 2), pt = Buffer.alloc(8, 3);
const desCipher = new DES({ mode: 'des-ede3-cbc', key, iv });
desCipher.setAutoPadding(false);
console.log('browserify-des:', Buffer.concat([desCipher.update(pt), desCipher.final()]).toString('hex'));
const nodeCipher = crypto.createCipheriv('des-ede3-cbc', key, iv);
nodeCipher.setAutoPadding(false);
console.log('node crypto: ', Buffer.concat([nodeCipher.update(pt), nodeCipher.final()]).toString('hex'));
try { new DES({ mode: 'des-ede3', key, iv: null }); console.log('no throw'); } catch (e) { console.log(String(e)); }
node repro.js
Actual:
browserify-des: 994d4dc157b96c52acbca5d8c205d7cb
node crypto: 994d4dc157b96c52
TypeError [ERR_INVALID_ARG_TYPE]: The first argument must be of type string or an instance of Buffer, ArrayBuffer, or Array or an Array-like Object. Received null
Expected: 994d4dc157b96c52 (no padding block), as from Node, and no throw, as crypto.createCipheriv('des-ede3', key, null) does.
Tested with browserify-des 1.0.2 (same index.js as master 08937ef), cipher-base 1.0.7, des.js 1.1.0, Node.js v26.13.0.
DES never overrides CipherBase.prototype.setAutoPadding, although des.js already honours padding: false in _pad/_unpad; something like DES.prototype.setAutoPadding = function (p) { this._des.padding = p !== false; return this } would do. The iv error comes from the unconditional Buffer.from(iv) in the constructor.
Credit: https://ucsbplse.github.io/
- 主要言語
- JavaScript
- スター
- 10
- フォーク
- 5
- PR マージ指標
- 30日以内にマージされた PR はありません
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
browserify/browserify-des のほかの issue
-
難易度 3/5 1〜2日 初心者へのやさしさ 25/100
browserify/browserify-des#12 ·
-
3DES PCI Compliantオープン
難易度 4/5 3〜5日 初心者へのやさしさ 25/100
browserify/browserify-des の issue をすべて見る
似ている issue
-
external-plugin needs-review:HIGH ready-for-review
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
github/awesome-copilot#6346 · コメント 2 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
kingcharleslzy-ai/dsh-purge#179 ·
メンテナーはふだん 1 日以内に返信
-
status: ready
難易度 2/5 1〜3時間 初心者へのやさしさ 64/100
melodic-software/claude-code-plugins#15008 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
S-Needs triage
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
メンテナーはふだん 2 日以内に返信
-
ACK_WAITING HELP_WANTED UPDATE_CS
難易度 2/5 1〜3時間 初心者へのやさしさ 83/100
OWASP/CheatSheetSeries#2935 ·
メンテナーはふだん 1 日以内に返信