/// <summary> /// Preps a name according to the Stringprep profile defined in /// RFC3491. /// * /// </summary> /// <param name="input"> /// the name to prep. /// </param> /// <param name="allowUnassigned"> /// true if the name may contain unassigned /// code points. /// </param> /// <returns> /// the prepped name. /// @throws StringprepException If the name cannot be prepped with /// this profile. /// @throws NullPointerException If the name is null. /// </returns> public static string NamePrep(string input, bool allowUnassigned) { if (input == null) { throw new NullReferenceException(); } var s = new StringBuilder(input); if (!allowUnassigned && Contains(s, RFC3454.A1)) { throw new StringprepException(StringprepException.ContainsUnassigned); } Filter(s, RFC3454.B1); Map(s, RFC3454.B2search, RFC3454.B2replace); s = new StringBuilder(NFKC.NormalizeNFKC(s.ToString())); // B.3 is only needed if NFKC is not used, right? // map(s, RFC3454.B3search, RFC3454.B3replace); if (Contains(s, RFC3454.C12) || Contains(s, RFC3454.C22) || Contains(s, RFC3454.C3) || Contains(s, RFC3454.C4) || Contains(s, RFC3454.C5) || Contains(s, RFC3454.C6) || Contains(s, RFC3454.C7) || Contains(s, RFC3454.C8)) { // Table C.9 only contains code points > 0xFFFF which Java // doesn't handle throw new StringprepException(StringprepException.ContainsProhibited); } // Bidi handling bool r = Contains(s, RFC3454.D1); bool l = Contains(s, RFC3454.D2); // RFC 3454, section 6, requirement 1: already handled above (table C.8) // RFC 3454, section 6, requirement 2 if (r && l) { throw new StringprepException(StringprepException.BidiBothral); } // RFC 3454, section 6, requirement 3 if (r) { if (!Contains(s[0], RFC3454.D1) || !Contains(s[s.Length - 1], RFC3454.D1)) { throw new StringprepException(StringprepException.BidiLtral); } } return(s.ToString()); }
/// <summary> /// Preps a node name according to the Stringprep profile defined in RFC3920. /// </summary> /// <param name="input">the node name to prep. /// </param> /// <param name="allowUnassigned">true if the node name may contain /// unassigned code points. /// </param> /// <returns> the prepped node name. /// @throws StringprepException If the node name cannot be prepped /// with this profile. /// @throws NullPointerException If the node name is null. /// /// </returns> public static string NodePrep(string input, bool allowUnassigned) { if (input == null) { throw new System.NullReferenceException(); } StringBuilder s = new StringBuilder(input); if (!allowUnassigned && Contains(s, RFC3454.A1)) { throw new StringprepException(StringprepException.CONTAINS_UNASSIGNED); } Filter(s, RFC3454.B1); Map(s, RFC3454.B2search, RFC3454.B2replace); s = new StringBuilder(NFKC.NormalizeNFKC(s.ToString())); if (Contains(s, RFC3454.C11) || Contains(s, RFC3454.C12) || Contains(s, RFC3454.C21) || Contains(s, RFC3454.C22) || Contains(s, RFC3454.C3) || Contains(s, RFC3454.C4) || Contains(s, RFC3454.C5) || Contains(s, RFC3454.C6) || Contains(s, RFC3454.C7) || Contains(s, RFC3454.C8) || Contains(s, RFC3920_NODEPREP_PROHIBIT)) { // Table C.9 only contains code points > 0xFFFF which Java // doesn't handle throw new StringprepException(StringprepException.CONTAINS_PROHIBITED); } // Bidi handling bool r = Contains(s, RFC3454.D1); bool l = Contains(s, RFC3454.D2); // RFC 3454, section 6, requirement 1: already handled above (table C.8) // RFC 3454, section 6, requirement 2 if (r && l) { throw new StringprepException(StringprepException.BIDI_BOTHRAL); } // RFC 3454, section 6, requirement 3 if (r) { if (!Contains(s[0], RFC3454.D1) || !Contains(s[s.Length - 1], RFC3454.D1)) { throw new StringprepException(StringprepException.BIDI_LTRAL); } } return(s.ToString()); }
/// <summary> /// The sasl prep. /// </summary> /// <param name="input"> /// The input. /// </param> /// <param name="allowUnsigned"> /// The allow unsigned. /// </param> /// <returns> /// The <see cref="string"/>. /// </returns> /// <exception cref="ArgumentNullException"> /// </exception> /// <exception cref="StringprepException"> /// </exception> public static string SASLPrep(string input, bool allowUnsigned = false) { if (input == null) { throw new ArgumentNullException("input"); } var s = new StringBuilder(input); if (!allowUnsigned && Contains(s, RFC3454.A1)) { throw new StringprepException(StringprepException.ContainsUnassigned); } Filter(s, RFC3454.B1); Map(s, RFC3454.C12, SASLPREP_SPACE_MAP); s = new StringBuilder(NFKC.NormalizeNFKC(s.ToString())); if (Contains(s, RFC3454.C12) || Contains(s, RFC3454.C21) || Contains(s, RFC3454.C22) || Contains(s, RFC3454.C3) || Contains(s, RFC3454.C4) || Contains(s, RFC3454.C5) || Contains(s, RFC3454.C6) || Contains(s, RFC3454.C7) || Contains(s, RFC3454.C8)) { throw new StringprepException(StringprepException.ContainsProhibited); } bool r = Contains(s, RFC3454.D1); bool l = Contains(s, RFC3454.D2); if (r && l) { throw new StringprepException(StringprepException.BidiBothral); } if (r) { if (!Contains(s[0], RFC3454.D1) || !Contains(s[s.Length - 1], RFC3454.D1)) { throw new StringprepException(StringprepException.BidiLtral); } } return(s.ToString()); }
public static string SASLPrep(string input, bool allowUnsigned = false) { if (input == null) { throw new ArgumentNullException("input"); } StringBuilder s = new StringBuilder(input); if (!allowUnsigned && Contains(s, RFC3454.A1)) { throw new StringprepException(StringprepException.CONTAINS_UNASSIGNED); } Filter(s, RFC3454.B1); Map(s, RFC3454.C12, SASLPREP_SPACE_MAP); s = new StringBuilder(NFKC.NormalizeNFKC(s.ToString())); if (Contains(s, RFC3454.C12) || Contains(s, RFC3454.C21) || Contains(s, RFC3454.C22) || Contains(s, RFC3454.C3) || Contains(s, RFC3454.C4) || Contains(s, RFC3454.C5) || Contains(s, RFC3454.C6) || Contains(s, RFC3454.C7) || Contains(s, RFC3454.C8)) { throw new StringprepException(StringprepException.CONTAINS_PROHIBITED); } bool r = Contains(s, RFC3454.D1); bool l = Contains(s, RFC3454.D2); if (r && l) { throw new StringprepException(StringprepException.BIDI_BOTHRAL); } if (r) { if (!Contains(s[0], RFC3454.D1) || !Contains(s[s.Length - 1], RFC3454.D1)) { throw new StringprepException(StringprepException.BIDI_LTRAL); } } return(s.ToString()); }