Embedded SDK
Embedded SDK
u2f_io.c
Go to the documentation of this file.
1 
2 /*******************************************************************************
3  * Ledger Nano S - Secure firmware
4  * (c) 2022 Ledger
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  ********************************************************************************/
18 
19 #include <stdint.h>
20 #include <string.h>
21 
22 #ifdef HAVE_IO_U2F
23 
24 #include "os.h"
25 #include "u2f_service.h"
26 #include "u2f_transport.h"
27 #include "u2f_processing.h"
28 #include "u2f_impl.h"
29 
30 #include "os_io_seproxyhal.h"
31 
32 #ifdef HAVE_BLE
33 #include "ledger_ble.h"
34 #endif
35 
36 void u2f_io_send(uint8_t *buffer, uint16_t length, u2f_transport_media_t media)
37 {
38  if (media == U2F_MEDIA_USB) {
39  memmove(G_io_usb_ep_buffer, buffer, length);
40  // wipe the remaining to avoid :
41  // 1/ data leaks
42  // 2/ invalid junk
43  memset(G_io_usb_ep_buffer + length, 0, sizeof(G_io_usb_ep_buffer) - length);
44  }
45  switch (media) {
46  case U2F_MEDIA_USB:
47  io_usb_send_ep(U2F_EPIN_ADDR, G_io_usb_ep_buffer, USB_SEGMENT_SIZE, 0);
48  break;
49 #ifdef HAVE_BLE
50  case U2F_MEDIA_BLE:
51  LEDGER_BLE_send(buffer, length);
52  break;
53 #endif
54  default:
55  PRINTF("Request to send on unsupported media %d\n", media);
56  break;
57  }
58 }
59 
60 #endif // HAVE_IO_U2F
void LEDGER_BLE_send(const uint8_t *packet, uint16_t packet_length)
Definition: ledger_ble.c:1048
void u2f_io_send(uint8_t *buffer, uint16_t length, u2f_transport_media_t media)
u2f_transport_media_t
Definition: u2f_service.h:47
@ U2F_MEDIA_BLE
Definition: u2f_service.h:51
@ U2F_MEDIA_USB
Definition: u2f_service.h:49
unsigned short uint16_t
Definition: usbd_conf.h:54
unsigned char uint8_t
Definition: usbd_conf.h:53