You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
3.2 KiB
104 lines
3.2 KiB
#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) |
|
#pragma warning disable |
|
using System; |
|
using System.Collections; |
|
using System.IO; |
|
|
|
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; |
|
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; |
|
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ntt; |
|
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; |
|
using BestHTTP.SecureProtocol.Org.BouncyCastle.Cms; |
|
using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO; |
|
using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; |
|
using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; |
|
using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; |
|
using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; |
|
|
|
namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Operators |
|
{ |
|
public class Asn1CipherBuilderWithKey : ICipherBuilderWithKey |
|
{ |
|
private readonly KeyParameter encKey; |
|
private AlgorithmIdentifier algorithmIdentifier; |
|
|
|
public Asn1CipherBuilderWithKey(DerObjectIdentifier encryptionOID, int keySize, SecureRandom random) |
|
{ |
|
if (random == null) |
|
{ |
|
random = new SecureRandom(); |
|
} |
|
|
|
CipherKeyGenerator keyGen = CipherKeyGeneratorFactory.CreateKeyGenerator(encryptionOID, random); |
|
|
|
encKey = new KeyParameter(keyGen.GenerateKey()); |
|
algorithmIdentifier = AlgorithmIdentifierFactory.GenerateEncryptionAlgID(encryptionOID, encKey.GetKey().Length * 8, random); |
|
} |
|
|
|
public object AlgorithmDetails |
|
{ |
|
get { return algorithmIdentifier; } |
|
} |
|
|
|
public int GetMaxOutputSize(int inputLen) |
|
{ |
|
throw new NotImplementedException(); |
|
} |
|
|
|
public ICipher BuildCipher(Stream stream) |
|
{ |
|
object cipher = EnvelopedDataHelper.CreateContentCipher(true, encKey, algorithmIdentifier); |
|
|
|
// |
|
// BufferedBlockCipher |
|
// IStreamCipher |
|
// |
|
|
|
if (cipher is IStreamCipher) |
|
{ |
|
cipher = new BufferedStreamCipher((IStreamCipher)cipher); |
|
} |
|
|
|
if (stream == null) |
|
{ |
|
stream = new MemoryStream(); |
|
} |
|
|
|
return new BufferedCipherWrapper((IBufferedCipher)cipher, stream); |
|
} |
|
|
|
public ICipherParameters Key |
|
{ |
|
get { return encKey; } |
|
} |
|
} |
|
|
|
public class BufferedCipherWrapper : ICipher |
|
{ |
|
private readonly IBufferedCipher bufferedCipher; |
|
private readonly CipherStream stream; |
|
|
|
public BufferedCipherWrapper(IBufferedCipher bufferedCipher, Stream source) |
|
{ |
|
this.bufferedCipher = bufferedCipher; |
|
stream = new CipherStream(source, bufferedCipher, bufferedCipher); |
|
} |
|
|
|
public int GetMaxOutputSize(int inputLen) |
|
{ |
|
return bufferedCipher.GetOutputSize(inputLen); |
|
} |
|
|
|
public int GetUpdateOutputSize(int inputLen) |
|
{ |
|
return bufferedCipher.GetUpdateOutputSize(inputLen); |
|
} |
|
|
|
public Stream Stream |
|
{ |
|
get { return stream; } |
|
} |
|
} |
|
} |
|
#pragma warning restore |
|
#endif
|
|
|