示例#1
0
        public void Encoding_UnescapedString()
        {
            var escaped   = @"\(a\)b\{c\}d\[e\]f\:g\""h\<i\>";
            var unescaped = @"(a)b{c}d[e]f:g""h<i>";

            Assert.AreEqual(unescaped, Pascal64Encoding.Unescape(escaped));
            Assert.AreEqual(unescaped, Pascal64Encoding.Unescape(Pascal64Encoding.Unescape(escaped)));
            Assert.IsFalse(Pascal64Encoding.IsValidUnescaped(escaped));
            Assert.IsTrue(Pascal64Encoding.IsValidUnescaped(unescaped));
        }
示例#2
0
        public void EdgeCase_AllEscapeChars()
        {
            var parser    = NewInstance();
            var name      = @"(a)b{c}d[e]f:g""h<i>";
            var content   = @"""a(b)c:d<e>f[g\h]i{j}";
            var password  = name;
            var epasaText = $@"{Pascal64Encoding.Escape(name)}{{""{PascalAsciiEncoding.Escape(content)}"":{PascalAsciiEncoding.Escape(password)}}}";
            var checksum  = EPasaHelper.ComputeExtendedChecksum(epasaText);

            epasaText = $"{epasaText}:{checksum}";
            Assert.IsTrue(parser.TryParse(epasaText, out var epasa));
            Assert.AreEqual(null, epasa.Account);
            Assert.AreEqual(null, epasa.AccountChecksum);
            Assert.AreEqual(name, epasa.AccountName);
            Assert.AreEqual(checksum, epasa.ExtendedChecksum);
            Assert.AreEqual(password, epasa.Password);
            Assert.AreEqual(PayloadType.AddressedByName | PayloadType.PasswordEncrypted | PayloadType.AsciiFormatted, epasa.PayloadType);
            Assert.AreEqual(content, epasa.Payload);
            Assert.AreEqual(epasaText, epasa.ToString());
        }
示例#3
0
 public void Pascal64StringPattern_FullCharSet_Escaped()
 {
     AssertEx.RegexMatch(Pascal64Encoding.Escape(Pascal64Encoding.CharSet), PascalAsciiEncoding.StringPattern);
 }
示例#4
0
        public string ToString(bool omitExtendedChecksum)
        {
            var result = string.Empty;

            if (PayloadType.HasFlag(PayloadType.AddressedByName))
            {
                result += Pascal64Encoding.Escape(AccountName);
            }
            else
            {
                result += Account.ToString();
                if (AccountChecksum != null)
                {
                    result += $"-{AccountChecksum}";
                }
            }

            var payloadContent = string.Empty;

            if (PayloadType.HasFlag(PayloadType.AsciiFormatted))
            {
                payloadContent = $@"""{PascalAsciiEncoding.Escape(Payload)}""";
            }
            else if (PayloadType.HasFlag(PayloadType.HexFormatted))
            {
                payloadContent = $@"0x{Payload}";
            }
            else if (PayloadType.HasFlag(PayloadType.Base58Formatted))
            {
                payloadContent = $"{Payload}";
            }
            else
            {
                // it is non-deterministic, so payload content is ignored
                payloadContent = string.Empty;
            }

            if (PayloadType.HasFlag(PayloadType.Public))
            {
                result += $"[{payloadContent}]";
            }
            else if (PayloadType.HasFlag(PayloadType.RecipientKeyEncrypted))
            {
                result += $"({payloadContent})";
            }
            else if (PayloadType.HasFlag(PayloadType.SenderKeyEncrypted))
            {
                result += $"<{payloadContent}>";
            }
            else if (PayloadType.HasFlag(PayloadType.PasswordEncrypted))
            {
                result += $"{{{payloadContent}:{PascalAsciiEncoding.Escape(Password)}}}";
            }
            else
            {
                // it is non-deterministic, so payload omitted entirely
            }

            if (ExtendedChecksum != null && !omitExtendedChecksum)
            {
                result += $":{ExtendedChecksum}";
            }

            return(result);
        }