public override void Close()
 {
     if (_off != 0)
     {
         DerOctetString.Encode(_derOut, _buf, 0, _off);
     }
     _gen.WriteBerEnd();
     base.Close();
 }
 public override void WriteByte(byte b)
 {
     _buf[_off++] = b;
     if (_off == _buf.Length)
     {
         DerOctetString.Encode(_derOut, _buf, 0, _off);
         _off = 0;
     }
 }
 public override void Write(byte[] buf, int offset, int len)
 {
     while (len > 0)
     {
         int num = Math.Min(len, _buf.Length - _off);
         if (num == _buf.Length)
         {
             DerOctetString.Encode(_derOut, buf, offset, num);
         }
         else
         {
             Array.Copy(buf, offset, _buf, _off, num);
             _off += num;
             if (_off < _buf.Length)
             {
                 break;
             }
             DerOctetString.Encode(_derOut, _buf, 0, _off);
             _off = 0;
         }
         offset += num;
         len    -= num;
     }
 }