I2P Vectors CI Consolidated Report

Run metadata

Per-category comparison

| Category | libi2pd (P/F/S/T) | go-i2p (P/F/S/T) | emissary (P/F/S/T) |
|---|---:|---:|---:|
| common-types | 3/0/1/4 | 4/0/0/4 | 3/0/1/4 |
| crypto | 7/0/3/10 | 9/0/1/10 | 4/0/6/10 |
| garlic | 1/0/1/2 | 1/0/1/2 | 0/0/2/2 |
| structures | 3/0/0/3 | 2/0/1/3 | 1/0/2/3 |
| tunnel | 2/0/0/2 | 2/0/0/2 | 0/0/2/2 |

Totals by implementation

| Implementation | PASS | FAIL | SKIP | TOTAL |
|---|---:|---:|---:|---:|
| Pinned libi2pd | 16 | 0 | 5 | 21 |
| go-i2p (tip) | 23 | 0 | 3 | 26 |
| emissary (tip) | 8 | 0 | 13 | 21 |

Failures

No FAIL outcomes reported.

Skips

ImplementationVectorModeMessageSkip reason
libi2pdcommon-types/null-certificate-roundtripdeterministiclibi2pd has no standalone public certificate parser/serializer; only embedded identity certificate bytes are exposedlibi2pd has no standalone public certificate parser/serializer; only embedded identity certificate bytes are exposed
libi2pdcrypto/aes-cbc-safe-encryptinverse-operationlibi2pd exposes raw AES-CBC helpers but not the Java safeEncrypt/safeDecrypt framing APIlibi2pd exposes raw AES-CBC helpers but not the Java safeEncrypt/safeDecrypt framing API
libi2pdcrypto/elgamal-encrypt-decryptinverse-operationlibi2pd public headers expose the 222-byte ElGamal primitive but not the short-message engine used by this vectorlibi2pd public headers expose the 222-byte ElGamal primitive but not the short-message engine used by this vector
libi2pdcrypto/hkdf-derive-32-bytesdeterministiclibi2pd HKDF currently assumes a 32-byte salt in its public API; this vector uses a different salt lengthlibi2pd HKDF currently assumes a 32-byte salt in its public API; this vector uses a different salt length
libi2pdgarlic/garlic-clove-roundtripdeterministiclibi2pd public headers do not expose a standalone GarlicClove typelibi2pd public headers do not expose a standalone GarlicClove type
go-i2pcrypto/elgamal-encrypt-decryptinverse-operationgo-i2p ElGamal API currently expects a different ciphertext framing than this vector formatgo-i2p ElGamal API currently expects a different ciphertext framing than this vector format
go-i2pgarlic/garlic-message-elgamal-aesinverse-operationgo-i2p ElGamal decrypt API currently cannot consume the garlic vector ciphertext framinggo-i2p ElGamal decrypt API currently cannot consume the garlic vector ciphertext framing
go-i2pstructures/routerinfo-roundtripdeterministicgo-i2p RouterInfo verifier currently does not validate legacy DSA_SHA1 signatures used by this vectorgo-i2p RouterInfo verifier currently does not validate legacy DSA_SHA1 signatures used by this vector
emissarycommon-types/null-certificate-roundtripdeterministicemissary main does not expose a standalone certificate parser/serializer for the null certificate vector contractemissary main does not expose a standalone certificate parser/serializer for the null certificate vector contract
emissarycrypto/aes-cbc-safe-encryptinverse-operationemissary main does not expose Java-compatible safeEncrypt/safeDecrypt AES framing APIemissary main does not expose Java-compatible safeEncrypt/safeDecrypt AES framing API
emissarycrypto/ecdsa-p384-keygen-sign-verifyverify-onlyemissary main does not expose an ECDSA-P384 verifier API at the harness boundaryemissary main does not expose an ECDSA-P384 verifier API at the harness boundary
emissarycrypto/ecdsa-p521-keygen-sign-verifyverify-onlyemissary main does not expose an ECDSA-P521 verifier API at the harness boundaryemissary main does not expose an ECDSA-P521 verifier API at the harness boundary
emissarycrypto/elgamal-encrypt-decryptinverse-operationemissary main does not expose the legacy I2P ElGamal-2048 decrypt API used by this vectoremissary main does not expose the legacy I2P ElGamal-2048 decrypt API used by this vector
emissarycrypto/hkdf-derive-32-bytesdeterministicemissary main does not currently expose a public HKDF helper matching this vector interfaceemissary main does not currently expose a public HKDF helper matching this vector interface
emissarycrypto/reddsa-ed25519-keygen-sign-verifyverify-onlyemissary main does not expose a RedDSA verifier API matching this vector formatemissary main does not expose a RedDSA verifier API matching this vector format
emissarygarlic/garlic-clove-roundtripdeterministicemissary main does not expose a standalone GarlicClove serializer/parser API in public modulesemissary main does not expose a standalone GarlicClove serializer/parser API in public modules
emissarygarlic/garlic-message-elgamal-aesinverse-operationemissary main does not expose legacy ElGamal+AES garlic decrypt APIs in public modulesemissary main does not expose legacy ElGamal+AES garlic decrypt APIs in public modules
emissarystructures/leaseset-roundtripdeterministicLeaseSet serialization in emissary requires private signing material unavailable in reference vectorsLeaseSet serialization in emissary requires private signing material unavailable in reference vectors
emissarystructures/routerinfo-roundtripdeterministicRouterInfo reserialization in emissary requires private signing material unavailable in reference vectorsRouterInfo reserialization in emissary requires private signing material unavailable in reference vectors
emissarytunnel/tunnel-data-message-roundtripdeterministicemissary main does not expose a stable public TunnelDataMessage parse/serialize API for this harness contractemissary main does not expose a stable public TunnelDataMessage parse/serialize API for this harness contract
emissarytunnel/tunnel-hop-layer-processingdeterministicemissary main does not expose the per-hop tunnel layer transform API at this harness boundaryemissary main does not expose the per-hop tunnel layer transform API at this harness boundary