# Wizard's Toolkit

The Wizard's Toolkit provides command-line utilities to convert plaintext to ciphertext, convert ciphertext to plaintext, report properties associated with ciphertext, compute the message digest of a file, and read message digests from a file and authenticate them. In addition, the Wizard's Toolkit includes a cross-platform C API that includes a number of encryption and hash methods many developers should find useful in their projects.

Wizard's Toolkit is free software delivered as a ready-to-run binary distribution or as source code that you may use, copy, modify, and distribute in both open and proprietary applications. It is distributed under a derived Apache 2.0 license.

The current release is Wizard's Toolkit 1.0.9-4. It runs on Linux, Windows, Mac Os X, iOS, Android OS, and others.

The authoritative Wizard's Toolkit web site is https://urban-warrior.org/WizardsToolkit. The authoritative source code repository is https://github.com/ImageMagick/WizardsToolkit.

## Features and Capabilities

Here are just a few examples of what the Wizard's Toolkit command line utilities can do:

- Convert plaintext to ciphertext
- Convert ciphertext to plaintext
- Report properties associated with ciphertext
- Import, export, or list properties of private keys on your keyring
- Compute the message digest of a file
- Read message digests from a file and authenticate them

Here are just a few examples of what the Wizard's Toolkit Application Programming Interface can do:

- Return files as Binary Large OBjectS
- Write/read characters, shorts, words, and long words to/from a file
- Compute a cyclic redundancy checksum
- Handle C exceptions
- Generate a secure hash (includes MD5, SHA-1, SHA 2, and SHA 3)
- Generate a keyed-hash for message authentication
- Encrypt/decrypt messages (includes AES, Serpent, and Twofish)
- Authenticate a user (only secret-key supported at this time)
- Map content with its associated mime type and file extension
- Log events to the console or XML-style file
- Anonymous memory-mapped memory allocation/deallocation
- Increase entropy with message compression
- Generate cryptographically-strong random numbers
- Acquire/relinquish resources
- Acquire/relinquish semaphores
- Store/retrieve key-value pairs to/from a hashmap or linked-list
- Store/retrieve key-value pairs to/from a self-adjusting binary tree
- Parse or generate a XML document
- Convenience methods for dealing with strings