libwebsockets
Lightweight C library for HTML5 websockets
lws-jwk.h
1 /*
2  * libwebsockets - small server side websockets and web server implementation
3  *
4  * Copyright (C) 2010 - 2018 Andy Green <andy@warmcat.com>
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation:
9  * version 2.1 of the License.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19  * MA 02110-1301 USA
20  *
21  * included from libwebsockets.h
22  */
23 
37 
38 enum enum_jwk_meta_tok {
39  JWK_META_KTY,
40  JWK_META_KID,
41  JWK_META_USE,
42  JWK_META_KEY_OPS,
43  JWK_META_X5C,
44  JWK_META_ALG,
45 
46  LWS_COUNT_JWK_ELEMENTS
47 };
48 
49 struct lws_jwk {
50  /* key data elements */
51  struct lws_gencrypto_keyelem e[LWS_GENCRYPTO_MAX_KEYEL_COUNT];
52  /* generic meta key elements, like KID */
53  struct lws_gencrypto_keyelem meta[LWS_COUNT_JWK_ELEMENTS];
54  int kty;
55  char private_key; /* nonzero = has private key elements */
56 };
57 
58 typedef int (*lws_jwk_key_import_callback)(struct lws_jwk *s, void *user);
59 
61  struct lws_jwk *jwk;
62  char b64[(((8192 / 8) * 4) / 3) + 1]; /* enough for 8Kb key */
63  lws_jwk_key_import_callback per_key_cb;
64  void *user;
65  int pos;
66  unsigned short possible;
67 };
68 
92 LWS_VISIBLE LWS_EXTERN int
93 lws_jwk_import(struct lws_jwk *jwk, lws_jwk_key_import_callback cb, void *user,
94  const char *in, size_t len);
95 
102 LWS_VISIBLE LWS_EXTERN void
104 
114 LWS_VISIBLE LWS_EXTERN int
115 lws_jwk_dup_oct(struct lws_jwk *jwk, const void *key, int len);
116 
128 LWS_VISIBLE LWS_EXTERN int
129 lws_jwk_export(struct lws_jwk *jwk, int _private, char *p, int *len);
130 
151 LWS_VISIBLE LWS_EXTERN int
152 lws_jwk_load(struct lws_jwk *jwk, const char *filename,
153  lws_jwk_key_import_callback cb, void *user);
154 
162 LWS_VISIBLE LWS_EXTERN int
163 lws_jwk_save(struct lws_jwk *jwk, const char *filename);
164 
172 LWS_VISIBLE LWS_EXTERN int
173 lws_jwk_rfc7638_fingerprint(struct lws_jwk *jwk, char *digest32);
174 
184 LWS_VISIBLE LWS_EXTERN int
185 lws_jwk_strdup_meta(struct lws_jwk *jwk, enum enum_jwk_meta_tok idx,
186  const char *in, int len);
187 
188 
189 LWS_VISIBLE LWS_EXTERN int
190 lws_jwk_dump(struct lws_jwk *jwk);
191 
202 LWS_VISIBLE int
203 lws_jwk_generate(struct lws_context *context, struct lws_jwk *jwk,
204  enum lws_gencrypto_kty kty, int bits, const char *curve);
205 
LWS_VISIBLE LWS_EXTERN int lws_jwk_import(struct lws_jwk *jwk, lws_jwk_key_import_callback cb, void *user, const char *in, size_t len)
LWS_VISIBLE LWS_EXTERN int lws_jwk_load(struct lws_jwk *jwk, const char *filename, lws_jwk_key_import_callback cb, void *user)
LWS_VISIBLE LWS_EXTERN int lws_jwk_strdup_meta(struct lws_jwk *jwk, enum enum_jwk_meta_tok idx, const char *in, int len)
LWS_VISIBLE LWS_EXTERN void lws_jwk_destroy(struct lws_jwk *jwk)
LWS_VISIBLE int lws_jwk_generate(struct lws_context *context, struct lws_jwk *jwk, enum lws_gencrypto_kty kty, int bits, const char *curve)
LWS_VISIBLE LWS_EXTERN int lws_jwk_rfc7638_fingerprint(struct lws_jwk *jwk, char *digest32)
LWS_VISIBLE LWS_EXTERN int lws_jwk_save(struct lws_jwk *jwk, const char *filename)
LWS_VISIBLE LWS_EXTERN int lws_jwk_dup_oct(struct lws_jwk *jwk, const void *key, int len)
LWS_VISIBLE LWS_EXTERN int lws_jwk_export(struct lws_jwk *jwk, int _private, char *p, int *len)
Definition: lws-gencrypto.h:91
Definition: lws-jwk.h:60
Definition: lws-jwk.h:49
int kty
Definition: lws-jwk.h:54