Skip to content

Instantly share code, notes, and snippets.

@qfrank
Created October 16, 2023 09:48
Show Gist options
  • Save qfrank/501e3bb8e92c7d27054ed7d4f804a275 to your computer and use it in GitHub Desktop.
Save qfrank/501e3bb8e92c7d27054ed7d4f804a275 to your computer and use it in GitHub Desktop.
test if encrypting works
func TestOpen(t *testing.T) {
filePath := "/Users/xxx/Documents/tmp/0x49447b3c313e9bca0aeec82fb97a6b69f158d45797641919960e03ac60c83577-v4.db"
encrypted, err := IsEncrypted(filePath)
require.NoError(t, err)
require.True(t, encrypted)
db, err := InitializeDB(filePath, "0x20756cad9b728c8225fd8cedb6badaf8731e174506950219ea657cd54f35f46c",dbsetup.ReducedKDFIterationsNumber)
require.NoError(t, err)
rows, err := db.Query("SELECT COUNT(1) FROM keypairs_accounts")
require.NoError(t, err)
var total int
if rows.Next() {
err = rows.Scan(&total)
require.NoError(t, err)
}
require.Equal(t, 2, total)
}
// sqlite3Header defines the header string used by SQLite 3.
var sqlite3Header = []byte("SQLite format 3\000")
func IsEncrypted(filename string) (bool, error) {
// open file
db, err := os.Open(filename)
if err != nil {
return false, err
}
defer db.Close()
// read header
var header [16]byte
n, err := db.Read(header[:])
if err != nil {
return false, err
}
if n != len(header) {
return false, errors.New("go-sqlcipher: could not read full header")
}
// SQLCipher encrypts also the header, the file is encrypted if the read
// header does not equal the header string used by SQLite 3.
encrypted := !bytes.Equal(header[:], sqlite3Header)
return encrypted, nil
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment