コード例 #1
0
ファイル: thread_meshcop_lib.c プロジェクト: Archcady/mbed-os
uint8_t *thread_meshcop_tlv_data_write_uint64(uint8_t *ptr, uint8_t type, uint64_t data)
{
    *ptr++ = type;
    *ptr++ = 8;
    ptr = common_write_64_bit(data, ptr);
    return ptr;
}
コード例 #2
0
ファイル: eapol_helper.c プロジェクト: donatieng/mbed
uint8_t *eapol_write_pdu_frame(uint8_t *ptr, eapol_pdu_t *eapol_pdu)
{
    *ptr++ = EAPOL_PROTOCOL_VERSION;
    *ptr++ = eapol_pdu->packet_type;
    ptr = common_write_16_bit(eapol_pdu->packet_length, ptr);
    eapol_pdu->packet_body = ptr;

    if (eapol_pdu->packet_type == EAPOL_EAP_TYPE) {
        eap_header_t *eap_header = &eapol_pdu->msg.eap;
        ptr = eap_header_build(ptr, eap_header->length, eap_header->eap_code, eap_header->id_seq, eap_header->type);
        memcpy(ptr, eap_header->data_ptr, eap_header->length - (ptr - eapol_pdu->packet_body));
        ptr += eap_header->length - (ptr - eapol_pdu->packet_body);

    } else if (eapol_pdu->packet_type == EAPOL_KEY_TYPE) {
        eapol_key_frame_t *key_frame = &eapol_pdu->msg.key;
        *ptr++ = key_frame->key_description;
        ptr = eapol_key_information_write(&key_frame->key_information, ptr);
        ptr = common_write_16_bit(key_frame->key_length, ptr);
        ptr = common_write_64_bit(key_frame->replay_counter, ptr);

        if (key_frame->key_nonce) {
            memcpy(ptr, key_frame->key_nonce, 32);
        } else {
            memset(ptr, 0, 32);
        }
        ptr += 32;

        if (key_frame->key_iv) {
            memcpy(ptr, key_frame->key_iv, 16);
        } else {
            memset(ptr, 0, 16);
        }
        ptr += 16;

        if (key_frame->key_rsc) {
            memcpy(ptr, key_frame->key_rsc, 8);
        } else {
            memset(ptr, 0, 8);
        }
        ptr += 8;

        //Reserved 8bytes
        memset(ptr, 0, 8);
        ptr += 8;

        if (key_frame->key_mic && key_frame->key_information.key_mic) {
            memcpy(ptr, key_frame->key_mic, 16);
        } else {
            memset(ptr, 0, 16);
        }
        ptr += 16;
        ptr = common_write_16_bit(key_frame->key_data_length, ptr);
        if (key_frame->key_data_length && key_frame->key_data) {
            memcpy(ptr, key_frame->key_data, key_frame->key_data_length);
            ptr += key_frame->key_data_length;
        }
    }

    return ptr;
}