public void Encoding_UnescapedString() { var unescaped = @"""a(b)c:d<e>f[g\h]i{j}"; var escaped = @"\""a\(b\)c\:d\<e\>f\[g\\h\]i\{j\}"; Assert.AreEqual(unescaped, PascalAsciiEncoding.Unescape(escaped)); Assert.AreEqual(unescaped, PascalAsciiEncoding.Unescape(PascalAsciiEncoding.Unescape(escaped))); Assert.IsTrue(PascalAsciiEncoding.IsValidUnescaped(escaped)); // escaped string is also valid as unescaped, since \ is allowed Assert.IsTrue(PascalAsciiEncoding.IsValidUnescaped(unescaped)); }
public void Encoding_EscapeString() { var unescaped = @"""a(b)c:d<e>f[g\h]i{j}"; var escaped = @"\""a\(b\)c\:d\<e\>f\[g\\h\]i\{j\}"; Assert.AreEqual(escaped, PascalAsciiEncoding.Escape(unescaped)); Assert.AreEqual(escaped, PascalAsciiEncoding.Escape(PascalAsciiEncoding.Escape(unescaped))); Assert.IsTrue(PascalAsciiEncoding.IsValidEscaped(escaped)); Assert.IsTrue(PascalAsciiEncoding.IsValidEscaped(unescaped)); // unescaped is also a valid escaped string (unlike pascal64 encoding) }
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 PascalAsciiStringPattern_FullCharSet_Escaped() { AssertEx.RegexMatch(PascalAsciiEncoding.Escape(PascalAsciiEncoding.CharSet), PascalAsciiEncoding.StringPattern); }
public static bool IsValidPayloadLength(PayloadType payloadType, string payloadContent) { if (string.IsNullOrEmpty(payloadContent)) { return(true); } if (payloadType.HasFlag(PayloadType.Public)) { if (payloadType.HasFlag(PayloadType.AsciiFormatted)) { return(PascalAsciiEncoding.Unescape(payloadContent).Length <= MaxPublicAsciiContentLength); } if (payloadType.HasFlag(PayloadType.HexFormatted)) { return(payloadContent.Length <= MaxPublicHexContentLength); } if (payloadType.HasFlag(PayloadType.Base58Formatted)) { return(payloadContent.Length <= MaxPublicBase58ContentLength); } // unknown encoding format return(false); } if (payloadType.HasFlag(PayloadType.SenderKeyEncrypted) || payloadType.HasFlag(PayloadType.RecipientKeyEncrypted)) { if (payloadType.HasFlag(PayloadType.AsciiFormatted)) { return(PascalAsciiEncoding.Unescape(payloadContent).Length <= MaxECIESAsciiContentLength); } if (payloadType.HasFlag(PayloadType.HexFormatted)) { return(payloadContent.Length <= MaxECIESHexContentLength); } if (payloadType.HasFlag(PayloadType.Base58Formatted)) { return(payloadContent.Length <= MaxECIESBase58ContentLength); } // unknown encoding format return(false); } if (payloadType.HasFlag(PayloadType.PasswordEncrypted)) { if (payloadType.HasFlag(PayloadType.AsciiFormatted)) { return(PascalAsciiEncoding.Unescape(payloadContent).Length <= MaxAESAsciiContentLength); } if (payloadType.HasFlag(PayloadType.HexFormatted)) { return(payloadContent.Length <= MaxAESHexContentLength); } if (payloadType.HasFlag(PayloadType.Base58Formatted)) { return(payloadContent.Length <= MaxAESBase58ContentLength); } // unknown encoding format return(false); } // unknown encryption format return(false); }
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); }