comparison signkey.h @ 1683:41bf8f216644

merge rsa-sha256
author Matt Johnston <matt@ucc.asn.au>
date Tue, 26 May 2020 00:24:02 +0800
parents d5cdc60db08e
children 35d504d59c05
comparison
equal deleted inserted replaced
1673:e0871128e61f 1683:41bf8f216644
24 24
25 #ifndef DROPBEAR_SIGNKEY_H_ 25 #ifndef DROPBEAR_SIGNKEY_H_
26 #define DROPBEAR_SIGNKEY_H_ 26 #define DROPBEAR_SIGNKEY_H_
27 27
28 #include "buffer.h" 28 #include "buffer.h"
29 #include "dss.h"
30 #include "rsa.h"
31 #include "ed25519.h"
32 29
30 /* Forward declarations */
31 struct dropbear_DSS_Key;
32 struct dropbear_RSA_Key;
33 struct dropbear_ED25519_Key;
34
35 /* Must match with signature_type below */
33 enum signkey_type { 36 enum signkey_type {
34 #if DROPBEAR_RSA 37 #if DROPBEAR_RSA
35 DROPBEAR_SIGNKEY_RSA, 38 DROPBEAR_SIGNKEY_RSA,
36 #endif 39 #endif
37 #if DROPBEAR_DSS 40 #if DROPBEAR_DSS
49 DROPBEAR_SIGNKEY_ECDSA_KEYGEN = 70, /* just "ecdsa" for keygen */ 52 DROPBEAR_SIGNKEY_ECDSA_KEYGEN = 70, /* just "ecdsa" for keygen */
50 DROPBEAR_SIGNKEY_ANY = 80, 53 DROPBEAR_SIGNKEY_ANY = 80,
51 DROPBEAR_SIGNKEY_NONE = 90, 54 DROPBEAR_SIGNKEY_NONE = 90,
52 }; 55 };
53 56
57 /* Must match with signkey_type above, apart from rsa */
58 enum signature_type {
59 #if DROPBEAR_DSS
60 DROPBEAR_SIGNATURE_DSS = DROPBEAR_SIGNKEY_DSS,
61 #endif
62 #if DROPBEAR_ECDSA
63 DROPBEAR_SIGNATURE_ECDSA_NISTP256 = DROPBEAR_SIGNKEY_ECDSA_NISTP256,
64 DROPBEAR_SIGNATURE_ECDSA_NISTP384 = DROPBEAR_SIGNKEY_ECDSA_NISTP384,
65 DROPBEAR_SIGNATURE_ECDSA_NISTP521 = DROPBEAR_SIGNKEY_ECDSA_NISTP521,
66 #endif /* DROPBEAR_ECDSA */
67 #if DROPBEAR_ED25519
68 DROPBEAR_SIGNATURE_ED25519 = DROPBEAR_SIGNKEY_ED25519,
69 #endif
70 #if DROPBEAR_RSA_SHA1
71 DROPBEAR_SIGNATURE_RSA_SHA1 = 100, /* ssh-rsa signature (sha1) */
72 #endif
73 #if DROPBEAR_RSA_SHA256
74 DROPBEAR_SIGNATURE_RSA_SHA256 = 101, /* rsa-sha2-256 signature. has a ssh-rsa key */
75 #endif
76 DROPBEAR_SIGNATURE_NONE = DROPBEAR_SIGNKEY_NONE,
77 };
78
54 79
55 /* Sources for signing keys */ 80 /* Sources for signing keys */
56 typedef enum { 81 typedef enum {
57 SIGNKEY_SOURCE_RAW_FILE, 82 SIGNKEY_SOURCE_RAW_FILE,
58 SIGNKEY_SOURCE_AGENT, 83 SIGNKEY_SOURCE_AGENT,
64 enum signkey_type type; 89 enum signkey_type type;
65 signkey_source source; 90 signkey_source source;
66 char *filename; 91 char *filename;
67 92
68 #if DROPBEAR_DSS 93 #if DROPBEAR_DSS
69 dropbear_dss_key * dsskey; 94 struct dropbear_DSS_Key * dsskey;
70 #endif 95 #endif
71 #if DROPBEAR_RSA 96 #if DROPBEAR_RSA
72 dropbear_rsa_key * rsakey; 97 struct dropbear_RSA_Key * rsakey;
73 #endif 98 #endif
74 #if DROPBEAR_ECDSA 99 #if DROPBEAR_ECDSA
75 #if DROPBEAR_ECC_256 100 #if DROPBEAR_ECC_256
76 ecc_key * ecckey256; 101 ecc_key * ecckey256;
77 #endif 102 #endif
81 #if DROPBEAR_ECC_521 106 #if DROPBEAR_ECC_521
82 ecc_key * ecckey521; 107 ecc_key * ecckey521;
83 #endif 108 #endif
84 #endif 109 #endif
85 #if DROPBEAR_ED25519 110 #if DROPBEAR_ED25519
86 dropbear_ed25519_key * ed25519key; 111 struct dropbear_ED25519_Key * ed25519key;
87 #endif 112 #endif
88 }; 113 };
89 114
90 typedef struct SIGN_key sign_key; 115 typedef struct SIGN_key sign_key;
91 116
92 sign_key * new_sign_key(void); 117 sign_key * new_sign_key(void);
93 const char* signkey_name_from_type(enum signkey_type type, unsigned int *namelen); 118 const char* signkey_name_from_type(enum signkey_type type, unsigned int *namelen);
94 enum signkey_type signkey_type_from_name(const char* name, unsigned int namelen); 119 enum signkey_type signkey_type_from_name(const char* name, unsigned int namelen);
120 const char* signature_name_from_type(enum signature_type type, unsigned int *namelen);
121 enum signature_type signature_type_from_name(const char* name, unsigned int namelen);
122 enum signkey_type signkey_type_from_signature(enum signature_type sigtype);
123 enum signature_type signature_type_from_signkey(enum signkey_type keytype);
124
95 int buf_get_pub_key(buffer *buf, sign_key *key, enum signkey_type *type); 125 int buf_get_pub_key(buffer *buf, sign_key *key, enum signkey_type *type);
96 int buf_get_priv_key(buffer* buf, sign_key *key, enum signkey_type *type); 126 int buf_get_priv_key(buffer* buf, sign_key *key, enum signkey_type *type);
97 void buf_put_pub_key(buffer* buf, sign_key *key, enum signkey_type type); 127 void buf_put_pub_key(buffer* buf, sign_key *key, enum signkey_type type);
98 void buf_put_priv_key(buffer* buf, sign_key *key, enum signkey_type type); 128 void buf_put_priv_key(buffer* buf, sign_key *key, enum signkey_type type);
99 void sign_key_free(sign_key *key); 129 void sign_key_free(sign_key *key);
100 void buf_put_sign(buffer* buf, sign_key *key, enum signkey_type type, const buffer *data_buf); 130 void buf_put_sign(buffer* buf, sign_key *key, enum signature_type sigtype, const buffer *data_buf);
101 #if DROPBEAR_SIGNKEY_VERIFY 131 #if DROPBEAR_SIGNKEY_VERIFY
102 int buf_verify(buffer * buf, sign_key *key, const buffer *data_buf); 132 int buf_verify(buffer * buf, sign_key *key, enum signature_type expect_sigtype, const buffer *data_buf);
103 char * sign_key_fingerprint(const unsigned char* keyblob, unsigned int keybloblen); 133 char * sign_key_fingerprint(const unsigned char* keyblob, unsigned int keybloblen);
104 #endif 134 #endif
105 int cmp_base64_key(const unsigned char* keyblob, unsigned int keybloblen, 135 int cmp_base64_key(const unsigned char* keyblob, unsigned int keybloblen,
106 const unsigned char* algoname, unsigned int algolen, 136 const unsigned char* algoname, unsigned int algolen,
107 const buffer * line, char ** fingerprint); 137 const buffer * line, char ** fingerprint);