blob: 6c52c99525434f29d45949ba34ec6a21e9e5de90 [file] [log] [blame]
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is PRIVATE to SSL.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef __tls13esni_h_
#define __tls13esni_h_
struct sslEsniKeysStr {
SECItem data; /* The encoded record. */
sslEphemeralKeyPair *privKey;
const char *dummySni;
PRCList keyShares; /* List of TLS13KeyShareEntry */
SECItem suites;
PRUint16 paddedLength;
PRUint64 notBefore;
PRUint64 notAfter;
};
SECStatus SSLExp_SetESNIKeyPair(PRFileDesc *fd,
SECKEYPrivateKey *privKey,
const PRUint8 *record, unsigned int recordLen);
SECStatus SSLExp_EnableESNI(PRFileDesc *fd, const PRUint8 *esniKeys,
unsigned int esniKeysLen, const char *dummySNI);
SECStatus SSLExp_EncodeESNIKeys(PRUint16 *cipherSuites, unsigned int cipherSuiteCount,
SSLNamedGroup group, SECKEYPublicKey *pubKey,
PRUint16 pad, PRUint64 notBefore, PRUint64 notAfter,
PRUint8 *out, unsigned int *outlen, unsigned int maxlen);
sslEsniKeys *tls13_CopyESNIKeys(sslEsniKeys *okeys);
void tls13_DestroyESNIKeys(sslEsniKeys *keys);
SECStatus tls13_ClientSetupESNI(sslSocket *ss);
SECStatus tls13_ComputeESNIKeys(const sslSocket *ss,
TLS13KeyShareEntry *entry,
sslKeyPair *keyPair,
const ssl3CipherSuiteDef *suite,
const PRUint8 *esniKeysHash,
const PRUint8 *keyShareBuf,
unsigned int keyShareBufLen,
const PRUint8 *clientRandom,
ssl3KeyMaterial *keyMat);
SECStatus tls13_FormatEsniAADInput(sslBuffer *aadInput,
PRUint8 *keyShare, unsigned int keyShareLen);
SECStatus tls13_ServerDecryptEsniXtn(const sslSocket *ss, PRUint8 *in, unsigned int inLen,
PRUint8 *out, int *outLen, int maxLen);
#endif