Ejemplo n.º 1
0
        public async Task <JObject> GetBlob(string username, string password)
        {
            // Everywhere, this is expected to be lower cased.
            username = username.ToLower();

            string userPassUrl = UserPassHash(username, password);
            var    client      = new HttpClient {
                BaseAddress = new Uri(_baseUrl), Timeout = new TimeSpan(0, 0, 5)
            };
            var response = await client.GetAsync(userPassUrl);

            var responseContent = await response.Content.ReadAsStringAsync();

            if (response.StatusCode == HttpStatusCode.NotFound || responseContent.Length == 0)
            {
                // We won't log the pass.
                throw new BlobNotFoundException("No blob found for user: " + username);
            }

            string utf8 = Encoding.UTF8.GetString(Base64.Decode(responseContent));
            string decryptionKey;

            try
            {
                decryptionKey = UserPassDerivedDecryptionKey(username, password);
                return(_scjl.Decrypt(decryptionKey, utf8));
            }
            catch (InvalidCipherTextException)
            {
                decryptionKey = UserPassDerivedDecryptionKeyOld(username, password);
                return(_scjl.Decrypt(decryptionKey, utf8));
            }
        }
Ejemplo n.º 2
0
        public void testDecryption()
        {
            string fixture = "{\"key\" : \"user|pass\",   \"raw\":{\"one\":\"two\",\"three\":4},"
                             + "\"encrypted\":{\"iv\":\"OPiRt308ZbENmwzdDjffZQ==\"," + "\"v\":1," + "\"iter\":1000,"
                             + "\"ks\":256," + "\"ts\":64," + "\"mode\":\"ccm\"," + "\"adata\":\"\","
                             + "\"cipher\":\"aes\"," + "\"salt\":\"NFPNycJ3ea0=\","
                             + "\"ct\":\"sZo58l4VRX2KR9xAsbP/dIVc9QJ+0VCmTZ3jIMbO1w==\"}}";

            JObject parsed    = JObject.Parse(fixture),
                    raw       = parsed.GetValue("raw").ToObject <JObject>(),
                    encrypted = parsed.GetValue("encrypted").ToObject <JObject>(),
                    decrypted,
                    reencrypted;

            int ks = 256, iter = 1000, ts = 64;

            JsonEncrypt jsonEncrypt = new JsonEncrypt(ks, iter, ts);

            string key = parsed["key"].ToString();

            decrypted = jsonEncrypt.Decrypt(key, encrypted);

            Assert.AreEqual(decrypted.GetValue("one").ToString(), raw.GetValue("one").ToString());
            Assert.AreEqual(decrypted.GetValue("three").ToObject <int>(), raw.GetValue("three").ToObject <int>());

            reencrypted = jsonEncrypt.Encrypt(key, parsed.GetValue("raw").ToString(), "", Base64.Decode(encrypted.GetValue("salt").ToString()), Base64.Decode(encrypted.GetValue("iv").ToString()));
            decrypted   = jsonEncrypt.Decrypt(key, reencrypted);

            if (reencrypted["adata"] != null)
            {
                reencrypted["adata"] = "0000" + reencrypted.GetValue("adata");
            }
            else
            {
                reencrypted.Add("adata", "0000" + reencrypted.GetValue("adata"));
            }

            bool thrown = false;

            try
            {
                jsonEncrypt.Decrypt(key, reencrypted);
            }
            catch (InvalidCipherTextException e)
            {
                thrown = true;
            }

            Assert.True(thrown);
        }
Ejemplo n.º 3
0
        public void testDecryption128Macsize()
        {
            string fixture = "{" + "\"key\" : \"user|pass\", " + "\"raw\":{\"one\":\"two\",\"three\":4},"
                             + "\"encrypted\":" + "{" + "\"iv\":\"lgd/ZDGHEZOnbIXpViykXg==\"," + "\"v\":1,"
                             + "\"iter\":1000," + "\"ks\":256," + "\"ts\":128," + "\"mode\":" + "\"ccm\","
                             + "\"adata\":" + "\"wtf%20bbq%3F\"," + "\"cipher\":\"aes\"," + "\"salt\":\"NFPNycJ3ea0=\","
                             + "\"ct\":\"GTvZENQJ97HTZp2UvW1C9Bxf7KBVlfKiOaR82njTMk45L/dP+tEG\"" + "}" + "}";

            JObject parsed    = JObject.Parse(fixture),
                    raw       = parsed.GetValue("raw").ToObject <JObject>(),
                    encrypted = parsed.GetValue("encrypted").ToObject <JObject>(),
                    decrypted;

            int ks = 256, iter = 1000, ts = 128;

            string key         = parsed.GetValue("key").ToString();
            var    jsonEncrypt = new JsonEncrypt(ks, iter, ts);

            decrypted = jsonEncrypt.Decrypt(key, encrypted);

            Assert.AreEqual(decrypted.GetValue("one").ToString(), raw.GetValue("one").ToString());
            Assert.AreEqual(decrypted.GetValue("three").ToObject <int>(), raw.GetValue("three").ToObject <int>());

            string adata = HttpUtility.UrlDecode(encrypted.GetValue("adata").ToString(), Encoding.UTF8);

            Assert.AreEqual("wtf bbq?", adata);
        }
Ejemplo n.º 4
0
        public void myDecryption()
        {
            string fixture_old = "{\"key\" : \"12|qwe949461747\",   \"raw\":{\"masterkey\":\"shPLmjWXmhpiFd7AFhh2rAmQTVLMj\",\"account_id\":\"r9us1jJnvg9LK9wF1DTUWJc4qpp7GVENm8\",\"contacts\":[],\"created\":\"2017-08-23T19:01:44.475Z\"},"
                                 + "\"encrypted\":{\"iv\":\"K0RLqbaVHsUNCEw3B4upNQ==\"," + "\"v\":1," + "\"iter\":1000,"
                                 + "\"ks\":256," + "\"ts\":64," + "\"mode\":\"ccm\"," + "\"adata\":\"\","
                                 + "\"cipher\":\"aes\"," + "\"salt\":\"5prWye2f3LM=\","
                                 + "\"ct\":\"451CMPdT6yvkw2sCXNdl1sHIbeVtAE0eqB9iPkIJlhIFs79JNlF/58tQKagF/60sqqap/7XH4S4gCjARWVh9Dglu3243Lo3MsqJHjRtLNs6h8FZFTrOlbuIwR9Lb9hblXYgyD3DxS6GlbfmBTLLKYhu56QLFNKcA0NCuyesSAr/pNl3O1KBMs7lSDkLXpitDDQxzvQ60v+aTAg==\"}}";

            string myraw   = "{\"masterkey\":\"shPLmjWXmhpiFd7AFhh2rAmQTVLMj\",\"account_id\":\"r9us1jJnvg9LK9wF1DTUWJc4qpp7GVENm8\",\"contacts\":[],\"created\":\"2017-08-23T19:01:44.475Z\"}";
            string fixture = "{\"iv\":\"K0RLqbaVHsUNCEw3B4upNQ==\","
                             + "\"v\":1,"
                             + "\"iter\":1000,"
                             + "\"ks\":256,"
                             + "\"ts\":64,"
                             + "\"mode\":\"ccm\","
                             + "\"adata\":\"\","
                             + "\"cipher\":\"aes\","
                             + "\"salt\":\"5prWye2f3LM=\","
                             + "\"ct\":\"451CMPdT6yvkw2sCXNdl1sHIbeVtAE0eqB9iPkIJlhIFs79JNlF/58tQKagF/60sqqap/7XH4S4gCjARWVh9Dglu3243Lo3MsqJHjRtLNs6h8FZFTrOlbuIwR9Lb9hblXYgyD3DxS6GlbfmBTLLKYhu56QLFNKcA0NCuyesSAr/pNl3O1KBMs7lSDkLXpitDDQxzvQ60v+aTAg==\"}";

            JObject parsed    = JObject.Parse(fixture_old),
                    raw       = parsed.GetValue("raw").ToObject <JObject>(),
                    encrypted = parsed.GetValue("encrypted").ToObject <JObject>(),
                    decrypted,
                    reencrypted;

            int ks = 256, iter = 1000, ts = 64;

            JsonEncrypt jsonEncrypt = new JsonEncrypt(ks, iter, ts);

            string key = "12|qwe949461747";

            decrypted = jsonEncrypt.Decrypt(key, encrypted);

            Assert.AreEqual(decrypted.GetValue("masterkey").ToString(), raw.GetValue("masterkey").ToString());
            Assert.AreEqual(decrypted.GetValue("account_id").ToString(), raw.GetValue("account_id").ToString());

            reencrypted = jsonEncrypt.Encrypt(key, raw, "");
            reencrypted = jsonEncrypt.Encrypt(key, myraw, "", Base64.Decode(encrypted.GetValue("salt").ToString()), Base64.Decode(encrypted.GetValue("iv").ToString()));

            jsonEncrypt.Decrypt(key, reencrypted);

            if (reencrypted["adata"] != null)
            {
                reencrypted["adata"] = "0000" + reencrypted.GetValue("adata");
            }
            else
            {
                reencrypted.Add("adata", "0000" + reencrypted.GetValue("adata"));
            }

            bool thrown = false;

            try
            {
                jsonEncrypt.Decrypt(key, reencrypted);
            }
            catch (InvalidCipherTextException e)
            {
                thrown = true;
            }

            Assert.True(thrown);
        }