/* -*- 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