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: 27173 $ 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 本 API は LZ 圧縮(旧互換)、LZ 拡張圧縮の両方に対応しています。 69 70 LZ77 圧縮データを展開し、8bit 単位で書き込みます。 71 圧縮データアドレスは 4Byte 境界に合わせる必要があります。 72 73 @param[in] srcp 圧縮データアドレス 74 @param[in] srcSize 圧縮データサイズ 75 @param[out] destp 展開データアドレス 76 @return 変換に成功した場合は 0 を、失敗した場合には負のエラーコードを返します。 77 */ 78 s32 SecureUncompressLZ( const void *srcp, u32 srcSize, void *destp ); 79 80 81 /*! 82 @brief ハフマン圧縮データをエラーチェックしながら展開します。 83 84 ハフマン圧縮データを展開し、8bit 単位で書き込みます。 85 圧縮データアドレスは 4Byte 境界に合わせる必要があります。 86 展開データアドレスは 4Byte 境界に合わせ、さらに 4Byte の倍数分だけ 87 準備する必要があります。 88 89 @param[in] srcp 圧縮データアドレス 90 @param[in] srcSize 圧縮データサイズ 91 @param[out] destp 展開データアドレス 92 @return 変換に成功した場合は 0 を、失敗した場合には負のエラーコードを返します。 93 */ 94 s32 SecureUncompressHuffman( const void *srcp, u32 srcSize, void *destp ); 95 96 97 /*! 98 @brief LZ-ハフマン複合圧縮データを展開します。 99 @param[in] srcp 圧縮データアドレス 100 @param[in] srcSize 圧縮データサイズ 101 @param[out] destp 展開データアドレス 102 @param[in] work 作業領域(nn::cx::UNCOMPRESS_LH_WORK_SIZE (= 2176) バイト必要です) 103 @return 変換に成功した場合は 0 を、失敗した場合には負のエラーコードを返します。 104 */ 105 s32 SecureUncompressLH( const u8* srcp, u32 srcSize, u8* destp, void* work ); 106 107 108 /*! 109 @brief LZ-RangeCoder 複合圧縮データを展開します。 110 @param[in] srcp 圧縮データアドレス 111 @param[in] srcSize 圧縮データサイズ 112 @param[out] destp 展開データアドレス 113 @param[in] work 作業領域(nn::cx::UNCOMPRESS_LRC_WORK_SIZE (= 36864) バイト必要です) 114 @return 変換に成功した場合は 0 を、失敗した場合には負のエラーコードを返します。 115 */ 116 s32 SecureUncompressLRC( const u8* srcp, u32 srcSize, u8* destp, void* work ); 117 118 119 /*! 120 @brief 差分フィルタ変換データを復元します。 121 122 差分フィルタ変換データを復元し、8bit 単位で書き込みます。 123 圧縮データアドレスは 4Byte 境界に合わせる必要があります。 124 125 @param[in] srcp 圧縮データアドレス 126 @param[in] srcSize 圧縮データサイズ 127 @param[out] destp 展開データアドレス 128 @return 変換に成功した場合は 0 を、失敗した場合には負のエラーコードを返します。 129 */ 130 s32 SecureUnfilterDiff( register const void *srcp, u32 srcSize, register void *destp ); 131 132 namespace internal { 133 134 bool VerifyHuffmanTable( const void* pTable, u8 bit ); 135 bool LHVerifyTable( const void* pTable, u8 bit ); 136 137 } // namespace internal 138 139 } // namespace cx 140 } // namespace nn 141 142 /* NN_CX_SECURE_UNCOMPRESSION_H_ */ 143 #endif 144