diff options
| author | jakob <jakob@memeware.net> | 2017-03-01 19:03:20 -0500 |
|---|---|---|
| committer | jakob <jakob@memeware.net> | 2017-03-01 19:03:20 -0500 |
| commit | 0e67a05edcc3ba01221a6bfd14750b5b8090887f (patch) | |
| tree | 94729dcef273244164d6b84d72d17481818baa7f /src/crypto.h | |
| parent | d65a3ae8790ae28a90f0ebcf0bc4dc078c67dc35 (diff) | |
First working commit of the rewrite.
Diffstat (limited to 'src/crypto.h')
| -rw-r--r-- | src/crypto.h | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/crypto.h b/src/crypto.h new file mode 100644 index 0000000..0984cc7 --- /dev/null +++ b/src/crypto.h @@ -0,0 +1,50 @@ +/* crypto.h -- Code for deriving encryption keys. + + Copyright (C) 2017 Jakob Tsar-Fox, All Rights Reserved. + + This file is part of Nekopack. + + 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 <stdbool.h> +#include <stdint.h> + +/* Game identifiers for use with get_key. */ +enum { + NONE, + NEKOPARA_VOLUME_0, + NEKOPARA_VOLUME_0_STEAM, + NEKOPARA_VOLUME_1, + NEKOPARA_VOLUME_1_STEAM, +}; + +/* Structure containing game-specific encryption information. */ +struct game_key { + bool uses_initial; /* Whether or not to use an initial key. */ + uint32_t master; /* Master key specific to the game. */ + uint8_t fallback_initial; /* Fallback if initial key is 0. */ + uint8_t fallback_primary; /* Fallback if primary key is 0. */ +}; + +/* Returns the game_key structure for a given game identifier, as + defined in crypto.h */ +struct game_key get_key(int game); + +/* Generates an initial key for the given key structure and file key. */ +uint8_t derive_initial(struct game_key k, uint64_t file_key); + +/* Generates a primary key for the given key structure and file key. */ +uint8_t derive_primary(struct game_key k, uint64_t file_key); |