Beispiel #1
0
        static void Main(string[] args)
        {
            var preSecret = "1234567890";

            //for (int i = 0; i < 10; i++)
            //{
            //    Console.WriteLine(HashedOneTimePassword.GeneratePassword(preSecret, i));
            //}

            //long[] seconds = new long[] { 59, 1111111109, 1111111111, 1234567890, 2000000000, 20000000000 };

            //foreach (var second in seconds)
            //{
            //    Console.WriteLine(TimeBasedOneTimePassword.GetPassword(preSecret, TimeBasedOneTimePassword.UNIX_EPOCH + TimeSpan.FromSeconds(second), TimeBasedOneTimePassword.UNIX_EPOCH, 30, 8));
            //}

            var enc = new Base32Encoder();

            while (true)
            {

                // feed this into GA to create a new Application
                string secret = enc.Encode(Encoding.ASCII.GetBytes(preSecret));

                Console.WriteLine(secret);

                //this will get the preSecret key back ...
                var preSecretBack = Encoding.UTF8.GetString ( enc.Decode(secret));
                Console.WriteLine(preSecretBack);

                // this would be a VALID password right now
                Console.WriteLine("Valid pw: " + TimeBasedOneTimePassword.GetPassword(preSecret));

                Console.WriteLine("Enter your password: "******"")
                {
                    break;
                }

                // this will check the entered password (possibly from GA) ...

                if (TimeBasedOneTimePassword.IsValid(preSecret, password))
                {
                    Console.WriteLine("Success!");
                }
                else
                {
                    Console.WriteLine("ERROR!");
                }
            }

            return;
        }
Beispiel #2
0
        static void Main(string[] args)
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(HashedOneTimePassword.GeneratePassword("12345678901234567890", i));
            }

            long[] seconds = new long[] { 59, 1111111109, 1111111111, 1234567890, 2000000000, 20000000000 };

            foreach (var second in seconds)
            {
                Console.WriteLine(TimeBasedOneTimePassword.GetPassword("12345678901234567890", TimeBasedOneTimePassword.UNIX_EPOCH + TimeSpan.FromSeconds(second), TimeBasedOneTimePassword.UNIX_EPOCH, 30, 8));
            }

            Base32Encoder enc = new Base32Encoder();

            string secret = enc.Encode(Encoding.ASCII.GetBytes("1234567890"));

            Console.WriteLine(secret);

            Console.WriteLine("Enter your password: "******"1234567890", password))
            {
                Console.WriteLine("Success!");
            }
            else
            {
                Console.WriteLine("ERROR!");
            }

            return;

            while (true)
            {
                Console.WriteLine(TimeBasedOneTimePassword.GetPassword("1234567890"));
                System.Threading.Thread.Sleep(TimeSpan.FromSeconds(10));
            }
        }
        public static OperationResult loadTokenKeyInformation(string tokenID, out string tokenKey)
        {
            OperationResult result = OperationResult.Error;
            tokenKey = null;
            TokenCryptoData tokenCryptoData2 = new TokensDAO().loadTokenCryptoData(tokenID);

            string masterKey = SF.Expand.SAF.Configuration.SAFConfiguration.readMasterKey();
            byte[] tokenSeed = tokenCryptoData2.GetTokenSeed(masterKey);
            if (tokenSeed != null)
            {
                Base32Encoder enc = new Base32Encoder();
                tokenKey = enc.Encode(tokenSeed);
                result = OperationResult.Success;
            }

            return result;
        }
        public ActionResult ShowTwoFactorSecret()
        {
            string secret = TwoFactorProfile.CurrentUser.TwoFactorSecret;

            if (string.IsNullOrEmpty(secret))
            {
                byte[] buffer = new byte[9];

                using (RandomNumberGenerator rng = RNGCryptoServiceProvider.Create())
                {
                    rng.GetBytes(buffer);
                }

                // Generates a 10 character string of A-Z, a-z, 0-9
                // Don't need to worry about any = padding from the
                // Base64 encoding, since our input buffer is divisible by 3
                TwoFactorProfile.CurrentUser.TwoFactorSecret = Convert.ToBase64String(buffer).Substring(0, 10).Replace('/', '0').Replace('+', '1');

                secret = TwoFactorProfile.CurrentUser.TwoFactorSecret;
            }

            var enc = new Base32Encoder().Encode(Encoding.ASCII.GetBytes(secret));

            return View(new TwoFactorSecret { EncodedSecret = enc });
        }
		public static OperationResult TokensCreateNew(TokenTypeBaseParams tkTypeBaseParams, string masterKey, string vendorSerialNumber, string dataEntropy, out TokenCryptoData tokenCryptoData)
		{
			OperationResult result;
			try
			{
				byte[] data;
				byte[] data2;
				long movingFactor;
				if (OperationResult.Error == HOTPCryptoData.Generate(masterKey, null, tkTypeBaseParams, out data, out data2, out movingFactor))
				{
					tokenCryptoData = new TokenCryptoData(null, null, default(CryptoData), default(TokenTypeBaseParams));
					result = OperationResult.Error;
				}
				else
				{
					TokenCryptoData tokenCryptoData2 = new TokenCryptoData(null, vendorSerialNumber, new CryptoData(movingFactor, BaseFunctions.HexEncoder(data), BaseFunctions.HexEncoder(data2), ""), tkTypeBaseParams);
					tokenCryptoData2.ResetMovingFactor(HOTPCipherInitialize.createSequenceNumber());

                    /*--------------------------*/
                    byte[] tokenSeed = tokenCryptoData2.GetTokenSeed(masterKey);
                    string x = Encoding.ASCII.GetString(tokenSeed);
                    Base32Encoder enc = new Base32Encoder();
                    string y = enc.Encode(tokenSeed);


                    /*--------------------------*/


					if (tkTypeBaseParams.MovingFactorType == TokenMovingFactorType.TransactionAuthenticationNumber)
					{
						string value;
						if (OperationResult.Error == TokensBaseFunctions.tokenTANMatrixIntegrityCheck(tokenCryptoData2, tokenCryptoData2.GetTokenSeed(masterKey), (dataEntropy == null || dataEntropy.Length < 1) ? new byte[0] : BaseFunctions.convertStringToByteArray(dataEntropy), out value))
						{
							tokenCryptoData = new TokenCryptoData(null, null, default(CryptoData), default(TokenTypeBaseParams));
							result = OperationResult.Error;
							return result;
						}
						tokenCryptoData2.ResetSupportCryptoData(value);
					}
					tokenCryptoData = tokenCryptoData2;
					result = OperationResult.Success;
				}
			}
			catch
			{
				LOGGER.Write(LOGGER.LogCategory.ERROR, "SF.Expand.SAF.Core::TokensCreateNew[]", null);
				tokenCryptoData = new TokenCryptoData(null, null, default(CryptoData), default(TokenTypeBaseParams));
				result = OperationResult.Error;
			}
			return result;
		}
Beispiel #6
0
        public static byte[] ToBytes(string text)
        {
            Base32Encoder _encoder = new Base32Encoder();

            byte[] result = null;

            try
            {
                result = _encoder.Decode(text);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return result;
        }
Beispiel #7
0
        /*
        static string GetString( byte data)
        {
            string result = string.Empty;

            switch( data)
            {
                case 0:
                    result = "A";
                    break;

                case 1:
                    result = "B";
                    break;

                case 2:
                    result = "C";
                    break;

                case 3:
                    result = "D";
                    break;

                case 4:
                    result = "E";
                    break;

                case 5:
                    result = "F";
                    break;

                case 6:
                    result = "G";
                    break;

                case 7:
                    result = "H";
                    break;

                case 8:
                    result = "I";
                    break;

                case 9:
                    result = "J";
                    break;

                case 10:
                    result = "K";
                    break;

                case 11:
                    result = "L";
                    break;

                case 12:
                    result = "M";
                    break;

                case 13:
                    result = "N";
                    break;

                case 14:
                    result = "O";
                    break;

                case 15:
                    result = "P";
                    break;

                case 16:
                    result = "Q";
                    break;

                case 17:
                    result = "R";
                    break;

                case 18:
                    result = "S";
                    break;

                case 19:
                    result = "T";
                    break;

                case 20:
                    result = "U";
                    break;

                case 21:
                    result = "V";
                    break;

                case 22:
                    result = "W";
                    break;

                case 23:
                    result = "X";
                    break;

                case 24:
                    result = "Y";
                    break;

                case 25:
                    result = "Z";
                    break;

                case 26:
                    result = "2";
                    break;

                case 27:
                    result = "3";
                    break;

                case 28:
                    result = "4";
                    break;

                case 29:
                    result = "5";
                    break;

                case 30:
                    result = "6";
                    break;

                case 31:
                    result = "7";
                    break;
            }

            return result;
        }

        static byte[] Expand(byte[] data)
        {
            byte[] result = new byte[] {0, 0, 0, 0, 0, 0, 0, 0};

            for (int idx = 0; idx < data.Length; idx++)
            {
                result[idx] = data[idx];
            }

            return result;
        }

        static string GetString(byte[] data)
        {
            StringBuilder result = new StringBuilder();

            // 5, 3+2, 5, 1+4, 4 + 1, 5, 2+3, 5

            int base32StringLength = (int)Math.Ceiling((double)((data.Length * 8) / 5));

            UInt64 dataNumber = BitConverter.ToUInt64(Expand(data), 0);

            byte character;

            character = BitConverter.GetBytes(dataNumber & 31)[0];

            result.Append(GetString(character));

            for (int idx = 1; idx < base32StringLength; idx++)
            {
                dataNumber = dataNumber >> 5;

                character = BitConverter.GetBytes(dataNumber & 31)[0];

                result.Append(GetString(character));
            }

            return result.ToString().Pad('=', 8);
        }

        public static string From(byte[] data)
        {
            StringBuilder result = new StringBuilder();

            byte[] dataSegment;

            int oddLength = data.Length % 5;
            int wordsLength = data.Length  - oddLength;

            int remainingDataLength = wordsLength;;

            for (int idx = 0; idx < wordsLength; idx += 5)
            {
                dataSegment = new byte[5];

                Array.Copy(data, idx, dataSegment, 0, 5 );

                result.Append(GetString(dataSegment));
            }

            if (oddLength > 0)
            {
                dataSegment = new byte[oddLength];

                Array.Copy(data, wordsLength, dataSegment, 0, oddLength);
                result.Append(GetString(dataSegment));
            }

            return result.ToString();
        }

        static byte ValueOf(char character)
        {
            byte value = 0;

            switch( character)
            {
                case 'A':
                    value = 0;
                    break;

                case 'B':
                    value = 1;
                    break;

                case 'C':
                    value = 2;
                    break;

                case 'D':
                    value = 3;
                    break;

                case 'E':
                    value = 4;
                    break;

                case 'F':
                    value = 5;
                    break;

                case 'G':
                    value = 6;
                    break;

                case 'H':
                    value = 7;
                    break;

                case 'I':
                    value = 8;
                    break;

                case 'J':
                    value = 9;
                    break;

                case 'K':
                    value = 10;
                    break;

                case 'L':
                    value = 11;
                    break;

                case 'M':
                    value = 12;
                    break;

                case 'N':
                    value = 13;
                    break;

                case 'O':
                    value = 14;
                    break;

                case 'P':
                    value = 15;
                    break;

                case 'Q':
                    value = 16;
                    break;

                case 'R':
                    value = 17;
                    break;

                case 'S':
                    value = 18;
                    break;

                case 'T':
                    value = 19;
                    break;

                case 'U':
                    value = 20;
                    break;

                case 'V':
                    value = 21;
                    break;

                case 'W':
                    value = 22;
                    break;

                case 'X':
                    value = 23;
                    break;

                case 'Y':
                    value = 24;
                    break;

                case 'Z':
                    value = 25;
                    break;

                case '2':
                    value = 26;
                    break;

                case '3':
                    value = 27;
                    break;

                case '4':
                    value = 28;
                    break;

                case '5':
                    value = 29;
                    break;

                case '6':
                    value = 30;
                    break;

                case '7':
                    value = 31;
                    break;

                default:
                    throw new ArgumentException(string.Format("'{0}' is not valid Base 32 character.", character));
            }

            return value;
        }

        static byte[] GetData(string word)
        {
            int firstPaddingPosition = word.IndexOf('=');
            int wordLength = firstPaddingPosition > 0? firstPaddingPosition : word.Length;

            int resultLength = (int)Math.Ceiling((double)(( wordLength * 5) / 8));

            UInt64 dataNumber = 0;

            dataNumber = ValueOf(word[0]);

            for (int idx = 1; idx < wordLength; idx++)
            {
                dataNumber = dataNumber << 5;
                dataNumber |= word[idx];
            }

            byte[] result = new byte[resultLength];

            byte[] dataNumberBytes = BitConverter.GetBytes(dataNumber);

            Array.Copy(dataNumberBytes, 0, result, 0, result.Length);

            return result;
        }

        public static byte[] GetBytes(string base32String)
        {
            List<byte> result = new List<byte>();

            for (int idx = 0; idx < base32String.Length; idx += 8)
            {
                result.AddRange(GetData(base32String.Substring(idx, 8)));
            }

            return result.ToArray();
        }

        */
        //[ThreadStatic]
        //static Base32Encoder _encoder = new Base32Encoder();
        public static string From(byte[] data)
        {
            Base32Encoder _encoder = new Base32Encoder();

            string result = string.Empty;

            try
            {
                result = _encoder.Encode(data);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return result;
        }
Beispiel #8
0
        // <summary>
        // Fetch user TFA settings and save the values to the model 
        // </summary>
        public void LoadTfaSettings()
        {
            // MySQL query Select book in the database 
            const string result = "SELECT Secret, Tfa " +
                                  "FROM users " +
                                  "Where Id = ?";

            using (var empConnection = DatabaseConnection.DatabaseConnect())
            {
                using (var showresult = new MySqlCommand(result, empConnection))
                {
                    // Bind parameters 
                    showresult.Parameters.Add("Id", MySqlDbType.VarChar).Value = IdentityModel.CurrentUserId;
                    try
                    {
                        DatabaseConnection.DatabaseOpen(empConnection);
                        // Execute command 
                        using (var myDataReader = showresult.ExecuteReader(CommandBehavior.CloseConnection))
                        {
                            while (myDataReader.Read())
                            {
                                // Save the values 
                                TwoFactorCode =
                                    new Base32Encoder().Encode(Encoding.ASCII.GetBytes(myDataReader.GetString(0)));
                                TwoFactorEnabled = Convert.ToInt32(myDataReader.GetValue(1));
                            }
                        }
                    }
                    catch (MySqlException)
                    {
                        // MySqlException 
                    }
                    finally
                    {
                        DatabaseConnection.DatabaseClose(empConnection);
                    }
                }
            }
        }
Beispiel #9
0
        private string convertToBase32(byte[] input)
        {
            string output;

            Base32Encoder base32 = new Base32Encoder();

            output = base32.Encode(input);

            return output;

        }
Beispiel #10
0
            public void WithBase32_ThenReturnText(string base32, string expected)
            {
                var result = new Base32Encoder().Decode(base32);

                Assert.That(result, Is.EqualTo(expected));
            }
Beispiel #11
0
            public void WhenUtf8StringIsNotNull_ThenReturnEncoded(string text, string expected)
            {
                var result = new Base32Encoder().Encode(text);

                Assert.That(result, Is.EqualTo(expected));
            }