Exemple #1
0
        public override byte[] ToBytes()
        {
            var s    = (string)Value;
            var addr = s.Split(':');

            if (addr.Length != 2)
            {
                throw new Exception("Failed to parse addr");
            }

            if (addr[0].Length != 16)
            {
                throw new Exception("Failed to parse addr");
            }

            if (!Multibase.TryDecode(addr[0], out var encoding, out var onionHostBytes) || encoding != MultibaseEncoding.Base32Lower)
            {
                throw new InvalidOperationException($"{s} is not a valid onion address.");
            }

            var i = ushort.Parse(addr[1]);

            if (i < 1)
            {
                throw new Exception("Failed to parse addr");
            }

            return(onionHostBytes.Concat(Binary.BigEndian.GetBytes(i)).ToArray());
        }
Exemple #2
0
        public override void Decode(string value)
        {
            var addr = value.Split(':');

            if (addr.Length != 2)
            {
                throw new Exception("Failed to parse addr");
            }

            if (addr[0].Length != 16)
            {
                throw new Exception("Failed to parse addr");
            }

            if (!Multibase.TryDecode(addr[0], out var encoding, out _) || encoding != MultibaseEncoding.Base32Lower)
            {
                throw new InvalidOperationException($"{value} is not a valid onion address.");
            }

            var i = ushort.Parse(addr[1]);

            if (i < 1)
            {
                throw new Exception("Failed to parse addr");
            }

            Value = value;
        }
Exemple #3
0
        public void TestTryDecoding_GivenValidEncodedInput_Unprefixed(string input, MultibaseEncoding encoding)
        {
            var expected = "Decentralize everything!!";
            var result   = Multibase.TryDecode(input, out var decodedEncoding, out var decodedBytes);

            Assert.True(result);
            Assert.Equal(encoding, decodedEncoding);
            Assert.Equal(expected, Encoding.UTF8.GetString(decodedBytes));
        }
Exemple #4
0
 public async Task TestBase58ConcurrentDecoding()
 {
     var tasks = Enumerable.Range(1, 10).Select(_ => Task.Run(() =>
     {
         var success = Multibase.TryDecode("Z6BLZQNPgws5ahFtr8x", out var encoding, out var bytes);
         Assert.True(success);
         Assert.Equal(MultibaseEncoding.Base58Flickr, encoding);
         Assert.Equal("Concurrency !", Encoding.UTF8.GetString(bytes, 0, bytes.Length));
     }));
     await Task.WhenAll(tasks);
 }