Support for loading, storing, and using kyber keys in decryption
This commit is contained in:
parent
c1580a5eb3
commit
b6445a6af0
49 changed files with 2260 additions and 806 deletions
35
ts/Curve.ts
35
ts/Curve.ts
|
@ -2,6 +2,7 @@
|
|||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
import * as client from '@signalapp/libsignal-client';
|
||||
import type { KyberPreKeyRecord } from '@signalapp/libsignal-client';
|
||||
|
||||
import * as Bytes from './Bytes';
|
||||
import { constantTimeEqual } from './Crypto';
|
||||
|
@ -59,6 +60,40 @@ export function generatePreKey(keyId: number): CompatPreKeyType {
|
|||
};
|
||||
}
|
||||
|
||||
export function generateKyberPreKey(
|
||||
identityKeyPair: KeyPairType,
|
||||
keyId: number
|
||||
): KyberPreKeyRecord {
|
||||
if (!isNonNegativeInteger(keyId)) {
|
||||
throw new TypeError(
|
||||
`generateKyberPreKey: Invalid argument for keyId: ${keyId}`
|
||||
);
|
||||
}
|
||||
|
||||
if (
|
||||
!(identityKeyPair.privKey instanceof Uint8Array) ||
|
||||
identityKeyPair.privKey.byteLength !== 32 ||
|
||||
!(identityKeyPair.pubKey instanceof Uint8Array) ||
|
||||
identityKeyPair.pubKey.byteLength !== 33
|
||||
) {
|
||||
throw new TypeError(
|
||||
'generateKyberPreKey: Invalid argument for identityKeyPair'
|
||||
);
|
||||
}
|
||||
|
||||
const keyPair = client.KEMKeyPair.generate();
|
||||
const signature = calculateSignature(
|
||||
identityKeyPair.privKey,
|
||||
keyPair.getPublicKey().serialize()
|
||||
);
|
||||
return client.KyberPreKeyRecord.new(
|
||||
keyId,
|
||||
Date.now(),
|
||||
keyPair,
|
||||
Buffer.from(signature)
|
||||
);
|
||||
}
|
||||
|
||||
export function generateKeyPair(): KeyPairType {
|
||||
const privKey = client.PrivateKey.generate();
|
||||
const pubKey = privKey.getPublicKey();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue