const unsigned char *salt, size_t saltlen,
const unsigned char *secret, size_t secretlen);
+int quic_tls_derive_token_secret(const EVP_MD *md,
+ unsigned char *key, size_t keylen,
+ unsigned char *iv, size_t ivlen,
+ const unsigned char *salt, size_t saltlen,
+ const unsigned char *secret, size_t secretlen);
+
int quic_hkdf_expand(const EVP_MD *md,
unsigned char *buf, size_t buflen,
const unsigned char *key, size_t keylen,
* with <secret> which is not pseudo-random.
* Return 1 if succeeded, 0 if not.
*/
-int quic_tls_derive_retry_token_secret(const EVP_MD *md,
- unsigned char *key, size_t keylen,
- unsigned char *iv, size_t ivlen,
- const unsigned char *salt, size_t saltlen,
- const unsigned char *secret, size_t secretlen)
+static inline int quic_do_tls_derive_token_secret(const EVP_MD *md, unsigned char *key, size_t keylen,
+ unsigned char *iv, size_t ivlen,
+ const unsigned char *salt, size_t saltlen,
+ const unsigned char *secret, size_t secretlen,
+ const unsigned char *klabel, size_t klabellen,
+ const unsigned char *ivlabel, size_t ivlabellen)
{
unsigned char tmpkey[QUIC_TLS_KEY_LEN];
- const unsigned char key_label[] = "retry token key";
- const unsigned char iv_label[] = "retry token iv";
if (!quic_hkdf_extract(md, tmpkey, sizeof tmpkey,
secret, secretlen, salt, saltlen) ||
!quic_hkdf_expand(md, key, keylen, tmpkey, sizeof tmpkey,
- key_label, sizeof key_label - 1) ||
+ klabel, klabellen) ||
!quic_hkdf_expand(md, iv, ivlen, tmpkey, sizeof tmpkey,
- iv_label, sizeof iv_label - 1))
+ ivlabel, ivlabellen))
return 0;
return 1;
}
+int quic_tls_derive_retry_token_secret(const EVP_MD *md,
+ unsigned char *key, size_t keylen,
+ unsigned char *iv, size_t ivlen,
+ const unsigned char *salt, size_t saltlen,
+ const unsigned char *secret, size_t secretlen)
+{
+ const unsigned char key_label[] = "retry token key";
+ const unsigned char iv_label[] = "retry token iv";
+
+ return quic_do_tls_derive_token_secret(md, key, keylen, iv, ivlen,
+ salt, saltlen, secret, secretlen,
+ key_label, sizeof(key_label) - 1,
+ iv_label, sizeof(iv_label) -1);
+}
+
+int quic_tls_derive_token_secret(const EVP_MD *md,
+ unsigned char *key, size_t keylen,
+ unsigned char *iv, size_t ivlen,
+ const unsigned char *salt, size_t saltlen,
+ const unsigned char *secret, size_t secretlen)
+{
+ const unsigned char key_label[] = "token key";
+ const unsigned char iv_label[] = "token iv";
+
+ return quic_do_tls_derive_token_secret(md, key, keylen, iv, ivlen,
+ salt, saltlen, secret, secretlen,
+ key_label, sizeof(key_label) - 1,
+ iv_label, sizeof(iv_label) -1);
+}
+
/* Generate the AEAD tag for the Retry packet <pkt> of <pkt_len> bytes and
* write it to <tag>. The tag is written just after the <pkt> area. It should
* be at least 16 bytes longs. <odcid> is the CID of the Initial packet