Embedded SDK
Embedded SDK
lib_standard_app
parser.c
Go to the documentation of this file.
1
/*****************************************************************************
2
* Ledger App Boilerplate.
3
* (c) 2020 Ledger SAS.
4
*
5
* Licensed under the Apache License, Version 2.0 (the "License");
6
* you may not use this file except in compliance with the License.
7
* You may obtain a copy of the License at
8
*
9
* http://www.apache.org/licenses/LICENSE-2.0
10
*
11
* Unless required by applicable law or agreed to in writing, software
12
* distributed under the License is distributed on an "AS IS" BASIS,
13
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
* See the License for the specific language governing permissions and
15
* limitations under the License.
16
*****************************************************************************/
17
18
#include <stddef.h>
// size_t
19
#include <stdint.h>
// uint*_t
20
#include <stdbool.h>
// bool
21
22
#include "
parser.h
"
23
#include "
offsets.h
"
24
25
bool
apdu_parser
(
command_t
*cmd,
uint8_t
*buf,
size_t
buf_len)
26
{
27
// Check minimum length, CLA / INS / P1 and P2 are mandatory
28
if
(buf_len <
OFFSET_LC
) {
29
return
false
;
30
}
31
32
if
(buf_len ==
OFFSET_LC
) {
33
// Lc field not specified, implies lc = 0
34
cmd->
lc
= 0;
35
}
36
else
{
37
// Lc field specified, check value against received length
38
cmd->
lc
= buf[
OFFSET_LC
];
39
if
(buf_len -
OFFSET_CDATA
!= cmd->
lc
) {
40
return
false
;
41
}
42
}
43
44
cmd->
cla
= buf[
OFFSET_CLA
];
45
cmd->
ins
= buf[
OFFSET_INS
];
46
cmd->
p1
= buf[
OFFSET_P1
];
47
cmd->
p2
= buf[
OFFSET_P2
];
48
cmd->
data
= (cmd->
lc
> 0) ? buf +
OFFSET_CDATA
: NULL;
49
50
return
true
;
51
}
offsets.h
OFFSET_LC
#define OFFSET_LC
Definition:
offsets.h:22
OFFSET_P1
#define OFFSET_P1
Definition:
offsets.h:14
OFFSET_P2
#define OFFSET_P2
Definition:
offsets.h:18
OFFSET_INS
#define OFFSET_INS
Definition:
offsets.h:10
OFFSET_CLA
#define OFFSET_CLA
Definition:
offsets.h:6
OFFSET_CDATA
#define OFFSET_CDATA
Definition:
offsets.h:26
apdu_parser
bool apdu_parser(command_t *cmd, uint8_t *buf, size_t buf_len)
Definition:
parser.c:25
parser.h
command_t
Definition:
parser.h:10
command_t::ins
uint8_t ins
Instruction class.
Definition:
parser.h:12
command_t::lc
uint8_t lc
Instruction parameter 2.
Definition:
parser.h:15
command_t::cla
uint8_t cla
Definition:
parser.h:11
command_t::p1
uint8_t p1
Instruction code.
Definition:
parser.h:13
command_t::p2
uint8_t p2
Instruction parameter 1.
Definition:
parser.h:14
command_t::data
uint8_t * data
Length of command data.
Definition:
parser.h:16
uint8_t
unsigned char uint8_t
Definition:
usbd_conf.h:53
Generated by
1.9.1