123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
- using System;
- using System.IO;
- using Org.BouncyCastle.Utilities.IO;
- namespace Org.BouncyCastle.Asn1
- {
- public class DerOutputStream
- : FilterStream
- {
- public DerOutputStream(Stream os)
- : base(os)
- {
- }
- private void WriteLength(
- int length)
- {
- if (length > 127)
- {
- int size = 1;
- uint val = (uint)length;
- while ((val >>= 8) != 0)
- {
- size++;
- }
- WriteByte((byte)(size | 0x80));
- for (int i = (size - 1) * 8; i >= 0; i -= 8)
- {
- WriteByte((byte)(length >> i));
- }
- }
- else
- {
- WriteByte((byte)length);
- }
- }
- internal void WriteEncoded(
- int tag,
- byte[] bytes)
- {
- WriteByte((byte)tag);
- WriteLength(bytes.Length);
- Write(bytes, 0, bytes.Length);
- }
- internal void WriteEncoded(
- int tag,
- byte first,
- byte[] bytes)
- {
- WriteByte((byte)tag);
- WriteLength(bytes.Length + 1);
- WriteByte(first);
- Write(bytes, 0, bytes.Length);
- }
- internal void WriteEncoded(
- int tag,
- byte[] bytes,
- int offset,
- int length)
- {
- WriteByte((byte)tag);
- WriteLength(length);
- Write(bytes, offset, length);
- }
- internal void WriteTag(
- int flags,
- int tagNo)
- {
- if (tagNo < 31)
- {
- WriteByte((byte)(flags | tagNo));
- }
- else
- {
- WriteByte((byte)(flags | 0x1f));
- if (tagNo < 128)
- {
- WriteByte((byte)tagNo);
- }
- else
- {
- byte[] stack = new byte[5];
- int pos = stack.Length;
- stack[--pos] = (byte)(tagNo & 0x7F);
- do
- {
- tagNo >>= 7;
- stack[--pos] = (byte)(tagNo & 0x7F | 0x80);
- }
- while (tagNo > 127);
- Write(stack, pos, stack.Length - pos);
- }
- }
- }
- internal void WriteEncoded(
- int flags,
- int tagNo,
- byte[] bytes)
- {
- WriteTag(flags, tagNo);
- WriteLength(bytes.Length);
- Write(bytes, 0, bytes.Length);
- }
- protected void WriteNull()
- {
- WriteByte(Asn1Tags.Null);
- WriteByte(0x00);
- }
- [Obsolete("Use version taking an Asn1Encodable arg instead")]
- public virtual void WriteObject(
- object obj)
- {
- if (obj == null)
- {
- WriteNull();
- }
- else if (obj is Asn1Object)
- {
- ((Asn1Object)obj).Encode(this);
- }
- else if (obj is Asn1Encodable)
- {
- ((Asn1Encodable)obj).ToAsn1Object().Encode(this);
- }
- else
- {
- throw new IOException("object not Asn1Object");
- }
- }
- public virtual void WriteObject(
- Asn1Encodable obj)
- {
- if (obj == null)
- {
- WriteNull();
- }
- else
- {
- obj.ToAsn1Object().Encode(this);
- }
- }
- public virtual void WriteObject(
- Asn1Object obj)
- {
- if (obj == null)
- {
- WriteNull();
- }
- else
- {
- obj.Encode(this);
- }
- }
- }
- }
- #endif
|