OpenStego v0.8.0
================

OpenStego is a steganography application that provides two functionalities:
  1. Data Hiding: It can hide any data within an image file.
  2. Watermarking: Watermarking image files with an invisible signature. It
     can be used to detect unauthorized file copying.

For GUI:
  java -jar <path>\openstego.jar

For command line interface:
  java -jar <path>\openstego.jar <command> [options]

The first argument must be a command. Valid commands are:

  embed, --embed                Embed message into cover file
  extract, --extract            Extract message from stego file
  gensig, --gensig              Generate a signature for watermarking
  embedmark, --embedmark        Watermark a cover file using signature
  checkmark, --checkmark        Checks for watermark presence in the file
  algorithms, --algorithms      List down supported steganography algorithms
  readformats --readformats     List down supported formats for cover file
  writeformats, --writeformats  List down supported formats for stego file
  help, --help                  Display this help. To get help on options
                                specific to an algorithm, provide the name of
                                the algorithm using '-a' option

Following option is common for all commands other than 'algorithms':

    -a, --algorithm <algorithm_name>
        Name of the steganography algorithm to use. List of the supported
        algorithms can be retrieved using 'algorithms' command

'embed' options:

    -mf, --messagefile <filename>
        Source message/data file. If this option is not provided or '-'
        (without quotes) is provided as the value then the message data is
        read from stdin

    -cf, --coverfile <filename>
        Cover file in which the message will be embedded. This option supports
        '*' and '?' wildcards for filename. If wildcard filename is provided
        then make sure that it is surrounded by double quotes.
        Multiple filenames can also be provided by separating them with ';'
        (semi-colon).
        If the wildcard expression returns more than one file, then '-sf'
        option is ignored, and each coverfile is overwritten with the
        corresponding generated stegofile

    -sf, --stegofile <filename>
        Output stego file containing the embedded message. If this option is
        not provided or '-' (without quotes) is provided as the value then the
        stego file is written to stdout

    -c, --compress
        Compress the message file before embedding (default)

    -C, --nocompress
        Do not compress the message file before embedding

    -e, --encrypt
        Encrypt the message file before embedding

    -E, --noencrypt
        Do not encrypt the message file before embedding (default)

    -p, --password <password>
        Password to be used for encryption. If this is not provided then
        prompt will be displayed for entry

    -A, --cryptalgo <crypto algorithm>
        Algorithm to be used for encryption. Defaults to AES128. Possible
        values are AES128 or AES256. Please note that AES256 will only be
        supported with JRE having unlimited strength jurisdiction policy

'extract' options:

    -sf, --stegofile <filename>
        Stego file containing the embedded message

    -xf, --extractfile <filename>
        Optional filename for the extracted data. Use this to override the
        filename embedded in the stego file

    -xd, --extractdir <dir>
        Directory where the message file will be extracted. If this option is
        not provided, then the file is extracted to current directory

    -p, --password <password>
        Password to be used for decryption. If this is not provided then
        prompt will be displayed for entry (if the message is encrypted)

'gensig' options:

    -gf, --sigfile <filename>
        Output signature file that can be used to watermark files. If this
        option is not provided or '-' (without quotes) is provided as the
        value then the signature file is written to stdout

    -p, --password <password>
        Password to be used for generation of signature. If this is not
        provided then prompt will be displayed for entry

'embedmark' options:

    -gf, --sigfile <filename>
        Watermarking signature file. If this option is not provided or '-'
        (without quotes) is provided as the value then the signature data is
        read from stdin

    -cf, --coverfile <filename>
        Cover file which needs to be digitally watermarked. This option supports
        '*' and '?' wildcards for filename. If wildcard filename is provided
        then make sure that it is surrounded by double quotes.
        Multiple filenames can also be provided by separating them with ';'
        (semi-colon).
        If the wildcard expression returns more than one file, then '-sf'
        option is ignored, and each coverfile is overwritten with the
        corresponding generated stegofile

    -sf, --stegofile <filename>
        Output stego file containing the embedded watermark. If this option is
        not provided or '-' (without quotes) is provided as the value then the
        stego file is written to stdout

'checkmark' options:

    -sf, --stegofile <filename>
        Stego file containing the embedded watermark

    -gf, --sigfile <filename>
        Signature file which was used to watermark the file

Examples:

  To embed secret.txt into wallpaper.png and generate the output into test.png:

      java -jar <path>\openstego.jar embed -a lsb -mf secret.txt \
        -cf wallpaper.png -sf test.png
   OR
      java -jar <path>\openstego.jar --embed --algorithm=lsb \
        --messagefile=secret.txt --coverfile=wallpaper.png --stegofile=test.png

  To extract embedded data from test.png to /data directory:

      java -jar <path>\openstego.jar extract -a lsb -sf test.png -xd /data
   OR
      java -jar <path>\openstego.jar extract --algorithm=lsb \
        --stegofile=test.png --extractdir=/data

  To generate a signature file:

      java -jar <path>\openstego.jar gensig -a dwtxie -gf my.sig
   OR
      java -jar <path>\openstego.jar --gensig --algorithm=dwtxie \
        --sigfile=my.sig

  To embed signature into owned.png and generate the output into out.png:

      java -jar <path>\openstego.jar embedmark -a dwtxie -gf my.sig \
        -cf owned.png -sf out.png
   OR
      java -jar <path>\openstego.jar --embedmark --algorithm=dwtxie \
        --sigfile=my.sig --coverfile=owned.png --stegofile=out.png

  To check for watermark in test.png using my.sig signature file:

      java -jar <path>\openstego.jar checkmark -a dwtxie -gf my.sig \
        -sf test.png
   OR
      java -jar <path>\openstego.jar checkmark --algorithm=dwtxie \
        --sigfile=my.sig --stegofile=test.png

  Piping example:

      ls -R | java -jar <path>\openstego.jar embed -a lsb > test.png

  Wildcard example (Please note that the double quotes are important):

      java -jar <path>\openstego.jar embed -a lsb \
        -cf "img???.png;wall*.png" -mf watermark.txt

PLUGINS HELP:
-------------
Please use the following command to get plugin specific help:

  java -jar <path>\openstego.jar -help -a <algorithm_name>

AUTHOR:
-------
  Samir Vaidya (syvaidya@gmail.com)
  Copyright (c) 2007-2021

SEE ALSO:
---------
  Project homepage: https://www.openstego.com

LICENSE:
--------
  GNU General Public License 2.0 (GPL) (see LICENSE file)

ACKNOWLEDGEMENT:
----------------
  The digital watermarking code in this product is based on the code provided by
  Peter Meerwald. Refer to his excellent thesis on watermarking
  (http://www.cosy.sbg.ac.at/~pmeerw/Watermarking/).
  Peter Meerwald, Digital Image Watermarking in the Wavelet Transfer Domain,
  Master's Thesis, Department of Scientific Computing, University of Salzburg,
  Austria, January 2001.
