From 6be9f3f2a5eeed01e22f57602d24a720bf614661 Mon Sep 17 00:00:00 2001 From: Sorvigolova Date: Thu, 23 Apr 2015 23:08:46 +0300 Subject: [PATCH] Fixed validation of the decryption key. --- src/sce.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/sce.cpp b/src/sce.cpp index 8bfd6fa..34c0be7 100644 --- a/src/sce.cpp +++ b/src/sce.cpp @@ -891,9 +891,6 @@ BOOL sce_decrypt_header(sce_buffer_ctxt_t *ctxt, u8 *metadata_info, u8 *keyset) memcpy((u8 *)ctxt->metai, metadata_info, sizeof(metadata_info)); } - if(ctxt->metai->key_pad[0] != 0x00 || ctxt->metai->iv_pad[0] != 0x00) - return FALSE; - //Decrypt metadata header, metadata section headers and keys. nc_off = 0; memcpy (ctr_iv, ctxt->metai->iv ,0x10); @@ -902,6 +899,10 @@ BOOL sce_decrypt_header(sce_buffer_ctxt_t *ctxt, u8 *metadata_info, u8 *keyset) _ES64(ctxt->sceh->header_len) - (sizeof(sce_header_t) + _ES32(ctxt->sceh->metadata_offset) + sizeof(metadata_info_t)), &nc_off, ctr_iv, sblk, (u8 *)ctxt->metah, (u8 *)ctxt->metah); + //Check if the metadata was decrypted properly. + if (_ES64(ctxt->metah->sig_input_length) > _ES64(ctxt->sceh->header_len)) + return FALSE; + //Metadata decrypted. ctxt->mdec = TRUE;