<style>
/* Changing the layout to use less space for mobiles */
@media screen and (max-device-width: 480px), screen and (-webkit-min-device-pixel-ratio: 2) {
    #email-body { min-width: 30em !important; }
    #email-page { padding: 8px !important; }
    #email-banner { padding: 8px 8px 0 8px !important; }
    #email-avatar { margin: 1px 8px 8px 0 !important; padding: 0 !important; }
    #email-fields { padding: 0 8px 8px 8px !important; }
    #email-gutter { width: 0 !important; }
}
</style>
<div id="email-body">
<table id="email-wrap" align="center" border="0" cellpadding="0" cellspacing="0" style="background-color:#f0f0f0;color:#000000;width:100%;">
    <tr valign="top">
        <td id="email-page" style="padding:16px !important;">
            <table align="center" border="0" cellpadding="0" cellspacing="0" style="background-color:#ffffff;border:1px solid #bbbbbb;color:#000000;width:100%;">
                <tr valign="top">
                    <td bgcolor="#3b4d64" style="background-color:#3b4d64;color:#ffffff;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;line-height:1;"><img src="https://issues.jboss.org/s/en_US-kbu24m-1988229788/6109/58/_/jira-logo-scaled.png" alt="" style="vertical-align:top;" /></td>
                </tr><tr valign="top">
    <td id="email-banner" style="padding:32px 32px 0 32px;">

                
                    <table align="left" border="0" cellpadding="0" cellspacing="0" width="100%" style="width:100%;">
    <tr valign="top">
        <td style="color:#505050;font-family:Arial,FreeSans,Helvetica,sans-serif;padding:0;">
                                        <img id="email-avatar" src="https://community.jboss.org/people/abstractj/avatar/16.png" alt="" height="48" width="48" border="0" align="left" style="padding:0;margin: 0 16px 16px 0;" />
                        <div id="email-action" style="padding: 0 0 8px 0;font-size:12px;line-height:18px;">
                                    <a class="user-hover" rel="abstractj" id="email_abstractj" href="https://issues.jboss.org/secure/ViewProfile.jspa?name=abstractj" style="color:#3b73af;">Bruno Oliveira</a>
     commented on <img src="https://issues.jboss.org/images/icons/issuetypes/bug.png" height="16" width="16" border="0" align="absmiddle" alt="Bug"> <a style='color:#3b73af;text-decoration:none;' href='https://issues.jboss.org/browse/AGDROID-173'>AGDROID-173</a>
            </div>
                        <div id="email-summary" style="font-size:16px;line-height:20px;padding:2px 0 16px 0;">
                <a style='color:#3b73af;text-decoration:none;' href='https://issues.jboss.org/browse/AGDROID-173'><strong>EncryptedSQLStore should fail to open with wrong passphrase</strong></a>
            </div>
                    </td>
    </tr>
</table>
    </td>
</tr>
<tr valign="top">
    <td id="email-fields" style="padding:0 32px 32px 32px;">
        <table border="0" cellpadding="0" cellspacing="0" style="padding:0;text-align:left;width:100%;" width="100%">
            <tr valign="top">
                <td id="email-gutter" style="width:64px;white-space:nowrap;"></td>
                <td>
                    <table border="0" cellpadding="0" cellspacing="0" width="100%">
                        <tr valign="top">
    <td colspan="2" style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 16px 0;width:100%;">
        <div class="comment-block" style="background-color:#edf5ff;border:1px solid #dddddd;color:#000000;padding:12px;"><p>&gt; Right now the EncryptedSQLStore can be opened with any passphrase and it only throws an InvalidKeyException when readAll is called. I see two major issues in this behavior.</p>

<p>Hi <a href="https://issues.jboss.org/secure/ViewProfile.jspa?name=tkriz" class="user-hover" rel="tkriz">Tadeas Kriz</a>, maybe we have some workflow issue here, not sure, must be checked. The correct workflow to our initial release was supposed to be:</p>

<p>1 - User inputs the passphrase<br/>
2- Add a ton of data and the application encrypts that data<br/>
3- Next the passpharase is inserted, the application should try to decrypt that storage with the passpharase provided. <br/>
4. If InvalidKeyException raises, forbbid the that login</p>

<p>I guess this is mostly what passos did for our demo. The reason why we don't validate passwords, is because they can't be stored on devices, otherwise it could be leaked.</p>

<p>&gt; 1) It's confusing for developers and requires them do one more step. The store should not get opened if the passphrase is wrong. </p>

<p>What would you recommend? Is necessary to open the storage and try to decrypt it, I can be wrong.</p>

<p>&gt; It also leads to a problem I've discovered:<br/>
&gt; Open datastore with one passphrase. Insert some data into it. Close the datastore. Open it with another passphrase. Insert some data into it. That way you can no longer call readAll, as it won't work for any of the two passphrases. This means that the write method doesn't depend on the passphrase being right or wrong. It just writes the data with the current one.</p>

<p>It might be some issue with the workflow, what we planned was:</p>

<p>1 - Open that storage with passpharse: "abracadabra"<br/>
2- Encrypt the about of data inserted by that user<br/>
3- Closes the application<br/>
4- Open the application again and try to decrypt that data with the same passhparse, otherwise throw thousand of errors at the screen</p>

<p>As far as I know we don't have any feature atm for passpharse change.</p>

<p>&gt; 2) Performance bottleneck. Having to read all the entities from the database is expensive. Also if they're just thrown away right after the reading, GC kicks in and halts the code execution for a while.</p>

<p>We are aware of it, our major goal was to lay down the groundwork for encryption first and take care of queries on data storage later, be patient my friend. Two things are completely trick for mobile devices: queries for data storage and worse, querying encrypt data, so one step at time.</p>

<p>&gt;Possible implementation:<br/>
&gt; When the store is created, save some metadata entity at the first row. It might probably be completely random data, as we'll be only interested in reading it and deciding if the passphrase was right (similar to what readAll does). If it's not right, throw an InvalidKeyException right when the store is being opened. That way, developers will be sure that if the store has been opened, it's safe to read and write to it.</p>

<p>I wouldn't add some trash to the local storage of mobile phones only because we need a workaround to skip one step. If yo u look at libraries like SQLCipher, you need to open the storage to decrypt that data, there's no simple answer for it.</p></div>
        <div style="color:#505050;padding:4px 0 0 0;">                </div>
    </td>
</tr>
                    </table>
                </td>
            </tr>
        </table>
    </td>
</tr>













            </table>
        </td><!-- End #email-page -->
    </tr>
    <tr valign="top">
        <td style="color:#505050;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:10px;line-height:14px;padding: 0 16px 16px 16px;text-align:center;">
            This message is automatically generated by JIRA.<br />
            If you think it was sent incorrectly, please contact your JIRA administrators<br />
            For more information on JIRA, see: <a style='color:#3b73af;' href='http://www.atlassian.com/software/jira'>http://www.atlassian.com/software/jira</a>
        </td>
    </tr>
</table><!-- End #email-wrap -->
</div><!-- End #email-body -->