kv-store: SQLite (bundled) and in-memory Store holding only ciphertext envelopes, with base copies for three-way merges and a 10-version history. kv-ffi: VaultCore::open(path); persisted account record; local unlock key (enable/unlock_with_local_key/disable); async sync API (configure_server, set_device_signer, register_account, login, sync_now, logout, devices); DeviceSigner foreign trait; IntegrityAlarm/PinMismatch/... error variants. kv-sync: reqwest + rustls (TLS 1.3 only, ring) with SPKI pinning; OPAQUE client on kv-proto's OpaqueSuite; RFC 9421 signing per kv_proto::httpsig; pull/push with If-Match, field-level three-way merge, edit-beats-delete; signed manifest (canonical CBOR, Merkle root, prev chain, Ed25519) with rollback/fork/Merkle checks as hard integrity alarms. Tested against a wiremock fake server, plus an #[ignore] test against kestrove-server. kv-crypto: gen-vectors example and tests reproducing kestrove-spec/vectors. Co-Authored-By: Claude Opus 5.5 <[email protected]>
132 lines
5.0 KiB
JSON
132 lines
5.0 KiB
JSON
{
|
|
"description": "RFC 6238 TOTP (HMAC-SHA1/256/512). `uri` is what Totp::parse accepts.",
|
|
"vectors": [
|
|
{
|
|
"code": "94287082",
|
|
"source": "RFC 6238 Appendix B",
|
|
"time": 59,
|
|
"uri": "otpauth://totp/RFC6238?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ&algorithm=SHA1&digits=8&period=30"
|
|
},
|
|
{
|
|
"code": "46119246",
|
|
"source": "RFC 6238 Appendix B",
|
|
"time": 59,
|
|
"uri": "otpauth://totp/RFC6238?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZA&algorithm=SHA256&digits=8&period=30"
|
|
},
|
|
{
|
|
"code": "90693936",
|
|
"source": "RFC 6238 Appendix B",
|
|
"time": 59,
|
|
"uri": "otpauth://totp/RFC6238?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNA&algorithm=SHA512&digits=8&period=30"
|
|
},
|
|
{
|
|
"code": "07081804",
|
|
"source": "RFC 6238 Appendix B",
|
|
"time": 1111111109,
|
|
"uri": "otpauth://totp/RFC6238?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ&algorithm=SHA1&digits=8&period=30"
|
|
},
|
|
{
|
|
"code": "68084774",
|
|
"source": "RFC 6238 Appendix B",
|
|
"time": 1111111109,
|
|
"uri": "otpauth://totp/RFC6238?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZA&algorithm=SHA256&digits=8&period=30"
|
|
},
|
|
{
|
|
"code": "25091201",
|
|
"source": "RFC 6238 Appendix B",
|
|
"time": 1111111109,
|
|
"uri": "otpauth://totp/RFC6238?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNA&algorithm=SHA512&digits=8&period=30"
|
|
},
|
|
{
|
|
"code": "14050471",
|
|
"source": "RFC 6238 Appendix B",
|
|
"time": 1111111111,
|
|
"uri": "otpauth://totp/RFC6238?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ&algorithm=SHA1&digits=8&period=30"
|
|
},
|
|
{
|
|
"code": "67062674",
|
|
"source": "RFC 6238 Appendix B",
|
|
"time": 1111111111,
|
|
"uri": "otpauth://totp/RFC6238?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZA&algorithm=SHA256&digits=8&period=30"
|
|
},
|
|
{
|
|
"code": "99943326",
|
|
"source": "RFC 6238 Appendix B",
|
|
"time": 1111111111,
|
|
"uri": "otpauth://totp/RFC6238?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNA&algorithm=SHA512&digits=8&period=30"
|
|
},
|
|
{
|
|
"code": "89005924",
|
|
"source": "RFC 6238 Appendix B",
|
|
"time": 1234567890,
|
|
"uri": "otpauth://totp/RFC6238?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ&algorithm=SHA1&digits=8&period=30"
|
|
},
|
|
{
|
|
"code": "91819424",
|
|
"source": "RFC 6238 Appendix B",
|
|
"time": 1234567890,
|
|
"uri": "otpauth://totp/RFC6238?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZA&algorithm=SHA256&digits=8&period=30"
|
|
},
|
|
{
|
|
"code": "93441116",
|
|
"source": "RFC 6238 Appendix B",
|
|
"time": 1234567890,
|
|
"uri": "otpauth://totp/RFC6238?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNA&algorithm=SHA512&digits=8&period=30"
|
|
},
|
|
{
|
|
"code": "69279037",
|
|
"source": "RFC 6238 Appendix B",
|
|
"time": 2000000000,
|
|
"uri": "otpauth://totp/RFC6238?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ&algorithm=SHA1&digits=8&period=30"
|
|
},
|
|
{
|
|
"code": "90698825",
|
|
"source": "RFC 6238 Appendix B",
|
|
"time": 2000000000,
|
|
"uri": "otpauth://totp/RFC6238?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZA&algorithm=SHA256&digits=8&period=30"
|
|
},
|
|
{
|
|
"code": "38618901",
|
|
"source": "RFC 6238 Appendix B",
|
|
"time": 2000000000,
|
|
"uri": "otpauth://totp/RFC6238?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNA&algorithm=SHA512&digits=8&period=30"
|
|
},
|
|
{
|
|
"code": "65353130",
|
|
"source": "RFC 6238 Appendix B",
|
|
"time": 20000000000,
|
|
"uri": "otpauth://totp/RFC6238?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ&algorithm=SHA1&digits=8&period=30"
|
|
},
|
|
{
|
|
"code": "77737706",
|
|
"source": "RFC 6238 Appendix B",
|
|
"time": 20000000000,
|
|
"uri": "otpauth://totp/RFC6238?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZA&algorithm=SHA256&digits=8&period=30"
|
|
},
|
|
{
|
|
"code": "47863826",
|
|
"source": "RFC 6238 Appendix B",
|
|
"time": 20000000000,
|
|
"uri": "otpauth://totp/RFC6238?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNA&algorithm=SHA512&digits=8&period=30"
|
|
},
|
|
{
|
|
"code": "287082",
|
|
"source": "bare base32 secret, defaults (SHA1, 6 digits, 30 s)",
|
|
"time": 59,
|
|
"uri": "GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ"
|
|
},
|
|
{
|
|
"code": "081804",
|
|
"source": "bare base32 secret, defaults (SHA1, 6 digits, 30 s)",
|
|
"time": 1111111109,
|
|
"uri": "GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ"
|
|
},
|
|
{
|
|
"code": "857319",
|
|
"source": "60 s period",
|
|
"time": 1111111109,
|
|
"uri": "otpauth://totp/x?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZA&digits=6&period=60&algorithm=SHA256"
|
|
}
|
|
]
|
|
}
|