public override async Task <int> Write(IAsn1Serializer serializer, Asn1Boolean item, Stream stream,
                                               CancellationToken cancellationToken)
        {
            var boolean    = (Asn1Boolean)item;
            var identBytes = await SerializerUtility.WriteIdentifier(item.Id, stream, cancellationToken);

            var buffer = new byte[] { 1, boolean.Value?(byte)0xff :(byte)0x00 };
            await stream.WriteBERBytes(buffer, cancellationToken : cancellationToken);

            return(identBytes + buffer.Length);
        }
        public override async Task <int> Write(IAsn1Serializer asn1Serializer, Asn1Set item, Stream stream, CancellationToken cancellationToken)
        {
            var(ms, setItemBytes) =
                await SerializerUtility.WriteItemsToBufferedStream(asn1Serializer, item.Items, cancellationToken);

            var identBytes = await SerializerUtility.WriteIdentifier(item.Id, stream, cancellationToken);

            var lenBytes = await SerializerUtility.WriteLength(setItemBytes, stream, cancellationToken);

            await ms.CopyToAsync(stream, cancellationToken);

            return(identBytes + lenBytes + setItemBytes);
        }
        public override async Task <(Asn1Object, int)> Read(IAsn1Serializer serializer, Identifier id, int length,
                                                            Stream stream, CancellationToken cancellationToken)
        {
            var totalLength = 0;
            var lst         = new List <Asn1Object>();

            while (length > 0)
            {
                var(obj, bytesRead) = await serializer.Read(stream, cancellationToken);

                lst.Add(obj);
                length      -= bytesRead;
                totalLength += bytesRead;
            }
            return(new Asn1Set(lst), totalLength);
        }
示例#4
0
        public static async Task <(MemoryStream ms, int innerLength)> WriteItemsToBufferedStream(
            IAsn1Serializer asn1Serializer, IEnumerable <Asn1Object> items, CancellationToken cancellationToken)
        {
            var ms = new MemoryStream();
            var sequenceItemsBytes = 0;

            foreach (var part in items)
            {
                sequenceItemsBytes += await asn1Serializer.Write(part, ms, cancellationToken);
            }

            await ms.FlushAsync(cancellationToken);

            ms.Position = 0;
            return(ms, sequenceItemsBytes);
        }
示例#5
0
 public CertificateRequestAsn1DEREncoder(IAsn1Serializer serializer)
 {
     this.serializer = serializer;
 }
示例#6
0
 public override async Task <int> Write(IAsn1Serializer asn1Serializer, Asn1Null item, Stream stream, CancellationToken cancellationToken)
 {
     return(await SerializerUtility.WriteIdentifier(item.Id, stream, cancellationToken));
 }
示例#7
0
 public override Task <(Asn1Object, int)> Read(IAsn1Serializer serializer, Identifier id, int length,
                                               Stream stream,
                                               CancellationToken cancellationToken)
 {
     return(Task.FromResult(((Asn1Object) new Asn1Null(), 0)));
 }
 public CertificateRequestAsn1DEREncoder(IAsn1Serializer serializer)
 {
     this.serializer = serializer;
 }
 public CertificateRequestAsn1DEREncoder(IAsn1Serializer serializer)
 {
     this.serializer = serializer ?? throw new ArgumentNullException(nameof(serializer));
 }
 public abstract Task <int> Write(IAsn1Serializer asn1Serializer, Asn1Object item, Stream stream, CancellationToken cancellationToken);
 public abstract Task <(Asn1Object, int)> Read(IAsn1Serializer serializer, Identifier id, int length,
                                               Stream stream,
                                               CancellationToken cancellationToken);