Skip to content

Instantly share code, notes, and snippets.

@thepaul
Created November 15, 2024 14:30
Show Gist options
  • Save thepaul/aaa80416948f98e9d599146872bee21a to your computer and use it in GitHub Desktop.
Save thepaul/aaa80416948f98e9d599146872bee21a to your computer and use it in GitHub Desktop.
query to calculate an xor over the sha1 digests of all fields in all rows of a spanner table
WITH as_bytes AS (
SELECT
stream_id,
CAST(CAST(position AS STRING) AS BYTES) AS position,
CAST(format_timestamp('%E4Y-%m-%d %H:%M:%E6S', created_at, 'UTC') AS BYTES) AS created_at,
CAST(COALESCE(format_timestamp('%E4Y-%m-%d %H:%M:%E6S', repaired_at, 'UTC'), '(null)') AS BYTES) AS repaired_at,
CAST(COALESCE(format_timestamp('%E4Y-%m-%d %H:%M:%E6S', expires_at, 'UTC'), '(null)') AS BYTES) AS expires_at,
root_piece_id,
encrypted_key_nonce,
encrypted_key,
CAST(CAST(encrypted_size AS STRING) AS BYTES) AS encrypted_size,
COALESCE(encrypted_etag, b'(null)') AS encrypted_etag,
CAST(CAST(plain_offset AS STRING) AS BYTES) AS plain_offset,
CAST(CAST(plain_size AS STRING) AS BYTES) AS plain_size,
CAST(CAST(redundancy AS STRING) AS BYTES) AS redundancy,
COALESCE(inline_data, b'') AS inline_data,
COALESCE(remote_alias_pieces, b'(null)') AS remote_alias_pieces,
CAST(CAST(placement AS STRING) AS BYTES) AS placement,
FROM segments
), sha_bytes AS (
SELECT
to_code_points(sha1(stream_id)) AS sha_stream_id,
to_code_points(sha1(position)) AS sha_position,
to_code_points(sha1(created_at)) AS sha_created_at,
to_code_points(sha1(repaired_at)) AS sha_repaired_at,
to_code_points(sha1(expires_at)) AS sha_expires_at,
to_code_points(sha1(root_piece_id)) AS sha_root_piece_id,
to_code_points(sha1(encrypted_key_nonce)) AS sha_encrypted_key_nonce,
to_code_points(sha1(encrypted_key)) AS sha_encrypted_key,
to_code_points(sha1(encrypted_size)) AS sha_encrypted_size,
to_code_points(sha1(encrypted_etag)) AS sha_encrypted_etag,
to_code_points(sha1(plain_offset)) AS sha_plain_offset,
to_code_points(sha1(plain_size)) AS sha_plain_size,
to_code_points(sha1(redundancy)) AS sha_redundancy,
to_code_points(sha1(inline_data)) AS sha_inline_data,
to_code_points(sha1(remote_alias_pieces)) AS sha_remote_alias_pieces,
to_code_points(sha1(placement)) AS sha_placement,
FROM as_bytes
), as_words AS (
SELECT
(sha_stream_id[OFFSET(0)]<<56)|(sha_stream_id[OFFSET(1)]<<48)|(sha_stream_id[OFFSET(2)]<<40)|(sha_stream_id[OFFSET(3)]<<32)|(sha_stream_id[OFFSET(4)]<<24)|(sha_stream_id[OFFSET(5)]<<16)|(sha_stream_id[OFFSET(6)]<<8)|(sha_stream_id[OFFSET(7)]) AS sha_stream_id_word1,
(sha_stream_id[OFFSET(8)]<<56)|(sha_stream_id[OFFSET(9)]<<48)|(sha_stream_id[OFFSET(10)]<<40)|(sha_stream_id[OFFSET(11)]<<32)|(sha_stream_id[OFFSET(12)]<<24)|(sha_stream_id[OFFSET(13)]<<16)|(sha_stream_id[OFFSET(14)]<<8)|(sha_stream_id[OFFSET(15)]) AS sha_stream_id_word2,
(sha_stream_id[OFFSET(16)]<<56)|(sha_stream_id[OFFSET(17)]<<48)|(sha_stream_id[OFFSET(18)]<<40)|(sha_stream_id[OFFSET(19)]<<32) AS sha_stream_id_word3,
(sha_position[OFFSET(0)]<<56)|(sha_position[OFFSET(1)]<<48)|(sha_position[OFFSET(2)]<<40)|(sha_position[OFFSET(3)]<<32)|(sha_position[OFFSET(4)]<<24)|(sha_position[OFFSET(5)]<<16)|(sha_position[OFFSET(6)]<<8)|(sha_position[OFFSET(7)]) AS sha_position_word1,
(sha_position[OFFSET(8)]<<56)|(sha_position[OFFSET(9)]<<48)|(sha_position[OFFSET(10)]<<40)|(sha_position[OFFSET(11)]<<32)|(sha_position[OFFSET(12)]<<24)|(sha_position[OFFSET(13)]<<16)|(sha_position[OFFSET(14)]<<8)|(sha_position[OFFSET(15)]) AS sha_position_word2,
(sha_position[OFFSET(16)]<<56)|(sha_position[OFFSET(17)]<<48)|(sha_position[OFFSET(18)]<<40)|(sha_position[OFFSET(19)]<<32) AS sha_position_word3,
(sha_created_at[OFFSET(0)]<<56)|(sha_created_at[OFFSET(1)]<<48)|(sha_created_at[OFFSET(2)]<<40)|(sha_created_at[OFFSET(3)]<<32)|(sha_created_at[OFFSET(4)]<<24)|(sha_created_at[OFFSET(5)]<<16)|(sha_created_at[OFFSET(6)]<<8)|(sha_created_at[OFFSET(7)]) AS sha_created_at_word1,
(sha_created_at[OFFSET(8)]<<56)|(sha_created_at[OFFSET(9)]<<48)|(sha_created_at[OFFSET(10)]<<40)|(sha_created_at[OFFSET(11)]<<32)|(sha_created_at[OFFSET(12)]<<24)|(sha_created_at[OFFSET(13)]<<16)|(sha_created_at[OFFSET(14)]<<8)|(sha_created_at[OFFSET(15)]) AS sha_created_at_word2,
(sha_created_at[OFFSET(16)]<<56)|(sha_created_at[OFFSET(17)]<<48)|(sha_created_at[OFFSET(18)]<<40)|(sha_created_at[OFFSET(19)]<<32) AS sha_created_at_word3,
(sha_repaired_at[OFFSET(0)]<<56)|(sha_repaired_at[OFFSET(1)]<<48)|(sha_repaired_at[OFFSET(2)]<<40)|(sha_repaired_at[OFFSET(3)]<<32)|(sha_repaired_at[OFFSET(4)]<<24)|(sha_repaired_at[OFFSET(5)]<<16)|(sha_repaired_at[OFFSET(6)]<<8)|(sha_repaired_at[OFFSET(7)]) AS sha_repaired_at_word1,
(sha_repaired_at[OFFSET(8)]<<56)|(sha_repaired_at[OFFSET(9)]<<48)|(sha_repaired_at[OFFSET(10)]<<40)|(sha_repaired_at[OFFSET(11)]<<32)|(sha_repaired_at[OFFSET(12)]<<24)|(sha_repaired_at[OFFSET(13)]<<16)|(sha_repaired_at[OFFSET(14)]<<8)|(sha_repaired_at[OFFSET(15)]) AS sha_repaired_at_word2,
(sha_repaired_at[OFFSET(16)]<<56)|(sha_repaired_at[OFFSET(17)]<<48)|(sha_repaired_at[OFFSET(18)]<<40)|(sha_repaired_at[OFFSET(19)]<<32) AS sha_repaired_at_word3,
(sha_expires_at[OFFSET(0)]<<56)|(sha_expires_at[OFFSET(1)]<<48)|(sha_expires_at[OFFSET(2)]<<40)|(sha_expires_at[OFFSET(3)]<<32)|(sha_expires_at[OFFSET(4)]<<24)|(sha_expires_at[OFFSET(5)]<<16)|(sha_expires_at[OFFSET(6)]<<8)|(sha_expires_at[OFFSET(7)]) AS sha_expires_at_word1,
(sha_expires_at[OFFSET(8)]<<56)|(sha_expires_at[OFFSET(9)]<<48)|(sha_expires_at[OFFSET(10)]<<40)|(sha_expires_at[OFFSET(11)]<<32)|(sha_expires_at[OFFSET(12)]<<24)|(sha_expires_at[OFFSET(13)]<<16)|(sha_expires_at[OFFSET(14)]<<8)|(sha_expires_at[OFFSET(15)]) AS sha_expires_at_word2,
(sha_expires_at[OFFSET(16)]<<56)|(sha_expires_at[OFFSET(17)]<<48)|(sha_expires_at[OFFSET(18)]<<40)|(sha_expires_at[OFFSET(19)]<<32) AS sha_expires_at_word3,
(sha_root_piece_id[OFFSET(0)]<<56)|(sha_root_piece_id[OFFSET(1)]<<48)|(sha_root_piece_id[OFFSET(2)]<<40)|(sha_root_piece_id[OFFSET(3)]<<32)|(sha_root_piece_id[OFFSET(4)]<<24)|(sha_root_piece_id[OFFSET(5)]<<16)|(sha_root_piece_id[OFFSET(6)]<<8)|(sha_root_piece_id[OFFSET(7)]) AS sha_root_piece_id_word1,
(sha_root_piece_id[OFFSET(8)]<<56)|(sha_root_piece_id[OFFSET(9)]<<48)|(sha_root_piece_id[OFFSET(10)]<<40)|(sha_root_piece_id[OFFSET(11)]<<32)|(sha_root_piece_id[OFFSET(12)]<<24)|(sha_root_piece_id[OFFSET(13)]<<16)|(sha_root_piece_id[OFFSET(14)]<<8)|(sha_root_piece_id[OFFSET(15)]) AS sha_root_piece_id_word2,
(sha_root_piece_id[OFFSET(16)]<<56)|(sha_root_piece_id[OFFSET(17)]<<48)|(sha_root_piece_id[OFFSET(18)]<<40)|(sha_root_piece_id[OFFSET(19)]<<32) AS sha_root_piece_id_word3,
(sha_encrypted_key_nonce[OFFSET(0)]<<56)|(sha_encrypted_key_nonce[OFFSET(1)]<<48)|(sha_encrypted_key_nonce[OFFSET(2)]<<40)|(sha_encrypted_key_nonce[OFFSET(3)]<<32)|(sha_encrypted_key_nonce[OFFSET(4)]<<24)|(sha_encrypted_key_nonce[OFFSET(5)]<<16)|(sha_encrypted_key_nonce[OFFSET(6)]<<8)|(sha_encrypted_key_nonce[OFFSET(7)]) AS sha_encrypted_key_nonce_word1,
(sha_encrypted_key_nonce[OFFSET(8)]<<56)|(sha_encrypted_key_nonce[OFFSET(9)]<<48)|(sha_encrypted_key_nonce[OFFSET(10)]<<40)|(sha_encrypted_key_nonce[OFFSET(11)]<<32)|(sha_encrypted_key_nonce[OFFSET(12)]<<24)|(sha_encrypted_key_nonce[OFFSET(13)]<<16)|(sha_encrypted_key_nonce[OFFSET(14)]<<8)|(sha_encrypted_key_nonce[OFFSET(15)]) AS sha_encrypted_key_nonce_word2,
(sha_encrypted_key_nonce[OFFSET(16)]<<56)|(sha_encrypted_key_nonce[OFFSET(17)]<<48)|(sha_encrypted_key_nonce[OFFSET(18)]<<40)|(sha_encrypted_key_nonce[OFFSET(19)]<<32) AS sha_encrypted_key_nonce_word3,
(sha_encrypted_key[OFFSET(0)]<<56)|(sha_encrypted_key[OFFSET(1)]<<48)|(sha_encrypted_key[OFFSET(2)]<<40)|(sha_encrypted_key[OFFSET(3)]<<32)|(sha_encrypted_key[OFFSET(4)]<<24)|(sha_encrypted_key[OFFSET(5)]<<16)|(sha_encrypted_key[OFFSET(6)]<<8)|(sha_encrypted_key[OFFSET(7)]) AS sha_encrypted_key_word1,
(sha_encrypted_key[OFFSET(8)]<<56)|(sha_encrypted_key[OFFSET(9)]<<48)|(sha_encrypted_key[OFFSET(10)]<<40)|(sha_encrypted_key[OFFSET(11)]<<32)|(sha_encrypted_key[OFFSET(12)]<<24)|(sha_encrypted_key[OFFSET(13)]<<16)|(sha_encrypted_key[OFFSET(14)]<<8)|(sha_encrypted_key[OFFSET(15)]) AS sha_encrypted_key_word2,
(sha_encrypted_key[OFFSET(16)]<<56)|(sha_encrypted_key[OFFSET(17)]<<48)|(sha_encrypted_key[OFFSET(18)]<<40)|(sha_encrypted_key[OFFSET(19)]<<32) AS sha_encrypted_key_word3,
(sha_encrypted_size[OFFSET(0)]<<56)|(sha_encrypted_size[OFFSET(1)]<<48)|(sha_encrypted_size[OFFSET(2)]<<40)|(sha_encrypted_size[OFFSET(3)]<<32)|(sha_encrypted_size[OFFSET(4)]<<24)|(sha_encrypted_size[OFFSET(5)]<<16)|(sha_encrypted_size[OFFSET(6)]<<8)|(sha_encrypted_size[OFFSET(7)]) AS sha_encrypted_size_word1,
(sha_encrypted_size[OFFSET(8)]<<56)|(sha_encrypted_size[OFFSET(9)]<<48)|(sha_encrypted_size[OFFSET(10)]<<40)|(sha_encrypted_size[OFFSET(11)]<<32)|(sha_encrypted_size[OFFSET(12)]<<24)|(sha_encrypted_size[OFFSET(13)]<<16)|(sha_encrypted_size[OFFSET(14)]<<8)|(sha_encrypted_size[OFFSET(15)]) AS sha_encrypted_size_word2,
(sha_encrypted_size[OFFSET(16)]<<56)|(sha_encrypted_size[OFFSET(17)]<<48)|(sha_encrypted_size[OFFSET(18)]<<40)|(sha_encrypted_size[OFFSET(19)]<<32) AS sha_encrypted_size_word3,
(sha_encrypted_etag[OFFSET(0)]<<56)|(sha_encrypted_etag[OFFSET(1)]<<48)|(sha_encrypted_etag[OFFSET(2)]<<40)|(sha_encrypted_etag[OFFSET(3)]<<32)|(sha_encrypted_etag[OFFSET(4)]<<24)|(sha_encrypted_etag[OFFSET(5)]<<16)|(sha_encrypted_etag[OFFSET(6)]<<8)|(sha_encrypted_etag[OFFSET(7)]) AS sha_encrypted_etag_word1,
(sha_encrypted_etag[OFFSET(8)]<<56)|(sha_encrypted_etag[OFFSET(9)]<<48)|(sha_encrypted_etag[OFFSET(10)]<<40)|(sha_encrypted_etag[OFFSET(11)]<<32)|(sha_encrypted_etag[OFFSET(12)]<<24)|(sha_encrypted_etag[OFFSET(13)]<<16)|(sha_encrypted_etag[OFFSET(14)]<<8)|(sha_encrypted_etag[OFFSET(15)]) AS sha_encrypted_etag_word2,
(sha_encrypted_etag[OFFSET(16)]<<56)|(sha_encrypted_etag[OFFSET(17)]<<48)|(sha_encrypted_etag[OFFSET(18)]<<40)|(sha_encrypted_etag[OFFSET(19)]<<32) AS sha_encrypted_etag_word3,
(sha_plain_offset[OFFSET(0)]<<56)|(sha_plain_offset[OFFSET(1)]<<48)|(sha_plain_offset[OFFSET(2)]<<40)|(sha_plain_offset[OFFSET(3)]<<32)|(sha_plain_offset[OFFSET(4)]<<24)|(sha_plain_offset[OFFSET(5)]<<16)|(sha_plain_offset[OFFSET(6)]<<8)|(sha_plain_offset[OFFSET(7)]) AS sha_plain_offset_word1,
(sha_plain_offset[OFFSET(8)]<<56)|(sha_plain_offset[OFFSET(9)]<<48)|(sha_plain_offset[OFFSET(10)]<<40)|(sha_plain_offset[OFFSET(11)]<<32)|(sha_plain_offset[OFFSET(12)]<<24)|(sha_plain_offset[OFFSET(13)]<<16)|(sha_plain_offset[OFFSET(14)]<<8)|(sha_plain_offset[OFFSET(15)]) AS sha_plain_offset_word2,
(sha_plain_offset[OFFSET(16)]<<56)|(sha_plain_offset[OFFSET(17)]<<48)|(sha_plain_offset[OFFSET(18)]<<40)|(sha_plain_offset[OFFSET(19)]<<32) AS sha_plain_offset_word3,
(sha_plain_size[OFFSET(0)]<<56)|(sha_plain_size[OFFSET(1)]<<48)|(sha_plain_size[OFFSET(2)]<<40)|(sha_plain_size[OFFSET(3)]<<32)|(sha_plain_size[OFFSET(4)]<<24)|(sha_plain_size[OFFSET(5)]<<16)|(sha_plain_size[OFFSET(6)]<<8)|(sha_plain_size[OFFSET(7)]) AS sha_plain_size_word1,
(sha_plain_size[OFFSET(8)]<<56)|(sha_plain_size[OFFSET(9)]<<48)|(sha_plain_size[OFFSET(10)]<<40)|(sha_plain_size[OFFSET(11)]<<32)|(sha_plain_size[OFFSET(12)]<<24)|(sha_plain_size[OFFSET(13)]<<16)|(sha_plain_size[OFFSET(14)]<<8)|(sha_plain_size[OFFSET(15)]) AS sha_plain_size_word2,
(sha_plain_size[OFFSET(16)]<<56)|(sha_plain_size[OFFSET(17)]<<48)|(sha_plain_size[OFFSET(18)]<<40)|(sha_plain_size[OFFSET(19)]<<32) AS sha_plain_size_word3,
(sha_redundancy[OFFSET(0)]<<56)|(sha_redundancy[OFFSET(1)]<<48)|(sha_redundancy[OFFSET(2)]<<40)|(sha_redundancy[OFFSET(3)]<<32)|(sha_redundancy[OFFSET(4)]<<24)|(sha_redundancy[OFFSET(5)]<<16)|(sha_redundancy[OFFSET(6)]<<8)|(sha_redundancy[OFFSET(7)]) AS sha_redundancy_word1,
(sha_redundancy[OFFSET(8)]<<56)|(sha_redundancy[OFFSET(9)]<<48)|(sha_redundancy[OFFSET(10)]<<40)|(sha_redundancy[OFFSET(11)]<<32)|(sha_redundancy[OFFSET(12)]<<24)|(sha_redundancy[OFFSET(13)]<<16)|(sha_redundancy[OFFSET(14)]<<8)|(sha_redundancy[OFFSET(15)]) AS sha_redundancy_word2,
(sha_redundancy[OFFSET(16)]<<56)|(sha_redundancy[OFFSET(17)]<<48)|(sha_redundancy[OFFSET(18)]<<40)|(sha_redundancy[OFFSET(19)]<<32) AS sha_redundancy_word3,
(sha_inline_data[OFFSET(0)]<<56)|(sha_inline_data[OFFSET(1)]<<48)|(sha_inline_data[OFFSET(2)]<<40)|(sha_inline_data[OFFSET(3)]<<32)|(sha_inline_data[OFFSET(4)]<<24)|(sha_inline_data[OFFSET(5)]<<16)|(sha_inline_data[OFFSET(6)]<<8)|(sha_inline_data[OFFSET(7)]) AS sha_inline_data_word1,
(sha_inline_data[OFFSET(8)]<<56)|(sha_inline_data[OFFSET(9)]<<48)|(sha_inline_data[OFFSET(10)]<<40)|(sha_inline_data[OFFSET(11)]<<32)|(sha_inline_data[OFFSET(12)]<<24)|(sha_inline_data[OFFSET(13)]<<16)|(sha_inline_data[OFFSET(14)]<<8)|(sha_inline_data[OFFSET(15)]) AS sha_inline_data_word2,
(sha_inline_data[OFFSET(16)]<<56)|(sha_inline_data[OFFSET(17)]<<48)|(sha_inline_data[OFFSET(18)]<<40)|(sha_inline_data[OFFSET(19)]<<32) AS sha_inline_data_word3,
(sha_remote_alias_pieces[OFFSET(0)]<<56)|(sha_remote_alias_pieces[OFFSET(1)]<<48)|(sha_remote_alias_pieces[OFFSET(2)]<<40)|(sha_remote_alias_pieces[OFFSET(3)]<<32)|(sha_remote_alias_pieces[OFFSET(4)]<<24)|(sha_remote_alias_pieces[OFFSET(5)]<<16)|(sha_remote_alias_pieces[OFFSET(6)]<<8)|(sha_remote_alias_pieces[OFFSET(7)]) AS sha_remote_alias_pieces_word1,
(sha_remote_alias_pieces[OFFSET(8)]<<56)|(sha_remote_alias_pieces[OFFSET(9)]<<48)|(sha_remote_alias_pieces[OFFSET(10)]<<40)|(sha_remote_alias_pieces[OFFSET(11)]<<32)|(sha_remote_alias_pieces[OFFSET(12)]<<24)|(sha_remote_alias_pieces[OFFSET(13)]<<16)|(sha_remote_alias_pieces[OFFSET(14)]<<8)|(sha_remote_alias_pieces[OFFSET(15)]) AS sha_remote_alias_pieces_word2,
(sha_remote_alias_pieces[OFFSET(16)]<<56)|(sha_remote_alias_pieces[OFFSET(17)]<<48)|(sha_remote_alias_pieces[OFFSET(18)]<<40)|(sha_remote_alias_pieces[OFFSET(19)]<<32) AS sha_remote_alias_pieces_word3,
(sha_placement[OFFSET(0)]<<56)|(sha_placement[OFFSET(1)]<<48)|(sha_placement[OFFSET(2)]<<40)|(sha_placement[OFFSET(3)]<<32)|(sha_placement[OFFSET(4)]<<24)|(sha_placement[OFFSET(5)]<<16)|(sha_placement[OFFSET(6)]<<8)|(sha_placement[OFFSET(7)]) AS sha_placement_word1,
(sha_placement[OFFSET(8)]<<56)|(sha_placement[OFFSET(9)]<<48)|(sha_placement[OFFSET(10)]<<40)|(sha_placement[OFFSET(11)]<<32)|(sha_placement[OFFSET(12)]<<24)|(sha_placement[OFFSET(13)]<<16)|(sha_placement[OFFSET(14)]<<8)|(sha_placement[OFFSET(15)]) AS sha_placement_word2,
(sha_placement[OFFSET(16)]<<56)|(sha_placement[OFFSET(17)]<<48)|(sha_placement[OFFSET(18)]<<40)|(sha_placement[OFFSET(19)]<<32) AS sha_placement_word3,
FROM sha_bytes
)
SELECT
bit_xor(sha_stream_id_word1) AS xor_sha_stream_id_word1,
bit_xor(sha_stream_id_word2) AS xor_sha_stream_id_word2,
bit_xor(sha_stream_id_word3) AS xor_sha_stream_id_word3,
bit_xor(sha_position_word1) AS xor_sha_position_word1,
bit_xor(sha_position_word2) AS xor_sha_position_word2,
bit_xor(sha_position_word3) AS xor_sha_position_word3,
bit_xor(sha_created_at_word1) AS xor_sha_created_at_word1,
bit_xor(sha_created_at_word2) AS xor_sha_created_at_word2,
bit_xor(sha_created_at_word3) AS xor_sha_created_at_word3,
bit_xor(sha_repaired_at_word1) AS xor_sha_repaired_at_word1,
bit_xor(sha_repaired_at_word2) AS xor_sha_repaired_at_word2,
bit_xor(sha_repaired_at_word3) AS xor_sha_repaired_at_word3,
bit_xor(sha_expires_at_word1) AS xor_sha_expires_at_word1,
bit_xor(sha_expires_at_word2) AS xor_sha_expires_at_word2,
bit_xor(sha_expires_at_word3) AS xor_sha_expires_at_word3,
bit_xor(sha_root_piece_id_word1) AS xor_sha_root_piece_id_word1,
bit_xor(sha_root_piece_id_word2) AS xor_sha_root_piece_id_word2,
bit_xor(sha_root_piece_id_word3) AS xor_sha_root_piece_id_word3,
bit_xor(sha_encrypted_key_nonce_word1) AS xor_sha_encrypted_key_nonce_word1,
bit_xor(sha_encrypted_key_nonce_word2) AS xor_sha_encrypted_key_nonce_word2,
bit_xor(sha_encrypted_key_nonce_word3) AS xor_sha_encrypted_key_nonce_word3,
bit_xor(sha_encrypted_key_word1) AS xor_sha_encrypted_key_word1,
bit_xor(sha_encrypted_key_word2) AS xor_sha_encrypted_key_word2,
bit_xor(sha_encrypted_key_word3) AS xor_sha_encrypted_key_word3,
bit_xor(sha_encrypted_size_word1) AS xor_sha_encrypted_size_word1,
bit_xor(sha_encrypted_size_word2) AS xor_sha_encrypted_size_word2,
bit_xor(sha_encrypted_size_word3) AS xor_sha_encrypted_size_word3,
bit_xor(sha_encrypted_etag_word1) AS xor_sha_encrypted_etag_word1,
bit_xor(sha_encrypted_etag_word2) AS xor_sha_encrypted_etag_word2,
bit_xor(sha_encrypted_etag_word3) AS xor_sha_encrypted_etag_word3,
bit_xor(sha_plain_offset_word1) AS xor_sha_plain_offset_word1,
bit_xor(sha_plain_offset_word2) AS xor_sha_plain_offset_word2,
bit_xor(sha_plain_offset_word3) AS xor_sha_plain_offset_word3,
bit_xor(sha_plain_size_word1) AS xor_sha_plain_size_word1,
bit_xor(sha_plain_size_word2) AS xor_sha_plain_size_word2,
bit_xor(sha_plain_size_word3) AS xor_sha_plain_size_word3,
bit_xor(sha_redundancy_word1) AS xor_sha_redundancy_word1,
bit_xor(sha_redundancy_word2) AS xor_sha_redundancy_word2,
bit_xor(sha_redundancy_word3) AS xor_sha_redundancy_word3,
bit_xor(sha_inline_data_word1) AS xor_sha_inline_data_word1,
bit_xor(sha_inline_data_word2) AS xor_sha_inline_data_word2,
bit_xor(sha_inline_data_word3) AS xor_sha_inline_data_word3,
bit_xor(sha_remote_alias_pieces_word1) AS xor_sha_remote_alias_pieces_word1,
bit_xor(sha_remote_alias_pieces_word2) AS xor_sha_remote_alias_pieces_word2,
bit_xor(sha_remote_alias_pieces_word3) AS xor_sha_remote_alias_pieces_word3,
bit_xor(sha_placement_word1) AS xor_sha_placement_word1,
bit_xor(sha_placement_word2) AS xor_sha_placement_word2,
bit_xor(sha_placement_word3) AS xor_sha_placement_word3
FROM as_words;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment