mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-07-05 21:42:47 -05:00
cmdgen: add a --dump option.
Also spelled '-O text', this takes a public or private key as input, and produces on standard output a dump of all the actual numbers involved in the key: the exponent and modulus for RSA, the p,q,g,y parameters for DSA, the affine x and y coordinates of the public elliptic curve point for ECC keys, and all the extra bits and pieces in the private keys too. Partly I expect this to be useful to me for debugging: I've had to paste key files a few too many times through base64 decoders and hex dump tools, then manually decode SSH marshalling and paste the result into the Python REPL to get an integer object. Now I should be able to get _straight_ to text I can paste into Python. But also, it's a way that other applications can use the key generator: if you need to generate, say, an RSA key in some format I don't support (I've recently heard of an XML-based one, for example), then you can run 'puttygen -t rsa --dump' and have it print the elements of a freshly generated keypair on standard output, and then all you have to do is understand the output format.
This commit is contained in:
22
testcrypt.c
22
testcrypt.c
@ -87,6 +87,7 @@ uint64_t prng_reseed_time_ms(void)
|
||||
X(rsakex, RSAKey *, ssh_rsakex_freekey(v)) \
|
||||
X(rsa, RSAKey *, rsa_free(v)) \
|
||||
X(prng, prng *, prng_free(v)) \
|
||||
X(keycomponents, key_components *, key_components_free(v)) \
|
||||
/* end of list */
|
||||
|
||||
typedef struct Value Value;
|
||||
@ -576,6 +577,7 @@ static void return_val_string_asciz(strbuf *out, char *s)
|
||||
|
||||
NULLABLE_RETURN_WRAPPER(val_string, strbuf *)
|
||||
NULLABLE_RETURN_WRAPPER(val_string_asciz, char *)
|
||||
NULLABLE_RETURN_WRAPPER(val_string_asciz_const, const char *)
|
||||
NULLABLE_RETURN_WRAPPER(val_cipher, ssh_cipher *)
|
||||
NULLABLE_RETURN_WRAPPER(val_hash, ssh_hash *)
|
||||
NULLABLE_RETURN_WRAPPER(val_key, ssh_key *)
|
||||
@ -1077,6 +1079,25 @@ ssh_key *eddsa_generate_wrapper(int bits)
|
||||
}
|
||||
#define eddsa_generate eddsa_generate_wrapper
|
||||
|
||||
size_t key_components_count(key_components *kc) { return kc->ncomponents; }
|
||||
const char *key_components_nth_name(key_components *kc, size_t n)
|
||||
{
|
||||
return (n >= kc->ncomponents ? NULL :
|
||||
kc->components[n].name);
|
||||
}
|
||||
const char *key_components_nth_str(key_components *kc, size_t n)
|
||||
{
|
||||
return (n >= kc->ncomponents ? NULL :
|
||||
kc->components[n].is_mp_int ? NULL :
|
||||
kc->components[n].text);
|
||||
}
|
||||
mp_int *key_components_nth_mp(key_components *kc, size_t n)
|
||||
{
|
||||
return (n >= kc->ncomponents ? NULL :
|
||||
!kc->components[n].is_mp_int ? NULL :
|
||||
mp_copy(kc->components[n].mp));
|
||||
}
|
||||
|
||||
#define VALTYPE_TYPEDEF(n,t,f) \
|
||||
typedef t TD_val_##n; \
|
||||
typedef t *TD_out_val_##n;
|
||||
@ -1113,6 +1134,7 @@ typedef const ssh_cipheralg *TD_cipheralg;
|
||||
typedef const ssh_kex *TD_dh_group;
|
||||
typedef const ssh_kex *TD_ecdh_alg;
|
||||
typedef RsaSsh1Order TD_rsaorder;
|
||||
typedef key_components *TD_keycomponents;
|
||||
|
||||
#define FUNC0(rettype, function) \
|
||||
static void handle_##function(BinarySource *in, strbuf *out) { \
|
||||
|
Reference in New Issue
Block a user