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)); }
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()); }
public void Pascal64StringPattern_FullCharSet_Escaped() { AssertEx.RegexMatch(Pascal64Encoding.Escape(Pascal64Encoding.CharSet), PascalAsciiEncoding.StringPattern); }
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); }