CDC Badge OS
Firmware for the CDC Badge v1.0 hardware security key
Loading...
Searching...
No Matches
GpgRecvStore.h
Go to the documentation of this file.
1
#pragma once
2
3
#include <cstdint>
4
#include <cstddef>
5
6
namespace
cdc::mod_gpg
{
7
8
constexpr
uint8_t
kGpgRecvFlagVerified
= 0x01;
9
19
#pragma pack(push, 1)
20
struct
gpg_recv_key_t
{
21
uint8_t
curve
;
22
char
user_id
[64];
23
uint8_t
pubkey
[64];
24
uint8_t
pubkey_len
;
25
uint8_t
fingerprint_v4
[20];
26
uint8_t
fingerprint_v5
[32];
27
uint32_t
received_at
;
28
uint8_t
my_signature
[64];
29
uint8_t
sig_len
;
30
uint8_t
flags
;
31
};
32
#pragma pack(pop)
33
34
static_assert
(
sizeof
(
gpg_recv_key_t
) ==
35
(1 + 64 + 64 + 1 + 20 + 32 + 4 + 64 + 1 + 1),
36
"gpg_recv_key_t layout drift"
);
37
45
struct
gpg_recv_index_entry_t
{
46
char
nvs_key
[16];
47
uint32_t
received_at
;
48
uint8_t
flags
;
49
};
50
58
class
GpgRecvStore {
59
public
:
61
static
constexpr
uint8_t
kMaxKeys
= 128;
62
63
static
GpgRecvStore&
instance
();
64
66
bool
addKey
(
const
gpg_recv_key_t
& key);
67
69
uint8_t
count
();
70
77
uint8_t
listIndex
(
gpg_recv_index_entry_t
* out, uint8_t max);
78
80
bool
getKey
(uint8_t index,
gpg_recv_key_t
* out);
81
83
bool
deleteKey
(uint8_t index);
84
86
bool
setSignature
(uint8_t index,
87
const
uint8_t* sig, uint8_t sig_len,
88
uint8_t
flags
);
89
90
private
:
91
GpgRecvStore() =
default
;
92
GpgRecvStore(
const
GpgRecvStore&) =
delete
;
93
GpgRecvStore& operator=(
const
GpgRecvStore&) =
delete
;
94
96
static
void
deriveKeyName(
const
uint8_t fp_v4[20],
char
out[16]);
97
99
bool
readByName(
const
char
* nvs_key,
gpg_recv_key_t
* out);
100
102
bool
writeByName(
const
char
* nvs_key,
const
gpg_recv_key_t
& key);
103
105
bool
resolveKeyName(uint8_t index,
char
out[16]);
106
};
107
108
}
// namespace cdc::mod_gpg
flags
uint8_t flags
Definition
TropicStorage.h:1
cdc::mod_gpg::GpgRecvStore::addKey
bool addKey(const gpg_recv_key_t &key)
Persist a new key. Replaces an existing entry if the fingerprint matches.
Definition
GpgRecvStore.cpp:51
cdc::mod_gpg::GpgRecvStore::deleteKey
bool deleteKey(uint8_t index)
Remove one key by sorted index. No-op if index is out of range.
Definition
GpgRecvStore.cpp:131
cdc::mod_gpg::GpgRecvStore::setSignature
bool setSignature(uint8_t index, const uint8_t *sig, uint8_t sig_len, uint8_t flags)
Attach a cross-signature and flag bits to an existing entry.
Definition
GpgRecvStore.cpp:141
cdc::mod_gpg::GpgRecvStore::getKey
bool getKey(uint8_t index, gpg_recv_key_t *out)
Load one key by sorted index (0..count()-1).
Definition
GpgRecvStore.cpp:124
cdc::mod_gpg::GpgRecvStore::instance
static GpgRecvStore & instance()
Definition
GpgRecvStore.cpp:24
cdc::mod_gpg::GpgRecvStore::listIndex
uint8_t listIndex(gpg_recv_index_entry_t *out, uint8_t max)
Build the sorted index (oldest first).
Definition
GpgRecvStore.cpp:83
cdc::mod_gpg::GpgRecvStore::count
uint8_t count()
Number of stored keys.
Definition
GpgRecvStore.cpp:66
cdc::mod_gpg::GpgRecvStore::kMaxKeys
static constexpr uint8_t kMaxKeys
Hard ceiling. Past this addKey rejects further inserts.
Definition
GpgRecvStore.h:61
cdc::mod_gpg
Definition
ble_gpg_xsig.h:7
cdc::mod_gpg::kGpgRecvFlagVerified
constexpr uint8_t kGpgRecvFlagVerified
Definition
GpgRecvStore.h:8
cdc::mod_gpg::gpg_recv_index_entry_t
Sort entry used to expose a stable ordered index over NVS keys.
Definition
GpgRecvStore.h:45
cdc::mod_gpg::gpg_recv_index_entry_t::nvs_key
char nvs_key[16]
Definition
GpgRecvStore.h:46
cdc::mod_gpg::gpg_recv_index_entry_t::flags
uint8_t flags
Definition
GpgRecvStore.h:48
cdc::mod_gpg::gpg_recv_index_entry_t::received_at
uint32_t received_at
Definition
GpgRecvStore.h:47
cdc::mod_gpg::gpg_recv_key_t
One GPG public key received from another badge.
Definition
GpgRecvStore.h:20
cdc::mod_gpg::gpg_recv_key_t::fingerprint_v4
uint8_t fingerprint_v4[20]
Definition
GpgRecvStore.h:25
cdc::mod_gpg::gpg_recv_key_t::pubkey_len
uint8_t pubkey_len
Definition
GpgRecvStore.h:24
cdc::mod_gpg::gpg_recv_key_t::curve
uint8_t curve
Definition
GpgRecvStore.h:21
cdc::mod_gpg::gpg_recv_key_t::sig_len
uint8_t sig_len
Definition
GpgRecvStore.h:29
cdc::mod_gpg::gpg_recv_key_t::flags
uint8_t flags
Definition
GpgRecvStore.h:30
cdc::mod_gpg::gpg_recv_key_t::received_at
uint32_t received_at
Definition
GpgRecvStore.h:27
cdc::mod_gpg::gpg_recv_key_t::pubkey
uint8_t pubkey[64]
Definition
GpgRecvStore.h:23
cdc::mod_gpg::gpg_recv_key_t::my_signature
uint8_t my_signature[64]
Definition
GpgRecvStore.h:28
cdc::mod_gpg::gpg_recv_key_t::fingerprint_v5
uint8_t fingerprint_v5[32]
Definition
GpgRecvStore.h:26
cdc::mod_gpg::gpg_recv_key_t::user_id
char user_id[64]
Definition
GpgRecvStore.h:22
components
mod_gpg
include
mod_gpg
GpgRecvStore.h
Generated by
1.16.1