コード例 #1
0
ファイル: Openssl.c プロジェクト: EagleSmith/edp_c
int SymmDecrypt(EdpPacket* pkg){
    int ret = 0;
    uint32 remain_len = 0;
    uint32 remain_pos = 0;

    pkg->_read_pos = 1;
    ReadRemainlen(pkg, &remain_len);
    assert(remain_len == (pkg->_write_pos - pkg->_read_pos));
    if (remain_len == 0){	/* no data for decrypting */
	pkg->_read_pos = 1;
	return 0;
    }
    remain_pos = pkg->_read_pos;

    switch (g_encrypt_alg_type){
    case kTypeAes:
	ret = aes_decrypt(pkg, remain_pos);
	break;

    default:
	ret = -1;
	break;
    }

    return ret;
}
コード例 #2
0
ファイル: EdpKit.c プロジェクト: bladely/HelloX_OS
int32 UnpackSavedataAck(EdpPacket* pkg, char** json_ack)
{
    uint32 remainlen;
    uint8 flag;
    uint16 json_len;

    if (ReadRemainlen(pkg, &remainlen))
    {
        return ERR_UNPACK_SAVEDATA_ACK;
    }


    if (ReadByte(pkg, &flag))
    {
        return ERR_UNPACK_SAVEDATA_ACK;
    }


    if (ReadUint16(pkg, &json_len))
    {
        return ERR_UNPACK_SAVEDATA_ACK;
    }

    if (ReadBytes(pkg, (uint8**)(json_ack), json_len))
    {
        return ERR_UNPACK_SAVEDATA_ACK;
    }

    return 0;
}
コード例 #3
0
/* ping_resp (S->C) */
int32_t UnpackPingResp(EdpPacket* pkg)
{
    uint32 remainlen;
    if (ReadRemainlen(pkg, &remainlen))
        return ERR_UNPACK_PING_REMAIN;
    my_assert(pkg->_read_pos == pkg->_write_pos);
    return 0;
}
コード例 #4
0
ファイル: Openssl.c プロジェクト: EagleSmith/edp_c
int32 UnpackEncryptResp(EdpPacket* pkg){
    uint32 remainlen = 0;
    uint16 key_len = 0;

    unsigned rsa_size = 0;
    unsigned slice_size = 0;
    
    unsigned char key[BUFFER_SIZE] = {0};
    unsigned decrypt_len = 0;
    int len = 0;
    unsigned char* from = 0;
    unsigned char* to = 0;
    uint32 i = 0;

    if (ReadRemainlen(pkg, &remainlen))
	return ERR_UNPACK_ENCRYPT_RESP;

    if (ReadUint16(pkg, &key_len))
	return ERR_UNPACK_ENCRYPT_RESP;
    
    if (remainlen != key_len + 2)
	return ERR_UNPACK_ENCRYPT_RESP;

    rsa_size = RSA_size(g_rsa);
    slice_size = rsa_size - RSA_PADDING_LEN;
    
    from = pkg->_data + pkg->_read_pos;
    to = key;
    
    for (i=0; i<key_len; i+=rsa_size){
	len = RSA_private_decrypt(rsa_size, from+i, to, 
				  g_rsa, RSA_PKCS1_PADDING);
	decrypt_len += len;
	if (decrypt_len > BUFFER_SIZE){
	    return ERR_UNPACK_ENCRYPT_RESP;
	}

	to += len;
    }

    switch (g_encrypt_alg_type){
    case kTypeAes:
	if(AES_set_encrypt_key(key, AES_KEY_LEN, &g_aes_encrypt_key) < 0) {
	    return ERR_UNPACK_ENCRYPT_RESP;
	}

	if(AES_set_decrypt_key(key, AES_KEY_LEN, &g_aes_decrypt_key) < 0) {
	    return ERR_UNPACK_ENCRYPT_RESP;
	}
	break;

    default:
	return ERR_UNPACK_ENCRYPT_RESP;
	break;
    }

    return 0;
}
コード例 #5
0
/* push_data (S->C) */
int32_t UnpackPushdata(EdpPacket* pkg, int8_t** src_devid, int8_t** data, uint32_t* data_len)
{
    uint32_t remainlen;
    if (ReadRemainlen(pkg, &remainlen))
        return ERR_UNPACK_PUSHD_REMAIN;
    if (ReadStr(pkg, src_devid))
        return ERR_UNPACK_PUSHD_DEVID;
    remainlen -= (2 + strlen((const char *)(*src_devid)));
    if (ReadBytes(pkg, (uint8_t**)data, remainlen))
        return ERR_UNPACK_PUSHD_DATA;
    *data_len = remainlen;
    my_assert(pkg->_read_pos == pkg->_write_pos);
    return 0;
}
コード例 #6
0
/* connect_resp (S->C)*/
int32_t UnpackConnectResp(EdpPacket* pkg)
{
    uint8_t flag, rtn;
    uint32_t remainlen;
    if (ReadRemainlen(pkg, &remainlen))
        return ERR_UNPACK_CONNRESP_REMAIN;

    if (ReadByte(pkg, &flag))
        return ERR_UNPACK_CONNRESP_FLAG;
    if (ReadByte(pkg, &rtn))
        return ERR_UNPACK_CONNRESP_RTN;

    my_assert(pkg->_read_pos == pkg->_write_pos);
    return (int32_t)rtn;
}
コード例 #7
0
ファイル: EdpKit.c プロジェクト: bladely/HelloX_OS
/* push_data (S->C) */
int32 UnpackPushdata(EdpPacket* pkg, char** src_devid, char** data, uint32* data_len)
{
    uint32 remainlen;

    if (ReadRemainlen(pkg, &remainlen))
        return ERR_UNPACK_PUSHD_REMAIN;
    if (ReadStr(pkg, src_devid))
        return ERR_UNPACK_PUSHD_DEVID;
    remainlen -= (2 + mystrlen(*src_devid));
    if (ReadBytes(pkg, (uint8**)data, remainlen))
        return ERR_UNPACK_PUSHD_DATA;
    *data_len = remainlen;

    //assert(pkg->_read_pos == pkg->_write_pos);
    return 0;
}
コード例 #8
0
int32_t UnpackSavedataAck(EdpPacket* pkg, int8_t** json_ack)
{
    uint32_t remainlen = 0;
    uint8_t flag = 0;
    uint16_t json_len = 0;

    if (ReadRemainlen(pkg, &remainlen))
        return ERR_UNPACK_SAVEDATA_ACK;

    if (ReadByte(pkg, &flag))
        return ERR_UNPACK_SAVEDATA_ACK;

    if (ReadUint16(pkg, &json_len))
        return ERR_UNPACK_SAVEDATA_ACK;

    if (ReadBytes(pkg, (uint8_t**)(json_ack), json_len))
        return ERR_UNPACK_SAVEDATA_ACK;

    return 0;
}
コード例 #9
0
int32_t UnpackCmdReq(EdpPacket* pkg, int8_t** cmdid, uint16_t* cmdid_len,
                     int8_t** req, uint32_t* req_len)
{
    uint32 remainlen;
    int32_t rc;
    if (ReadRemainlen(pkg, &remainlen))
        return ERR_UNPACK_CMDREQ;

    rc = ReadUint16(pkg, cmdid_len);
    if (rc)
        return rc;
    if (ReadBytes(pkg, (uint8_t**)cmdid, *cmdid_len))
        return ERR_UNPACK_CMDREQ;

    rc = ReadUint32(pkg, req_len);
    if (rc)
        return rc;
    if (ReadBytes(pkg, (uint8_t**)req, *req_len))
        return ERR_UNPACK_CMDREQ;

    my_assert(pkg->_read_pos == pkg->_write_pos);
    return 0;
}
コード例 #10
0
/* save_data (S->C) */
int32_t UnpackSavedata(EdpPacket* pkg, int8_t** src_devid, uint8_t* jb_flag)
{
    uint32_t remainlen;
    uint8_t ta_flag;
    if (ReadRemainlen(pkg, &remainlen))
        return ERR_UNPACK_SAVED_REMAIN;
    /* translate address flag */
    if (ReadByte(pkg, &ta_flag))
        return ERR_UNPACK_SAVED_TANSFLAG;
    if (ta_flag == 0x80)
    {
        if (ReadStr(pkg, src_devid))
            return ERR_UNPACK_SAVED_DEVID;
    }
    else
    {
        *src_devid = 0;
    }
    /* json or bin */
    if (ReadByte(pkg, jb_flag))
        return ERR_UNPACK_SAVED_DATAFLAG;
    return 0;
}
コード例 #11
0
ファイル: EdpKit.c プロジェクト: bladely/HelloX_OS
/* connect_resp (S->C)*/
int32 UnpackConnectResp(EdpPacket* pkg)
{
    uint8 flag, rtn;
    uint32 remainlen;

    if (ReadRemainlen(pkg, &remainlen))
    {
        return ERR_UNPACK_CONNRESP_REMAIN;
    }

    if (ReadByte(pkg, &flag))
    {
        return ERR_UNPACK_CONNRESP_FLAG;
    }

    if (ReadByte(pkg, &rtn))
    {
        return ERR_UNPACK_CONNRESP_RTN;
    }


    return (int32)rtn;
}