Skip to content

Interoperability Tests

Ce document présente le plan des tests d’interopérabilité. Ces tests valident que les artefacts générés par QPKI sont lisibles par des implémentations externes (OpenSSL, BouncyCastle).

MétriqueValeur
Validateurs2 (OpenSSL 3.6+, BouncyCastle 1.83+)
Tests OpenSSL7 scripts
Tests BouncyCastle13 classes Java
Artefacts testésCert, CRL, CSR, CMS, OCSP, TSA
Emplacementtest/crossval/
Terminal window
# Tous les tests interop
make crosstest
# OpenSSL seulement
make crosstest-openssl
# BouncyCastle seulement (nécessite Java 17+ et Maven)
make crosstest-bc
# Générer les fixtures avant les tests
make crosstest-fixtures

ArtefactOpenSSLBouncyCastleAlgorithmes testés
CertificateTC-C-OSL-CERTTC-C-BC-CERTEC, RSA, ML-DSA, SLH-DSA, Catalyst, Composite
CRLTC-C-OSL-CRLTC-C-BC-CRLEC, ML-DSA, Catalyst, Composite
CSRTC-C-OSL-CSRTC-C-BC-CSREC, ML-DSA
CMS SignedDataTC-C-OSL-CMSTC-C-BC-CMSEC, ML-DSA, SLH-DSA
CMS EnvelopedDataTC-C-OSL-CMSENCTC-C-BC-CMSENCRSA, ECDH, ML-KEM
OCSP ResponseTC-C-OSL-OCSPTC-C-BC-OCSPEC, ML-DSA
TSA TimestampTC-C-OSL-TSATC-C-BC-TSAEC, ML-DSA
Extensions-TC-C-BC-EXTCustom X.509 extensions

Prérequis : OpenSSL 3.6+ avec support PQC natif

ScriptTC-IDDescriptionCommande OpenSSL
verify_certs.shTC-C-OSL-CERT-001/002Vérifie certificats EC et PQCopenssl verify
verify_crl.shTC-C-OSL-CRL-001Vérifie CRLopenssl crl -verify
verify_csr.shTC-C-OSL-CSR-001Vérifie signature CSRopenssl req -verify
verify_cms.shTC-C-OSL-CMS-001Vérifie CMS SignedDataopenssl cms -verify
verify_cms_encrypt.shTC-C-OSL-CMSENC-001Déchiffre CMS EnvelopedDataopenssl cms -decrypt
verify_ocsp.shTC-C-OSL-OCSP-001Vérifie réponse OCSPopenssl ocsp -verify
verify_tsa.shTC-C-OSL-TSA-001Vérifie timestamp tokenopenssl ts -verify
TC-IDNomAlgorithmesRésultat attendu
TC-C-OSL-CERT-001Certificat ECDSAP-256, P-384OK
TC-C-OSL-CERT-002Certificat ML-DSAML-DSA-44/65/87OK
TC-C-OSL-CRL-001CRL standardEC, ML-DSAverify OK
TC-C-OSL-CSR-001CSR signatureEC, ML-DSAverify OK
TC-C-OSL-CMS-001CMS SignedDataEC, ML-DSA, SLH-DSAVerification successful
TC-C-OSL-CMSENC-001CMS EnvelopedDataRSA, ECDH, ML-KEMContenu déchiffré
TC-C-OSL-OCSP-001OCSP ResponseEC, ML-DSAResponse verify OK
TC-C-OSL-TSA-001TSA TokenEC, ML-DSAVerification: OK
FeatureStatutNotes
Catalyst hybridPartielSeule signature ECDSA vérifiée, PQC ignorée
CompositeNon supportéPas de support composite dans OpenSSL
SLH-DSA CRLOKSupporté depuis OpenSSL 3.6

2. Tests BouncyCastle (test/crossval/bouncycastle/)

Section titled “2. Tests BouncyCastle (test/crossval/bouncycastle/)”

Prérequis : Java 17+, Maven 3.8+

ClasseTC-IDDescription
ClassicalVerifyTest.javaTC-C-BC-CERT-001Certificats ECDSA/RSA
PQCVerifyTest.javaTC-C-BC-CERT-002Certificats ML-DSA, SLH-DSA
CatalystVerifyTest.javaTC-C-BC-CERT-003Certificats Catalyst hybrid
CompositeVerifyTest.javaTC-C-BC-CERT-004Certificats Composite hybrid
CRLVerifyTest.javaTC-C-BC-CRL-001CRL standard
CatalystCRLVerifyTest.javaTC-C-BC-CRL-002CRL Catalyst
CompositeCRLVerifyTest.javaTC-C-BC-CRL-003CRL Composite
CSRVerifyTest.javaTC-C-BC-CSR-001CSR signature
CMSVerifyTest.javaTC-C-BC-CMS-001CMS SignedData
CMSEnvelopedTest.javaTC-C-BC-CMSENC-001CMS EnvelopedData/AuthEnvelopedData
OCSPVerifyTest.javaTC-C-BC-OCSP-001OCSP Response
TSAVerifyTest.javaTC-C-BC-TSA-001TSA Timestamp
ExtensionsVerifyTest.javaTC-C-BC-EXT-001Extensions X.509 custom
TC-IDNomAlgorithmesRésultat attendu
TC-C-BC-CERT-001Certificat classiqueECDSA, RSAChaîne validée
TC-C-BC-CERT-002Certificat PQCML-DSA, SLH-DSASignature validée
TC-C-BC-CERT-003Certificat CatalystEC + ML-DSALes deux signatures validées
TC-C-BC-CERT-004Certificat CompositeECDSA-ML-DSASignature composite validée
TC-C-BC-CRL-001CRL standardEC, ML-DSASignature CRL validée
TC-C-BC-CRL-002CRL CatalystEC + ML-DSALes deux signatures validées
TC-C-BC-CRL-003CRL CompositeCompositeSignature composite validée
TC-C-BC-CSR-001CSREC, ML-DSASignature CSR validée
TC-C-BC-CMS-001CMS SignedDataEC, ML-DSA, SLH-DSASignedData validé
TC-C-BC-CMSENC-001CMS EnvelopedDataRSA, ECDH, ML-KEMContenu déchiffré
TC-C-BC-OCSP-001OCSP ResponseEC, ML-DSAResponse validée
TC-C-BC-TSA-001TSA TokenEC, ML-DSAToken validé
TC-C-BC-EXT-001Extensions custom-Extensions parsées correctement
FeatureStatutNotes
Catalyst hybridOKSupport complet
CompositePartielBC 1.83 utilise draft-07, QPKI draft-13 (OID différent)
ML-KEM CMSOKSupport complet

Les fixtures sont des artefacts générés par QPKI utilisés comme entrée des tests.

Terminal window
# Génère toutes les fixtures
./test/crossval/generate_qpki_fixtures.sh
# Ou via Makefile
make crosstest-fixtures
test/crossval/fixtures/
├── ec/ # Artefacts EC (P-256, P-384)
│ ├── root-ca.crt
│ ├── leaf.crt
│ ├── leaf.crl
│ ├── leaf.csr
│ ├── cms-signed.p7s
│ ├── cms-encrypted.p7m
│ ├── ocsp-response.der
│ └── timestamp.tsr
├── ml/ # Artefacts ML-DSA (44, 65, 87)
│ └── ...
├── slh/ # Artefacts SLH-DSA
│ └── ...
├── hybrid/ # Artefacts hybrides
│ ├── catalyst/
│ └── composite/
└── extensions/ # Tests d'extensions custom
└── ...

JobTestsDuréePrérequis
crosstest-opensslTC-C-OSL-*~5 minOpenSSL 3.6+
crosstest-bcTC-C-BC-*~3 minJava 17+, Maven
crosstest:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup OpenSSL 3.6
run: |
# Install OpenSSL with PQC support
- name: Setup Java 17
uses: actions/setup-java@v4
with:
java-version: '17'
- name: Generate fixtures
run: make crosstest-fixtures
- name: Run OpenSSL tests
run: make crosstest-openssl
- name: Run BouncyCastle tests
run: make crosstest-bc

Terminal window
# Vérifier la version
openssl version
# Doit être >= 3.6.0
# Vérifier les algorithmes PQC
openssl list -signature-algorithms | grep -i ml

BouncyCastle : OID mismatch pour Composite

Section titled “BouncyCastle : OID mismatch pour Composite”

BC 1.83 utilise les OIDs draft-07 (2.16.840.1.114027.80.8.1.x), QPKI utilise draft-13 (1.3.6.1.5.5.7.6.x).

Workaround : Attendre BC 1.84+ ou tester uniquement Catalyst.

Terminal window
# Régénérer les fixtures
make crosstest-fixtures
# Vérifier le contenu
ls -la test/crossval/fixtures/