培训考核三期,新版培训,网页版培训登录器
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

#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