diff --git a/lib/libnx/include/nx/AesKeygen.h b/lib/libnx/include/nx/AesKeygen.h new file mode 100644 index 0000000..64333a0 --- /dev/null +++ b/lib/libnx/include/nx/AesKeygen.h @@ -0,0 +1,19 @@ +#pragma once +#include +#include +#include + +namespace nx +{ + class AesKeygen + { + public: + + // 1 stage key generation dst = src_key.decrypt(src) + static void generateKey(byte_t* dst, const byte_t* src, const byte_t* src_key); + // 2 stage key generation dst = (src1_key.decrypt(src1)).decrypt(src2) + static void generateKey(byte_t* dst, const byte_t* src1, const byte_t* src2, const byte_t* src1_key); + // 3 stage key generation dst = ((src1_key.decrypt(src1)).decrypt(src2)).decrypt(src3) + static void generateKey(byte_t* dst, const byte_t* src1, const byte_t* src2, const byte_t* src3, const byte_t* src1_key); + }; +} \ No newline at end of file diff --git a/lib/libnx/source/AesKeygen.cpp b/lib/libnx/source/AesKeygen.cpp new file mode 100644 index 0000000..804c3c6 --- /dev/null +++ b/lib/libnx/source/AesKeygen.cpp @@ -0,0 +1,19 @@ +#include + +void nx::AesKeygen::generateKey(byte_t* dst, const byte_t* src, const byte_t* src_key) +{ + crypto::aes::AesEcbDecrypt(src, sizeof(crypto::aes::sAes128Key), src_key, dst); +} + +void nx::AesKeygen::generateKey(byte_t* dst, const byte_t* src1, const byte_t* src2, const byte_t* src1_key) +{ + crypto::aes::sAes128Key src2_key; + generateKey(src2_key.key, src1, src1_key); + generateKey(dst, src2, src2_key.key); +} +void nx::AesKeygen::generateKey(byte_t* dst, const byte_t* src1, const byte_t* src2, const byte_t* src3, const byte_t* src1_key) +{ + crypto::aes::sAes128Key src3_key; + generateKey(src3_key.key, src1, src2, src1_key); + generateKey(dst, src3, src3_key.key); +} \ No newline at end of file