From 41ef4ad540321b4cbe8a92d70e349bfb116d4c95 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sun, 20 Aug 2023 17:50:53 +0300 Subject: [PATCH] [HTTP] Stub some certificate stuff --- include/services/http.hpp | 2 ++ src/core/services/http.cpp | 28 ++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/include/services/http.hpp b/include/services/http.hpp index 8dccc0c5..1e7f30c3 100644 --- a/include/services/http.hpp +++ b/include/services/http.hpp @@ -12,7 +12,9 @@ class HTTPService { bool initialized = false; // Service commands + void createRootCertChain(u32 messagePointer); void initialize(u32 messagePointer); + void rootCertChainAddDefaultCert(u32 messagePointer); public: HTTPService(Memory& mem) : mem(mem) {} diff --git a/src/core/services/http.cpp b/src/core/services/http.cpp index f61eca3b..076afa06 100644 --- a/src/core/services/http.cpp +++ b/src/core/services/http.cpp @@ -6,6 +6,8 @@ namespace HTTPCommands { enum : u32 { Initialize = 0x00010044, + CreateRootCertChain = 0x002D0000, + RootCertChainAddDefaultCert = 0x00300080, }; } @@ -14,7 +16,9 @@ void HTTPService::reset() { initialized = false; } void HTTPService::handleSyncRequest(u32 messagePointer) { const u32 command = mem.read32(messagePointer); switch (command) { + case HTTPCommands::CreateRootCertChain: createRootCertChain(messagePointer); break; case HTTPCommands::Initialize: initialize(messagePointer); break; + case HTTPCommands::RootCertChainAddDefaultCert: rootCertChainAddDefaultCert(messagePointer); break; default: Helpers::panic("HTTP service requested. Command: %08X\n", command); } } @@ -39,4 +43,28 @@ void HTTPService::initialize(u32 messagePointer) { initialized = true; // We currently don't emulate HTTP properly. TODO: Prepare POST buffer here mem.write32(messagePointer + 4, Result::Success); +} + +void HTTPService::createRootCertChain(u32 messagePointer) { + log("HTTP::CreateRootCertChain (Unimplemented)\n"); + + // TODO: Verify response header + mem.write32(messagePointer, IPC::responseHeader(0x2D, 2, 0)); + mem.write32(messagePointer + 4, Result::Success); + + // RootCertChain context handle. No need to emulate this yet + mem.write32(messagePointer + 8, 0x66666666); +} + +void HTTPService::rootCertChainAddDefaultCert(u32 messagePointer) { + log("HTTP::RootCertChainAddDefaultCert (Unimplemented)\n"); + const u32 contextHandle = mem.read32(messagePointer + 4); + const u32 certID = mem.read32(messagePointer + 8); + + // TODO: Verify response header + mem.write32(messagePointer, IPC::responseHeader(0x30, 2, 0)); + mem.write32(messagePointer + 4, Result::Success); + + // Cert context handle. No need to emulate this yet + mem.write32(messagePointer + 8, 0x66666666); } \ No newline at end of file