name: crypt4gh
about: Utility for the cryptographic GA4GH standard, reading from stdin and outputting to stdout.
args:
    - verbose:
        required: false
        short: v
        long: verbose
        about: Sets the level of verbosity
        takes_value: false
subcommands:
    - encrypt:
        about: Encrypts the input using your (optional) secret key and the public key of the recipient.
        args:
            - sk:
                required: false
                long: sk
                about: Curve25519-based Private key
                takes_value: true
                value_name: path
                env: C4GH_SECRET_KEY
            - recipient_pk:
                required: true
                long: recipient_pk
                about: Recipient's Curve25519-based Public key
                takes_value: true
                value_name: path
                multiple: true
            - range:
                required: false
                long: range
                about: Byte-range either as  <start-end> or just <start> (Start included, End excluded)
                takes_value: true
                value_name: start-end
    - decrypt:
        about: Decrypts the input using your secret key and the (optional) public key of the sender.
        args:
            - sk:
                required: false
                long: sk
                about: Curve25519-based Private key.
                takes_value: true
                value_name: path
                env: C4GH_SECRET_KEY
            - sender_pk:
                required: false
                long: sender_pk
                about: Peer's Curve25519-based Public key to verify provenance (akin to signature)
                takes_value: true
                value_name: path
    - rearrange:
        about: Rearranges the input according to the edit list packet.
        args:
            - sk:
                required: false
                long: sk
                about: Curve25519-based Private key
                takes_value: true
                value_name: path
                env: C4GH_SECRET_KEY
            - range:
                required: true
                long: range
                about: Byte-range either as  <start-end> or just <start> (Start included, End excluded)
                takes_value: true
                value_name: start-end
    - reencrypt:
        about: Decrypts the input using your (optional) secret key and then it reencrypts it using the public key of the recipient.
        args:
            - sk:
                required: false
                long: sk
                about: Curve25519-based Private key
                takes_value: true
                value_name: path
                env: C4GH_SECRET_KEY
            - recipient_pk:
                required: true
                long: recipient_pk
                about: Recipient's Curve25519-based Public key
                takes_value: true
                value_name: path
                multiple: true
            - trim:
                required: false
                short: t
                long: trim
                about: Keep only header packets that you can decrypt
                takes_value: false
    - keygen:
        about: Utility to create Crypt4GH-formatted keys.
        args:
            - sk:
                required: false
                long: sk
                about: Curve25519-based Private key
                takes_value: true
                value_name: keyfile
                default_value: ~/.c4gh/key
                env: C4GH_SECRET_KEY
            - pk:
                required: false
                long: pk
                about: Curve25519-based Public key
                takes_value: true
                value_name: keyfile
                default_value: ~/.c4gh/key.pub
                env: C4GH_PUBLIC_KEY
            - comment:
                required: false
                short: C
                long: comment
                about: Key's Comment
                takes_value: true
                value_name: comment
            - nocrypt:
                required: false
                long: nocrypt
                about: Do not encrypt the private key. Otherwise it is encrypted in the Crypt4GH key format (See https://crypt4gh.readthedocs.io/en/latest/keys.html)
                takes_value: false
            - force:
                required: false
                short: f
                about: Overwrite the destination files
                takes_value: false
