/usr/lib/swipl/library/crypto.pl
AllApplicationManualNameSummaryHelp

  • swipl
    • library
      • error.pl -- Error generating support
      • apply.pl -- Apply predicates on a list
      • lists.pl -- List Manipulation
      • debug.pl -- Print debug messages and test assertions
      • broadcast.pl -- Event service
      • socket.pl -- Network socket (TCP and UDP) library
      • predicate_options.pl -- Access and analyse predicate options
      • shlib.pl -- Utility library for loading foreign objects (DLLs, shared objects)
      • option.pl -- Option list processing
      • uid.pl -- User and group management on Unix systems
      • unix.pl -- Unix specific operations
      • syslog.pl -- Unix syslog interface
      • thread_pool.pl
      • gensym.pl
      • settings.pl -- Setting management
      • arithmetic.pl -- Extensible arithmetic
      • main.pl -- Provide entry point for scripts
      • readutil.pl -- Read utilities
      • ssl.pl -- Secure Socket Layer (SSL) library
      • crypto.pl -- Cryptography and authentication library
        • crypto_n_random_bytes/2
        • crypto_data_hash/3
        • crypto_file_hash/3
        • crypto_context_new/2
        • crypto_data_context/3
        • crypto_context_hash/2
        • crypto_open_hash_stream/3
        • crypto_stream_hash/2
        • crypto_password_hash/2
        • crypto_password_hash/3
        • crypto_data_hkdf/4
        • ecdsa_sign/4
        • ecdsa_verify/4
        • hex_bytes/2
        • rsa_private_decrypt/4
        • rsa_private_encrypt/4
        • rsa_public_decrypt/4
        • rsa_public_encrypt/4
        • rsa_sign/4
        • rsa_verify/4
        • crypto_data_decrypt/6
        • crypto_data_encrypt/6
        • crypto_modular_inverse/3
        • crypto_generate_prime/3
        • crypto_is_prime/2
        • crypto_name_curve/2
        • crypto_curve_order/2
        • crypto_curve_generator/2
        • crypto_curve_scalar_mult/4
      • pldoc.pl -- Process source documentation
      • operators.pl -- Manage operators
      • pairs.pl -- Operations on key-value lists
      • prolog_source.pl -- Examine Prolog source-files
      • pengines.pl -- Pengines: Web Logic Programming Made Easy
      • record.pl -- Access compound arguments by name
      • memfile.pl
      • sgml.pl -- SGML, XML and HTML parser
      • quasi_quotations.pl -- Define Quasi Quotation syntax
      • pure_input.pl -- Pure Input from files and streams
      • time.pl -- Time and alarm library
      • uri.pl -- Process URIs
      • solution_sequences.pl -- Modify solution sequences
      • uuid.pl -- Universally Unique Identifier (UUID) Library
      • ordsets.pl -- Ordered set manipulation
      • random.pl -- Random numbers
      • base64.pl -- Base64 encoding and decoding
      • aggregate.pl -- Aggregation operators on backtrackable predicates
      • pcre.pl -- Perl compatible regular expression matching for SWI-Prolog
      • pengines_io.pl -- Provide Prolog I/O for HTML clients
      • sandbox.pl -- Sandboxed Prolog code
      • apply_macros.pl -- Goal expansion rules to avoid meta-calling
      • assoc.pl -- Binary associations
      • prolog_format.pl -- Analyse format specifications
      • yall.pl -- Lambda expressions
      • sha.pl -- SHA secure hashes
      • process.pl -- Create processes and redirect I/O
      • filesex.pl -- Extended operations on files
      • zlib.pl -- Zlib wrapper for SWI-Prolog
      • bdb.pl -- Berkeley DB interface
      • hash_stream.pl -- Maintain a hash on a stream
      • md5.pl -- MD5 hashes
      • porter_stem.pl
      • csv.pl -- Process CSV (Comma-Separated Values) data
      • pprint.pl -- Pretty Print Prolog terms
      • atom.pl -- Operations on atoms
      • ctypes.pl -- Character code classification
      • modules.pl -- Module utility predicates
      • occurs.pl -- Finding and counting sub-terms
      • prolog_xref.pl -- Prolog cross-referencer data collection
      • prolog_colour.pl -- Prolog syntax colouring support.
      • lazy_lists.pl -- Lazy list handling
      • prolog_code.pl -- Utilities for reasoning about code
      • ugraphs.pl -- Graph manipulation library
      • xpath.pl -- Select nodes in an XML DOM
      • iostream.pl -- Utilities to deal with streams
      • doc_http.pl -- Documentation server
      • url.pl -- Analysing and constructing URL
      • www_browser.pl -- Open a URL in the users browser
      • prolog_pack.pl -- A package manager for Prolog
      • prolog_config.pl -- Provide configuration information
      • git.pl -- Run GIT commands
      • strings.pl -- String utilities
      • dif.pl -- The dif/2 constraint
      • dialect.pl -- Support multiple Prolog dialects
      • edinburgh.pl -- Some traditional Edinburgh predicates
      • ansi_term.pl -- Print decorated text to ANSI consoles
      • terms.pl -- Term manipulation
      • listing.pl -- List programs and pretty print clauses
      • persistency.pl -- Provide persistent dynamic predicates
      • pengines_sandbox.pl -- Declare Pengine interaction sandbox-safe
      • term_to_json.pl
      • prolog_stack.pl -- Examine the Prolog stack
      • prolog_clause.pl -- Get detailed source-information about a clause
      • prolog_breakpoints.pl -- Manage Prolog break-points
      • wfs.pl -- Well Founded Semantics interface
      • mallocinfo.pl -- Memory allocation details
      • chr.pl
      • sort.pl
      • dicts.pl -- Dict utilities
      • varnumbers.pl -- Utilities for numbered terms
      • nb_set.pl -- Non-backtrackable sets
      • optparse.pl -- command line parsing
      • make.pl -- Reload modified source files
      • backcomp.pl -- Backward compatibility
      • streampool.pl -- Input multiplexing
      • plunit.pl -- Unit Testing
      • rdf.pl -- RDF/XML parser
      • rdf_triple.pl -- Create triples from intermediate representation
      • rdf_parser.pl
      • rewrite_term.pl
      • date.pl -- Process dates and times
      • prolog_history.pl -- Per-directory persistent commandline history
      • statistics.pl -- Get information about resource usage
      • charsio.pl -- I/O on Lists of Character Codes
      • writef.pl -- Old-style formatted write
      • udp_broadcast.pl -- A UDP broadcast proxy
      • fastrw.pl -- Fast reading and writing of terms
      • prolog_codewalk.pl -- Prolog code walker
      • prolog_metainference.pl -- Infer meta-predicate properties
      • editline.pl -- BSD libedit based command line editing
      • rbtrees.pl -- Red black trees
      • prolog_stream.pl -- A stream with Prolog callbacks
      • paxos.pl -- A Replicated Data Store
      • prolog_versions.pl -- Demand specific Prolog versions
      • macros.pl -- Macro expansion
      • doc_files.pl -- Create stand-alone documentation files
      • prolog_trace.pl -- Print access to predicates
      • tables.pl -- XSB interface to tables
      • redis.pl -- Redis client
      • double_metaphone.pl -- Phonetic string matching
      • isub.pl -- isub: a string similarity measure
      • increval.pl -- Incremental dynamic predicate modification
      • odbc.pl
      • explain.pl -- Describe Prolog Terms
      • yaml.pl -- Process YAML data
      • help.pl -- Text based manual
      • prolog_debug.pl -- User level debugging tools
      • shell.pl -- Elementary shell commands
      • doc_latex.pl -- PlDoc LaTeX backend
      • heaps.pl -- heaps/priority queues
      • thread.pl -- High level thread primitives
      • archive.pl -- Access several archive formats
      • prolog_jiti.pl -- Just In Time Indexing (JITI) utilities
      • readline.pl -- GNU readline interface
      • test_cover.pl -- Clause coverage analysis
      • mqi.pl
      • unicode.pl -- Unicode string handling
      • quintus.pl -- Quintus compatibility
      • intercept.pl -- Intercept and signal interface
      • prolog_profile.pl -- Execution profiler
      • base32.pl -- Base32 encoding and decoding
      • codesio.pl -- I/O on Lists of Character Codes
      • coinduction.pl -- Co-Logic Programming
      • when.pl -- Conditional coroutining
      • stomp.pl -- STOMP client.
      • cgi.pl -- Read CGI parameters
      • edit.pl -- Editor interface
      • threadutil.pl -- Interactive thread utilities
      • pwp.pl -- Prolog Well-formed Pages
      • sgml_write.pl -- XML/SGML writer module
      • zip.pl -- Access resource ZIP archives
      • crypt.pl
      • snowball.pl -- The Snowball multi-lingual stemmer library
      • redis_streams.pl -- Using Redis streams
      • xmlenc.pl -- XML encryption library
      • hashtable.pl -- Hash tables
      • table.pl
      • rlimit.pl
      • system.pl -- System utilities
      • streams.pl -- Manage Prolog streams
      • qsave.pl -- Save current program as a state or executable
      • prolog_autoload.pl -- Autoload all dependencies
      • check.pl -- Consistency checking
      • prolog_wrap.pl -- Wrapping predicates
      • rdf_write.pl -- Write RDF/XML from a list of triples
      • protobufs.pl -- Google's Protocol Buffers ("protobufs")
      • utf8.pl -- UTF-8 encoding/decoding on lists of character codes.
      • portray_text.pl -- Portray text
      • xsdp_types.pl -- XML-Schema primitive types
      • readln.pl -- Read line as list of tokens
      • c14n2.pl -- C14n2 canonical XML documents
      • xmldsig.pl -- XML Digital signature
      • oset.pl -- Ordered set manipulation
      • rwlocks.pl -- Read/write locks
      • files.pl
 crypto_password_hash(+Password, -Hash, +Options) is det
Derive Hash based on Password. This predicate is similar to crypto_data_hash/3 in that it derives a hash from given data. However, it is tailored for the specific use case of passwords. One essential distinction is that for this use case, the derivation of a hash should be as slow as possible to counteract brute-force attacks over possible passwords.

Another important distinction is that equal passwords must yield, with very high probability, different hashes. For this reason, cryptographically strong random numbers are automatically added to the password before a hash is derived.

Hash is unified with an atom that contains the computed hash and all parameters that were used, except for the password. Instead of storing passwords, store these hashes. Later, you can verify the validity of a password with crypto_password_hash/2, comparing the then entered password to the stored hash. If you need to export this atom, you should treat it as opaque ASCII data with up to 255 bytes of length. The maximal length may increase in the future.

Admissible options are:

algorithm(+Algorithm)
The algorithm to use. Currently, the only available algorithms are pbkdf2-sha512 (the default) and bcrypt.
cost(+C)
C is an integer, denoting the binary logarithm of the number of iterations used for the derivation of the hash. This means that the number of iterations is set to 2^C. Currently, the default is 17, and thus more than one hundred thousand iterations. You should set this option as high as your server and users can tolerate. The default is subject to change and will likely increase in the future or adapt to new algorithms.
salt(+Salt)
Use the given list of bytes as salt. By default, cryptographically secure random numbers are generated for this purpose. The default is intended to be secure, and constitutes the typical use case of this predicate.

Currently, PBKDF2 with SHA-512 is used as the hash derivation function, using 128 bits of salt. All default parameters, including the algorithm, are subject to change, and other algorithms will also become available in the future. Since computed hashes store all parameters that were used during their derivation, such changes will not affect the operation of existing deployments. Note though that new hashes will then be computed with the new default parameters.

See also
- crypto_data_hkdf/4 for generating keys from Hash.