- Initial commit
This commit is contained in:
97
Runtime/3rdParty/BouncyCastle/crypto/operators/Asn1CipherBuilder.cs
vendored
Normal file
97
Runtime/3rdParty/BouncyCastle/crypto/operators/Asn1CipherBuilder.cs
vendored
Normal file
@ -0,0 +1,97 @@
|
||||
#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
|
||||
#pragma warning disable
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
using Best.HTTP.SecureProtocol.Org.BouncyCastle.Asn1;
|
||||
using Best.HTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509;
|
||||
using Best.HTTP.SecureProtocol.Org.BouncyCastle.Cms;
|
||||
using Best.HTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO;
|
||||
using Best.HTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters;
|
||||
using Best.HTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities;
|
||||
using Best.HTTP.SecureProtocol.Org.BouncyCastle.Security;
|
||||
|
||||
namespace Best.HTTP.SecureProtocol.Org.BouncyCastle.Crypto.Operators
|
||||
{
|
||||
public class Asn1CipherBuilderWithKey : ICipherBuilderWithKey
|
||||
{
|
||||
private readonly KeyParameter encKey;
|
||||
private AlgorithmIdentifier algorithmIdentifier;
|
||||
|
||||
public Asn1CipherBuilderWithKey(DerObjectIdentifier encryptionOID, int keySize, SecureRandom random)
|
||||
{
|
||||
random = CryptoServicesRegistrar.GetSecureRandom(random);
|
||||
|
||||
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
|
||||
Reference in New Issue
Block a user