Example #1
0
        internal CharacterSet GetFont(Guid?FontID)
        {
            if (FontID == null)
            {
                throw new ArgumentNullException();
            }

            return(CharSets.FirstOrDefault(set => set.UID == FontID));
        }
Example #2
0
 private CaptchaControl(bool ignoreCase, CharSets charSets, int charCount, int width, int height, string guid)
 {
     Guid        = guid;
     IgnoreCase  = ignoreCase;
     CharCount   = charCount;
     this.Width  = new Unit(width);
     this.Height = new Unit(height);
     Password    = this.GetType().AssemblyQualifiedName;
     CharSet     = CharSet;
 }
Example #3
0
        public void GetPassword(int length, CharSets sets)
        {
            if (sets == CharSets.None) throw new Exception("No acceptable characters defined");
            var chars = new List<char>();
            if (sets.HasFlag(CharSets.N123)) chars.AddRange("0123456789".ToCharArray());
            if (sets.HasFlag(CharSets.ABC)) chars.AddRange("ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray());
            if (sets.HasFlag(CharSets.abc)) chars.AddRange("abcdefghijklmnopqrstuvwxyz".ToCharArray());
            if (sets.HasFlag(CharSets.Other)) chars.AddRange("!@#$%^&*()_+".ToCharArray());

            var result = "";
            var buffer = CryptographicBuffer.GenerateRandom((uint)length);
            //foreach(var b in buffer)
            //{
            //    result += chars[b % chars.Count];
            //}
        }
Example #4
0
        public static string GenerateEntropy(string password, string salt, CharSets sets,
                                             uint keySize, Algorithms digest, int length, uint iterations)
        {
            string algorithm;

            switch (digest)
            {
            case Algorithms.Sha256:
                algorithm = KeyDerivationAlgorithmNames.Pbkdf2Sha256;
                break;

            case Algorithms.Sha384:
                algorithm = KeyDerivationAlgorithmNames.Pbkdf2Sha384;
                break;

            case Algorithms.Sha512:
                algorithm = KeyDerivationAlgorithmNames.Pbkdf2Sha512;
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            KeyDerivationAlgorithmProvider provider = KeyDerivationAlgorithmProvider.OpenAlgorithm(algorithm);

            // This is our secret password
            IBuffer buffSecret = CryptographicBuffer.ConvertStringToBinary(password, BinaryStringEncoding.Utf8);

            // Use the provided salt
            IBuffer buffSalt = CryptographicBuffer.ConvertStringToBinary(salt, BinaryStringEncoding.Utf8);

            // Create the derivation parameters.
            KeyDerivationParameters pbkdf2Params = KeyDerivationParameters.BuildForPbkdf2(buffSalt, iterations);

            // Create a key from the secret value.
            CryptographicKey keyOriginal = provider.CreateKey(buffSecret);

            // Derive a key based on the original key and the derivation parameters.
            IBuffer keyDerived = CryptographicEngine.DeriveKeyMaterial(
                keyOriginal,
                pbkdf2Params,
                keySize
                );

            // Return the buffer as a hex string
            return(CryptographicBuffer.EncodeToHexString(keyDerived));
        }
Example #5
0
        public static string RenderPassword(CharSets sets, string entropy, int maxLength)
        {
            // Compute password
            BigInteger quotient = BigInteger.Parse('0' + entropy, NumberStyles.AllowHexSpecifier);

            char[] possibleChars = GetCharacterSet(sets, out var allSets);
            int    setsCount     = allSets.Length;

            maxLength -= setsCount;

            char[] passwordChars = new char[maxLength];
            int    charsLength   = possibleChars.Length;

            for (int i = 0; i < maxLength; i++)
            {
                quotient         = BigInteger.DivRem(quotient, charsLength, out BigInteger remainder);
                passwordChars[i] = possibleChars[(int)remainder];
            }

            // Add one char per rule
            char[] additionalChars = new char[setsCount];

            for (int i = 0; i < setsCount; i++)
            {
                char[] set = allSets[i];

                quotient           = BigInteger.DivRem(quotient, set.Length, out BigInteger remainder);
                additionalChars[i] = set[(int)remainder];
            }

            // Randomly distribute rule-chars into password-chars
            string password = new string(passwordChars);

            for (int i = 0; i < setsCount; i++)
            {
                quotient = BigInteger.DivRem(quotient, password.Length, out BigInteger remainder);

                int iRem = (int)remainder;

                password = string.Concat(
                    password.Substring(0, iRem), additionalChars[i].ToString(), password.Substring(iRem)
                    );
            }

            return(password);
        }
Example #6
0
        public void Load(String fileName)
        {
            Clear(false);

            Path = fileName;

            XElement xml = XElement.Load(fileName);

            foreach (XElement node in xml.Elements("font"))
            {
                AddCharSet(CharacterSet.Load(this, node), false);
            }

            foreach (XElement node in xml.Elements("include"))
            {
                AddInclude(node.Value, false);
            }

            foreach (XElement node in xml.Elements("map"))
            {
                Map loadedMap = MapDeserializer.Load(this, node);

                AddMap(loadedMap, false);

                CharacterSet characterSet = CharSets.FirstOrDefault(set => set.UID == loadedMap.FontID);
                if (characterSet == null)
                {
                    MessageBox.Show("Unknown font: " + loadedMap.FontID);
                }
            }

            IsNew   = false;
            IsDirty = false;

            StrutureTreeChanged?.Invoke(this, null);
        }
Example #7
0
        public static char[] GetCharacterSet(CharSets sets, out char[][] allSets)
        {
            int length        = 0;
            int allSetsLength = 0;

            // Compute length in advance
            if ((sets & CharSets.Lowercase) == CharSets.Lowercase)
            {
                length += 26;
                allSetsLength++;
            }
            if ((sets & CharSets.Uppercase) == CharSets.Uppercase)
            {
                length += 26;
                allSetsLength++;
            }
            if ((sets & CharSets.Numbers) == CharSets.Numbers)
            {
                length += 10;
                allSetsLength++;
            }
            if ((sets & CharSets.Symbols) == CharSets.Symbols)
            {
                length += 32;
                allSetsLength++;
            }

            // Make string
            int index    = 0;
            int setIndex = 0;

            char[] buffer = new char[length];
            allSets = new char[allSetsLength][];

            if ((sets & CharSets.Lowercase) == CharSets.Lowercase)
            {
                LowercaseLetters.CopyTo(0, buffer, 0, 26);
                index += 26;

                allSets[setIndex++] = LowercaseLetters.ToCharArray();
            }

            if ((sets & CharSets.Uppercase) == CharSets.Uppercase)
            {
                UppercaseLetters.CopyTo(0, buffer, index, 26);
                index += 26;

                allSets[setIndex++] = UppercaseLetters.ToCharArray();
            }

            if ((sets & CharSets.Numbers) == CharSets.Numbers)
            {
                Numbers.CopyTo(0, buffer, index, 10);
                index += 10;

                allSets[setIndex++] = Numbers.ToCharArray();
            }

            if ((sets & CharSets.Symbols) == CharSets.Symbols)
            {
                Symbols.CopyTo(0, buffer, index, 32);

                allSets[setIndex] = Symbols.ToCharArray();
            }

            return(buffer);
        }
Example #8
0
 public static Task <string> GenerateAsync(string password, string salt, CharSets sets = CharSets.All,
                                           uint keySize = 32, Algorithms digest = Algorithms.Sha256, int length = 16, uint iterations = 100_000,
Example #9
0
 public static string Generate(string password, string salt, CharSets sets = CharSets.All,
                               uint keySize = 32, Algorithms digest = Algorithms.Sha256, int length = 16, uint iterations = 100_000)
 {
     return(RenderPassword(sets, GenerateEntropy(password, salt, sets, keySize, digest, length, iterations), length));
 }
Example #10
0
        private CharacterSet findExistingCharsetByFileName(string fontFileName)
        {
            string exactFontPath = PathHelper.GetExactPath(Path, fontFileName);

            return(CharSets.FirstOrDefault(set => set.Path.Equals(exactFontPath, StringComparison.OrdinalIgnoreCase)));
        }
Example #11
0
            //protected override object SaveViewState()
            //{
            //    object baseState = base.SaveViewState();
            //    object[] allStates = new object[3];
            //    allStates[0] = baseState;
            //    allStates[1] = CaptchaHelper.EncryptString(_code, Password);
            //    allStates[2] = this.ImageUrl;
            //    return allStates;
            //}

            //protected override void LoadViewState(object savedState)
            //{
            //    if (savedState != null)
            //    {
            //        object[] myState = (object[])savedState;
            //        if (myState[0] != null)
            //            base.LoadViewState(myState[0]);
            //        if (myState[1] != null)
            //            _code = CaptchaHelper.DecryptString((string)myState[1], Password);
            //        if (myState[2] != null)
            //            ImageUrl = (string)myState[2];
            //    }
            //}


            public static CaptchaControl CreateControl(bool ignoreCase, CharSets charSets, int charCount, int width, int height, string guid)
            {
                CaptchaControl control = new CaptchaControl(ignoreCase, charSets, charCount, width, height, guid);

                return(control);
            }