Autentizace a podepisování Ed25519
Revolut X REST API vyžaduje pro všechny soukromé koncové body (zadávání objednávek, zůstatky na účtu, historie obchodů) kryptografické podepisování každého požadavku pomocí asymetrického algoritmu Ed25519 (RFC 8032 / Edwards-curve Digital Signature Algorithm).
Formát kanonické zprávy
Zpráva k podpisu je složena z 5 částí v přesném pořadí:
$$\text{message} = \text{timestamp} + \text{METHOD} + \text{path} + \text{query_string} + \text{body}$$
timestamp— Aktuální čas v milisekundách od epochy (Unix timestamp v ms). Musí být v toleranci burzy vůči času serveru.METHOD— Velkými písmeny normalizovaná HTTP metoda (GET,POST,DELETE).path— Relativní cesta endpointu, normalizovaná tak, aby začínala předponou/api(např./api/1.0/orders).query_string— Abecedně seřazené parametry dotazu oddělené znakem&, kde klíč i hodnota jsou zakódovány podle standardu URL encode. Pokud parametry nejsou přítomny, řetězec je prázdný.body— Minifikované tělo požadavku ve formátu JSON bez přebytečných mezer za oddělovači (,,:). Pokud tělo není přítomno, řetězec je prázdný.
Požadované HTTP hlavičky
Každý autentizovaný požadavek musí obsahovat následující hlavičky:
X-Revx-API-Key— Váš veřejný API klíč z nastavení účtu Revolut X.X-Revx-Timestamp— Časová značka v milisekundách shodná se značkou použitou ve zprávě podpisu.X-Revx-Signature— 64bajtový Ed25519 podpis zprávy zakódovaný do Base64.Content-Type: application/json— Pouze v případě, že požadavek nese tělo (např. POST).
Implementace v SDK
Obě SDK v repozitáři řeší celou proceduru plně automaticky:
V Pythonu je podepisování implementováno v modulu revolut_x._auth s využitím standardní knihovny cryptography:
V PHP je podepisování implementováno ve třídě RevolutX\Auth\Signer s využitím nativního rozšíření ext-sodium (sodium_crypto_sign_detached):
Generování klíčového páru Ed25519
Pro vygenerování nového privátního klíče ve standardním formátu PKCS#8 PEM lze použít OpenSSL:
openssl genpkey -algorithm ed25519 -out keys/private.pem
openssl pkey -in keys/private.pem -pubout -out keys/public.pem
Veřejný klíč keys/public.pem nahrajte do administrace svého účtu na Revolut X, kde vám bude vygenerován příslušný API Key.