public function sign_taxonomy( $source, $private_key_pem, $signature_alg = "SHA256" )
	{
		$json = $source;
		$filename = $this->get_source_filename( $source );

		if ( $filename )
		{
			$json = $this->get_json( $filename );
		}

		$taxonomy = $this->get_taxonomy( $json );

		// Is there a signature?  If so remove it and re-generate the string
		if ( isset( $taxonomy['signature_block'] ) )
		{
			unset( $taxonomy['signature_block'] );
			$json = json_encode( $taxonomy );
		}

		$signature = $this->generate_signature( $json, $private_key_pem, $signature_alg );
		$taxonomy['signature_block'] = array(
				'signature' => $signature,
				'algorithm' => 'sha256',
		);

		$json = json_encode( $taxonomy );

		if ( $filename )
		{
			$this->save_json( $json, $filename );
			return true;
		}
		else
		{
			return $json;
		}
	}