Skip to content

Commit

Permalink
PQC: switch to latest proposed variant for draft 7 of ML-KEM with X25519
Browse files Browse the repository at this point in the history
Which also drops ECDH-KEM CCA-conversion.
This variant is yet to be adopted under draft 7, hence official test
vectors aren't available for now.

See openpgp-pqc/draft-openpgp-pqc#161 .
  • Loading branch information
larabr committed Dec 13, 2024
1 parent 3ce1f49 commit 5fe43e6
Show file tree
Hide file tree
Showing 3 changed files with 142 additions and 152 deletions.
17 changes: 3 additions & 14 deletions src/crypto/public_key/post_quantum/kem/ecc_kem.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
import * as ecdhX from '../../elliptic/ecdh_x';
import hash from '../../../hash';
import util from '../../../../util';
import enums from '../../../../enums';

export async function generate(algo) {
Expand All @@ -20,12 +18,8 @@ export async function generate(algo) {
export async function encaps(eccAlgo, eccRecipientPublicKey) {
switch (eccAlgo) {
case enums.publicKey.pqc_mlkem_x25519: {
const { ephemeralPublicKey: eccCipherText, sharedSecret: eccSharedSecret } = await ecdhX.generateEphemeralEncryptionMaterial(enums.publicKey.x25519, eccRecipientPublicKey);
const eccKeyShare = await hash.sha3_256(util.concatUint8Array([
eccSharedSecret,
eccCipherText,
eccRecipientPublicKey
]));
const { ephemeralPublicKey: eccCipherText, sharedSecret: eccKeyShare } = await ecdhX.generateEphemeralEncryptionMaterial(enums.publicKey.x25519, eccRecipientPublicKey);

return {
eccCipherText,
eccKeyShare
Expand All @@ -39,12 +33,7 @@ export async function encaps(eccAlgo, eccRecipientPublicKey) {
export async function decaps(eccAlgo, eccCipherText, eccSecretKey, eccPublicKey) {
switch (eccAlgo) {
case enums.publicKey.pqc_mlkem_x25519: {
const eccSharedSecret = await ecdhX.recomputeSharedSecret(enums.publicKey.x25519, eccCipherText, eccPublicKey, eccSecretKey);
const eccKeyShare = await hash.sha3_256(util.concatUint8Array([
eccSharedSecret,
eccCipherText,
eccPublicKey
]));
const eccKeyShare = await ecdhX.recomputeSharedSecret(enums.publicKey.x25519, eccCipherText, eccPublicKey, eccSecretKey);
return eccKeyShare;
}
default:
Expand Down
5 changes: 3 additions & 2 deletions src/crypto/public_key/post_quantum/kem/kem.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ export async function decrypt(algo, eccCipherText, mlkemCipherText, eccSecretKey
async function multiKeyCombine(algo, ecdhKeyShare, ecdhCipherText, ecdhPublicKey, mlkemKeyShare, mlkemCipherText, mlkemPublicKey) {
// LAMPS-aligned and NIST compatible combiner, proposed in: https://mailarchive.ietf.org/arch/msg/openpgp/NMTCy707LICtxIhP3Xt1U5C8MF0/
// 2a. KDF(mlkemSS || tradSS || tradCT || tradPK || Domain)
// where Domain is "Domain" for LAMPS, and "mlkemCT || mlkemPK || algId" for OpenPGP
// where Domain is "Domain" for LAMPS, and "mlkemCT || mlkemPK || algId || const" for OpenPGP
const encData = util.concatUint8Array([
mlkemKeyShare,
ecdhKeyShare,
Expand All @@ -40,7 +40,8 @@ async function multiKeyCombine(algo, ecdhKeyShare, ecdhCipherText, ecdhPublicKey
// domSep
mlkemCipherText,
mlkemPublicKey,
new Uint8Array([algo])
new Uint8Array([algo]),
util.encodeUTF8('OpenPGPCompositeKDFv1')
]);

const kek = await hash.digest(enums.hash.sha3_256, encData);
Expand Down
272 changes: 136 additions & 136 deletions test/crypto/postQuantum.js
Original file line number Diff line number Diff line change
Expand Up @@ -655,35 +655,35 @@ zdmQk3zZBuwE/KAXTAY=
it('ML-KEM + X25519 - Test vector', async function () {
const armoredMessage = `-----BEGIN PGP MESSAGE-----
wcPUA7w9P/Y4tvvTaUZQqpafFZ6WRHDl5y8FJcqxWgQ8kK3P++vG3p2aW0Vb
BuxUbAzplFMVjybzf8n0qa/92R6IeFKWMilaM+iAf81VyTIBv12lfQy27RFx
itM0v/CAWrEvPf1RkB0ZnEX9lKhIfBp7QRSVEp2QOh3pWtYQ6AkS0JtOGeiI
befPigAVtmDlnYHYYEFbrKlE8pvLF2bMCJkHredQue7AmsGLpnXZpna19rvG
3kB38YiM6777jxW8yb7h77jOZgnclJXYkSHly7LKa6z6omOYqn6rA5izbE0e
s/yqucighBVnjiwNEwrPlQbogh6EtRsGXkYLPGRSVSM2MCSsigl2Xs2cgWJV
7outF2Qr8BauBRqHW5ScJF/yAmVP7NfQ9PfoUPMiHFJE8U6ffow6lnNWzhn2
Wqp8GkBccTmzwD/6XXf23yKGO6AIc1xvNpE99QBzTkPslPuXDiocMHfAXpbW
HzVyOwXu/tQmRNe+ISNpQsMmQDUM05kq0diazBXOiZGRMRFndEpa1Qhhgj7V
4GgLyr/HdylNbzbiUGFjovN8/pUwO6APu1jU/CmFEUrjjOFpXaOLZ6svt5mW
iNlVNfWVq35CrJdWVFInLjD/GmsQNSiPe34LcDS3TVRzAhS5HehTVrkFDOD+
e7wBnHFKDquYTzc3pqP3gHmzCLueUfo3Z6cTgXz6T3+RlRfZDNQzLZ7XHC3W
VWuwjViv0mQncau6bCnhhCK4VwAqXCvjy9m598cqKQZ5Sf3DAGY1+ZGqbID+
0zCdVKC0v4eUEGg2D9K1f1XiTfaJv6AO0sS5RqjAZxBpw2/m5ruxMyJxqTE1
h0GZLEY1ZQKxe9E0bDvTi0ogbYicLEokgRyKN/ojZE+hwpA7msjLVV7E0tDg
rz8jxp4AwQ8O/FXX/X0Dp04QsZgJhdwEYt4HPTogSff/NaC8KNSTzxEvJIMa
N+dPAp3Ypz7pGU6y73odwBCJ58nAPaI06f3Ev4gWJai8sUxeHe6amQX+SYqL
jbTP838PgbRbNCwBUiH2I5WX2bdIeRbEiQerVr7f76Kpdo2FC93A8VlW/wyK
VYWINPBfB/ktLAzmohR9wq+E+uMCOnyz6+vE1Bf2fbljGBSBjyUwED07tlDd
B9EvUlLgr7TAiideveSXHAx0G0qK5NBzfoY3Ca3WETiqkDTWpBSPDQUsbXrF
u2QUJKIcXcQptuiC+nKFFbDoFvCJzgcuRS/H1ZyOcI0dgmx9T1GGrID65R0z
FqdpenxdaHncrMmOlYI/cwyrfhHV0wZB6Y0XAv5Ujwsfg0fdCxJclkAI1k/x
N2xIhjwFdh62sKZqCJgfgKlrkSv4DDUVAooR/yHIIKpeJQgC2ZUfL3XLNycJ
eBf5V5ZmyRhIVgAThhb4cGVtNahP0IuIHk7eMdALC5Yhl+PTlSlhqVkbyi05
Ae7dcaTW/KAEzZw2mqvVQX2MABaShv49reFhsCfI7EWbdI0CpTQbrCxp9mTI
Lw2nVxF5SGApCQtVJ+cajQ48p2MNwYMbsnMU9oEjy89nXZfU0G3CBRnAnhUP
Sw5WYSDSOgGTtzkIxvyRfaLftZRNfT/5XmvtpCqVWwBKHJ1/qcLEIRWfenqT
M/UQCkZrgB2Ry+4Oc1hgibIUzOM=
=8HM/
wcPUA7w9P/Y4tvvTafGcykbHOZebb4UEiUzy7MdOx0v3nPOv8JfjdcbC3Ucz
4couZg5vJI7En+EBaT8f2aU+ZTmCmuZMVy5BHp9YKLhGmSU6tT3eUrhh63Z9
IC44aS0m0vH/4f1vpsJmbpuPLxi+Q6DS4Sl4UOr0U8FOXzcb6uGMhWtOOdwI
iPZKgVpjgzwzxM1xh44hJz0iRSWKPPnFg9mbIHVPtuDMDNUYdOkRQhyQKYQE
z/ok0X9jCFKmAvKHpNjl4lFCxwcscJ5q5OYPO9I2BrJMyK2oyHmtgCojSvW1
hSTeVNoXO0cwfQzWSNBQvBQEcuQ5gGKkQtbkBGds2LUmf2PASbZb8sZkN6EQ
8zdljhU3r4mHjTdNedTi8bN00/VQwsKFeN928f9k6SZDCU0XQxq/wZKmDhnI
vhvd5GbzFgeFSiPV+WY2sajZvh2cPuz0SGhW91ue0h3F2yKEzSQrloxZvV6Q
aFHWtBdzwx/Tx4oAvLvbBjV5qKC/C5f4RTNBoZ1doa4y8jxeeBEXBR7K7+mz
sS5GkVv5tpI1Z8UO/I450XdSYFS+dESgpZNLwy3Hu4TFMAxH78jjN21byr7S
Nx0ZmYrqQcfrW9m4YFsqpn50CJfbzRven84tgM9LqONIufCFhPv6K57MPSWR
l/YAut3fT2Mt/Bc3RS0xqiH7pi+/RxzKzY2nJ1takd2r4uWFLU3oLZBZrgck
M9+ZW9wwlgLOt5zmG+zZG9yfnpCBQIdmEJ31mH+j7oGemoM7r9UuLhbizlEE
Nx/TtsEXpuKTbzsrxjp9zVhgoF0ivV9mKWuGY1yGYaeT73RbyIzxVYjJTPsZ
Z9AWXNOmaRTFmrHHstQGz6AwcAZXoQ3Od2hiZ9BtgQ92Q5YZICFH3cbjCIEU
Pvj0f/1ruhHO20Q+uUcACAWRjWD9r1ijMnY1ke5GA+LZNXstEnzZPCqrhk5Z
NIFhuu+o47fakDvciMEqbdk6L2r620GLFG6F7cOO0vm/SrOm4drrvIpTbUe4
DrgXhQuusUiXHKm4oB1/zNTEOpL4wqXLyyqcsN3EWXb3j+ZMwo+hm/ynEvPl
Gj76dvaJx5hRAtga4ZD8L6E1LS82bMmQKTp3uBJ3vcBxhKsSAYXO3ZQWeq0X
YSyvJiyy7We7gsjjN7RcYm8tOohoGvr2thf3LhN7hTBJWU1js7yq6UlAY+0A
so0dbkne00G77pRsy+nRYjVOFTm+57U/7UUTKsDtZf2Vsrv/nfAK2l507WAJ
8oioHhaDb4kxR92UR+cPkdqNzeMFEShgkRTRNG8d6cyRBa5/sYPtuSrKB0VX
S/t2UXgFWqTWPzcRv/NTDq89+yY5UvwfSFlRaKa32DHcUYq9L77Wq3bEZJiE
KYWFPla4cz1PnckU6DGUXxMAe2KrJ/ALhnTXavwLptqKSktgMS6FfBT8NJTX
Cf691DI9fikwHXZVGEKdh2CQpyZkJCoe+qOhKHEwrErMHHaajYYBHkGk6P9y
UifBYpdwZcspCcv6z78hlprAKcSAnXRKj2zIP5z36dbTN3z+vEa8HKM3lfAz
9Vbc34PSOgHX0jeD+RNwY7bt13n8MmNwsEUIUyHl/ivKTqhp2MKGnc622oXb
MdhqSPQkCscEVIT6fTh/vIyMTs0=
=OmpP
-----END PGP MESSAGE-----`;

const privateKey = await openpgp.readKey({ armoredKey: `-----BEGIN PGP PRIVATE KEY BLOCK-----
Expand Down Expand Up @@ -1078,113 +1078,113 @@ fJWWnLW7yOAAAAAAAAAAAAAAAAAAAAAAAAAACgwOExkk
// since we use a different KEM combiner
const armoredMessage = `-----BEGIN PGP MESSAGE-----
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
6LfQlrZ3DteWPwEVWDEBfKKhFyTzzgk=
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
jXoyrGhDDakI/1XygauU5DpNuhgApoA=
-----END PGP MESSAGE-----`;

const { data: decryptedData, signatures: [{ verified }] } = await openpgp.decrypt({
Expand Down

0 comments on commit 5fe43e6

Please sign in to comment.