Exemple #1
0
        /*
         * 2017-10-21
         *
         * in .NET Standard are no classes like:
         *
         * RNGCryptoServiceProvider
         * http://packagesearch.azurewebsites.net/?q=RNGCryptoServiceProvider
         *
         * SHA256Managed
         * http://packagesearch.azurewebsites.net/?q=SHA256Managed
         *
         * https://github.com/googlesamples/oauth-apps-for-windows
         * https://github.com/googlesamples/oauth-apps-for-windows/blob/master/OAuthConsoleApp/OAuthConsoleApp/Program.cs
         */

        public string RandomDataBase64Url(uint length)
        {
            byte[] bytes = new byte[length];

            // original code
            //RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();

            #if NETSTANDARD1_3
            // from System.Security.Cryptography
            // designed to be used with cryptographic algorithms
            System.Security.Cryptography.RandomNumberGenerator rng = null;
            rng = System.Security.Cryptography.RandomNumberGenerator.Create();
            rng.GetBytes(bytes);
            #else
            //  insecure (albeit faster) Random class
            System.Random rng = new System.Random();
            rng.NextBytes(bytes);
            #endif

            string base64url_no_padding = null;

            Base64UrlEncoding e = new Base64UrlEncoding();
            base64url_no_padding = e.Encode(bytes, is_padded: false);

            return(base64url_no_padding);
        }
Exemple #2
0
        internal string Serialize()
        {
            var jsonSerializer = new DataContractJsonSerializer(typeof(HeaderDto));

            using (var stream = new MemoryStream())
            {
                jsonSerializer.WriteObject(stream, this);

                return(Base64UrlEncoding.Encode(stream.ToArray()));
            }
        }
Exemple #3
0
        internal static HeaderDto DeserializeHeader(string input)
        {
            var jsonSerializer = new DataContractJsonSerializer(typeof(HeaderDto));

            var headerJson = Base64UrlEncoding.Decode(input);

            using (var stream = new MemoryStream(headerJson))
            {
                return(jsonSerializer.ReadObject(stream) as HeaderDto);
            }
        }
Exemple #4
0
        internal static PayloadDto DeserializePayload(string input, string secretKey, string tokenIdentifier)
        {
            var headerEncrypted = Base64UrlEncoding.Decode(input);
            var decrypted       = AesEncryption.DecryptPayload(secretKey, tokenIdentifier, headerEncrypted);

            var jsonSerializer = new DataContractJsonSerializer(typeof(Model.PayloadDto), new DataContractJsonSerializerSettings()
            {
                UseSimpleDictionaryFormat = true
            });

            using (var stream = new MemoryStream(decrypted))
            {
                return(jsonSerializer.ReadObject(stream) as PayloadDto);
            }
        }
        public void Encode()
        {
            Base64UrlEncoding e = new Base64UrlEncoding();

            i = "test";
            o = e.Encode(i);
            Assert.Equal(o, "dGVzdA==");

            i = "test0";
            o = e.Encode(i);
            Assert.Equal(o, "dGVzdDA=");

            i = "test00";
            o = e.Encode(i);
            Assert.Equal(o, "dGVzdDAw");

            i = "test01";
            o = e.Encode(i);
            Assert.Equal(o, "dGVzdDAx");

            i = "test000";
            o = e.Encode(i);
            Assert.Equal(o, "dGVzdDAwMA==");

            o = e.Encode(new byte[] { 0, });
            Assert.Equal(o, "AA==");

            o = e.Encode(new byte[] { 0, }, is_padded: false /*, is_padded_optimized: true*/);
            Assert.Equal(o, "AA");

            o = e.Encode(new byte[] { 0, }, is_padded: true, is_padded_optimized: true);
            Assert.Equal(o, "AA2");

            o = e.Encode(new byte[] { 0, 0, });
            Assert.Equal(o, "AAA=");

            o = e.Encode(new byte[] { 0, 0, }, is_padded: false /*, is_padded_optimized: true*/);
            Assert.Equal(o, "AAA");

            o = e.Encode(new byte[] { 0, 0, }, is_padded: true, is_padded_optimized: true);
            Assert.Equal(o, "AAA1");

            o = e.Encode(new byte[] { 0, 0, 0, });
            Assert.Equal(o, "AAAA");

            o = e.Encode(new byte[] { 0, 0, 0, }, is_padded: false /*, is_padded_optimized: true*/);
            Assert.Equal(o, "AAAA");

            o = e.Encode(new byte[] { 0, 0, 0, }, is_padded: true, is_padded_optimized: true);
            Assert.Equal(o, "AAAA0");

            i = "any carnal pleasure.";
            o = e.Encode(i);
            Assert.Equal(o, "YW55IGNhcm5hbCBwbGVhc3VyZS4=");

            i = "any carnal pleasure";
            o = e.Encode(i);
            Assert.Equal(o, "YW55IGNhcm5hbCBwbGVhc3VyZQ==");

            i = "any carnal pleasur";
            o = e.Encode(i);
            Assert.Equal(o, "YW55IGNhcm5hbCBwbGVhc3Vy");

            i = "any carnal pleasu";
            o = e.Encode(i);
            Assert.Equal(o, "YW55IGNhcm5hbCBwbGVhc3U=");

            i = "any carnal pleas";
            o = e.Encode(i);
            Assert.Equal(o, "YW55IGNhcm5hbCBwbGVhcw==");

            i = "pleasure.";
            o = e.Encode(i);
            Assert.Equal(o, "cGxlYXN1cmUu");

            i = "leasure.";
            o = e.Encode(i);
            Assert.Equal(o, "bGVhc3VyZS4=");

            i = "easure.";
            o = e.Encode(i);
            Assert.Equal(o, "ZWFzdXJlLg==");

            i = "asure.";
            o = e.Encode(i);
            Assert.Equal(o, "YXN1cmUu");

            i = "sure.";
            o = e.Encode(i);
            Assert.Equal(o, "c3VyZS4=");



            return;
        }
        public void Decode(string expectedOutput, string input)
        {
            var bytes = Base64UrlEncoding.Decode(input);

            Assert.Equal(expectedOutput, Encoding.UTF8.GetString(bytes));
        }
        public void Encode(string input, string expectedOutput)
        {
            var base64url = Base64UrlEncoding.Encode(Encoding.UTF8.GetBytes(input));

            Assert.Equal(expectedOutput, base64url);
        }