mirror of
https://github.com/whyour/qinglong.git
synced 2026-09-21 01:00:24 +08:00
82 lines
2.2 KiB
JavaScript
82 lines
2.2 KiB
JavaScript
const assert = require('node:assert/strict');
|
|
const test = require('node:test');
|
|
|
|
const {
|
|
activeApiCredentialPepperKey,
|
|
createSingletonApiCredentialPepperKeyring,
|
|
normalizeApiCredentialPepperKeyring,
|
|
resolveApiCredentialPepperKey,
|
|
} = require('../dist/security/identity-credential/apiCredentialPepperKeyring.js');
|
|
|
|
const LEGACY = 'A'.repeat(43);
|
|
const NEXT = Buffer.alloc(32, 2).toString('base64url');
|
|
|
|
test('normalizes a bounded dual-generation keyring and resolves exact keys', () => {
|
|
const keyring = normalizeApiCredentialPepperKeyring({
|
|
schemaVersion: 1,
|
|
activePepperKeyId: 'rotation-2026-08',
|
|
keys: [
|
|
{ pepperKeyId: 'legacy-v1', pepper: LEGACY },
|
|
{ pepperKeyId: 'rotation-2026-08', pepper: NEXT },
|
|
],
|
|
});
|
|
|
|
assert.deepEqual(activeApiCredentialPepperKey(keyring), {
|
|
pepperKeyId: 'rotation-2026-08',
|
|
pepper: NEXT,
|
|
});
|
|
assert.deepEqual(resolveApiCredentialPepperKey(keyring, 'legacy-v1'), {
|
|
pepperKeyId: 'legacy-v1',
|
|
pepper: LEGACY,
|
|
});
|
|
assert.equal(resolveApiCredentialPepperKey(keyring, 'missing-v1'), null);
|
|
});
|
|
|
|
test('singleton compatibility is explicit and preserves its key id', () => {
|
|
assert.deepEqual(
|
|
createSingletonApiCredentialPepperKeyring(LEGACY, 'legacy-v1'),
|
|
{
|
|
schemaVersion: 1,
|
|
activePepperKeyId: 'legacy-v1',
|
|
keys: [{ pepperKeyId: 'legacy-v1', pepper: LEGACY }],
|
|
},
|
|
);
|
|
});
|
|
|
|
test('rejects widened, duplicate, missing-active, empty, and oversized keyrings', () => {
|
|
const valid = {
|
|
schemaVersion: 1,
|
|
activePepperKeyId: 'legacy-v1',
|
|
keys: [{ pepperKeyId: 'legacy-v1', pepper: LEGACY }],
|
|
};
|
|
for (const candidate of [
|
|
{ ...valid, extra: true },
|
|
{ ...valid, keys: [] },
|
|
{
|
|
...valid,
|
|
keys: [valid.keys[0], valid.keys[0]],
|
|
},
|
|
{ ...valid, activePepperKeyId: 'missing-v1' },
|
|
{
|
|
...valid,
|
|
keys: [
|
|
valid.keys[0],
|
|
{ pepperKeyId: 'next-v1', pepper: NEXT },
|
|
{
|
|
pepperKeyId: 'third-v1',
|
|
pepper: Buffer.alloc(32, 3).toString('base64url'),
|
|
},
|
|
],
|
|
},
|
|
{
|
|
...valid,
|
|
keys: [{ ...valid.keys[0], extra: true }],
|
|
},
|
|
]) {
|
|
assert.throws(
|
|
() => normalizeApiCredentialPepperKeyring(candidate),
|
|
/pepper keyring is invalid/,
|
|
);
|
|
}
|
|
});
|