Skip to main content

Test vectors

qoresign-v1.json is generated from the TypeScript implementation (pnpm build && pnpm vectors) and checked by the TypeScript, Rust, Go, Swift, Kotlin and Python test suites. A change to the file is a change to the wire format: add a new file with a new version instead of editing this one.

Every key is derived from the public BIP-39 test mnemonic (abandon ... about). Never send funds to these accounts.

Fields​

FieldContents
accountsclassical keys and addresses for secp256k1 (m/44'/118'/0'/0/0) and eth_secp256k1 (m/44'/60'/0'/0/0) accounts
canonicalcanonical ML-DSA-87 public keys per address (key derivation)
hd, hdRejecteddraft hierarchical derivation: public keys per path, and paths that must be refused (key derivation)
hybridTxa TxBody and AuthInfo, account number and chain id, with the expected sign-bytes, ML-DSA-87 signature, final body, secp256k1 signature and TxRaw for sign-bytes v2 and v1 (hybrid signing)
proofOfPossessionproof-of-possession message and signature (registration)
registerMessageencoded MsgRegisterPQCKeyV2
messagearbitrary message signing: data, ADR-36 and ML-DSA-87 sign-bytes, signature (message signing)
siwqsign-in fields, rendered message, ADR-36 and ML-DSA-87 sign-bytes, signature, and a time at which it verifies (Sign In With QoreChain)

Encoding​

All byte strings are lowercase hex. ML-DSA-87 signatures are deterministic (FIPS 204, rnd = 32 zero bytes); secp256k1 signatures use RFC 6979 and low-S.