better-sqlite3-multiple-ciphers icon indicating copy to clipboard operation
better-sqlite3-multiple-ciphers copied to clipboard

How to use `db.pragma('key, "some-long-string-with-quotes")`?

Open titanism opened this issue 1 year ago • 2 comments

We've read at https://www.zetetic.net/sqlcipher/sqlcipher-api/#example-2-raw-key-data-without-key-derivation that PRAGMA key accepts a "64 character hex string".

Screen Shot 2023-12-10 at 11 54 07 AM

How might we write this with pure JavaScript? Is there a way to do db.pragma('key', Buffer.from('something-with-quotes').toString('hex')) and pad it with null or something to get to 64 character hex string?

This issue is filed as there is an edge case where you may be using another library that does not have .key and .rekey built-in wrapper function and the password may contain quote characters, e.g. " which would break key="somekey" usage when variables are interpolated. True, you could simply escape the quotes, but we were wondering how you might write with this approach:

sqlite> PRAGMA key = "x'2DD29CA851E7B56E4697B0E1F08507293D761A05CE4D1B628663F411A8086D99'";
// this does not work since it's not 64 character hex string
db.pragma(
  `key="x'${Buffer.from('some-string-with-quotes').toString('hex')}'"`
);

titanism avatar Dec 10 '23 17:12 titanism

Sorry about the extremely delayed response. Any chance you could create a minimal reproducible repo that fails with the particular error? Time is a luxury for me at the moment.

m4heshd avatar Jan 12 '24 01:01 m4heshd