This file is indexed.

/usr/bin/clevis-encrypt-http is in clevis 8-1.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
#!/bin/bash -e
# vim: set tabstop=8 shiftwidth=4 softtabstop=4 expandtab smarttab colorcolumn=80:
#
# Copyright (c) 2017 Red Hat, Inc.
# Author: Nathaniel McCallum <npmccallum@redhat.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#

SUMMARY="Encrypts using a REST HTTP escrow server policy"

function http() {
    curl -sfg -X "$1" -H "Content-Type: $2" --data-binary @- "$3"
}

if [ "$1" == "--summary" ]; then
    echo "$SUMMARY"
    exit 0
fi

if [ -t 0 ]; then
    echo >&2
    echo "Usage: clevis encrypt http CONFIG < PLAINTEXT > JWE" >&2
    echo >&2
    echo "$SUMMARY" >&2
    echo >&2
    echo "This command uses the following configuration properties:" >&2
    echo >&2
    echo "     url: <string>   The URL where the key is stored (REQUIRED)" >&2
    echo >&2
    echo "    http: <boolean>  Allow or disallow non-TLS HTTP (default: false)" >&2
    echo >&2
    echo "    type: <string>   The type of key to store (default: octet-stream)" >&2
    echo >&2
    echo "  method: <string>   The HTTP method to use (default: PUT)" >&2
    echo >&2
    exit 1
fi

if ! cfg=`jose fmt -j "$1" -Oo- 2>/dev/null`; then
    echo "Configuration is malformed!" >&2
    exit 1
fi

if ! url=`jose fmt -j "$cfg" -g url -u-`; then
    echo "Configuration is missing required 'url' property!" >&2
    exit 1
fi

case $url in
http:*)
    if ! jose fmt -j "$cfg" -g http -T; then
        echo "HTTP is not allowed (see 'http' config property)!" >&2
        exit 1
    fi ;;
https:*) ;;
*) echo "URL '$url' not supported!" >&2; exit 1;;
esac

typ=`jose fmt -j "$cfg" -Og type -u-` || typ="octet-stream"
case $typ in
jwk+json) typ="application/jwk+json" ;;
octet-stream) typ="application/octet-stream" ;;
application/jwk+json) ;;
application/octet-stream) ;;
*) echo "Type '$typ' not supported!" >&2; exit 1;;
esac

mth=`jose fmt -j "$cfg" -Og method -u-` || mth=PUT
case $mth in
PUT) ;;
POST) ;;
*) echo "Method '$mth' not supported!" >&2; exit 1;;
esac

jwk=`jose jwk gen -i '{"alg":"A256GCM"}'`
jwe='{"protected":{"clevis":{"pin":"http","http":{}}}}'
jwe=`jose fmt -j "$jwe" -g protected -g clevis -g http -q "$url" -s url  -UUUUo-`
jwe=`jose fmt -j "$jwe" -g protected -g clevis -g http -q "$typ" -s type -UUUUo-`

case $typ in
application/jwk+json)
    if ! http "$mth" "$typ" "$url" <<< "$jwk"; then
        echo "Key transfer failed!" >&2
        exit 1
    fi
    ;;
application/octet-stream)
    if ! jose fmt -j- -g k -u- <<< "$jwk" | jose b64 dec -i- | http "$mth" "$typ" "$url"; then
        echo "Key transfer failed!" >&2
        exit 1
    fi
    ;;
esac

exec jose jwe enc -i "$jwe" -k- -I- -c < <(echo -n "$jwk"; cat)