/******************************************************************************
 * RETURN SECROIMG MD LENGTH
 ******************************************************************************/
uint32 masp_secro_md_len (uchar *md_info)
{
    uint32 index = 0;
    AND_AC_MD_INFO_V3a_T* cur_md_info = NULL;
    uint32 md_info_len = 0; 

    SMSG(FALSE,"[%s]md_info:%s \n",MOD,md_info);
    
    if(TRUE == bSecroExist)
    {
        /* check if this secro supports v5 format(world phone) , in v3 format 
        this area should be zero.*/
        if (FALSE == secroimg.m_header.world_phone_support)
        {
            /* read v3 format and return, it depends on first character */
            if ('1' == md_info[0])
        {
                return secroimg.m_header.md_length;
            }
            else if ('2' == md_info[0])
            {
                return secroimg.m_header.md2_length;
            }
        }
        /* if it supports v5 format (world phone) */
        else if (TRUE == secroimg.m_header.world_phone_support)
        {
            if (NULL != md_info)
            {
                md_info_len = strlen(md_info);
            }
            
            /* check if this image's information exist */
            for(index=0; index<MAX_V5_SUPPORT_MD_NUM; index++)
            {   
                cur_md_info = &(secroimg.m_padding.md_v3a_info[index]);

                if(0 == strncmp(md_info,cur_md_info->md_name+strlen("SECURE_RO_"),md_info_len))
                {   
                    SMSG(TRUE,"[%s]md[%d]len:0x%x \n",MOD,index,cur_md_info->md_len);
                    return cur_md_info->md_len;
                }
            }

            if (MAX_V5_SUPPORT_MD_NUM == index)
            {
                /* no match found, return 0 */
                SMSG(TRUE,"[%s]v5 no match \n",MOD);
                return 0;
        }
    }
    }
    else
    {
        SMSG(TRUE,"[%s]Secro v3 does not exist \n",MOD);
        return 0;
    }

    return 0;
}
BOOL sec_util_brom_download_recovery_check(void)
{
#ifdef KPD_DL_KEY2    	
    if (mtk_detect_key (KPD_DL_KEY2) && FALSE==bUsbHandshakeSuccess 
        && is_BR_cmd_disabled())
    {
        SMSG("[%s] Start checking (1500 ms)\n", MOD);
        mdelay(1500);

        if(false == mtk_detect_key (KPD_DL_KEY2))
        {        
            SMSG("[%s] Key is not detected, wait for 1500ms \n", MOD);
            mdelay(1500);
            if(mtk_detect_key (KPD_DL_KEY2))            
        {        
            SMSG("[%s] Key is detected\n", MOD);
            return sec_util_force_brom_download_recovery();
        }
        else
        {
            SMSG("[%s] Key is not detected\n", MOD);
            return FALSE;
        }
    }
        else
        {
            SMSG("[%s] Key is detected\n", MOD);
            return FALSE;
        }
    }
#endif
    return FALSE;
}
Example #3
0
/* Note: this function is only for aes test */
int sec_aes_test(void)
{
	int ret = SEC_OK;
	uchar buf[CIPHER_BLOCK_SIZE] = "AES_TEST";

	SMSG("\n[%s] SW AES test\n", MOD);

	/* -------------------------- */
	/* sec aes encrypt test       */
	/* -------------------------- */
	SMSG("[%s] input      = 0x%x,0x%x,0x%x,0x%x\n", MOD, buf[0], buf[1], buf[2], buf[3]);
	if (SEC_OK != (ret = lib_aes_enc(buf, CIPHER_BLOCK_SIZE, buf, CIPHER_BLOCK_SIZE))) {
		pr_err("[%s] error (0x%x)\n", MOD, ret);
		goto _exit;
	}
	SMSG("[%s] cipher     = 0x%x,0x%x,0x%x,0x%x\n", MOD, buf[0], buf[1], buf[2], buf[3]);

	/* -------------------------- */
	/* sec aes decrypt test       */
	/* -------------------------- */
	if (SEC_OK != (ret = lib_aes_dec(buf, CIPHER_BLOCK_SIZE, buf, CIPHER_BLOCK_SIZE))) {
		pr_err("[%s] error (0x%x)\n", MOD, ret);
		goto _exit;
	}
	SMSG("[%s] plain text = 0x%x,0x%x,0x%x,0x%x\n", MOD, buf[0], buf[1], buf[2], buf[3]);

 _exit:
	return ret;
}
BOOL is_lk_img(void)
{
    part_hdr_t *part_hdr = (part_hdr_t*)COMMON_BUFFER_ADDR;
    blkdev_t *bdev = blkdev_get(CFG_BOOT_DEV);
    part_t *part;
    u64 src;

    if (NULL == (part = part_get(PART_UBOOT)))
       goto error;

    src = part->startblk * bdev->blksz;

    /* retrieve partition header. */
    if ((blkdev_read(bdev, src, sizeof(part_hdr_t), (u8*)part_hdr) == 0) &&
       (!memcmp(part_hdr->info.name, "LK", strlen("LK")))) {
        SMSG ("[%s] Found LK... \n",MOD);
        return TRUE;
    }else{
        SMSG ("[%s] LK does not exist, use uboot... \n",MOD);
        return FALSE;
    }
    
error:
    SMSG ("[%s] part_get (PART_UBOOT) Fail\n",MOD);
    return FALSE;
}
Example #5
0
static int sec_get_rid(uint32 *rid)
{
    uint32 obuf[5];
    uint32 ibuf[4];

    secpal_get_uuid(ibuf);

    sha1((uchar*)ibuf, 16, (uchar*)obuf);

    secpal_memcpy(rid, obuf, 16);

    #ifdef SEC_DEBUG
    {
        int i = 0;

        for (i = 0; i < 4; i++) 
        {
            SMSG(TRUE,"IBUF[%d] = 0x%.8x\n", i, ibuf[i]);
            SMSG(TRUE,"OBUF[%d] = 0x%.8x\n", i, obuf[i]);
        }
    }
    #endif

    return 0;
}
Example #6
0
/**************************************************************************
 *  FUNCTION To Generate Hash by Chunk
 **************************************************************************/
static int sec_signfmt_image_read(ASF_FILE fp, char* part_name, uint32 seek_offset, char* read_buf, uint32 read_len)
{
    uint32 read_sz = 0;
    uint32 ret = SEC_OK;
      
#if DUMP_MORE_FOR_DEBUG
        SMSG(true,"[%s] Read image for length %d at offset 0x%x\n",MOD,read_len,seek_offset); 
#endif

    /* read from file */
    if (ASF_FILE_NULL != fp)
    {
        ASF_SEEK_SET(fp, seek_offset*sizeof(char));
        read_sz = ASF_READ(fp, read_buf, read_len);

        return read_sz;
    }
    /* read from mtd */
    else
    {
        if(SEC_OK != (ret = sec_dev_read_image ( pl2part(part_name), 
                                                (char*)read_buf, 
                                                seek_offset,
                                                read_len,
                                                NORMAL_ROM)))
        {
            SMSG(true,"[%s] read mtd '%s' fail at image offset 0x%x with length 0x%x\n",MOD,(char*)pl2part(part_name),seek_offset,read_len);
            return 0;
        }

        return read_len;
    }
}
Example #7
0
int lib_aes_init_key(uchar* key_buf,  uint32 key_len, AES_VER ver)
{
    switch (ver)
    {
        case AES_VER_LEGACY:
            g_ver = AES_VER_LEGACY;
            SMSG("\n[%s] Legacy\n",MOD);
            if(0 != aes_legacy_init_key(key_buf,key_len))
            {
                goto _err;
            }
            break;
            
        case AES_VER_SO:
            g_ver = AES_VER_SO;
            SMSG("\n[%s] SO\n",MOD);
            if(0 != aes_so_init_key(key_buf,key_len))
            {
                goto _err;            
            }
            break;
            
        default:
            SMSG("\n[%s] Invalid Ver\n",MOD);
            goto _err;
    }
    
    return 0;

_err:

    return -1;    
}
Example #8
0
int lib_aes_init_vector(AES_VER ver)
{
    switch (ver)
    {
        case AES_VER_LEGACY:
            g_ver = AES_VER_LEGACY;
            SMSG("[%s] Legacy(V)\n",MOD);
            if(0 != aes_legacy_init_vector())
            {
                goto _err;
            }
            break;
            
        case AES_VER_SO:
            g_ver = AES_VER_SO;
            SMSG("[%s] SO(V)\n",MOD);
            if(0 != aes_so_init_vector())
            {
                goto _err;            
            }
            break;
            
        default:
            SMSG("[%s] Invalid Ver(V)\n",MOD);
            goto _err;
    }
    
    return 0;

_err:
    return -1;
}
Example #9
0
/**************************************************************************
 *  FUNCTION To Search Extension Header
 **************************************************************************/
static uint32 sec_signfmt_search_extension(uchar *ext, uint32 ext_len, SEC_IMG_EXTENSTION_SET *ext_set)
{
    SEC_EXTENSTION_END_MARK *search_pattern;
    uchar *d_ptr,*end_ptr;
    uint32 hash_only_idx = 0;

#if DUMP_MORE_FOR_DEBUG
    SMSG(sec_info.bMsg,"[%s] Dump extension data ============> START\n",MOD); 
    sec_signfmt_dump_buffer(ext,ext_len); 
    SMSG(sec_info.bMsg,"[%s] Dump extension data ============> END\n",MOD); 
#endif

    end_ptr = ext + ext_len;
    d_ptr = ext;

    while( d_ptr < end_ptr )
    {
        search_pattern = (SEC_EXTENSTION_END_MARK *)d_ptr;

        if(search_pattern->magic!=SEC_EXTENSION_HEADER_MAGIC)
        {
            SMSG(true,"[%s] Image extension header magic wrong\n",MOD); 
            return ERR_SIGN_FORMAT_EXT_HDR_MAGIC_WRONG;
        }

        switch(search_pattern->ext_type)
        {
            case SEC_EXT_HDR_CRYPTO:
                ext_set->crypto = (SEC_EXTENSTION_CRYPTO *)d_ptr;
                d_ptr += sizeof(SEC_EXTENSTION_CRYPTO);
                break;
            case SEC_EXT_HDR_FRAG_CFG:
                ext_set->frag = (SEC_FRAGMENT_CFG *)d_ptr;
                d_ptr += sizeof(SEC_FRAGMENT_CFG);
                ext_set->hash_only = (SEC_EXTENSTION_HASH_ONLY **)ASF_MALLOC(ext_set->frag->frag_count*sizeof(SEC_EXTENSTION_HASH_ONLY *));
                break;
            case SEC_EXT_HDR_HASH_ONLY:
                ext_set->hash_only[hash_only_idx] = (SEC_EXTENSTION_HASH_ONLY *)d_ptr;
                d_ptr += sizeof(SEC_EXTENSTION_HASH_ONLY) + get_hash_size(ext_set->hash_only[hash_only_idx]->sub_type);
                hash_only_idx++;
                break;
            case SEC_EXT_HDR_END_MARK:
                ext_set->end = (SEC_EXTENSTION_END_MARK *)d_ptr;
                d_ptr += sizeof(SEC_EXTENSTION_END_MARK);
                break;
            case SEC_EXT_HDR_HASH_SIG:
            default:
                SMSG(true,"[%s] Image header type not support %d\n",MOD,search_pattern->ext_type);                 
                return ERR_SIGN_FORMAT_EXT_TYPE_NOT_SUPPORT;
        }
    }

    if( ext_set->crypto == NULL || ext_set->frag == NULL || ext_set->hash_only == NULL || ext_set->end == NULL)
    {
        SMSG(true,"[%s] Some header is not searched\n",MOD);
        return ERR_SIGN_FORMAT_EXT_HDR_NOT_FOUND;
    }

    return SEC_OK;
}
Example #10
0
/**************************************************************************
 *  VERIFY SIGNATURE
 **************************************************************************/
int lib_verify (uchar* data_buf,  uint32 data_len, uchar* sig_buf, uint32 sig_len)
{

    if (RSA_KEY_LEN != sig_len)
    {   
        SMSG(true,"signature length is wrong (%d)\n",sig_len);
        goto _err;
    }

    SMSG(true,"[%s] 0x%x,0x%x,0x%x,0x%x\n",MOD,data_buf[0],data_buf[1],data_buf[2],data_buf[3]);	

    /* hash the plain text */
    sha1(data_buf, data_len, sha1sum);

    /* verify this signature */
    SMSG(true,"[%s] verify signature",MOD);
    if( rsa_verify( &rsa, HASH_LEN, sha1sum, sig_buf ) != 0 )
    {
        SMSG(true, " ... failed\n" );
        goto _err;
    }    
    SMSG(true," ... pass\n");

    return 0;

_err:

    return -1;
}
Example #11
0
void sec_cfg_save (U8* src)
{
    U32 i       = 0;

    blkdev_t    *bootdev = NULL;


    /* --------------------- */
    /* write sec cfg          */
    /* --------------------- */

    SMSG("[%s] write '0x%x'\n",MOD,sec_cfg_info.addr);

    if (NULL == (bootdev = blkdev_get(CFG_BOOT_DEV))) 
    {
        SMSG("[%s] can't find boot device(%d)\n", MOD, CFG_BOOT_DEV);
        ASSERT(0);
    }
#ifndef MTK_EMMC_SUPPORT
    nand_erase_data(sec_cfg_info.addr, g_nand_chip.chipsize, get_sec_cfg_cnt_size());
#endif
    blkdev_write(bootdev, sec_cfg_info.addr, get_sec_cfg_cnt_size(), (u8*)src, sec_cfg_info.part_id);

    /* dump first 8 bytes for debugging */
    for(i=0;i<8;i++)
        SMSG("0x%x,",src[i]);
    SMSG("\n");
 
}
Example #12
0
/******************************************************************************
 *  SECCFG VERSION CHECK
 ******************************************************************************/
int seccfg_ver_verify(void)
{
	int ret = SEC_OK;

	/* ----------------------------------- */
	/* check seccfg magic                  */
	/* ----------------------------------- */
	if (SEC_CFG_MAGIC_NUM != seccfg.v1.magic_number) {
		ret = ERR_SEC_CFG_MAGIC_INVALID;
		goto _end;
	}

	/* ----------------------------------- */
	/* check seccfg version                */
	/* ----------------------------------- */
	switch (get_seccfg_ver()) {
	case SECCFG_V1:
	case SECCFG_V1_2:
		SMSG(true, "[%s] seccfg id = %s\n", MOD, seccfg.v1.id);

		if (0 != mcmp(seccfg.v1.id, SEC_CFG_BEGIN, SEC_CFG_BEGIN_LEN)) {
			ret = ERR_SEC_CFG_INVALID_ID;
			goto _end;
		}

		SMSG(true, "[%s] seccfg end pattern = 0x%x\n", MOD, seccfg.v1.end_pattern);

		if (SEC_CFG_END_PATTERN != seccfg.v1.end_pattern) {
			ret = ERR_SEC_CFG_INVALID_END_PATTERN;
			goto _end;
		}

		break;

	case SECCFG_V3:
		SMSG(true, "[%s] seccfg id = %s\n", MOD, seccfg.v3.id);

		if (0 != mcmp(seccfg.v3.id, SEC_CFG_BEGIN, SEC_CFG_BEGIN_LEN)) {
			ret = ERR_SEC_CFG_INVALID_ID;
			goto _end;
		}

		SMSG(true, "[%s] seccfg end pattern = 0x%x\n", MOD, seccfg.v3.end_pattern);

		if (SEC_CFG_END_PATTERN != seccfg.v3.end_pattern) {
			ret = ERR_SEC_CFG_INVALID_END_PATTERN;
			goto _end;
		}

		break;
	default:

		ret = ERR_SEC_CFG_VERSION_INVALID;
		goto _end;
	}

 _end:

	return ret;
}
Example #13
0
File: test.cpp Project: nandai/slog
void StringTest::test03()
{
    SLOG(CLS_NAME, "test03");
    FixedString<10> str = "1234567890";

    try
    {
        str.copy("1234567890a");
        SASSERT("01", false);
    }
    catch (Exception e)
    {
        SMSG(slog::INFO, e.getMessage());
        SASSERT("01", true);
    }

    try
    {
        FixedString<10> str2 = "1234567890a";
        SASSERT("02", false);
    }
    catch (Exception e)
    {
        SMSG(slog::INFO, e.getMessage());
        SASSERT("02", true);
    }
}
/**************************************************************************
 * [SECRO IMG]
 **************************************************************************/
void sec_lib_read_secro (void)
{

#if SEC_ENV_ENABLE

    U32 err;
    U8 *buf = sec_util_get_secro_buf();
    const U32 buf_len = sizeof(AND_SECROIMG_T);
    const U32 ac_offset = sizeof(AND_AC_HEADER_T);
    const U32 ac_len = sizeof(AND_AC_ANDRO_T) + sizeof(AND_AC_SV5_T);
    const bAC = g_ROM_INFO.m_SEC_CTRL.m_secro_ac_en;
    secroimg = NULL;
    boot_arg_t *bootarg = (boot_arg_t*)BOOT_ARGUMENT_ADDR;


    /* ---------------------- */
    /* check status           */
    /* ---------------------- */

    if(FALSE == seclib_sec_usbdl_enabled(TRUE))
    {
        SMSG("[%s] Don't read\n",MOD);
        return ;
    }

    /* ---------------------- */
    /* read secro image       */
    /* ---------------------- */

    if(SEC_OK != (err = seclib_secroimg_read (buf, buf_len, ac_offset, ac_len, bAC)))
    {
        SMSG("[%s] read secroimg fail '0x%x'\n",MOD,err);
        ASSERT (0);
    }
    else
    {
        secroimg = (AND_SECROIMG_T*) buf;
        SMSG("[%s] secroimg '0x%x'\n",MOD, secroimg->m_andro.magic_number);
        SMSG("[%s] secroimg '0x%x'\n",MOD, secroimg->m_sv5.magic_number);

        /* ---------------------- */
        /* check forbidden mode   */
        /* ---------------------- */
        if(FALSE == factory_mode_valid())
        {
            /* ---------------------- */
            /* set magic number       */
            /* ---------------------- */
            bootarg->sec_limit.magic_num = SEC_LIMIT_MAGIC;
            bootarg->sec_limit.forbid_mode = F_FACTORY_MODE;
        }
    }

#endif

}
Example #15
0
/* TimedWait
 *  block until a count becomes available
 *
 *  "lock" [ IN ] - externally acquired lock
 *
 *  "tm" [ IN, NULL OKAY ] - optional timeout where
 *  NULL means timeout value of 0
 */
LIB_EXPORT rc_t CC KSemaphoreTimedWait ( KSemaphore *self,
    struct KLock *lock, struct timeout_t *tm )
{
    if ( self == NULL )
        return RC ( rcPS, rcSemaphore, rcWaiting, rcSelf, rcNull );

    if ( self -> avail == 0 )
    {
        SMSG ( "%s[%p]: avail == 0\n", __func__, self );
        if ( tm == NULL )
        {
            SMSG ( "%s[%p]: non-blocking mode - return timeout exhausted\n", __func__, self );
            return RC ( rcPS, rcSemaphore, rcWaiting, rcTimeout, rcExhausted );
        }

        if ( ++ self -> waiting == 1 )
        {
            SMSG ( "%s[%p]: first waiter\n", __func__, self );
            self -> requested = self -> min_requested = 1;
            self -> uniform = true;
        }
        else if ( self -> requested != 1 )
        {
            SMSG ( "%s[%p]: multiple waiters ( %u )\n", __func__, self, self -> waiting );
            self -> min_requested = 1;
            self -> uniform = false;
        }

        do
        {
            rc_t rc;

            SMSG ( "%s[%p]: wait on condition...\n", __func__, self );
            rc = KConditionTimedWait ( self -> cond, lock, tm );
            SMSG ( "%s[%p]:...done, rc = %R\n", __func__, self, rc );
            if ( rc != 0 )
            {
                SMSG ( "%s[%p]: timed out - decrementing wait count\n", __func__, self );
                -- self -> waiting;
                return ResetRCContext ( rc, rcPS, rcSemaphore, rcWaiting );
            }

            SMSG ( "%s[%p]: condition signaled - avail = %lu\n", __func__, self, self -> avail );
        }
        while ( self -> avail == 0 );

        SMSG ( "%s[%p]: finished waiting\n", __func__, self );
        -- self -> waiting;
    }

    SMSG ( "%s[%p]: decrementing count from %lu\n", __func__, self, self -> avail );
    -- self -> avail;
    return 0;
}
Example #16
0
/******************************************************************************
 * CHECK IF SECURITY CHIP IS ENABLED
******************************************************************************/
int sec_schip_enabled(void)
{
	if (TRUE == masp_hal_sbc_enabled()) {
		SMSG(true, "SC\n");
		return 1;
	} else {
		SMSG(true, "NSC\n");
		return 0;
	}

	return 0;
}
/******************************************************************************
 * VALIDATE SECRO
 ******************************************************************************/
uint32 sec_secro_check (void)
{
    uint32 ret = SEC_OK;

    /* ------------------------ */       
    /* check header             */
    /* ------------------------ */                
    if(AC_ANDRO_MAGIC != secroimg.m_andro.magic_number)
    {
        ret = ERR_SECROIMG_HACC_AP_DECRYPT_FAIL;
        goto _end;
    }

    if(AC_MD_MAGIC != secroimg.m_md.magic_number)
    {
        ret = ERR_SECROIMG_HACC_MD_DECRYPT_FAIL;                    
        goto _end;
    }

    if(AC_MD2_MAGIC != secroimg.m_md2.magic_number)
    {
        ret = ERR_SECROIMG_HACC_MD_DECRYPT_FAIL;                    
        goto _end;
    }

    /* ------------------------ */       
    /* check integrity          */
    /* ------------------------ */
    if(FALSE == bSecroIntergiy)
    {
        sha1((uchar*)&secroimg, sizeof(AND_SECROIMG_T) - sizeof(secroimg.hash) 
            - sizeof(AND_SECROIMG_PADDING_T), sha1sum);
#if 0
        SMSG(TRUE,"[%s] hash value :\n",MOD);                        
        dump_buf(sha1sum,secroimg.m_header.hash_length);
        SMSG(TRUE,"[%s] correct :\n",MOD);                        
        dump_buf(secroimg.hash,secroimg.m_header.hash_length);                             
#endif                    
        if(0 != mcmp(secroimg.hash, sha1sum, secroimg.m_header.hash_length))
        {
            SMSG(TRUE,"[%s] SECRO hash check fail\n",MOD);
            ret = ERR_SECROIMG_HASH_CHECK_FAIL;                    
            goto _end;                    
        }                

        bSecroIntergiy = TRUE;
        SMSG(TRUE,"[%s] SECRO hash check pass\n",MOD);
    }

_end:

    return ret;
}
/******************************************************************************
 *  IMAGE HASH DUMP
 ******************************************************************************/
void img_hash_dump(unsigned char *buf, unsigned int size)
{
	unsigned int i = 0;

	for (i = 0; i < size; i++) {
		if (i % 4 == 0)
			SMSG(true, "\n");
		if (buf[i] < 0x10)
			SMSG(true, "0x0%x, ", buf[i]);
		else
			SMSG(true, "0x%x, ", buf[i]);
	}
}
Example #19
0
/* Cancel
 *  signal that the count will never increase
 */
LIB_EXPORT rc_t CC KSemaphoreCancel ( KSemaphore *self )
{
    if ( self == NULL )
        return RC ( rcPS, rcSemaphore, rcSignaling, rcSelf, rcNull );

    if ( self -> waiting != 0 )
    {
        SMSG ( "%s[%p]: canceling %u waiters\n", __func__, self, self -> waiting );
        return KConditionBroadcast ( self -> cond );
    }

    SMSG ( "%s[%p]: cancel request ( no waiters )\n", __func__, self );
    return 0;
}
void dump_buf(unsigned char *buf, unsigned int len)
{
	unsigned int i = 1;

	for (i = 1; i < len + 1; i++) {
		if (0 != buf[i - 1]) {
			SMSG(true, "0x%x,", buf[i - 1]);
			if (0 == i % 8)
				SMSG(true, "\n");
		}
	}

	SMSG(true, "\n");
}
Example #21
0
/**************************************************************************
 *  FUNCTION To check if the image is encrypted
 **************************************************************************/
int sec_cipherfmt_check_cipher(ASF_FILE fp, unsigned int start_off, unsigned int *img_len)
{
    CIPHER_HEADER cipher_header;
    uint32 read_sz = 0;
    unsigned int ret = SEC_OK;

    ASF_GET_DS

    memset(&cipher_header, 0x00, CIPHER_IMG_HEADER_SIZE);

    if( !ASF_FILE_ERROR(fp) )
    {
        ASF_SEEK_SET(fp, start_off);
        /* get header */
        if (CIPHER_IMG_HEADER_SIZE != (read_sz = ASF_READ(fp, (char*)&cipher_header, CIPHER_IMG_HEADER_SIZE)))
        {
            SMSG(true,"[%s] read size '%d' != '%d'\n",MOD,read_sz,CIPHER_IMG_HEADER_SIZE);
            ret = ERR_IMAGE_CIPHER_READ_FAIL;
            goto _read_hdr_fail;
        }
    }
    else
    {
        SMSG(true,"[%s] file pointer is NULL\n",MOD);
        ret = ERR_IMAGE_CIPHER_IMG_NOT_FOUND;
        goto _img_hdr_not_found;
    }

#if DUMP_MORE_FOR_DEBUG
    SMSG(true,"[%s] sec_cipherfmt_check_cipher - dump header\n",MOD);
    sec_cipherfmt_dump_buffer((char*)&cipher_header, CIPHER_IMG_HEADER_SIZE);
#endif

    if( CIPHER_IMG_MAGIC != cipher_header.magic_number )
    {
        SMSG(true,"[%s] magic number is wrong\n",MOD);
        ret = ERR_IMAGE_CIPHER_HEADER_NOT_FOUND;
        goto _img_hdr_not_found;
    }

    *img_len = cipher_header.image_length;

_img_hdr_not_found:
_read_hdr_fail:

    ASF_PUT_DS


    return ret;
}
Example #22
0
/******************************************************************************
 *  WRITE IMAGE FOR S-BOOT USAGE (FROM NAND or eMMC DEVICE)
 ******************************************************************************/
static U32 sec_util_write_image (U8* img_name, U8 *buf, U32 offset, U32 size)
{
    BOOL ret            = SEC_OK;
    U32 i               = 0;
    U32 cnt             = 0;

    U32 now_offset      = 0;
    U32 total_pages     = 0;
    U32 start_offset    = offset;
    blkdev_t *bootdev   = NULL;
    part_t *part        = NULL;
    U64 dest;


    if (NULL == (bootdev = blkdev_get(CFG_BOOT_DEV))) 
    {
        SMSG("[%s] can't find boot device(%d)\n", MOD, CFG_BOOT_DEV);
        ASSERT(0);
    }

    /* ======================== */
    /* get part info            */
    /* ======================== */
    /* part_get should be device abstraction function */    
    if(NULL == (part = part_get (sec2plname(img_name))))
    {
        SMSG("[%s] part_get fail\n", MOD);
        ASSERT(0);        
    }

    /* ======================== */
    /* write part data           */
    /* ======================== */
    /* part_load should be device abstraction function */ 
    if(TRUE == bDumpPartInfo)
    {
        SMSG("[%s] part load '0x%x'\n", MOD, part->startblk * bootdev->blksz);
        bDumpPartInfo = FALSE;
    }
    dest = part->startblk * bootdev->blksz + offset;
    
    if (-1 == blkdev_write(bootdev, dest, size, buf))
    {
        SMSG("[%s] part_store fail\n", MOD);
        ASSERT(0);        
    }
    
    return ret;
}
Example #23
0
static void sec_signfmt_dump_buffer(uchar* buf, uint32 len)
{
    uint32 i = 0;

    for (i =1; i <len+1; i++)
    {                
        SMSG(true,"0x%x,",buf[i-1]);
        
        if(0 == (i%8))
            SMSG(true,"\n");
    }

    if(0 != (len%8))
        SMSG(true,"\n");    
}
/**************************************************************************
 *  UTILITY
 **************************************************************************/
void dump_buf(U8* buf, U32 len)
{
    U32 i = 0;

    for (i =1; i <len+1; i++)
    {                
        SMSG("0x%x,",buf[i-1]);
        
        if(0 == (i%8))
            SMSG("\n");
    }

    if(0 != (len%8))
        SMSG("\n");    
}
Example #25
0
File: test.cpp Project: nandai/slog
void JsonTest::test02()
{
    SLOG(CLS_NAME, "test01");

    String str;
    Json* json1 = Json::getNewObject();

    Json* json2 = Json::getNewObject();
    json2->add("addr", "Tokyo");
    json2->add("tel", "03");
    json1->add(json2);

    Json* json3 = Json::getNewObject();
    json3->add("addr", "Osaka");
    json3->add("tel", "06");
    json1->add(json3);

    json1->serialize(&str);
    SMSG(slog::DEBUG, "%s", str.getBuffer());
    SASSERT("01", str.equals(
        "["
            "{\"addr\":\"Tokyo\",\"tel\":\"03\"},"
            "{\"addr\":\"Osaka\",\"tel\":\"06\"}"
        "]"));

    delete json1;
}
static BOOL sec_util_force_brom_download_recovery(void)
{    
    #define SEC_PL_ERASE_SIZE 2048
    u8 *sec_buf = sec_util_get_img_buf();

    memset(sec_buf,0,SEC_PL_ERASE_SIZE);

    if(SEC_OK != sec_util_write_image (SBOOT_PART_PL, sec_buf, 0, SEC_PL_ERASE_SIZE)) 
    {
        SMSG("[%s] Write image fail for seek offset 0x%x\n",MOD,0); 
        return FALSE;    
    }

    SMSG("[%s] Force brom download recovery success\n", MOD);
    return TRUE;
}
Example #27
0
/*!
 * \brief   データベースバージョン取得
 *
 * \return  データベースバージョン
 */
int32_t SequenceLogServiceDB::getVersion() const
{
    SLOG(CLS_NAME, "getVersion");

    int32_t version = 0;
    Statement* stmt = nullptr;

    try
    {
        const char* sql = "select version from version_info";
        stmt = newStatement();
        stmt->prepare(sql);

        stmt->setIntResult(0, &version);

        stmt->bind();
        stmt->execute();
        stmt->fetch();
    }
    catch (Exception e)
    {
        // 初回起動時などテーブルが存在しない場合もあるので、
        // 例外が発生しても何もすることはない
        SMSG(slog::DEBUG, "%s", e.getMessage());
    }

    delete stmt;
    return version;
}
Example #28
0
/**************************************************************************
 *  FUNCTION To Get Signature Length
 **************************************************************************/
unsigned int sec_signfmt_get_signature_length_v3(SECURE_IMG_INFO_V3 *img_if, ASF_FILE fp, SEC_IMG_HEADER *file_img_hdr, char *ext_buf)
{
    uint32 crypto_hdr_offset = 0;
    uint32 read_sz = 0;
    SEC_EXTENSTION_CRYPTO ext_crypto;
    SEC_EXTENSTION_CRYPTO *ext_crypto_ptr = NULL;
    uint32 ext_crypto_size = sizeof(SEC_EXTENSTION_CRYPTO);

    /* get from seccfg's extension header */
    if (ASF_FILE_NULL == fp)
    {        
        ext_crypto_ptr = (SEC_EXTENSTION_CRYPTO *)(ext_buf + img_if->ext_offset + img_if->header.v3.signature_length);

        return get_signature_size((SEC_CRYPTO_SIGNATURE_TYPE)ext_crypto_ptr->sig_type);
    }
    /* get from file's extension header */
    else
    {
        memset(&ext_crypto, 0x00, ext_crypto_size);

        /* seek to crypto header offset */
        crypto_hdr_offset = file_img_hdr->signature_offset + file_img_hdr->signature_length;
        ASF_SEEK_SET(fp, crypto_hdr_offset);
        
        /* read crypto header */
        if (ext_crypto_size != (read_sz = ASF_READ(fp, (char*)&ext_crypto, ext_crypto_size)))
        {
            SMSG(true,"[%s] read sz '%d' != '%d'\n",MOD,read_sz,ext_crypto_size);
            return -1;
        }

        return get_signature_size((SEC_CRYPTO_SIGNATURE_TYPE)ext_crypto.sig_type);
    }
}
Example #29
0
int lib_aes_dec(uchar* input_buf,  uint32 input_len, uchar* output_buf, uint32 output_len)
{
    switch (g_ver)
    {
        case AES_VER_LEGACY:
            if(0 != aes_legacy_dec(input_buf,input_len,output_buf,output_len))
            {
                goto _err;
            }
            break;
            
        case AES_VER_SO:
            if(0 != aes_so_dec(input_buf,input_len,output_buf,output_len))
            {
                goto _err;
            }
            break;
            
        default:
            SMSG("[%s] Invalid Ver\n",MOD);
            goto _err;
    }    
    
    return 0;

_err:

    return -1;    

}
/**************************************************************************
 *  SECURE BOOT
 **************************************************************************/
int sec_boot_key_init (void)
{
    int ret = SEC_OK;

    if(TRUE == sec_info.bKeyInitDis)
    {
        SMSG(true,"[%s] key init disabled\n",MOD); 
        goto _end;
    }

    /* ------------------------------ */
    /* init aes                       */
    /* ------------------------------ */    
    if(SEC_OK != (ret = sec_aes_init()))
    {
        goto _end;        
    }

    /* ------------------------------ */
    /* init rsa                       */ 
    /* ------------------------------ */    
    if(SEC_OK != (ret = sec_init_key( rom_info.m_SEC_KEY.sml_auth_rsa_n,
                                      sizeof(rom_info.m_SEC_KEY.sml_auth_rsa_n),
                                      rom_info.m_SEC_KEY.sml_auth_rsa_e,
                                      sizeof(rom_info.m_SEC_KEY.sml_auth_rsa_e))))
    {
        goto _end;        
    }

_end:
    return ret;
}