From 7726d7a02dfd88c534d2bbc6be717783dbad59bc Mon Sep 17 00:00:00 2001 From: tamarafinogina Date: Mon, 16 Mar 2026 12:16:32 +0100 Subject: [PATCH] remove kyber512 and kyber1024 --- src/constants.ts | 7 --- src/post-quantum-crypto/index.ts | 2 - src/post-quantum-crypto/kyber1024.ts | 50 ---------------- src/post-quantum-crypto/kyber512.ts | 50 ---------------- tests/post-quantum-crypto/kyber1024.test.ts | 63 --------------------- tests/post-quantum-crypto/kyber512.test.ts | 63 --------------------- 6 files changed, 235 deletions(-) delete mode 100644 src/post-quantum-crypto/kyber1024.ts delete mode 100644 src/post-quantum-crypto/kyber512.ts delete mode 100644 tests/post-quantum-crypto/kyber1024.test.ts delete mode 100644 tests/post-quantum-crypto/kyber512.test.ts diff --git a/src/constants.ts b/src/constants.ts index 0bb2d5a..a26ef49 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -21,15 +21,8 @@ export const ARGON2ID_MEMORY_SIZE = 65536; export const ARGON2ID_SALT_BYTE_LENGTH = 16; export const ARGON2ID_OUTPUT_BYTE_LENGTH = 32; -export const KYBER512_PUBLIC_KEY_LENGTH = 800; -export const KYBER512_SECRET_KEY_LENGTH = 1632; - export const KYBER768_PUBLIC_KEY_LENGTH = 1184; export const KYBER768_SECRET_KEY_LENGTH = 2400; - -export const KYBER1024_PUBLIC_KEY_LENGTH = 1568; -export const KYBER1024_SECRET_KEY_LENGTH = 3168; - export const KYBER_SEED_LENGTH = 64; export const HASH_BIT_LEN = 256; diff --git a/src/post-quantum-crypto/index.ts b/src/post-quantum-crypto/index.ts index 4f5bbeb..7d6dbdb 100644 --- a/src/post-quantum-crypto/index.ts +++ b/src/post-quantum-crypto/index.ts @@ -1,3 +1 @@ export * from './kyber768'; -export * as kyber512 from './kyber512'; -export * as kyber1024 from './kyber1024'; diff --git a/src/post-quantum-crypto/kyber1024.ts b/src/post-quantum-crypto/kyber1024.ts deleted file mode 100644 index 42feee2..0000000 --- a/src/post-quantum-crypto/kyber1024.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { ml_kem1024 } from '@noble/post-quantum/ml-kem.js'; - -/** - * Generates public and secret Kyber keys - * - * @param seed - The optional seed - * @returns The generated Kyber key pair. - */ -export function generateKyberKeys(seed?: Uint8Array): { - publicKey: Uint8Array; - secretKey: Uint8Array; -} { - try { - return ml_kem1024.keygen(seed); - } catch (error) { - throw new Error('Failed to generate Kyber keys', { cause: error }); - } -} - -/** - * Generates a shared secret of 256-bits and encapsulates it to the given public key using Kyber algorithms - * - * @param publicKey - The public Kyber key - * @returns The resulting encapsulation and the generated shared secret. - */ -export function encapsulateKyber(publicKey: Uint8Array): { - cipherText: Uint8Array; - sharedSecret: Uint8Array; -} { - try { - return ml_kem1024.encapsulate(publicKey); - } catch (error) { - throw new Error('Failed to encapsulate', { cause: error }); - } -} - -/** - * Decapsulates the encapsulated shared secret using Kyber algorithms - * - * @param cipherText - The encapsulated key - * @param secretKey - The private Kyber key - * @returns The resulting decapsulated shared secret. - */ -export function decapsulateKyber(cipherText: Uint8Array, secretKey: Uint8Array): Uint8Array { - try { - return ml_kem1024.decapsulate(cipherText, secretKey); - } catch (error) { - throw new Error('Failed to decapsulate', { cause: error }); - } -} diff --git a/src/post-quantum-crypto/kyber512.ts b/src/post-quantum-crypto/kyber512.ts deleted file mode 100644 index ef3ed6b..0000000 --- a/src/post-quantum-crypto/kyber512.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { ml_kem512 } from '@noble/post-quantum/ml-kem.js'; - -/** - * Generates public and secret Kyber keys - * - * @param seed - The optional seed - * @returns The generated Kyber key pair. - */ -export function generateKyberKeys(seed?: Uint8Array): { - publicKey: Uint8Array; - secretKey: Uint8Array; -} { - try { - return ml_kem512.keygen(seed); - } catch (error) { - throw new Error('Failed to generate Kyber keys', { cause: error }); - } -} - -/** - * Generates a shared secret of 256-bits and encapsulates it to the given public key using Kyber algorithms - * - * @param publicKey - The public Kyber key - * @returns The resulting encapsulation and the generated shared secret. - */ -export function encapsulateKyber(publicKey: Uint8Array): { - cipherText: Uint8Array; - sharedSecret: Uint8Array; -} { - try { - return ml_kem512.encapsulate(publicKey); - } catch (error) { - throw new Error('Failed to encapsulate', { cause: error }); - } -} - -/** - * Decapsulates the encapsulated shared secret using Kyber algorithms - * - * @param cipherText - The encapsulated key - * @param secretKey - The private Kyber key - * @returns The resulting decapsulated shared secret. - */ -export function decapsulateKyber(cipherText: Uint8Array, secretKey: Uint8Array): Uint8Array { - try { - return ml_kem512.decapsulate(cipherText, secretKey); - } catch (error) { - throw new Error('Failed to decapsulate', { cause: error }); - } -} diff --git a/tests/post-quantum-crypto/kyber1024.test.ts b/tests/post-quantum-crypto/kyber1024.test.ts deleted file mode 100644 index 50c314b..0000000 --- a/tests/post-quantum-crypto/kyber1024.test.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { describe, expect, it } from 'vitest'; -import { generateKyberKeys, encapsulateKyber, decapsulateKyber } from '../../src/post-quantum-crypto/kyber1024'; -import { KYBER1024_PUBLIC_KEY_LENGTH, KYBER1024_SECRET_KEY_LENGTH, KYBER_SEED_LENGTH } from '../../src/constants'; - -describe('Test kyber functions', () => { - it('should generate keys sucessfully', async () => { - const keys = generateKyberKeys(); - - expect(keys).toHaveProperty('publicKey'); - expect(keys).toHaveProperty('secretKey'); - expect(keys.publicKey.length).toBe(KYBER1024_PUBLIC_KEY_LENGTH); - expect(keys.secretKey.length).toBe(KYBER1024_SECRET_KEY_LENGTH); - }); - - it('should generate identical keys for identical seeds', async () => { - const seed = new Uint8Array(KYBER_SEED_LENGTH); - crypto.getRandomValues(seed); - const keys1 = generateKyberKeys(seed); - const keys2 = generateKyberKeys(seed); - - expect(keys1).toStrictEqual(keys2); - }); - it('should generate different keys for different seeds', async () => { - const seed1 = new Uint8Array(KYBER_SEED_LENGTH); - crypto.getRandomValues(seed1); - const keys1 = generateKyberKeys(seed1); - - const seed2 = new Uint8Array(KYBER_SEED_LENGTH); - crypto.getRandomValues(seed2); - const keys2 = generateKyberKeys(seed2); - - expect(keys1).not.toStrictEqual(keys2); - }); - - it('should sucessfully encapsulate and decapsulate', async () => { - const keys = generateKyberKeys(); - const { cipherText, sharedSecret } = encapsulateKyber(keys.publicKey); - const result = decapsulateKyber(cipherText, keys.secretKey); - - expect(result).toStrictEqual(sharedSecret); - }); - - it('should throw an error if no public key given', () => { - const publicKey = new Uint8Array(); - expect(() => encapsulateKyber(publicKey)).toThrowError(/Failed to encapsulate/); - }); - - it('should throw an error if short public key given', async () => { - const publicKey = new Uint8Array([1, 2, 3]); - expect(() => encapsulateKyber(publicKey)).toThrowError(/Failed to encapsulate/); - }); - - it('should throw an error if no ciphertext given', () => { - const ciphertext = new Uint8Array(); - const keys = generateKyberKeys(); - expect(() => decapsulateKyber(ciphertext, keys.secretKey)).toThrowError(/Failed to decapsulate/); - }); - - it('should throw an error if short seed given', () => { - const seed = new Uint8Array([1, 2, 3]); - expect(() => generateKyberKeys(seed)).toThrowError(/Failed to generate Kyber key/); - }); -}); diff --git a/tests/post-quantum-crypto/kyber512.test.ts b/tests/post-quantum-crypto/kyber512.test.ts deleted file mode 100644 index 4e7bcb7..0000000 --- a/tests/post-quantum-crypto/kyber512.test.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { describe, expect, it } from 'vitest'; -import { generateKyberKeys, encapsulateKyber, decapsulateKyber } from '../../src/post-quantum-crypto/kyber512'; -import { KYBER512_PUBLIC_KEY_LENGTH, KYBER512_SECRET_KEY_LENGTH, KYBER_SEED_LENGTH } from '../../src/constants'; - -describe('Test kyber functions', () => { - it('should generate keys sucessfully', async () => { - const keys = generateKyberKeys(); - - expect(keys).toHaveProperty('publicKey'); - expect(keys).toHaveProperty('secretKey'); - expect(keys.publicKey.length).toBe(KYBER512_PUBLIC_KEY_LENGTH); - expect(keys.secretKey.length).toBe(KYBER512_SECRET_KEY_LENGTH); - }); - - it('should generate identical keys for identical seeds', async () => { - const seed = new Uint8Array(KYBER_SEED_LENGTH); - crypto.getRandomValues(seed); - const keys1 = generateKyberKeys(seed); - const keys2 = generateKyberKeys(seed); - - expect(keys1).toStrictEqual(keys2); - }); - it('should generate different keys for different seeds', async () => { - const seed1 = new Uint8Array(KYBER_SEED_LENGTH); - crypto.getRandomValues(seed1); - const keys1 = generateKyberKeys(seed1); - - const seed2 = new Uint8Array(KYBER_SEED_LENGTH); - crypto.getRandomValues(seed2); - const keys2 = generateKyberKeys(seed2); - - expect(keys1).not.toStrictEqual(keys2); - }); - - it('should sucessfully encapsulate and decapsulate', async () => { - const keys = generateKyberKeys(); - const { cipherText, sharedSecret } = encapsulateKyber(keys.publicKey); - const result = decapsulateKyber(cipherText, keys.secretKey); - - expect(result).toStrictEqual(sharedSecret); - }); - - it('should throw an error if no public key given', () => { - const publicKey = new Uint8Array(); - expect(() => encapsulateKyber(publicKey)).toThrowError(/Failed to encapsulate/); - }); - - it('should throw an error if short public key given', async () => { - const publicKey = new Uint8Array([1, 2, 3]); - expect(() => encapsulateKyber(publicKey)).toThrowError(/Failed to encapsulate/); - }); - - it('should throw an error if no ciphertext given', () => { - const ciphertext = new Uint8Array(); - const keys = generateKyberKeys(); - expect(() => decapsulateKyber(ciphertext, keys.secretKey)).toThrowError(/Failed to decapsulate/); - }); - - it('should throw an error if short seed given', () => { - const seed = new Uint8Array([1, 2, 3]); - expect(() => generateKyberKeys(seed)).toThrowError(/Failed to generate Kyber key/); - }); -});