1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: cx_SecureUncompression.h 4 5 Copyright (C)2009-2010 Nintendo Co., Ltd./HAL Laboratory, Inc. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain 8 proprietary information of Nintendo of America Inc. and/or Nintendo 9 Company Ltd., and are protected by Federal copyright law. They may 10 not be disclosed to third parties or copied or duplicated in any form, 11 in whole or in part, without the prior written consent of Nintendo. 12 13 $Revision: 25056 $ 14 *---------------------------------------------------------------------------*/ 15 16 #ifndef NN_CX_SECURE_UNCOMPRESSION_H_ 17 #define NN_CX_SECURE_UNCOMPRESSION_H_ 18 19 #include <nn/types.h> 20 #include <nn/cx/cx_Uncompression.h> 21 22 namespace nn { 23 namespace cx { 24 25 enum 26 { 27 CX_ERR_SUCCESS = 0, 28 CX_ERR_UNSUPPORTED = -1, 29 CX_ERR_SRC_SHORTAGE = -2, 30 CX_ERR_SRC_REMAINDER = -3, 31 CX_ERR_DEST_OVERRUN = -4, 32 CX_ERR_ILLEGAL_TABLE = -5 33 }; 34 35 /*! 36 @brief データヘッダから圧縮タイプを判別して、適当な展開処理を 37 エラーチェックしながら実行します。 38 39 すべての圧縮種類の展開処理がリンクされますので、 40 特定の圧縮フォーマット以外使用していない場合には 41 圧縮種別毎の関数を実行した方がよいかもしれません。 42 43 @param[in] srcp 圧縮データアドレス 44 @param[in] srcSize 圧縮データサイズ 45 @param[out] destp 展開データアドレス 46 @return 変換に成功した場合は 0 を、失敗した場合には負のエラーコードを返します。 47 */ 48 s32 SecureUncompressAny( const void* srcp, u32 srcSize, void* destp ); 49 50 51 /*! 52 @brief ランレングス圧縮データをエラーチェックしながら展開します。 53 54 ランレングス圧縮データを展開し、8bit 単位で書き込みます。 55 圧縮データアドレスは 4Byte 境界に合わせる必要があります。 56 57 @param[in] srcp 圧縮データアドレス 58 @param[in] srcSize 圧縮データサイズ 59 @param[out] destp 展開データアドレス 60 @return 変換に成功した場合は 0 を、失敗した場合には負のエラーコードを返します。 61 */ 62 s32 SecureUncompressRL( const void *srcp, u32 srcSize, void *destp ); 63 64 65 /*! 66 @brief LZ77 圧縮データをエラーチェックしながら展開します。 67 68 LZ77 圧縮データを展開し、8bit 単位で書き込みます。 69 圧縮データアドレスは 4Byte 境界に合わせる必要があります。 70 71 @param[in] srcp 圧縮データアドレス 72 @param[in] srcSize 圧縮データサイズ 73 @param[out] destp 展開データアドレス 74 @return 変換に成功した場合は 0 を、失敗した場合には負のエラーコードを返します。 75 */ 76 s32 SecureUncompressLZ( const void *srcp, u32 srcSize, void *destp ); 77 78 79 /*! 80 @brief ハフマン圧縮データをエラーチェックしながら展開します。 81 82 ハフマン圧縮データを展開し、8bit 単位で書き込みます。 83 圧縮データアドレスは 4Byte 境界に合わせる必要があります。 84 展開データアドレスは 4Byte 境界に合わせ、さらに 4Byte の倍数分だけ 85 準備する必要があります。 86 87 @param[in] srcp 圧縮データアドレス 88 @param[in] srcSize 圧縮データサイズ 89 @param[out] destp 展開データアドレス 90 @return 変換に成功した場合は 0 を、失敗した場合には負のエラーコードを返します。 91 */ 92 s32 SecureUncompressHuffman( const void *srcp, u32 srcSize, void *destp ); 93 94 95 /*! 96 @brief LZ-ハフマン複合圧縮データを展開します。 97 @param[in] srcp 圧縮データアドレス 98 @param[in] srcSize 圧縮データサイズ 99 @param[out] destp 展開データアドレス 100 @param[in] work 作業領域(nn::cx::UNCOMPRESS_LH_WORK_SIZE (= 2176) バイト必要です) 101 @return 変換に成功した場合は 0 を、失敗した場合には負のエラーコードを返します。 102 */ 103 s32 SecureUncompressLH( const u8* srcp, u32 srcSize, u8* dstp, void* work ); 104 105 106 /*! 107 @brief LZ-RangeCoder 複合圧縮データを展開します。 108 @param[in] srcp 圧縮データアドレス 109 @param[in] srcSize 圧縮データサイズ 110 @param[out] destp 展開データアドレス 111 @param[in] work 作業領域(nn::cx::UNCOMPRESS_LRC_WORK_SIZE (= 36864) バイト必要です) 112 @return 変換に成功した場合は 0 を、失敗した場合には負のエラーコードを返します。 113 */ 114 s32 SecureUncompressLRC( const u8* srcp, u32 srcSize, u8* dstp, void* work ); 115 116 117 /*! 118 @brief 差分フィルタ変換データを復元します。 119 120 差分フィルタ変換データを復元し、8bit 単位で書き込みます。 121 圧縮データアドレスは 4Byte 境界に合わせる必要があります。 122 123 @param[in] srcp 圧縮データアドレス 124 @param[in] srcSize 圧縮データサイズ 125 @param[out] destp 展開データアドレス 126 @return 変換に成功した場合は 0 を、失敗した場合には負のエラーコードを返します。 127 */ 128 s32 SecureUnfilterDiff( register const void *srcp, u32 srcSize, register void *destp ); 129 130 namespace internal { 131 132 bool VerifyHuffmanTable( const void* pTable, u8 bit ); 133 bool LHVerifyTable( const void* pTable, u8 bit ); 134 135 } // namespace internal 136 137 } // namespace cx 138 } // namespace nn 139 140 /* NN_CX_SECURE_UNCOMPRESSION_H_ */ 141 #endif 142