/*---------------------------------------------------------------------------* Project: Horizon File: cx_SecureUncompression.h Copyright (C)2009-2010 Nintendo Co., Ltd./HAL Laboratory, Inc. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. $Revision: 27173 $ *---------------------------------------------------------------------------*/ #ifndef NN_CX_SECURE_UNCOMPRESSION_H_ #define NN_CX_SECURE_UNCOMPRESSION_H_ #include #include namespace nn { namespace cx { enum { CX_ERR_SUCCESS = 0, CX_ERR_UNSUPPORTED = -1, CX_ERR_SRC_SHORTAGE = -2, CX_ERR_SRC_REMAINDER = -3, CX_ERR_DEST_OVERRUN = -4, CX_ERR_ILLEGAL_TABLE = -5 }; /*! @brief データヘッダから圧縮タイプを判別して、適当な展開処理を エラーチェックしながら実行します。 すべての圧縮種類の展開処理がリンクされますので、 特定の圧縮フォーマット以外使用していない場合には 圧縮種別毎の関数を実行した方がよいかもしれません。 @param[in] srcp 圧縮データアドレス @param[in] srcSize 圧縮データサイズ @param[out] destp 展開データアドレス @return 変換に成功した場合は 0 を、失敗した場合には負のエラーコードを返します。 */ s32 SecureUncompressAny( const void* srcp, u32 srcSize, void* destp ); /*! @brief ランレングス圧縮データをエラーチェックしながら展開します。 ランレングス圧縮データを展開し、8bit 単位で書き込みます。 圧縮データアドレスは 4Byte 境界に合わせる必要があります。 @param[in] srcp 圧縮データアドレス @param[in] srcSize 圧縮データサイズ @param[out] destp 展開データアドレス @return 変換に成功した場合は 0 を、失敗した場合には負のエラーコードを返します。 */ s32 SecureUncompressRL( const void *srcp, u32 srcSize, void *destp ); /*! @brief LZ77 圧縮データをエラーチェックしながら展開します。 本 API は LZ 圧縮(旧互換)、LZ 拡張圧縮の両方に対応しています。 LZ77 圧縮データを展開し、8bit 単位で書き込みます。 圧縮データアドレスは 4Byte 境界に合わせる必要があります。 @param[in] srcp 圧縮データアドレス @param[in] srcSize 圧縮データサイズ @param[out] destp 展開データアドレス @return 変換に成功した場合は 0 を、失敗した場合には負のエラーコードを返します。 */ s32 SecureUncompressLZ( const void *srcp, u32 srcSize, void *destp ); /*! @brief ハフマン圧縮データをエラーチェックしながら展開します。 ハフマン圧縮データを展開し、8bit 単位で書き込みます。 圧縮データアドレスは 4Byte 境界に合わせる必要があります。 展開データアドレスは 4Byte 境界に合わせ、さらに 4Byte の倍数分だけ 準備する必要があります。 @param[in] srcp 圧縮データアドレス @param[in] srcSize 圧縮データサイズ @param[out] destp 展開データアドレス @return 変換に成功した場合は 0 を、失敗した場合には負のエラーコードを返します。 */ s32 SecureUncompressHuffman( const void *srcp, u32 srcSize, void *destp ); /*! @brief LZ-ハフマン複合圧縮データを展開します。 @param[in] srcp 圧縮データアドレス @param[in] srcSize 圧縮データサイズ @param[out] destp 展開データアドレス @param[in] work 作業領域(nn::cx::UNCOMPRESS_LH_WORK_SIZE (= 2176) バイト必要です) @return 変換に成功した場合は 0 を、失敗した場合には負のエラーコードを返します。 */ s32 SecureUncompressLH( const u8* srcp, u32 srcSize, u8* destp, void* work ); /*! @brief LZ-RangeCoder 複合圧縮データを展開します。 @param[in] srcp 圧縮データアドレス @param[in] srcSize 圧縮データサイズ @param[out] destp 展開データアドレス @param[in] work 作業領域(nn::cx::UNCOMPRESS_LRC_WORK_SIZE (= 36864) バイト必要です) @return 変換に成功した場合は 0 を、失敗した場合には負のエラーコードを返します。 */ s32 SecureUncompressLRC( const u8* srcp, u32 srcSize, u8* destp, void* work ); /*! @brief 差分フィルタ変換データを復元します。 差分フィルタ変換データを復元し、8bit 単位で書き込みます。 圧縮データアドレスは 4Byte 境界に合わせる必要があります。 @param[in] srcp 圧縮データアドレス @param[in] srcSize 圧縮データサイズ @param[out] destp 展開データアドレス @return 変換に成功した場合は 0 を、失敗した場合には負のエラーコードを返します。 */ s32 SecureUnfilterDiff( register const void *srcp, u32 srcSize, register void *destp ); namespace internal { bool VerifyHuffmanTable( const void* pTable, u8 bit ); bool LHVerifyTable( const void* pTable, u8 bit ); } // namespace internal } // namespace cx } // namespace nn /* NN_CX_SECURE_UNCOMPRESSION_H_ */ #endif