@@ -3,6 +3,7 @@ set -euo pipefail
33
44DEFAULT_INSTALL_DIR=" /usr/local/bin"
55INSTALL_DIR=" ${INSTALL_DIR:- $DEFAULT_INSTALL_DIR } "
6+ mkdir -p " $INSTALL_DIR "
67REQUESTED_VERSION=" ${1:- latest} "
78OS=" $( uname -s) "
89ARCH=" $( uname -m) "
@@ -13,7 +14,7 @@ usage() {
1314Usage: install_cosign.sh [version]
1415
1516Downloads the requested cosign release (default: latest) for Linux amd64, verifies
16- its SHA256 checksum , and installs it into $INSTALL_DIR (override via INSTALL_DIR env var).
17+ its signature , and installs it into $INSTALL_DIR (override via INSTALL_DIR env var).
1718EOF
1819}
1920
@@ -37,15 +38,17 @@ case "$ARCH" in
3738 ;;
3839esac
3940
40- for cmd in curl sha256sum install; do
41+ for cmd in curl openssl install go asdf ; do
4142 if ! command -v " $cmd " > /dev/null 2>&1 ; then
4243 echo " Error: $cmd is required but not found in PATH" >&2
4344 exit 1
4445 fi
4546done
4647
4748get_latest_tag () {
48- curl -fsSL " $API_URL /latest" | awk -F' "' ' /tag_name/ {print $4; exit}'
49+ local response
50+ response=" $( curl -fsSL " $API_URL /latest" ) "
51+ awk -F' "' ' /tag_name/ {print $4; exit}' <<< " $response"
4952}
5053
5154VERSION=" $REQUESTED_VERSION "
@@ -63,15 +66,37 @@ TMP_DIR="$(mktemp -d)"
6366trap ' rm -rf "$TMP_DIR"' EXIT
6467
6568BIN_PATH=" $TMP_DIR /${BINARY_NAME} "
66- SHA_PATH=" $TMP_DIR /${BINARY_NAME} .sha256"
69+ SIGSTORE_PATH=" $TMP_DIR /${BINARY_NAME} -kms.sigstore.json"
70+ ARTIFACT_PATH=" $TMP_DIR /artifact.pub"
71+ DECODED_SIGSTORE_PATH=" $TMP_DIR /cosign-kms.sig.decoded"
6772
73+ echo " downloading ${BINARY_NAME} version ${VERSION} from ${BASE_URL} "
6874curl -fsSL " ${BASE_URL} /${BINARY_NAME} " -o " $BIN_PATH "
69- curl -fsSL " ${BASE_URL} /${BINARY_NAME} .sha256" -o " $SHA_PATH "
75+ echo " downloading sigstore signature"
76+ curl -fsSL " ${BASE_URL} /${BINARY_NAME} -kms.sigstore.json" -o " $SIGSTORE_PATH "
7077
78+ # install tuf-client
79+ go install github.com/theupdateframework/go-tuf/cmd/tuf-client@latest
80+ asdf reshim golang
81+
82+ # setup tuf-client
83+ SIGSTORE_ROOT_PATH=" $TMP_DIR /sigstore-root.json"
84+ curl -o " $SIGSTORE_ROOT_PATH " https://raw.githubusercontent.com/sigstore/root-signing/refs/heads/main/metadata/root_history/10.root.json
85+ tuf-client init https://tuf-repo-cdn.sigstore.dev " $SIGSTORE_ROOT_PATH "
86+
87+ tuf-client get https://tuf-repo-cdn.sigstore.dev artifact.pub > " $ARTIFACT_PATH "
88+
89+ cat " $SIGSTORE_PATH " | jq -r .messageSignature.signature | base64 -d > " $DECODED_SIGSTORE_PATH "
7190pushd " $TMP_DIR " > /dev/null
72- sha256sum -c " ${BINARY_NAME} .sha256"
91+ echo " verifying signature with artifact.pub"
92+ openssl dgst -sha256 -verify " $ARTIFACT_PATH " -signature " $DECODED_SIGSTORE_PATH " " $BIN_PATH "
7393popd > /dev/null
7494
95+ echo " verifying signature with cosign verify-blob"
96+ chmod +x " $BIN_PATH "
97+ ${BIN_PATH} verify-blob --bundle " ${SIGSTORE_PATH} " --key " $ARTIFACT_PATH " " $BIN_PATH "
98+
99+
75100install -m 0755 " $BIN_PATH " " ${INSTALL_DIR} /cosign"
76101
77102" ${INSTALL_DIR} /cosign" version
0 commit comments