Mega Code Archive

 
Categories / C# / File Stream
 

Checks if the input byte array contains only safe values, the data does not need to be encoded for use with LDIF

/****************************************************************************** * The MIT License * Copyright (c) 2003 Novell Inc.  www.novell.com *  * Permission is hereby granted, free of charge, to any person obtaining  a copy * of this software and associated documentation files (the Software), to deal * in the Software without restriction, including  without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell  * copies of the Software, and to  permit persons to whom the Software is  * furnished to do so, subject to the following conditions: *  * The above copyright notice and this permission notice shall be included in  * all copies or substantial portions of the Software. *  * THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. *******************************************************************************/ // // Novell.Directory.Ldap.Utilclass.Base64.cs // // Author: //   Sunil Kumar (Sunilk@novell.com) // // (C) 2003 Novell, Inc (http://www.novell.com) // using System; namespace Novell.Directory.Ldap.Utilclass {      /// <summary> The Base64 utility class performs base64 encoding and decoding.   ///    /// The Base64 Content-Transfer-Encoding is designed to represent   /// arbitrary sequences of octets in a form that need not be humanly   /// readable.  The encoding and decoding algorithms are simple, but the   /// encoded data are consistently only about 33 percent larger than the   /// unencoded data.  The base64 encoding algorithm is defined by   /// RFC 2045.   /// </summary>   public class Base64   {         /// <summary> Checks if the input byte array contains only safe values, that is,     /// the data does not need to be encoded for use with LDIF.     /// The rules for checking safety are based on the rules for LDIF     /// (Ldap Data Interchange Format) per RFC 2849.  The data does     /// not need to be encoded if all the following are true:     ///      /// The data cannot start with the following byte values:     /// <pre>     /// 00 (NUL)     /// 10 (LF)     /// 13 (CR)     /// 32 (SPACE)     /// 58 (:)     /// 60 (LESSTHAN)     /// Any character with value greater than 127     /// (Negative for a byte value)     /// </pre>     /// The data cannot contain any of the following byte values:     /// <pre>     /// 00 (NUL)     /// 10 (LF)     /// 13 (CR)     /// Any character with value greater than 127     /// (Negative for a byte value)     /// </pre>     /// The data cannot end with a space.     ///      /// </summary>     /// <param name="bytes">the bytes to be checked.     ///      /// </param>     /// <returns> true if encoding not required for LDIF     /// </returns>     [CLSCompliantAttribute(false)]     public static bool isLDIFSafe(sbyte[] bytes)     {       int len = bytes.Length;       if (len > 0)       {         int testChar = bytes[0];         // unsafe if first character is a NON-SAFE-INIT-CHAR         if ((testChar == 0x00) || (testChar == 0x0A) || (testChar == 0x0D) || (testChar == 0x20) || (testChar == 0x3A) || (testChar == 0x3C) || (testChar < 0))         {           // non ascii (>127 is negative)           return false;         }         // unsafe if last character is a space         if (bytes[len - 1] == ' ')         {           return false;         }         // unsafe if contains any non safe character         if (len > 1)         {           for (int i = 1; i < bytes.Length; i++)           {             testChar = bytes[i];             if ((testChar == 0x00) || (testChar == 0x0A) || (testChar == 0x0D) || (testChar < 0))             {               // non ascii (>127 is negative)               return false;             }           }         }       }       return true;     }     } }