47ng / 47ng/cloak

CLI command decrypt fails with 'Key is not available'

未关闭
#390 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
TypeScript
星标
63
派生
9
PR 合并指标
30 天内没有已合并 PR

描述

Example:

```
❯ node -v
v16.18.0

❯ npm install -g @47ng/cloak

❯ cloak generate
Key: k1.aesgcm256.xDQ816copHeT8jWCNGHinlashyfB5hOXR8wcvXbReeM=
Fingerprint: d5fff283

# Generated new empty keychain:
export CLOAK_MASTER_KEY=k1.aesgcm256.xDQ816copHeT8jWCNGHinlashyfB5hOXR8wcvXbReeM=
export CLOAK_KEYCHAIN=v1.aesgcm256.d5fff283.RJPDSOWSrJubssj7.CHTk4XNSpHFKMISv3_hwdMev

❯ echo 'test' | cloak encrypt 'k1.aesgcm256.xDQ816copHeT8jWCNGHinlashyfB5hOXR8wcvXbReeM='
v1.aesgcm256.d5fff283.RWkS6dy0bZRfe8jn.KJ2CN-QinTiQhnFFFa9qNk9sgMrs

❯ export CLOAK_MASTER_KEY=k1.aesgcm256.xDQ816copHeT8jWCNGHinlashyfB5hOXR8wcvXbReeM=

❯ export CLOAK_KEYCHAIN=v1.aesgcm256.d5fff283.RJPDSOWSrJubssj7.CHTk4XNSpHFKMISv3_hwdMev

❯ echo 'v1.aesgcm256.d5fff283.RWkS6dy0bZRfe8jn.KJ2CN-QinTiQhnFFFa9qNk9sgMrs' | cloak decrypt
Error: Error: Key is not available
```

As best as I can tell, the _root_ cause of this is that `decrypt` calls `getEnvKeychain` which calls `importKeychain` which itself calls `decryptString` and then `decryptAesGcm` which passes to `decryptAesGcmSync`. It is here, in `decryptAesGcmSync` that the Node's `Decipher` returns an empty array after the final `update` + `final`, which is unexpected.

I tried writing a failing test, but got blocked on being able to pass stdin to Commander in jest. Something like this is the foundation though:

```javascript
import program from './cli';

const OLD_ENV = process.env;

beforeEach(() => {
jest.resetModules();

process.env = {
...OLD_ENV,
CLOAK_MASTER_KEY: 'k1.aesgcm256.2itF7YmMYIP4b9NNtKMhIx2axGi6aI50RcwGBiFq-VA=',
};
});

afterAll(() => {
process.env = OLD_ENV;
});

test('decrypt', () => {
const cipher = 'v1.aesgcm256.710bb0e2.F5wkSytfdVv4xvtN.8uNajc7ufhVmMFpDdzWgKMKhOY4ZR2OSv1DFjvnm'
const expected = 'Hello, World !'
expect(() => {
program.parse(['decrypt', cipher]);
}).toReturnWith(expected)
})
```

贡献指南

这个仓库没有索引到贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。