#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) #pragma warning disable using System; using System.IO; using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto { /// Service and object creation interface for the primitive types and services that are associated with /// cryptography in the API. public interface TlsCrypto { /// Return true if this TlsCrypto can perform raw signatures and verifications for all supported /// algorithms. /// true if this instance can perform raw signatures and verifications for all supported algorithms, /// false otherwise. bool HasAllRawSignatureAlgorithms(); /// Return true if this TlsCrypto can support DH key agreement. /// true if this instance can support DH key agreement, false otherwise. bool HasDHAgreement(); /// Return true if this TlsCrypto can support ECDH key agreement. /// true if this instance can support ECDH key agreement, false otherwise. bool HasECDHAgreement(); /// Return true if this TlsCrypto can support the passed in block/stream encryption algorithm. /// /// the algorithm of interest. /// true if encryptionAlgorithm is supported, false otherwise. bool HasEncryptionAlgorithm(int encryptionAlgorithm); /// Return true if this TlsCrypto can support the passed in hash algorithm. /// the algorithm of interest. /// true if cryptoHashAlgorithm is supported, false otherwise. bool HasCryptoHashAlgorithm(int cryptoHashAlgorithm); /// Return true if this TlsCrypto can support the passed in signature algorithm (not necessarily in /// combination with EVERY hash algorithm). /// the algorithm of interest. /// true if cryptoSignatureAlgorithm is supported, false otherwise. bool HasCryptoSignatureAlgorithm(int cryptoSignatureAlgorithm); /// Return true if this TlsCrypto can support the passed in MAC algorithm. /// the algorithm of interest. /// true if macAlgorithm is supported, false otherwise. bool HasMacAlgorithm(int macAlgorithm); /// Return true if this TlsCrypto supports the passed in named group /// value. /// true if this instance supports the passed in named group value. /// bool HasNamedGroup(int namedGroup); /// Return true if this TlsCrypto can support RSA encryption/decryption. /// true if this instance can support RSA encryption/decryption, false otherwise. bool HasRsaEncryption(); /// Return true if this TlsCrypto can support the passed in signature algorithm (not necessarily in /// combination with EVERY hash algorithm). /// true if signatureAlgorithm is supported, false otherwise. bool HasSignatureAlgorithm(short signatureAlgorithm); /// Return true if this TlsCrypto can support the passed in signature algorithm. /// the algorithm of interest. /// true if sigAndHashAlgorithm is supported, false otherwise. bool HasSignatureAndHashAlgorithm(SignatureAndHashAlgorithm sigAndHashAlgorithm); /// Return true if this TlsCrypto can support the passed in signature scheme. /// the scheme of interest. /// true if signatureScheme is supported, false otherwise. bool HasSignatureScheme(int signatureScheme); /// Return true if this TlsCrypto can support SRP authentication. /// true if this instance can support SRP authentication, false otherwise. bool HasSrpAuthentication(); /// Create a TlsSecret object based on provided data. /// the data to base the TlsSecret on. /// a TlsSecret based on the provided data. TlsSecret CreateSecret(byte[] data); /// Create a TlsSecret object containing a randomly-generated RSA PreMasterSecret /// the client version to place in the first 2 bytes /// a TlsSecret containing the PreMasterSecret. TlsSecret GenerateRsaPreMasterSecret(ProtocolVersion clientVersion); /// Return the primary (safest) SecureRandom for this crypto. /// a SecureRandom suitable for key generation. SecureRandom SecureRandom { get; } /// Create a TlsCertificate from an ASN.1 binary encoding of an X.509 certificate. /// DER/BER encoding of the certificate of interest. /// a TlsCertificate. /// if there is an issue on decoding or constructing the certificate. TlsCertificate CreateCertificate(byte[] encoding); /// Create a cipher for the specified encryption and MAC algorithms. /// /// See enumeration classes , for appropriate /// argument values. /// /// context specific parameters. /// the encryption algorithm to be employed by the cipher. /// the MAC algorithm to be employed by the cipher. /// a implementing the encryption and MAC algorithms. /// TlsCipher CreateCipher(TlsCryptoParameters cryptoParams, int encryptionAlgorithm, int macAlgorithm); /// Create a domain object supporting the domain parameters described in dhConfig. /// the config describing the DH parameters to use. /// a TlsDHDomain supporting the parameters in dhConfig. TlsDHDomain CreateDHDomain(TlsDHConfig dhConfig); /// Create a domain object supporting the domain parameters described in ecConfig. /// the config describing the EC parameters to use. /// a TlsECDomain supporting the parameters in ecConfig. TlsECDomain CreateECDomain(TlsECConfig ecConfig); /// Adopt the passed in secret, creating a new copy of it. /// the secret to make a copy of. /// a TlsSecret based on the original secret. TlsSecret AdoptSecret(TlsSecret secret); /// Create a suitable hash for the hash algorithm identifier passed in. /// /// See enumeration class for appropriate argument values. /// /// the hash algorithm the hash needs to implement. /// a . TlsHash CreateHash(int cryptoHashAlgorithm); /// Create a suitable HMAC for the MAC algorithm identifier passed in. /// /// See enumeration class for appropriate argument values. /// /// the MAC algorithm the HMAC needs to match. /// a . TlsHmac CreateHmac(int macAlgorithm); /// Create a suitable HMAC using the hash algorithm identifier passed in. /// /// See enumeration class for appropriate argument values. /// /// the hash algorithm the HMAC should use. /// a . TlsHmac CreateHmacForHash(int cryptoHashAlgorithm); /// Create a nonce generator. /// /// Each call should construct a new generator, and the generator should be returned from this call only after /// automatically seeding from this 's entropy source, and from the provided additional /// seed material. The output of each returned generator must be completely independent of the others. /// /// context-specific seed material /// a . TlsNonceGenerator CreateNonceGenerator(byte[] additionalSeedMaterial); /// Create an SRP-6 client. /// client config. /// an initialised SRP6 client object. TlsSrp6Client CreateSrp6Client(TlsSrpConfig srpConfig); /// Create an SRP-6 server. /// server config. /// the SRP6 verifier value. /// an initialised SRP6 server object. TlsSrp6Server CreateSrp6Server(TlsSrpConfig srpConfig, BigInteger srpVerifier); /// Create an SRP-6 verifier generator. /// generator config. /// an initialized SRP6 verifier generator. TlsSrp6VerifierGenerator CreateSrp6VerifierGenerator(TlsSrpConfig srpConfig); /// Setup an initial "secret" for a chain of HKDF calls (RFC 5869), containing a string of HashLen /// zeroes. /// the hash algorithm to instantiate HMAC with. See /// for values. TlsSecret HkdfInit(int cryptoHashAlgorithm); } } #pragma warning restore #endif