summaryrefslogtreecommitdiff
path: root/src/crypto.h
diff options
context:
space:
mode:
authorjakob <jakob@memeware.net>2017-01-12 17:09:17 -0500
committerjakob <jakob@memeware.net>2017-01-12 17:09:17 -0500
commit43e539561a4ea95274468b78735555d6e89fdfd9 (patch)
tree4a005aed01dc34c40b4fe5657d2b155ea4231e85 /src/crypto.h
parent350b126eef468c7c8d66c72100d8a3c76e9afec1 (diff)
Finished implementation of file decryption. There are still many memory corruption bugs and a segfault is not uncommon.
Diffstat (limited to 'src/crypto.h')
-rw-r--r--src/crypto.h39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/crypto.h b/src/crypto.h
new file mode 100644
index 0000000..e82b934
--- /dev/null
+++ b/src/crypto.h
@@ -0,0 +1,39 @@
+/* This file is part of Nekopack.
+
+ Copyright (C) 2017 Jakob Tsar-Fox, All Rights Reserved.
+
+ Nekopack is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation, either version 3 of the License, or (at
+ your option) any later version.
+
+ Nekopack is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Nekopack. If not, see <http://www.gnu.org/licenses/>. */
+
+#pragma once
+
+#include <stdint.h>
+
+#include <zlib.h>
+
+#include "cli.h"
+
+/* Struct for a game's encryption keys. */
+typedef struct {
+ int uses_initial_key; /* Set if first byte uses a different key. */
+ uint32_t master_key; /* Master key used to derive a key. */
+ uint8_t initial_fallback_key; /* Fallback for the initial key. */
+ uint8_t primary_fallback_key; /* Fallback for the primary key. */
+} key;
+
+/* Returns the encryption keys for a given game value. */
+key get_encryption_key(game current_game);
+
+/* Decrypts the contents of a buffer according to a file key. */
+void decrypt_buffer(Bytef *encrypted_buffer, uint64_t buffer_length,
+ key encryption_key, uint32_t file_key);