Skip to content

ttessier1/sqlitebarehashing

Repository files navigation

SqliteBareHashing

Sqlite Bare Hashing is an sqlite hashing library using no dependencies. Currently the algorithms available are:

Md2 Md4 Md5 Sha1 Sha224 Sha256 Sha384 Sha512

These are all madeusing the reference implementations as supplied from their respective RFCs

In order to build, the project is currently dependent on visual studio 2022 where the project and solution file has been specified in the source.

In order to test, use a recent sqlite3.exe file with the dll output file in the same folder or from the folder you are running from:

sqlite3.exe

.load barehashing.dll select * FROM INFORMATION_SCHEMA.PRAGMA_FUNCTION_LIST WHERE name in ('md2','md4','md5','sha1','sha224','sha256','sha384','sha512','blobmd2','blobmd4','blobmd5','blobsha1','blobsha224','blobsha256','blobsha384','blobsha512') order by name;

Should give similar results to: blobmd2|0|s|utf8|4|2099200 blobmd4|0|s|utf8|4|2099200 blobmd5|0|s|utf8|4|2099200 blobsha1|0|s|utf8|4|2099200 blobsha224|0|s|utf8|4|2099200 blobsha256|0|s|utf8|4|2099200 blobsha384|0|s|utf8|4|2099200 blobsha512|0|s|utf8|4|2099200 md2|0|s|utf8|1|2099200 md4|0|s|utf8|1|2099200 md5|0|s|utf8|1|2099200 sha1|0|s|utf8|1|2099200 sha224|0|s|utf8|1|2099200 sha256|0|s|utf8|1|2099200 sha384|0|s|utf8|1|2099200 sha512|0|s|utf8|1|2099200 sha384|0|s|utf8|1|2099200

There is a hash_ping function that tests the extension in terms of ability to call select hash_ping(); ping

select md2(NULL); Runtime error: Invalid Arguments select md2(1); Runtime error: Type Not Supported for Hashing select md2(false); Runtime error: Type Not Supported for Hashing select md2(true); Runtime error: Type Not Supported for Hashing select md2(cast( 1234 as text)); 45337AB528AB456381FD0FE311633A6B select md2(cast(false as text)),cast(false as text); DBD315C8E6F342D62799FA6669249EAD|0 select md2(cast(true as text)),cast(true as text); C92C0BABDC764D8674BCEA14A55D867D|1 select md2(''); 8350E5A3E24C153DF2275C9F80692773 select md2('a'); 32EC01EC4A6DAC72C0AB96FB34C0B5D1 select md2('abc'); DA853B0D3F88D99B30283A69E6DED6BB select md2('abcdefghijklmnopqrstuvwxyz'); 4E8DDFF3650292AB5A4108C3AA47940B4 select md2('message digest'); AB4F496BFB2A530B219FF33031FE06B0 select md2('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'); DA33DEF2A42DF13975352846C30338CD select md2('12345678901234567890123456789012345678901234567890123456789012345678901234567890'); D5976F79D83D3A0DC9806C3C66F3EFD8

select md4(''); 31D6CFE0D16AE931B73C59D7E0C089C0 select md4('a'); BDE52CB31DE33E46245E05FBDBD6FB24 select md4('abc'); A448017AAF21D8525FC10AE87AA6729D select md4('abcdefghijklmnopqrstuvwxyz'); D79E1C308AA5BBCDEEA8ED63DF412DA9 select md4('message digest'); D9130A8164549FE818874806E1C7014B select md4('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'); 043F8582F241DB351CE627E153E7F0E4 select md4('12345678901234567890123456789012345678901234567890123456789012345678901234567890'); E33B4DDC9C38F2199C3E7B164FCC0536

select md5(''); D41D8CD98F00B204E9800998ECF8427E select md5('a'); 0CC175B9C0F1B6A831C399E269772661 select md5('abc'); 900150983CD24FB0D6963F7D28E17F72 select md5('abcdefghijklmnopqrstuvwxyz'); C3FCD3D76192E4007DFB496CCA67E13B select md5('message digest'); F96B697D7CB7938D525A2F31AAF161D0 select md5('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'); D174AB98D277D9F5A5611C2C9F419D9F select md5('12345678901234567890123456789012345678901234567890123456789012345678901234567890'); 57EDF4A22BE3C955AC49DA2E2107B67A

select sha1(''); DA39A3EE5E6B4B0D3255BFEF95601890AFD80709 select sha1('a'); 86F7E437FAA5A7FCE15D1DDCB9EAEAEA377667B8 select sha1('abc'); A9993E364706816ABA3E25717850C26C9CD0D89D select sha1('abcdefghijklmnopqrstuvwxyz'); 32D10C7B8CF96570CA04CE37F2A19D84240D3A89 select sha1('message digest'); C12252CEDA8BE8994D5FA0290A47231C1D16AAE3 select sha1('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'); 761C457BF73B14D27E9E9265C46F4B4DDA11F940 select sha1('12345678901234567890123456789012345678901234567890123456789012345678901234567890'); 50ABF5706A150990A08B2C5EA40FA0E585554732

select sha224(''); D14A028C2A3A2BC9476102BB288234C415A2B01F828EA62AC5B3E42F select sha224('a'); ABD37534C7D9A2EFB9465DE931CD7055FFDB8879563AE98078D6D6D5 select sha224('abc'); 23097D223405D8228642A477BDA255B32AADBCE4BDA0B3F7E36C9DA7 select sha224('abcdefghijklmnopqrstuvwxyz'); 45A5F72C39C5CFF2522EB3429799E49E5F44B356EF926BCF390DCCC2 select sha224('message digest'); 2CB21C83AE2F004DE7E81C3C7019CBCB65B71AB656B22D6D0C39B8EB select sha224('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'); BFF72B4FCB7D75E5632900AC5F90D219E05E97A7BDE72E740DB393D9 select sha224('12345678901234567890123456789012345678901234567890123456789012345678901234567890'); B50AECBE4E9BB0B57BC5F3AE760A8E01DB24F203FB3CDCD13148046E

select sha256(''); E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855 select sha256('a'); CA978112CA1BBDCAFAC231B39A23DC4DA786EFF8147C4E72B9807785AFEE48BB select sha256('abc'); BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD select sha256('abcdefghijklmnopqrstuvwxyz'); 71C480DF93D6AE2F1EFAD1447C66C9525E316218CF51FC8D9ED832F2DAF18B73 select sha256('message digest'); F7846F55CF23E14EEBEAB5B4E1550CAD5B509E3348FBC4EFA3A1413D393CB650 select sha256('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'); DB4BFCBD4DA0CD85A60C3C37D3FBD8805C77F15FC6B1FDFE614EE0A7C8FDB4C0 select sha256('12345678901234567890123456789012345678901234567890123456789012345678901234567890'); F371BC4A311F2B009EEF952DD83CA80E2B60026C8E935592D0F9C308453C813E

select sha384(''); 38B060A751AC96384CD9327EB1B1E36A21FDB71114BE07434C0CC7BF63F6E1DA274EDEBFE76F65FBD51AD2F14898B95B select sha384('a'); 54A59B9F22B0B80880D8427E548B7C23ABD873486E1F035DCE9CD697E85175033CAA88E6D57BC35EFAE0B5AFD3145F31 select sha384('abc'); CB00753F45A35E8BB5A03D699AC65007272C32AB0EDED1631A8B605A43FF5BED8086072BA1E7CC2358BAECA134C825A7 select sha384('abcdefghijklmnopqrstuvwxyz'); FEB67349DF3DB6F5924815D6C3DC133F091809213731FE5C7B5F4999E463479FF2877F5F2936FA63BB43784B12F3EBB4 select sha384('message digest'); 473ED35167EC1F5D8E550368A3DB39BE54639F828868E9454C239FC8B52E3C61DBD0D8B4DE1390C256DCBB5D5FD99CD5 select sha384('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'); 1761336E3F7CBFE51DEB137F026F89E01A448E3B1FAFA64039C1464EE8732F11A5341A6F41E0C202294736ED64DB1A84 select sha384('12345678901234567890123456789012345678901234567890123456789012345678901234567890'); B12932B0627D1C060942F5447764155655BD4DA0C9AFA6DD9B9EF53129AF1B8FB0195996D2DE9CA0DF9D821FFEE67026

select sha512(''); CF83E1357EEFB8BDF1542850D66D8007D620E4050B5715DC83F4A921D36CE9CE47D0D13C5D85F2B0FF8318D2877EEC2F63B931BD47417A81A538327AF927DA3E select sha512('a'); 1F40FC92DA241694750979EE6CF582F2D5D7D28E18335DE05ABC54D0560E0F5302860C652BF08D560252AA5E74210546F369FBBBCE8C12CFC7957B2652FE9A75 select sha512('abc'); DDAF35A193617ABACC417349AE20413112E6FA4E89A97EA20A9EEEE64B55D39A2192992A274FC1A836BA3C23A3FEEBBD454D4423643CE80E2A9AC94FA54CA49F select sha512('abcdefghijklmnopqrstuvwxyz'); 4DBFF86CC2CA1BAE1E16468A05CB9881C97F1753BCE3619034898FAA1AABE429955A1BF8EC483D7421FE3C1646613A59ED5441FB0F321389F77F48A879C7B1F1 select sha512('message digest'); 107DBF389D9E9F71A3A95F6C055B9251BC5268C2BE16D6C13492EA45B0199F3309E16455AB1E96118E8A905D5597B72038DDB372A89826046DE66687BB420E7C select sha512('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'); 1E07BE23C26A86EA37EA810C8EC7809352515A970E9253C26F536CFC7A9996C45C8370583E0A78FA4A90041D71A4CEAB7423F19C71B9D5A3E01249F0BEBD5894 select sha512('12345678901234567890123456789012345678901234567890123456789012345678901234567890'); 72EC1EF1124A45B047E8B7C75A932195135BB61DE24EC0D1914042246E0AEC3A2354E093D76F3048B456764346900CB130D2A4FD5DD16ABB5E30BCB850DEE843

To Test the blob functions a table can be created such as the following:

create table test(col1 blob); insert into test VALUES(NULL); insert into test VALUES(TRUE); insert into test VALUES(FALSE); insert into test VALUES(''); insert into test VALUES('a'); insert into test VALUES('abc'); insert into test VALUES('abcdefghijklmnopqrstuvwxyz'); insert into test VALUES('message digest'); insert into test VALUES('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'); insert into test VALUES('1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890');

Then to test blob md2

select blobmd2('main','test','col1',rowid),col1 FROM test; | |1 |0 8350E5A3E24C153DF2275C9F80692773| 32EC01EC4A6DAC72C0AB96FB34C0B5D1|a DA853B0D3F88D99B30283A69E6DED6BB|abc 4E8DDFF3650292AB5A4108C3AA47940B|abcdefghijklmnopqrstuvwxyz C6F1902A06BC5590D81D291F67FEF353|message digestmessage digest AB4F496BFB2A530B219FF33031FE06B0|message digest DA33DEF2A42DF13975352846C30338CD|ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 2A1A8756D7B4E1C7A823DE426ADD0105|1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890

Then to test blob md4 select blobmd4('main','test','col1',rowid),col1 FROM test; | |1 |0 31D6CFE0D16AE931B73C59D7E0C089C0| BDE52CB31DE33E46245E05FBDBD6FB24|a A448017AAF21D8525FC10AE87AA6729D|abc D79E1C308AA5BBCDEEA8ED63DF412DA9|abcdefghijklmnopqrstuvwxyz C53EBE500B76FF3EE7999401F905B956|message digestmessage digest D9130A8164549FE818874806E1C7014B|message digest 043F8582F241DB351CE627E153E7F0E4|ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 479B75AA4F793321DD4892A22BC8EB75|1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890

Then to test blob md5 select blobmd5('main','test','col1',rowid),col1 FROM test; | |1 |0 D41D8CD98F00B204E9800998ECF8427E| 0CC175B9C0F1B6A831C399E269772661|a 900150983CD24FB0D6963F7D28E17F72|abc C3FCD3D76192E4007DFB496CCA67E13B|abcdefghijklmnopqrstuvwxyz 2F2F093779A5809F7E68FC47CF6A0F9E|message digestmessage digest F96B697D7CB7938D525A2F31AAF161D0|message digest D174AB98D277D9F5A5611C2C9F419D9F|ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 268C7919189D85E276D74B8C60B2F84F|1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890

To test blobsha1 select blobsha1('main','test','col1',rowid),col1 FROM test; | |1 |0 DA39A3EE5E6B4B0D3255BFEF95601890AFD80709| 86F7E437FAA5A7FCE15D1DDCB9EAEAEA377667B8|a A9993E364706816ABA3E25717850C26C9CD0D89D|abc 32D10C7B8CF96570CA04CE37F2A19D84240D3A89|abcdefghijklmnopqrstuvwxyz BF6995873F33C3445835C109825261C8588401BE|message digestmessage digest C12252CEDA8BE8994D5FA0290A47231C1D16AAE3|message digest 761C457BF73B14D27E9E9265C46F4B4DDA11F940|ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 38F11BC1B1F19016E253C31064E04259D944B325|1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890

to test blobsha224 select blobsha224('main','test','col1',rowid),col1 FROM test; | |1 |0 D14A028C2A3A2BC9476102BB288234C415A2B01F828EA62AC5B3E42F| ABD37534C7D9A2EFB9465DE931CD7055FFDB8879563AE98078D6D6D5|a 23097D223405D8228642A477BDA255B32AADBCE4BDA0B3F7E36C9DA7|abc 45A5F72C39C5CFF2522EB3429799E49E5F44B356EF926BCF390DCCC2|abcdefghijklmnopqrstuvwxyz D17C5B49B9B526DDC711631F49A7E1ADCF4BBF16E96FBE397A1C9650|message digestmessage digest 2CB21C83AE2F004DE7E81C3C7019CBCB65B71AB656B22D6D0C39B8EB|message digest BFF72B4FCB7D75E5632900AC5F90D219E05E97A7BDE72E740DB393D9|ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 F3F8BFC1BDB2251A582C07F74E5F57CF117EB47CBF184B9E67EA6890|1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890

to test blobsha256 select blobsha256('main','test','col1',rowid),col1 FROM test; | |1 |0 E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855| CA978112CA1BBDCAFAC231B39A23DC4DA786EFF8147C4E72B9807785AFEE48BB|a BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD|abc 71C480DF93D6AE2F1EFAD1447C66C9525E316218CF51FC8D9ED832F2DAF18B73|abcdefghijklmnopqrstuvwxyz 2590C190CC9F990C2C4CB2D60B1CD11F60ED81E9DA6F54868532F684278A2033|message digestmessage digest F7846F55CF23E14EEBEAB5B4E1550CAD5B509E3348FBC4EFA3A1413D393CB650|message digest DB4BFCBD4DA0CD85A60C3C37D3FBD8805C77F15FC6B1FDFE614EE0A7C8FDB4C0|ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 6E4ECB71DC148318E2FD61EFD37B906F29205B5767BEA7C89625FAFDD2106B91|1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890

to test blobsha384 select blobsha384('main','test','col1',rowid),col1 FROM test; | |1 |0 38B060A751AC96384CD9327EB1B1E36A21FDB71114BE07434C0CC7BF63F6E1DA274EDEBFE76F65FBD51AD2F14898B95B| 54A59B9F22B0B80880D8427E548B7C23ABD873486E1F035DCE9CD697E85175033CAA88E6D57BC35EFAE0B5AFD3145F31|a CB00753F45A35E8BB5A03D699AC65007272C32AB0EDED1631A8B605A43FF5BED8086072BA1E7CC2358BAECA134C825A7|abc FEB67349DF3DB6F5924815D6C3DC133F091809213731FE5C7B5F4999E463479FF2877F5F2936FA63BB43784B12F3EBB4|abcdefghijklmnopqrstuvwxyz 92BA582C2F5280ABD2116930F7E451FB9FE2A454C7C3B65E35E215B5AB1C70B6CA394DFA32A188532F3D2E075B86E4A9|message digestmessage digest 473ED35167EC1F5D8E550368A3DB39BE54639F828868E9454C239FC8B52E3C61DBD0D8B4DE1390C256DCBB5D5FD99CD5|message digest 1761336E3F7CBFE51DEB137F026F89E01A448E3B1FAFA64039C1464EE8732F11A5341A6F41E0C202294736ED64DB1A84|ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 8DEB7DCCAE68EFBAFEC82D5A3D9D851AEF458BC27FFCC0FCC8CC0E43B7620EB14865B0D675DBBF9230548528B47FFE7B|1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890

to test blobsha512 select blobsha512('main','test','col1',rowid),col1 FROM test; | |1 |0 CF83E1357EEFB8BDF1542850D66D8007D620E4050B5715DC83F4A921D36CE9CE47D0D13C5D85F2B0FF8318D2877EEC2F63B931BD47417A81A538327AF927DA3E| 1F40FC92DA241694750979EE6CF582F2D5D7D28E18335DE05ABC54D0560E0F5302860C652BF08D560252AA5E74210546F369FBBBCE8C12CFC7957B2652FE9A75|a DDAF35A193617ABACC417349AE20413112E6FA4E89A97EA20A9EEEE64B55D39A2192992A274FC1A836BA3C23A3FEEBBD454D4423643CE80E2A9AC94FA54CA49F|abc 4DBFF86CC2CA1BAE1E16468A05CB9881C97F1753BCE3619034898FAA1AABE429955A1BF8EC483D7421FE3C1646613A59ED5441FB0F321389F77F48A879C7B1F1|abcdefghijklmnopqrstuvwxyz 2983DB9FD37B62C1B122CCFA33535EE96E764FB85E670805F33966A0E8D21101EAA16B71670FD03683574B8C57D403527AB236A213D56F0C69EDD6B8E80E2D1E|message digestmessage digest 107DBF389D9E9F71A3A95F6C055B9251BC5268C2BE16D6C13492EA45B0199F3309E16455AB1E96118E8A905D5597B72038DDB372A89826046DE66687BB420E7C|message digest 1E07BE23C26A86EA37EA810C8EC7809352515A970E9253C26F536CFC7A9996C45C8370583E0A78FA4A90041D71A4CEAB7423F19C71B9D5A3E01249F0BEBD5894|ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 72BF79456740D55C96AD9301A353D6F821910AE3B2E9B2F40220630D4FC61C2C2D8CE3FA42A2FB744B39D59F08BA5F3678972B20A1C7AE5061D4919F1B1B0234|1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890