utelle / SQLite3MultipleCiphers

SQLite3 encryption extension with support for multiple ciphers
https://utelle.github.io/SQLite3MultipleCiphers/
MIT License
390 stars 73 forks source link

How to use SQLite3MultipleCiphers with golang? #71

Closed hongnod closed 2 years ago

hongnod commented 2 years ago

Try to use SQLite3MultipleCiphers released amalgamation file to replace go-sqlite3's bind file. build with no success. it says: go build .\simple.go

github.com/mattn/go-sqlite3

In file included from C:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/x86intrin.h:43, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/winnt.h:1554, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/minwindef.h:163, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/windef.h:8, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/windows.h:69, from sqlite3-binding.c:77: sqlite3-binding.c: In function 'aesGenKeyEncryptInternal': C:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/smmintrin.h:447:1: error: inlining failed in call to always_inline '_mm_extract_epi32': target specific option mismatch _mm_extract_epi32 (m128i X, const int N) ^~~~~ sqlite3-binding.c:256323:16: note: called from here temp = _mm_extract_epi32(_mm_aeskeygenassist_si128(_mm_setr_epi32(0, temp, 0, 0), 0), 1); ^~~~~~~~~~~~~~~~~ In file included from C:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/x86intrin.h:45, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/winnt.h:1554, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/minwindef.h:163, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/windef.h:8, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/windows.h:69, from sqlite3-binding.c:77: C:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/wmmintrin.h:87:1: error: inlining failed in call to always_inline '_mm_aeskeygenassist_si128': target specific option mismatch _mm_aeskeygenassist_si128 (m128i X, const int C) ^~~~~~~~~ sqlite3-binding.c:256323:16: note: called from here temp = _mm_extract_epi32(_mm_aeskeygenassist_si128(_mm_setr_epi32(0, temp, 0, 0), 0), 1); ^~~~~~~~~~~~~~~~~ In file included from C:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/x86intrin.h:43, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/winnt.h:1554, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/minwindef.h:163, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/windef.h:8, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/windows.h:69, from sqlite3-binding.c:77: C:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/smmintrin.h:447:1: error: inlining failed in call to always_inline '_mm_extract_epi32': target specific option mismatch _mm_extract_epi32 (m128i X, const int N) ^~~~~ sqlite3-binding.c:256323:16: note: called from here temp = _mm_extract_epi32(_mm_aeskeygenassist_si128(_mm_setr_epi32(0, temp, 0, 0), 0), 1); ^~~~~~~~~~~~~~~~~ In file included from C:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/x86intrin.h:45, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/winnt.h:1554, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/minwindef.h:163, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/windef.h:8, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/windows.h:69, from sqlite3-binding.c:77: C:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/wmmintrin.h:87:1: error: inlining failed in call to always_inline '_mm_aeskeygenassist_si128': target specific option mismatch _mm_aeskeygenassist_si128 (m128i X, const int C) ^~~~~~~~~ sqlite3-binding.c:256323:16: note: called from here temp = _mm_extract_epi32(_mm_aeskeygenassist_si128(_mm_setr_epi32(0, temp, 0, 0), 0), 1); ^~~~~~~~~~~~~~~~~ In file included from C:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/x86intrin.h:43, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/winnt.h:1554, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/minwindef.h:163, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/windef.h:8, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/windows.h:69, from sqlite3-binding.c:77: C:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/smmintrin.h:447:1: error: inlining failed in call to always_inline '_mm_extract_epi32': target specific option mismatch _mm_extract_epi32 (m128i X, const int N) ^~~~~ sqlite3-binding.c:256328:16: note: called from here temp = _mm_extract_epi32(_mm_aeskeygenassist_si128(_mm_setr_epi32(0, temp, 0, 0), 0), 0); ^~~~~~~~~~~~~~~~~ In file included from C:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/x86intrin.h:45, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/winnt.h:1554, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/minwindef.h:163, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/windef.h:8, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/windows.h:69, from sqlite3-binding.c:77: C:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/wmmintrin.h:87:1: error: inlining failed in call to always_inline '_mm_aeskeygenassist_si128': target specific option mismatch _mm_aeskeygenassist_si128 (m128i X, const int C) ^~~~~~~~~ sqlite3-binding.c:256328:16: note: called from here temp = _mm_extract_epi32(_mm_aeskeygenassist_si128(_mm_setr_epi32(0, temp, 0, 0), 0), 0); ^~~~~~~~~~~~~~~~~ In file included from C:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/x86intrin.h:43, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/winnt.h:1554, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/minwindef.h:163, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/windef.h:8, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/windows.h:69, from sqlite3-binding.c:77: C:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/smmintrin.h:447:1: error: inlining failed in call to always_inline '_mm_extract_epi32': target specific option mismatch _mm_extract_epi32 (m128i X, const int N) ^~~~~ sqlite3-binding.c:256328:16: note: called from here temp = _mm_extract_epi32(_mm_aeskeygenassist_si128(_mm_setr_epi32(0, temp, 0, 0), 0), 0); ^~~~~~~~~~~~~~~~~ In file included from C:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/x86intrin.h:45, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/winnt.h:1554, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/minwindef.h:163, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/windef.h:8, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/windows.h:69, from sqlite3-binding.c:77: C:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/wmmintrin.h:87:1: error: inlining failed in call to always_inline '_mm_aeskeygenassist_si128': target specific option mismatch _mm_aeskeygenassist_si128 (m128i X, const int C) ^~~~~~~~~ sqlite3-binding.c:256328:16: note: called from here temp = _mm_extract_epi32(_mm_aeskeygenassist_si128(_mm_setr_epi32(0, temp, 0, 0), 0), 0); ^~~~~~~~~~~~~~~~~ In file included from C:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/x86intrin.h:43, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/winnt.h:1554, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/minwindef.h:163, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/windef.h:8, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/windows.h:69, from sqlite3-binding.c:77: C:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/smmintrin.h:447:1: error: inlining failed in call to always_inline '_mm_extract_epi32': target specific option mismatch _mm_extract_epi32 (m128i X, const int N) ^~~~~ sqlite3-binding.c:256323:16: note: called from here temp = _mm_extract_epi32(_mm_aeskeygenassist_si128(_mm_setr_epi32(0, temp, 0, 0), 0), 1); ^~~~~~~~~~~~~~~~~ In file included from C:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/x86intrin.h:45, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/winnt.h:1554, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/minwindef.h:163, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/windef.h:8, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/windows.h:69, from sqlite3-binding.c:77: C:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/wmmintrin.h:87:1: error: inlining failed in call to always_inline '_mm_aeskeygenassist_si128': target specific option mismatch _mm_aeskeygenassist_si128 (m128i X, const int C) ^~~~~~~~~ sqlite3-binding.c:256323:16: note: called from here temp = _mm_extract_epi32(_mm_aeskeygenassist_si128(_mm_setr_epi32(0, temp, 0, 0), 0), 1); ^~~~~~~~~~~~~~~~~ In file included from C:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/x86intrin.h:43, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/winnt.h:1554, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/minwindef.h:163, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/windef.h:8, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/windows.h:69, from sqlite3-binding.c:77: C:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/smmintrin.h:447:1: error: inlining failed in call to always_inline '_mm_extract_epi32': target specific option mismatch _mm_extract_epi32 (m128i X, const int N) ^~~~~ sqlite3-binding.c:256328:16: note: called from here temp = _mm_extract_epi32(_mm_aeskeygenassist_si128(_mm_setr_epi32(0, temp, 0, 0), 0), 0); ^~~~~~~~~~~~~~~~~ In file included from C:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/x86intrin.h:45, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/winnt.h:1554, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/minwindef.h:163, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/windef.h:8, from C:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include/windows.h:69, from sqlite3-binding.c:77: C:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/wmmintrin.h:87:1: error: inlining failed in call to always_inline '_mm_aeskeygenassist_si128': target specific option mismatch _mm_aeskeygenassist_si128 (m128i X, const int C) ^~~~~~~~~ sqlite3-binding.c:256328:16: note: called from here temp = _mm_extract_epi32(_mm_aeskeygenassist_si128(_mm_setr_epi32(0, temp, 0, 0), 0), 0); ^~~~~~~~~~~~~~~~~ PS D:\golabs\routekit>

utelle commented 2 years ago

The errors are related to the implementation of AES hardware support. Unfortunately, you didn't show how the compiler is invoked. For MinGW you have to specify the compiler options -msse4.2 -maes. Most likely adding these options will fix the problem.

utelle commented 2 years ago

IMHO this issue is just about properly compiling in the golang environment, which only requires to specify correct compiler options. Therefore I'm going to close the issue.

nkev commented 2 years ago

@hongnod Did you get this working? If so please provide details as a guide for others

hongnod commented 2 years ago

@hongnod Did you get this working? If so please provide details as a guide for others

yes,works. pls ref to https://github.com/hongnod/go-sqlite3mc sqlite3mc_cgo.go