Skip to content

Commit 3e6331c

Browse files
author
Jason Mobarak
authored
signing: add new ECDSA based signature messages (#1302)
* signing: add new ECDSA based signature messages Adds new messages: - ECDSA signature message - ECDSA certificate message for IC and CC - New "certificate chain" message (i.e. allow list) Jiras: - https://swift-nav.atlassian.net/browse/GV2-191 - https://swift-nav.atlassian.net/browse/GV2-192 - https://swift-nav.atlassian.net/browse/GV2-193
1 parent 5c87f92 commit 3e6331c

File tree

93 files changed

+47093
-3798
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

93 files changed

+47093
-3798
lines changed

c/include/libsbp/cpp/message_traits.h

Lines changed: 166 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1023,6 +1023,42 @@ struct MessageTraits<sbp_msg_cell_modem_status_t> {
10231023
}
10241024
};
10251025

1026+
template <>
1027+
struct MessageTraits<sbp_msg_certificate_chain_t> {
1028+
static constexpr sbp_msg_type_t id = SbpMsgCertificateChain;
1029+
static constexpr const char *name = "MSG_CERTIFICATE_CHAIN";
1030+
static const sbp_msg_certificate_chain_t &get(const sbp_msg_t &msg) {
1031+
return msg.certificate_chain;
1032+
}
1033+
static sbp_msg_certificate_chain_t &get(sbp_msg_t &msg) {
1034+
return msg.certificate_chain;
1035+
}
1036+
static void to_sbp_msg(const sbp_msg_certificate_chain_t &msg,
1037+
sbp_msg_t *sbp_msg) {
1038+
sbp_msg->certificate_chain = msg;
1039+
}
1040+
static sbp_msg_t to_sbp_msg(const sbp_msg_certificate_chain_t &msg) {
1041+
sbp_msg_t sbp_msg;
1042+
sbp_msg.certificate_chain = msg;
1043+
return sbp_msg;
1044+
}
1045+
static s8 send(sbp_state_t *state, u16 sender_id,
1046+
const sbp_msg_certificate_chain_t &msg, sbp_write_fn_t write) {
1047+
return sbp_msg_certificate_chain_send(state, sender_id, &msg, write);
1048+
}
1049+
static s8 encode(uint8_t *buf, uint8_t len, uint8_t *n_written,
1050+
const sbp_msg_certificate_chain_t &msg) {
1051+
return sbp_msg_certificate_chain_encode(buf, len, n_written, &msg);
1052+
}
1053+
static s8 decode(const uint8_t *buf, uint8_t len, uint8_t *n_read,
1054+
sbp_msg_certificate_chain_t *msg) {
1055+
return sbp_msg_certificate_chain_decode(buf, len, n_read, msg);
1056+
}
1057+
static size_t encoded_len(const sbp_msg_certificate_chain_t &msg) {
1058+
return sbp_msg_certificate_chain_encoded_len(&msg);
1059+
}
1060+
};
1061+
10261062
template <>
10271063
struct MessageTraits<sbp_msg_command_output_t> {
10281064
static constexpr sbp_msg_type_t id = SbpMsgCommandOutput;
@@ -1404,112 +1440,185 @@ struct MessageTraits<sbp_msg_dops_t> {
14041440
};
14051441

14061442
template <>
1407-
struct MessageTraits<sbp_msg_ed25519_certificate_t> {
1408-
static constexpr sbp_msg_type_t id = SbpMsgEd25519Certificate;
1409-
static constexpr const char *name = "MSG_ED25519_CERTIFICATE";
1410-
static const sbp_msg_ed25519_certificate_t &get(const sbp_msg_t &msg) {
1411-
return msg.ed25519_certificate;
1443+
struct MessageTraits<sbp_msg_ecdsa_certificate_t> {
1444+
static constexpr sbp_msg_type_t id = SbpMsgEcdsaCertificate;
1445+
static constexpr const char *name = "MSG_ECDSA_CERTIFICATE";
1446+
static const sbp_msg_ecdsa_certificate_t &get(const sbp_msg_t &msg) {
1447+
return msg.ecdsa_certificate;
1448+
}
1449+
static sbp_msg_ecdsa_certificate_t &get(sbp_msg_t &msg) {
1450+
return msg.ecdsa_certificate;
1451+
}
1452+
static void to_sbp_msg(const sbp_msg_ecdsa_certificate_t &msg,
1453+
sbp_msg_t *sbp_msg) {
1454+
sbp_msg->ecdsa_certificate = msg;
1455+
}
1456+
static sbp_msg_t to_sbp_msg(const sbp_msg_ecdsa_certificate_t &msg) {
1457+
sbp_msg_t sbp_msg;
1458+
sbp_msg.ecdsa_certificate = msg;
1459+
return sbp_msg;
1460+
}
1461+
static s8 send(sbp_state_t *state, u16 sender_id,
1462+
const sbp_msg_ecdsa_certificate_t &msg, sbp_write_fn_t write) {
1463+
return sbp_msg_ecdsa_certificate_send(state, sender_id, &msg, write);
1464+
}
1465+
static s8 encode(uint8_t *buf, uint8_t len, uint8_t *n_written,
1466+
const sbp_msg_ecdsa_certificate_t &msg) {
1467+
return sbp_msg_ecdsa_certificate_encode(buf, len, n_written, &msg);
1468+
}
1469+
static s8 decode(const uint8_t *buf, uint8_t len, uint8_t *n_read,
1470+
sbp_msg_ecdsa_certificate_t *msg) {
1471+
return sbp_msg_ecdsa_certificate_decode(buf, len, n_read, msg);
1472+
}
1473+
static size_t encoded_len(const sbp_msg_ecdsa_certificate_t &msg) {
1474+
return sbp_msg_ecdsa_certificate_encoded_len(&msg);
1475+
}
1476+
};
1477+
1478+
template <>
1479+
struct MessageTraits<sbp_msg_ecdsa_signature_t> {
1480+
static constexpr sbp_msg_type_t id = SbpMsgEcdsaSignature;
1481+
static constexpr const char *name = "MSG_ECDSA_SIGNATURE";
1482+
static const sbp_msg_ecdsa_signature_t &get(const sbp_msg_t &msg) {
1483+
return msg.ecdsa_signature;
1484+
}
1485+
static sbp_msg_ecdsa_signature_t &get(sbp_msg_t &msg) {
1486+
return msg.ecdsa_signature;
1487+
}
1488+
static void to_sbp_msg(const sbp_msg_ecdsa_signature_t &msg,
1489+
sbp_msg_t *sbp_msg) {
1490+
sbp_msg->ecdsa_signature = msg;
1491+
}
1492+
static sbp_msg_t to_sbp_msg(const sbp_msg_ecdsa_signature_t &msg) {
1493+
sbp_msg_t sbp_msg;
1494+
sbp_msg.ecdsa_signature = msg;
1495+
return sbp_msg;
1496+
}
1497+
static s8 send(sbp_state_t *state, u16 sender_id,
1498+
const sbp_msg_ecdsa_signature_t &msg, sbp_write_fn_t write) {
1499+
return sbp_msg_ecdsa_signature_send(state, sender_id, &msg, write);
1500+
}
1501+
static s8 encode(uint8_t *buf, uint8_t len, uint8_t *n_written,
1502+
const sbp_msg_ecdsa_signature_t &msg) {
1503+
return sbp_msg_ecdsa_signature_encode(buf, len, n_written, &msg);
1504+
}
1505+
static s8 decode(const uint8_t *buf, uint8_t len, uint8_t *n_read,
1506+
sbp_msg_ecdsa_signature_t *msg) {
1507+
return sbp_msg_ecdsa_signature_decode(buf, len, n_read, msg);
1508+
}
1509+
static size_t encoded_len(const sbp_msg_ecdsa_signature_t &msg) {
1510+
return sbp_msg_ecdsa_signature_encoded_len(&msg);
1511+
}
1512+
};
1513+
1514+
template <>
1515+
struct MessageTraits<sbp_msg_ed25519_certificate_dep_t> {
1516+
static constexpr sbp_msg_type_t id = SbpMsgEd25519CertificateDep;
1517+
static constexpr const char *name = "MSG_ED25519_CERTIFICATE_DEP";
1518+
static const sbp_msg_ed25519_certificate_dep_t &get(const sbp_msg_t &msg) {
1519+
return msg.ed25519_certificate_dep;
14121520
}
1413-
static sbp_msg_ed25519_certificate_t &get(sbp_msg_t &msg) {
1414-
return msg.ed25519_certificate;
1521+
static sbp_msg_ed25519_certificate_dep_t &get(sbp_msg_t &msg) {
1522+
return msg.ed25519_certificate_dep;
14151523
}
1416-
static void to_sbp_msg(const sbp_msg_ed25519_certificate_t &msg,
1524+
static void to_sbp_msg(const sbp_msg_ed25519_certificate_dep_t &msg,
14171525
sbp_msg_t *sbp_msg) {
1418-
sbp_msg->ed25519_certificate = msg;
1526+
sbp_msg->ed25519_certificate_dep = msg;
14191527
}
1420-
static sbp_msg_t to_sbp_msg(const sbp_msg_ed25519_certificate_t &msg) {
1528+
static sbp_msg_t to_sbp_msg(const sbp_msg_ed25519_certificate_dep_t &msg) {
14211529
sbp_msg_t sbp_msg;
1422-
sbp_msg.ed25519_certificate = msg;
1530+
sbp_msg.ed25519_certificate_dep = msg;
14231531
return sbp_msg;
14241532
}
14251533
static s8 send(sbp_state_t *state, u16 sender_id,
1426-
const sbp_msg_ed25519_certificate_t &msg,
1534+
const sbp_msg_ed25519_certificate_dep_t &msg,
14271535
sbp_write_fn_t write) {
1428-
return sbp_msg_ed25519_certificate_send(state, sender_id, &msg, write);
1536+
return sbp_msg_ed25519_certificate_dep_send(state, sender_id, &msg, write);
14291537
}
14301538
static s8 encode(uint8_t *buf, uint8_t len, uint8_t *n_written,
1431-
const sbp_msg_ed25519_certificate_t &msg) {
1432-
return sbp_msg_ed25519_certificate_encode(buf, len, n_written, &msg);
1539+
const sbp_msg_ed25519_certificate_dep_t &msg) {
1540+
return sbp_msg_ed25519_certificate_dep_encode(buf, len, n_written, &msg);
14331541
}
14341542
static s8 decode(const uint8_t *buf, uint8_t len, uint8_t *n_read,
1435-
sbp_msg_ed25519_certificate_t *msg) {
1436-
return sbp_msg_ed25519_certificate_decode(buf, len, n_read, msg);
1543+
sbp_msg_ed25519_certificate_dep_t *msg) {
1544+
return sbp_msg_ed25519_certificate_dep_decode(buf, len, n_read, msg);
14371545
}
1438-
static size_t encoded_len(const sbp_msg_ed25519_certificate_t &msg) {
1439-
return sbp_msg_ed25519_certificate_encoded_len(&msg);
1546+
static size_t encoded_len(const sbp_msg_ed25519_certificate_dep_t &msg) {
1547+
return sbp_msg_ed25519_certificate_dep_encoded_len(&msg);
14401548
}
14411549
};
14421550

14431551
template <>
1444-
struct MessageTraits<sbp_msg_ed25519_signature_dep_t> {
1445-
static constexpr sbp_msg_type_t id = SbpMsgEd25519SignatureDep;
1446-
static constexpr const char *name = "MSG_ED25519_SIGNATURE_DEP";
1447-
static const sbp_msg_ed25519_signature_dep_t &get(const sbp_msg_t &msg) {
1448-
return msg.ed25519_signature_dep;
1552+
struct MessageTraits<sbp_msg_ed25519_signature_dep_a_t> {
1553+
static constexpr sbp_msg_type_t id = SbpMsgEd25519SignatureDepA;
1554+
static constexpr const char *name = "MSG_ED25519_SIGNATURE_DEP_A";
1555+
static const sbp_msg_ed25519_signature_dep_a_t &get(const sbp_msg_t &msg) {
1556+
return msg.ed25519_signature_dep_a;
14491557
}
1450-
static sbp_msg_ed25519_signature_dep_t &get(sbp_msg_t &msg) {
1451-
return msg.ed25519_signature_dep;
1558+
static sbp_msg_ed25519_signature_dep_a_t &get(sbp_msg_t &msg) {
1559+
return msg.ed25519_signature_dep_a;
14521560
}
1453-
static void to_sbp_msg(const sbp_msg_ed25519_signature_dep_t &msg,
1561+
static void to_sbp_msg(const sbp_msg_ed25519_signature_dep_a_t &msg,
14541562
sbp_msg_t *sbp_msg) {
1455-
sbp_msg->ed25519_signature_dep = msg;
1563+
sbp_msg->ed25519_signature_dep_a = msg;
14561564
}
1457-
static sbp_msg_t to_sbp_msg(const sbp_msg_ed25519_signature_dep_t &msg) {
1565+
static sbp_msg_t to_sbp_msg(const sbp_msg_ed25519_signature_dep_a_t &msg) {
14581566
sbp_msg_t sbp_msg;
1459-
sbp_msg.ed25519_signature_dep = msg;
1567+
sbp_msg.ed25519_signature_dep_a = msg;
14601568
return sbp_msg;
14611569
}
14621570
static s8 send(sbp_state_t *state, u16 sender_id,
1463-
const sbp_msg_ed25519_signature_dep_t &msg,
1571+
const sbp_msg_ed25519_signature_dep_a_t &msg,
14641572
sbp_write_fn_t write) {
1465-
return sbp_msg_ed25519_signature_dep_send(state, sender_id, &msg, write);
1573+
return sbp_msg_ed25519_signature_dep_a_send(state, sender_id, &msg, write);
14661574
}
14671575
static s8 encode(uint8_t *buf, uint8_t len, uint8_t *n_written,
1468-
const sbp_msg_ed25519_signature_dep_t &msg) {
1469-
return sbp_msg_ed25519_signature_dep_encode(buf, len, n_written, &msg);
1576+
const sbp_msg_ed25519_signature_dep_a_t &msg) {
1577+
return sbp_msg_ed25519_signature_dep_a_encode(buf, len, n_written, &msg);
14701578
}
14711579
static s8 decode(const uint8_t *buf, uint8_t len, uint8_t *n_read,
1472-
sbp_msg_ed25519_signature_dep_t *msg) {
1473-
return sbp_msg_ed25519_signature_dep_decode(buf, len, n_read, msg);
1580+
sbp_msg_ed25519_signature_dep_a_t *msg) {
1581+
return sbp_msg_ed25519_signature_dep_a_decode(buf, len, n_read, msg);
14741582
}
1475-
static size_t encoded_len(const sbp_msg_ed25519_signature_dep_t &msg) {
1476-
return sbp_msg_ed25519_signature_dep_encoded_len(&msg);
1583+
static size_t encoded_len(const sbp_msg_ed25519_signature_dep_a_t &msg) {
1584+
return sbp_msg_ed25519_signature_dep_a_encoded_len(&msg);
14771585
}
14781586
};
14791587

14801588
template <>
1481-
struct MessageTraits<sbp_msg_ed25519_signature_t> {
1482-
static constexpr sbp_msg_type_t id = SbpMsgEd25519Signature;
1483-
static constexpr const char *name = "MSG_ED25519_SIGNATURE";
1484-
static const sbp_msg_ed25519_signature_t &get(const sbp_msg_t &msg) {
1485-
return msg.ed25519_signature;
1589+
struct MessageTraits<sbp_msg_ed25519_signature_dep_b_t> {
1590+
static constexpr sbp_msg_type_t id = SbpMsgEd25519SignatureDepB;
1591+
static constexpr const char *name = "MSG_ED25519_SIGNATURE_DEP_B";
1592+
static const sbp_msg_ed25519_signature_dep_b_t &get(const sbp_msg_t &msg) {
1593+
return msg.ed25519_signature_dep_b;
14861594
}
1487-
static sbp_msg_ed25519_signature_t &get(sbp_msg_t &msg) {
1488-
return msg.ed25519_signature;
1595+
static sbp_msg_ed25519_signature_dep_b_t &get(sbp_msg_t &msg) {
1596+
return msg.ed25519_signature_dep_b;
14891597
}
1490-
static void to_sbp_msg(const sbp_msg_ed25519_signature_t &msg,
1598+
static void to_sbp_msg(const sbp_msg_ed25519_signature_dep_b_t &msg,
14911599
sbp_msg_t *sbp_msg) {
1492-
sbp_msg->ed25519_signature = msg;
1600+
sbp_msg->ed25519_signature_dep_b = msg;
14931601
}
1494-
static sbp_msg_t to_sbp_msg(const sbp_msg_ed25519_signature_t &msg) {
1602+
static sbp_msg_t to_sbp_msg(const sbp_msg_ed25519_signature_dep_b_t &msg) {
14951603
sbp_msg_t sbp_msg;
1496-
sbp_msg.ed25519_signature = msg;
1604+
sbp_msg.ed25519_signature_dep_b = msg;
14971605
return sbp_msg;
14981606
}
14991607
static s8 send(sbp_state_t *state, u16 sender_id,
1500-
const sbp_msg_ed25519_signature_t &msg, sbp_write_fn_t write) {
1501-
return sbp_msg_ed25519_signature_send(state, sender_id, &msg, write);
1608+
const sbp_msg_ed25519_signature_dep_b_t &msg,
1609+
sbp_write_fn_t write) {
1610+
return sbp_msg_ed25519_signature_dep_b_send(state, sender_id, &msg, write);
15021611
}
15031612
static s8 encode(uint8_t *buf, uint8_t len, uint8_t *n_written,
1504-
const sbp_msg_ed25519_signature_t &msg) {
1505-
return sbp_msg_ed25519_signature_encode(buf, len, n_written, &msg);
1613+
const sbp_msg_ed25519_signature_dep_b_t &msg) {
1614+
return sbp_msg_ed25519_signature_dep_b_encode(buf, len, n_written, &msg);
15061615
}
15071616
static s8 decode(const uint8_t *buf, uint8_t len, uint8_t *n_read,
1508-
sbp_msg_ed25519_signature_t *msg) {
1509-
return sbp_msg_ed25519_signature_decode(buf, len, n_read, msg);
1617+
sbp_msg_ed25519_signature_dep_b_t *msg) {
1618+
return sbp_msg_ed25519_signature_dep_b_decode(buf, len, n_read, msg);
15101619
}
1511-
static size_t encoded_len(const sbp_msg_ed25519_signature_t &msg) {
1512-
return sbp_msg_ed25519_signature_encoded_len(&msg);
1620+
static size_t encoded_len(const sbp_msg_ed25519_signature_dep_b_t &msg) {
1621+
return sbp_msg_ed25519_signature_dep_b_encoded_len(&msg);
15131622
}
15141623
};
15151624

c/include/libsbp/legacy/cpp/message_traits.h

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1162,23 +1162,41 @@ struct MessageTraits<msg_acknowledge_t> {
11621162

11631163

11641164
template<>
1165-
struct MessageTraits<msg_ed25519_signature_dep_t> {
1165+
struct MessageTraits<msg_ed25519_signature_dep_a_t> {
11661166
static constexpr u16 id = 3073;
11671167
};
11681168

11691169

11701170
template<>
1171-
struct MessageTraits<msg_ed25519_certificate_t> {
1171+
struct MessageTraits<msg_ed25519_certificate_dep_t> {
11721172
static constexpr u16 id = 3074;
11731173
};
11741174

11751175

11761176
template<>
1177-
struct MessageTraits<msg_ed25519_signature_t> {
1177+
struct MessageTraits<msg_ed25519_signature_dep_b_t> {
11781178
static constexpr u16 id = 3075;
11791179
};
11801180

11811181

1182+
template<>
1183+
struct MessageTraits<msg_ecdsa_certificate_t> {
1184+
static constexpr u16 id = 3076;
1185+
};
1186+
1187+
1188+
template<>
1189+
struct MessageTraits<msg_certificate_chain_t> {
1190+
static constexpr u16 id = 3077;
1191+
};
1192+
1193+
1194+
template<>
1195+
struct MessageTraits<msg_ecdsa_signature_t> {
1196+
static constexpr u16 id = 3078;
1197+
};
1198+
1199+
11821200
template<>
11831201
struct MessageTraits<msg_fileio_config_req_t> {
11841202
static constexpr u16 id = 4097;

0 commit comments

Comments
 (0)