summaryrefslogtreecommitdiffstats
path: root/src/core/crypto (follow)
Commit message (Collapse)AuthorAgeFilesLines
* Merge pull request #4483 from lioncash/constexpr-hexbunnei2020-08-072-98/+118
|\ | | | | partition_data_manager: Make data arrays constexpr
| * partition_data_manager: Update master key hashesLioncash2020-08-061-5/+5
| | | | | | | | Fills in some hashes that were previously unhandled.
| * partition_data_manager: Make data arrays constexprLioncash2020-08-062-98/+118
| | | | | | | | | | | | | | | | | | | | | | | | | | Previously the constructor for all of these would run at program startup, consuming time before the application can enter main(). This is also particularly dangerous, given the logging system wouldn't have been initialized properly yet, yet the program would use the logs to signify an error. To rectify this, we can replace the literals with constexpr functions that perform the conversion at compile-time, completely eliminating the runtime cost of initializing these arrays.
* | aes_util: Allow SetIV to be non-allocatingLioncash2020-08-035-23/+30
|/ | | | | | In a few places, the data to be set as the IV is already within an array. We shouldn't require this data to be heap-allocated if it doesn't need to be. This allows certain callers to reduce heap churn.
* KeyManager: Prevent writing of invalid keysMorph2020-07-101-4/+8
| | | | If the keys are zero, don't write them to the autogenerated file.
* key_manager: Correct casing of instance()Lioncash2020-07-011-1/+1
| | | | Our codebase uppercases member function names.
* key_manager: Delete move operationsLioncash2020-07-011-0/+3
| | | | Prevents the singleton from being moved from.
* key_manager: Make use of canonical deleted operator=Lioncash2020-07-011-2/+2
| | | | | | | operator= typically returns a reference, it's not void. While we're at it, we can correct the parameter formatting to adhere to the codebase.
* crypto: Make KeyManager a singleton classFearlessTobi2020-05-201-1/+9
| | | | | | Previously, we were reading the keys everytime a KeyManager object was created, causing yuzu to reread the keys file multiple hundreds of times when loading the game list. With this change, it is only loaded once. On my system, this decreased game list loading times by a factor of 20.
* Merge pull request #3697 from lioncash/declarationsbunnei2020-04-231-4/+3
|\ | | | | CMakeLists: Enable -Wmissing-declarations on Linux builds
| * General: Resolve warnings related to missing declarationsLioncash2020-04-171-4/+3
| |
* | key_manager: Resolve missing field initializer warningLioncash2020-04-171-1/+2
|/
* Merge pull request #3091 from lioncash/core-conversionbunnei2019-11-152-11/+12
|\ | | | | core: Make most implicit type conversion warnings errors on MSVC
| * externals: Update httplibLioncash2019-11-121-1/+1
| | | | | | | | | | | | | | Since the introduction of this library, numerous improvements have been made. Notably, many of the warnings we would get by simply including the library header have now been fixed. This makes it much easier to make conversion warning an error.
| * crypto: Resolve sign-conversion warningsLioncash2019-11-122-11/+12
| |
* | Merge pull request #3093 from lioncash/mbedtlsbunnei2019-11-142-3/+3
|\ \ | | | | | | core: Migrate off deprecated mbedtls functions
| * | core: Migrate off deprecated mbedtls functionsLioncash2019-11-122-3/+3
| |/ | | | | | | | | These functions are marked for deprecation and it's recommended that the *_ret variants be used instead.
* / key_manager: Make use of IOFile in WriteKeyToFile()Lioncash2019-11-121-11/+15
|/ | | | | | | | | This properly handles unicode-based paths on Windows, while opening a raw stream doesn't out-of-the-box. Prevents file creation from potentially failing on Windows PCs that make use of unicode characters in their save paths (e.g. writing to a user's AppData folder, where the user has a name with non-ASCII characters).
* [crypto] Use IsAllZeroArray helper functionvperus2019-10-021-1/+1
|
* partition_data_manager: Add accessor for decrypted PRODINFO partitionZach Hilman2019-09-212-0/+5
|
* key_manager: Convert Ticket union to std::variantZach Hilman2019-07-082-55/+86
|
* es: Populate/synthesize tickets on constructionZach Hilman2019-07-082-13/+14
|
* key_manager: Add structure for Ticket parsingZach Hilman2019-07-082-35/+185
|
* key_manager: Add accessors/helpers for ticket managementZach Hilman2019-07-082-14/+100
|
* key_manager: Add equality operator for RSAKeyPairZach Hilman2019-07-081-0/+7
|
* Merge pull request #2546 from DarkLordZach/kipsbunnei2019-06-211-118/+13
|\ | | | | loader, file_sys: Add support for parsing and loading KIP (Kernel Internal Process) files
| * partition_data_manager: Remove KIP processing and use FileSysZach Hilman2019-06-051-118/+13
| | | | | | | | Previously, this TU contained the necessary headers to parse KIP/INI but now it should just use the FileSys class.
* | common/hex_util: Combine HexVectorToString() and HexArrayToString()Lioncash2019-06-121-2/+2
|/ | | | | | These can be generified together by using a concept type to designate them. This also has the benefit of not making copies of potentially very large arrays.
* core: Port current uses of RegisteredCache to ContentProviderZach Hilman2019-03-271-1/+2
|
* Fixes Unicode Key File Directories (#2120)Jungy2019-02-211-1/+2
| | | | | | | | | | | | | | | | | | | | | * Fixes Unicode Key File Directories Adds code so that when loading a file it converts to UTF16 first, to ensure the files can be opened. Code borrowed from FileUtil::Exists. * Update src/core/crypto/key_manager.cpp Co-Authored-By: Jungorend <Jungorend@users.noreply.github.com> * Update src/core/crypto/key_manager.cpp Co-Authored-By: Jungorend <Jungorend@users.noreply.github.com> * Using FileUtil instead to be cleaner. * Update src/core/crypto/key_manager.cpp Co-Authored-By: Jungorend <Jungorend@users.noreply.github.com>
* Merge pull request #1836 from lioncash/unusedbunnei2018-12-051-1/+0
|\ | | | | crypto/key_manager: Remove unused variable in GetTicketblob()
| * crypto/key_manager: Remove unused variable in GetTicketblob()Lioncash2018-12-021-1/+0
| |
* | filesystem: De-globalize registered_cache_unionLioncash2018-12-021-1/+1
|/ | | | | | | | | We can just return a new instance of this when it's requested. This only ever holds pointers to the existing registed caches, so it's not a large object. Plus, this also gets rid of the need to keep around a separate member function just to properly clear out the union. Gets rid of one of five globals in the filesystem code.
* global: Use std::optional instead of boost::optional (#1578)Frederic L2018-10-302-26/+27
| | | | | | | | | | | | | | | | * get rid of boost::optional * Remove optional references * Use std::reference_wrapper for optional references * Fix clang format * Fix clang format part 2 * Adressed feedback * Fix clang format and MacOS build
* key_manager: Use isxdigit instead of isdigit when reading key fileZach Hilman2018-10-281-1/+1
| | | | Crypto revisions are hex numbers and this function only checks if the string is valid for stoul in base 16, so it should be isxdigit.
* key_manager: Remove unused variable in DeriveBase()Lioncash2018-10-241-1/+0
|
* crypto: Use compressed sizes in offset calculation for KIP decompressionZach Hilman2018-10-201-1/+2
| | | | Fixes a fatal crash on start when deriving keys.
* crypto: Various crypto fixes for quickstart guideZach Hilman2018-10-151-2/+2
|
* partition_data_manager: Reserve and insert data within output vector in DecryptPackage2()Lioncash2018-10-131-20/+16
| | | | | | | | | | | | | | | | | | We can just reserve the memory then perform successive insertions instead of needing to use memcpy. This also avoids the need to zero out the output vector's memory before performing the insertions. We can also std::move the output std::vector into the destination so that we don't need to make a completely new copy of the vector, getting rid of an unnecessary allocation. Additionally, we can use iterators to determine the beginning and end ranges of the std::vector instances that comprise the output vector, as the end of one range just becomes the beginning for the next successive range, and since std::vector's iterator constructor copies data within the range [begin, end), this is more straightforward and gets rid of the need to have an offset variable that keeps getting incremented to determine where to do the next std::memcpy.
* partition_data_manager: Remove unused std::map instance within DecryptPackage2()Lioncash2018-10-131-2/+0
| | | | | Aside from emplacing elements into the map, the map itself is never actually queried for contained data.
* partition_data_manager: Take package2_keys by const referenceLioncash2018-10-132-2/+3
| | | | | These are only ever read from, so we don't need to make a copy of all the keys here.
* partition_data_manager: Move IV data to where it's needed in DecryptPackage2()Lioncash2018-10-131-3/+1
| | | | | | Given it's only used in one spot and has a fairly generic name, we can just specify it directly in the function call. This also the benefit of automatically moving it.
* partition_data_manager: Remove commented out codeLioncash2018-10-131-2/+0
| | | | | Commented out code shouldn't be left in without a reason indicating why in a comment.
* key_manager/partition_data_manager: Silence truncation compiler warningsLioncash2018-10-134-10/+15
|
* partition_data_manager: Dehardcode array boundsLioncash2018-10-132-7/+12
| | | | | | Instead, we can make it part of the type and make named variables for them, so they only require one definition (and if they ever change for whatever reason, they only need to be changed in one spot).
* partition_data_manager: Take VirtualFile by const reference in constructorLioncash2018-10-132-2/+2
| | | | | | Given the VirtualFile instance isn't stored into the class as a data member, or written to, this can just be turned into a const reference, as the constructor doesn't need to make a copy of it.
* partition_data_manager: Amend constructor initializer list orderLioncash2018-10-131-2/+3
| | | | | Orders the members in the exact order they would be initialized. This also prevents compiler warnings about this sort of thing.
* partition_data_manager: Remove unused includesLioncash2018-10-132-4/+1
| | | | | Gets unused includes out of the headers and moves them into the cpp file if they're used there instead.
* key_manager: Use std::vector's insert() instead of std::copy with a back_inserterLioncash2018-10-131-2/+2
| | | | | | If the data is unconditionally being appended to the back of a std::vector, we can just directly insert it there without the need to insert all of the elements one-by-one with a std::back_inserter.
* key_manager: Brace long conditional bodyLioncash2018-10-131-1/+2
| | | | | If a conditional (or it's body) travels more than one line, it should be braced.
* key_manager: Don't assume file seeks and reads will always succeedLioncash2018-10-131-7/+17
| | | | | | | | | | | | Given the filesystem should always be assumed to be volatile, we should check and bail out if a seek operation isn't successful. This'll prevent potentially writing/returning garbage data from the function in rare cases. This also allows removing a check to see if an offset is within the bounds of a file before perfoming a seek operation. If a seek is attempted beyond the end of a file, it will fail, so this essentially combines two checks into one in one place.
* key_manager: Remove unnecessary seek in DeriveSDSeed()Lioncash2018-10-131-1/+0
| | | | | | Given the file is opened a few lines above and no operations are done, other than check if the file is in a valid state, the read/write pointer will always be at the beginning of the file.
* partition_data_manager: Rename system files for hekateZach Hilman2018-10-074-178/+228
| | | | x
* crypto: Add PartitionDataManagerZach Hilman2018-10-072-0/+690
| | | | Keeps track of system files for key derivation
* key_manager: Add support for loading keys from partition dataZach Hilman2018-10-072-0/+88
|
* key_manager: Add ETicket key derivationZach Hilman2018-10-072-2/+276
| | | | Derives titlekeys
* key_manager: Add base key derivationZach Hilman2018-10-072-4/+220
| | | | Derives master keys, game encryption keys, and package1/2 keys
* key_manager: Add BIS key getterZach Hilman2018-10-072-2/+19
|
* key_manager: Add support for more keysZach Hilman2018-10-072-3/+99
| | | | TSEC, SBK, BIS, and other Sources for proper derivation
* key_manager: Add keyblob supportZach Hilman2018-10-072-0/+14
|
* key_manager: Add support for crypto revisions past 04Zach Hilman2018-10-071-43/+63
|
* key_manager: Add support for comments in keyfilesZach Hilman2018-10-071-0/+3
|
* key_manager: Add support for console-specific keyfileZach Hilman2018-10-072-3/+13
|
* key_manager: Rename KEK to KekZach Hilman2018-10-072-8/+9
|
* Port #4182 from Citra: "Prefix all size_t with std::"fearlessTobi2018-09-1510-47/+51
|
* game_list: Use RegisteredCacheUnion for installedZach Hilman2018-09-041-1/+1
| | | | Reduces code
* aes_util: Fix error involving reads of less than 0x10Zach Hilman2018-09-041-0/+14
| | | | Issues with block size are fixed by making all reads minimum length of 0x10
* nsp: Comply with style and performance guidelinesZach Hilman2018-09-041-1/+1
|
* card_image: Parse XCI secure partition with NSPZach Hilman2018-09-041-0/+2
| | | | Eliminated duplicate code and adds support for Rev1+ carts
* key_manager: Avoid autogeneration if key existsZach Hilman2018-09-041-3/+13
|
* file_sys: Replace includes with forward declarations where applicableLioncash2018-09-042-4/+8
| | | | | Cuts down on include dependencies, resulting in less files that need to be rebuilt when certain things are changed.
* file_sys/crypto: Fix missing/unnecessary includesZach Hilman2018-08-254-4/+4
|
* key_manager: Eliminate indexed for loopZach Hilman2018-08-231-6/+13
|
* key_manager: Create keys dir if it dosen't existZach Hilman2018-08-231-0/+1
| | | | On call to WriteKeyToFile, so that the autogenerated file can be written.
* file_sys: Cut down on includes and copiesZach Hilman2018-08-232-15/+13
|
* crypto: Eliminate magic constantsZach Hilman2018-08-232-16/+19
|
* key_manager: Add support for autogenerated keysZach Hilman2018-08-232-3/+45
| | | | Stored in a separate file than manual keys.
* key_manager: Add support for KEK and SD seed derivationZach Hilman2018-08-232-5/+135
|
* key_manager: Switch to boost flat_map for keysZach Hilman2018-08-232-32/+14
| | | | Should make key gets marginally faster.
* xts_encryption_layer: Implement XTSEncryptionLayerZach Hilman2018-08-232-0/+80
|
* aes_util: Make XTSTranscode stricter about sizesZach Hilman2018-08-231-5/+2
| | | | XTS with Nintendo Tweak will fail mysteriously if the sector size is not 0x4000. Upgrade the critical log to an assert to prevent undefined behavior.
* ctr_encryption_layer: Fix bug when transcoding small dataZach Hilman2018-08-231-5/+3
| | | | Fixes a bug where data lengths of less than size 0x10 will fail or have misleading return values.
* common: Namespace hex_util.h/.cppLioncash2018-08-161-4/+4
| | | | | It's in the common code, so it should be under the Common namespace like everything else.
* crypto: Remove hex utilities from key_managerZach Hilman2018-08-122-36/+2
| | | | Move to hex_util.h in common
* aes_util: Add static assertion to Transcode() and XTSTranscode() to ensure well-defined behaviorLioncash2018-08-041-0/+4
| | | | These functions should only be given trivially-copyable types.
* aes_util: Make CalculateNintendoTweak() an internally linked functionLioncash2018-08-042-12/+10
| | | | | This function doesn't directly depend on class state, so it can be hidden entirely from the interface in the cpp file.
* aes_util: Make Transcode() a const member functionLioncash2018-08-042-8/+9
| | | | This doesn't modify member state, so it can be made const.
* core/crypto: Remove unnecessary includesLioncash2018-08-044-5/+5
|
* key_manager: Use regular std::string instead of std::string_viewLioncash2018-08-042-10/+7
| | | | | | | The benefit of std::string_view comes from the idea of avoiding copies (essentially acting as a non-owning view), however if we're just going to copy into a local variable immediately, there's not much benefit gained here.
* Use more descriptive error codes and messagesZach Hilman2018-08-012-5/+24
|
* Use static const instead of const staticZach Hilman2018-08-011-2/+2
|
* Add missing includes and use const where applicableZach Hilman2018-08-016-15/+23
|
* Allow key loading from %YUZU_DIR%/keys in addition to ~/.switchZach Hilman2018-08-012-7/+20
|
* Make XCI comply to review and style guidelinesZach Hilman2018-08-018-405/+187
|
* Extract mbedtls to cpp fileZach Hilman2018-08-012-85/+123
|
* Add missing string.h includeZach Hilman2018-08-011-0/+1
|
* Update mbedtls and fix compile errorZach Hilman2018-08-011-0/+1
|
* Remove files that are not usedZach Hilman2018-08-0110-0/+834