#############################################################
#
# google_signing (signing related code)
#
#############################################################
GOOGLE_SIGNING_SITE_METHOD=null
GOOGLE_SIGNING_DEPENDENCIES=host-googletest host-py-openssl \
			    google_platform \
			    host-google_platform \
			    host-google_keystore_client

ifeq ($(BR2_PACKAGE_GOOGLE_PROD),y)
ifneq ($(BR2_PACKAGE_GOOGLE_UNSIGNED),y)
ifneq ($(BR2_TARGET_GENERIC_PLATFORM_NAME),"gfsc100")
GOOGLE_SIGNING_DEPENDENCIES += bcm_signing bcm_bolt_signing host-bcm_signing
endif
endif
endif

HOST_GOOGLE_SIGNING_TEST=YES
SIGNING_DIR=$(BINARIES_DIR)/signing

ifeq ($(BR2_TARGET_GENERIC_PLATFORM_NAME),"gfsc100")
KEYSTORE_CONFIG_ID=SPACECAST
else
KEYSTORE_CONFIG_ID=GFIBER_DRM
endif

SIGNING_FLAG=""
ifeq ($(BR2_PACKAGE_GOOGLE_PROD)$(BR2_PACKAGE_GOOGLE_UNSIGNED),y)
define HOST_GOOGLE_SIGNING_RETRIEVE_KEY
	(mkdir -m 700 -p $(SIGNING_DIR) && \
	$(call GOOGLE_KEYSTORE_CLIENT_EXECUTE,signing_private_key,$(SIGNING_DIR)/gfiber_private.pem) && \
	$(call GOOGLE_KEYSTORE_CLIENT_EXECUTE,gfhd254_key0_private,$(SIGNING_DIR)/gfhd254_private.pem))
endef
SIGNING_FLAG="-s"
GOOGLE_KEYSTORE_CLIENT_NEEDS_KEYS += \
	signing_private_key \
	signing_public_key_signature
else
define HOST_GOOGLE_SIGNING_RETRIEVE_KEY
	echo 'Skip retrieving signing key...'
endef
endif

define HOST_GOOGLE_SIGNING_CLEANUP
	if [ -d "$(SIGNING_DIR)" ]; then \
		shred -f -u -z -n 5 $(SIGNING_DIR)/*; \
		rm -rf $(SIGNING_DIR); \
	fi
endef

ifneq ($(BR2_PACKAGE_GOOGLE_UNSIGNED),y)
define HOST_GOOGLE_SIGNING_SIGN
	($(HOST_GOOGLE_SIGNING_RETRIEVE_KEY) && \
		$(HOST_DIR)/usr/bin/python $(HOST_DIR)/usr/sbin/repack.py \
		-o $(HOST_DIR) $(SIGNING_FLAG) -b $(BINARIES_DIR) && \
		$(HOST_GOOGLE_SIGNING_CLEANUP))
endef

define HOST_BRUNOv2_SIGNING_SIGN
	(cp $(1) $(2) && \
	 $(HOST_GOOGLE_SIGNING_RETRIEVE_KEY) && \
		$(HOST_DIR)/usr/bin/python $(HOST_DIR)/usr/sbin/repack.py \
		-o $(HOST_DIR) $(SIGNING_FLAG) --bolt_sign -b $(BINARIES_DIR) -k $(2) && \
		$(HOST_GOOGLE_SIGNING_CLEANUP))
endef

define GOOGLE_CODE_SIGN_TOOL_EXECUTE
	(cd /google/src/files/head/depot/google3 && \
		blaze --batch run \
		--noshow_progress -- \
		//isp/fiber/drm:code_sign_tool \
		$(1) \
		$(2) \
		--image_type=$(3) \
		--keystore_config_id=$(KEYSTORE_CONFIG_ID) \
		--key_suffix=$(BR2_PACKAGE_GOOGLE_KEY_SUFFIX) \
		--outfile=$(2);)
endef
else
define HOST_GOOGLE_SIGNING_SIGN
  echo 'Unsigned build, skipping signer step...'
endef
define HOST_BRUNOv2_SIGNING_SIGN
  echo 'Unsigned build, skipping signer step...'
endef
define GOOGLE_CODE_SIGN_TOOL_EXECUTE
  echo 'Unsigned build, skipping signer step...'
endef
endif

# For optimus, developer and production images are always fake-signed, then a
# real signature is substituted for production builds.
ifeq ($(BR2_PACKAGE_GOOGLE_PROD),y)
define HOST_GOOGLE_SIGNING_OPTIMUS_KERNEL_SIGN
	($(HOST_DIR)/usr/bin/python $(HOST_DIR)/usr/sbin/repack.py \
			-o $(HOST_DIR) -b $(BINARIES_DIR) -k $(1) && \
		$(call GOOGLE_CODE_SIGN_TOOL_EXECUTE,sign-image,$(BINARIES_DIR)/$(1),kernel,
		       $(2)))
endef
else
define HOST_GOOGLE_SIGNING_OPTIMUS_KERNEL_SIGN
	($(HOST_DIR)/usr/bin/python $(HOST_DIR)/usr/sbin/repack.py \
			-o $(HOST_DIR) -b $(BINARIES_DIR) -k $(1) && \
		echo "Development build, fake sign kernel...")
endef
endif

define HOST_GOOGLE_SIGNING_OPTIMUS_RECOVERY_SIGN
	($(HOST_DIR)/usr/bin/python $(HOST_DIR)/usr/sbin/repack.py \
			-o $(HOST_DIR) -b $(BINARIES_DIR) -k $(1) && \
		$(call GOOGLE_CODE_SIGN_TOOL_EXECUTE,sign-image,$(BINARIES_DIR)/$(1),recovery,
		       $(2)))
endef

define GOOGLE_SIGNING_EXTRACT_CMDS
	mkdir -p $(@D)
endef

define HOST_GOOGLE_SIGNING_EXTRACT_CMDS
	mkdir -p $(@D)
endef

sign_sn: sn.txt
	($(HOST_GOOGLE_SIGNING_RETRIEVE_KEY); \
		$(HOST_DIR)/usr/bin/python $(HOST_DIR)/usr/sbin/signserial.py \
		-o $(HOST_DIR) -b $(BINARIES_DIR) -f $<; \
		$(HOST_GOOGLE_SIGNING_CLEANUP))

$(eval $(call GENTARGETS))
$(eval $(call GENTARGETS,host))
