Libu2f-emu  0.0.0
Universal 2nd Factor (U2F) Emulation C Library
message.h
Go to the documentation of this file.
1 #ifndef MESSAGE_H
2 #define MESSAGE_H
3 
4 #include <stdint.h>
5 
6 #include "packet.h"
7 #include "payload.h"
8 
9 
10 /* bit macro */
11 #define BIT(x) (1 << (x))
12 
13 /* Packed macro */
14 #define __packed __attribute__((__packed__))
15 
19 #define MSG_DEF_CAP 1024
20 #define MSG_MAX_SIZE ((PACKET_CONT_MAX_SEQ * PACKET_CONT_DATA_SIZE) \
21  + PACKET_INIT_DATA_SIZE)
22 
26 struct message
27 {
28  /* Informations */
29  uint32_t cid;
30  uint8_t cmd;
31  uint16_t bcnt;
32  struct payload *payload;
33  uint8_t seq_send;
34 };
35 
43 struct message *message_new(const struct packet_init *init_packet);
44 
53 struct message *message_new_blank(uint32_t cid, uint8_t cmd);
54 
65 struct message *message_new_from_data(uint32_t cid, uint8_t cmd,
66  const uint8_t *data, size_t size);
67 
77 struct message *message_new_from_payload(uint32_t cid, uint8_t cmd,
78  const struct payload *payload);
79 
87 struct message *message_copy(const struct message *message);
88 
98 bool message_add_data(struct message *message,
99  const uint8_t *data, size_t size);
100 
109 bool message_add_part(struct message *message,
110  const struct packet_cont *cont_packet);
111 
120 bool message_next_packet(struct message *message,
121  void **packet_ref);
122 
128 void message_free(struct message *message);
129 
130 #endif
Message representation.
Definition: message.h:26
U2FHID packet use for start messsaging during transaction.
Definition: packet.h:33
struct message * message_new_blank(uint32_t cid, uint8_t cmd)
Allocate and initialize a new blank message.
Definition: message.c:58
struct message * message_new_from_data(uint32_t cid, uint8_t cmd, const uint8_t *data, size_t size)
Allocate and initialize a new message from data.
Definition: message.c:71
U2FHID packet use for start messsaging during transaction.
Definition: packet.h:45
struct message * message_new_from_payload(uint32_t cid, uint8_t cmd, const struct payload *payload)
Allocate and initialize a new message from payload.
Definition: message.c:89
uint8_t cmd
Definition: message.h:30
struct message * message_copy(const struct message *message)
Allocate and initialize a new message from another message.
Definition: message.c:96
Payload represenation.
Definition: payload.h:16
bool message_add_data(struct message *message, const uint8_t *data, size_t size)
Add data to a message.
Definition: message.c:103
void message_free(struct message *message)
Free a message.
Definition: message.c:221
uint8_t data[(64-7)]
Definition: packet.h:45
uint32_t cid
Definition: message.h:29
uint8_t cmd
Definition: packet.h:42
bool message_add_part(struct message *message, const struct packet_cont *cont_packet)
Add a part to a message.
Definition: message.c:119
uint32_t cid
Definition: cmd.h:49
uint8_t seq_send
Definition: message.h:33
bool message_next_packet(struct message *message, void **packet_ref)
Get next packet part of a message for sending a message.
Definition: message.c:153
struct message * message_new(const struct packet_init *init_packet)
Allocate and initialize a new message from an init packet.
Definition: message.c:12
struct payload * payload
Definition: message.h:32
uint16_t bcnt
Definition: message.h:31