1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-07-12 08:43:53 -05:00

Refactor the key-components mechanism a bit.

Having recently pulled it out into its own file, I think it could also
do with a bit of tidying. In this rework:

 - the substructure for a single component now has a globally visible
   struct tag, so you can make a variable pointing at it, saving
   verbiage in every piece of code looping over a key_components

 - the 'is_mp_int' flag has been replaced with a type enum, so that
   more types can be added without further upheaval

 - the printing loop in cmdgen.c for puttygen --dump has factored out
   the initial 'name=' prefix on each line so that it isn't repeated
   per component type

 - the storage format for text components is now a strbuf rather than
   a plain char *, which I think is generally more useful.
This commit is contained in:
Simon Tatham
2022-04-18 10:10:57 +01:00
parent cf36b9215f
commit 68514ac8a1
5 changed files with 48 additions and 30 deletions

20
ssh.h
View File

@ -542,16 +542,20 @@ struct eddsa_key {
WeierstrassPoint *ecdsa_public(mp_int *private_key, const ssh_keyalg *alg);
EdwardsPoint *eddsa_public(mp_int *private_key, const ssh_keyalg *alg);
typedef enum KeyComponentType {
KCT_TEXT, KCT_MPINT
} KeyComponentType;
typedef struct key_component {
char *name;
KeyComponentType type;
union {
strbuf *str; /* used for KCT_TEXT */
mp_int *mp; /* used for KCT_MPINT */
};
} key_component;
typedef struct key_components {
size_t ncomponents, componentsize;
struct {
char *name;
bool is_mp_int;
union {
char *text;
mp_int *mp;
};
} *components;
key_component *components;
} key_components;
key_components *key_components_new(void);
void key_components_add_text(key_components *kc,