• Places
    • Home
    • Graphs
    • Prefixes
  • Admin
    • Users
    • Settings
    • Plugins
    • Statistics
  • Repository
    • Load local file
    • Load from HTTP
    • Load from library
    • Remove triples
    • Clear repository
    • RDF quality heuristics
  • Query
    • YASGUI SPARQL Editor
    • Simple Form
    • SWISH Prolog shell
  • Help
    • Documentation
    • Tutorial
    • Roadmap
    • HTTP Services
  • Login

/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 -- Resource bounded thread management
      • gensym.pl -- Generate unique symbols
      • 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
      • filesex.pl -- Extended operations on files
      • doc_http.pl -- Documentation server
      • pldoc.pl -- Process source documentation
      • operators.pl -- Manage operators
      • pairs.pl -- Operations on key-value lists
      • prolog_source.pl -- Examine Prolog source-files
      • sgml.pl -- SGML, XML and HTML parser
      • quasi_quotations.pl -- Define Quasi Quotation syntax
      • uri.pl -- Process URIs
      • url.pl -- Analysing and constructing URL
      • www_browser.pl -- Open a URL in the users browser
      • prolog_colour.pl -- Prolog syntax colouring support.
      • record.pl -- Access compound arguments by name
      • prolog_xref.pl -- Prolog cross-referencer data collection
      • occurs.pl -- Finding and counting sub-terms
      • ordsets.pl -- Ordered set manipulation
      • assoc.pl -- Binary associations
      • ugraphs.pl -- Graph manipulation library
      • xpath.pl -- Select nodes in an XML DOM
      • iostream.pl -- Utilities to deal with streams
      • atom.pl -- Operations on atoms
      • porter_stem.pl
      • solution_sequences.pl -- Modify solution sequences
      • prolog_pack.pl -- A package manager for Prolog
      • process.pl -- Create processes and redirect I/O
      • memfile.pl
      • prolog_config.pl -- Provide configuration information
      • git.pl -- Run GIT commands
      • ctypes.pl -- Character code classification
      • time.pl -- Time and alarm library
      • utf8.pl -- UTF-8 encoding/decoding on lists of character codes.
      • base64.pl -- Base64 encoding and decoding
      • sha.pl -- SHA secure hashes
      • crypt.pl
      • persistency.pl -- Provide persistent dynamic predicates
      • pure_input.pl -- Pure Input from files and streams
      • nb_set.pl -- Non-backtrackable sets
      • xsdp_types.pl -- XML-Schema primitive types
      • uuid.pl -- Universally Unique Identifier (UUID) Library
      • pcre.pl -- Perl compatible regular expression matching for SWI-Prolog
      • aggregate.pl -- Aggregation operators on backtrackable predicates
      • rdf_write.pl -- Write RDF/XML from a list of triples
      • rdf.pl -- RDF/XML parser
      • sgml_write.pl -- XML/SGML writer module
      • archive.pl -- Access several archive formats
      • csv.pl -- Process CSV (Comma-Separated Values) data
      • dialect.pl -- Support multiple Prolog dialects
      • apply_macros.pl -- Goal expansion rules to avoid meta-calling
      • pengines.pl -- Pengines: Web Logic Programming Made Easy
      • random.pl -- Random numbers
      • 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
      • sandbox.pl -- Sandboxed Prolog code
      • prolog_format.pl -- Analyse format specifications
      • pprint.pl -- Pretty Print Prolog terms
      • lazy_lists.pl -- Lazy list handling
      • pengines_io.pl -- Provide Prolog I/O for HTML clients
      • yall.pl -- Lambda expressions
      • edinburgh.pl -- Some traditional Edinburgh predicates
      • prolog_clause.pl -- Get detailed source-information about a clause
      • prolog_breakpoints.pl -- Manage Prolog break-points
      • dicts.pl -- Dict utilities
      • dif.pl -- The dif/2 constraint
      • thread.pl -- High level thread primitives
      • rbtrees.pl -- Red black trees
      • nb_rbtrees.pl -- Non-backtrackable operations on red black trees
      • mallocinfo.pl -- Memory allocation details
      • snowball.pl -- The Snowball multi-lingual stemmer library
      • date.pl -- Process dates and times
      • rdf_triple.pl -- Create triples from intermediate representation
      • rdf_parser.pl
      • rewrite_term.pl
      • oset.pl -- Ordered set manipulation
      • modules.pl -- Module utility predicates
      • tables.pl -- XSB interface to tables
      • base32.pl -- Base32 encoding and decoding
      • charsio.pl -- I/O on Lists of Character Codes
      • codesio.pl -- I/O on Lists of Character Codes
      • coinduction.pl -- Co-Logic Programming
      • heaps.pl -- heaps/priority queues
      • sort.pl
      • statistics.pl -- Get information about resource usage
      • terms.pl -- Term manipulation
      • varnumbers.pl -- Utilities for numbered terms
      • when.pl -- Conditional coroutining
      • backcomp.pl -- Backward compatibility
      • intercept.pl -- Intercept and signal interface
      • prolog_code.pl -- Utilities for reasoning about code
      • yaml.pl -- Process YAML data
      • shell.pl -- Elementary shell commands
      • quintus.pl -- Quintus compatibility
      • listing.pl -- List programs and pretty print clauses
      • redis_streams.pl -- Using Redis streams
      • redis.pl -- Redis client
      • doc_latex.pl -- PlDoc LaTeX backend
      • strings.pl -- String utilities
      • make.pl -- Reload modified source files
      • term_to_json.pl
      • check.pl -- Consistency checking
      • ansi_term.pl -- Print decorated text to ANSI consoles
      • prolog_codewalk.pl -- Prolog code walker
      • prolog_metainference.pl -- Infer meta-predicate properties
      • paxos.pl -- A Replicated Data Store
      • odbc.pl
      • editline.pl -- BSD libedit based command line editing
      • edit.pl -- Editor interface
      • unicode.pl -- Unicode string handling
      • double_metaphone.pl -- Phonetic string matching
      • plunit.pl -- Unit Testing
      • test_cover.pl -- Clause cover analysis
      • wfs.pl -- Well Founded Semantics interface
      • doc_files.pl -- Create stand-alone documentation files
      • readline.pl -- GNU readline interface
      • files.pl
      • streampool.pl -- Input multiplexing
      • udp_broadcast.pl -- A UDP broadcast proxy
      • cgi.pl -- Read CGI parameters
      • table.pl
      • qsave.pl -- Save current program as a state or executable
      • zip.pl -- Access resource ZIP archives
      • writef.pl -- Old-style formatted write
      • protobufs.pl -- Google's Protocol Buffers
      • threadutil.pl -- Interactive thread utilities
      • c14n2.pl -- C14n2 canonical XML documents
      • help.pl -- Text based manual
      • isub.pl -- isub: a string similarity measure
      • xmlenc.pl -- XML encryption library
      • optparse.pl -- command line parsing
      • explain.pl -- Describe Prolog Terms
      • prolog_stream.pl -- A stream with Prolog callbacks
      • pwp.pl -- Prolog Well-formed Pages
      • prolog_autoload.pl -- Autoload all dependencies
      • system.pl -- System utilities
      • tty.pl -- Terminal operations
      • prolog_trace.pl -- Print access to predicates
      • rlimit.pl
      • prolog_jiti.pl -- Just In Time Indexing (JITI) utilities
      • xmldsig.pl -- XML Digital signature
      • prolog_stack.pl -- Examine the Prolog stack
      • hashtable.pl -- Hash tables
      • prolog_wrap.pl -- Wrapping predicates
      • prolog_history.pl -- Per-directory persistent commandline history
 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 algorithm is pbkdf2-sha512, which is therefore also the default.
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.
ClioPatria (version V3.1.1-40-g9d9e003)