]> Chaos Git - corbenik/corbenik.git/commitdiff
Failing at ExeFs now
authorchaoskagami <chaos.kagami@gmail.com>
Tue, 26 Jul 2016 15:17:20 +0000 (11:17 -0400)
committerchaoskagami <chaos.kagami@gmail.com>
Tue, 26 Jul 2016 15:17:20 +0000 (11:17 -0400)
external/libctr9
source/firm/decryptor.c
source/firm/firm.c

index 1629815c5a08ff95c3b0d592bbf9583c63cd124b..c1132b2afc849f1736c64dafe543d0e3a3fe9def 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 1629815c5a08ff95c3b0d592bbf9583c63cd124b
+Subproject commit c1132b2afc849f1736c64dafe543d0e3a3fe9def
index b93555d4d3fed7bed8040e2ed690223f0cbfd503..367e8fcb0b531ad20f857f832b7d2f8a5f3c29fe 100644 (file)
@@ -48,7 +48,7 @@ cbc_decrypt(void *inbuf, void *outbuf, size_t size, uint32_t mode, uint8_t *iv)
 
         aes_decrypt(in, out, current_blocks, mode);
 
-        memcpy(iv, out + (blocks - 1) * AES_BLOCK_SIZE, AES_BLOCK_SIZE);
+        memcpy(iv, out + (current_blocks - 1) * AES_BLOCK_SIZE, AES_BLOCK_SIZE);
 
         blocks -= current_blocks;
         in  += AES_BLOCK_SIZE * current_blocks;
index a534738fa3026f7b6f366625cbb6d2d35ec7dd3e..34c0e12fd6caa08aac78b3a14daff34c22b3b479 100644 (file)
@@ -222,24 +222,26 @@ decrypt_firm_title(firm_h *dest, ncch_h *ncch, uint32_t *size, void *key)
     uint8_t exefs_key[16] = { 0 };
     uint8_t exefs_iv[16] = { 0 };
 
-    fprintf(stderr, "  Decrypting FIRM container\n");
+    fprintf(stderr, "  Decrypting FIRM container (size is %u blocks)\n", *size / AES_BLOCK_SIZE);
 
     setup_aeskey(0x16, key);
     use_aeskey(0x16);
-       set_ctr(firm_iv);
+
     cbc_decrypt(ncch, ncch, *size / AES_BLOCK_SIZE, AES_CBC_DECRYPT_MODE|AES_CNT_INPUT_ENDIAN|AES_CNT_OUTPUT_ENDIAN|AES_CNT_INPUT_ORDER|AES_CNT_OUTPUT_ORDER, firm_iv);
 
     if (ncch->magic != NCCH_MAGIC)
         return 1;
 
     memcpy(exefs_key, ncch, 16);
+
     ncch_getctr(ncch, exefs_iv, NCCHTYPE_EXEFS);
 
     // Get the exefs offset and size from the NCCH
     exefs_h *exefs = (exefs_h *)((uint8_t *)ncch + ncch->exeFSOffset * MEDIA_UNITS);
     uint32_t exefs_size = ncch->exeFSSize * MEDIA_UNITS;
 
-    fprintf(stderr, "  Decrypting ExeFs for FIRM\n");
+    fprintf(stderr, "  Decrypting ExeFs for FIRM (size is %u blocks)\n", exefs_size / 16);
+
     setup_aeskeyY(0x2C, exefs_key);
     use_aeskey(0x2C);
     ctr_decrypt(exefs, exefs, exefs_size / AES_BLOCK_SIZE, AES_CTR_MODE|AES_CNT_INPUT_ENDIAN|AES_CNT_OUTPUT_ENDIAN|AES_CNT_INPUT_ORDER|AES_CNT_OUTPUT_ORDER, exefs_iv);