@@ -890,10 +890,95 @@
890 890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_result_int(context, 0);
891 891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
892 892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_result_int(context, 1);
893 893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
894 894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Convert the input string into an SHA1. Make a notation in the
898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** CONCEALED table so that the hash can be undo using the db_reveal()
899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** function at some later time.
900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The value returned is stored in static space and will be overwritten
902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** on subsequent calls.
903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *db_conceal(const char *zContent, int n){
905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static char zHash[42];
906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob out;
907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sha1sum_step_text(zContent, n);
908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sha1sum_finish(&out);
909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ strcpy(zHash, blob_str(&out));
910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_reset(&out);
911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_multi_exec(
912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "INSERT OR IGNORE INTO concealed VALUES(%Q,%Q)",
913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zHash, zContent
914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return zHash;
916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Attempt to look up the input in the CONCEALED table. If found,
920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and if the okRdAddr permission is enabled then return the
921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** original value for which the input is a hash. If okRdAddr is
922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** false or if the lookup fails, return the original input.
923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** In either case, the string returned is stored in space obtained
925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** from malloc and should be freed by the calling function.
926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *db_reveal(const char *zKey){
928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zOut;
929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( g.okRdAddr ){
930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zOut = db_text(0, "SELECT content FROM concealed WHERE hash=%Q", zKey);
931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zOut = 0;
933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zOut==0 ){
935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zOut = mprintf("%s", zKey);
936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return zOut;
938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The conceal() SQL function. Compute an SHA1 hash of the argument
942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and return that hash as a 40-character lower-case hex number.
943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void sha1_function(
945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_context *context,
946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int argc,
947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_value **argv
948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zIn;
950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nIn;
951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zOut;
952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert(argc==1);
953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zIn = (const char*)sqlite3_value_text(argv[0]);
955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zIn ){
956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nIn = sqlite3_value_bytes(argv[0]);
957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zOut = db_conceal(zIn, nIn);
958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_text(context, zOut, -1, SQLITE_TRANSIENT);
959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The reveal() SQL function invokes the db_reveal() function.
964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void reveal_function(
966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_context *context,
967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int argc,
968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_value **argv
969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zIn;
971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zOut;
972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert(argc==1);
973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zIn = (const char*)sqlite3_value_text(argv[0]);
975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zIn ){
976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zOut = db_reveal(zIn);
977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_text(context, zOut, -1, free);
978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
895 980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
896 981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
897 982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This function registers auxiliary functions when the SQLite
898 983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** database connection is first established.
899 984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -902,10 +987,16 @@
902 987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( once ){
903 988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_create_function(g.db, "print", -1, SQLITE_UTF8, 0,db_sql_print,0,0);
904 989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_create_function(
905 990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.db, "file_is_selected", 1, SQLITE_UTF8, 0, file_is_selected,0,0
906 991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_create_function(
993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ g.db, "conceal", 1, SQLITE_UTF8, 0, sha1_function,0,0
994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_create_function(
996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ g.db, "reveal", 1, SQLITE_UTF8, 0, reveal_function,0,0
997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
907 998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.fSqlTrace ){
908 999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_trace(g.db, db_sql_trace, 0);
909 1000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
910 1001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
once = 0;
911 1002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
912 1003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!