Beispiel #1
0
        public override CborWriter Write(CborWriter writer)
        {
            base.Write(writer);

            writer.Write(Value);
            return writer;
        }
        public static void WriteEncodedValue_RootValue_HappyPath(string hexEncodedValue)
        {
            byte[] encodedValue = hexEncodedValue.HexToByteArray();

            var writer = new CborWriter();

            writer.WriteEncodedValue(encodedValue);

            string hexResult = writer.Encode().ByteArrayToHex();

            Assert.Equal(hexEncodedValue, hexResult.ToLower());
        }
Beispiel #3
0
        public void DecodeSign1_IncorrectStructure()
        {
            var writer = new CborWriter();

            writer.WriteStartArray(4);
            writer.WriteNull();
            writer.WriteNull();
            writer.WriteNull();
            writer.WriteNull();
            writer.WriteEndArray();
            Assert.Throws <CryptographicException>(() => CoseMessage.DecodeSign1(writer.Encode()));
        }
Beispiel #4
0
        public static void WriteEncodedValue_IndefiniteLengthByteString_HappyPath()
        {
            var writer = new CborWriter(convertIndefiniteLengthEncodings: false);

            writer.WriteStartIndefiniteLengthByteString();
            writer.WriteByteString(new byte[] { 1, 1, 1 });
            writer.WriteEncodedValue("43020202".HexToByteArray());
            writer.WriteEndIndefiniteLengthByteString();

            byte[] encoding = writer.Encode();
            Assert.Equal("5f4301010143020202ff", encoding.ByteArrayToHex().ToLower());
        }
Beispiel #5
0
        public static void WriteEncodedValue_IndefiniteLengthTextString_HappyPath()
        {
            var writer = new CborWriter(convertIndefiniteLengthEncodings: false);

            writer.WriteStartIndefiniteLengthTextString();
            writer.WriteTextString("foo");
            writer.WriteEncodedValue("63626172".HexToByteArray());
            writer.WriteEndIndefiniteLengthTextString();

            byte[] encoding = writer.Encode();
            Assert.Equal("7f63666f6f63626172ff", encoding.ByteArrayToHex().ToLower());
        }
Beispiel #6
0
        public static void EncodeSpan_DestinationTooSmall_ShouldThrowArgumentException(object value)
        {
            var writer = new CborWriter();

            Helpers.WriteValue(writer, value);

            byte[] encoding = writer.Encode();
            byte[] target   = new byte[encoding.Length - 1];

            Assert.Throws <ArgumentException>(() => writer.Encode(target));
            Assert.All(target, b => Assert.Equal(0, b));
        }
Beispiel #7
0
        public static void WriteMap(this CborWriter writer, CborMap map)
        {
            writer.WriteStartMap(map.Count);

            foreach (var item in map)
            {
                WriteObject(writer, item.Key);
                WriteObject(writer, item.Value);
            }

            writer.WriteEndMap();
        }
        public static void Roundtrip_Int64(long input)
        {
            var writer = new CborWriter();

            writer.WriteInt64(input);
            byte[] encoding = writer.Encode();

            var  reader = new CborReader(encoding);
            long result = reader.ReadInt64();

            Assert.Equal(input, result);
        }
Beispiel #9
0
        public static void WriteEncodedValue_IndefiniteLengthTextString_HappyPath()
        {
            using var writer = new CborWriter(encodeIndefiniteLengths: true);

            writer.WriteStartTextString();
            writer.WriteTextString("foo");
            writer.WriteEncodedValue("63626172".HexToByteArray());
            writer.WriteEndTextString();

            byte[] encoding = writer.GetEncoding();
            Assert.Equal("7f63666f6f63626172ff", encoding.ByteArrayToHex().ToLower());
        }
        public static void Roundtrip_TextString(string input)
        {
            var writer = new CborWriter();

            writer.WriteTextString(input);
            byte[] encoding = writer.Encode();

            var    reader = new CborReader(encoding);
            string result = reader.ReadTextString();

            Assert.Equal(input ?? "", result);
        }
        public static string Write <T>(T value, CborOptions options = null)
        {
            options = options ?? CborOptions.Default;

            using (ByteBufferWriter bufferWriter = new ByteBufferWriter())
            {
                CborWriter         writer    = new CborWriter(bufferWriter);
                ICborConverter <T> converter = options.Registry.ConverterRegistry.Lookup <T>();
                converter.Write(ref writer, value);
                return(BitConverter.ToString(bufferWriter.WrittenSpan.ToArray()).Replace("-", ""));
            }
        }
Beispiel #12
0
        public static void Roundtrip_Decimal(CborConformanceMode mode, decimal input)
        {
            var writer = new CborWriter();

            writer.WriteDecimal(input);
            byte[] encoding = writer.Encode();

            var     reader = new CborReader(encoding);
            decimal result = reader.ReadDecimal();

            Assert.Equal(input, result);
        }
        public static void WriteEndArray_DefiniteLengthNotMet_ShouldThrowInvalidOperationException(int definiteLength)
        {
            var writer = new CborWriter();

            writer.WriteStartArray(definiteLength);
            for (int i = 1; i < definiteLength; i++)
            {
                writer.WriteInt64(i);
            }

            Assert.Throws <InvalidOperationException>(() => writer.WriteEndArray());
        }
        public static void EndWriteMap_DefiniteLengthNotMet_ShouldThrowInvalidOperationException(int definiteLength)
        {
            using var writer = new CborWriter();
            writer.WriteStartMap(definiteLength);
            for (int i = 1; i < definiteLength; i++)
            {
                writer.WriteTextString($"key_{i}");
                writer.WriteInt64(i);
            }

            Assert.Throws <InvalidOperationException>(() => writer.WriteEndMap());
        }
Beispiel #15
0
        public static void Roundtrip_ByteString(CborConformanceMode mode, byte[] input)
        {
            var writer = new CborWriter(mode);

            writer.WriteByteString(input);
            byte[] encoding = writer.Encode();

            var reader = new CborReader(encoding, mode);

            byte[] result = reader.ReadByteString();
            AssertHelper.HexEqual(input, result);
        }
Beispiel #16
0
        public static void Roundtrip_TextString(CborConformanceMode mode, string input)
        {
            var writer = new CborWriter(mode);

            writer.WriteTextString(input);
            byte[] encoding = writer.Encode();

            var    reader = new CborReader(encoding, mode);
            string result = reader.ReadTextString();

            Assert.Equal(input, result);
        }
Beispiel #17
0
        public static void Roundtrip_UInt64(CborConformanceMode mode, ulong input)
        {
            var writer = new CborWriter(mode);

            writer.WriteUInt64(input);
            byte[] encoding = writer.Encode();

            var   reader = new CborReader(encoding, mode);
            ulong result = reader.ReadUInt64();

            Assert.Equal(input, result);
        }
Beispiel #18
0
        public static void Roundtrip_NegativeInteger(CborConformanceMode mode, ulong input)
        {
            var writer = new CborWriter(mode);

            writer.WriteCborNegativeIntegerRepresentation(input);
            byte[] encoding = writer.Encode();

            var   reader = new CborReader(encoding, mode);
            ulong result = reader.ReadCborNegativeIntegerRepresentation();

            Assert.Equal(input, result);
        }
        public static void Roundtrip_ByteString(string hexInput)
        {
            byte[] input = hexInput.HexToByteArray();
#endif
            var writer = new CborWriter();
            writer.WriteByteString(input);
            byte[] encoding = writer.Encode();

            var    reader = new CborReader(encoding);
            byte[] result = reader.ReadByteString();
            AssertHelper.HexEqual(input ?? Array.Empty <byte>(), result);
        }
Beispiel #20
0
        public static void ByteString_Encoding_ShouldContainInputBytes(CborConformanceMode mode, byte[] input)
        {
            var writer = new CborWriter(mode);

            writer.WriteByteString(input);
            byte[] encoding = writer.Encode();

            int length = input?.Length ?? 0;
            int lengthEncodingLength = GetLengthEncodingLength(length);

            Assert.Equal(lengthEncodingLength + length, encoding.Length);
            AssertHelper.HexEqual(input ?? Array.Empty <byte>(), encoding.Skip(lengthEncodingLength).ToArray());
Beispiel #21
0
        public static void Roundtrip_Half(CborConformanceMode mode, Half input)
        {
            var writer = new CborWriter(mode);

            writer.WriteHalf(input);
            byte[] encoding = writer.Encode();

            var  reader = new CborReader(encoding, mode);
            Half result = reader.ReadHalf();

            Assert.Equal(input, result);
        }
Beispiel #22
0
        public static void CborWriter_MultipleRootLevelValuesAllowed_WritingMultipleRootValues_HappyPath(object value, int repetitions, string expectedHexEncoding)
        {
            byte[] expectedEncoding = expectedHexEncoding.HexToByteArray();
            using var writer = new CborWriter(allowMultipleRootLevelValues: true);

            for (int i = 0; i < repetitions; i++)
            {
                Helpers.WriteValue(writer, value);
            }

            AssertHelper.HexEqual(expectedEncoding, writer.GetEncoding());
        }
Beispiel #23
0
        public static void WriteTag_NestedTags_HappyPath(ulong[] tags, object value, string hexExpectedEncoding)
        {
            byte[] expectedEncoding = hexExpectedEncoding.HexToByteArray();
            var    writer           = new CborWriter();

            foreach (ulong tag in tags)
            {
                writer.WriteTag((CborTag)tag);
            }
            Helpers.WriteValue(writer, value);
            AssertHelper.HexEqual(expectedEncoding, writer.Encode());
        }
Beispiel #24
0
        public static void WriteEncodedValue_IndefiniteLengthByteString_HappyPath()
        {
            using var writer = new CborWriter(encodeIndefiniteLengths: true);

            writer.WriteStartByteString();
            writer.WriteByteString(new byte[] { 1, 1, 1 });
            writer.WriteEncodedValue("43020202".HexToByteArray());
            writer.WriteEndByteString();

            byte[] encoding = writer.GetEncoding();
            Assert.Equal("5f4301010143020202ff", encoding.ByteArrayToHex().ToLower());
        }
Beispiel #25
0
        public override void Write(ref CborWriter writer, DateTime value)
        {
            switch (_options.DateTimeFormat)
            {
            case DateTimeFormat.ISO8601:
                writer.WriteString(value.ToString("yyyy-MM-dd'T'HH:mm:ss.FFFK"));
                break;

            case DateTimeFormat.Unix:
                writer.WriteInt64(new DateTimeOffset(value).ToUnixTimeSeconds());
                break;
            }
        }
        public static void ByteString_Encoding_ShouldContainInputBytes(string hexInput)
        {
            byte[] input = hexInput.HexToByteArray();
#endif
            var writer = new CborWriter();
            writer.WriteByteString(input);
            byte[] encoding = writer.Encode();

            int length = input?.Length ?? 0;
            int lengthEncodingLength = GetLengthEncodingLength(length);

            Assert.Equal(lengthEncodingLength + length, encoding.Length);
            AssertHelper.HexEqual(input ?? Array.Empty <byte>(), encoding.Skip(lengthEncodingLength).ToArray());
        public static void GetEncoding_MultipleRootLevelValuesAllowed_PartialRootValue_ShouldThrowInvalidOperationException()
        {
            var writer = new CborWriter(allowMultipleRootLevelValues: true);

            writer.WriteStartArray(1);
            writer.WriteDouble(3.14);
            writer.WriteEndArray();
            writer.WriteStartArray(1);
            writer.WriteDouble(3.14);
            // misses writer.WriteEndArray();

            Assert.Throws <InvalidOperationException>(() => writer.Encode());
        }
Beispiel #28
0
        public void SignWithCborNegativeIntegerRepresentationAlgorithmHeaderValue(ulong value)
        {
            var writer = new CborWriter();

            writer.WriteCborNegativeIntegerRepresentation(value);
            ReadOnlySpan <byte> encodedValue = writer.Encode();

            CoseHeaderMap protectedHeaders = new CoseHeaderMap();

            protectedHeaders[CoseHeaderLabel.Algorithm] = CoseHeaderValue.FromEncodedValue(encodedValue);

            Assert.Throws <CryptographicException>(() => Sign(s_sampleContent, DefaultKey, DefaultHash, protectedHeaders));
        }
        public static void WriteArray_DefiniteLengthExceeded_WithNestedData_ShouldThrowInvalidOperationException(int definiteLength)
        {
            using var writer = new CborWriter();
            writer.WriteStartArray(definiteLength);
            for (int i = 0; i < definiteLength; i++)
            {
                writer.WriteStartArray(definiteLength: 1);
                writer.WriteInt64(i);
                writer.WriteEndArray();
            }

            Assert.Throws <InvalidOperationException>(() => writer.WriteInt64(0));
        }
Beispiel #30
0
        public static CoseHeaderValue FromString(string value)
        {
            if (value == null)
            {
                throw new ArgumentNullException(nameof(value));
            }

            var writer = new CborWriter();

            writer.WriteTextString(value);

            return(FromEncodedValue(Encode(writer)));
        }
Beispiel #31
0
        public static void WriteTag_NoValue_ShouldThrowInvalidOperationException(ulong[] tags)
        {
            using var writer = new CborWriter();

            foreach (ulong tag in tags)
            {
                writer.WriteTag((CborTag)tag);
            }

            InvalidOperationException exn = Assert.Throws <InvalidOperationException>(() => writer.GetEncoding());

            Assert.Equal("Buffer contains incomplete CBOR document.", exn.Message);
        }
Beispiel #32
0
        public override CborWriter Write(CborWriter writer)
        {
            base.Write(writer);

            writer.WriteArray(Value.Count());
            foreach (var cborObject in Value)
            {
                cborObject.Write(writer);
            }
            return writer;
        }
Beispiel #33
0
 public byte[] Serialize()
 {
     using (MemoryStream memory = new MemoryStream())
     {
         CborWriter writer = new CborWriter(memory);
         this.Write(writer);
         return memory.ToArray();
     }
 }
Beispiel #34
0
        public virtual CborWriter Write(CborWriter writer)
        {
            if (this.Tag != null)
            {
                writer.WriteTag(this.Tag);
            }

            return writer;
        }