⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 app_base64.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 2 页
字号:
/*****************************************************************************
*  Copyright Statement:
*  --------------------
*  This software is protected by Copyright and the information contained
*  herein is confidential. The software may not be copied and the information
*  contained herein may not be used or disclosed except with the written
*  permission of MediaTek Inc. (C) 2005
*
*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
*
*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/

/*****************************************************************************
 *
 * Filename:
 * ---------
 * app_base64.c
 *
 * Project:
 * --------
 *   MAUI
 *
 * Description:
 * ------------
 *   This file contains Base64 decode / encode functions.
 *
 * Author:
 * -------
 * -------
 *
 *============================================================================
 *             HISTORY
 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *------------------------------------------------------------------------------
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 *------------------------------------------------------------------------------
 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *============================================================================
 ****************************************************************************/

#include "kal_release.h"
#include "app_base64.h"

const kal_char *const app_base64_encode = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";


/*****************************************************************************
 * FUNCTION
 *  applib_base64_decode
 * DESCRIPTION
 *  This function is used to decode Base64 string.
 * PARAMETERS
 *  src         [IN]            Pointer to the buffer containing encoded data
 *  srcl        [IN]            Length of the encoded data
 *  dest        [IN/OUT]        Pointer to the buffer containing decoded data
 *  destl       [IN]            Length of destination buffer Will append null character.
 * RETURNS
 *  negative: error
 *  ow: Length of the decoded data (not include null character)
 *****************************************************************************/
kal_int32 applib_base64_decode(kal_char *src, kal_uint32 srcl, kal_char *dest, kal_uint32 destl)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    kal_char c, *temp_dst;
    kal_char dst[APP_BASE64_BUF_LEN];
    kal_uint16 e;
    kal_uint32 rt = 0, num = 0, cntr;
    const static kal_uint8 decode[256] = 
    {
        BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK,
        BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK,
        BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, 076, BJNK, BJNK, BJNK, 077,
        064, 065, 066, 067, 070, 071, 072, 073, 074, 075, BJNK, BJNK, BJNK, BPAD, BJNK, BJNK,
        BJNK, 000, 001, 002, 003, 004, 005, 006, 007, 010, 011, 012, 013, 014, 015, 016,
        017, 020, 021, 022, 023, 024, 025, 026, 027, 030, 031, BJNK, BJNK, BJNK, BJNK, BJNK,
        BJNK, 032, 033, 034, 035, 036, 037, 040, 041, 042, 043, 044, 045, 046, 047, 050,
        051, 052, 053, 054, 055, 056, 057, 060, 061, 062, 063, BJNK, BJNK, BJNK, BJNK, BJNK,
        BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK,
        BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK,
        BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK,
        BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK,
        BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK,
        BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK,
        BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK,
        BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK, BJNK
    };

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    /* Number of encoded bytes considered for decoding */
    num = ((APP_BASE64_BUF_LEN / 3) * 4) - 4;

    cntr = 0;

    kal_mem_set(dst, 0, APP_BASE64_BUF_LEN);

    temp_dst = (kal_char*) dst;

    /* simple-minded decode */
    for (e = 0; srcl--;)
    {
        switch (c = decode[*src++])
        {
            default:    /* valid BASE64 data character */

                switch (e++)
                {                               /* install based on quantum position */
                    case 0:
                        *temp_dst = c << 2;
                        break;
                    case 1:
                        *temp_dst++ |= c >> 4;  /* byte 1: low 2 bits */
                        *temp_dst = c << 4;     /* byte 2: high 4 bits */
                        break;
                    case 2:
                        *temp_dst++ |= c >> 2;  /* byte 2: low 4 bits */
                        *temp_dst = c << 6;     /* byte 3: high 2 bits */
                        break;
                    case 3:
                        *temp_dst++ |= c;       /* byte 3: low 6 bits */
                        e = 0;
                        cntr += 4;
                        EXT_ASSERT(cntr <= num, cntr, num, 0);

                        if (cntr == num)
                        {
                            if (destl < (kal_uint32) (temp_dst - dst))
                            {
                                return -1;
                            }

                            destl -= (kal_uint32) (temp_dst - dst);

                            /* Copying the decoded data on to the source buffer */
                            kal_mem_cpy(dest + rt, dst, ((kal_char*) temp_dst - dst));

                            cntr = 0;
                            rt = rt + ((kal_char*) temp_dst - dst);
                            kal_mem_set(dst, 0, APP_BASE64_BUF_LEN);
                            temp_dst = dst; /* Reset the temp_dst pointer back to dst */
                        }
                        break;
                }   /* switch (e) */
                break;

            case BJNK:  /* junk character */
                break;
            case BPAD:  /* padding */
                switch (e++)
                {
                    case 3:
                        for (; srcl; --srcl)
                        {
                            switch (decode[*src++])
                            {
                                case BJNK:
                                case BPAD:  /* ignore junk and extraneous padding */
                                    break;

                                default:    /* valid BASE64 data character */
                                    if (srcl == 0)
                                    {
                                        if (temp_dst != dst)
                                        {
                                            if (destl < (kal_uint32) (temp_dst - dst))
                                            {
                                                return -1;
                                            }

                                            destl -= (kal_uint32) (temp_dst - dst);

                                            kal_mem_cpy(dest + rt, dst, ((kal_char*) temp_dst - dst));

                                            kal_mem_set(dst, 0, APP_BASE64_BUF_LEN);

                                            rt = rt + ((kal_char*) temp_dst - dst);
                                            temp_dst = dst;
                                        }
                                    }   /* if(srcl==0) */

                                    srcl = 1;   /* don't issue any more messages */
                                    break;
                            }                   /* switch(decode... */
                        }                       /* for */
                        if (srcl == 0)
                        {
                            /* When temp_dst and dst are same then
                               there are no decoded data present
                               in dst */
                            if (temp_dst != dst)
                            {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -