kibi-swipl-linux-x64-gnu 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -0
- package/bin/swipl +0 -0
- package/bin/swipl-win +0 -0
- package/build-manifest.json +70 -0
- package/lib/cmake/swipl/SWIPLConfig.cmake +21 -0
- package/lib/cmake/swipl/SWIPLConfigVersion.cmake +65 -0
- package/lib/cmake/swipl/SWIPLTargets-release.cmake +28 -0
- package/lib/cmake/swipl/SWIPLTargets.cmake +109 -0
- package/lib/swipl/ABI +1 -0
- package/lib/swipl/LICENSE +41 -0
- package/lib/swipl/README.md +116 -0
- package/lib/swipl/app/README.md +25 -0
- package/lib/swipl/app/app.pl +87 -0
- package/lib/swipl/app/pack.pl +350 -0
- package/lib/swipl/app/qlf.pl +521 -0
- package/lib/swipl/app/splfr.pl +177 -0
- package/lib/swipl/app/sys.pl +310 -0
- package/lib/swipl/bin/swipl.home +1 -0
- package/lib/swipl/boot/apply.pl +73 -0
- package/lib/swipl/boot/attvar.pl +344 -0
- package/lib/swipl/boot/autoload.pl +1226 -0
- package/lib/swipl/boot/bags.pl +283 -0
- package/lib/swipl/boot/dcg.pl +388 -0
- package/lib/swipl/boot/dicts.pl +193 -0
- package/lib/swipl/boot/dwim.pl +485 -0
- package/lib/swipl/boot/engines.pl +152 -0
- package/lib/swipl/boot/expand.pl +1628 -0
- package/lib/swipl/boot/gc.pl +65 -0
- package/lib/swipl/boot/history.pl +304 -0
- package/lib/swipl/boot/init.pl +4682 -0
- package/lib/swipl/boot/iri.pl +64 -0
- package/lib/swipl/boot/license.pl +390 -0
- package/lib/swipl/boot/load.pl +81 -0
- package/lib/swipl/boot/messages.pl +2521 -0
- package/lib/swipl/boot/packs.pl +306 -0
- package/lib/swipl/boot/predopts.pl +154 -0
- package/lib/swipl/boot/qlf.pl +141 -0
- package/lib/swipl/boot/rc.pl +263 -0
- package/lib/swipl/boot/syspred.pl +1634 -0
- package/lib/swipl/boot/tabling.pl +2321 -0
- package/lib/swipl/boot/threads.pl +42 -0
- package/lib/swipl/boot/toplevel.pl +2248 -0
- package/lib/swipl/boot/topvars.pl +261 -0
- package/lib/swipl/boot.prc +0 -0
- package/lib/swipl/cmake/swipl.cmake +131 -0
- package/lib/swipl/customize/README.md +23 -0
- package/lib/swipl/customize/edit +101 -0
- package/lib/swipl/customize/init.pl +164 -0
- package/lib/swipl/demo/README.md +33 -0
- package/lib/swipl/demo/likes.pl +44 -0
- package/lib/swipl/doc/packages/examples/chr/bool.chr +281 -0
- package/lib/swipl/doc/packages/examples/chr/chrdif.chr +87 -0
- package/lib/swipl/doc/packages/examples/chr/chrfreeze.chr +6 -0
- package/lib/swipl/doc/packages/examples/chr/family.chr +116 -0
- package/lib/swipl/doc/packages/examples/chr/fib.chr +24 -0
- package/lib/swipl/doc/packages/examples/chr/fibonacci.chr +31 -0
- package/lib/swipl/doc/packages/examples/chr/gcd.chr +28 -0
- package/lib/swipl/doc/packages/examples/chr/leq.chr +34 -0
- package/lib/swipl/doc/packages/examples/chr/listdom.chr +138 -0
- package/lib/swipl/doc/packages/examples/chr/primes.chr +29 -0
- package/lib/swipl/doc/packages/examples/http/README.md +98 -0
- package/lib/swipl/doc/packages/examples/http/calc.pl +92 -0
- package/lib/swipl/doc/packages/examples/http/demo_body.pl +232 -0
- package/lib/swipl/doc/packages/examples/http/demo_client.pl +165 -0
- package/lib/swipl/doc/packages/examples/http/demo_daemon.pl +38 -0
- package/lib/swipl/doc/packages/examples/http/demo_files.pl +50 -0
- package/lib/swipl/doc/packages/examples/http/demo_hello.pl +15 -0
- package/lib/swipl/doc/packages/examples/http/demo_login.pl +280 -0
- package/lib/swipl/doc/packages/examples/http/demo_openid.pl +177 -0
- package/lib/swipl/doc/packages/examples/http/demo_pwp.pl +20 -0
- package/lib/swipl/doc/packages/examples/http/demo_rest.pl +56 -0
- package/lib/swipl/doc/packages/examples/http/demo_threads.pl +52 -0
- package/lib/swipl/doc/packages/examples/http/linux-init-script +126 -0
- package/lib/swipl/doc/packages/examples/http/pwp/context.pwp +23 -0
- package/lib/swipl/doc/packages/examples/http/pwp/index.pwp +25 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwp1.pwp +12 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwp2.pwp +10 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwp3.pwp +25 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwp4.pwp +23 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwp5.pwp +11 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwp6.pwp +3 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwp7.pwp +3 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwp8.pwp +3 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwpdb.pl +12 -0
- package/lib/swipl/doc/packages/examples/http/systemd-script.service +18 -0
- package/lib/swipl/doc/packages/examples/http/upstart-script.conf +20 -0
- package/lib/swipl/doc/packages/examples/plunit/read.pl +17 -0
- package/lib/swipl/doc/packages/examples/plunit/simple.pl +33 -0
- package/lib/swipl/doc/packages/examples/ssl/client.pl +83 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/README +52 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/client/client-cert.p12 +0 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/client/client-cert.pem +85 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/client/client-key.pem +30 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/cacert.pem +82 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/careq.pem +18 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/crlnumber +1 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/index.txt +3 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/index.txt.attr +1 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/newcerts/9DC08797A0F63F7C.pem +85 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/newcerts/9DC08797A0F63F7D.pem +85 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/private/cakey.pem +30 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/serial +1 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/server/server-cert.pem +85 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/server/server-key.pem +30 -0
- package/lib/swipl/doc/packages/examples/ssl/https.pl +267 -0
- package/lib/swipl/doc/packages/examples/ssl/server.pl +106 -0
- package/lib/swipl/include/SWI-Prolog.h +1544 -0
- package/lib/swipl/include/SWI-Stream.h +537 -0
- package/lib/swipl/include/Yap/YapInterface.h +283 -0
- package/lib/swipl/include/sicstus/sicstus.h +452 -0
- package/lib/swipl/lib/x86_64-linux/cgi.so +0 -0
- package/lib/swipl/lib/x86_64-linux/crypt.so +0 -0
- package/lib/swipl/lib/x86_64-linux/crypto4pl.so +0 -0
- package/lib/swipl/lib/x86_64-linux/double_metaphone.so +0 -0
- package/lib/swipl/lib/x86_64-linux/files.so +0 -0
- package/lib/swipl/lib/x86_64-linux/hashstream.so +0 -0
- package/lib/swipl/lib/x86_64-linux/http_stream.so +0 -0
- package/lib/swipl/lib/x86_64-linux/isub.so +0 -0
- package/lib/swipl/lib/x86_64-linux/json.so +0 -0
- package/lib/swipl/lib/x86_64-linux/libswipl.so.10 +0 -0
- package/lib/swipl/lib/x86_64-linux/mallocinfo.so +0 -0
- package/lib/swipl/lib/x86_64-linux/md54pl.so +0 -0
- package/lib/swipl/lib/x86_64-linux/memfile.so +0 -0
- package/lib/swipl/lib/x86_64-linux/ntriples.so +0 -0
- package/lib/swipl/lib/x86_64-linux/pcre4pl.so +0 -0
- package/lib/swipl/lib/x86_64-linux/porter_stem.so +0 -0
- package/lib/swipl/lib/x86_64-linux/process.so +0 -0
- package/lib/swipl/lib/x86_64-linux/prolog_stream.so +0 -0
- package/lib/swipl/lib/x86_64-linux/rdf_db.so +0 -0
- package/lib/swipl/lib/x86_64-linux/readutil.so +0 -0
- package/lib/swipl/lib/x86_64-linux/rlimit.so +0 -0
- package/lib/swipl/lib/x86_64-linux/sched.so +0 -0
- package/lib/swipl/lib/x86_64-linux/sgml2pl.so +0 -0
- package/lib/swipl/lib/x86_64-linux/sha4pl.so +0 -0
- package/lib/swipl/lib/x86_64-linux/snowball.so +0 -0
- package/lib/swipl/lib/x86_64-linux/socket.so +0 -0
- package/lib/swipl/lib/x86_64-linux/ssl4pl.so +0 -0
- package/lib/swipl/lib/x86_64-linux/streaminfo.so +0 -0
- package/lib/swipl/lib/x86_64-linux/syslog.so +0 -0
- package/lib/swipl/lib/x86_64-linux/time.so +0 -0
- package/lib/swipl/lib/x86_64-linux/turtle.so +0 -0
- package/lib/swipl/lib/x86_64-linux/uid.so +0 -0
- package/lib/swipl/lib/x86_64-linux/unix.so +0 -0
- package/lib/swipl/lib/x86_64-linux/uri.so +0 -0
- package/lib/swipl/lib/x86_64-linux/websocket.so +0 -0
- package/lib/swipl/lib/x86_64-linux/zlib4pl.so +0 -0
- package/lib/swipl/library/INDEX.pl +1020 -0
- package/lib/swipl/library/aggregate.pl +755 -0
- package/lib/swipl/library/ansi_term.pl +653 -0
- package/lib/swipl/library/apply.pl +426 -0
- package/lib/swipl/library/apply_macros.pl +497 -0
- package/lib/swipl/library/arithmetic.pl +320 -0
- package/lib/swipl/library/assoc.pl +522 -0
- package/lib/swipl/library/atom.pl +169 -0
- package/lib/swipl/library/backcomp.pl +688 -0
- package/lib/swipl/library/base32.pl +291 -0
- package/lib/swipl/library/base64.pl +441 -0
- package/lib/swipl/library/broadcast.pl +161 -0
- package/lib/swipl/library/build/cmake.pl +137 -0
- package/lib/swipl/library/build/conan.pl +232 -0
- package/lib/swipl/library/build/make.pl +168 -0
- package/lib/swipl/library/build/tools.pl +825 -0
- package/lib/swipl/library/charsio.pl +195 -0
- package/lib/swipl/library/check.pl +1097 -0
- package/lib/swipl/library/check_installation.pl +912 -0
- package/lib/swipl/library/clp/INDEX.pl +157 -0
- package/lib/swipl/library/clp/bounds.pl +2036 -0
- package/lib/swipl/library/clp/clp_distinct.pl +263 -0
- package/lib/swipl/library/clp/clp_events.pl +92 -0
- package/lib/swipl/library/clp/clpb.pl +1896 -0
- package/lib/swipl/library/clp/clpfd.pl +7906 -0
- package/lib/swipl/library/clp/simplex.pl +1580 -0
- package/lib/swipl/library/codesio.pl +182 -0
- package/lib/swipl/library/coinduction.pl +183 -0
- package/lib/swipl/library/console_input.pl +289 -0
- package/lib/swipl/library/csv.pl +611 -0
- package/lib/swipl/library/ctypes.pl +161 -0
- package/lib/swipl/library/date.pl +370 -0
- package/lib/swipl/library/dcg/INDEX.pl +35 -0
- package/lib/swipl/library/dcg/basics.pl +514 -0
- package/lib/swipl/library/dcg/high_order.pl +227 -0
- package/lib/swipl/library/debug.pl +499 -0
- package/lib/swipl/library/dialect/bim.pl +186 -0
- package/lib/swipl/library/dialect/commons.pl +77 -0
- package/lib/swipl/library/dialect/eclipse/test_util_iso.pl +355 -0
- package/lib/swipl/library/dialect/hprolog/format.pl +44 -0
- package/lib/swipl/library/dialect/hprolog.pl +314 -0
- package/lib/swipl/library/dialect/ifprolog.pl +1317 -0
- package/lib/swipl/library/dialect/iso/iso_predicates.pl +277 -0
- package/lib/swipl/library/dialect/sicstus/README.TXT +1 -0
- package/lib/swipl/library/dialect/sicstus/arrays.pl +121 -0
- package/lib/swipl/library/dialect/sicstus/block.pl +278 -0
- package/lib/swipl/library/dialect/sicstus/lists.pl +167 -0
- package/lib/swipl/library/dialect/sicstus/ordsets.pl +52 -0
- package/lib/swipl/library/dialect/sicstus/sockets.pl +174 -0
- package/lib/swipl/library/dialect/sicstus/system.pl +262 -0
- package/lib/swipl/library/dialect/sicstus/terms.pl +57 -0
- package/lib/swipl/library/dialect/sicstus/timeout.pl +92 -0
- package/lib/swipl/library/dialect/sicstus.pl +582 -0
- package/lib/swipl/library/dialect/sicstus4/aggregate.pl +60 -0
- package/lib/swipl/library/dialect/sicstus4/between.pl +62 -0
- package/lib/swipl/library/dialect/sicstus4/clpfd.pl +75 -0
- package/lib/swipl/library/dialect/sicstus4/file_systems.pl +413 -0
- package/lib/swipl/library/dialect/sicstus4/lists.pl +274 -0
- package/lib/swipl/library/dialect/sicstus4/ordsets.pl +54 -0
- package/lib/swipl/library/dialect/sicstus4/samsort.pl +86 -0
- package/lib/swipl/library/dialect/sicstus4/sets.pl +124 -0
- package/lib/swipl/library/dialect/sicstus4/sockets.pl +164 -0
- package/lib/swipl/library/dialect/sicstus4/system.pl +80 -0
- package/lib/swipl/library/dialect/sicstus4/terms.pl +89 -0
- package/lib/swipl/library/dialect/sicstus4/timeout.pl +43 -0
- package/lib/swipl/library/dialect/sicstus4/types.pl +103 -0
- package/lib/swipl/library/dialect/sicstus4.pl +200 -0
- package/lib/swipl/library/dialect/swi/syspred_options.pl +250 -0
- package/lib/swipl/library/dialect/xsb/README.md +20 -0
- package/lib/swipl/library/dialect/xsb/basics.pl +318 -0
- package/lib/swipl/library/dialect/xsb/consult.pl +87 -0
- package/lib/swipl/library/dialect/xsb/curr_sym.pl +57 -0
- package/lib/swipl/library/dialect/xsb/error_handler.pl +111 -0
- package/lib/swipl/library/dialect/xsb/gensym.pl +53 -0
- package/lib/swipl/library/dialect/xsb/gpp.pl +138 -0
- package/lib/swipl/library/dialect/xsb/intern.pl +48 -0
- package/lib/swipl/library/dialect/xsb/lists.pl +47 -0
- package/lib/swipl/library/dialect/xsb/machine.pl +295 -0
- package/lib/swipl/library/dialect/xsb/ordsets.pl +53 -0
- package/lib/swipl/library/dialect/xsb/setof.pl +54 -0
- package/lib/swipl/library/dialect/xsb/source.pl +308 -0
- package/lib/swipl/library/dialect/xsb/standard.pl +169 -0
- package/lib/swipl/library/dialect/xsb/storage.pl +70 -0
- package/lib/swipl/library/dialect/xsb/string.pl +76 -0
- package/lib/swipl/library/dialect/xsb/thread.pl +62 -0
- package/lib/swipl/library/dialect/xsb/timed_call.pl +158 -0
- package/lib/swipl/library/dialect/xsb.pl +688 -0
- package/lib/swipl/library/dialect/yap/README.TXT +8 -0
- package/lib/swipl/library/dialect/yap.pl +283 -0
- package/lib/swipl/library/dialect.pl +123 -0
- package/lib/swipl/library/dicts.pl +399 -0
- package/lib/swipl/library/dif.pl +426 -0
- package/lib/swipl/library/edinburgh.pl +138 -0
- package/lib/swipl/library/edit.pl +783 -0
- package/lib/swipl/library/error.pl +495 -0
- package/lib/swipl/library/exceptions.pl +231 -0
- package/lib/swipl/library/explain.pl +543 -0
- package/lib/swipl/library/ext/RDF/INDEX.pl +25 -0
- package/lib/swipl/library/ext/RDF/rdf.pl +450 -0
- package/lib/swipl/library/ext/RDF/rdf_parser.pl +649 -0
- package/lib/swipl/library/ext/RDF/rdf_triple.pl +448 -0
- package/lib/swipl/library/ext/RDF/rdf_write.pl +701 -0
- package/lib/swipl/library/ext/RDF/rewrite_term.pl +177 -0
- package/lib/swipl/library/ext/chr/chr/a_star.pl +80 -0
- package/lib/swipl/library/ext/chr/chr/binomialheap.pl +142 -0
- package/lib/swipl/library/ext/chr/chr/builtins.pl +629 -0
- package/lib/swipl/library/ext/chr/chr/chr_compiler_errors.pl +179 -0
- package/lib/swipl/library/ext/chr/chr/chr_compiler_options.pl +382 -0
- package/lib/swipl/library/ext/chr/chr/chr_compiler_utility.pl +338 -0
- package/lib/swipl/library/ext/chr/chr/chr_debug.pl +59 -0
- package/lib/swipl/library/ext/chr/chr/chr_hashtable_store.pl +425 -0
- package/lib/swipl/library/ext/chr/chr/chr_integertable_store.pl +139 -0
- package/lib/swipl/library/ext/chr/chr/chr_messages.pl +176 -0
- package/lib/swipl/library/ext/chr/chr/chr_op.pl +53 -0
- package/lib/swipl/library/ext/chr/chr/chr_runtime.pl +1016 -0
- package/lib/swipl/library/ext/chr/chr/chr_translate.pl +25424 -0
- package/lib/swipl/library/ext/chr/chr/clean_code.pl +252 -0
- package/lib/swipl/library/ext/chr/chr/find.pl +78 -0
- package/lib/swipl/library/ext/chr/chr/guard_entailment.pl +19432 -0
- package/lib/swipl/library/ext/chr/chr/listmap.pl +108 -0
- package/lib/swipl/library/ext/chr/chr/pairlist.pl +78 -0
- package/lib/swipl/library/ext/chr/chr.pl +686 -0
- package/lib/swipl/library/ext/clib/INDEX.pl +158 -0
- package/lib/swipl/library/ext/clib/cgi.pl +86 -0
- package/lib/swipl/library/ext/clib/crypt.pl +44 -0
- package/lib/swipl/library/ext/clib/filesex.pl +644 -0
- package/lib/swipl/library/ext/clib/hash_stream.pl +119 -0
- package/lib/swipl/library/ext/clib/mallocinfo.pl +138 -0
- package/lib/swipl/library/ext/clib/md5.pl +68 -0
- package/lib/swipl/library/ext/clib/memfile.pl +61 -0
- package/lib/swipl/library/ext/clib/process.pl +573 -0
- package/lib/swipl/library/ext/clib/prolog_server.pl +157 -0
- package/lib/swipl/library/ext/clib/prolog_stream.pl +80 -0
- package/lib/swipl/library/ext/clib/rlimit.pl +54 -0
- package/lib/swipl/library/ext/clib/sched.pl +85 -0
- package/lib/swipl/library/ext/clib/sha.pl +162 -0
- package/lib/swipl/library/ext/clib/socket.pl +1102 -0
- package/lib/swipl/library/ext/clib/streaminfo.pl +103 -0
- package/lib/swipl/library/ext/clib/streampool.pl +136 -0
- package/lib/swipl/library/ext/clib/syslog.pl +180 -0
- package/lib/swipl/library/ext/clib/time.pl +194 -0
- package/lib/swipl/library/ext/clib/udp_broadcast.pl +975 -0
- package/lib/swipl/library/ext/clib/uid.pl +220 -0
- package/lib/swipl/library/ext/clib/unix.pl +317 -0
- package/lib/swipl/library/ext/clib/uri.pl +530 -0
- package/lib/swipl/library/ext/clib/uuid.pl +207 -0
- package/lib/swipl/library/ext/http/http/INDEX.pl +266 -0
- package/lib/swipl/library/ext/http/http/README.md +34 -0
- package/lib/swipl/library/ext/http/http/ax.pl +189 -0
- package/lib/swipl/library/ext/http/http/dcg_basics.pl +49 -0
- package/lib/swipl/library/ext/http/http/graphql.pl +1367 -0
- package/lib/swipl/library/ext/http/http/html_decl.pl +416 -0
- package/lib/swipl/library/ext/http/http/html_head.pl +654 -0
- package/lib/swipl/library/ext/http/http/html_quasiquotations.pl +120 -0
- package/lib/swipl/library/ext/http/http/html_write.pl +1425 -0
- package/lib/swipl/library/ext/http/http/htmx.pl +139 -0
- package/lib/swipl/library/ext/http/http/http_authenticate.pl +364 -0
- package/lib/swipl/library/ext/http/http/http_client.pl +412 -0
- package/lib/swipl/library/ext/http/http/http_cookie.pl +245 -0
- package/lib/swipl/library/ext/http/http/http_cors.pl +176 -0
- package/lib/swipl/library/ext/http/http/http_digest.pl +820 -0
- package/lib/swipl/library/ext/http/http/http_dirindex.pl +296 -0
- package/lib/swipl/library/ext/http/http/http_dispatch.pl +1552 -0
- package/lib/swipl/library/ext/http/http/http_dyn_workers.pl +214 -0
- package/lib/swipl/library/ext/http/http/http_error.pl +126 -0
- package/lib/swipl/library/ext/http/http/http_exception.pl +225 -0
- package/lib/swipl/library/ext/http/http/http_files.pl +163 -0
- package/lib/swipl/library/ext/http/http/http_header.pl +2820 -0
- package/lib/swipl/library/ext/http/http/http_hook.pl +106 -0
- package/lib/swipl/library/ext/http/http/http_host.pl +204 -0
- package/lib/swipl/library/ext/http/http/http_load.pl +113 -0
- package/lib/swipl/library/ext/http/http/http_log.pl +738 -0
- package/lib/swipl/library/ext/http/http/http_multipart_plugin.pl +232 -0
- package/lib/swipl/library/ext/http/http/http_open.pl +1821 -0
- package/lib/swipl/library/ext/http/http/http_openid.pl +1561 -0
- package/lib/swipl/library/ext/http/http/http_parameters.pl +504 -0
- package/lib/swipl/library/ext/http/http/http_path.pl +380 -0
- package/lib/swipl/library/ext/http/http/http_proxy.pl +80 -0
- package/lib/swipl/library/ext/http/http/http_pwp.pl +351 -0
- package/lib/swipl/library/ext/http/http/http_redis_plugin.pl +332 -0
- package/lib/swipl/library/ext/http/http/http_server.pl +105 -0
- package/lib/swipl/library/ext/http/http/http_server_files.pl +126 -0
- package/lib/swipl/library/ext/http/http/http_server_health.pl +186 -0
- package/lib/swipl/library/ext/http/http/http_session.pl +1040 -0
- package/lib/swipl/library/ext/http/http/http_sgml_plugin.pl +137 -0
- package/lib/swipl/library/ext/http/http/http_stream.pl +376 -0
- package/lib/swipl/library/ext/http/http/http_unix_daemon.pl +989 -0
- package/lib/swipl/library/ext/http/http/http_wrapper.pl +559 -0
- package/lib/swipl/library/ext/http/http/hub.pl +600 -0
- package/lib/swipl/library/ext/http/http/js_write.pl +461 -0
- package/lib/swipl/library/ext/http/http/mimepack.pl +224 -0
- package/lib/swipl/library/ext/http/http/mimetype.pl +276 -0
- package/lib/swipl/library/ext/http/http/term_html.pl +797 -0
- package/lib/swipl/library/ext/http/http/thread_httpd.pl +1181 -0
- package/lib/swipl/library/ext/http/http/web/css/dirindex.css +24 -0
- package/lib/swipl/library/ext/http/http/web/css/openid.css +57 -0
- package/lib/swipl/library/ext/http/http/web/icons/back.png +0 -0
- package/lib/swipl/library/ext/http/http/web/icons/c.png +0 -0
- package/lib/swipl/library/ext/http/http/web/icons/compressed.png +0 -0
- package/lib/swipl/library/ext/http/http/web/icons/folder.png +0 -0
- package/lib/swipl/library/ext/http/http/web/icons/generic.png +0 -0
- package/lib/swipl/library/ext/http/http/web/icons/layout.png +0 -0
- package/lib/swipl/library/ext/http/http/web/icons/openid-logo-square.png +0 -0
- package/lib/swipl/library/ext/http/http/web/icons/openid-logo-tiny.png +0 -0
- package/lib/swipl/library/ext/http/http/websocket.pl +729 -0
- package/lib/swipl/library/ext/http/http/yadis.pl +205 -0
- package/lib/swipl/library/ext/json/INDEX.pl +36 -0
- package/lib/swipl/library/ext/json/http/INDEX.pl +16 -0
- package/lib/swipl/library/ext/json/http/http_json.pl +490 -0
- package/lib/swipl/library/ext/json/http/js_grammar.pl +53 -0
- package/lib/swipl/library/ext/json/http/json.pl +48 -0
- package/lib/swipl/library/ext/json/http/json_convert.pl +48 -0
- package/lib/swipl/library/ext/json/json.pl +1215 -0
- package/lib/swipl/library/ext/json/json_convert.pl +681 -0
- package/lib/swipl/library/ext/json/json_grammar.pl +349 -0
- package/lib/swipl/library/ext/json/json_rpc_client.pl +423 -0
- package/lib/swipl/library/ext/json/json_rpc_common.pl +104 -0
- package/lib/swipl/library/ext/json/json_rpc_server.pl +489 -0
- package/lib/swipl/library/ext/json/json_schema.pl +2111 -0
- package/lib/swipl/library/ext/nlp/INDEX.pl +15 -0
- package/lib/swipl/library/ext/nlp/double_metaphone.pl +86 -0
- package/lib/swipl/library/ext/nlp/isub.pl +162 -0
- package/lib/swipl/library/ext/nlp/porter_stem.pl +50 -0
- package/lib/swipl/library/ext/nlp/snowball.pl +97 -0
- package/lib/swipl/library/ext/pcre/INDEX.pl +17 -0
- package/lib/swipl/library/ext/pcre/pcre.pl +974 -0
- package/lib/swipl/library/ext/plunit/INDEX.pl +20 -0
- package/lib/swipl/library/ext/plunit/plunit.pl +2631 -0
- package/lib/swipl/library/ext/plunit/test_wizard.pl +249 -0
- package/lib/swipl/library/ext/semweb/semweb/INDEX.pl +288 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf11.pl +2106 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf11_containers.pl +299 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_cache.pl +278 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_compare.pl +132 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_db.pl +3468 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_edit.pl +1145 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_http_plugin.pl +274 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_library.pl +1021 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_litindex.pl +1035 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_ntriples.pl +422 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_persistency.pl +1576 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_portray.pl +182 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_prefixes.pl +681 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_sandbox.pl +153 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_turtle.pl +54 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_turtle_write.pl +1587 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_zlib_plugin.pl +52 -0
- package/lib/swipl/library/ext/semweb/semweb/rdfa.pl +1510 -0
- package/lib/swipl/library/ext/semweb/semweb/rdfs.pl +475 -0
- package/lib/swipl/library/ext/semweb/semweb/sparql_client.pl +643 -0
- package/lib/swipl/library/ext/semweb/semweb/turtle.pl +455 -0
- package/lib/swipl/library/ext/sgml/DTD/HTML4.dcl +88 -0
- package/lib/swipl/library/ext/sgml/DTD/HTML4.dtd +1092 -0
- package/lib/swipl/library/ext/sgml/DTD/HTML4.soc +6 -0
- package/lib/swipl/library/ext/sgml/DTD/HTML5.dtd +906 -0
- package/lib/swipl/library/ext/sgml/DTD/HTMLlat1.ent +195 -0
- package/lib/swipl/library/ext/sgml/DTD/HTMLspec.ent +77 -0
- package/lib/swipl/library/ext/sgml/DTD/HTMLsym.ent +241 -0
- package/lib/swipl/library/ext/sgml/INDEX.pl +64 -0
- package/lib/swipl/library/ext/sgml/c14n2.pl +203 -0
- package/lib/swipl/library/ext/sgml/iso_639.pl +631 -0
- package/lib/swipl/library/ext/sgml/pwp.pl +705 -0
- package/lib/swipl/library/ext/sgml/sgml.pl +815 -0
- package/lib/swipl/library/ext/sgml/sgml_write.pl +1003 -0
- package/lib/swipl/library/ext/sgml/xpath.pl +620 -0
- package/lib/swipl/library/ext/sgml/xsdp_types.pl +232 -0
- package/lib/swipl/library/ext/ssl/INDEX.pl +60 -0
- package/lib/swipl/library/ext/ssl/crypto.pl +1015 -0
- package/lib/swipl/library/ext/ssl/http/INDEX.pl +5 -0
- package/lib/swipl/library/ext/ssl/http/http_ssl_plugin.pl +296 -0
- package/lib/swipl/library/ext/ssl/saml.pl +609 -0
- package/lib/swipl/library/ext/ssl/ssl.pl +647 -0
- package/lib/swipl/library/ext/ssl/xmldsig.pl +391 -0
- package/lib/swipl/library/ext/ssl/xmlenc.pl +354 -0
- package/lib/swipl/library/ext/zlib/INDEX.pl +8 -0
- package/lib/swipl/library/ext/zlib/zlib.pl +112 -0
- package/lib/swipl/library/fastrw.pl +105 -0
- package/lib/swipl/library/files.pl +80 -0
- package/lib/swipl/library/gensym.pl +111 -0
- package/lib/swipl/library/git.pl +1027 -0
- package/lib/swipl/library/hashtable.pl +365 -0
- package/lib/swipl/library/heaps.pl +252 -0
- package/lib/swipl/library/hotfix.pl +239 -0
- package/lib/swipl/library/http/jquery.pl +103 -0
- package/lib/swipl/library/http/web/js/jquery-3.6.0.min.js +2 -0
- package/lib/swipl/library/increval.pl +217 -0
- package/lib/swipl/library/intercept.pl +263 -0
- package/lib/swipl/library/iostream.pl +237 -0
- package/lib/swipl/library/iri_scheme/file.pl +70 -0
- package/lib/swipl/library/lazy_lists.pl +481 -0
- package/lib/swipl/library/listing.pl +1362 -0
- package/lib/swipl/library/lists.pl +860 -0
- package/lib/swipl/library/lynx/INDEX.pl +14 -0
- package/lib/swipl/library/lynx/format.pl +380 -0
- package/lib/swipl/library/lynx/html_style.pl +129 -0
- package/lib/swipl/library/lynx/html_text.pl +865 -0
- package/lib/swipl/library/lynx/pldoc_style.pl +87 -0
- package/lib/swipl/library/macros.pl +451 -0
- package/lib/swipl/library/main.pl +1200 -0
- package/lib/swipl/library/make.pl +197 -0
- package/lib/swipl/library/modules.pl +129 -0
- package/lib/swipl/library/nb_rbtrees.pl +267 -0
- package/lib/swipl/library/nb_set.pl +203 -0
- package/lib/swipl/library/obfuscate.pl +115 -0
- package/lib/swipl/library/occurs.pl +241 -0
- package/lib/swipl/library/operators.pl +182 -0
- package/lib/swipl/library/option.pl +388 -0
- package/lib/swipl/library/optparse.pl +966 -0
- package/lib/swipl/library/ordsets.pl +518 -0
- package/lib/swipl/library/oset.pl +160 -0
- package/lib/swipl/library/pairs.pl +187 -0
- package/lib/swipl/library/persistency.pl +713 -0
- package/lib/swipl/library/pio.pl +47 -0
- package/lib/swipl/library/portray_text.pl +277 -0
- package/lib/swipl/library/pprint.pl +940 -0
- package/lib/swipl/library/predicate_options.pl +975 -0
- package/lib/swipl/library/prolog_autoload.pl +233 -0
- package/lib/swipl/library/prolog_breakpoints.pl +396 -0
- package/lib/swipl/library/prolog_clause.pl +1104 -0
- package/lib/swipl/library/prolog_code.pl +416 -0
- package/lib/swipl/library/prolog_codewalk.pl +1248 -0
- package/lib/swipl/library/prolog_colour.pl +3301 -0
- package/lib/swipl/library/prolog_colour.qlf +0 -0
- package/lib/swipl/library/prolog_config.pl +154 -0
- package/lib/swipl/library/prolog_coverage.pl +1333 -0
- package/lib/swipl/library/prolog_debug.pl +404 -0
- package/lib/swipl/library/prolog_deps.pl +675 -0
- package/lib/swipl/library/prolog_evaluable.pl +234 -0
- package/lib/swipl/library/prolog_format.pl +219 -0
- package/lib/swipl/library/prolog_history.pl +161 -0
- package/lib/swipl/library/prolog_jiti.pl +333 -0
- package/lib/swipl/library/prolog_locale.pl +61 -0
- package/lib/swipl/library/prolog_metainference.pl +307 -0
- package/lib/swipl/library/prolog_pack.pl +3906 -0
- package/lib/swipl/library/prolog_profile.pl +346 -0
- package/lib/swipl/library/prolog_qlfmake.pl +533 -0
- package/lib/swipl/library/prolog_source.pl +1188 -0
- package/lib/swipl/library/prolog_stack.pl +794 -0
- package/lib/swipl/library/prolog_trace.pl +365 -0
- package/lib/swipl/library/prolog_versions.pl +347 -0
- package/lib/swipl/library/prolog_wrap.pl +164 -0
- package/lib/swipl/library/prolog_xref.pl +3090 -0
- package/lib/swipl/library/prolog_xref.qlf +0 -0
- package/lib/swipl/library/pure_input.pl +266 -0
- package/lib/swipl/library/qpforeign.pl +695 -0
- package/lib/swipl/library/qsave.pl +1516 -0
- package/lib/swipl/library/quasi_quotations.pl +300 -0
- package/lib/swipl/library/quintus.pl +437 -0
- package/lib/swipl/library/random.pl +459 -0
- package/lib/swipl/library/rbtrees.pl +1153 -0
- package/lib/swipl/library/readln.pl +256 -0
- package/lib/swipl/library/readutil.pl +304 -0
- package/lib/swipl/library/record.pl +544 -0
- package/lib/swipl/library/rwlocks.pl +172 -0
- package/lib/swipl/library/sandbox.pl +1384 -0
- package/lib/swipl/library/semweb/dc.rdfs +198 -0
- package/lib/swipl/library/semweb/eor.rdfs +95 -0
- package/lib/swipl/library/semweb/owl.owl +287 -0
- package/lib/swipl/library/semweb/rdf_library.ttl +90 -0
- package/lib/swipl/library/semweb/rdfs.rdfs +251 -0
- package/lib/swipl/library/settings.pl +755 -0
- package/lib/swipl/library/shell.pl +462 -0
- package/lib/swipl/library/shlib.pl +670 -0
- package/lib/swipl/library/solution_sequences.pl +439 -0
- package/lib/swipl/library/sort.pl +119 -0
- package/lib/swipl/library/statistics.pl +541 -0
- package/lib/swipl/library/streams.pl +118 -0
- package/lib/swipl/library/strings.pl +469 -0
- package/lib/swipl/library/system.pl +95 -0
- package/lib/swipl/library/tables.pl +381 -0
- package/lib/swipl/library/tableutil.pl +771 -0
- package/lib/swipl/library/tabling.pl +42 -0
- package/lib/swipl/library/terms.pl +457 -0
- package/lib/swipl/library/theme/auto.pl +61 -0
- package/lib/swipl/library/theme/dark.pl +455 -0
- package/lib/swipl/library/theme/light.pl +45 -0
- package/lib/swipl/library/thread.pl +810 -0
- package/lib/swipl/library/thread_pool.pl +508 -0
- package/lib/swipl/library/threadutil.pl +574 -0
- package/lib/swipl/library/tty.pl +316 -0
- package/lib/swipl/library/ugraphs.pl +644 -0
- package/lib/swipl/library/unicode/INDEX.pl +6 -0
- package/lib/swipl/library/unicode/blocks.pl +414 -0
- package/lib/swipl/library/url.pl +1129 -0
- package/lib/swipl/library/utf8.pl +145 -0
- package/lib/swipl/library/varnumbers.pl +221 -0
- package/lib/swipl/library/vm.pl +251 -0
- package/lib/swipl/library/wfs.pl +205 -0
- package/lib/swipl/library/when.pl +263 -0
- package/lib/swipl/library/writef.pl +278 -0
- package/lib/swipl/library/www_browser.pl +251 -0
- package/lib/swipl/library/yall.pl +574 -0
- package/lib/swipl/library/zip.pl +211 -0
- package/lib/swipl/swipl.home +1 -0
- package/lib/vendor/libcrypto.so.3 +0 -0
- package/lib/vendor/libpcre2-8.so.0 +0 -0
- package/lib/vendor/libssl.so.3 +0 -0
- package/lib/vendor/libz.so.1 +0 -0
- package/licenses/OpenSSL-LICENSE.txt +177 -0
- package/licenses/PCRE2-COPYING +5 -0
- package/licenses/README.md +12 -0
- package/licenses/SWI-Prolog-LICENSE +41 -0
- package/licenses/zlib-LICENSE +22 -0
- package/package.json +27 -0
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
/* Part of SWI-Prolog
|
|
2
|
+
|
|
3
|
+
Author: Matt Lilley
|
|
4
|
+
E-mail: thetrime@gmail.com
|
|
5
|
+
WWW: http://www.swi-prolog.org
|
|
6
|
+
Copyright (c) 2004-2016, SWI-Prolog Foundation
|
|
7
|
+
VU University Amsterdam
|
|
8
|
+
All rights reserved.
|
|
9
|
+
|
|
10
|
+
Redistribution and use in source and binary forms, with or without
|
|
11
|
+
modification, are permitted provided that the following conditions
|
|
12
|
+
are met:
|
|
13
|
+
|
|
14
|
+
1. Redistributions of source code must retain the above copyright
|
|
15
|
+
notice, this list of conditions and the following disclaimer.
|
|
16
|
+
|
|
17
|
+
2. Redistributions in binary form must reproduce the above copyright
|
|
18
|
+
notice, this list of conditions and the following disclaimer in
|
|
19
|
+
the documentation and/or other materials provided with the
|
|
20
|
+
distribution.
|
|
21
|
+
|
|
22
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
23
|
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
24
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
25
|
+
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
26
|
+
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
27
|
+
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
28
|
+
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
29
|
+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
30
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
31
|
+
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
|
32
|
+
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
33
|
+
POSSIBILITY OF SUCH DAMAGE.
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
:-module(xmlenc,
|
|
38
|
+
[ decrypt_xml/4, % +EncryptedXML, -DecryptedXML, :KeyCallback, +Options
|
|
39
|
+
load_certificate_from_base64_string/2 % +Base64String, -Certificate
|
|
40
|
+
]).
|
|
41
|
+
:- autoload(library(base64),[base64/2]).
|
|
42
|
+
:- autoload(library(crypto),
|
|
43
|
+
[crypto_data_decrypt/6,rsa_private_decrypt/4,hex_bytes/2]).
|
|
44
|
+
:- autoload(library(error),[existence_error/2,domain_error/2]).
|
|
45
|
+
:- autoload(library(lists),[append/3]).
|
|
46
|
+
:- autoload(library(sgml),[load_structure/3]).
|
|
47
|
+
:- autoload(library(ssl),[load_certificate/2]).
|
|
48
|
+
:- autoload(library(uri),[uri_components/2]).
|
|
49
|
+
:- autoload(library(http/http_open),[http_open/3]).
|
|
50
|
+
|
|
51
|
+
:- meta_predicate
|
|
52
|
+
decrypt_xml(+, -, 3, +).
|
|
53
|
+
|
|
54
|
+
/** <module> XML encryption library
|
|
55
|
+
|
|
56
|
+
This library is a partial implementation of the XML encryption standard.
|
|
57
|
+
It implements the _decryption_ part, which is needed by SAML clients.
|
|
58
|
+
|
|
59
|
+
@see https://www.w3.org/TR/xmlenc-core1/
|
|
60
|
+
@see https://en.wikipedia.org/wiki/Security_Assertion_Markup_Language
|
|
61
|
+
*/
|
|
62
|
+
|
|
63
|
+
% These are the 4 mandatory block cipher algorithms
|
|
64
|
+
% (actually aes-192-cbc is not mandatory, but it is easy to support)
|
|
65
|
+
ssl_algorithm('http://www.w3.org/2001/04/xmlenc#tripledes-cbc', 'des3', 8).
|
|
66
|
+
ssl_algorithm('http://www.w3.org/2001/04/xmlenc#aes128-cbc', 'aes-128-cbc', 16).
|
|
67
|
+
ssl_algorithm('http://www.w3.org/2001/04/xmlenc#aes256-cbc', 'aes-256-cbc', 32).
|
|
68
|
+
ssl_algorithm('http://www.w3.org/2001/04/xmlenc#aes192-cbc', 'aes-192-cbc', 24).
|
|
69
|
+
|
|
70
|
+
%! decrypt_xml(+DOMIn, -DOMOut, :KeyCallback, +Options) is det.
|
|
71
|
+
%
|
|
72
|
+
% @arg KeyCallback may be called as follows:
|
|
73
|
+
% - call(KeyCallback, name, KeyName, Key)
|
|
74
|
+
% - call(KeyCallback, public_key, public_key(RSA), Key)
|
|
75
|
+
% - call(KeyCallback, certificate, Certificate, Key)
|
|
76
|
+
|
|
77
|
+
decrypt_xml([], [], _, _):- !.
|
|
78
|
+
decrypt_xml([element(ns(_, 'http://www.w3.org/2001/04/xmlenc#'):'EncryptedData',
|
|
79
|
+
Attributes, EncryptedData)|Siblings],
|
|
80
|
+
[Decrypted|NewSiblings], KeyCallback, Options) :-
|
|
81
|
+
!,
|
|
82
|
+
decrypt_element(Attributes, EncryptedData, Decrypted, KeyCallback, Options),
|
|
83
|
+
decrypt_xml(Siblings, NewSiblings, KeyCallback, Options).
|
|
84
|
+
|
|
85
|
+
decrypt_xml([element(Tag, Attributes, Children)|Siblings],
|
|
86
|
+
[element(Tag, Attributes, NewChildren)|NewSiblings], KeyCallback, Options) :-
|
|
87
|
+
!,
|
|
88
|
+
decrypt_xml(Children, NewChildren, KeyCallback, Options),
|
|
89
|
+
decrypt_xml(Siblings, NewSiblings, KeyCallback, Options).
|
|
90
|
+
decrypt_xml([Other|Siblings], [Other|NewSiblings], KeyCallback, Options):-
|
|
91
|
+
decrypt_xml(Siblings, NewSiblings, KeyCallback, Options).
|
|
92
|
+
|
|
93
|
+
%! decrypt_element(+Attributes,
|
|
94
|
+
%! +EncryptedData,
|
|
95
|
+
%! -DecryptedElement,
|
|
96
|
+
%! +Options).
|
|
97
|
+
%
|
|
98
|
+
% Decrypt an EncryptedData element with Attributes and child
|
|
99
|
+
% EncryptedData DecryptedElement will either be an element/3 term
|
|
100
|
+
% or a string as dictacted by the Type attribute in Attributes.
|
|
101
|
+
% If Attributes does not contain a Type attribute then we assume
|
|
102
|
+
% it is a string
|
|
103
|
+
|
|
104
|
+
:-meta_predicate(decrypt_element(+, +, -, 3, +)).
|
|
105
|
+
|
|
106
|
+
decrypt_element(Attributes, EncryptedData, Decrypted, KeyCallback, Options):-
|
|
107
|
+
XENC = ns(_, 'http://www.w3.org/2001/04/xmlenc#'),
|
|
108
|
+
( memberchk(element(XENC:'CipherData', _, CipherData), EncryptedData)
|
|
109
|
+
-> true
|
|
110
|
+
; existence_error(cipher_data, EncryptedData)
|
|
111
|
+
),
|
|
112
|
+
% The Type attribute is not mandatory. However, 3.1 states that
|
|
113
|
+
% "Without this information, the decryptor will be unable to automatically restore the XML document to its original cleartext form."
|
|
114
|
+
( memberchk('Type'=Type, Attributes)
|
|
115
|
+
-> true
|
|
116
|
+
; Type = 'http://www.w3.org/2001/04/xmlenc#Content'
|
|
117
|
+
),
|
|
118
|
+
|
|
119
|
+
% First of all, determine the algorithm used to encrypt the data
|
|
120
|
+
determine_encryption_algorithm(EncryptedData, Algorithm, IVSize),
|
|
121
|
+
|
|
122
|
+
% There are now two tasks remaining, and they seem like they ought to be quite simple, but unfortunately they are not
|
|
123
|
+
% First, we must determine the key used to encrypt the message
|
|
124
|
+
determine_key(EncryptedData, Key, KeyCallback, Options),
|
|
125
|
+
|
|
126
|
+
% Then, we must determine what the encrypted data even IS
|
|
127
|
+
% If the message includes a CipherValue then this is straightfoward - the encrypted data is the base64-encoded child
|
|
128
|
+
% of this element.
|
|
129
|
+
( memberchk(element(XENC:'CipherValue', _, CipherValueElement), CipherData)
|
|
130
|
+
-> base64_element(CipherValueElement, CipherValueWithIV),
|
|
131
|
+
string_codes(CipherValueWithIV, CipherValueWithIVCodes),
|
|
132
|
+
length(IVCodes, IVSize),
|
|
133
|
+
append(IVCodes, CipherCodes, CipherValueWithIVCodes),
|
|
134
|
+
string_codes(IV, IVCodes),
|
|
135
|
+
string_codes(CipherText, CipherCodes),
|
|
136
|
+
length(CipherValueWithIVCodes, _),
|
|
137
|
+
crypto_data_decrypt(CipherText, Algorithm, Key, IV, DecryptedStringWithPadding, [padding(none), encoding(octet)])
|
|
138
|
+
; memberchk(element(XENC:'CipherReference', CipherReferenceAttributes, CipherReference), CipherData)->
|
|
139
|
+
% However, it is allowed to include CipherReference instead. This is an arbitrary URI and a list of transforms to convert the
|
|
140
|
+
% data identified by that URI into the raw octets that represent the encrypted data
|
|
141
|
+
% The URI attribute of the CipherReference element is mandatory
|
|
142
|
+
memberchk('URI'=CipherURI, CipherReferenceAttributes),
|
|
143
|
+
% The transforms attribute is optional, though.
|
|
144
|
+
( memberchk(element('Transforms', _, Transforms), CipherReference)
|
|
145
|
+
-> true
|
|
146
|
+
; Transforms = []
|
|
147
|
+
),
|
|
148
|
+
uri_components(CipherURI, uri_components(Scheme, _, _, _, _)),
|
|
149
|
+
( ( Scheme == 'http' ; Scheme == 'https')
|
|
150
|
+
% FIXME: URI may not be an *absolute* URL
|
|
151
|
+
-> with_output_to(string(RawCipherValue),
|
|
152
|
+
setup_call_cleanup(http_open(CipherURI, HTTPStream, []),
|
|
153
|
+
copy_stream_data(HTTPStream, current_output),
|
|
154
|
+
close(HTTPStream)))
|
|
155
|
+
; domain_error(resolvable_uri, CipherURI)
|
|
156
|
+
),
|
|
157
|
+
apply_ciphertext_transforms(RawCipherValue, Transforms, CipherValue),
|
|
158
|
+
sub_string(CipherValue, 0, IVSize, _, IV),
|
|
159
|
+
sub_string(CipherValue, IVSize, _, 0, CipherText),
|
|
160
|
+
crypto_data_decrypt(CipherText, Algorithm, Key, IV, DecryptedStringWithPadding, [padding(none), encoding(octet)])
|
|
161
|
+
),
|
|
162
|
+
% The XML-ENC padding scheme does not comply with RFC-1423. This has been noted a few times by people trying to write
|
|
163
|
+
% XML-ENC decryptors backed by OpenSSL, which insists on compliance. The only recourse we have is to disable padding entirely
|
|
164
|
+
% and do it in our application
|
|
165
|
+
xmlenc_padding(DecryptedStringWithPadding, DecryptedString),
|
|
166
|
+
% Now that we have the decrypted data, we can decide whether to turn it into an element or leave it as
|
|
167
|
+
% content
|
|
168
|
+
( Type == 'http://www.w3.org/2001/04/xmlenc#Element'
|
|
169
|
+
-> setup_call_cleanup(open_string(DecryptedString, StringStream),
|
|
170
|
+
load_structure(StringStream, [Decrypted], [dialect(xmlns), keep_prefix(true)]),
|
|
171
|
+
close(StringStream))
|
|
172
|
+
; Decrypted = DecryptedString
|
|
173
|
+
).
|
|
174
|
+
|
|
175
|
+
xmlenc_padding(DecryptedStringWithPadding, DecryptedString):-
|
|
176
|
+
string_length(DecryptedStringWithPadding, _),
|
|
177
|
+
string_codes(DecryptedStringWithPadding, Codes),
|
|
178
|
+
append(_, [LastCode], Codes),
|
|
179
|
+
length(Padding, LastCode),
|
|
180
|
+
append(DecryptedCodes, Padding, Codes),
|
|
181
|
+
!,
|
|
182
|
+
string_codes(DecryptedString, DecryptedCodes).
|
|
183
|
+
|
|
184
|
+
apply_ciphertext_transforms(CipherValue, [], CipherValue):- !.
|
|
185
|
+
apply_ciphertext_transforms(_, [_AnythingElse|_], _):-
|
|
186
|
+
% FIXME: Not implemented
|
|
187
|
+
throw(error(implementation_missing('CipherReference transforms are not implemented', _))).
|
|
188
|
+
|
|
189
|
+
:- meta_predicate determine_key(+,-,3,+).
|
|
190
|
+
determine_key(EncryptedData, Key, KeyCallback, Options):-
|
|
191
|
+
DS = ns(_, 'http://www.w3.org/2000/09/xmldsig#'),
|
|
192
|
+
( memberchk(element(DS:'KeyInfo', _, KeyInfo), EncryptedData)
|
|
193
|
+
-> true
|
|
194
|
+
; % Technically the KeyInfo is not mandatory. However, without a key we cannot decrypt
|
|
195
|
+
% so raise an error. In the future Options could contain a key if it is agreed upon
|
|
196
|
+
% by some other channel
|
|
197
|
+
existence_error(key_info, EncryptedData)
|
|
198
|
+
),
|
|
199
|
+
resolve_key(KeyInfo, Key, KeyCallback, Options).
|
|
200
|
+
|
|
201
|
+
:- meta_predicate resolve_key(+,-,3,+).
|
|
202
|
+
|
|
203
|
+
resolve_key(Info, Key, KeyCallback, Options):-
|
|
204
|
+
% EncryptedKey
|
|
205
|
+
XENC = 'http://www.w3.org/2001/04/xmlenc#',
|
|
206
|
+
memberchk(element(ns(_, XENC):'EncryptedKey', _KeyAttributes, EncryptedKey), Info),
|
|
207
|
+
!,
|
|
208
|
+
% The EncryptedKey is slightly different to EncryptedData. For a start, the algorithms used to decrypt the
|
|
209
|
+
% key are orthogonal to those used for EncryptedData. However we can recursively search for the keys then
|
|
210
|
+
% decrypt them using the different algorithms as needed
|
|
211
|
+
memberchk(element(ns(_, XENC):'EncryptionMethod', MethodAttributes, EncryptionMethod), EncryptedKey),
|
|
212
|
+
memberchk('Algorithm'=Algorithm, MethodAttributes),
|
|
213
|
+
|
|
214
|
+
% Now find the KeyInfo
|
|
215
|
+
determine_key(EncryptedKey, PrivateKey, KeyCallback, Options),
|
|
216
|
+
|
|
217
|
+
memberchk(element(ns(_, XENC):'CipherData', _, CipherData), EncryptedKey),
|
|
218
|
+
memberchk(element(ns(_, XENC):'CipherValue', _, CipherValueElement), CipherData),
|
|
219
|
+
base64_element(CipherValueElement, CipherValue),
|
|
220
|
+
( Algorithm == 'http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p'
|
|
221
|
+
-> rsa_private_decrypt(PrivateKey, CipherValue, Key, [encoding(octet), padding(pkcs1_oaep)])
|
|
222
|
+
; Algorithm == 'http://www.w3.org/2009/xmlenc11#rsa-oaep',
|
|
223
|
+
memberchk(element(ns(_, 'http://www.w3.org/2009/xmlenc11#'):'MGF', MGFAttributes, _), EncryptionMethod),
|
|
224
|
+
memberchk('Algorithm'='http://www.w3.org/2009/xmlenc11#mgf1sha1', MGFAttributes) % This is just the same as rsa-oaep-mgf1p!
|
|
225
|
+
-> rsa_private_decrypt(PrivateKey, CipherValue, Key, [encoding(octet), padding(pkcs1_oaep)])
|
|
226
|
+
; Algorithm == 'http://www.w3.org/2001/04/xmlenc#rsa-1_5'
|
|
227
|
+
-> rsa_private_decrypt(PrivateKey, CipherValue, Key, [encoding(octet), padding(pkcs1)])
|
|
228
|
+
; domain_error(key_transport, Algorithm)
|
|
229
|
+
).
|
|
230
|
+
resolve_key(KeyInfo, _Key, _KeyCallback, _Options):-
|
|
231
|
+
% AgreementMethod. FIXME: Not implemented
|
|
232
|
+
XENC = ns(_, 'http://www.w3.org/2001/04/xmlenc#'),
|
|
233
|
+
memberchk(element(XENC:'AgreementMethod', _KeyAttributes, _AgreementMethod), KeyInfo),
|
|
234
|
+
!,
|
|
235
|
+
throw(not_implemented).
|
|
236
|
+
% Additionally, we are allowed to use any elements from XML-DSIG
|
|
237
|
+
resolve_key(KeyInfo, Key, KeyCallback, _Options):-
|
|
238
|
+
% KeyName. Use the callback with type=name and hint=KeyName
|
|
239
|
+
DS = ns(_, 'http://www.w3.org/2000/09/xmldsig#'),
|
|
240
|
+
memberchk(element(DS:'KeyName', _KeyAttributes, [KeyName]), KeyInfo),
|
|
241
|
+
!,
|
|
242
|
+
call(KeyCallback, name, KeyName, Key).
|
|
243
|
+
resolve_key(KeyInfo, _Key, _KeyCallback, _Options):-
|
|
244
|
+
% RetrievalMethod. FIXME: Not implemented
|
|
245
|
+
DS = ns(_, 'http://www.w3.org/2000/09/xmldsig#'),
|
|
246
|
+
memberchk(element(DS:'RetrievalMethod', _KeyAttributes, _RetrievalMethod), KeyInfo),
|
|
247
|
+
!,
|
|
248
|
+
throw(not_implemented).
|
|
249
|
+
resolve_key(KeyInfo, Key, KeyCallback, _Options):-
|
|
250
|
+
% KeyValue.
|
|
251
|
+
DS = ns(_, 'http://www.w3.org/2000/09/xmldsig#'),
|
|
252
|
+
memberchk(element(DS:'KeyValue', _KeyAttributes, KeyValue), KeyInfo),
|
|
253
|
+
!,
|
|
254
|
+
( memberchk(element(DS:'RSAKeyValue', _, RSAKeyValue), KeyInfo)
|
|
255
|
+
-> memberchk(element(DS:'Modulus', _, [ModulusBase64]), RSAKeyValue),
|
|
256
|
+
memberchk(element(DS:'Exponent', _, [ExponentBase64]), RSAKeyValue),
|
|
257
|
+
base64_to_hex(ModulusBase64, Modulus),
|
|
258
|
+
base64_to_hex(ExponentBase64, Exponent),
|
|
259
|
+
call(KeyCallback, public_key, public_key(rsa(Modulus, Exponent, -, -, -, -, -, -)), Key)
|
|
260
|
+
; memberchk(element(DS:'DSAKeyValue', _, _DSAKeyValue), KeyInfo)
|
|
261
|
+
-> throw(error(not_implemented(dsa_key), _)) % FIXME: Not implemented
|
|
262
|
+
; existence_error(usable_key_value, KeyValue)
|
|
263
|
+
).
|
|
264
|
+
resolve_key(KeyInfo, Key, KeyCallback, _Options):-
|
|
265
|
+
% X509Data.
|
|
266
|
+
DS = ns(_, 'http://www.w3.org/2000/09/xmldsig#'),
|
|
267
|
+
memberchk(element(DS:'X509Data', _, X509Data), KeyInfo),
|
|
268
|
+
memberchk(element(DS:'X509Certificate', _, [X509Certificate]), X509Data),
|
|
269
|
+
!,
|
|
270
|
+
load_certificate_from_base64_string(X509Certificate, Certificate),
|
|
271
|
+
call(KeyCallback, certificate, Certificate, Key).
|
|
272
|
+
resolve_key(KeyInfo, _Key, _KeyCallback, _Options):-
|
|
273
|
+
% PGPData. FIXME: Not implemented
|
|
274
|
+
DS = ns(_, 'http://www.w3.org/2000/09/xmldsig#'),
|
|
275
|
+
memberchk(element(DS:'PGPData', _KeyAttributes, _PGPData), KeyInfo),
|
|
276
|
+
!,
|
|
277
|
+
throw(not_implemented).
|
|
278
|
+
resolve_key(KeyInfo, _Key, _KeyCallback, _Options):-
|
|
279
|
+
% SPKIData. FIXME: Not implemented
|
|
280
|
+
DS = ns(_, 'http://www.w3.org/2000/09/xmldsig#'),
|
|
281
|
+
memberchk(element(DS:'SPKIData', _KeyAttributes, _SPKIData), KeyInfo),
|
|
282
|
+
!,
|
|
283
|
+
throw(not_implemented).
|
|
284
|
+
resolve_key(KeyInfo, _Key, _KeyCallback, _Options):-
|
|
285
|
+
% MgmtData. FIXME: Not implemented
|
|
286
|
+
DS = ns(_, 'http://www.w3.org/2000/09/xmldsig#'),
|
|
287
|
+
memberchk(element(DS:'MgmtData', _KeyAttributes, _SPKIData), KeyInfo),
|
|
288
|
+
!,
|
|
289
|
+
throw(not_implemented).
|
|
290
|
+
resolve_key(Info, _, _, _):-
|
|
291
|
+
% The XML-ENC standard allows for arbitrary other means of transmitting keys in application-specific
|
|
292
|
+
% protocols. This is not supported here, though. In the future a callback could be provided in Options
|
|
293
|
+
% to obtain the key information from a KeyInfo structure.
|
|
294
|
+
existence_error(usable_key, Info).
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
base64_to_hex(Base64, Hex):-
|
|
298
|
+
base64(Raw, Base64),
|
|
299
|
+
atom_codes(Raw, Codes),
|
|
300
|
+
hex_bytes(Hex0, Codes),
|
|
301
|
+
string_upper(Hex0, Hex).
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
determine_encryption_algorithm(EncryptedData, Algorithm, IVSize):-
|
|
305
|
+
XENC = ns(_, 'http://www.w3.org/2001/04/xmlenc#'),
|
|
306
|
+
( memberchk(element(XENC:'EncryptionMethod', EncryptionMethodAttributes, _), EncryptedData)
|
|
307
|
+
-> % This is a mandatory attribute
|
|
308
|
+
memberchk('Algorithm'=XMLAlgorithm, EncryptionMethodAttributes),
|
|
309
|
+
( ssl_algorithm(XMLAlgorithm, Algorithm, IVSize)
|
|
310
|
+
-> true
|
|
311
|
+
; domain_error(block_cipher, XMLAlgorithm)
|
|
312
|
+
)
|
|
313
|
+
% In theory the EncryptionMethod is optional. In pracitse though, if the method is not supplied we
|
|
314
|
+
% cannot decrypt the data. In the future we could support encryption_algorithm/1 as an option to
|
|
315
|
+
% decrypt_element/3 but for now raise an exception
|
|
316
|
+
; existence_error(encryption_method, EncryptedData)
|
|
317
|
+
).
|
|
318
|
+
|
|
319
|
+
base64_element([CipherValueElement], CipherValue):-
|
|
320
|
+
atom_codes(CipherValueElement, Base64Codes),
|
|
321
|
+
delete_newlines(Base64Codes, TrimmedCodes),
|
|
322
|
+
string_codes(Trimmed, TrimmedCodes),
|
|
323
|
+
base64(CipherValue, Trimmed).
|
|
324
|
+
|
|
325
|
+
delete_newlines([], []):- !.
|
|
326
|
+
delete_newlines([13|As], B):- !, delete_newlines(As, B).
|
|
327
|
+
delete_newlines([10|As], B):- !, delete_newlines(As, B).
|
|
328
|
+
delete_newlines([A|As], [A|B]):- !, delete_newlines(As, B).
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
%! load_certificate_from_base64_string(+String, -Certificate) is det.
|
|
333
|
+
%
|
|
334
|
+
% Loads a certificate from a string, adding newlines and header
|
|
335
|
+
% where appropriate so that OpenSSL 1.0.1+ will be able to parse it
|
|
336
|
+
|
|
337
|
+
load_certificate_from_base64_string(UnnormalizedData, Certificate):-
|
|
338
|
+
normalize_space(codes(Codes), UnnormalizedData),
|
|
339
|
+
% Break into 64-byte chunks
|
|
340
|
+
chunk_certificate(Codes, Chunks),
|
|
341
|
+
atomics_to_string(["-----BEGIN CERTIFICATE-----"|Chunks], '\n', CompleteCertificate),
|
|
342
|
+
setup_call_cleanup(open_string(CompleteCertificate, StringStream),
|
|
343
|
+
load_certificate(StringStream, Certificate),
|
|
344
|
+
close(StringStream)).
|
|
345
|
+
|
|
346
|
+
chunk_certificate(Codes, [Chunk|Chunks]):-
|
|
347
|
+
length(ChunkCodes, 64),
|
|
348
|
+
append(ChunkCodes, Rest, Codes),
|
|
349
|
+
!,
|
|
350
|
+
string_codes(Chunk, ChunkCodes),
|
|
351
|
+
chunk_certificate(Rest, Chunks).
|
|
352
|
+
chunk_certificate([], ["-----END CERTIFICATE-----\n"]):- !.
|
|
353
|
+
chunk_certificate(LastCodes, [LastChunk, "-----END CERTIFICATE-----\n"]):-
|
|
354
|
+
string_codes(LastChunk, LastCodes).
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/* Part of SWI-Prolog
|
|
2
|
+
|
|
3
|
+
Author: Jan Wielemaker
|
|
4
|
+
E-mail: J.Wielemaker@vu.nl
|
|
5
|
+
WWW: http://www.swi-prolog.org
|
|
6
|
+
Copyright (c) 2006-2016, University of Amsterdam
|
|
7
|
+
VU University Amsterdam
|
|
8
|
+
All rights reserved.
|
|
9
|
+
|
|
10
|
+
Redistribution and use in source and binary forms, with or without
|
|
11
|
+
modification, are permitted provided that the following conditions
|
|
12
|
+
are met:
|
|
13
|
+
|
|
14
|
+
1. Redistributions of source code must retain the above copyright
|
|
15
|
+
notice, this list of conditions and the following disclaimer.
|
|
16
|
+
|
|
17
|
+
2. Redistributions in binary form must reproduce the above copyright
|
|
18
|
+
notice, this list of conditions and the following disclaimer in
|
|
19
|
+
the documentation and/or other materials provided with the
|
|
20
|
+
distribution.
|
|
21
|
+
|
|
22
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
23
|
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
24
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
25
|
+
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
26
|
+
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
27
|
+
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
28
|
+
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
29
|
+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
30
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
31
|
+
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
|
32
|
+
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
33
|
+
POSSIBILITY OF SUCH DAMAGE.
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
:- module(zlib,
|
|
37
|
+
[ zopen/3, % +Stream, -ZStream, +Option
|
|
38
|
+
gzopen/3, % +File, +Mode, -Stream
|
|
39
|
+
gzopen/4 % +File, +Mode, -Stream, +Options
|
|
40
|
+
]).
|
|
41
|
+
:- autoload(library(apply),[partition/4]).
|
|
42
|
+
:- autoload(library(error),[must_be/2]).
|
|
43
|
+
:- autoload(library(option),[merge_options/3,option/2]).
|
|
44
|
+
|
|
45
|
+
:- predicate_options(zopen/3, 3,
|
|
46
|
+
[ format(oneof([gzip,deflate,raw_deflate])),
|
|
47
|
+
multi_part(boolean),
|
|
48
|
+
close_parent(boolean),
|
|
49
|
+
level(between(0,9))
|
|
50
|
+
]).
|
|
51
|
+
:- predicate_options(gzopen/4, 4,
|
|
52
|
+
[ pass_to(zopen/3, 3),
|
|
53
|
+
pass_to(system:open/4, 4)
|
|
54
|
+
]).
|
|
55
|
+
|
|
56
|
+
/** <module> Zlib wrapper for SWI-Prolog
|
|
57
|
+
|
|
58
|
+
Read/write compressed data based on the zlib library.
|
|
59
|
+
|
|
60
|
+
@author Jan Wielemaker
|
|
61
|
+
@see http://www.zlib.net/
|
|
62
|
+
@see http://www.swi-prolog.org/packages/zlib.html
|
|
63
|
+
*/
|
|
64
|
+
|
|
65
|
+
:- use_foreign_library(foreign(zlib4pl)).
|
|
66
|
+
:- public zdebug/1. % Set debug level
|
|
67
|
+
|
|
68
|
+
%! gzopen(+File, +Mode, -Stream) is det.
|
|
69
|
+
%! gzopen(+File, +Mode, -Stream, +Options) is det.
|
|
70
|
+
%
|
|
71
|
+
% Open a file compatible with the gzip program. Note that if a
|
|
72
|
+
% file is opened in =append= mode, a second gzip image will be
|
|
73
|
+
% added to the end of the file. The gzip standard defines that a
|
|
74
|
+
% file can hold multiple gzip images and inflating the file
|
|
75
|
+
% results in a concatenated stream of all inflated images.
|
|
76
|
+
%
|
|
77
|
+
% Options are passed to open/4 and zopen/3. Default format is
|
|
78
|
+
% =gzip=.
|
|
79
|
+
|
|
80
|
+
gzopen(File, Mode, Stream) :-
|
|
81
|
+
gzopen(File, Mode, Stream, []).
|
|
82
|
+
|
|
83
|
+
gzopen(File, Mode, Stream, Options) :-
|
|
84
|
+
must_be(oneof([read,write,append]), Mode),
|
|
85
|
+
partition(zoption, Options, ZOptions0, OpenOptions),
|
|
86
|
+
merge_options(ZOptions0,
|
|
87
|
+
[ format(gzip),
|
|
88
|
+
close_parent(true)
|
|
89
|
+
], ZOptions),
|
|
90
|
+
open(File, Mode, Stream0, OpenOptions),
|
|
91
|
+
zopen(Stream0, Stream, ZOptions),
|
|
92
|
+
set_stream(Stream, file_name(File)),
|
|
93
|
+
( option(alias(Alias), ZOptions)
|
|
94
|
+
-> set_stream(Stream, alias(Alias))
|
|
95
|
+
; true
|
|
96
|
+
).
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
zoption(format(_)).
|
|
100
|
+
zoption(multi_part(_)).
|
|
101
|
+
zoption(level(_)).
|
|
102
|
+
zoption(alias(_)).
|
|
103
|
+
|
|
104
|
+
%! http:encoding_filter(+Encoding, +In0, -In) is semidet.
|
|
105
|
+
%
|
|
106
|
+
% Act as plugin for library(http/http_open) for processing content
|
|
107
|
+
% with =|Content-encoding: gzip|=
|
|
108
|
+
|
|
109
|
+
http:encoding_filter(gzip, In0, In) :-
|
|
110
|
+
zopen(In0, In,
|
|
111
|
+
[ close_parent(true)
|
|
112
|
+
]).
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/* Part of SWI-Prolog
|
|
2
|
+
|
|
3
|
+
Author: Jan Wielemaker
|
|
4
|
+
E-mail: J.Wielemaker@vu.nl
|
|
5
|
+
WWW: http://www.swi-prolog.org
|
|
6
|
+
Copyright (c) 2010-2021, VU University Amsterdam
|
|
7
|
+
SWI-Prolog Solutions b.v.
|
|
8
|
+
All rights reserved.
|
|
9
|
+
|
|
10
|
+
Redistribution and use in source and binary forms, with or without
|
|
11
|
+
modification, are permitted provided that the following conditions
|
|
12
|
+
are met:
|
|
13
|
+
|
|
14
|
+
1. Redistributions of source code must retain the above copyright
|
|
15
|
+
notice, this list of conditions and the following disclaimer.
|
|
16
|
+
|
|
17
|
+
2. Redistributions in binary form must reproduce the above copyright
|
|
18
|
+
notice, this list of conditions and the following disclaimer in
|
|
19
|
+
the documentation and/or other materials provided with the
|
|
20
|
+
distribution.
|
|
21
|
+
|
|
22
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
23
|
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
24
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
25
|
+
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
26
|
+
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
27
|
+
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
28
|
+
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
29
|
+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
30
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
31
|
+
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
|
32
|
+
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
33
|
+
POSSIBILITY OF SUCH DAMAGE.
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
:- module(fastrw,
|
|
37
|
+
[ fast_read/1, % -Term
|
|
38
|
+
fast_write/1, % +Term
|
|
39
|
+
fast_read/2, % +Stream, -Term
|
|
40
|
+
fast_write/2, % +Stream, +Term
|
|
41
|
+
fast_write_to_string/3 % +Term, -String, ?Tail
|
|
42
|
+
]).
|
|
43
|
+
:- autoload(library(lists),[append/3]).
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
/** <module> Fast reading and writing of terms
|
|
47
|
+
|
|
48
|
+
This library provides the SICStus and Ciao library(fastrw) interface.
|
|
49
|
+
The idea behind this library is to design a fast serialization for
|
|
50
|
+
Prolog terms. Ideally, this should be portable between Prolog
|
|
51
|
+
implementation. Unfortunately there is no portably binary term format
|
|
52
|
+
defined.
|
|
53
|
+
|
|
54
|
+
The current implementation is based on PL_record_external(), which
|
|
55
|
+
provides a binary representation of terms that is processed efficiently
|
|
56
|
+
and can handle subterm sharing, cycles and attributed variables. In
|
|
57
|
+
other words, this library can handle any Prolog term except _blobs_ such
|
|
58
|
+
as stream handles, database references, etc. We try to keep the format
|
|
59
|
+
compatible between versions, but this is not guaranteed. Conversion is
|
|
60
|
+
always possible by reading a database using the old version, dump it
|
|
61
|
+
using write_canonical/1 and read it into the new version.
|
|
62
|
+
|
|
63
|
+
This library is built upon the following built in predicates:
|
|
64
|
+
|
|
65
|
+
- fast_term_serialized/2 translates between a term and its
|
|
66
|
+
serialization as a byte string.
|
|
67
|
+
- fast_read/2 and fast_write/2 read/write binary serializations.
|
|
68
|
+
|
|
69
|
+
@tbd Establish a portable binary format.
|
|
70
|
+
@compat The format is not compatible to SICStus/Ciao (which are not
|
|
71
|
+
compatible either). Future versions of this library might
|
|
72
|
+
implement a different encoding.
|
|
73
|
+
@bug The current implementation of fast_read/1 __is not safe__.
|
|
74
|
+
It is guaranteed to safely read terms written using
|
|
75
|
+
fast_write/1, but may crash on arbitrary input. The
|
|
76
|
+
implementation does perform some basic sanity checks,
|
|
77
|
+
including validation of the magic start byte.
|
|
78
|
+
*/
|
|
79
|
+
|
|
80
|
+
%! fast_read(-Term)
|
|
81
|
+
%
|
|
82
|
+
% The next term is read from current standard input and is unified
|
|
83
|
+
% with Term. The syntax of the term must agree with fast_read /
|
|
84
|
+
% fast_write format. If the end of the input has been reached,
|
|
85
|
+
% Term is unified with the term =end_of_file=.
|
|
86
|
+
|
|
87
|
+
fast_read(Term) :-
|
|
88
|
+
fast_read(current_input, Term).
|
|
89
|
+
|
|
90
|
+
%! fast_write(+Term)
|
|
91
|
+
%
|
|
92
|
+
% Output Term in a way that fast_read/1 and fast_read/2 will be
|
|
93
|
+
% able to read it back.
|
|
94
|
+
|
|
95
|
+
fast_write(Term) :-
|
|
96
|
+
fast_write(current_output, Term).
|
|
97
|
+
|
|
98
|
+
%! fast_write_to_string(+Term, -String, ?Tail)
|
|
99
|
+
%
|
|
100
|
+
% Perform a fast-write to the difference-slist String\Tail.
|
|
101
|
+
|
|
102
|
+
fast_write_to_string(T, S, R) :-
|
|
103
|
+
fast_term_serialized(T, String),
|
|
104
|
+
string_codes(String, Codes),
|
|
105
|
+
append(Codes, R, S).
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/* Part of SWI-Prolog
|
|
2
|
+
|
|
3
|
+
Author: Jan Wielemaker
|
|
4
|
+
E-mail: J.Wielemaker@vu.nl
|
|
5
|
+
WWW: http://www.swi-prolog.org
|
|
6
|
+
Copyright (c) 1985-2002, University of Amsterdam
|
|
7
|
+
All rights reserved.
|
|
8
|
+
|
|
9
|
+
Redistribution and use in source and binary forms, with or without
|
|
10
|
+
modification, are permitted provided that the following conditions
|
|
11
|
+
are met:
|
|
12
|
+
|
|
13
|
+
1. Redistributions of source code must retain the above copyright
|
|
14
|
+
notice, this list of conditions and the following disclaimer.
|
|
15
|
+
|
|
16
|
+
2. Redistributions in binary form must reproduce the above copyright
|
|
17
|
+
notice, this list of conditions and the following disclaimer in
|
|
18
|
+
the documentation and/or other materials provided with the
|
|
19
|
+
distribution.
|
|
20
|
+
|
|
21
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
22
|
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
23
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
24
|
+
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
25
|
+
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
26
|
+
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
27
|
+
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
28
|
+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
29
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
30
|
+
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
|
31
|
+
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
32
|
+
POSSIBILITY OF SUCH DAMAGE.
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
:- module(files,
|
|
36
|
+
[ can_open_file/2, % +Path, +Mode
|
|
37
|
+
chdir/1 % +Dir
|
|
38
|
+
]).
|
|
39
|
+
|
|
40
|
+
%! can_open_file(+Path, +Mode)
|
|
41
|
+
%
|
|
42
|
+
% Succeeds if the user has access to `File' in mode `Mode'. Fails
|
|
43
|
+
% silently if this is not the case. `Mode' is one of {read,
|
|
44
|
+
% write, both}. This used to be difficult. Since we have
|
|
45
|
+
% access_file/2 it is merely a Quintus compatibility predicate
|
|
46
|
+
% and should be in quintus.pl. We will leave it here for compatibility
|
|
47
|
+
% reasons.
|
|
48
|
+
%
|
|
49
|
+
% @deprecated Use access_file/2.
|
|
50
|
+
|
|
51
|
+
can_open_file(File, read) :-
|
|
52
|
+
!,
|
|
53
|
+
access_file(File, read).
|
|
54
|
+
can_open_file(File, write) :-
|
|
55
|
+
!,
|
|
56
|
+
( exists_file(File)
|
|
57
|
+
-> access_file(File, write)
|
|
58
|
+
; path_dir_name(File, Dir),
|
|
59
|
+
access_file(Dir, write)
|
|
60
|
+
).
|
|
61
|
+
can_open_file(File, both) :-
|
|
62
|
+
access_file(File, read),
|
|
63
|
+
access_file(File, write).
|
|
64
|
+
|
|
65
|
+
path_dir_name(File, Dir) :-
|
|
66
|
+
file_base_name(File, Base),
|
|
67
|
+
atom_concat(RawDir, Base, File),
|
|
68
|
+
( RawDir == ''
|
|
69
|
+
-> Dir = '.'
|
|
70
|
+
; Dir = RawDir
|
|
71
|
+
).
|
|
72
|
+
|
|
73
|
+
%! chdir(+Dir) is det.
|
|
74
|
+
%
|
|
75
|
+
% Change Working Directory.
|
|
76
|
+
%
|
|
77
|
+
% @deprecated Use using working_directory/2.
|
|
78
|
+
|
|
79
|
+
chdir(Dir) :-
|
|
80
|
+
working_directory(_Old, Dir).
|