123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
- using System.IO;
- using Org.BouncyCastle.Utilities.IO;
- namespace Org.BouncyCastle.Asn1
- {
- public class BerGenerator
- : Asn1Generator
- {
- private bool _tagged = false;
- private bool _isExplicit;
- private int _tagNo;
- protected BerGenerator(
- Stream outStream)
- : base(outStream)
- {
- }
- public BerGenerator(
- Stream outStream,
- int tagNo,
- bool isExplicit)
- : base(outStream)
- {
- _tagged = true;
- _isExplicit = isExplicit;
- _tagNo = tagNo;
- }
- public override void AddObject(
- Asn1Encodable obj)
- {
- new BerOutputStream(Out).WriteObject(obj);
- }
- public override Stream GetRawOutputStream()
- {
- return Out;
- }
- public override void Close()
- {
- WriteBerEnd();
- }
- private void WriteHdr(
- int tag)
- {
- Out.WriteByte((byte) tag);
- Out.WriteByte(0x80);
- }
- protected void WriteBerHeader(
- int tag)
- {
- if (_tagged)
- {
- int tagNum = _tagNo | Asn1Tags.Tagged;
- if (_isExplicit)
- {
- WriteHdr(tagNum | Asn1Tags.Constructed);
- WriteHdr(tag);
- }
- else
- {
- if ((tag & Asn1Tags.Constructed) != 0)
- {
- WriteHdr(tagNum | Asn1Tags.Constructed);
- }
- else
- {
- WriteHdr(tagNum);
- }
- }
- }
- else
- {
- WriteHdr(tag);
- }
- }
- protected void WriteBerBody(
- Stream contentStream)
- {
- Streams.PipeAll(contentStream, Out);
- }
- protected void WriteBerEnd()
- {
- Out.WriteByte(0x00);
- Out.WriteByte(0x00);
- if (_tagged && _isExplicit) // write extra end for tag header
- {
- Out.WriteByte(0x00);
- Out.WriteByte(0x00);
- }
- }
- }
- }
- #endif
|