diff --git a/simplicity-sys/build.rs b/simplicity-sys/build.rs index 14470d74..7873473d 100644 --- a/simplicity-sys/build.rs +++ b/simplicity-sys/build.rs @@ -7,56 +7,111 @@ fn main() { // rerun if changes to the C code println!("cargo:rerun-if-changed=depend"); let simplicity_path = Path::new("depend/simplicity"); - let jet_files: Vec<_> = vec![ - "frame.c", - "jets.c", - "jets-secp256k1.c", - "rsort.c", - "sha256.c", - "elements/env.c", - "elements/ops.c", - "elements/elementsJets.c", - "elements/txEnv.c", - ] - .into_iter() - .map(|x| simplicity_path.join(x)) - .collect(); - let mut build = cc::Build::new(); - build - .std("c11") - .flag_if_supported("-fno-inline-functions") - .opt_level(2) - .files(jet_files) - .file(Path::new("depend/wrapper.c")) - .file(Path::new("depend/env.c")) - .file(Path::new("depend/jets_wrapper.c")) - .include(simplicity_path.join("include")); + let mut files = vec![]; + // 1. Base files. + files.extend( + [ + "frame.c", + "jets.c", + "jets-secp256k1.c", + "rsort.c", + "sha256.c", + ] + .into_iter() + .map(|x| simplicity_path.join(x)), + ); + // 2. Test files. if cfg!(feature = "test-utils") { - let test_files: Vec<_> = vec![ - "bitstream.c", - "dag.c", - "deserialize.c", - "eval.c", - "type.c", - "typeInference.c", - "elements/exec.c", - "elements/primitive.c", - "ctx8Pruned.c", - "ctx8Unpruned.c", - "hashBlock.c", - "schnorr0.c", - "schnorr6.c", - "elements/checkSigHashAllTx1.c", + files.extend( + [ + "bitstream.c", + "dag.c", + "deserialize.c", + "eval.c", + "type.c", + "typeInference.c", + "ctx8Pruned.c", + "ctx8Unpruned.c", + "hashBlock.c", + "schnorr0.c", + "schnorr6.c", + ] + .into_iter() + .map(|x| simplicity_path.join(x)), + ); + } + + // Common files are compiled once into their own static library; Bitcoin + // and Elements each get their own library with only the chain-specific + // files. Duplicating the common files into both the Bitcoin and Elements + // libraries (as before) builds fine on stable (the linker only pulls the + // archive members it needs), but MSRV (1.74.0) forces `--whole-archive` + // on every native static lib, which pulls every object from both copies + // and fails with "multiple definition of" for every common symbol. + let common_files = files; + + // 3B. Bitcoin base files. + let mut bitcoin_files = vec![]; + bitcoin_files.extend( + [ + "bitcoin/env.c", + "bitcoin/ops.c", + "bitcoin/bitcoinJets.c", + "bitcoin/txEnv.c", + ] + .into_iter() + .map(|x| simplicity_path.join(x)), + ); + bitcoin_files.push("depend/bitcoin_env.c".into()); + + // 3E. Elements base files. + let mut elements_files = vec![]; + elements_files.extend( + [ + "elements/env.c", + "elements/ops.c", + "elements/elementsJets.c", + "elements/txEnv.c", ] .into_iter() - .map(|x| simplicity_path.join(x)) - .collect(); + .map(|x| simplicity_path.join(x)), + ); + elements_files.push("depend/env.c".into()); + + if cfg!(feature = "test-utils") { + // 4B. Bitcoin base files. + bitcoin_files.extend( + [ + "bitcoin/exec.c", + "bitcoin/primitive.c", + // "bitcoin/checkSigHashAllTx1.c", // no sighashall test + ] + .into_iter() + .map(|x| simplicity_path.join(x)), + ); - build.files(test_files); + // 4E. Elements base files. + elements_files.extend( + [ + "elements/exec.c", + "elements/primitive.c", + "elements/checkSigHashAllTx1.c", + ] + .into_iter() + .map(|x| simplicity_path.join(x)), + ); } + // General build + let mut build = cc::Build::new(); + build + .std("c11") + .flag_if_supported("-fno-inline-functions") + .opt_level(2) + .include(simplicity_path.join("include")); + if cfg!(not(fuzzing)) { build.define("PRODUCTION", None); } @@ -66,5 +121,27 @@ fn main() { build.include("wasm-sysroot"); } - build.compile("ElementsSimplicity"); + let mut common_build = build.clone(); + let mut bitcoin_build = build.clone(); + let mut elements_build = build; + + // Common build: files shared between Bitcoin and Elements, including the + // wrapper files. Compiled once into its own static library so neither + // the Bitcoin nor the Elements library contains these object files -- + // see the comment above `common_files` for why that matters. + common_build + .file(Path::new("depend/wrapper.c")) + .file(Path::new("depend/jets_wrapper.c")) + .files(common_files) + .compile("RustSimplicityCommon"); + + // Bitcoin build + bitcoin_build + .files(bitcoin_files) + .compile("BitcoinSimplicity"); + + // Elements build + elements_build + .files(elements_files) + .compile("ElementsSimplicity"); } diff --git a/simplicity-sys/depend/bitcoin_env.c b/simplicity-sys/depend/bitcoin_env.c new file mode 100644 index 00000000..99928e88 --- /dev/null +++ b/simplicity-sys/depend/bitcoin_env.c @@ -0,0 +1,31 @@ +#include +#include +#include "simplicity/bitcoin/env.h" +#include "simplicity/bitcoin/txEnv.h" +#include "simplicity/bitcoin/primitive.h" + +typedef rawBitcoinBuffer rawBuffer; +typedef rawBitcoinBuffer rawBuffer; +typedef rawBitcoinOutput rawOutput; +typedef rawBitcoinInput rawInput; +typedef rawBitcoinTransaction rawTransaction; +typedef rawBitcoinTapEnv rawTapEnv; + +const size_t rustsimplicity_0_8_c_sizeof_rawBitcoinBuffer = sizeof(rawBitcoinBuffer); +const size_t rustsimplicity_0_8_c_sizeof_rawBitcoinOutput = sizeof(rawBitcoinOutput); +const size_t rustsimplicity_0_8_c_sizeof_rawBitcoinInput = sizeof(rawBitcoinInput); +const size_t rustsimplicity_0_8_c_sizeof_rawBitcoinTransaction = sizeof(rawBitcoinTransaction); +const size_t rustsimplicity_0_8_c_sizeof_rawBitcoinTapEnv = sizeof(rawBitcoinTapEnv); +const size_t rustsimplicity_0_8_c_sizeof_bitcoinTxEnv = sizeof(txEnv); + +const size_t rustsimplicity_0_8_c_alignof_rawBitcoinBuffer = alignof(rawBitcoinBuffer); +const size_t rustsimplicity_0_8_c_alignof_rawBitcoinOutput = alignof(rawBitcoinOutput); +const size_t rustsimplicity_0_8_c_alignof_rawBitcoinInput = alignof(rawBitcoinInput); +const size_t rustsimplicity_0_8_c_alignof_rawBitcoinTransaction = alignof(rawBitcoinTransaction); +const size_t rustsimplicity_0_8_c_alignof_rawBitcoinTapEnv = alignof(rawBitcoinTapEnv); +const size_t rustsimplicity_0_8_c_alignof_bitcoinTxEnv = alignof(txEnv); + +void rustsimplicity_0_8_c_bitcoin_set_txEnv(txEnv *result, const bitcoinTransaction *tx, const bitcoinTapEnv *taproot, unsigned int ix) +{ + *result = rustsimplicity_0_8_bitcoin_build_txEnv(tx, taproot, ix); +} diff --git a/simplicity-sys/depend/simplicity/CMakeLists.txt b/simplicity-sys/depend/simplicity/CMakeLists.txt new file mode 100644 index 00000000..f1355bd0 --- /dev/null +++ b/simplicity-sys/depend/simplicity/CMakeLists.txt @@ -0,0 +1,36 @@ +cmake_minimum_required(VERSION 3.16) + +project(BitcoinSimplicity) + +set(CMAKE_C_STANDARD 11) +set(CMAKE_C_EXTENSIONS OFF) + +add_library(BitcoinSimplicity STATIC + bitstream.c + dag.c + deserialize.c + eval.c + frame.c + jets-secp256k1.c + jets.c + rsort.c + sha256.c + type.c + typeInference.c + bitcoin/env.c + bitcoin/exec.c + bitcoin/bitcoinJets.c + bitcoin/ops.c + bitcoin/primitive.c + bitcoin/txEnv.c +) + +option(PRODUCTION "Enable production build" ON) +if (PRODUCTION) + target_compile_definitions(BitcoinSimplicity PRIVATE "PRODUCTION") +endif() + +target_include_directories(BitcoinSimplicity PUBLIC + $ + $ + ) diff --git a/simplicity-sys/depend/simplicity/bitcoin/cmr.c b/simplicity-sys/depend/simplicity/bitcoin/cmr.c new file mode 100644 index 00000000..e230cd93 --- /dev/null +++ b/simplicity-sys/depend/simplicity/bitcoin/cmr.c @@ -0,0 +1,22 @@ +#include + +#include "../cmr.h" +#include "primitive.h" + +/* Deserialize a Simplicity 'program' and compute its CMR. + * + * Caution: no typechecking is performed, only a well-formedness check. + * + * If at any time malloc fails then '*error' is set to 'SIMPLICITY_ERR_MALLOC' and 'false' is returned, + * Otherwise, 'true' is returned indicating that the result was successfully computed and returned in the '*error' value. + * + * If the operation completes successfully then '*error' is set to 'SIMPLICITY_NO_ERROR', and the 'cmr' array is filled in with the program's computed CMR. + * + * Precondition: NULL != error; + * unsigned char cmr[32] + * unsigned char program[program_len] + */ +bool rustsimplicity_0_8_bitcoin_computeCmr( simplicity_err* error, unsigned char* cmr + , const unsigned char* program, size_t program_len) { + return rustsimplicity_0_8_computeCmr(error, cmr, rustsimplicity_0_8_bitcoin_decodeJet, program, program_len); +} diff --git a/simplicity-sys/depend/simplicity/bitcoin/exec.c b/simplicity-sys/depend/simplicity/bitcoin/exec.c new file mode 100644 index 00000000..bbe3f5a3 --- /dev/null +++ b/simplicity-sys/depend/simplicity/bitcoin/exec.c @@ -0,0 +1,136 @@ +#include + +#include +#include +#include "primitive.h" +#include "txEnv.h" +#include "../deserialize.h" +#include "../eval.h" +#include "../limitations.h" +#include "../simplicity_alloc.h" +#include "../simplicity_assert.h" +#include "../typeInference.h" + +/* Deserialize a Simplicity 'program' with its 'witness' data and execute it in the environment of the 'ix'th input of 'tx' with `taproot`. + * + * If at any time malloc fails then '*error' is set to 'SIMPLICITY_ERR_MALLOC' and 'false' is returned, + * meaning we were unable to determine the result of the simplicity program. + * Otherwise, 'true' is returned indicating that the result was successfully computed and returned in the '*error' value. + * + * If deserialization, analysis, or execution fails, then '*error' is set to some simplicity_err. + * In particular, if the cost analysis exceeds the budget, or exceeds BUDGET_MAX, then '*error' is set to 'SIMPLICITY_ERR_EXEC_BUDGET'. + * On the other hand, if the cost analysis is less than or equal to minCost, then '*error' is set to 'SIMPLICITY_ERR_OVERWEIGHT'. + * + * Note that minCost and budget parameters are in WU, while the cost analysis will be performed in milliWU. + * Thus the minCost and budget specify a half open interval (minCost, budget] of acceptable cost values in milliWU. + * Setting minCost to 0 effectively disables the minCost check as every Simplicity program has a non-zero cost analysis. + * + * If 'amr != NULL' and the annotated Merkle root of the decoded expression doesn't match 'amr' then '*error' is set to 'SIMPLICITY_ERR_AMR'. + * + * Otherwise '*error' is set to 'SIMPLICITY_NO_ERROR'. + * + * If 'ihr != NULL' and '*error' is set to 'SIMPLICITY_NO_ERROR', then the identity hash of the root of the decoded expression is written to 'ihr'. + * Otherwise if 'ihr != NULL' and '*error' is not set to 'SIMPLCITY_NO_ERROR', then 'ihr' may or may not be written to. + * + * Precondition: NULL != error; + * NULL != ihr implies unsigned char ihr[32] + * NULL != tx; + * NULL != taproot; + * 0 <= minCost <= budget; + * NULL != amr implies unsigned char amr[32] + * unsigned char program[program_len] + * unsigned char witness[witness_len] + */ +extern bool rustsimplicity_0_8_bitcoin_execSimplicity( simplicity_err* error, unsigned char* ihr + , const bitcoinTransaction* tx, uint_fast32_t ix, const bitcoinTapEnv* taproot + , int64_t minCost, int64_t budget + , const unsigned char* amr + , const unsigned char* program, size_t program_len + , const unsigned char* witness, size_t witness_len) { + rustsimplicity_0_8_assert(NULL != error); + rustsimplicity_0_8_assert(NULL != tx); + rustsimplicity_0_8_assert(NULL != taproot); + rustsimplicity_0_8_assert(0 <= minCost); + rustsimplicity_0_8_assert(minCost <= budget); + rustsimplicity_0_8_assert(NULL != program || 0 == program_len); + rustsimplicity_0_8_assert(NULL != witness || 0 == witness_len); + + combinator_counters census; + dag_node* dag = NULL; + int_fast32_t dag_len; + sha256_midstate amr_hash; + + if (amr) sha256_toMidstate(amr_hash.s, amr); + + { + bitstream stream = initializeBitstream(program, program_len); + dag_len = rustsimplicity_0_8_decodeMallocDag(&dag, rustsimplicity_0_8_bitcoin_decodeJet, &census, &stream); + if (dag_len <= 0) { + rustsimplicity_0_8_assert(dag_len < 0); + *error = (simplicity_err)dag_len; + return IS_PERMANENT(*error); + } + rustsimplicity_0_8_assert(NULL != dag); + rustsimplicity_0_8_assert((uint_fast32_t)dag_len <= DAG_LEN_MAX); + *error = rustsimplicity_0_8_closeBitstream(&stream); + } + + if (IS_OK(*error)) { + if (0 != memcmp(taproot->scriptCMR.s, dag[dag_len-1].cmr.s, sizeof(uint32_t[8]))) { + *error = SIMPLICITY_ERR_CMR; + } + } + + if (IS_OK(*error)) { + type* type_dag = NULL; + *error = rustsimplicity_0_8_mallocTypeInference(&type_dag, rustsimplicity_0_8_bitcoin_mallocBoundVars, dag, (uint_fast32_t)dag_len, &census); + if (IS_OK(*error)) { + rustsimplicity_0_8_assert(NULL != type_dag); + if (0 != dag[dag_len-1].sourceType || 0 != dag[dag_len-1].targetType) { + *error = SIMPLICITY_ERR_TYPE_INFERENCE_NOT_PROGRAM; + } + } + if (IS_OK(*error)) { + bitstream witness_stream = initializeBitstream(witness, witness_len); + *error = rustsimplicity_0_8_fillWitnessData(dag, type_dag, (uint_fast32_t)dag_len, &witness_stream); + if (IS_OK(*error)) { + *error = rustsimplicity_0_8_closeBitstream(&witness_stream); + if (SIMPLICITY_ERR_BITSTREAM_TRAILING_BYTES == *error) *error = SIMPLICITY_ERR_WITNESS_TRAILING_BYTES; + if (SIMPLICITY_ERR_BITSTREAM_ILLEGAL_PADDING == *error) *error = SIMPLICITY_ERR_WITNESS_ILLEGAL_PADDING; + } + } + if (IS_OK(*error)) { + sha256_midstate ihr_buf; + *error = rustsimplicity_0_8_verifyNoDuplicateIdentityHashes(&ihr_buf, dag, type_dag, (uint_fast32_t)dag_len); + if (IS_OK(*error) && ihr) sha256_fromMidstate(ihr, ihr_buf.s); + } + if (IS_OK(*error) && amr) { + static_assert(DAG_LEN_MAX <= SIZE_MAX / sizeof(analyses), "analysis array too large."); + static_assert(1 <= DAG_LEN_MAX, "DAG_LEN_MAX is zero."); + static_assert(DAG_LEN_MAX - 1 <= UINT32_MAX, "analysis array index does nto fit in uint32_t."); + analyses *analysis = rustsimplicity_0_8_malloc((size_t)dag_len * sizeof(analyses)); + if (analysis) { + rustsimplicity_0_8_computeAnnotatedMerkleRoot(analysis, dag, type_dag, (uint_fast32_t)dag_len); + if (0 != memcmp(amr_hash.s, analysis[dag_len-1].annotatedMerkleRoot.s, sizeof(uint32_t[8]))) { + *error = SIMPLICITY_ERR_AMR; + } + } else { + /* malloc failed which counts as a transient error. */ + *error = SIMPLICITY_ERR_MALLOC; + } + rustsimplicity_0_8_free(analysis); + } + if (IS_OK(*error)) { + txEnv env = rustsimplicity_0_8_bitcoin_build_txEnv(tx, taproot, ix); + static_assert(BUDGET_MAX <= UBOUNDED_MAX, "BUDGET_MAX doesn't fit in ubounded."); + *error = evalTCOProgram( dag, type_dag, (size_t)dag_len + , minCost <= BUDGET_MAX ? (ubounded)minCost : BUDGET_MAX + , &(ubounded){budget <= BUDGET_MAX ? (ubounded)budget : BUDGET_MAX} + , &env); + } + rustsimplicity_0_8_free(type_dag); + } + + rustsimplicity_0_8_free(dag); + return IS_PERMANENT(*error); +} diff --git a/simplicity-sys/depend/simplicity/cmr.c b/simplicity-sys/depend/simplicity/cmr.c new file mode 100644 index 00000000..eb7c2a39 --- /dev/null +++ b/simplicity-sys/depend/simplicity/cmr.c @@ -0,0 +1,41 @@ +#include "cmr.h" + +#include "limitations.h" +#include "simplicity_alloc.h" +#include "simplicity_assert.h" + +/* Deserialize a Simplicity 'program' and compute its CMR. + * + * Caution: no typechecking is performed, only a well-formedness check. + * + * If at any time malloc fails then '*error' is set to 'SIMPLICITY_ERR_MALLOC' and 'false' is returned, + * Otherwise, 'true' is returned indicating that the result was successfully computed and returned in the '*error' value. + * + * If the operation completes successfully then '*error' is set to 'SIMPLICITY_NO_ERROR', and the 'cmr' array is filled in with the program's computed CMR. + * + * Precondition: NULL != error; + * unsigned char cmr[32] + * unsigned char program[program_len] + */ +bool rustsimplicity_0_6_computeCmr( simplicity_err* error, unsigned char* cmr, rustsimplicity_0_6_callback_decodeJet decodeJet + , const unsigned char* program, size_t program_len) { + rustsimplicity_0_6_assert(NULL != error); + rustsimplicity_0_6_assert(NULL != cmr); + rustsimplicity_0_6_assert(NULL != program || 0 == program_len); + + bitstream stream = initializeBitstream(program, program_len); + dag_node* dag = NULL; + int_fast32_t dag_len = rustsimplicity_0_6_decodeMallocDag(&dag, decodeJet, NULL, &stream); + if (dag_len <= 0) { + rustsimplicity_0_6_assert(dag_len < 0); + *error = (simplicity_err)dag_len; + } else { + rustsimplicity_0_6_assert(NULL != dag); + rustsimplicity_0_6_assert((uint_fast32_t)dag_len <= DAG_LEN_MAX); + *error = rustsimplicity_0_6_closeBitstream(&stream); + sha256_fromMidstate(cmr, dag[dag_len-1].cmr.s); + } + + rustsimplicity_0_6_free(dag); + return IS_PERMANENT(*error); +} diff --git a/simplicity-sys/depend/simplicity/cmr.h b/simplicity-sys/depend/simplicity/cmr.h new file mode 100644 index 00000000..8e7762f6 --- /dev/null +++ b/simplicity-sys/depend/simplicity/cmr.h @@ -0,0 +1,24 @@ +#ifndef SIMPLICITY_CMR_H +#define SIMPLICITY_CMR_H + +#include +#include +#include +#include "deserialize.h" + +/* Deserialize a Simplicity 'program' and compute its CMR. + * + * Caution: no typechecking is performed, only a well-formedness check. + * + * If at any time malloc fails then '*error' is set to 'SIMPLICITY_ERR_MALLOC' and 'false' is returned, + * Otherwise, 'true' is returned indicating that the result was successfully computed and returned in the '*error' value. + * + * If the operation completes successfully then '*error' is set to 'SIMPLICITY_NO_ERROR', and the 'cmr' array is filled in with the program's computed CMR. + * + * Precondition: NULL != error; + * unsigned char cmr[32] + * unsigned char program[program_len] + */ +extern bool rustsimplicity_0_6_computeCmr( simplicity_err* error, unsigned char* cmr, rustsimplicity_0_6_callback_decodeJet decodeJet + , const unsigned char* program, size_t program_len); +#endif diff --git a/simplicity-sys/depend/simplicity/include/simplicity/bitcoin/cmr.h b/simplicity-sys/depend/simplicity/include/simplicity/bitcoin/cmr.h new file mode 100644 index 00000000..4611f7b4 --- /dev/null +++ b/simplicity-sys/depend/simplicity/include/simplicity/bitcoin/cmr.h @@ -0,0 +1,23 @@ +#ifndef SIMPLICITY_BITCOIN_CMR_H +#define SIMPLICITY_BITCOIN_CMR_H + +#include +#include +#include + +/* Deserialize a Simplicity 'program' and compute its CMR. + * + * Caution: no typechecking is performed, only a well-formedness check. + * + * If at any time malloc fails then '*error' is set to 'SIMPLICITY_ERR_MALLOC' and 'false' is returned, + * Otherwise, 'true' is returned indicating that the result was successfully computed and returned in the '*error' value. + * + * If the operation completes successfully then '*error' is set to 'SIMPLICITY_NO_ERROR', and the 'cmr' array is filled in with the program's computed CMR. + * + * Precondition: NULL != error; + * unsigned char cmr[32] + * unsigned char program[program_len] + */ +extern bool rustsimplicity_0_6_bitcoin_computeCmr( simplicity_err* error, unsigned char* cmr + , const unsigned char* program, size_t program_len); +#endif diff --git a/simplicity-sys/depend/simplicity/include/simplicity/bitcoin/exec.h b/simplicity-sys/depend/simplicity/include/simplicity/bitcoin/exec.h new file mode 100644 index 00000000..74fd3b1c --- /dev/null +++ b/simplicity-sys/depend/simplicity/include/simplicity/bitcoin/exec.h @@ -0,0 +1,41 @@ +#ifndef SIMPLICITY_BITCOIN_EXEC_H +#define SIMPLICITY_BITCOIN_EXEC_H + +#include +#include +#include +#include +#include + +/* Deserialize a Simplicity 'program' with its 'witness' data and execute it in the environment of the 'ix'th input of 'tx' with `taproot`. + * + * If at any time malloc fails then '*error' is set to 'SIMPLICITY_ERR_MALLOC' and 'false' is returned, + * meaning we were unable to determine the result of the simplicity program. + * Otherwise, 'true' is returned indicating that the result was successfully computed and returned in the '*error' value. + * + * If deserialization, analysis, or execution fails, then '*error' is set to some simplicity_err. + * + * If 'amr != NULL' and the annotated Merkle root of the decoded expression doesn't match 'amr' then '*error' is set to 'SIMPLICITY_ERR_AMR'. + * + * Otherwise '*error' is set to 'SIMPLICITY_NO_ERROR'. + * + * If 'ihr != NULL' and '*error' is set to 'SIMPLICITY_NO_ERROR', then the identity hash of the root of the decoded expression is written to 'ihr'. + * Otherwise if 'ihr != NULL' and '*error' is not set to 'SIMPLCITY_NO_ERROR', then 'ihr' may or may not be written to. + * + * Precondition: NULL != error; + * NULL != ihr implies unsigned char ihr[32] + * NULL != tx; + * NULL != taproot; + * 0 <= budget; + * 0 <= minCost <= budget; + * NULL != amr implies unsigned char amr[32] + * unsigned char program[program_len] + * unsigned char witness[witness_len] + */ +extern bool rustsimplicity_0_6_bitcoin_execSimplicity( simplicity_err* error, unsigned char* ihr + , const bitcoinTransaction* tx, uint_fast32_t ix, const bitcoinTapEnv* taproot + , int64_t minCost, int64_t budget + , const unsigned char* amr + , const unsigned char* program, size_t program_len + , const unsigned char* witness, size_t witness_len); +#endif diff --git a/simplicity-sys/src/c_jets/c_env/bitcoin.rs b/simplicity-sys/src/c_jets/c_env/bitcoin.rs new file mode 100644 index 00000000..52a216d9 --- /dev/null +++ b/simplicity-sys/src/c_jets/c_env/bitcoin.rs @@ -0,0 +1,520 @@ +// SPDX-License-Identifier: CC0-1.0 + +use hashes::sha256; + +use crate::c_jets::frame_ffi::CFrameItem; +use crate::ffi::sha256::CSha256Midstate; +use crate::ffi::{c_size_t, c_uchar, c_uint, c_uint_fast32_t}; + +#[derive(Debug)] +#[repr(C)] +pub struct CRawBuffer { + pub ptr: *const c_uchar, + pub len: u32, +} + +#[derive(Debug)] +#[repr(C)] +pub struct CRawOutput { + pub value: u64, + pub script_pubkey: CRawBuffer, +} + +#[repr(C)] +pub struct CRawInput<'raw> { + pub annex: *const CRawBuffer, + pub prev_txid: &'raw [c_uchar; 32], + pub txo: CRawOutput, + pub script_sig: CRawBuffer, + pub prev_txout_index: u32, + pub sequence: u32, +} + +#[derive(Debug)] +#[repr(C)] +pub struct CRawTransaction<'raw> { + pub txid: &'raw [c_uchar; 32], + pub inputs: *const CRawInput<'raw>, + pub outputs: *const CRawOutput, + pub n_inputs: u32, + pub n_outputs: u32, + pub version: u32, + pub locktime: u32, +} + +#[derive(Debug)] +#[repr(C)] +pub struct CRawTapEnv { + pub control_block: *const c_uchar, + pub script_cmr: *const c_uchar, + pub branch_len: u8, +} + +#[repr(C)] +pub struct CTransaction { + _data: (), +} + +#[derive(Debug)] +#[repr(C)] +pub struct CTxEnv { + tx: *const CTransaction, + taproot: *const CTapEnv, + sighash_all: CSha256Midstate, + ix: c_uint_fast32_t, +} + +#[repr(C)] +pub struct CTapEnv { + _data: (), +} + +// Will uncomment in a later commit; need to update libsimplicity first so these +// symbols have something to link against. +extern "C" { + #[link_name = "rustsimplicity_0_8_c_sizeof_rawBitcoinBuffer"] + pub static c_sizeof_rawBuffer: c_size_t; + #[link_name = "rustsimplicity_0_8_c_sizeof_rawBitcoinOutput"] + pub static c_sizeof_rawOutput: c_size_t; + #[link_name = "rustsimplicity_0_8_c_sizeof_rawBitcoinInput"] + pub static c_sizeof_rawInput: c_size_t; + #[link_name = "rustsimplicity_0_8_c_sizeof_rawBitcoinTransaction"] + pub static c_sizeof_rawTransaction: c_size_t; + #[link_name = "rustsimplicity_0_8_c_sizeof_rawBitcoinTapEnv"] + pub static c_sizeof_rawTapEnv: c_size_t; + #[link_name = "rustsimplicity_0_8_c_sizeof_bitcoinTxEnv"] + pub static c_sizeof_txEnv: c_size_t; + + #[link_name = "rustsimplicity_0_8_c_alignof_rawBitcoinBuffer"] + pub static c_alignof_rawBuffer: c_size_t; + #[link_name = "rustsimplicity_0_8_c_alignof_rawBitcoinOutput"] + pub static c_alignof_rawOutput: c_size_t; + #[link_name = "rustsimplicity_0_8_c_alignof_rawBitcoinInput"] + pub static c_alignof_rawInput: c_size_t; + #[link_name = "rustsimplicity_0_8_c_alignof_rawBitcoinTransaction"] + pub static c_alignof_rawTransaction: c_size_t; + #[link_name = "rustsimplicity_0_8_c_alignof_rawBitcoinTapEnv"] + pub static c_alignof_rawTapEnv: c_size_t; + #[link_name = "rustsimplicity_0_8_c_alignof_bitcoinTxEnv"] + pub static c_alignof_txEnv: c_size_t; + + #[link_name = "rustsimplicity_0_8_c_bitcoin_set_txEnv"] + pub fn c_set_txEnv( + result: *mut CTxEnv, + tx: *const CTransaction, + taproot: *const CTapEnv, + ix: c_uint, + ); + #[link_name = "rustsimplicity_0_8_bitcoin_mallocTapEnv"] + pub fn simplicity_mallocTapEnv(rawEnv: *const CRawTapEnv) -> *mut CTapEnv; + #[link_name = "rustsimplicity_0_8_bitcoin_mallocTransaction"] + pub fn simplicity_mallocTransaction(rawTx: *const CRawTransaction) -> *mut CTransaction; + + // Bitcoin jets whose C implementations read the transaction environment. + // Each has signature `bool f(frameItem* dst, frameItem src, const txEnv* env)` + // (note `src` is passed *by value*, matching the C definitions in bitcoinJets.c). + #[link_name = "rustsimplicity_0_8_bitcoin_sig_all_hash"] + pub fn bitcoin_sig_all_hash(dst: *mut CFrameItem, src: CFrameItem, env: *const CTxEnv) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_check_lock_height"] + pub fn bitcoin_check_lock_height( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_check_lock_distance"] + pub fn bitcoin_check_lock_distance( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_check_lock_duration"] + pub fn bitcoin_check_lock_duration( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_current_index"] + pub fn bitcoin_current_index(dst: *mut CFrameItem, src: CFrameItem, env: *const CTxEnv) + -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_num_inputs"] + pub fn bitcoin_num_inputs(dst: *mut CFrameItem, src: CFrameItem, env: *const CTxEnv) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_tx_hash"] + pub fn bitcoin_tx_hash(dst: *mut CFrameItem, src: CFrameItem, env: *const CTxEnv) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_tap_env_hash"] + pub fn bitcoin_tap_env_hash(dst: *mut CFrameItem, src: CFrameItem, env: *const CTxEnv) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_annex_hash"] + pub fn bitcoin_annex_hash(dst: *mut CFrameItem, src: CFrameItem, env: *const CTxEnv) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_build_tapbranch"] + pub fn bitcoin_build_tapbranch( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_build_tapleaf_simplicity"] + pub fn bitcoin_build_tapleaf_simplicity( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_build_taptweak"] + pub fn bitcoin_build_taptweak( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_check_lock_time"] + pub fn bitcoin_check_lock_time( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_current_annex_hash"] + pub fn bitcoin_current_annex_hash( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_current_prev_outpoint"] + pub fn bitcoin_current_prev_outpoint( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_current_script_hash"] + pub fn bitcoin_current_script_hash( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_current_script_sig_hash"] + pub fn bitcoin_current_script_sig_hash( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_current_sequence"] + pub fn bitcoin_current_sequence( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_current_value"] + pub fn bitcoin_current_value(dst: *mut CFrameItem, src: CFrameItem, env: *const CTxEnv) + -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_fee"] + pub fn bitcoin_fee(dst: *mut CFrameItem, src: CFrameItem, env: *const CTxEnv) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_input_annex_hash"] + pub fn bitcoin_input_annex_hash( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_input_annexes_hash"] + pub fn bitcoin_input_annexes_hash( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_input_hash"] + pub fn bitcoin_input_hash(dst: *mut CFrameItem, src: CFrameItem, env: *const CTxEnv) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_input_outpoints_hash"] + pub fn bitcoin_input_outpoints_hash( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_input_prev_outpoint"] + pub fn bitcoin_input_prev_outpoint( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_input_script_hash"] + pub fn bitcoin_input_script_hash( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_input_script_sig_hash"] + pub fn bitcoin_input_script_sig_hash( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_input_script_sigs_hash"] + pub fn bitcoin_input_script_sigs_hash( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_input_scripts_hash"] + pub fn bitcoin_input_scripts_hash( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_input_sequence"] + pub fn bitcoin_input_sequence( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_input_sequences_hash"] + pub fn bitcoin_input_sequences_hash( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_input_utxo_hash"] + pub fn bitcoin_input_utxo_hash( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_input_utxos_hash"] + pub fn bitcoin_input_utxos_hash( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_input_value"] + pub fn bitcoin_input_value(dst: *mut CFrameItem, src: CFrameItem, env: *const CTxEnv) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_input_values_hash"] + pub fn bitcoin_input_values_hash( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_inputs_hash"] + pub fn bitcoin_inputs_hash(dst: *mut CFrameItem, src: CFrameItem, env: *const CTxEnv) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_internal_key"] + pub fn bitcoin_internal_key(dst: *mut CFrameItem, src: CFrameItem, env: *const CTxEnv) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_lock_time"] + pub fn bitcoin_lock_time(dst: *mut CFrameItem, src: CFrameItem, env: *const CTxEnv) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_num_outputs"] + pub fn bitcoin_num_outputs(dst: *mut CFrameItem, src: CFrameItem, env: *const CTxEnv) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_outpoint_hash"] + pub fn bitcoin_outpoint_hash(dst: *mut CFrameItem, src: CFrameItem, env: *const CTxEnv) + -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_output_hash"] + pub fn bitcoin_output_hash(dst: *mut CFrameItem, src: CFrameItem, env: *const CTxEnv) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_output_script_hash"] + pub fn bitcoin_output_script_hash( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_output_scripts_hash"] + pub fn bitcoin_output_scripts_hash( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_output_value"] + pub fn bitcoin_output_value(dst: *mut CFrameItem, src: CFrameItem, env: *const CTxEnv) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_output_values_hash"] + pub fn bitcoin_output_values_hash( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_outputs_hash"] + pub fn bitcoin_outputs_hash(dst: *mut CFrameItem, src: CFrameItem, env: *const CTxEnv) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_script_cmr"] + pub fn bitcoin_script_cmr(dst: *mut CFrameItem, src: CFrameItem, env: *const CTxEnv) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_tapleaf_hash"] + pub fn bitcoin_tapleaf_hash(dst: *mut CFrameItem, src: CFrameItem, env: *const CTxEnv) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_tapleaf_version"] + pub fn bitcoin_tapleaf_version( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_tappath"] + pub fn bitcoin_tappath(dst: *mut CFrameItem, src: CFrameItem, env: *const CTxEnv) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_tappath_hash"] + pub fn bitcoin_tappath_hash(dst: *mut CFrameItem, src: CFrameItem, env: *const CTxEnv) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_total_input_value"] + pub fn bitcoin_total_input_value( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_total_output_value"] + pub fn bitcoin_total_output_value( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_transaction_id"] + pub fn bitcoin_transaction_id( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_tx_is_final"] + pub fn bitcoin_tx_is_final(dst: *mut CFrameItem, src: CFrameItem, env: *const CTxEnv) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_tx_lock_distance"] + pub fn bitcoin_tx_lock_distance( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_tx_lock_duration"] + pub fn bitcoin_tx_lock_duration( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_tx_lock_height"] + pub fn bitcoin_tx_lock_height( + dst: *mut CFrameItem, + src: CFrameItem, + env: *const CTxEnv, + ) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_tx_lock_time"] + pub fn bitcoin_tx_lock_time(dst: *mut CFrameItem, src: CFrameItem, env: *const CTxEnv) -> bool; + #[link_name = "rustsimplicity_0_8_bitcoin_version"] + pub fn bitcoin_version(dst: *mut CFrameItem, src: CFrameItem, env: *const CTxEnv) -> bool; +} + +impl CTxEnv { + pub fn sighash_all(&self) -> sha256::Hash { + let midstate: sha256::Midstate = self.sighash_all.into(); + sha256::Hash::from_byte_array(midstate.to_parts().0) + } +} + +// Pointer must be manually free after dropping +impl Drop for CTxEnv { + fn drop(&mut self) { + unsafe { + crate::alloc::rust_0_8_free(self.tx as *mut u8); + crate::alloc::rust_0_8_free(self.taproot as *mut u8); + } + } +} + +impl CRawBuffer { + pub fn new(buf: &[c_uchar]) -> Self { + Self { + ptr: buf.as_ptr(), + len: buf.len().try_into().expect("sane buffer lengths"), + } + } +} + +// Safe wrappers around the bitcoin environment jets above. These expose a +// Rust-safe signature (`&mut CFrameItem`, `&CTxEnv`) that can be used directly +// as a `JetEnvironment::c_jet_ptr` function pointer, mirroring how the +// elements backend exposes its jets via the `jets_wrapper` module. We cannot +// hand out the raw `extern "C"` functions as fn pointers because `c_jet_ptr` +// returns a safe (non-extern) function pointer. +macro_rules! bitcoin_env_jet_wrapper { + ($name:ident, $ffi:ident) => { + pub fn $name(dst: &mut CFrameItem, src: CFrameItem, env: &CTxEnv) -> bool { + // SAFETY: we pass valid references through as pointers to a C + // function that treats them as borrowed (`frameItem* dst`, + // `const txEnv* env`) and `src` is forwarded by value exactly as + // the C `frameItem src` parameter expects. + unsafe { $ffi(dst, src, env) } + } + }; +} + +bitcoin_env_jet_wrapper!(sig_all_hash, bitcoin_sig_all_hash); +bitcoin_env_jet_wrapper!(check_lock_height, bitcoin_check_lock_height); +bitcoin_env_jet_wrapper!(check_lock_distance, bitcoin_check_lock_distance); +bitcoin_env_jet_wrapper!(check_lock_duration, bitcoin_check_lock_duration); +bitcoin_env_jet_wrapper!(current_index, bitcoin_current_index); +bitcoin_env_jet_wrapper!(num_inputs, bitcoin_num_inputs); +bitcoin_env_jet_wrapper!(tx_hash, bitcoin_tx_hash); +bitcoin_env_jet_wrapper!(tap_env_hash, bitcoin_tap_env_hash); +bitcoin_env_jet_wrapper!(annex_hash, bitcoin_annex_hash); +bitcoin_env_jet_wrapper!(build_tapbranch, bitcoin_build_tapbranch); +bitcoin_env_jet_wrapper!(build_tapleaf_simplicity, bitcoin_build_tapleaf_simplicity); +bitcoin_env_jet_wrapper!(build_taptweak, bitcoin_build_taptweak); +bitcoin_env_jet_wrapper!(check_lock_time, bitcoin_check_lock_time); +bitcoin_env_jet_wrapper!(current_annex_hash, bitcoin_current_annex_hash); +bitcoin_env_jet_wrapper!(current_prev_outpoint, bitcoin_current_prev_outpoint); +bitcoin_env_jet_wrapper!(current_script_hash, bitcoin_current_script_hash); +bitcoin_env_jet_wrapper!(current_script_sig_hash, bitcoin_current_script_sig_hash); +bitcoin_env_jet_wrapper!(current_sequence, bitcoin_current_sequence); +bitcoin_env_jet_wrapper!(current_value, bitcoin_current_value); +bitcoin_env_jet_wrapper!(fee, bitcoin_fee); +bitcoin_env_jet_wrapper!(input_annex_hash, bitcoin_input_annex_hash); +bitcoin_env_jet_wrapper!(input_annexes_hash, bitcoin_input_annexes_hash); +bitcoin_env_jet_wrapper!(input_hash, bitcoin_input_hash); +bitcoin_env_jet_wrapper!(input_outpoints_hash, bitcoin_input_outpoints_hash); +bitcoin_env_jet_wrapper!(input_prev_outpoint, bitcoin_input_prev_outpoint); +bitcoin_env_jet_wrapper!(input_script_hash, bitcoin_input_script_hash); +bitcoin_env_jet_wrapper!(input_script_sig_hash, bitcoin_input_script_sig_hash); +bitcoin_env_jet_wrapper!(input_script_sigs_hash, bitcoin_input_script_sigs_hash); +bitcoin_env_jet_wrapper!(input_scripts_hash, bitcoin_input_scripts_hash); +bitcoin_env_jet_wrapper!(input_sequence, bitcoin_input_sequence); +bitcoin_env_jet_wrapper!(input_sequences_hash, bitcoin_input_sequences_hash); +bitcoin_env_jet_wrapper!(input_utxo_hash, bitcoin_input_utxo_hash); +bitcoin_env_jet_wrapper!(input_utxos_hash, bitcoin_input_utxos_hash); +bitcoin_env_jet_wrapper!(input_value, bitcoin_input_value); +bitcoin_env_jet_wrapper!(input_values_hash, bitcoin_input_values_hash); +bitcoin_env_jet_wrapper!(inputs_hash, bitcoin_inputs_hash); +bitcoin_env_jet_wrapper!(internal_key, bitcoin_internal_key); +bitcoin_env_jet_wrapper!(lock_time, bitcoin_lock_time); +bitcoin_env_jet_wrapper!(num_outputs, bitcoin_num_outputs); +bitcoin_env_jet_wrapper!(outpoint_hash, bitcoin_outpoint_hash); +bitcoin_env_jet_wrapper!(output_hash, bitcoin_output_hash); +bitcoin_env_jet_wrapper!(output_script_hash, bitcoin_output_script_hash); +bitcoin_env_jet_wrapper!(output_scripts_hash, bitcoin_output_scripts_hash); +bitcoin_env_jet_wrapper!(output_value, bitcoin_output_value); +bitcoin_env_jet_wrapper!(output_values_hash, bitcoin_output_values_hash); +bitcoin_env_jet_wrapper!(outputs_hash, bitcoin_outputs_hash); +bitcoin_env_jet_wrapper!(script_cmr, bitcoin_script_cmr); +bitcoin_env_jet_wrapper!(tapleaf_hash, bitcoin_tapleaf_hash); +bitcoin_env_jet_wrapper!(tapleaf_version, bitcoin_tapleaf_version); +bitcoin_env_jet_wrapper!(tappath, bitcoin_tappath); +bitcoin_env_jet_wrapper!(tappath_hash, bitcoin_tappath_hash); +bitcoin_env_jet_wrapper!(total_input_value, bitcoin_total_input_value); +bitcoin_env_jet_wrapper!(total_output_value, bitcoin_total_output_value); +bitcoin_env_jet_wrapper!(transaction_id, bitcoin_transaction_id); +bitcoin_env_jet_wrapper!(tx_is_final, bitcoin_tx_is_final); +bitcoin_env_jet_wrapper!(tx_lock_distance, bitcoin_tx_lock_distance); +bitcoin_env_jet_wrapper!(tx_lock_duration, bitcoin_tx_lock_duration); +bitcoin_env_jet_wrapper!(tx_lock_height, bitcoin_tx_lock_height); +bitcoin_env_jet_wrapper!(tx_lock_time, bitcoin_tx_lock_time); +bitcoin_env_jet_wrapper!(version, bitcoin_version); + +// Will uncomment in a later commit; need to update libsimplicity first. +#[cfg(test)] +mod tests { + use core::mem::{align_of, size_of}; + + use crate::c_jets::frame_ffi::{c_alignof_frameItem, c_sizeof_frameItem, CFrameItem}; + + use super::*; + + #[test] + fn test_sizes() { + unsafe { + assert_eq!(size_of::(), c_sizeof_frameItem); + assert_eq!(size_of::(), c_sizeof_rawBuffer); + assert_eq!(size_of::(), c_sizeof_rawInput); + assert_eq!(size_of::(), c_sizeof_rawOutput); + assert_eq!(size_of::(), c_sizeof_rawTransaction); + assert_eq!(size_of::(), c_sizeof_rawTapEnv); + assert_eq!(size_of::(), c_sizeof_txEnv); + } + } + + #[test] + fn test_aligns() { + unsafe { + assert_eq!(align_of::(), c_alignof_frameItem); + assert_eq!(align_of::(), c_alignof_rawBuffer); + assert_eq!(align_of::(), c_alignof_rawInput); + assert_eq!(align_of::(), c_alignof_rawOutput); + assert_eq!(align_of::(), c_alignof_rawTransaction); + assert_eq!(align_of::(), c_alignof_rawTapEnv); + assert_eq!(align_of::(), c_alignof_txEnv); + } + } +} diff --git a/simplicity-sys/src/c_jets/c_env/mod.rs b/simplicity-sys/src/c_jets/c_env/mod.rs index fcca587c..6136d485 100644 --- a/simplicity-sys/src/c_jets/c_env/mod.rs +++ b/simplicity-sys/src/c_jets/c_env/mod.rs @@ -1,3 +1,4 @@ // SPDX-License-Identifier: CC0-1.0 +pub mod bitcoin; pub mod elements; diff --git a/simplicity-sys/src/c_jets/mod.rs b/simplicity-sys/src/c_jets/mod.rs index ae2fc852..a163cf57 100644 --- a/simplicity-sys/src/c_jets/mod.rs +++ b/simplicity-sys/src/c_jets/mod.rs @@ -12,7 +12,7 @@ pub mod frame_ffi; #[rustfmt::skip] pub mod jets_ffi; #[rustfmt::skip] pub mod jets_wrapper; -pub use c_env::elements; +pub use c_env::{bitcoin, elements}; pub use c_frame::{byte_width, uword_width}; pub use frame_ffi::CFrameItem; diff --git a/simplicity-sys/src/lib.rs b/simplicity-sys/src/lib.rs index f032d902..b35f3541 100644 --- a/simplicity-sys/src/lib.rs +++ b/simplicity-sys/src/lib.rs @@ -1,6 +1,7 @@ // SPDX-License-Identifier: CC0-1.0 pub mod c_jets; +pub use c_jets::bitcoin; pub use c_jets::elements; pub use c_jets::CFrameItem; diff --git a/src/analysis.rs b/src/analysis.rs index fe5fed84..c286bcc2 100644 --- a/src/analysis.rs +++ b/src/analysis.rs @@ -4,12 +4,8 @@ use crate::jet::Jet; use std::{cmp, fmt}; use crate::value::Word; -#[cfg(feature = "elements")] -use elements::encode::Encodable; #[cfg(feature = "serde")] use serde::Serialize; -#[cfg(feature = "elements")] -use std::{convert::TryFrom, io}; /// Copy of [`bitcoin::Weight`] that uses [`u32`] instead of [`u64`]. /// @@ -115,78 +111,159 @@ impl Cost { self <= Self::CONSENSUS_MAX } - /// Return the budget of the given script witness of a transaction output. + /// Return the budget of the given script witness of a transaction input. /// - /// The script witness is passed as `&Vec>` in order to use - /// the consensus encoding implemented for this type. - #[cfg(feature = "elements")] - fn get_budget(script_witness: &Vec>) -> U32Weight { - let mut sink = io::sink(); - let witness_stack_serialized_len = script_witness - .consensus_encode(&mut sink) - .expect("writing to sink never fails"); - let budget = u32::try_from(witness_stack_serialized_len) - .expect("Serialized witness stack must be shorter than 2^32 elements") - .saturating_add(50); + /// The budget is the serialized size of the witness stack (in weight + /// units) plus the 50 free weight units of validation weight. + /// + /// The witness stack is passed as `&[Vec]`, where each inner `Vec` + /// is one stack item. Both Bitcoin and Elements serialize the witness stack + /// identically: a CompactSize item count, followed by each item as a + /// CompactSize length prefix and its bytes. The math is therefore + /// chain-agnostic, and this method is available under the `bitcoin` feature + /// (which `elements` implies) so it can be shared by both. + #[cfg(feature = "bitcoin")] + fn get_budget(script_witness: &[Vec]) -> U32Weight { + // Serialized witness stack size, in bytes. + let mut serialized_len = compact_size_len(script_witness.len()); + for item in script_witness { + serialized_len += compact_size_len(item.len()) + item.len(); + } + let budget = serialized_len.saturating_add(50); + let budget = + u32::try_from(budget).expect("Serialized witness stack must be shorter than 2^32"); U32Weight(budget) } /// Return whether the cost is within the budget of /// the given script witness of a transaction input. /// - /// The script witness is passed as `&Vec>` in order to use - /// the consensus encoding implemented for this type. - #[cfg(feature = "elements")] - pub fn is_budget_valid(self, script_witness: &Vec>) -> bool { + /// The script witness is passed as `&[Vec]`, where each inner `Vec` + /// is one witness stack item. + #[cfg(feature = "bitcoin")] + pub fn is_budget_valid(self, script_witness: &[Vec]) -> bool { let budget = Self::get_budget(script_witness); self.0 <= budget.0.saturating_mul(1000) } - /// Return the annex bytes that are required as padding + /// Return the length, in bytes, of the padding witness stack item required /// so the transaction input has enough budget to cover the cost. /// - /// The first annex byte is 0x50, as defined in BIP 341. - /// The following padding bytes are 0x00. - #[cfg(feature = "elements")] - pub fn get_padding(self, script_witness: &Vec>) -> Option> { + /// The returned length is chain-agnostic: adding a stack item of length `L` + /// increases the serialized witness-stack budget by `CompactSize(L) + L`, + /// which depends only on the item's length, not its content. Bitcoin and + /// Elements therefore require the same padding *length*; only the bytes + /// that fill it differ (see [`Self::get_padding_bytes`]). + /// + /// The script witness is passed as `&[Vec]`, where each inner `Vec` + /// is one witness stack item (the padding item is *not* yet included). + /// + /// Returns `None` if no padding is required, i.e. the cost already fits + /// within the budget of the given witness stack. + #[cfg(feature = "bitcoin")] + pub fn get_padding_size(self, script_witness: &[Vec]) -> Option { let weight = U32Weight::from(self); let budget = Self::get_budget(script_witness); if weight <= budget { return None; } - // Adding the annex to the witness stack increases the serialized size by: + // Adding the padding item to the witness stack increases the serialized + // size by: // - // 1. CompactSize(annex_len): the length prefix of the annex item - // 2. annex_len: the annex bytes themselves (0x50 tag + zero padding) + // 1. CompactSize(item_len): the length prefix of the padding item + // 2. item_len: the padding item bytes themselves // // CompactSize uses 1 byte for values <= 252, 3 bytes for <= 65535, // and 5 bytes for larger values. The overhead subtracted must account - // for the actual CompactSize encoding length of the resulting annex. + // for the actual CompactSize encoding length of the resulting item. let deficit = (weight - budget).0 as usize; // cast safety: 32-bit machine or higher - // overhead = compact_size_len + 1 (for 0x50 tag) + // overhead = compact_size_len + 1 (for the 0x50 annex tag, when an + // Elements annex is used; for a plain Bitcoin zero item there is no + // tag, but the deficit accounting is identical because what matters is + // only the total serialized item length). let padding_len = match deficit { - // annex_len <= 252, compact_size uses 1 byte, overhead = 2 + // item_len <= 252, compact_size uses 1 byte, overhead = 2 0..=253 => deficit.saturating_sub(2), - // Boundary region: annex must be >= 253 bytes (3-byte compact_size), + // Boundary region: item must be >= 253 bytes (3-byte compact_size), // but deficit - 4 < 252. Use minimum padding for 3-byte encoding. 254..=255 => 252, - // annex_len in 253..=65535, compact_size uses 3 bytes, overhead = 4 + // item_len in 253..=65535, compact_size uses 3 bytes, overhead = 4 256..=65538 => deficit - 4, // Boundary region for 5-byte compact_size encoding. 65539..=65540 => 65535, - // annex_len >= 65536, compact_size uses 5 bytes, overhead = 6 + // item_len >= 65536, compact_size uses 5 bytes, overhead = 6 _ => deficit - 6, // Note: the 9-byte compact_size boundary (deficit > 4_294_967_300) // is unreachable because Cost uses u32 milliweight, limiting the // maximum deficit to ~4_294_968 weight units. }; - let annex_bytes: Vec = std::iter::once(0x50) - .chain(std::iter::repeat(0x00).take(padding_len)) - .collect(); - Some(annex_bytes) + Some(padding_len + 1) + } + + /// Return the bytes of the padding witness stack item required so the + /// transaction input has enough budget to cover the cost. + /// + /// This is the Bitcoin-specific form: the padding is a single all-zero + /// witness stack item. (Bitcoin has no annex, so the padding must be a + /// regular stack item; a leading `0x50` byte would be misread as an annex.) + #[cfg(all(feature = "bitcoin", not(feature = "elements")))] + pub fn get_padding_bytes(self, script_witness: &[Vec]) -> Option> { + self.get_padding_size(script_witness) + .map(|len| vec![0x00; len]) + } + + /// Return the bytes of the padding witness stack item required so the + /// transaction input has enough budget to cover the cost. + /// + /// This is the Elements-specific form: on Elements, padding is an annex, + /// which is a single witness stack item whose first byte is the `0x50` + /// annex tag (BIP 341) followed by zero bytes. + /// + /// To build an annex of total length `L` (as returned by + /// [`Self::get_padding_size`]) this returns `[0x50]` followed by `L - 1` + /// zero bytes. Callers targeting non-Liquid Elements (where annexes are + /// unavailable) should instead use the length and build their own all-zero + /// item, as Bitcoin does. + #[cfg(feature = "elements")] + pub fn get_padding_bytes(self, script_witness: &[Vec]) -> Option> { + self.get_padding_size(script_witness).map(|len| { + let mut annex = Vec::with_capacity(len); + annex.push(0x50); + annex.extend(std::iter::repeat(0x00).take(len.saturating_sub(1))); + annex + }) + } + + /// Return the annex bytes that are required as padding so the transaction + /// input has enough budget to cover the cost. + /// + /// The first annex byte is `0x50`, as defined in BIP 341. + /// The following padding bytes are `0x00`. + #[cfg(feature = "elements")] + #[deprecated( + since = "0.7.1", + note = "use `get_padding_size` (chain-agnostic item length) or `get_padding_bytes` (chain-specific bytes) instead" + )] + pub fn get_padding(self, script_witness: &[Vec]) -> Option> { + self.get_padding_bytes(script_witness) + } +} + +/// The length, in bytes, of the CompactSize (VarInt) encoding of `value`. +/// +/// CompactSize uses 1 byte for values <= 252, 3 bytes for <= 65535, 5 bytes +/// for <= 2^32-1, and 9 bytes otherwise. `Cost` uses `u32` milliweight, so +/// serialized lengths can never exceed the 5-byte encoding range. +#[cfg(feature = "bitcoin")] +fn compact_size_len(value: usize) -> usize { + match value { + 0..=252 => 1, + 253..=65_535 => 3, + 65_536..=4_294_967_295 => 5, + _ => 9, } } @@ -439,6 +516,7 @@ mod tests { #[test] #[cfg(feature = "elements")] + #[allow(deprecated)] fn test_get_padding() { // The budget of the empty witness stack is 51 WU: // @@ -486,16 +564,31 @@ mod tests { ]; for (cost, mut witness, maybe_padding) in test_vectors { + let size = cost.get_padding_size(&witness); match maybe_padding { None => { assert!(cost.is_budget_valid(&witness)); + assert_eq!(size, None); + assert!(cost.get_padding_bytes(&witness).is_none()); + // deprecated alias still works and agrees assert!(cost.get_padding(&witness).is_none()); } Some(expected_annex_len) => { assert!(!cost.is_budget_valid(&witness)); - let annex_bytes = cost.get_padding(&witness).expect("not enough budget"); - assert_eq!(expected_annex_len, annex_bytes.len()); + // The chain-agnostic size is the total item length, which for + // the Elements annex equals 0x50 tag + zero padding bytes. + let size = size.expect("not enough budget"); + assert_eq!(expected_annex_len, size); + + let annex_bytes = cost.get_padding_bytes(&witness).expect("not enough budget"); + assert_eq!(size, annex_bytes.len()); + assert_eq!(annex_bytes[0], 0x50); + assert!(annex_bytes[1..].iter().all(|&b| b == 0x00)); + + // The deprecated alias agrees with get_padding_bytes. + assert_eq!(cost.get_padding(&witness).unwrap(), annex_bytes); + witness.extend(std::iter::once(annex_bytes)); assert!(cost.is_budget_valid(&witness)); @@ -505,4 +598,39 @@ mod tests { } } } + + #[test] + #[cfg(all(feature = "bitcoin", not(feature = "elements")))] + fn test_get_padding_bitcoin() { + // Empty witness stack budget is 51 WU: 50 free weight + 1 length byte. + let empty = 51_000; + + let test_vectors = vec![ + (Cost::from_milliweight(empty + 2_001), vec![], 2usize), + ( + Cost::from_milliweight(8_045_103), + vec![vec![], vec![0; 497], vec![0; 32], vec![0; 33]], + 7_424usize, + ), + ]; + + for (cost, mut witness, expected_len) in test_vectors { + assert!(!cost.is_budget_valid(&witness)); + + let size = cost.get_padding_size(&witness).expect("not enough budget"); + assert_eq!(expected_len, size); + + // Bitcoin padding is a plain all-zero witness stack item: no annex + // tag, and no 0x50-leading byte (which would be misread as an annex). + let padding = cost.get_padding_bytes(&witness).expect("not enough budget"); + assert_eq!(size, padding.len()); + assert!(padding.iter().all(|&b| b == 0x00)); + + witness.push(padding); + assert!(cost.is_budget_valid(&witness)); + + witness.pop(); + assert!(!cost.is_budget_valid(&witness), "Padding must be minimal"); + } + } } diff --git a/src/human_encoding/parse/mod.rs b/src/human_encoding/parse/mod.rs index 64045a77..d42d7647 100644 --- a/src/human_encoding/parse/mod.rs +++ b/src/human_encoding/parse/mod.rs @@ -713,11 +713,10 @@ mod tests { #[cfg(feature = "elements")] fn bip340_program() { use crate::jet::elements::ElementsEnv; - use crate::jet::ElementsTxEnv; let empty = HashMap::new(); let dummy = ElementsEnv::dummy(); - assert_cmr_witness::( + assert_cmr_witness::>( "main := unit", "c40a10263f7436b4160acbef1c36fba4be4d95df181a968afeab5eac247adff7", &empty, @@ -734,7 +733,7 @@ mod tests { ]; let signature = HashMap::from([(Arc::from("wit1"), Value::u512(sig))]); - assert_cmr_witness::( + assert_cmr_witness::>( " -- Witnesses wit1 := witness : 1 -> 2^512 diff --git a/src/jet/bitcoin/c_env.rs b/src/jet/bitcoin/c_env.rs new file mode 100644 index 00000000..53494d91 --- /dev/null +++ b/src/jet/bitcoin/c_env.rs @@ -0,0 +1,115 @@ +// SPDX-License-Identifier: CC0-1.0 + +use crate::Cmr; + +use bitcoin::hashes::Hash as _; +use bitcoin::taproot::{ControlBlock, TAPROOT_ANNEX_PREFIX}; +use simplicity_sys::c_jets::c_env::bitcoin as c_bitcoin; + +pub(super) fn new_tx( + tx: &bitcoin::Transaction, + in_utxos: &[bitcoin::TxOut], +) -> *mut c_bitcoin::CTransaction { + let mut raw_inputs = Vec::with_capacity(tx.input.len()); + let mut raw_outputs = Vec::with_capacity(tx.output.len()); + // Allocate space for the raw annexes. This dumb `Vec::from_iter` construction is + // equivalent to `vec![None; tx.input.len()]`, but that won't compile because it + // requires Option::::None to be cloneable, which it's not because + // CRawBuffer isn't. + + // SAFETY: this allocation *must* live until after the `simplicity_mallocTransaction` + // at the bottom of this function. We convert the vector to a boxed slice to ensure + // it cannot be resized, which would potentially trigger a reallocation. + let mut raw_annexes = Vec::from_iter((0..tx.input.len()).map(|_| None)).into_boxed_slice(); + + for (n, (inp, utxo)) in tx.input.iter().zip(in_utxos.iter()).enumerate() { + raw_annexes[n] = get_annex(&inp.witness).map(c_bitcoin::CRawBuffer::new); + raw_inputs.push(c_bitcoin::CRawInput { + // This `as_ref().map_or()` construction converts an Option<&T> to a nullable *const T. + // In theory it's a no-op. + annex: raw_annexes[n] + .as_ref() + .map_or(core::ptr::null(), |ptr| ptr as *const _), // cast should be changed to ptr::from_ref in rust 1.76 + prev_txid: inp.previous_output.txid.as_byte_array(), + txo: c_bitcoin::CRawOutput { + value: utxo.value.to_sat(), + script_pubkey: c_bitcoin::CRawBuffer::new(utxo.script_pubkey.as_bytes()), + }, + script_sig: c_bitcoin::CRawBuffer::new(inp.script_sig.as_bytes()), + prev_txout_index: inp.previous_output.vout, + sequence: inp.sequence.to_consensus_u32(), + }); + } + for out in tx.output.iter() { + raw_outputs.push(c_bitcoin::CRawOutput { + value: out.value.to_sat(), + script_pubkey: c_bitcoin::CRawBuffer::new(out.script_pubkey.as_bytes()), + }); + } + let txid = tx.compute_txid(); + + let c_raw_tx = c_bitcoin::CRawTransaction { + txid: txid.as_byte_array(), + inputs: raw_inputs.as_ptr(), + outputs: raw_outputs.as_ptr(), + n_inputs: raw_inputs.len().try_into().expect("sane length"), + n_outputs: raw_outputs.len().try_into().expect("sane length"), + version: tx.version.0 as u32, // in 1.87.0 can use .cast_unsigned + locktime: tx.lock_time.to_consensus_u32(), + }; + let ret = unsafe { + // SAFETY: this is a FFI call and we constructed its argument correctly. + c_bitcoin::simplicity_mallocTransaction(&c_raw_tx) + }; + // Explicitly drop raw_annexes so Rust doesn't try any funny business dropping it early. + // Drop raw_inputs first since it contains pointers into raw_annexes and we don't want + // them to dangle. (It'd be safe since they're raw pointers, but still bad mojo.) + drop(raw_inputs); + drop(raw_annexes); + ret +} + +pub(super) fn new_tap_env( + control_block: &ControlBlock, + script_cmr: Cmr, +) -> *mut c_bitcoin::CTapEnv { + let cb_ser = control_block.serialize(); + let raw_tap_env = c_bitcoin::CRawTapEnv { + control_block: cb_ser.as_ptr(), + script_cmr: script_cmr.as_ref().as_ptr(), + branch_len: control_block + .merkle_branch + .len() + .try_into() + .expect("sane length"), + }; + + unsafe { + // SAFETY: this is a FFI call and we constructed its argument correctly. + c_bitcoin::simplicity_mallocTapEnv(&raw_tap_env) + } +} + +pub(super) fn new_tx_env( + tx: *const c_bitcoin::CTransaction, + taproot: *const c_bitcoin::CTapEnv, + ix: u32, +) -> c_bitcoin::CTxEnv { + unsafe { + let mut tx_env = std::mem::MaybeUninit::::uninit(); + c_bitcoin::c_set_txEnv(tx_env.as_mut_ptr(), tx, taproot, ix); + tx_env.assume_init() + } +} + +/// Extracts the annex from a taproot witness stack per BIP341: if there are at +/// least two witness elements and the last one starts with 0x50, it is the annex. +/// (rust-bitcoin 0.32 removed `Witness::taproot_annex`.) +fn get_annex(in_witness: &bitcoin::Witness) -> Option<&[u8]> { + let last_item = in_witness.last()?; + if *last_item.first()? == TAPROOT_ANNEX_PREFIX { + Some(last_item) + } else { + None + } +} diff --git a/src/jet/bitcoin/environment.rs b/src/jet/bitcoin/environment.rs index c530cec6..2980ca18 100644 --- a/src/jet/bitcoin/environment.rs +++ b/src/jet/bitcoin/environment.rs @@ -1,26 +1,50 @@ // SPDX-License-Identifier: CC0-1.0 -use bitcoin::absolute; +use crate::Cmr; + +use bitcoin::taproot::ControlBlock; +use simplicity_sys::c_jets::c_env::bitcoin as c_bitcoin; + +use super::c_env; /// Environment for Bitcoin Simplicity -pub struct BitcoinEnv { - pub tx: bitcoin::Transaction, +pub struct BitcoinEnv { + /// The CTxEnv struct + c_tx_env: c_bitcoin::CTxEnv, + tx: T, + ix: u32, } -impl BitcoinEnv { - pub fn new(tx: bitcoin::Transaction) -> Self { - BitcoinEnv { tx } +impl BitcoinEnv +where + T: core::borrow::Borrow, +{ + pub fn new( + tx: T, + utxos: &[bitcoin::TxOut], + ix: u32, + script_cmr: Cmr, + control_block: ControlBlock, + ) -> Self { + let c_tx = c_env::new_tx(tx.borrow(), utxos); + let c_tap_env = c_env::new_tap_env(&control_block, script_cmr); + let c_tx_env = c_env::new_tx_env(c_tx, c_tap_env, ix); + + BitcoinEnv { c_tx_env, tx, ix } + } + + /// The transaction of this environment + pub fn tx(&self) -> &bitcoin::Transaction { + self.tx.borrow() + } + + /// The input index of this environment + pub fn ix(&self) -> u32 { + self.ix } -} -impl Default for BitcoinEnv { - fn default() -> Self { - // FIXME: Review and check if the defaults make sense - BitcoinEnv::new(bitcoin::Transaction { - version: bitcoin::transaction::Version::TWO, - lock_time: absolute::LockTime::ZERO, - input: vec![], - output: vec![], - }) + /// A version of this environment used by the C implementation of the Bit Machine. + pub fn c_tx_env(&self) -> &c_bitcoin::CTxEnv { + &self.c_tx_env } } diff --git a/src/jet/bitcoin/mod.rs b/src/jet/bitcoin/mod.rs index d4faa7ae..01334fd9 100644 --- a/src/jet/bitcoin/mod.rs +++ b/src/jet/bitcoin/mod.rs @@ -1,19 +1,23 @@ // SPDX-License-Identifier: CC0-1.0 +mod c_env; mod environment; +#[cfg(test)] +mod tests; pub use environment::BitcoinEnv; use super::init::bitcoin::Bitcoin; use super::JetEnvironment; +use simplicity_sys::c_jets::c_env::bitcoin::CTxEnv; use simplicity_sys::c_jets::frame_ffi::CFrameItem; -impl JetEnvironment for BitcoinEnv { +impl> JetEnvironment for BitcoinEnv { type Jet = Bitcoin; - type CJetEnvironment = (); + type CJetEnvironment = CTxEnv; fn c_jet_env(&self) -> &Self::CJetEnvironment { - &() + self.c_tx_env() } fn c_jet_ptr( diff --git a/src/jet/bitcoin/tests.rs b/src/jet/bitcoin/tests.rs new file mode 100644 index 00000000..e8dc11b3 --- /dev/null +++ b/src/jet/bitcoin/tests.rs @@ -0,0 +1,135 @@ +// SPDX-License-Identifier: CC0-1.0 + +//! Tests that the Bitcoin backend actually executes (and prunes) tx-context / +//! crypto jets through the C implementations, using a *real* transaction +//! environment (`c_jet_env` returns the live `CTxEnv`, not the unit type). + +use std::sync::Arc; + +use bitcoin::taproot::ControlBlock; + +use crate::jet::Bitcoin; +use crate::jet::BitcoinEnv; +use crate::node::{ConstructNode, CoreConstructible as _}; +use crate::types::Context; +use crate::{BitMachine, Cmr, Value}; + +type Node<'brand> = Arc>; + +/// A dummy but *structurally valid* spending context: one input (index 0), one +/// output, matching prevout utxo and a valid 33-byte control block. Building a +/// `BitcoinEnv` computes the sighash-all and tap-env-hash eagerly in C, so this +/// must not trip any C assertion. +fn dummy_env() -> BitcoinEnv { + let tx = bitcoin::Transaction { + version: bitcoin::transaction::Version(2), + lock_time: bitcoin::absolute::LockTime::ZERO, + input: vec![bitcoin::TxIn { + previous_output: bitcoin::OutPoint::null(), + script_sig: bitcoin::ScriptBuf::new(), + sequence: bitcoin::Sequence::MAX, + witness: bitcoin::Witness::new(), + }], + output: vec![bitcoin::TxOut { + value: bitcoin::Amount::from_sat(0), + script_pubkey: bitcoin::ScriptBuf::new(), + }], + }; + let utxo = bitcoin::TxOut { + value: bitcoin::Amount::from_sat(0), + script_pubkey: bitcoin::ScriptBuf::new(), + }; + let cmr = Cmr::from_byte_array([0u8; 32]); + let ctrl = ControlBlock::decode(&[ + 0xc0, 0x50, 0x92, 0x9b, 0x74, 0xc1, 0xa0, 0x49, 0x54, 0xb7, 0x8b, 0x4b, 0x60, 0x35, 0xe9, + 0x7a, 0x5e, 0x07, 0x8a, 0x5a, 0x0f, 0x28, 0xec, 0x96, 0xd5, 0x47, 0xbf, 0xee, 0x9a, 0xce, + 0x80, 0x3a, 0xc0, + ]) + .expect("control block"); + BitcoinEnv::new(tx, &[utxo], 0, cmr, ctrl) +} + +/// Run a single-jet program (unit source) and return its output value. +fn run_jet(jet: &Bitcoin) -> Value { + Context::with_context(|ctx| { + let prog = Node::jet(&ctx, jet); + let env = dummy_env(); + BitMachine::test_exec(prog, &env).expect("bit machine execution") + }) +} + +/// `c_jet_env` must hand back the live transaction environment, not `()`. +#[test] +fn c_jet_env_is_the_tx_env() { + let env = dummy_env(); + // Type is enforced at compile time: the trait method returns &CTxEnv. + // We also confirm it points at the same struct the env exposes. + let env_jet: &simplicity_sys::c_jets::c_env::bitcoin::CTxEnv = + as crate::jet::JetEnvironment>::c_jet_env(&env); + assert_eq!( + std::ptr::eq(env_jet, env.c_tx_env()), + true, + "c_jet_env should return the env's own CTxEnv" + ); +} + +/// Every wired bitcoin env jet must yield a real C function pointer (i.e. +/// `c_jet_ptr` must not panic via `unimplemented!`) AND must execute +/// successfully against a live environment. +#[test] +fn env_jets_execute_with_real_environment() { + // current_index (ONE -> 2^32): index of the input under scrutiny (0). + assert_eq!(run_jet(&Bitcoin::CurrentIndex), Value::u32(0)); + // num_inputs (ONE -> 2^32): number of inputs (1). + assert_eq!(run_jet(&Bitcoin::NumInputs), Value::u32(1)); + + // tx_hash / tap_env_hash / sig_all_hash are ONE -> 2^256; just make sure + // they execute (their C impls dereference the live txEnv, so a wrong/null + // env would crash rather than return Ok). + for jet in [Bitcoin::TxHash, Bitcoin::TapEnvHash, Bitcoin::SigAllHash] { + let out = run_jet(&jet); + assert_eq!(out.ty().to_string(), "2^256", "{jet:?} output type"); + } +} + +/// bip_0340_verify is env-free on the bitcoin backend (C lives in the shared +/// jets-secp256k1.c); make sure its pointer resolves and it does not panic. +#[test] +fn bip_0340_verify_ptr_resolves() { + let ptr = crate::jet::init::bitcoin::c_jet_ptr(&Bitcoin::Bip0340Verify); + let ptr2 = crate::jet::init::bitcoin::c_jet_ptr(&Bitcoin::SigAllHash); + let ptr3 = crate::jet::init::bitcoin::c_jet_ptr(&Bitcoin::CheckLockHeight); + // Unwired jets still panic here; these must not. + let _ = (ptr, ptr2, ptr3); +} + +/// `check_lock_height` reads a 32-bit source and returns unit iff that height +/// is <= the transaction's lock height. Feed an in-range and an out-of-range +/// value and confirm the C jet consults the live environment. +#[test] +fn check_lock_height_executes_against_env() { + use crate::node::SimpleFinalizer; + + let res_for = |x: u32| { + Context::with_context(|ctx| { + let prog = Node::jet(&ctx, &Bitcoin::CheckLockHeight); // 2^32 -> 1 + let prog = prog + .finalize_types_non_program() + .expect("finalizing types") + .finalize(&mut SimpleFinalizer::new(None.into_iter())) + .expect("finalizing"); + let env = dummy_env(); // lock_time = 0 => lock height 0 + let mut mac = BitMachine::for_program(&prog).expect("program bounds"); + mac.input(&Value::u32(x)).expect("input"); + mac.exec(&prog, &env) + }) + }; + + // 0 <= 0 -> Ok (unit), C returns true. + assert_eq!(res_for(0).expect("should satisfy lock"), Value::unit()); + // 5 <= 0 is false -> C returns false -> JetFailed. + assert!( + res_for(5).is_err(), + "height beyond lock should fail the jet" + ); +} diff --git a/src/jet/core/environment.rs b/src/jet/core/environment.rs new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/src/jet/core/environment.rs @@ -0,0 +1 @@ + diff --git a/src/jet/elements/environment.rs b/src/jet/elements/environment.rs index 202582c4..e022753c 100644 --- a/src/jet/elements/environment.rs +++ b/src/jet/elements/environment.rs @@ -4,7 +4,7 @@ use crate::merkle::cmr::Cmr; use elements::confidential; use elements::taproot::ControlBlock; use simplicity_sys::c_jets::c_env::elements as c_elements; -use std::ops::Deref; +use std::borrow::Borrow; use super::c_env; @@ -37,7 +37,7 @@ impl From for ElementsUtxo { /// The order of `utxos` must be same as of the order of inputs in the /// transaction. #[derive(Debug)] -pub struct ElementsEnv> { +pub struct ElementsEnv> { /// The CTxEnv struct c_tx_env: c_elements::CTxEnv, /// The elements transaction @@ -54,7 +54,7 @@ pub struct ElementsEnv> { impl ElementsEnv where - T: Deref, + T: Borrow, { pub fn new( tx: T, @@ -65,7 +65,7 @@ where annex: Option>, genesis_hash: elements::BlockHash, ) -> Self { - let c_tx = c_env::new_tx(&tx, &utxos); + let c_tx = c_env::new_tx(tx.borrow(), &utxos); let c_tap_env = c_env::new_tap_env(&control_block, script_cmr); let c_tx_env = c_env::new_tx_env(c_tx, c_tap_env, genesis_hash, ix); ElementsEnv { @@ -85,7 +85,7 @@ where /// Returns the transaction of this environment pub fn tx(&self) -> &elements::Transaction { - &self.tx + self.tx.borrow() } /// Returns the input index of this environment @@ -110,7 +110,7 @@ where } #[cfg(test)] -impl ElementsEnv> { +impl ElementsEnv { /// Return a dummy Elements environment pub fn dummy() -> Self { Self::dummy_with(elements::LockTime::ZERO, elements::Sequence::MAX) @@ -127,7 +127,7 @@ impl ElementsEnv> { ]; ElementsEnv::new( - std::sync::Arc::new(elements::Transaction { + elements::Transaction { version: 2, lock_time, // Enable locktime in dummy txin @@ -140,7 +140,7 @@ impl ElementsEnv> { witness: elements::TxInWitness::default(), }], output: Vec::default(), - }), + }, vec![ElementsUtxo { script_pubkey: elements::Script::new(), asset: confidential::Asset::Null, diff --git a/src/jet/elements/mod.rs b/src/jet/elements/mod.rs index c36ed73a..35a4ae33 100644 --- a/src/jet/elements/mod.rs +++ b/src/jet/elements/mod.rs @@ -15,7 +15,7 @@ use simplicity_sys::CElementsTxEnv; /// Type alias for the Elements transaction environment. pub type ElementsTxEnv = ElementsEnv>; -impl JetEnvironment for ElementsTxEnv { +impl> JetEnvironment for ElementsEnv { type Jet = Elements; type CJetEnvironment = CElementsTxEnv; diff --git a/src/jet/init/bitcoin.rs b/src/jet/init/bitcoin.rs index c93f7cfb..01fc140d 100644 --- a/src/jet/init/bitcoin.rs +++ b/src/jet/init/bitcoin.rs @@ -7,6 +7,7 @@ use crate::decode_bits; use crate::{decode, BitIter, BitWriter}; use crate::analysis::Cost; use simplicity_sys::CFrameItem; +use simplicity_sys::c_jets::c_env::bitcoin as c_bitcoin; use std::io::Write; use std::{fmt, str}; @@ -880,7 +881,2150 @@ impl Bitcoin { impl Jet for Bitcoin { fn cmr(&self) -> Cmr { - unimplemented!("Bitcoin jet CMRs weights have not yet been implemented.") + let bytes = match self { + Bitcoin::Add16 => [ + 0x49, 0x42, 0x5a, 0x86, 0xe2, 0x0a, 0x67, 0x6d, 0x8b, 0x87, 0xe3, 0xc1, 0xa9, 0xb8, + 0xea, 0x6e, 0xc7, 0x5d, 0x85, 0x9c, 0x12, 0xc5, 0x1b, 0xcb, 0x7f, 0xa9, 0xf9, 0x69, + 0x12, 0xc3, 0x49, 0xcf, + ], + Bitcoin::Add32 => [ + 0x46, 0x68, 0xcd, 0x55, 0xe8, 0xd1, 0x59, 0x19, 0x53, 0x32, 0x70, 0x14, 0xec, 0x64, + 0xc8, 0xe7, 0xd5, 0x2b, 0x86, 0xb5, 0x3e, 0x11, 0xc0, 0x14, 0x57, 0xea, 0xf2, 0xc3, + 0xd3, 0xce, 0xbf, 0x9f, + ], + Bitcoin::Add64 => [ + 0xbe, 0x2b, 0x75, 0x19, 0x30, 0x3a, 0x67, 0xee, 0xa6, 0xb4, 0x82, 0x95, 0x0e, 0xda, + 0x83, 0x43, 0x5e, 0x1d, 0xe8, 0x55, 0x9c, 0x39, 0x4a, 0x23, 0x62, 0x22, 0xff, 0x5b, + 0xf0, 0x89, 0xd3, 0x46, + ], + Bitcoin::Add8 => [ + 0xdf, 0xa1, 0x79, 0xad, 0xf4, 0x55, 0x0b, 0x28, 0x48, 0x73, 0xbf, 0x30, 0x12, 0x3e, + 0x0d, 0x4e, 0x54, 0x06, 0x9b, 0x08, 0x58, 0x34, 0xce, 0x56, 0x58, 0x15, 0xef, 0x7e, + 0x45, 0x78, 0x4a, 0xcb, + ], + Bitcoin::All16 => [ + 0x24, 0xf4, 0x82, 0xa5, 0x13, 0xd3, 0x33, 0x62, 0x01, 0x5d, 0x28, 0xdf, 0x4b, 0xb6, + 0xc3, 0xee, 0x08, 0xab, 0x8a, 0xfb, 0xbd, 0x25, 0x57, 0x1f, 0x0e, 0xa8, 0x9d, 0x8c, + 0xab, 0xa3, 0x14, 0x04, + ], + Bitcoin::All32 => [ + 0xa7, 0x16, 0x52, 0x2d, 0x0f, 0x37, 0x87, 0xc8, 0xb4, 0xd5, 0x07, 0x64, 0x7f, 0x1f, + 0x80, 0x7b, 0x67, 0xf3, 0x20, 0xd6, 0xeb, 0x67, 0xb8, 0x4b, 0x60, 0x9c, 0xec, 0x1d, + 0x2f, 0x12, 0x21, 0x8a, + ], + Bitcoin::All64 => [ + 0x7a, 0xee, 0xfe, 0x2e, 0xce, 0x24, 0xba, 0xb3, 0x7c, 0x6e, 0x54, 0x30, 0xee, 0xd4, + 0x19, 0xfc, 0xd5, 0xf0, 0x37, 0x91, 0x2d, 0x17, 0x70, 0xcb, 0x7d, 0x65, 0x20, 0xdc, + 0xe5, 0x25, 0x29, 0x1a, + ], + Bitcoin::All8 => [ + 0x46, 0x37, 0xf4, 0x0e, 0x5f, 0x47, 0x26, 0xb0, 0x05, 0x70, 0x76, 0x5a, 0xc7, 0x94, + 0xe2, 0x9e, 0xd1, 0xbb, 0x26, 0x55, 0xff, 0xc4, 0x12, 0xb2, 0xdc, 0x41, 0x25, 0x8e, + 0x41, 0xaa, 0xc6, 0x24, + ], + Bitcoin::And1 => [ + 0x10, 0x68, 0x4d, 0x0d, 0xd7, 0x2c, 0xb0, 0xa8, 0x26, 0xa8, 0x63, 0x83, 0x4e, 0x01, + 0x1f, 0x50, 0xfa, 0x0d, 0x55, 0x8b, 0xa7, 0x7d, 0x6b, 0x9f, 0x49, 0xa1, 0xac, 0x22, + 0x90, 0x2a, 0x6a, 0xd0, + ], + Bitcoin::And16 => [ + 0x37, 0x3c, 0x73, 0x0f, 0xad, 0x3e, 0x88, 0x47, 0x99, 0x1a, 0xa4, 0x17, 0xd9, 0xf0, + 0x80, 0xee, 0x1c, 0xb8, 0x8a, 0x7f, 0x72, 0x06, 0xf3, 0xfa, 0x84, 0x0b, 0x19, 0x50, + 0x77, 0x61, 0xfb, 0x23, + ], + Bitcoin::And32 => [ + 0x13, 0xb0, 0x2c, 0x4c, 0x60, 0xae, 0x6e, 0xa4, 0x91, 0x16, 0x16, 0x49, 0xac, 0xf9, + 0xa4, 0x7a, 0x70, 0x25, 0xaf, 0x84, 0x7d, 0x5f, 0x58, 0x1e, 0x6f, 0x1c, 0xcc, 0xfb, + 0x21, 0xd3, 0x00, 0x1d, + ], + Bitcoin::And64 => [ + 0x92, 0x18, 0x55, 0x35, 0xd4, 0x50, 0x54, 0x07, 0xde, 0xa3, 0xc8, 0xa6, 0x08, 0x26, + 0xed, 0xe6, 0x4a, 0x8f, 0xbb, 0x3d, 0xb4, 0x86, 0xd5, 0x6f, 0x64, 0x2d, 0x21, 0x7c, + 0x29, 0xcb, 0xd7, 0x95, + ], + Bitcoin::And8 => [ + 0x26, 0x9a, 0x1b, 0x44, 0x62, 0x66, 0xf8, 0xf4, 0xa4, 0xa3, 0x8f, 0xa7, 0xe7, 0xe3, + 0x91, 0x82, 0xf1, 0x52, 0x14, 0x36, 0x14, 0x2b, 0xad, 0xed, 0xf3, 0xaa, 0x63, 0xfb, + 0x2f, 0x17, 0x2d, 0x2f, + ], + Bitcoin::AnnexHash => [ + 0x51, 0xfa, 0x19, 0x13, 0xa6, 0x29, 0x73, 0x48, 0x4a, 0x70, 0x0a, 0xf3, 0xff, 0x93, + 0x26, 0x94, 0xd3, 0x89, 0x0a, 0xe0, 0xad, 0x87, 0xa4, 0x55, 0xda, 0xf4, 0x90, 0x6f, + 0x22, 0x4a, 0x48, 0xd5, + ], + Bitcoin::Bip0340Verify => [ + 0x49, 0x15, 0x65, 0xfe, 0x23, 0xa7, 0xbd, 0xc1, 0x84, 0x2b, 0xe7, 0x49, 0x50, 0x93, + 0x37, 0xf9, 0x68, 0x90, 0xd5, 0xb3, 0x58, 0xb3, 0x65, 0x20, 0x90, 0xda, 0x55, 0x66, + 0x54, 0xe2, 0x95, 0x49, + ], + Bitcoin::BuildTapbranch => [ + 0xef, 0x8e, 0x92, 0x91, 0x9b, 0x26, 0x08, 0xea, 0x6b, 0x5b, 0xcd, 0xd3, 0x9c, 0x51, + 0x78, 0xe5, 0x46, 0x24, 0x95, 0x53, 0x91, 0x4b, 0x0f, 0x8d, 0x33, 0x73, 0x5d, 0x28, + 0x86, 0xe1, 0xa5, 0xe8, + ], + Bitcoin::BuildTapleafSimplicity => [ + 0x22, 0x41, 0x19, 0x09, 0x98, 0x41, 0x47, 0xde, 0x8f, 0x5a, 0x04, 0x28, 0x35, 0x8b, + 0x47, 0x16, 0xdb, 0x08, 0x76, 0x64, 0xa7, 0x28, 0x56, 0x08, 0x52, 0xb0, 0xe6, 0x16, + 0xeb, 0xc6, 0x2d, 0x30, + ], + Bitcoin::BuildTaptweak => [ + 0xf1, 0x92, 0xdb, 0x17, 0x06, 0x60, 0x8d, 0xef, 0x16, 0x5d, 0xbd, 0xda, 0x72, 0xa3, + 0x8c, 0x88, 0x82, 0xcb, 0x36, 0xc6, 0xda, 0x47, 0x07, 0x0d, 0x8a, 0x5f, 0x58, 0x96, + 0xfb, 0xda, 0x84, 0x34, + ], + Bitcoin::Ch1 => [ + 0x73, 0xb2, 0xa9, 0x81, 0xd7, 0x21, 0x98, 0x6f, 0x8c, 0xde, 0xd6, 0x97, 0xe0, 0x63, + 0x05, 0xd4, 0x58, 0x54, 0x10, 0x2d, 0xff, 0x20, 0xc0, 0xe5, 0xb9, 0x8a, 0xe1, 0x76, + 0x23, 0x2f, 0xf2, 0x5b, + ], + Bitcoin::Ch16 => [ + 0x78, 0xde, 0x46, 0x5e, 0x61, 0xd9, 0xa5, 0x0f, 0x78, 0x25, 0x2f, 0xf4, 0xab, 0x23, + 0xc9, 0xe6, 0x3a, 0xe6, 0x8c, 0x76, 0x9d, 0x36, 0x66, 0x12, 0x71, 0x20, 0x7d, 0xc6, + 0x93, 0xf4, 0x69, 0xb4, + ], + Bitcoin::Ch32 => [ + 0xed, 0x93, 0xbe, 0xf1, 0xf6, 0x6e, 0x3a, 0x75, 0xe6, 0x12, 0x06, 0x02, 0xec, 0xee, + 0x67, 0x40, 0x65, 0x3e, 0x7b, 0xd4, 0x6e, 0x07, 0xeb, 0x77, 0x14, 0x4e, 0xf1, 0xbb, + 0x2c, 0x9d, 0xe5, 0x3d, + ], + Bitcoin::Ch64 => [ + 0xce, 0xd0, 0x07, 0x9b, 0x0b, 0xd1, 0xcc, 0x00, 0x20, 0x9a, 0x7c, 0xbc, 0x23, 0xf1, + 0x3d, 0xfd, 0x20, 0x28, 0x08, 0xf0, 0xf5, 0x25, 0x7d, 0x8a, 0x50, 0xac, 0x54, 0x3e, + 0x64, 0xee, 0x3a, 0x05, + ], + Bitcoin::Ch8 => [ + 0xc7, 0x07, 0xca, 0x72, 0x3e, 0x24, 0xf6, 0xb2, 0x5b, 0xf3, 0x94, 0xa9, 0x9a, 0x4d, + 0x75, 0xe8, 0x13, 0x79, 0xb4, 0x67, 0x84, 0x38, 0xac, 0x78, 0x9d, 0xee, 0x18, 0x8e, + 0xdc, 0xce, 0x75, 0xfa, + ], + Bitcoin::CheckLockDistance => [ + 0x38, 0xfd, 0xf7, 0xdd, 0x28, 0x53, 0x86, 0x70, 0xfb, 0x34, 0xc1, 0xbf, 0xe7, 0x2f, + 0x17, 0xe2, 0xca, 0x57, 0x84, 0xf8, 0x7f, 0xed, 0x88, 0xea, 0xb5, 0x84, 0x79, 0x2b, + 0x39, 0x74, 0xbd, 0x18, + ], + Bitcoin::CheckLockDuration => [ + 0x77, 0x50, 0x38, 0x32, 0x6e, 0xae, 0x25, 0xc7, 0x20, 0x9b, 0x24, 0x43, 0x06, 0xea, + 0xa9, 0xf9, 0x20, 0x4c, 0x7e, 0xce, 0x2d, 0xd6, 0x3b, 0x45, 0x2e, 0x10, 0x01, 0x7f, + 0xa4, 0xea, 0x53, 0xcf, + ], + Bitcoin::CheckLockHeight => [ + 0xb9, 0x0f, 0x15, 0x1f, 0x45, 0xb4, 0xeb, 0x37, 0x21, 0x06, 0x21, 0xf9, 0x70, 0x0a, + 0x36, 0xc8, 0xc5, 0x04, 0xbe, 0xe0, 0x67, 0x77, 0x11, 0x63, 0xa8, 0xb8, 0x3a, 0x77, + 0x18, 0xe6, 0x68, 0x6a, + ], + Bitcoin::CheckLockTime => [ + 0xa4, 0x51, 0xeb, 0xb2, 0x25, 0xd6, 0xb1, 0x33, 0xa5, 0xe6, 0x35, 0x39, 0x78, 0x00, + 0xd4, 0x87, 0xb3, 0x96, 0x8b, 0x0d, 0xe5, 0x5c, 0x96, 0xeb, 0x82, 0xf2, 0x90, 0xec, + 0xff, 0x9c, 0x25, 0x90, + ], + Bitcoin::CheckSigVerify => [ + 0xb5, 0x80, 0x15, 0x54, 0x6d, 0x28, 0x52, 0x66, 0x5d, 0xd2, 0x1b, 0xf1, 0x12, 0x66, + 0x26, 0x70, 0x20, 0xfa, 0x5e, 0x27, 0x50, 0x01, 0xdd, 0x46, 0x18, 0xfa, 0x41, 0x56, + 0x25, 0x95, 0x2e, 0x68, + ], + Bitcoin::Complement1 => [ + 0x1b, 0xcf, 0xae, 0x13, 0xd5, 0xd2, 0x37, 0xa0, 0xbb, 0x9b, 0x1d, 0x75, 0x32, 0x04, + 0x74, 0x62, 0xb2, 0x76, 0x90, 0xde, 0x5c, 0xac, 0x0e, 0x20, 0x19, 0x29, 0x89, 0x64, + 0x57, 0x93, 0x40, 0x60, + ], + Bitcoin::Complement16 => [ + 0x81, 0xad, 0x4d, 0x2c, 0x3d, 0x16, 0xbf, 0x34, 0x0a, 0xf3, 0x88, 0x6d, 0x35, 0x5c, + 0xc5, 0xbd, 0x1d, 0x59, 0x67, 0xe1, 0x6a, 0xce, 0x92, 0x4f, 0x19, 0xec, 0xf7, 0xd4, + 0x86, 0xd6, 0xc7, 0xe9, + ], + Bitcoin::Complement32 => [ + 0x13, 0x74, 0x2c, 0x18, 0x04, 0xa9, 0x6e, 0x6c, 0x03, 0x95, 0x28, 0xbf, 0xd0, 0x3b, + 0x8c, 0xf2, 0xb4, 0x62, 0x52, 0x6b, 0xb1, 0x81, 0xa3, 0xd8, 0xb4, 0x32, 0xf9, 0x9a, + 0xc4, 0xf5, 0xa7, 0xef, + ], + Bitcoin::Complement64 => [ + 0x65, 0xb7, 0xbd, 0x09, 0x36, 0x39, 0xc5, 0x6d, 0xa2, 0x85, 0xce, 0xfa, 0x2d, 0x04, + 0x64, 0x64, 0x5e, 0x14, 0xdd, 0x13, 0x64, 0x2f, 0x34, 0x95, 0x7d, 0x47, 0x37, 0xbd, + 0x52, 0xfa, 0xc5, 0x88, + ], + Bitcoin::Complement8 => [ + 0x95, 0x4b, 0x70, 0xdc, 0xec, 0x53, 0x9e, 0x6b, 0x67, 0xdf, 0xfe, 0xc5, 0x3c, 0xf2, + 0x4a, 0x66, 0x99, 0x39, 0x60, 0x8b, 0x22, 0x3f, 0x5f, 0x8b, 0x6d, 0x12, 0x9d, 0xaa, + 0x48, 0xca, 0x1c, 0xf0, + ], + Bitcoin::CurrentAnnexHash => [ + 0xce, 0xd9, 0x02, 0x2e, 0xdc, 0x69, 0x24, 0x1f, 0xe7, 0x07, 0x49, 0xa7, 0xf5, 0xd4, + 0x89, 0xc3, 0x13, 0x5e, 0xe8, 0xc9, 0x6f, 0xe6, 0x4c, 0x44, 0x64, 0x40, 0x1f, 0x98, + 0x51, 0xd7, 0xa1, 0x7d, + ], + Bitcoin::CurrentIndex => [ + 0x0e, 0x8c, 0x96, 0x4c, 0x2f, 0x2b, 0x34, 0x90, 0x36, 0x2f, 0x3b, 0xbc, 0x74, 0x83, + 0xde, 0xa3, 0x7f, 0xda, 0x81, 0x0b, 0x69, 0x31, 0x4f, 0xf6, 0x64, 0xfe, 0xa0, 0xe3, + 0x27, 0x08, 0xec, 0x8f, + ], + Bitcoin::CurrentPrevOutpoint => [ + 0x64, 0x43, 0x39, 0x1b, 0x34, 0x40, 0x86, 0x84, 0x6d, 0x5a, 0x17, 0xa6, 0x2e, 0x3e, + 0x06, 0x28, 0x2a, 0xd6, 0x96, 0x2c, 0x4d, 0xfc, 0xed, 0x2f, 0x6a, 0x83, 0xd0, 0xdf, + 0xbf, 0x6a, 0x5c, 0x54, + ], + Bitcoin::CurrentScriptHash => [ + 0x23, 0x49, 0x8d, 0xd6, 0x64, 0x5e, 0xd1, 0x38, 0xb3, 0x44, 0x93, 0x7c, 0xf6, 0x54, + 0xaa, 0xff, 0xa6, 0x27, 0xf8, 0x5a, 0x47, 0xca, 0xa6, 0x89, 0x54, 0xf1, 0x3f, 0x4c, + 0x6a, 0x4d, 0xc7, 0x72, + ], + Bitcoin::CurrentScriptSigHash => [ + 0x34, 0xa3, 0xc5, 0x5d, 0x14, 0x73, 0x74, 0xd8, 0xf3, 0xa1, 0x76, 0x1b, 0xba, 0xb2, + 0x86, 0x96, 0x84, 0x55, 0x40, 0x4c, 0x2c, 0xa0, 0x3f, 0x69, 0x39, 0x3f, 0x63, 0x39, + 0xd0, 0xf5, 0x8b, 0x59, + ], + Bitcoin::CurrentSequence => [ + 0xc4, 0x9f, 0x76, 0xac, 0x79, 0xf8, 0xf1, 0x5c, 0x40, 0x9b, 0xa8, 0x15, 0xc1, 0x6e, + 0xdc, 0xb8, 0xd1, 0x1e, 0x9a, 0x07, 0x56, 0x5c, 0x8e, 0x09, 0xb6, 0x3e, 0x7f, 0xdf, + 0x31, 0x03, 0x00, 0x9f, + ], + Bitcoin::CurrentValue => [ + 0x91, 0xb9, 0x6e, 0x82, 0x9e, 0x3b, 0x49, 0x72, 0xb0, 0xcb, 0x09, 0x1a, 0x0a, 0x90, + 0x4b, 0xa4, 0x11, 0x33, 0x8a, 0xbf, 0xc0, 0x8d, 0xa7, 0x86, 0xd5, 0xa8, 0x4f, 0x04, + 0x9b, 0x5b, 0xa3, 0xb8, + ], + Bitcoin::Decompress => [ + 0x89, 0x00, 0x56, 0xdf, 0x82, 0x8a, 0x76, 0x6e, 0xe9, 0xf6, 0x56, 0x07, 0x22, 0x1e, + 0x89, 0x46, 0xfa, 0x77, 0xc2, 0x56, 0xbb, 0x96, 0xe2, 0x31, 0xe1, 0x94, 0xd3, 0x00, + 0x8c, 0xf3, 0x56, 0xf6, + ], + Bitcoin::Decrement16 => [ + 0x35, 0xfd, 0xa3, 0x8b, 0x67, 0x2c, 0x38, 0x31, 0xd8, 0xca, 0x11, 0xa4, 0xf3, 0xa9, + 0x59, 0x62, 0x22, 0x52, 0x9e, 0xb1, 0xc1, 0x5f, 0x8c, 0x70, 0x50, 0x13, 0x97, 0x7d, + 0x7d, 0xfb, 0x5d, 0x8b, + ], + Bitcoin::Decrement32 => [ + 0x3b, 0x2b, 0x19, 0x39, 0x55, 0x22, 0x84, 0xf6, 0x14, 0x69, 0x4b, 0xa1, 0x8d, 0xce, + 0x70, 0xce, 0xe4, 0x76, 0xff, 0x42, 0xdc, 0xd0, 0x89, 0xe1, 0xa3, 0xc0, 0xa4, 0x2b, + 0xeb, 0xd1, 0x08, 0xf6, + ], + Bitcoin::Decrement64 => [ + 0x7e, 0xf7, 0xbd, 0xd3, 0x5d, 0xb6, 0x85, 0xae, 0x99, 0x05, 0x53, 0x37, 0x35, 0xa2, + 0xc7, 0xa7, 0xcc, 0xbc, 0x17, 0x08, 0xae, 0x63, 0x6f, 0x93, 0x1b, 0x5c, 0xe0, 0x26, + 0xe5, 0xa1, 0x7f, 0xed, + ], + Bitcoin::Decrement8 => [ + 0xe3, 0x64, 0xf2, 0xe5, 0xc0, 0x8a, 0xe0, 0x11, 0x8e, 0xbe, 0x99, 0x3e, 0x8b, 0x3c, + 0x95, 0x8c, 0x2b, 0xcc, 0x60, 0x62, 0xa3, 0x3b, 0xaa, 0xb9, 0x28, 0xc0, 0x4b, 0x3e, + 0xc9, 0x32, 0xf5, 0x1b, + ], + Bitcoin::DivMod128_64 => [ + 0x9a, 0x94, 0x43, 0xa2, 0xb5, 0x41, 0xe2, 0x9f, 0x27, 0x2f, 0xfd, 0x56, 0x7d, 0x1b, + 0xf7, 0x42, 0xd6, 0x8c, 0xcb, 0xe9, 0x53, 0x8a, 0x87, 0x29, 0x1b, 0x0c, 0xa6, 0x38, + 0x15, 0x63, 0xac, 0x2c, + ], + Bitcoin::DivMod16 => [ + 0x39, 0xbc, 0xb5, 0xc0, 0x1d, 0xc1, 0x80, 0x5c, 0x49, 0x19, 0x89, 0x5c, 0xb5, 0x9e, + 0x8f, 0x3b, 0x41, 0x44, 0x67, 0x17, 0xf7, 0xff, 0x48, 0xfd, 0xc9, 0x37, 0xdd, 0x03, + 0x80, 0x24, 0xa0, 0x8a, + ], + Bitcoin::DivMod32 => [ + 0xfb, 0x12, 0x02, 0xf4, 0xe8, 0x66, 0x3a, 0x87, 0xf5, 0x68, 0x99, 0x2a, 0x18, 0x50, + 0x24, 0xc7, 0x0b, 0x4f, 0x07, 0x9f, 0xbe, 0x95, 0x30, 0x01, 0x0f, 0x6d, 0xb2, 0x84, + 0x21, 0x8a, 0xf6, 0xcd, + ], + Bitcoin::DivMod64 => [ + 0x67, 0x64, 0xdf, 0x5e, 0x2a, 0xa0, 0x30, 0x32, 0x6e, 0xe5, 0x44, 0xc6, 0xe5, 0x3f, + 0xf3, 0x8e, 0xf0, 0xb2, 0x85, 0x17, 0x91, 0x5e, 0xec, 0x65, 0xc7, 0x2e, 0xa5, 0x7a, + 0x12, 0x98, 0x28, 0xeb, + ], + Bitcoin::DivMod8 => [ + 0xd3, 0x00, 0x24, 0x4e, 0x48, 0x0d, 0xd9, 0x74, 0x12, 0x13, 0xe4, 0xcb, 0x0e, 0xba, + 0x83, 0x6d, 0x30, 0x59, 0xe7, 0x78, 0xb8, 0x12, 0x2f, 0x78, 0x90, 0x03, 0x26, 0x73, + 0x73, 0x9c, 0x6a, 0x2c, + ], + Bitcoin::Divide16 => [ + 0x52, 0xab, 0xfe, 0xf1, 0x79, 0x75, 0x4c, 0x90, 0xf9, 0xa4, 0x26, 0x0f, 0x32, 0x3a, + 0x8c, 0xa4, 0x95, 0x15, 0x92, 0x90, 0x2b, 0x8e, 0xcb, 0xd6, 0x4b, 0xa4, 0x26, 0x56, + 0xfa, 0xc0, 0x59, 0x68, + ], + Bitcoin::Divide32 => [ + 0x4a, 0x8a, 0xe5, 0x35, 0x44, 0xe1, 0x47, 0xed, 0x02, 0x25, 0x04, 0x23, 0x79, 0x34, + 0xcc, 0x25, 0x44, 0x79, 0xbc, 0xf9, 0x3d, 0xe1, 0xe1, 0x97, 0x4d, 0xda, 0xb3, 0xbb, + 0x51, 0x6e, 0x60, 0x6c, + ], + Bitcoin::Divide64 => [ + 0xd7, 0x02, 0x5d, 0x05, 0xad, 0xfa, 0xe6, 0x6b, 0x47, 0x10, 0xd0, 0xff, 0x1e, 0x87, + 0xe8, 0x28, 0x15, 0x57, 0x3e, 0x9c, 0xb6, 0x31, 0xb4, 0xc7, 0xd1, 0x3d, 0x2f, 0x1b, + 0xe4, 0xdd, 0x26, 0xd2, + ], + Bitcoin::Divide8 => [ + 0x40, 0xcd, 0x1d, 0xac, 0xea, 0x24, 0x66, 0x9b, 0x6a, 0x58, 0x9b, 0x61, 0x47, 0x54, + 0x74, 0xaf, 0x31, 0xd1, 0x4f, 0x8d, 0x46, 0x87, 0x70, 0x84, 0x52, 0xd3, 0xdf, 0x37, + 0x30, 0x25, 0x31, 0x26, + ], + Bitcoin::Divides16 => [ + 0x10, 0xbb, 0x18, 0x18, 0x0e, 0xab, 0x5b, 0xad, 0xdc, 0x16, 0x5d, 0x03, 0x37, 0xc4, + 0xad, 0xa0, 0x88, 0xe1, 0x57, 0xb1, 0xaa, 0x67, 0x83, 0x34, 0x2a, 0x45, 0x20, 0xa3, + 0x24, 0xdd, 0x9d, 0x2b, + ], + Bitcoin::Divides32 => [ + 0xf5, 0xe8, 0xe7, 0x8c, 0x82, 0x76, 0x9a, 0x48, 0xc9, 0x10, 0x3e, 0x44, 0xdd, 0xb4, + 0x7f, 0x84, 0x1d, 0x76, 0x93, 0xb0, 0x41, 0x9e, 0x5e, 0x7d, 0xa4, 0xe6, 0x8b, 0x78, + 0xb2, 0x37, 0xa5, 0x72, + ], + Bitcoin::Divides64 => [ + 0x9e, 0xbd, 0x55, 0xfa, 0xe4, 0x18, 0x88, 0x5e, 0xea, 0x04, 0xc3, 0xcd, 0xff, 0xf5, + 0x31, 0xb7, 0xd7, 0x14, 0xd0, 0x59, 0x4f, 0xa7, 0xda, 0x87, 0xeb, 0x65, 0x55, 0xd3, + 0x6b, 0x95, 0x3d, 0xb2, + ], + Bitcoin::Divides8 => [ + 0xa2, 0x36, 0xbc, 0x3e, 0x5c, 0xf4, 0xd2, 0x56, 0x40, 0x8b, 0xa3, 0x8c, 0x1e, 0xae, + 0xe7, 0x36, 0x9a, 0x9c, 0x40, 0x2f, 0x74, 0xbc, 0xd1, 0xc8, 0x02, 0xf9, 0x09, 0x4f, + 0xbf, 0x36, 0x80, 0x3d, + ], + Bitcoin::Eq1 => [ + 0x65, 0x49, 0xf9, 0x86, 0x20, 0x3a, 0x64, 0x97, 0x35, 0x6e, 0x43, 0x2b, 0x2a, 0xa1, + 0x60, 0xd6, 0xee, 0x87, 0x0b, 0x11, 0x19, 0x08, 0x65, 0xbd, 0x36, 0xa4, 0x7c, 0xb0, + 0x47, 0x04, 0x33, 0xa5, + ], + Bitcoin::Eq16 => [ + 0x0c, 0x54, 0x02, 0xb0, 0xad, 0xc8, 0xfc, 0x65, 0x70, 0x1b, 0xb7, 0x5b, 0x32, 0x54, + 0xc8, 0x35, 0xf8, 0xfe, 0xc1, 0x30, 0x81, 0xcd, 0x35, 0xe1, 0x32, 0x8f, 0x2b, 0xd7, + 0xdb, 0xd2, 0x3f, 0xa6, + ], + Bitcoin::Eq256 => [ + 0x26, 0x0e, 0x1d, 0x13, 0x6d, 0xd7, 0x44, 0xfc, 0xb0, 0x50, 0x7a, 0x2d, 0x27, 0x70, + 0x27, 0xa7, 0x72, 0x43, 0x54, 0xeb, 0x17, 0x6b, 0x2f, 0xbf, 0x31, 0xc6, 0xc7, 0xd7, + 0xfb, 0x3e, 0xcd, 0x6f, + ], + Bitcoin::Eq32 => [ + 0xf5, 0xd6, 0xed, 0xc8, 0xb6, 0x16, 0x4e, 0x12, 0x5b, 0xbb, 0xef, 0x08, 0xc9, 0xe0, + 0x8a, 0x1e, 0x6f, 0xd4, 0x92, 0xf5, 0xbd, 0xca, 0x6f, 0xdc, 0x8b, 0x5f, 0x5a, 0x6f, + 0x05, 0xc5, 0xab, 0x96, + ], + Bitcoin::Eq64 => [ + 0x1f, 0x93, 0xac, 0xb8, 0x09, 0x2f, 0xa0, 0x6d, 0xea, 0xf3, 0xc3, 0x87, 0xf5, 0x4a, + 0x18, 0xff, 0xea, 0xa6, 0x9a, 0x47, 0xa6, 0xf5, 0xca, 0xf4, 0xae, 0x49, 0x7e, 0x5c, + 0xc2, 0xb3, 0x6c, 0x43, + ], + Bitcoin::Eq8 => [ + 0xd7, 0x52, 0xfa, 0x7f, 0x51, 0x47, 0x30, 0x14, 0xeb, 0xb6, 0x9e, 0x1e, 0x1d, 0x2c, + 0x86, 0xd5, 0x11, 0x48, 0xb6, 0xba, 0xa0, 0x21, 0x37, 0xa4, 0x8f, 0x62, 0xd5, 0x7e, + 0xaf, 0x8d, 0xf1, 0xcd, + ], + Bitcoin::FeAdd => [ + 0xa6, 0xc9, 0x0e, 0x02, 0xfd, 0xe4, 0xee, 0x6e, 0xef, 0x66, 0x67, 0x37, 0x49, 0x2e, + 0x14, 0xaf, 0xc8, 0x76, 0x25, 0x04, 0x97, 0x4a, 0xf5, 0xd5, 0x47, 0x2b, 0xb9, 0x43, + 0x3a, 0xd2, 0xd2, 0x94, + ], + Bitcoin::FeInvert => [ + 0x7c, 0x4a, 0xba, 0xce, 0x33, 0xc7, 0x2b, 0x3b, 0xe1, 0xfd, 0x0e, 0xe3, 0x9f, 0xc6, + 0xcb, 0x3e, 0xe5, 0xc8, 0xf1, 0x1e, 0xf2, 0x19, 0x98, 0xc0, 0x60, 0x2b, 0x52, 0x15, + 0xaa, 0x2a, 0x75, 0xc2, + ], + Bitcoin::FeIsOdd => [ + 0x30, 0xf5, 0x17, 0x1f, 0x58, 0xf1, 0x08, 0x9d, 0x5d, 0xcf, 0xb6, 0xe6, 0x68, 0x3f, + 0x5a, 0xde, 0x98, 0x4c, 0x07, 0x99, 0x76, 0x3c, 0xa7, 0x38, 0x3f, 0x75, 0xdf, 0x1c, + 0xa0, 0x81, 0x3e, 0xfe, + ], + Bitcoin::FeIsZero => [ + 0xb0, 0xb7, 0x4d, 0x86, 0x51, 0xff, 0x55, 0x7c, 0xa9, 0x60, 0x44, 0xdd, 0x97, 0x28, + 0x13, 0x38, 0xa8, 0xf7, 0xd3, 0xac, 0xb3, 0x84, 0x7d, 0x03, 0xac, 0xbf, 0x3d, 0x32, + 0xd9, 0x6f, 0xae, 0x55, + ], + Bitcoin::FeMultiply => [ + 0x50, 0x6b, 0x93, 0x19, 0xc1, 0x7a, 0x14, 0xa9, 0x46, 0x9d, 0x46, 0x27, 0x61, 0xa3, + 0x30, 0x3a, 0xb4, 0x7d, 0xdb, 0x3a, 0x30, 0x79, 0xfb, 0xa3, 0x40, 0x73, 0xaa, 0x55, + 0x42, 0x16, 0xa3, 0x88, + ], + Bitcoin::FeMultiplyBeta => [ + 0x6e, 0x18, 0x0e, 0xea, 0xbe, 0x84, 0x22, 0xb7, 0x99, 0x68, 0xe7, 0x11, 0xdd, 0x00, + 0xa4, 0xb6, 0x57, 0x8b, 0xb2, 0x75, 0xbe, 0xf4, 0x7f, 0xe5, 0xff, 0x96, 0x8f, 0x14, + 0x72, 0xd7, 0x6f, 0x2a, + ], + Bitcoin::FeNegate => [ + 0xd4, 0x37, 0xea, 0x00, 0x33, 0x98, 0x80, 0xb3, 0x83, 0xd8, 0x5f, 0xb2, 0xae, 0xaf, + 0x20, 0x1b, 0xbe, 0x8f, 0xfc, 0x83, 0x70, 0x50, 0x62, 0xf9, 0xc9, 0x68, 0x59, 0x0d, + 0x5d, 0xb3, 0x37, 0xf6, + ], + Bitcoin::FeNormalize => [ + 0xec, 0x0c, 0x3d, 0xd9, 0xc5, 0x28, 0x63, 0x64, 0x78, 0xbe, 0xc0, 0xe1, 0x60, 0xe5, + 0x0a, 0xd9, 0xbf, 0x45, 0x2c, 0x5b, 0x6f, 0x84, 0xe9, 0x40, 0xe1, 0x65, 0x84, 0xeb, + 0x08, 0x5a, 0xce, 0x38, + ], + Bitcoin::FeSquare => [ + 0xb9, 0x04, 0x77, 0x2d, 0x74, 0xa1, 0x85, 0xb8, 0x28, 0xeb, 0x15, 0x47, 0x28, 0xd2, + 0x49, 0xc5, 0x08, 0x47, 0x11, 0xe9, 0xa1, 0x83, 0x2b, 0x89, 0xca, 0xf2, 0xaf, 0x59, + 0xf9, 0x60, 0xe1, 0x18, + ], + Bitcoin::FeSquareRoot => [ + 0x16, 0xfb, 0x9a, 0xce, 0xbe, 0x8b, 0x5b, 0x87, 0xf2, 0xea, 0x7d, 0xb6, 0xaa, 0x3a, + 0x2a, 0xf8, 0x8c, 0xa2, 0xb5, 0x8f, 0x02, 0xcd, 0xc8, 0x7e, 0x7c, 0xe6, 0xbe, 0x0c, + 0x1f, 0xfc, 0xe0, 0x14, + ], + Bitcoin::Fee => [ + 0xfb, 0x9c, 0xa9, 0x39, 0x81, 0x67, 0x3d, 0x1d, 0x23, 0xae, 0xd2, 0x4d, 0x61, 0x2c, + 0x1f, 0x5d, 0xc7, 0xcd, 0x49, 0xf8, 0x6d, 0x34, 0x8e, 0x67, 0xa1, 0x5b, 0xc4, 0xa7, + 0x13, 0x0a, 0xe1, 0x85, + ], + Bitcoin::FullAdd16 => [ + 0xc5, 0x03, 0xb0, 0x78, 0xdd, 0xe3, 0x99, 0xc6, 0x3a, 0xc4, 0xa2, 0x32, 0xbd, 0x2a, + 0x32, 0x9b, 0x04, 0x30, 0x8c, 0x75, 0xea, 0xec, 0x53, 0xa2, 0xf8, 0x89, 0xb8, 0xdf, + 0x0d, 0x03, 0x34, 0x72, + ], + Bitcoin::FullAdd32 => [ + 0xa7, 0xaf, 0xd0, 0x40, 0xfc, 0xb0, 0xb2, 0xf2, 0x71, 0x90, 0x78, 0x1a, 0xe5, 0x3a, + 0x6c, 0xca, 0x00, 0xe9, 0xfe, 0x59, 0x53, 0x11, 0x15, 0xc2, 0x58, 0xcc, 0xb6, 0x9d, + 0x3b, 0xe5, 0xa2, 0x13, + ], + Bitcoin::FullAdd64 => [ + 0x80, 0xa3, 0xef, 0x6c, 0xdb, 0x84, 0xae, 0x7c, 0x8d, 0xbc, 0xf3, 0xa1, 0x84, 0x24, + 0x84, 0xc0, 0x98, 0xdf, 0x6f, 0x19, 0x42, 0x7a, 0x5a, 0x4a, 0xdf, 0xe7, 0x6c, 0xd5, + 0xff, 0x28, 0x36, 0xca, + ], + Bitcoin::FullAdd8 => [ + 0x4b, 0x90, 0x76, 0xb8, 0xc1, 0xad, 0x56, 0xc9, 0xdb, 0x6b, 0xb3, 0xba, 0xf5, 0x93, + 0x89, 0x54, 0x46, 0xce, 0x61, 0xc7, 0x4f, 0x79, 0x7e, 0xb8, 0xb2, 0x30, 0xd2, 0x05, + 0x42, 0x1c, 0x96, 0x17, + ], + Bitcoin::FullDecrement16 => [ + 0xfb, 0xa3, 0xc9, 0x78, 0x6e, 0xa3, 0x07, 0xf6, 0xd8, 0x54, 0x34, 0xfd, 0xa2, 0x56, + 0x24, 0x82, 0x43, 0xa0, 0x0b, 0xac, 0x9a, 0x53, 0x53, 0xb6, 0x1e, 0xd3, 0x9c, 0x60, + 0x55, 0xb6, 0x93, 0xb0, + ], + Bitcoin::FullDecrement32 => [ + 0x62, 0x3d, 0x21, 0xd0, 0x46, 0x79, 0x22, 0xc0, 0x01, 0xc5, 0x65, 0x68, 0x61, 0xd0, + 0xdd, 0xb8, 0x60, 0xc0, 0xc9, 0xa8, 0x6b, 0xd4, 0xcf, 0xdc, 0x37, 0xa1, 0x4c, 0x14, + 0x06, 0xe3, 0x44, 0x6e, + ], + Bitcoin::FullDecrement64 => [ + 0x14, 0x8b, 0x3e, 0xe1, 0xf7, 0x49, 0xea, 0x0b, 0xfb, 0xa7, 0x63, 0xbe, 0xe9, 0x99, + 0xa2, 0x96, 0x77, 0x45, 0x6e, 0xae, 0x9e, 0xf5, 0x3a, 0xd8, 0x78, 0xf8, 0xb6, 0x14, + 0x94, 0xf0, 0x8f, 0x00, + ], + Bitcoin::FullDecrement8 => [ + 0xb4, 0x1a, 0xfe, 0x97, 0x4e, 0xaa, 0x11, 0x82, 0xac, 0x46, 0x10, 0x52, 0x1e, 0x28, + 0x27, 0x81, 0x31, 0x8c, 0xe2, 0x95, 0xa3, 0xf2, 0x3f, 0x0b, 0x87, 0x6a, 0xe2, 0x69, + 0x67, 0x3f, 0xb1, 0xdf, + ], + Bitcoin::FullIncrement16 => [ + 0xa6, 0x8e, 0xcc, 0xdb, 0x9e, 0xad, 0x29, 0x26, 0xc3, 0xe4, 0x5b, 0x4b, 0xae, 0x43, + 0x1c, 0xc4, 0x66, 0xd5, 0x8b, 0x8f, 0xac, 0xc9, 0x5a, 0x1b, 0x48, 0x44, 0xb9, 0x12, + 0xdf, 0x56, 0x76, 0xdf, + ], + Bitcoin::FullIncrement32 => [ + 0xd0, 0xeb, 0x0e, 0x94, 0xa5, 0xc2, 0x57, 0x13, 0xeb, 0x94, 0x4c, 0xad, 0x4d, 0x70, + 0x1c, 0x6a, 0x96, 0x88, 0x09, 0xbc, 0x1a, 0xf9, 0x03, 0xfd, 0xb1, 0x1e, 0x6f, 0xad, + 0x0b, 0xb3, 0x1b, 0x10, + ], + Bitcoin::FullIncrement64 => [ + 0xc0, 0x03, 0xd2, 0xe9, 0xb0, 0xa5, 0x10, 0xc2, 0xdd, 0x78, 0x3e, 0x7d, 0x64, 0xeb, + 0x87, 0xb3, 0x38, 0x55, 0xd3, 0x29, 0x90, 0xdf, 0xc2, 0x86, 0x26, 0x6e, 0x47, 0x8d, + 0xa4, 0xe7, 0x47, 0x91, + ], + Bitcoin::FullIncrement8 => [ + 0x0b, 0xea, 0x24, 0x29, 0x18, 0xf2, 0xdd, 0x17, 0x64, 0x77, 0x78, 0x11, 0xe4, 0x44, + 0x28, 0x63, 0x93, 0x52, 0x25, 0xb0, 0xf8, 0xb2, 0x39, 0xc2, 0x37, 0x52, 0xf9, 0xd8, + 0x53, 0x92, 0xa1, 0x39, + ], + Bitcoin::FullLeftShift16_1 => [ + 0xb3, 0x66, 0xa8, 0x16, 0x92, 0x2f, 0xc4, 0x55, 0x01, 0x0f, 0xe8, 0x8a, 0x5f, 0x6a, + 0x5c, 0xf2, 0xce, 0xa9, 0x17, 0xe1, 0x2b, 0xd1, 0x40, 0xae, 0x6d, 0x43, 0xb6, 0x41, + 0xe5, 0x7f, 0x42, 0xb3, + ], + Bitcoin::FullLeftShift16_2 => [ + 0x27, 0x96, 0x0d, 0x0d, 0xf2, 0xfb, 0xbc, 0x38, 0x99, 0x3d, 0x86, 0xfb, 0x8f, 0x0c, + 0xd2, 0xc3, 0x43, 0x4e, 0xdb, 0x11, 0x04, 0x82, 0x13, 0xc1, 0x41, 0x18, 0x93, 0xca, + 0x99, 0x33, 0xb2, 0xee, + ], + Bitcoin::FullLeftShift16_4 => [ + 0x65, 0x51, 0x37, 0xbe, 0xc5, 0xc0, 0x36, 0x8f, 0x29, 0xbc, 0x99, 0x2c, 0x88, 0x42, + 0x1a, 0x15, 0x98, 0x56, 0x40, 0x39, 0x7b, 0x61, 0x7f, 0xc4, 0x8d, 0x33, 0x21, 0x0f, + 0xc0, 0x05, 0x3a, 0xd1, + ], + Bitcoin::FullLeftShift16_8 => [ + 0x16, 0x8f, 0x57, 0x6a, 0xa5, 0x6e, 0xa4, 0x7e, 0x07, 0x06, 0x46, 0xe7, 0x88, 0x96, + 0xbe, 0xb2, 0x49, 0x8b, 0x1a, 0xe6, 0xb1, 0xff, 0x9c, 0x78, 0x62, 0x70, 0xe9, 0x55, + 0x65, 0x84, 0x19, 0x29, + ], + Bitcoin::FullLeftShift32_1 => [ + 0xd7, 0xcd, 0x52, 0x24, 0x49, 0x11, 0x8e, 0x81, 0x00, 0xa7, 0x66, 0x2f, 0x4d, 0xf0, + 0x39, 0xf8, 0xca, 0xeb, 0xf4, 0x33, 0xeb, 0x03, 0x9e, 0xdc, 0x42, 0xe8, 0x82, 0x37, + 0x92, 0xcc, 0xea, 0x8a, + ], + Bitcoin::FullLeftShift32_16 => [ + 0x8b, 0xd8, 0x0d, 0x4d, 0x2f, 0x8b, 0x22, 0x46, 0xc1, 0x23, 0x15, 0xc4, 0x28, 0x41, + 0xb4, 0xe4, 0x0a, 0x71, 0xae, 0x76, 0x96, 0x6a, 0x08, 0x95, 0x4d, 0x66, 0x6b, 0x86, + 0x32, 0x86, 0x74, 0x37, + ], + Bitcoin::FullLeftShift32_2 => [ + 0x13, 0x06, 0x3d, 0x62, 0x93, 0x83, 0x29, 0x31, 0x1f, 0xb7, 0xda, 0xbb, 0x15, 0xc3, + 0xfe, 0x58, 0xc2, 0x88, 0x76, 0x83, 0x00, 0x97, 0xec, 0xc6, 0xbf, 0xdd, 0x48, 0x0b, + 0xe1, 0x98, 0x81, 0x46, + ], + Bitcoin::FullLeftShift32_4 => [ + 0x25, 0xa1, 0xb5, 0xdd, 0xe5, 0xdb, 0x28, 0x4e, 0x8a, 0x88, 0x21, 0x26, 0x7c, 0x26, + 0x53, 0x01, 0x14, 0xbb, 0xe6, 0x71, 0xcf, 0xaf, 0xb4, 0x4a, 0x60, 0xd7, 0x50, 0x27, + 0x67, 0xdb, 0x78, 0x2e, + ], + Bitcoin::FullLeftShift32_8 => [ + 0xce, 0x54, 0x70, 0xaf, 0xbf, 0xad, 0xbf, 0xba, 0x68, 0xf9, 0xb2, 0xd5, 0xb0, 0x64, + 0x5a, 0x44, 0x08, 0xbe, 0x6f, 0x85, 0xa6, 0x9c, 0x7f, 0x09, 0xd0, 0x96, 0x45, 0x53, + 0x68, 0x04, 0x87, 0x64, + ], + Bitcoin::FullLeftShift64_1 => [ + 0x05, 0x1f, 0x36, 0x05, 0x86, 0xc3, 0x79, 0xac, 0x2c, 0xe3, 0x99, 0xcb, 0xeb, 0x68, + 0x7e, 0x77, 0x53, 0xb1, 0x5d, 0x73, 0x03, 0xdd, 0x31, 0x6c, 0xbd, 0x12, 0x30, 0x12, + 0x08, 0x7c, 0xc6, 0x6f, + ], + Bitcoin::FullLeftShift64_16 => [ + 0xb2, 0x48, 0xbe, 0x4d, 0xfc, 0xb8, 0x8c, 0x5d, 0x89, 0xb1, 0xca, 0x61, 0x86, 0xa0, + 0x41, 0xe9, 0x02, 0xb4, 0xc8, 0xa6, 0x2b, 0xb1, 0x6e, 0x09, 0xfe, 0x15, 0x61, 0x6e, + 0x0e, 0x3a, 0xbd, 0x6d, + ], + Bitcoin::FullLeftShift64_2 => [ + 0x34, 0xbb, 0x51, 0x62, 0x6b, 0x1d, 0x6b, 0x89, 0x7a, 0xbc, 0x15, 0x5d, 0x03, 0x4f, + 0xe0, 0x66, 0x3a, 0x0e, 0xc0, 0xfd, 0x8f, 0x64, 0x0e, 0x5f, 0xe1, 0xbf, 0x3c, 0xb7, + 0x67, 0x0a, 0x29, 0x25, + ], + Bitcoin::FullLeftShift64_32 => [ + 0x9d, 0xac, 0x8c, 0xd7, 0xfd, 0x8b, 0x48, 0x88, 0x9e, 0x55, 0xc5, 0xaa, 0x12, 0xfe, + 0x97, 0xb7, 0x29, 0xfe, 0xbc, 0x04, 0x1a, 0x9f, 0xff, 0x44, 0xc4, 0xd9, 0xb6, 0xf1, + 0xe0, 0x7e, 0xb4, 0x42, + ], + Bitcoin::FullLeftShift64_4 => [ + 0x94, 0xb7, 0x3d, 0xad, 0xc3, 0xee, 0xeb, 0x2e, 0xe4, 0xa4, 0xd4, 0x44, 0xdd, 0x0f, + 0x72, 0xac, 0x30, 0x62, 0x01, 0xf2, 0xff, 0xcf, 0x71, 0x4b, 0x8e, 0xbe, 0x79, 0x82, + 0x74, 0x4c, 0x0c, 0x7e, + ], + Bitcoin::FullLeftShift64_8 => [ + 0x0e, 0xf7, 0x14, 0x75, 0x7e, 0xcf, 0x11, 0xca, 0x3c, 0x73, 0xce, 0x25, 0xef, 0x24, + 0xee, 0x72, 0x95, 0xdd, 0x41, 0x71, 0xcc, 0x16, 0x28, 0x7f, 0xe6, 0x97, 0x1b, 0xd6, + 0x7b, 0x47, 0x8b, 0x46, + ], + Bitcoin::FullLeftShift8_1 => [ + 0x9b, 0xfa, 0x48, 0xb7, 0xad, 0x51, 0x00, 0x91, 0xba, 0x60, 0x85, 0x44, 0x62, 0xd8, + 0x59, 0xef, 0xd1, 0xa2, 0xaa, 0x18, 0x73, 0x1b, 0x5f, 0x0c, 0x9e, 0x2b, 0xa4, 0xd8, + 0x9d, 0x3a, 0xa8, 0x43, + ], + Bitcoin::FullLeftShift8_2 => [ + 0x79, 0x7c, 0x20, 0x87, 0x01, 0xb2, 0xa4, 0xe1, 0x04, 0x9e, 0x83, 0xd6, 0x95, 0xf5, + 0x54, 0xb9, 0x84, 0xf5, 0xdb, 0x28, 0x21, 0x52, 0x55, 0x58, 0x7c, 0x37, 0x34, 0x21, + 0x51, 0xb7, 0x24, 0x1d, + ], + Bitcoin::FullLeftShift8_4 => [ + 0x37, 0xbd, 0xac, 0x91, 0x53, 0x8f, 0x22, 0x19, 0xcb, 0x89, 0xdf, 0x0e, 0xf9, 0xf1, + 0x97, 0xcd, 0x68, 0x03, 0x1f, 0x27, 0x67, 0xe8, 0x94, 0xf0, 0x01, 0xc2, 0x6f, 0xff, + 0x5e, 0xeb, 0x58, 0xcd, + ], + Bitcoin::FullMultiply16 => [ + 0x09, 0xba, 0xff, 0x92, 0x1e, 0x9f, 0x14, 0xd1, 0x20, 0x8d, 0x1d, 0xd8, 0x26, 0x4c, + 0xf1, 0xf3, 0xb8, 0x54, 0xc9, 0xaf, 0x21, 0xf7, 0x78, 0xb2, 0xb5, 0x5a, 0x8a, 0x42, + 0x6d, 0xfe, 0x89, 0x28, + ], + Bitcoin::FullMultiply32 => [ + 0x10, 0xc4, 0xb8, 0xc4, 0xc0, 0xac, 0xd9, 0x73, 0x90, 0xf8, 0x5c, 0xb3, 0xf5, 0xff, + 0xe3, 0x6a, 0x29, 0x20, 0x37, 0xc1, 0x90, 0xee, 0xba, 0xb3, 0xe9, 0x89, 0x34, 0xfe, + 0x93, 0xb2, 0xed, 0x90, + ], + Bitcoin::FullMultiply64 => [ + 0x2d, 0xb1, 0x9d, 0xba, 0x90, 0xef, 0x86, 0x7b, 0x5a, 0x3e, 0x91, 0x4b, 0x89, 0xfd, + 0xa2, 0xda, 0x63, 0x7c, 0xa8, 0x0c, 0x42, 0x67, 0xe1, 0x98, 0x18, 0x37, 0xee, 0x3c, + 0x6f, 0xe3, 0xda, 0xf5, + ], + Bitcoin::FullMultiply8 => [ + 0x7f, 0x46, 0xee, 0x72, 0x84, 0xf3, 0x9e, 0x73, 0x42, 0x75, 0xa2, 0x50, 0x9a, 0x0b, + 0x73, 0x7e, 0xd9, 0x39, 0x11, 0x5f, 0x02, 0x19, 0xa5, 0x74, 0xd4, 0x69, 0xcd, 0x30, + 0xb8, 0x19, 0xef, 0xe3, + ], + Bitcoin::FullRightShift16_1 => [ + 0x7e, 0xbe, 0x0c, 0x66, 0xc3, 0xc7, 0xdc, 0x16, 0xa5, 0x46, 0x9e, 0x91, 0x79, 0x09, + 0x84, 0x17, 0xac, 0x5f, 0x20, 0xa3, 0x9c, 0xc4, 0x1a, 0xc3, 0x82, 0xfb, 0x1d, 0xbd, + 0x98, 0xe8, 0xe3, 0x0f, + ], + Bitcoin::FullRightShift16_2 => [ + 0x8d, 0xb0, 0xc2, 0x16, 0x19, 0xc6, 0x2d, 0x63, 0xd4, 0xc2, 0x7b, 0xfc, 0xf6, 0x47, + 0xd7, 0x09, 0xce, 0x37, 0xbe, 0xd0, 0x57, 0x18, 0xe9, 0x3e, 0x45, 0x15, 0xe2, 0x9e, + 0xf3, 0x73, 0x0c, 0xf4, + ], + Bitcoin::FullRightShift16_4 => [ + 0x5c, 0x74, 0xb1, 0x32, 0x06, 0x31, 0x79, 0x17, 0xe0, 0x70, 0xe5, 0xfc, 0x1c, 0x82, + 0xf4, 0xc5, 0xc2, 0xfb, 0xe9, 0xf3, 0x1b, 0x81, 0x29, 0x46, 0xba, 0x23, 0x0d, 0x8c, + 0x94, 0xd4, 0x06, 0x16, + ], + Bitcoin::FullRightShift16_8 => [ + 0x11, 0x05, 0x81, 0x8a, 0xc9, 0x48, 0xd7, 0xbb, 0x63, 0x47, 0x07, 0xe6, 0x9d, 0xbf, + 0x1f, 0x67, 0x90, 0x58, 0xa1, 0x3d, 0x35, 0xfa, 0xc2, 0xa6, 0x4d, 0xf9, 0x72, 0x62, + 0xf2, 0x42, 0xb6, 0x3b, + ], + Bitcoin::FullRightShift32_1 => [ + 0x9b, 0x42, 0xc8, 0xf3, 0x3b, 0xc5, 0x75, 0x0e, 0x2a, 0x83, 0xaa, 0xdb, 0xf2, 0x9c, + 0xc7, 0xfc, 0xb9, 0x50, 0xfe, 0x5a, 0x40, 0xaa, 0x0e, 0xc5, 0x24, 0x52, 0xe5, 0x33, + 0xf8, 0x25, 0xa1, 0x15, + ], + Bitcoin::FullRightShift32_16 => [ + 0x0a, 0xe5, 0x65, 0x9c, 0x2f, 0xa7, 0x57, 0x94, 0x78, 0xeb, 0xd5, 0x7c, 0x4c, 0x98, + 0xae, 0xe7, 0x77, 0x01, 0x56, 0x45, 0xb2, 0x84, 0x31, 0x81, 0x64, 0xfc, 0xbd, 0x30, + 0x65, 0xfc, 0x87, 0x3c, + ], + Bitcoin::FullRightShift32_2 => [ + 0x57, 0xfb, 0x1c, 0x03, 0xc2, 0xeb, 0x17, 0xf6, 0x23, 0x47, 0x87, 0x34, 0xfd, 0x69, + 0x37, 0xf9, 0xe3, 0xef, 0x02, 0x7c, 0x15, 0x60, 0x03, 0x8f, 0xa6, 0x06, 0x69, 0x05, + 0x17, 0x89, 0xe3, 0x68, + ], + Bitcoin::FullRightShift32_4 => [ + 0x85, 0x82, 0xcd, 0xfa, 0x74, 0xef, 0x46, 0x6b, 0x81, 0x27, 0xb1, 0x97, 0x88, 0x13, + 0x45, 0x93, 0x99, 0x8e, 0x49, 0x69, 0x00, 0xb3, 0x8f, 0x0f, 0x3d, 0x37, 0x58, 0x18, + 0xd6, 0x73, 0x45, 0x1e, + ], + Bitcoin::FullRightShift32_8 => [ + 0xd9, 0x05, 0x93, 0x2e, 0xbf, 0xca, 0x2a, 0x38, 0x61, 0x9d, 0x80, 0x7e, 0x28, 0xff, + 0x2e, 0x0d, 0x3b, 0xe0, 0x8a, 0x26, 0x06, 0x76, 0xd2, 0x57, 0xef, 0xa0, 0x40, 0xc3, + 0x05, 0xaa, 0xdc, 0x33, + ], + Bitcoin::FullRightShift64_1 => [ + 0x3c, 0x15, 0x20, 0x9b, 0x99, 0xd2, 0x84, 0x5e, 0x22, 0x5e, 0x14, 0xe1, 0xe9, 0xe5, + 0xe6, 0xa4, 0x87, 0x8b, 0xc8, 0xce, 0xa3, 0xf9, 0xf3, 0x6b, 0x8b, 0x53, 0x5a, 0xc6, + 0x83, 0xe2, 0x9d, 0x00, + ], + Bitcoin::FullRightShift64_16 => [ + 0x02, 0x85, 0x25, 0x7b, 0x09, 0x0d, 0x8d, 0xa1, 0x28, 0xef, 0x64, 0xa8, 0x0c, 0x8d, + 0x16, 0xfd, 0xc3, 0xbf, 0x5c, 0xe5, 0x0f, 0xcd, 0x56, 0xfe, 0xc5, 0xf9, 0x02, 0x55, + 0xd9, 0xc8, 0xdf, 0x47, + ], + Bitcoin::FullRightShift64_2 => [ + 0x7e, 0xc2, 0xdd, 0x65, 0xc9, 0xe0, 0x13, 0xe3, 0xe4, 0xce, 0x90, 0xfb, 0xeb, 0x3f, + 0xb1, 0xc7, 0x8c, 0xcc, 0x5d, 0x2a, 0x7d, 0x26, 0xd8, 0xaf, 0x77, 0xf9, 0x9d, 0xe8, + 0x4c, 0xf7, 0x29, 0x73, + ], + Bitcoin::FullRightShift64_32 => [ + 0x35, 0x6f, 0x7d, 0xd4, 0x6b, 0xa3, 0x3f, 0x84, 0xb0, 0x66, 0x72, 0xfd, 0xe9, 0xa2, + 0x97, 0x2e, 0x80, 0xf3, 0xea, 0x96, 0x5a, 0xe8, 0xbc, 0x0b, 0xff, 0x67, 0xaa, 0x2f, + 0x69, 0xf1, 0x0b, 0x56, + ], + Bitcoin::FullRightShift64_4 => [ + 0x05, 0x46, 0x4a, 0x33, 0x35, 0xaf, 0xbb, 0x09, 0xd0, 0x46, 0x82, 0x8a, 0x92, 0x2c, + 0x4d, 0xa0, 0xec, 0xee, 0xb1, 0x09, 0x77, 0xe4, 0x68, 0x01, 0xc9, 0x3c, 0xdd, 0x66, + 0x8f, 0x22, 0xee, 0x63, + ], + Bitcoin::FullRightShift64_8 => [ + 0x70, 0x17, 0x2e, 0x1a, 0x69, 0x48, 0xbf, 0x40, 0x12, 0x0e, 0x68, 0xfb, 0x8b, 0x4b, + 0x23, 0xbc, 0x35, 0x5a, 0x12, 0x00, 0x2c, 0xcc, 0x1d, 0xb6, 0x47, 0xc8, 0x9b, 0x12, + 0xd1, 0x0e, 0xc5, 0x06, + ], + Bitcoin::FullRightShift8_1 => [ + 0x56, 0x69, 0xdb, 0xfc, 0xc6, 0x33, 0xec, 0x0b, 0xdf, 0x59, 0xe2, 0x2f, 0x03, 0xed, + 0x4b, 0x64, 0x19, 0x20, 0x95, 0xf5, 0xdf, 0x20, 0xff, 0xc1, 0x2d, 0xd9, 0x0d, 0x7c, + 0xda, 0x11, 0x37, 0x4f, + ], + Bitcoin::FullRightShift8_2 => [ + 0x1f, 0x94, 0x43, 0x61, 0x09, 0xdf, 0x52, 0xb3, 0x45, 0xfa, 0x3a, 0x89, 0xac, 0x2a, + 0x49, 0xed, 0xc9, 0xd2, 0x85, 0xf2, 0x1f, 0x45, 0xed, 0x11, 0xd7, 0x75, 0xf7, 0xf7, + 0xf3, 0x9d, 0x3e, 0x8f, + ], + Bitcoin::FullRightShift8_4 => [ + 0x71, 0x46, 0x98, 0xa2, 0x76, 0x84, 0xb5, 0xba, 0xa6, 0xb6, 0x48, 0x0e, 0xe3, 0xb2, + 0x57, 0xcb, 0xb7, 0xcd, 0xab, 0x74, 0x72, 0xf3, 0x71, 0xa6, 0x27, 0x06, 0x18, 0xc0, + 0xab, 0x12, 0x90, 0x8b, + ], + Bitcoin::FullSubtract16 => [ + 0x40, 0x09, 0x61, 0x52, 0xb5, 0x4e, 0x74, 0x25, 0x45, 0x55, 0xa6, 0x5d, 0xcc, 0xc6, + 0x29, 0xdf, 0x57, 0xb9, 0x79, 0xc8, 0x47, 0x00, 0x54, 0x50, 0x36, 0xfe, 0x19, 0x0a, + 0x6a, 0xf3, 0xd3, 0x8a, + ], + Bitcoin::FullSubtract32 => [ + 0xe7, 0x93, 0x0d, 0x64, 0x35, 0xa9, 0x68, 0x0b, 0xef, 0xb4, 0x9d, 0xb7, 0xd8, 0x7c, + 0x2f, 0x50, 0xaf, 0xd4, 0x6d, 0x98, 0x88, 0x0d, 0xed, 0x50, 0xe5, 0x05, 0x5f, 0xa3, + 0x09, 0xe1, 0xaf, 0xca, + ], + Bitcoin::FullSubtract64 => [ + 0xff, 0x28, 0x1d, 0xf8, 0xc4, 0x2a, 0x31, 0x59, 0xd9, 0xff, 0xa9, 0x25, 0x16, 0xca, + 0x89, 0x3e, 0x23, 0xb0, 0xeb, 0x93, 0x8b, 0x4c, 0xb0, 0xb3, 0xf1, 0x34, 0x46, 0x8e, + 0x9f, 0x4e, 0xbc, 0x46, + ], + Bitcoin::FullSubtract8 => [ + 0x7e, 0x3d, 0xcf, 0xe4, 0x56, 0xae, 0x3c, 0x5c, 0x87, 0xde, 0xbf, 0x04, 0x71, 0x89, + 0xc2, 0x74, 0x82, 0xa4, 0xff, 0x4e, 0x8c, 0xfd, 0x1f, 0x17, 0x30, 0xc8, 0x7d, 0x2b, + 0x7b, 0xff, 0x73, 0xba, + ], + Bitcoin::GeIsOnCurve => [ + 0x7d, 0x44, 0x87, 0x19, 0xf5, 0xf9, 0x57, 0x2b, 0xf5, 0x40, 0x2e, 0x12, 0xd1, 0x93, + 0xaf, 0xf6, 0x77, 0x48, 0x2d, 0x66, 0xff, 0x3d, 0xcf, 0x27, 0x48, 0xf2, 0x5c, 0x6b, + 0x73, 0x77, 0x02, 0x8c, + ], + Bitcoin::GeNegate => [ + 0x3d, 0x2c, 0x8d, 0xe4, 0xc7, 0x01, 0x5f, 0xd3, 0x13, 0x26, 0x95, 0xfd, 0x66, 0xdf, + 0xcf, 0x0f, 0x17, 0x78, 0xc7, 0x91, 0x85, 0x26, 0x8e, 0x9f, 0xae, 0x77, 0x89, 0xda, + 0x53, 0x8e, 0xca, 0x59, + ], + Bitcoin::GejAdd => [ + 0x45, 0xba, 0x7f, 0x3d, 0x1e, 0x1e, 0x6d, 0x34, 0x9f, 0xcf, 0x86, 0x98, 0x7b, 0x0e, + 0x7f, 0x7a, 0xce, 0x66, 0x2e, 0x82, 0x20, 0x1d, 0x35, 0x02, 0x60, 0x45, 0x4e, 0x2f, + 0xfe, 0xec, 0xb5, 0x4d, + ], + Bitcoin::GejDouble => [ + 0x23, 0xe9, 0x78, 0xf3, 0x41, 0x54, 0x11, 0x9b, 0xde, 0xfc, 0x5d, 0x13, 0xfc, 0xfd, + 0x0a, 0x34, 0xa7, 0x5e, 0x37, 0x26, 0xd6, 0xcb, 0x25, 0x81, 0x33, 0x70, 0xad, 0x7d, + 0x9d, 0xe5, 0xe1, 0x33, + ], + Bitcoin::GejEquiv => [ + 0xb9, 0x4b, 0x2a, 0xac, 0x73, 0xa6, 0x7f, 0x44, 0x95, 0x85, 0x99, 0x13, 0x4d, 0xe2, + 0x30, 0x17, 0x9e, 0x9d, 0x6b, 0xb6, 0x47, 0xfd, 0x06, 0x11, 0x15, 0x8a, 0xab, 0xa7, + 0x0b, 0x73, 0xe4, 0x00, + ], + Bitcoin::GejGeAdd => [ + 0xf1, 0x16, 0x0b, 0x6f, 0x5e, 0xe2, 0xc5, 0x82, 0xe4, 0x95, 0x66, 0xe6, 0xc3, 0x86, + 0xb3, 0x80, 0x94, 0xab, 0xc1, 0xa7, 0x18, 0x2d, 0x33, 0xa1, 0x50, 0x1f, 0xa2, 0xaa, + 0xf0, 0x0a, 0xf3, 0xea, + ], + Bitcoin::GejGeAddEx => [ + 0xc3, 0xd7, 0x34, 0x7f, 0xfe, 0x2d, 0x9c, 0x83, 0x9a, 0xac, 0x56, 0x7e, 0x29, 0x98, + 0xe0, 0x16, 0xaf, 0x39, 0x4e, 0x2a, 0x19, 0x29, 0x31, 0x4b, 0x52, 0xe3, 0x1e, 0xed, + 0x67, 0x8e, 0x30, 0xbf, + ], + Bitcoin::GejGeEquiv => [ + 0x27, 0xc2, 0x99, 0x69, 0x13, 0x9f, 0x8d, 0x57, 0xed, 0xc9, 0x89, 0x5c, 0x30, 0x40, + 0x3d, 0xf0, 0x15, 0xc5, 0x0c, 0xe7, 0x21, 0xc3, 0x81, 0xfb, 0x19, 0x7c, 0x0c, 0x04, + 0x03, 0xf1, 0xdb, 0x0c, + ], + Bitcoin::GejInfinity => [ + 0xaa, 0xfb, 0x93, 0x80, 0xd6, 0x1a, 0x7f, 0x14, 0x78, 0x46, 0x80, 0x6b, 0x2c, 0xc3, + 0x74, 0xfb, 0xe8, 0x2d, 0xd1, 0xae, 0xd4, 0x85, 0xb9, 0x8a, 0x0f, 0x16, 0x4b, 0x3a, + 0x54, 0xc2, 0xc0, 0xb0, + ], + Bitcoin::GejIsInfinity => [ + 0xdb, 0x49, 0x5f, 0xd1, 0x31, 0x42, 0xe9, 0xb3, 0x37, 0x63, 0xfc, 0x6d, 0x48, 0xd2, + 0xfb, 0x0e, 0x71, 0xb0, 0xd9, 0xd9, 0x9b, 0xd7, 0x26, 0xf4, 0x7a, 0xd1, 0x3f, 0xc5, + 0x56, 0x06, 0x70, 0xa2, + ], + Bitcoin::GejIsOnCurve => [ + 0xbf, 0x4c, 0xa1, 0x3f, 0xf2, 0x12, 0xe3, 0x4b, 0xf1, 0x7d, 0x90, 0xc1, 0x2e, 0x45, + 0x3d, 0x08, 0xac, 0x7d, 0xaa, 0x4a, 0x47, 0xd5, 0x7e, 0x85, 0xb4, 0x3f, 0x2d, 0x43, + 0x66, 0xd4, 0x3d, 0xda, + ], + Bitcoin::GejNegate => [ + 0x01, 0xbd, 0x1a, 0x35, 0x1f, 0xb8, 0x16, 0x4c, 0x81, 0x3d, 0x91, 0x6d, 0x07, 0x77, + 0x49, 0x99, 0x6b, 0x7d, 0xb1, 0x18, 0xd3, 0x15, 0x86, 0xca, 0x9d, 0x75, 0xe7, 0x56, + 0x35, 0x18, 0xf4, 0x54, + ], + Bitcoin::GejNormalize => [ + 0xec, 0x59, 0x7d, 0x17, 0xe2, 0xef, 0xb6, 0xd2, 0xa0, 0x02, 0xd5, 0x0e, 0x67, 0x75, + 0x27, 0xd3, 0xd4, 0xa2, 0x90, 0x7a, 0x11, 0x9d, 0x68, 0xf1, 0x22, 0x84, 0xb9, 0xa1, + 0xb0, 0xd2, 0x30, 0x3a, + ], + Bitcoin::GejRescale => [ + 0x29, 0x77, 0xd9, 0x53, 0xef, 0x7a, 0x11, 0x56, 0xce, 0xc6, 0xdb, 0x2d, 0xc2, 0x92, + 0x54, 0x12, 0x75, 0xcb, 0xc8, 0x2f, 0xb8, 0x29, 0xfd, 0x67, 0x1b, 0x97, 0x2e, 0x89, + 0xeb, 0xed, 0x0c, 0x24, + ], + Bitcoin::GejXEquiv => [ + 0xf9, 0xf1, 0x89, 0xfc, 0x00, 0xb6, 0x1f, 0x72, 0xf1, 0x0b, 0xaa, 0xa2, 0x1b, 0xcd, + 0x88, 0xe5, 0xd2, 0x2e, 0x0a, 0xa9, 0xb7, 0x50, 0x9a, 0xe1, 0x62, 0xa1, 0x83, 0xa4, + 0xb6, 0x64, 0xa4, 0xaf, + ], + Bitcoin::GejYIsOdd => [ + 0x9e, 0xb6, 0xe4, 0x53, 0x5f, 0xb6, 0x9b, 0xf6, 0x09, 0x91, 0x65, 0x99, 0xf1, 0x34, + 0x5a, 0xd7, 0x73, 0x5d, 0xa3, 0xf3, 0x94, 0x8d, 0x06, 0x86, 0x90, 0x8e, 0x44, 0xf4, + 0x5b, 0x2f, 0xf6, 0x0c, + ], + Bitcoin::Generate => [ + 0x14, 0x88, 0x85, 0xac, 0x73, 0x81, 0x31, 0x13, 0xc5, 0x23, 0xe8, 0x09, 0xbe, 0xa4, + 0x7f, 0xfd, 0x8b, 0x1d, 0xaf, 0x37, 0x8d, 0x9d, 0xd5, 0x4b, 0xf9, 0x66, 0xcc, 0xb8, + 0x83, 0xb1, 0xa9, 0x84, + ], + Bitcoin::HashToCurve => [ + 0xef, 0x4f, 0x54, 0x8b, 0x3c, 0x6c, 0x75, 0x17, 0x5f, 0x2c, 0xe2, 0xd1, 0x99, 0x3b, + 0x2d, 0x19, 0x9b, 0xeb, 0x16, 0xc0, 0xa1, 0x40, 0x17, 0x5c, 0x48, 0xa1, 0x27, 0x7e, + 0xfc, 0x43, 0xa9, 0x9b, + ], + Bitcoin::High1 => [ + 0xb1, 0x09, 0xcf, 0x1c, 0xce, 0x35, 0xf7, 0xe9, 0xb6, 0x49, 0x67, 0x1a, 0x9b, 0x45, + 0xdb, 0xc2, 0x40, 0x99, 0xa7, 0x13, 0xae, 0xb9, 0xa8, 0x9c, 0xc4, 0xcf, 0x6e, 0xf6, + 0xed, 0x8b, 0x30, 0x8b, + ], + Bitcoin::High16 => [ + 0x03, 0x5d, 0xad, 0xd9, 0xd7, 0xbf, 0x74, 0x33, 0x64, 0x45, 0xe7, 0x1d, 0xdc, 0x4d, + 0x82, 0x02, 0x24, 0xff, 0x7e, 0x38, 0xe0, 0xb8, 0xd5, 0x2b, 0xec, 0x97, 0x29, 0xb5, + 0x72, 0xb5, 0x31, 0xf9, + ], + Bitcoin::High32 => [ + 0xc5, 0xf1, 0xdf, 0x0d, 0x64, 0xa2, 0x73, 0x7a, 0x63, 0x1b, 0x3a, 0xae, 0x8f, 0x26, + 0x0e, 0x8b, 0x8d, 0xc1, 0x95, 0x7b, 0xd0, 0x92, 0x91, 0x1b, 0x91, 0xd2, 0x07, 0x8a, + 0xd2, 0x1e, 0x41, 0x8a, + ], + Bitcoin::High64 => [ + 0xa3, 0x12, 0x63, 0x3e, 0x0a, 0x23, 0x05, 0xe6, 0x9b, 0x3f, 0x34, 0x1d, 0x91, 0xd6, + 0x83, 0xdd, 0x94, 0x19, 0x6a, 0x2f, 0x90, 0x05, 0xc9, 0xb1, 0x87, 0x2a, 0x2c, 0x15, + 0xad, 0x46, 0xcf, 0x17, + ], + Bitcoin::High8 => [ + 0xcb, 0xd7, 0x8d, 0x50, 0xaf, 0x77, 0x99, 0x85, 0x5a, 0xdc, 0x49, 0x03, 0xdb, 0xbe, + 0xfc, 0x13, 0x45, 0xd5, 0x14, 0x84, 0xf0, 0x3d, 0x3c, 0x75, 0x5c, 0xaa, 0xa5, 0xca, + 0xa9, 0x7d, 0x4a, 0x14, + ], + Bitcoin::Increment16 => [ + 0x86, 0x77, 0x49, 0x49, 0x39, 0xb2, 0x7b, 0x86, 0xcb, 0x5a, 0x8c, 0x7f, 0x81, 0x72, + 0xad, 0x55, 0x50, 0x95, 0x31, 0xc9, 0xb0, 0xe1, 0x1e, 0x99, 0x75, 0x7e, 0x29, 0x6c, + 0xc3, 0xc7, 0xc1, 0x92, + ], + Bitcoin::Increment32 => [ + 0x6b, 0xdb, 0xab, 0x7c, 0xfc, 0x16, 0xc5, 0x03, 0x36, 0x3c, 0x2f, 0x07, 0x7e, 0x02, + 0xc3, 0x35, 0xda, 0x40, 0x61, 0x75, 0xd1, 0x92, 0xfb, 0xef, 0x50, 0xc0, 0x7f, 0xc2, + 0x79, 0xb3, 0xf4, 0x0c, + ], + Bitcoin::Increment64 => [ + 0x20, 0xe7, 0x5e, 0x71, 0x7c, 0xb7, 0x6d, 0x46, 0x95, 0x56, 0x4f, 0x7c, 0x20, 0x22, + 0x1b, 0x7a, 0x01, 0x43, 0x13, 0x87, 0x38, 0xf1, 0x51, 0xaa, 0x19, 0x5e, 0xb1, 0x70, + 0xec, 0x13, 0xc0, 0x49, + ], + Bitcoin::Increment8 => [ + 0x5f, 0x4e, 0x05, 0x6e, 0xf4, 0xed, 0x8d, 0x68, 0xbf, 0x91, 0x1f, 0xc5, 0xcb, 0x69, + 0x03, 0x7e, 0xbf, 0x6c, 0x92, 0x21, 0x73, 0x43, 0xa8, 0x90, 0x5d, 0x38, 0xc4, 0x32, + 0xc1, 0x83, 0x23, 0x3c, + ], + Bitcoin::InputAnnexHash => [ + 0x94, 0x5b, 0x14, 0x7e, 0x5f, 0x0e, 0xdb, 0x83, 0x2d, 0x62, 0x34, 0x8c, 0xae, 0xea, + 0xc2, 0x24, 0x56, 0xee, 0xe9, 0x44, 0x65, 0x37, 0x6d, 0xbf, 0x59, 0x6b, 0x9d, 0x62, + 0x98, 0x5b, 0x01, 0xb6, + ], + Bitcoin::InputAnnexesHash => [ + 0x89, 0xb6, 0x02, 0x70, 0x44, 0x14, 0x1f, 0x20, 0x65, 0xb6, 0xf2, 0x36, 0xcf, 0xcc, + 0x13, 0xb9, 0x68, 0x48, 0x5e, 0x00, 0x74, 0x6b, 0x78, 0x59, 0x28, 0x69, 0x03, 0xc6, + 0x8c, 0x7f, 0x88, 0x0d, + ], + Bitcoin::InputHash => [ + 0x3a, 0xd2, 0x22, 0x31, 0xd6, 0xb9, 0xdf, 0xf6, 0xa0, 0xb4, 0xdb, 0xcf, 0xf0, 0x44, + 0xe1, 0x1c, 0x08, 0x2e, 0x04, 0x68, 0x4e, 0x73, 0xce, 0x95, 0xc2, 0x05, 0xe0, 0xc4, + 0x49, 0x6e, 0x5e, 0xca, + ], + Bitcoin::InputOutpointsHash => [ + 0x17, 0x59, 0xc6, 0xf4, 0x70, 0xb9, 0xab, 0xa6, 0x2a, 0x31, 0x79, 0x1e, 0xa0, 0x10, + 0x56, 0xe3, 0x60, 0x8b, 0xdf, 0x22, 0xf5, 0xdd, 0x43, 0xbf, 0x7d, 0xb0, 0x0e, 0xa5, + 0x82, 0x3f, 0x7c, 0xce, + ], + Bitcoin::InputPrevOutpoint => [ + 0x5d, 0x17, 0x12, 0x42, 0x09, 0xee, 0x05, 0x21, 0x24, 0xe5, 0x52, 0x38, 0xe0, 0xb6, + 0xa6, 0xfe, 0x85, 0xa4, 0x86, 0x88, 0xc1, 0xe1, 0x5e, 0x61, 0x81, 0xde, 0x94, 0xf7, + 0x8d, 0xb0, 0x40, 0x18, + ], + Bitcoin::InputScriptHash => [ + 0x05, 0x62, 0x41, 0x2f, 0x02, 0x1d, 0xa4, 0x81, 0x9b, 0x01, 0x9c, 0x8c, 0xd8, 0x87, + 0xd5, 0x30, 0x49, 0x2b, 0x9f, 0x94, 0x2c, 0x4e, 0xbf, 0x21, 0xae, 0x39, 0xed, 0x32, + 0x33, 0x0d, 0x7c, 0xfe, + ], + Bitcoin::InputScriptSigHash => [ + 0x1c, 0x7e, 0xfb, 0x37, 0xcb, 0xc4, 0xb9, 0x96, 0xd9, 0xb8, 0xc6, 0x17, 0x08, 0xe6, + 0x65, 0x73, 0xce, 0x87, 0xc1, 0xf0, 0xaa, 0x05, 0x22, 0xd0, 0x65, 0xba, 0x90, 0x25, + 0x05, 0x6e, 0x3f, 0x80, + ], + Bitcoin::InputScriptSigsHash => [ + 0xe7, 0x29, 0xc5, 0xf5, 0x8a, 0x93, 0x89, 0x08, 0x1a, 0x5c, 0xa8, 0x45, 0xf7, 0x6c, + 0xb9, 0x80, 0xf0, 0x85, 0x99, 0xce, 0xb3, 0xc7, 0xd7, 0xea, 0xe1, 0x14, 0x5b, 0x53, + 0xa6, 0x0a, 0xe3, 0xd5, + ], + Bitcoin::InputScriptsHash => [ + 0xf1, 0x77, 0x67, 0x1d, 0x60, 0x96, 0x0e, 0x46, 0x3a, 0x9a, 0x8f, 0x7e, 0x1f, 0x52, + 0x13, 0xaa, 0xba, 0x91, 0x22, 0xd2, 0xdb, 0x75, 0xfe, 0x91, 0xf8, 0xf1, 0xcf, 0x91, + 0xbe, 0x00, 0x19, 0x07, + ], + Bitcoin::InputSequence => [ + 0x5d, 0xd1, 0x7f, 0xe1, 0x55, 0x0f, 0x48, 0xf7, 0xba, 0xed, 0x4d, 0x06, 0x80, 0x08, + 0xd4, 0xa1, 0xff, 0x98, 0xcb, 0xeb, 0xe2, 0x54, 0x1c, 0x5d, 0xc7, 0x7a, 0xc5, 0x3a, + 0xd8, 0x3f, 0xa7, 0x79, + ], + Bitcoin::InputSequencesHash => [ + 0x55, 0x97, 0x3d, 0x64, 0x43, 0x45, 0x74, 0x72, 0x81, 0x37, 0x73, 0x64, 0xba, 0xd2, + 0xa8, 0x0b, 0x75, 0x8f, 0x45, 0x66, 0x60, 0xc1, 0x8d, 0xe5, 0xc0, 0x1a, 0x38, 0x82, + 0x07, 0x1d, 0x50, 0xe8, + ], + Bitcoin::InputUtxoHash => [ + 0x93, 0x1e, 0x4e, 0x95, 0xe0, 0xa6, 0x47, 0x60, 0x27, 0x6e, 0x91, 0xb5, 0xdc, 0x74, + 0x67, 0x80, 0xd0, 0x69, 0x7d, 0x0a, 0xf5, 0xaa, 0xf5, 0xbb, 0xc8, 0x1d, 0xbe, 0xb3, + 0x98, 0x59, 0x6a, 0xbb, + ], + Bitcoin::InputUtxosHash => [ + 0xd6, 0xf9, 0x0c, 0xd1, 0x04, 0xe1, 0xa5, 0xc6, 0x1a, 0x4b, 0x50, 0x00, 0xad, 0x9a, + 0xba, 0x8d, 0x43, 0x00, 0x4b, 0xf9, 0x43, 0xdf, 0x32, 0x5f, 0xa6, 0x36, 0xd1, 0xa2, + 0x2b, 0xec, 0xa0, 0xcb, + ], + Bitcoin::InputValue => [ + 0x7d, 0x3c, 0x3f, 0x95, 0x5b, 0x2c, 0xf0, 0xd0, 0xd1, 0x28, 0x0a, 0x1b, 0xb1, 0x20, + 0x46, 0x92, 0x92, 0xd1, 0x32, 0x9c, 0x83, 0xa9, 0xc2, 0xff, 0x7e, 0x7e, 0x1e, 0xb3, + 0xf6, 0x97, 0x83, 0xa3, + ], + Bitcoin::InputValuesHash => [ + 0x29, 0x83, 0x9e, 0xad, 0x0e, 0xb0, 0x3f, 0xe4, 0x65, 0x42, 0xe3, 0x6d, 0x71, 0xe9, + 0xe6, 0xaf, 0xdf, 0x96, 0x93, 0x01, 0x53, 0x3d, 0x74, 0xee, 0x09, 0x9b, 0x12, 0x66, + 0xa2, 0x50, 0x55, 0x2c, + ], + Bitcoin::InputsHash => [ + 0xab, 0xbf, 0xe1, 0xc7, 0xd1, 0x15, 0xc4, 0x19, 0x1f, 0x50, 0x48, 0x39, 0xf9, 0x8c, + 0x3f, 0x20, 0x42, 0x2b, 0x84, 0xe7, 0xfa, 0x14, 0xda, 0x14, 0x02, 0x89, 0x6c, 0x4d, + 0x98, 0xbf, 0xa8, 0xd8, + ], + Bitcoin::InternalKey => [ + 0x37, 0x48, 0x36, 0x99, 0x28, 0x10, 0x02, 0x2f, 0x88, 0xe0, 0x14, 0x5b, 0xca, 0xd7, + 0x7f, 0x4a, 0x84, 0x91, 0xfa, 0x80, 0x83, 0xcb, 0x51, 0xc3, 0x01, 0xfc, 0xf7, 0xa1, + 0x34, 0x78, 0xc2, 0xcc, + ], + Bitcoin::IsOne16 => [ + 0x1b, 0xd3, 0xa2, 0x53, 0xdb, 0x24, 0x3f, 0xca, 0x45, 0x53, 0x37, 0x99, 0xfe, 0x91, + 0x48, 0x38, 0xc3, 0x8e, 0x38, 0x06, 0xb1, 0x2b, 0xd7, 0xe8, 0x5c, 0xa7, 0x12, 0x07, + 0xa8, 0x84, 0x62, 0xb0, + ], + Bitcoin::IsOne32 => [ + 0x78, 0xb1, 0xba, 0xe0, 0x99, 0xec, 0x9c, 0x59, 0xcb, 0xf4, 0x12, 0x62, 0x51, 0xc1, + 0xe9, 0x67, 0x41, 0xb3, 0x50, 0xd5, 0x63, 0xbd, 0x74, 0xd5, 0x44, 0x18, 0xba, 0x78, + 0xeb, 0xea, 0x25, 0xbf, + ], + Bitcoin::IsOne64 => [ + 0x81, 0x7b, 0x95, 0xa5, 0x39, 0x5e, 0xfb, 0xec, 0xbb, 0x85, 0x15, 0xa5, 0x5b, 0x3f, + 0xfe, 0x1a, 0x4d, 0x7b, 0xac, 0x6e, 0x23, 0xdb, 0xca, 0x54, 0xad, 0x60, 0x66, 0x66, + 0x2f, 0x20, 0x2b, 0x93, + ], + Bitcoin::IsOne8 => [ + 0xf6, 0x92, 0x54, 0x91, 0xd3, 0x4b, 0x37, 0x74, 0x2c, 0xb0, 0x8d, 0xec, 0x19, 0x3e, + 0xe5, 0x12, 0x5f, 0x93, 0x3c, 0xad, 0xcc, 0x23, 0x2a, 0xed, 0xee, 0xdb, 0x57, 0x2d, + 0x12, 0x60, 0xff, 0xd5, + ], + Bitcoin::IsZero16 => [ + 0x1b, 0xa7, 0x21, 0x3b, 0x58, 0x8b, 0xe0, 0x92, 0xb4, 0x46, 0x59, 0x9c, 0x2a, 0x60, + 0xff, 0x54, 0x67, 0x13, 0x6a, 0x79, 0x75, 0x99, 0x61, 0x0b, 0xd7, 0xa5, 0xf1, 0x78, + 0x04, 0xe3, 0x2a, 0x2c, + ], + Bitcoin::IsZero32 => [ + 0x5e, 0xbf, 0x14, 0x66, 0x93, 0xf0, 0xe2, 0xd2, 0xf9, 0x36, 0x1b, 0x47, 0x6d, 0xba, + 0x34, 0x85, 0x8b, 0x83, 0x2d, 0x66, 0xfa, 0xcf, 0x71, 0x3b, 0xfb, 0x32, 0xc3, 0xbb, + 0x8d, 0xb9, 0xee, 0xbf, + ], + Bitcoin::IsZero64 => [ + 0x19, 0xab, 0x9a, 0xc0, 0xcf, 0x42, 0x66, 0x82, 0x19, 0xba, 0x6c, 0xb8, 0x97, 0xe4, + 0x87, 0xfe, 0x36, 0x80, 0x93, 0x7f, 0xff, 0xa8, 0xd2, 0x03, 0x51, 0x1d, 0xb7, 0x5d, + 0xbb, 0x10, 0xc7, 0xe5, + ], + Bitcoin::IsZero8 => [ + 0x8e, 0xff, 0x62, 0x08, 0x44, 0x07, 0xe9, 0xaf, 0xd5, 0x40, 0xf3, 0x18, 0xf6, 0x6b, + 0xcf, 0x31, 0xdf, 0x1d, 0x42, 0xa5, 0xc1, 0x61, 0xca, 0xe3, 0x5a, 0x29, 0x48, 0x18, + 0x0c, 0xa2, 0xaa, 0x2e, + ], + Bitcoin::Le16 => [ + 0x01, 0x67, 0x05, 0xa7, 0xd7, 0xdc, 0xe1, 0xaf, 0xc6, 0x3e, 0xab, 0x84, 0x20, 0x3f, + 0x5f, 0x42, 0xd6, 0xb6, 0xbb, 0xad, 0x75, 0xce, 0xe3, 0x8c, 0xec, 0x5a, 0x51, 0x5b, + 0x59, 0x97, 0x48, 0x9f, + ], + Bitcoin::Le32 => [ + 0x53, 0x51, 0xfc, 0x5d, 0xeb, 0xe5, 0xb2, 0x98, 0xad, 0x70, 0x57, 0xe4, 0xa5, 0xa7, + 0x6a, 0x3b, 0x9c, 0x65, 0x8a, 0xcd, 0xe7, 0xd1, 0xbb, 0x52, 0xe5, 0x88, 0x9c, 0xa1, + 0xe3, 0x8f, 0x5e, 0xfb, + ], + Bitcoin::Le64 => [ + 0xae, 0x2d, 0xe1, 0xe0, 0xcf, 0x73, 0x0d, 0x1d, 0xcc, 0x96, 0xd7, 0xcc, 0xfe, 0x71, + 0x16, 0x8a, 0x24, 0x0d, 0xea, 0xf8, 0x04, 0x61, 0x5a, 0x7b, 0xa9, 0x20, 0xdc, 0x16, + 0xfd, 0x6e, 0xa4, 0x5f, + ], + Bitcoin::Le8 => [ + 0xaf, 0x29, 0xf6, 0x16, 0x8e, 0xbd, 0xc0, 0x9e, 0xfb, 0xe0, 0xe6, 0x39, 0xcb, 0x75, + 0x0b, 0x12, 0x05, 0x78, 0x8f, 0x90, 0x21, 0xd6, 0x66, 0xef, 0xce, 0xfe, 0x13, 0xf1, + 0x2f, 0x96, 0x71, 0xf0, + ], + Bitcoin::LeftExtend16_32 => [ + 0x28, 0x99, 0x97, 0xfb, 0xa1, 0xfa, 0xe7, 0xec, 0x1c, 0x45, 0x31, 0xc5, 0x0b, 0xbf, + 0x86, 0x71, 0xb8, 0x97, 0x13, 0x9b, 0xdd, 0x3a, 0xad, 0x97, 0xa3, 0x76, 0x39, 0x57, + 0x4a, 0x04, 0x7c, 0x80, + ], + Bitcoin::LeftExtend16_64 => [ + 0x5d, 0xff, 0x21, 0xf6, 0xe6, 0x12, 0x47, 0x75, 0xc5, 0x78, 0xea, 0xf4, 0x85, 0x5c, + 0x0b, 0x01, 0x64, 0xf7, 0x87, 0x9b, 0x17, 0x60, 0xf9, 0x02, 0x7c, 0xb5, 0x0f, 0x7b, + 0x5a, 0xcb, 0x49, 0x18, + ], + Bitcoin::LeftExtend1_16 => [ + 0x8c, 0x87, 0xd7, 0x56, 0xd1, 0x4b, 0xd3, 0xd9, 0xa7, 0x86, 0x90, 0x81, 0x29, 0x12, + 0xb8, 0x94, 0x29, 0xc0, 0x17, 0x1a, 0x41, 0x10, 0x3a, 0x58, 0xc6, 0xe9, 0xf2, 0x25, + 0x14, 0x1a, 0x02, 0x22, + ], + Bitcoin::LeftExtend1_32 => [ + 0xc8, 0xf1, 0x54, 0xd4, 0x6d, 0x2e, 0x78, 0x95, 0xda, 0x1b, 0x33, 0xc2, 0xb3, 0x15, + 0xe6, 0xd4, 0xd4, 0x85, 0x1d, 0xde, 0xe2, 0x8a, 0xef, 0x8b, 0x70, 0x70, 0x90, 0x61, + 0x6b, 0xc7, 0xee, 0xa0, + ], + Bitcoin::LeftExtend1_64 => [ + 0xa3, 0x40, 0x4d, 0xf6, 0x8c, 0xc9, 0x20, 0x75, 0x4c, 0x6e, 0x18, 0x47, 0x20, 0x7d, + 0xb3, 0x84, 0x5d, 0x11, 0xc7, 0x49, 0x09, 0xd0, 0x7c, 0xa8, 0x2a, 0xd1, 0xf1, 0xcc, + 0x67, 0xbf, 0x3a, 0x9b, + ], + Bitcoin::LeftExtend1_8 => [ + 0x3b, 0xca, 0x33, 0x97, 0xb8, 0x3c, 0x27, 0xf3, 0x63, 0x16, 0xf8, 0xb8, 0xb3, 0x03, + 0x35, 0x0a, 0xfe, 0x8b, 0xa0, 0x07, 0x8f, 0x77, 0xf1, 0xd4, 0x2a, 0x9b, 0x78, 0x92, + 0xb2, 0xa4, 0xdb, 0xee, + ], + Bitcoin::LeftExtend32_64 => [ + 0x42, 0xcb, 0xeb, 0x01, 0xfe, 0x7a, 0x3a, 0x6d, 0xd3, 0x31, 0x1d, 0xb3, 0x36, 0x5f, + 0x91, 0xe5, 0xc1, 0x18, 0xc7, 0xe4, 0x1f, 0x03, 0xaa, 0xe7, 0xb2, 0x83, 0xde, 0x6b, + 0xb9, 0x05, 0x3e, 0x6b, + ], + Bitcoin::LeftExtend8_16 => [ + 0x9a, 0x57, 0xc9, 0x6a, 0xf5, 0x71, 0x48, 0x96, 0xb7, 0x24, 0xde, 0x45, 0xeb, 0x9f, + 0xe9, 0x7d, 0x73, 0x69, 0x7d, 0xe6, 0x2e, 0x8d, 0xad, 0x78, 0x71, 0xeb, 0x58, 0xf5, + 0x81, 0xa0, 0x11, 0xbb, + ], + Bitcoin::LeftExtend8_32 => [ + 0xd6, 0x24, 0xbd, 0x40, 0x40, 0x76, 0x3c, 0xb1, 0x3c, 0xca, 0xd4, 0x98, 0xf5, 0x3d, + 0x38, 0xc1, 0x12, 0xf1, 0x92, 0x95, 0x68, 0x26, 0xda, 0xfe, 0xc9, 0xac, 0x91, 0x65, + 0x79, 0x2b, 0x34, 0x7a, + ], + Bitcoin::LeftExtend8_64 => [ + 0x9d, 0xc4, 0xa2, 0x05, 0x4d, 0x5d, 0x26, 0x34, 0x2a, 0xc5, 0x90, 0xb6, 0x67, 0xf1, + 0xb0, 0x1d, 0xf5, 0x4f, 0xd0, 0xcd, 0xaa, 0x40, 0x5e, 0xf8, 0xcb, 0xb7, 0x6f, 0xd8, + 0xf9, 0xb0, 0x0e, 0xe5, + ], + Bitcoin::LeftPadHigh16_32 => [ + 0x05, 0x45, 0xc4, 0xb5, 0x8f, 0x00, 0x4a, 0x21, 0xe7, 0xf1, 0x29, 0xa4, 0xc0, 0x51, + 0x89, 0x97, 0x17, 0x14, 0xca, 0xa2, 0xd9, 0x1d, 0x1d, 0xfd, 0x5f, 0xad, 0x3e, 0x63, + 0x24, 0x49, 0x94, 0x28, + ], + Bitcoin::LeftPadHigh16_64 => [ + 0x1c, 0x61, 0xd0, 0x3d, 0x49, 0x3b, 0xbd, 0x05, 0x82, 0x22, 0x59, 0xd1, 0x73, 0x0a, + 0x8d, 0x7a, 0x5f, 0x55, 0xb0, 0xba, 0x2a, 0x93, 0x91, 0xa6, 0xc8, 0x88, 0x1e, 0xb4, + 0x75, 0x04, 0xaf, 0xfd, + ], + Bitcoin::LeftPadHigh1_16 => [ + 0x56, 0xfd, 0xf5, 0x4f, 0x1f, 0xcd, 0x19, 0x82, 0x5e, 0x7c, 0x3b, 0x79, 0x06, 0x15, + 0xc1, 0xd3, 0xfe, 0x82, 0x88, 0x6c, 0x74, 0x7b, 0xc4, 0x87, 0x59, 0x87, 0xf5, 0x05, + 0x16, 0x94, 0x5f, 0xb3, + ], + Bitcoin::LeftPadHigh1_32 => [ + 0xdb, 0x33, 0x05, 0x9a, 0xbe, 0x2d, 0x43, 0x2d, 0x67, 0xf4, 0x2b, 0x1e, 0x94, 0x27, + 0x56, 0xdc, 0xa6, 0xcd, 0xe6, 0x37, 0x85, 0xe5, 0xbd, 0x43, 0x0d, 0xc8, 0xf4, 0xae, + 0xfc, 0x31, 0xb8, 0xdf, + ], + Bitcoin::LeftPadHigh1_64 => [ + 0x1d, 0x66, 0x9c, 0x1f, 0xa5, 0xfd, 0x3e, 0xf6, 0x6e, 0xb4, 0xae, 0xf6, 0x18, 0x6e, + 0x3e, 0xc1, 0x36, 0xee, 0x75, 0x84, 0x10, 0xdf, 0x3e, 0xde, 0xbb, 0x31, 0xbf, 0x26, + 0xd4, 0x56, 0x20, 0x51, + ], + Bitcoin::LeftPadHigh1_8 => [ + 0x9a, 0x1b, 0xad, 0x3d, 0x8a, 0xb9, 0x00, 0x30, 0x3d, 0xa2, 0x02, 0xf0, 0xf4, 0x49, + 0xf0, 0xb7, 0xe6, 0x79, 0x5c, 0x2a, 0x7c, 0x12, 0x17, 0x18, 0x80, 0x0a, 0xc4, 0x0c, + 0x87, 0xd8, 0x27, 0x29, + ], + Bitcoin::LeftPadHigh32_64 => [ + 0x39, 0x20, 0xcc, 0x4b, 0x33, 0xba, 0xf7, 0xef, 0xa5, 0xca, 0xf9, 0xe7, 0x80, 0x01, + 0x44, 0x67, 0x06, 0xf6, 0xe4, 0xe8, 0x26, 0x56, 0x74, 0x05, 0x7e, 0xed, 0x87, 0x17, + 0x78, 0x08, 0x9e, 0x94, + ], + Bitcoin::LeftPadHigh8_16 => [ + 0x75, 0x2e, 0x29, 0xf2, 0xfe, 0x2b, 0xec, 0xc3, 0xf6, 0x62, 0x90, 0xfe, 0x44, 0xe1, + 0xae, 0xb3, 0x78, 0x41, 0x80, 0xdd, 0x90, 0x5e, 0x19, 0x62, 0x4e, 0x19, 0x5f, 0x21, + 0x6c, 0x07, 0xc5, 0x7c, + ], + Bitcoin::LeftPadHigh8_32 => [ + 0xbe, 0xe8, 0x8f, 0x1c, 0x8c, 0x30, 0x63, 0x4c, 0x6e, 0x95, 0xca, 0xcc, 0x0e, 0x9a, + 0xdd, 0x49, 0x41, 0x32, 0x21, 0xfd, 0xab, 0xbd, 0x8d, 0x4c, 0x0a, 0xcc, 0xf1, 0xca, + 0xe2, 0xd2, 0xa7, 0x78, + ], + Bitcoin::LeftPadHigh8_64 => [ + 0x39, 0x23, 0x87, 0xf6, 0xdc, 0x04, 0xbf, 0xc5, 0x4d, 0xd4, 0xa2, 0x81, 0x19, 0xc8, + 0x1d, 0x15, 0xd7, 0xa5, 0x80, 0x9b, 0xbf, 0x62, 0xfc, 0xc2, 0x7d, 0xc5, 0x5c, 0xf8, + 0x2e, 0x9e, 0x5e, 0xe6, + ], + Bitcoin::LeftPadLow16_32 => [ + 0x4f, 0xfd, 0x6c, 0xb3, 0x40, 0x23, 0x05, 0x82, 0x1d, 0xd8, 0x99, 0x70, 0xd7, 0x22, + 0xd1, 0xc1, 0x3f, 0x1f, 0xf7, 0x73, 0x9f, 0xd5, 0xf3, 0x4b, 0xa1, 0x6c, 0x73, 0x65, + 0x3b, 0x04, 0x47, 0x18, + ], + Bitcoin::LeftPadLow16_64 => [ + 0xbe, 0x3e, 0xb8, 0x5c, 0x5f, 0x19, 0x91, 0x53, 0xfb, 0x1c, 0x46, 0x13, 0x5c, 0x04, + 0xfa, 0xcf, 0xdb, 0xc6, 0xf1, 0xb7, 0x8c, 0x2b, 0xb7, 0xae, 0x75, 0xf1, 0x55, 0xbc, + 0x3e, 0xa0, 0x8a, 0x8b, + ], + Bitcoin::LeftPadLow1_16 => [ + 0xdd, 0xd0, 0x15, 0x3e, 0xf3, 0x12, 0xf2, 0x8d, 0x64, 0x2c, 0xd9, 0x4c, 0xb3, 0x6f, + 0x32, 0x97, 0x75, 0xb0, 0x0d, 0xa8, 0x8f, 0xcc, 0xc4, 0xce, 0xa1, 0xba, 0xe8, 0x9b, + 0xad, 0x13, 0xbe, 0x6b, + ], + Bitcoin::LeftPadLow1_32 => [ + 0xbc, 0x9d, 0x31, 0x14, 0x35, 0x46, 0x7b, 0xc0, 0x8b, 0x10, 0x08, 0xe5, 0x47, 0xaa, + 0x7a, 0x07, 0xe8, 0x3b, 0x15, 0x14, 0x68, 0x61, 0xa9, 0xe9, 0xb5, 0x41, 0x3b, 0xe3, + 0x1b, 0x82, 0xb6, 0xb5, + ], + Bitcoin::LeftPadLow1_64 => [ + 0x8b, 0xc6, 0x2f, 0x93, 0x60, 0x89, 0x4e, 0x48, 0xa4, 0x73, 0x2c, 0x95, 0x76, 0x9c, + 0x8f, 0xaa, 0xe9, 0x56, 0x8f, 0x9d, 0xe8, 0xe8, 0xa2, 0x00, 0x83, 0x6b, 0xd4, 0xe5, + 0x0b, 0x02, 0xcd, 0x84, + ], + Bitcoin::LeftPadLow1_8 => [ + 0xf6, 0x6c, 0xd7, 0xa4, 0x2b, 0x32, 0x0f, 0x97, 0xc1, 0x9f, 0x2d, 0x54, 0x16, 0xcd, + 0xe0, 0x87, 0x25, 0x3a, 0x27, 0x91, 0x29, 0x65, 0xd5, 0x5b, 0x65, 0x71, 0x2a, 0xd8, + 0x09, 0xb8, 0x3c, 0xfd, + ], + Bitcoin::LeftPadLow32_64 => [ + 0xa3, 0x3a, 0x07, 0xb9, 0xbc, 0xf9, 0x45, 0xf6, 0x4f, 0x07, 0x2b, 0x8b, 0x9c, 0x91, + 0x48, 0x39, 0xa5, 0x85, 0xbf, 0xa9, 0xf3, 0x42, 0x5b, 0x14, 0x77, 0x54, 0xab, 0x55, + 0xa8, 0xba, 0x6c, 0x0f, + ], + Bitcoin::LeftPadLow8_16 => [ + 0x2a, 0x51, 0x6a, 0x79, 0x3f, 0x97, 0xc4, 0x5f, 0xea, 0xeb, 0xb1, 0xcc, 0x96, 0x1a, + 0x15, 0x6d, 0x80, 0x35, 0x49, 0x28, 0x79, 0x78, 0x9d, 0x6e, 0xdc, 0x9b, 0x57, 0xe7, + 0x2f, 0x11, 0xe5, 0xb5, + ], + Bitcoin::LeftPadLow8_32 => [ + 0x1a, 0xa2, 0xe4, 0xd0, 0x4b, 0xd6, 0x90, 0x55, 0x12, 0x3d, 0xd6, 0xaa, 0xfe, 0x27, + 0xf5, 0xf7, 0xf4, 0x7c, 0x3b, 0x30, 0x90, 0xc3, 0xa8, 0x27, 0x29, 0x73, 0xfe, 0x2f, + 0x75, 0x16, 0x5a, 0x5d, + ], + Bitcoin::LeftPadLow8_64 => [ + 0xb6, 0x52, 0xe0, 0xae, 0xdd, 0x0f, 0x4f, 0x66, 0xf6, 0xa1, 0xcd, 0x4b, 0xeb, 0xf8, + 0x75, 0xff, 0x7b, 0xbb, 0x2d, 0xd9, 0x9b, 0x06, 0x5b, 0x2d, 0xb5, 0xb5, 0xb5, 0x90, + 0x53, 0x61, 0x61, 0x4d, + ], + Bitcoin::LeftRotate16 => [ + 0x8a, 0x12, 0xff, 0x6a, 0x4b, 0xf2, 0x37, 0x15, 0xdd, 0x3b, 0x76, 0x6b, 0x99, 0x67, + 0xc7, 0x15, 0x8b, 0xf3, 0xed, 0x74, 0xb3, 0xdc, 0xe7, 0x30, 0xaf, 0xfc, 0xf4, 0x66, + 0x16, 0x47, 0x8e, 0xcb, + ], + Bitcoin::LeftRotate32 => [ + 0x2f, 0xcb, 0x52, 0x17, 0x2f, 0xd4, 0x9c, 0x36, 0x21, 0x7d, 0xea, 0xe0, 0xc2, 0x37, + 0x14, 0x32, 0x1f, 0x69, 0xf5, 0xf1, 0x3f, 0x6e, 0x94, 0xb2, 0xbd, 0xfe, 0x4b, 0x74, + 0x88, 0x69, 0x7f, 0xd5, + ], + Bitcoin::LeftRotate64 => [ + 0x72, 0xcc, 0xd6, 0xc4, 0xe5, 0xfd, 0xf6, 0x8a, 0xd3, 0x3b, 0x6d, 0x58, 0xfb, 0x37, + 0x2b, 0xe4, 0xf1, 0xb8, 0x0e, 0xef, 0x70, 0x1f, 0x9d, 0xb7, 0xe5, 0xed, 0x85, 0x9b, + 0x96, 0xb3, 0x62, 0x09, + ], + Bitcoin::LeftRotate8 => [ + 0x1a, 0xae, 0xc9, 0xf3, 0xb7, 0x5d, 0x89, 0xf8, 0x2a, 0x64, 0x98, 0x45, 0x8c, 0x44, + 0x83, 0xcb, 0x9a, 0x78, 0x44, 0x89, 0x05, 0xf3, 0xbb, 0x39, 0xfc, 0x08, 0x3f, 0x14, + 0xdd, 0xcc, 0xdc, 0x9b, + ], + Bitcoin::LeftShift16 => [ + 0x37, 0xac, 0x63, 0x87, 0x21, 0xab, 0x09, 0x7a, 0x96, 0x02, 0xba, 0x4d, 0xc9, 0x2e, + 0x19, 0xb5, 0xa1, 0x85, 0xb2, 0x32, 0x9f, 0x1a, 0xa6, 0x00, 0xcb, 0x9c, 0x15, 0x61, + 0x5a, 0x00, 0x81, 0xf8, + ], + Bitcoin::LeftShift32 => [ + 0x8e, 0x3c, 0x47, 0x3b, 0x28, 0x67, 0xf1, 0x54, 0x73, 0xb3, 0x63, 0x2d, 0xbf, 0xdd, + 0x99, 0x77, 0x55, 0x51, 0xef, 0x5f, 0x9d, 0xba, 0x47, 0x5e, 0x9c, 0xf0, 0x90, 0x75, + 0x80, 0x70, 0xf0, 0xbf, + ], + Bitcoin::LeftShift64 => [ + 0x50, 0x49, 0xf4, 0x04, 0xd1, 0x73, 0x29, 0x9a, 0x3a, 0xee, 0x04, 0xcb, 0xc2, 0x46, + 0x2c, 0xb3, 0x4c, 0x80, 0x69, 0xc1, 0xb6, 0xdb, 0x7f, 0xed, 0x0e, 0x38, 0x8f, 0xf6, + 0xd4, 0x67, 0xa0, 0x86, + ], + Bitcoin::LeftShift8 => [ + 0x83, 0x2f, 0x63, 0x6e, 0x63, 0x44, 0x6c, 0xef, 0xba, 0x8d, 0xf3, 0xa4, 0x6e, 0xfb, + 0xb3, 0x61, 0x59, 0xc1, 0x88, 0x54, 0x56, 0x77, 0x68, 0xad, 0xc9, 0xb8, 0xdb, 0x8a, + 0x07, 0x49, 0x2a, 0x58, + ], + Bitcoin::LeftShiftWith16 => [ + 0xe6, 0x47, 0x62, 0xb1, 0xc5, 0xe6, 0x14, 0x4a, 0x71, 0x81, 0xea, 0xaf, 0x4d, 0xd9, + 0xd9, 0xb3, 0xaa, 0x43, 0xaa, 0xd9, 0x55, 0x15, 0x81, 0x98, 0xee, 0x20, 0x90, 0xeb, + 0xd9, 0xe4, 0xbb, 0x0d, + ], + Bitcoin::LeftShiftWith32 => [ + 0x64, 0x76, 0xba, 0x89, 0x95, 0xf8, 0x3b, 0x5e, 0xe1, 0xeb, 0xc2, 0x2c, 0xb4, 0x16, + 0xf5, 0x58, 0x15, 0x7f, 0x2e, 0x57, 0x69, 0x9a, 0x5c, 0xaf, 0x84, 0x29, 0x1f, 0xf3, + 0xfc, 0x14, 0x83, 0xc1, + ], + Bitcoin::LeftShiftWith64 => [ + 0x06, 0xb8, 0xfe, 0x67, 0xcf, 0xc5, 0x86, 0x32, 0x23, 0x97, 0xaf, 0x02, 0x4f, 0xde, + 0x29, 0x11, 0xf7, 0xae, 0x87, 0xa0, 0x6a, 0xbc, 0x6c, 0x59, 0x30, 0x93, 0x40, 0x97, + 0x15, 0x69, 0x1c, 0x19, + ], + Bitcoin::LeftShiftWith8 => [ + 0xb1, 0xac, 0x9c, 0x68, 0x23, 0x58, 0xc4, 0x5b, 0xab, 0xf4, 0x06, 0x95, 0x56, 0xfe, + 0x6e, 0x37, 0x5b, 0x45, 0x54, 0xde, 0x9e, 0x10, 0xc5, 0x91, 0xc1, 0x48, 0x39, 0x84, + 0x47, 0xac, 0x18, 0x0e, + ], + Bitcoin::Leftmost16_1 => [ + 0x5b, 0xff, 0x4c, 0xb5, 0x58, 0x76, 0x05, 0xd5, 0xfd, 0x05, 0x9d, 0x77, 0x33, 0x49, + 0x0d, 0x7d, 0xd2, 0x2d, 0x27, 0x8b, 0x59, 0x9e, 0x06, 0xd3, 0xb5, 0xdb, 0x6d, 0x79, + 0xf3, 0xc9, 0x23, 0xbd, + ], + Bitcoin::Leftmost16_2 => [ + 0x53, 0x6d, 0xb4, 0x86, 0xb1, 0x22, 0x27, 0xe5, 0xb0, 0x9d, 0x6f, 0xeb, 0xd2, 0x77, + 0x6b, 0x1a, 0xbb, 0xc6, 0x74, 0x99, 0x96, 0xaa, 0x78, 0x3e, 0xd7, 0xe5, 0x37, 0x44, + 0x6b, 0xbf, 0x15, 0x1b, + ], + Bitcoin::Leftmost16_4 => [ + 0xf2, 0x32, 0x13, 0x67, 0x49, 0x6d, 0x1a, 0x77, 0xee, 0xa0, 0x5e, 0x95, 0xe3, 0xb8, + 0x07, 0xd3, 0xba, 0x5f, 0x05, 0x13, 0x6c, 0xe0, 0x91, 0x2a, 0xe7, 0x17, 0xc8, 0x3a, + 0x02, 0x61, 0xb2, 0xe1, + ], + Bitcoin::Leftmost16_8 => [ + 0x24, 0x14, 0x8e, 0xf3, 0x0a, 0xd4, 0x3e, 0xbe, 0xc5, 0x63, 0x72, 0x83, 0x22, 0xc3, + 0xce, 0x11, 0x79, 0xae, 0xd7, 0xa7, 0x82, 0x16, 0xd7, 0x99, 0x88, 0x8b, 0xf1, 0x8b, + 0x39, 0x57, 0x06, 0x71, + ], + Bitcoin::Leftmost32_1 => [ + 0xb9, 0x2e, 0x15, 0xec, 0x5d, 0xa0, 0x7e, 0xe8, 0xed, 0x39, 0x7c, 0xb9, 0xf6, 0x0a, + 0x4c, 0x5d, 0xa8, 0x38, 0x62, 0x93, 0x1a, 0x90, 0x73, 0x59, 0xd2, 0x7c, 0xae, 0xb6, + 0x0e, 0x60, 0xef, 0x8a, + ], + Bitcoin::Leftmost32_16 => [ + 0xad, 0xb0, 0x27, 0xb2, 0x06, 0x56, 0x73, 0x58, 0x53, 0x26, 0xc0, 0x1c, 0x3b, 0xe2, + 0xfa, 0xeb, 0x38, 0x63, 0x49, 0xe2, 0x90, 0x09, 0xb6, 0x57, 0x6e, 0xe5, 0x3a, 0x85, + 0x55, 0x12, 0xcc, 0x67, + ], + Bitcoin::Leftmost32_2 => [ + 0xb7, 0x5b, 0x31, 0xc5, 0x59, 0x12, 0x3d, 0x3d, 0x63, 0x35, 0x98, 0x59, 0x32, 0xb8, + 0xb1, 0xb2, 0x66, 0x4e, 0xe5, 0x97, 0xaf, 0xb1, 0x5f, 0xd1, 0xa4, 0x99, 0xd0, 0x07, + 0xcf, 0xf2, 0x75, 0x5c, + ], + Bitcoin::Leftmost32_4 => [ + 0xcb, 0x75, 0x7e, 0x47, 0x1e, 0x9d, 0x9a, 0x40, 0x77, 0x1d, 0xd1, 0xcf, 0x3c, 0x1b, + 0xf5, 0xd2, 0x3c, 0x17, 0xed, 0x68, 0xcd, 0xbd, 0xb2, 0x2d, 0xad, 0xa1, 0x7a, 0x73, + 0xa7, 0xb4, 0x07, 0xb2, + ], + Bitcoin::Leftmost32_8 => [ + 0xbf, 0xc5, 0x34, 0xb4, 0x9e, 0x06, 0x00, 0x6e, 0x19, 0xf3, 0xb6, 0x8e, 0x0a, 0x02, + 0x39, 0x1c, 0x14, 0x9f, 0x9a, 0x34, 0xf4, 0x3e, 0xe3, 0x6b, 0x9f, 0x1d, 0x79, 0xa7, + 0x9c, 0x9a, 0x9e, 0x4d, + ], + Bitcoin::Leftmost64_1 => [ + 0x1b, 0x1d, 0x4e, 0x92, 0x38, 0x4b, 0x8b, 0x15, 0x9b, 0xa0, 0xd8, 0x06, 0x55, 0x8b, + 0x54, 0x94, 0xe3, 0x61, 0x4e, 0xed, 0xe0, 0x3c, 0x94, 0x6c, 0xea, 0xf1, 0x41, 0xf3, + 0x6f, 0x01, 0xc7, 0x9b, + ], + Bitcoin::Leftmost64_16 => [ + 0x0d, 0xeb, 0xdc, 0x1a, 0xa0, 0x43, 0x30, 0x34, 0x42, 0xe1, 0x8f, 0xe0, 0x3d, 0x8a, + 0x99, 0xd2, 0xbe, 0x6b, 0xb8, 0xa8, 0x69, 0x1a, 0xba, 0x19, 0x56, 0x62, 0x59, 0xe3, + 0x67, 0x60, 0xf7, 0xf9, + ], + Bitcoin::Leftmost64_2 => [ + 0x83, 0x9e, 0xcf, 0xa3, 0x18, 0x70, 0x5c, 0x25, 0x3d, 0x0c, 0x52, 0xff, 0x27, 0xb9, + 0x04, 0x64, 0x92, 0x3d, 0x8c, 0x0e, 0x55, 0xa8, 0x2c, 0x0d, 0x16, 0x24, 0x02, 0x39, + 0x7f, 0x36, 0x53, 0x78, + ], + Bitcoin::Leftmost64_32 => [ + 0x92, 0x91, 0x97, 0xa9, 0x64, 0x28, 0x61, 0xa7, 0x7b, 0xd6, 0x62, 0x58, 0x05, 0x11, + 0x97, 0xbe, 0x86, 0xff, 0x08, 0xe6, 0x28, 0xe3, 0x0f, 0x7e, 0xfc, 0xbd, 0x2c, 0x4d, + 0xfe, 0xcf, 0x9b, 0xdd, + ], + Bitcoin::Leftmost64_4 => [ + 0x02, 0xbd, 0x16, 0x45, 0xd5, 0x75, 0xf0, 0x4b, 0x3c, 0xbb, 0xaa, 0x6d, 0x8c, 0xa9, + 0x86, 0xef, 0x1c, 0x8c, 0xd0, 0xff, 0xe1, 0x65, 0x89, 0x03, 0x93, 0x9d, 0xb7, 0x64, + 0x56, 0x2a, 0x26, 0x47, + ], + Bitcoin::Leftmost64_8 => [ + 0x35, 0x58, 0xb3, 0x1b, 0x3b, 0x6e, 0x8f, 0x9a, 0x28, 0x8f, 0xdc, 0x72, 0xf2, 0x46, + 0x02, 0xbe, 0x05, 0x58, 0x19, 0x10, 0x71, 0xa5, 0x4a, 0x99, 0xfa, 0x03, 0xa0, 0x25, + 0x34, 0xf8, 0x80, 0x05, + ], + Bitcoin::Leftmost8_1 => [ + 0x28, 0x65, 0xef, 0xd4, 0x29, 0x83, 0xcb, 0xe3, 0xf8, 0x16, 0x37, 0x3a, 0xb8, 0xa8, + 0x82, 0xf1, 0x83, 0x17, 0x19, 0x4d, 0xc1, 0xab, 0xa3, 0x8d, 0xa0, 0x30, 0x4b, 0x8c, + 0x14, 0x4b, 0x1d, 0xa4, + ], + Bitcoin::Leftmost8_2 => [ + 0x51, 0x96, 0x4c, 0xb0, 0x74, 0x05, 0xa8, 0xd2, 0x3d, 0x21, 0x87, 0x74, 0x1a, 0x9e, + 0xd3, 0x04, 0xbc, 0xb4, 0x69, 0xd9, 0xac, 0x9f, 0x5d, 0x92, 0x55, 0x82, 0x5c, 0xfd, + 0xa3, 0xda, 0x07, 0xc0, + ], + Bitcoin::Leftmost8_4 => [ + 0x88, 0x3c, 0x94, 0xf8, 0xa2, 0x6c, 0xda, 0xb7, 0xbc, 0x5c, 0xd6, 0x31, 0xe5, 0x22, + 0x55, 0xa8, 0x5e, 0xf6, 0xe0, 0x70, 0x76, 0x64, 0x57, 0xf6, 0x32, 0x1e, 0x2c, 0xcb, + 0x11, 0x9d, 0x9b, 0x2b, + ], + Bitcoin::LinearCombination1 => [ + 0x34, 0x10, 0xa9, 0xee, 0x33, 0x3d, 0xf8, 0xc8, 0xa0, 0x1c, 0x14, 0x11, 0x5b, 0x54, + 0x43, 0x27, 0xe3, 0x24, 0xe2, 0x87, 0xaa, 0x11, 0x07, 0xe0, 0x19, 0x55, 0xbd, 0x20, + 0x50, 0x6e, 0xa9, 0x87, + ], + Bitcoin::LinearVerify1 => [ + 0xdc, 0x66, 0xd3, 0x31, 0xc1, 0x7f, 0x3f, 0xdd, 0xa3, 0x99, 0x46, 0x98, 0x1b, 0x39, + 0xb3, 0x57, 0xd0, 0x55, 0x5c, 0x35, 0x62, 0xec, 0xae, 0x02, 0xaa, 0x2d, 0xad, 0x16, + 0x3e, 0x6c, 0x9a, 0x2e, + ], + Bitcoin::LockTime => [ + 0x9a, 0xe0, 0xac, 0xc3, 0x7b, 0xc2, 0x04, 0x47, 0x79, 0xb0, 0x7c, 0x3d, 0x46, 0x02, + 0xa5, 0xfd, 0xe8, 0xbc, 0x33, 0xf8, 0x79, 0xf6, 0x6b, 0x73, 0x9b, 0x10, 0xf0, 0x1a, + 0xeb, 0x11, 0x54, 0xec, + ], + Bitcoin::Low1 => [ + 0xfe, 0x62, 0x14, 0xf9, 0x67, 0x15, 0x6d, 0xcd, 0xe6, 0xdd, 0x49, 0xfd, 0xc5, 0x5e, + 0xfb, 0x86, 0x50, 0x69, 0xfe, 0xab, 0xff, 0xf0, 0xfe, 0x93, 0x1d, 0xba, 0x85, 0x31, + 0x34, 0xee, 0xd1, 0x30, + ], + Bitcoin::Low16 => [ + 0x74, 0x93, 0xcf, 0x69, 0x8a, 0x48, 0x82, 0xe5, 0xc3, 0x57, 0x9d, 0x06, 0x51, 0x8e, + 0x7e, 0xca, 0x2b, 0x84, 0x28, 0xf6, 0x2e, 0x2b, 0x51, 0x38, 0x02, 0xab, 0xe6, 0x22, + 0x17, 0x0c, 0x20, 0xfe, + ], + Bitcoin::Low32 => [ + 0x36, 0x2d, 0x66, 0xa4, 0xf0, 0xae, 0xb9, 0x65, 0x84, 0xa5, 0x67, 0x57, 0x82, 0x71, + 0xb1, 0xf7, 0xbb, 0xfc, 0xc2, 0xde, 0x0d, 0xcf, 0x95, 0x79, 0x6b, 0x6f, 0x7a, 0x82, + 0x6b, 0x2a, 0x8a, 0xf7, + ], + Bitcoin::Low64 => [ + 0x97, 0x33, 0x23, 0xbc, 0x2b, 0x92, 0xe4, 0x28, 0x04, 0xd2, 0xe4, 0xf5, 0x8b, 0x86, + 0xf6, 0x5b, 0x56, 0xf9, 0x1d, 0xee, 0xb4, 0x81, 0x0e, 0xab, 0x8a, 0x1d, 0xed, 0xa9, + 0x69, 0x7a, 0x08, 0x72, + ], + Bitcoin::Low8 => [ + 0xcd, 0x1a, 0x85, 0x58, 0xef, 0x99, 0xa3, 0x22, 0x60, 0x21, 0x7a, 0x76, 0x49, 0xff, + 0x51, 0x40, 0xda, 0x69, 0xda, 0x70, 0x06, 0x72, 0x69, 0x0b, 0x27, 0x91, 0x7b, 0x07, + 0xd7, 0xc1, 0x4c, 0x67, + ], + Bitcoin::Lt16 => [ + 0x04, 0xac, 0xa8, 0x7e, 0x3e, 0x17, 0xf8, 0x05, 0xa2, 0x1c, 0xf2, 0x91, 0x7a, 0xee, + 0x99, 0x57, 0xb9, 0x50, 0xb2, 0xdb, 0x5d, 0x7a, 0xe5, 0xc8, 0x26, 0xd4, 0xac, 0x2e, + 0xc9, 0x7b, 0x5a, 0x52, + ], + Bitcoin::Lt32 => [ + 0x23, 0xa0, 0xa5, 0xc1, 0x97, 0x74, 0x7e, 0x3a, 0x95, 0x79, 0xe9, 0x0e, 0x0f, 0x22, + 0xf8, 0x4a, 0x29, 0xbf, 0xb5, 0xf0, 0x7b, 0x84, 0xb5, 0x9b, 0x26, 0x68, 0x8a, 0x0c, + 0xd5, 0x9d, 0xfe, 0xbd, + ], + Bitcoin::Lt64 => [ + 0xd2, 0x99, 0x90, 0x1c, 0x7b, 0x5b, 0x3a, 0x59, 0xff, 0xc8, 0xdd, 0x09, 0x54, 0x5a, + 0x32, 0x38, 0x24, 0xb7, 0x79, 0xa9, 0x9b, 0x2d, 0x1a, 0x2f, 0x87, 0x45, 0x2d, 0x9e, + 0x4b, 0xef, 0xaf, 0x30, + ], + Bitcoin::Lt8 => [ + 0xdd, 0x94, 0x41, 0x3b, 0x52, 0x9c, 0x29, 0x8c, 0x16, 0x96, 0xe9, 0xfb, 0x08, 0xe6, + 0x67, 0x67, 0xb3, 0xf8, 0x33, 0x7a, 0xc0, 0x2e, 0x44, 0xb0, 0x68, 0xe9, 0x40, 0x14, + 0xf7, 0xc4, 0x1f, 0x2a, + ], + Bitcoin::Maj1 => [ + 0x0e, 0x6f, 0xb4, 0x0f, 0xe3, 0x1a, 0x3a, 0x52, 0x6b, 0x44, 0xcf, 0x0b, 0x7c, 0x79, + 0x36, 0xc7, 0x77, 0xcb, 0xba, 0x89, 0x65, 0xa7, 0x25, 0x52, 0x32, 0xa7, 0xcf, 0x53, + 0xa9, 0x22, 0x88, 0x5a, + ], + Bitcoin::Maj16 => [ + 0x38, 0x66, 0x9c, 0xe5, 0xe1, 0xe1, 0x71, 0x47, 0x54, 0x00, 0x73, 0x1b, 0xee, 0xb6, + 0x0b, 0xca, 0xfa, 0xd6, 0x66, 0x04, 0xc9, 0x39, 0x40, 0x16, 0x0c, 0xd7, 0x12, 0x88, + 0x35, 0x55, 0x93, 0x42, + ], + Bitcoin::Maj32 => [ + 0x55, 0x54, 0x34, 0x9b, 0x58, 0x4f, 0x5c, 0x38, 0x72, 0xc7, 0xf4, 0xf2, 0x57, 0x82, + 0x9e, 0x2a, 0xe8, 0x22, 0xd8, 0x23, 0x42, 0x4c, 0xeb, 0x95, 0x98, 0xf0, 0x83, 0x18, + 0x58, 0x6a, 0x88, 0x07, + ], + Bitcoin::Maj64 => [ + 0x73, 0x49, 0x03, 0xba, 0xef, 0xb7, 0x1d, 0x5e, 0xa4, 0x16, 0x48, 0xff, 0x43, 0xee, + 0xe6, 0x98, 0x94, 0xe0, 0x63, 0xb3, 0x88, 0xea, 0x42, 0x2f, 0x96, 0xae, 0xde, 0x19, + 0x3c, 0xea, 0xb8, 0x39, + ], + Bitcoin::Maj8 => [ + 0xba, 0x47, 0xa3, 0x99, 0xdc, 0x94, 0x35, 0xe1, 0x8e, 0x08, 0x0a, 0x4e, 0x18, 0xaf, + 0x7c, 0x65, 0x7f, 0xd3, 0x9f, 0x7c, 0xe7, 0xd6, 0x05, 0x2e, 0x46, 0x90, 0x23, 0x11, + 0xb0, 0x78, 0xd5, 0x85, + ], + Bitcoin::Max16 => [ + 0xaa, 0x55, 0x23, 0x74, 0x6c, 0xab, 0xfa, 0xf5, 0x66, 0x8e, 0x9e, 0x07, 0x37, 0xe5, + 0x6b, 0x06, 0x06, 0x22, 0x51, 0xd7, 0xe8, 0x0a, 0xb9, 0xb9, 0x10, 0x6d, 0x8f, 0x17, + 0x2d, 0xc8, 0x4d, 0xd6, + ], + Bitcoin::Max32 => [ + 0x69, 0x22, 0x96, 0x5d, 0x14, 0x43, 0x45, 0xc9, 0x13, 0xec, 0xb3, 0x0b, 0x5e, 0xd4, + 0x7e, 0x88, 0xda, 0xe3, 0x5c, 0x12, 0x21, 0xf2, 0x6a, 0xa9, 0x2d, 0xd5, 0xa5, 0xf6, + 0x15, 0xdb, 0xdb, 0x53, + ], + Bitcoin::Max64 => [ + 0x8a, 0x9b, 0xe9, 0x07, 0xb6, 0xa4, 0xc3, 0x0a, 0xbc, 0xc0, 0xf2, 0x2d, 0x01, 0x30, + 0x74, 0xc2, 0xd5, 0x6b, 0xb0, 0x81, 0xf2, 0x62, 0x18, 0x57, 0xd5, 0x38, 0xcc, 0x97, + 0x13, 0x1e, 0x44, 0x09, + ], + Bitcoin::Max8 => [ + 0xb4, 0xbf, 0x93, 0x23, 0x40, 0x22, 0xe8, 0x60, 0xfe, 0x76, 0xc0, 0xb5, 0x36, 0x0e, + 0x8b, 0x36, 0xff, 0x81, 0xee, 0x67, 0x05, 0xb5, 0x93, 0xac, 0xdf, 0x65, 0x5a, 0xc6, + 0xe6, 0xd7, 0xae, 0xba, + ], + Bitcoin::Median16 => [ + 0x17, 0xe2, 0xe8, 0x7f, 0x07, 0x60, 0xf4, 0xfb, 0x3c, 0x9f, 0xd0, 0xbe, 0xd0, 0x00, + 0xd7, 0x39, 0x73, 0xab, 0x60, 0xf5, 0xe6, 0xc2, 0xc1, 0xfa, 0xb1, 0x7f, 0x9b, 0x23, + 0xee, 0x6a, 0xca, 0x48, + ], + Bitcoin::Median32 => [ + 0x11, 0x60, 0xae, 0x8e, 0xa8, 0xd3, 0x0f, 0x9a, 0x22, 0x33, 0xc4, 0x8e, 0x73, 0x12, + 0x40, 0xf8, 0x44, 0x93, 0xb8, 0x28, 0xb5, 0x57, 0x93, 0xe2, 0xf4, 0x04, 0x2a, 0x19, + 0x82, 0xac, 0x26, 0xa5, + ], + Bitcoin::Median64 => [ + 0xc8, 0x73, 0x73, 0x64, 0x9e, 0x7e, 0x40, 0x50, 0xbb, 0x73, 0x33, 0x7e, 0x08, 0xeb, + 0x5d, 0xe4, 0x52, 0x28, 0xab, 0x86, 0xad, 0x4e, 0x1f, 0x41, 0x91, 0xe5, 0x20, 0x2a, + 0xa6, 0xaf, 0xa0, 0xc5, + ], + Bitcoin::Median8 => [ + 0xc3, 0xb4, 0xe0, 0x89, 0x8a, 0x21, 0xbd, 0xe9, 0x4d, 0xae, 0xd3, 0x7a, 0x20, 0xad, + 0xf9, 0x0c, 0x8b, 0xe5, 0x69, 0x1a, 0x03, 0xb6, 0xa1, 0xe5, 0x56, 0x38, 0x5d, 0x42, + 0xeb, 0x19, 0x02, 0x2b, + ], + Bitcoin::Min16 => [ + 0x5f, 0xd0, 0x05, 0x1e, 0xdb, 0x37, 0x19, 0xa6, 0x45, 0xb2, 0x72, 0xa0, 0x21, 0x08, + 0xef, 0xbb, 0x3d, 0x9b, 0xc0, 0xf6, 0x06, 0x21, 0xbf, 0x5a, 0x5b, 0xab, 0xe1, 0x16, + 0xd5, 0x55, 0xd5, 0x78, + ], + Bitcoin::Min32 => [ + 0xd8, 0x07, 0x82, 0xa2, 0xb5, 0xd8, 0x6a, 0xb6, 0xb9, 0xc9, 0xc3, 0xfb, 0x77, 0x8a, + 0x34, 0x73, 0xf6, 0x00, 0xb1, 0x85, 0xfe, 0x19, 0x25, 0xee, 0x9f, 0xc2, 0xe8, 0x77, + 0x7e, 0xd2, 0x66, 0x01, + ], + Bitcoin::Min64 => [ + 0xc5, 0xc0, 0x9d, 0x50, 0x13, 0x38, 0xe9, 0xa5, 0x12, 0xcf, 0x89, 0x76, 0xca, 0x4b, + 0x32, 0xb9, 0x24, 0x80, 0xbe, 0xf6, 0xae, 0xb2, 0x9d, 0x36, 0xd5, 0x90, 0xd3, 0x5b, + 0xf9, 0xf9, 0xec, 0xe1, + ], + Bitcoin::Min8 => [ + 0x81, 0xd2, 0x1e, 0x12, 0x81, 0x42, 0x38, 0x81, 0x80, 0x2c, 0x0e, 0x0c, 0x7d, 0x22, + 0xbd, 0x34, 0xd2, 0x6b, 0xd1, 0x2a, 0x4c, 0x4f, 0x1b, 0x70, 0x68, 0xe7, 0xe1, 0x83, + 0x82, 0x08, 0x48, 0xe9, + ], + Bitcoin::Modulo16 => [ + 0xb6, 0xb8, 0x7c, 0xfa, 0xb6, 0x7e, 0x55, 0x19, 0xf1, 0xc9, 0x98, 0xda, 0x47, 0x94, + 0x37, 0xbb, 0x79, 0xe6, 0x74, 0xf7, 0x15, 0xe9, 0xa2, 0xe5, 0x38, 0xee, 0xc5, 0xec, + 0x18, 0xe1, 0x8e, 0xa5, + ], + Bitcoin::Modulo32 => [ + 0x8d, 0x48, 0x6e, 0x83, 0x16, 0x54, 0xf3, 0x8a, 0x32, 0xda, 0x35, 0xeb, 0x7b, 0xb6, + 0x55, 0xa6, 0xed, 0x69, 0x4d, 0xbf, 0xa0, 0x58, 0x95, 0x7d, 0x9f, 0x5c, 0xbf, 0xcc, + 0x57, 0x92, 0xc6, 0x5b, + ], + Bitcoin::Modulo64 => [ + 0x14, 0xdf, 0x20, 0xd9, 0x3d, 0xfd, 0xef, 0xe2, 0x55, 0x9b, 0xac, 0x50, 0xed, 0x38, + 0x19, 0x3b, 0xd7, 0x8b, 0xd6, 0x3f, 0x92, 0x9d, 0x86, 0xfb, 0x4f, 0x29, 0xa7, 0xc5, + 0xaf, 0x32, 0x42, 0xad, + ], + Bitcoin::Modulo8 => [ + 0x2c, 0x75, 0x8a, 0x7c, 0x0f, 0x59, 0xe8, 0x00, 0xe9, 0x4f, 0x3d, 0xc5, 0xa0, 0x01, + 0xbf, 0x8e, 0xd9, 0x43, 0x5f, 0x75, 0xa2, 0xd9, 0x69, 0x30, 0xc5, 0x7e, 0xaa, 0xb0, + 0xcd, 0x80, 0xaf, 0x5c, + ], + Bitcoin::Multiply16 => [ + 0x75, 0xbd, 0x41, 0xf2, 0xd2, 0xb3, 0x39, 0xf0, 0x69, 0xbf, 0xdf, 0xd8, 0x02, 0xd6, + 0x1e, 0x6c, 0xa8, 0xe3, 0xba, 0xd6, 0xfb, 0x6d, 0x95, 0xb6, 0x72, 0x09, 0x5b, 0x93, + 0x34, 0x5f, 0x04, 0x7f, + ], + Bitcoin::Multiply32 => [ + 0x84, 0xcb, 0xe6, 0xce, 0x87, 0x03, 0x79, 0x92, 0x13, 0x87, 0x7c, 0x1b, 0xd5, 0x05, + 0xc7, 0x64, 0x34, 0x33, 0x69, 0x00, 0x2e, 0x50, 0x2c, 0x43, 0xd9, 0x7f, 0x3d, 0x57, + 0x77, 0x2d, 0x6c, 0x87, + ], + Bitcoin::Multiply64 => [ + 0x92, 0x98, 0x7b, 0x80, 0x1b, 0x92, 0xf6, 0x79, 0xeb, 0x96, 0x13, 0x68, 0x84, 0x44, + 0xa1, 0x78, 0x87, 0x50, 0xa8, 0x50, 0x6e, 0x03, 0xa9, 0x21, 0x8c, 0x21, 0xec, 0xc7, + 0x20, 0x82, 0xdc, 0x6a, + ], + Bitcoin::Multiply8 => [ + 0x76, 0x4c, 0xab, 0x71, 0xdb, 0x94, 0x59, 0xa7, 0x69, 0x6d, 0x94, 0x4a, 0x50, 0x09, + 0x5b, 0x1a, 0xeb, 0xdf, 0xd9, 0x28, 0x4b, 0xdb, 0x74, 0x96, 0xa7, 0xb3, 0x02, 0x41, + 0xcc, 0xba, 0x3e, 0xce, + ], + Bitcoin::Negate16 => [ + 0xe7, 0x60, 0xee, 0x40, 0x29, 0xc3, 0x4f, 0x89, 0x74, 0x06, 0xff, 0xde, 0xa5, 0x55, + 0x84, 0x86, 0x62, 0xe8, 0x9c, 0x98, 0x3e, 0x60, 0x70, 0xbd, 0x02, 0x72, 0xad, 0x0f, + 0xa3, 0x42, 0xef, 0xa3, + ], + Bitcoin::Negate32 => [ + 0x84, 0x95, 0xb7, 0x40, 0x09, 0xad, 0x07, 0xc9, 0x30, 0x2a, 0x25, 0xae, 0x56, 0xc3, + 0xe9, 0x73, 0x3f, 0x00, 0xc2, 0xba, 0xa4, 0x10, 0xea, 0xc4, 0xa5, 0x8e, 0x75, 0xdb, + 0x83, 0xaf, 0x1d, 0x22, + ], + Bitcoin::Negate64 => [ + 0x34, 0xe8, 0x9f, 0xaf, 0x34, 0x5a, 0xfd, 0x5e, 0x7b, 0x29, 0x00, 0x14, 0x52, 0xfc, + 0x5f, 0xc2, 0xe3, 0x78, 0x3a, 0xf7, 0xf2, 0x10, 0x16, 0x43, 0xbd, 0x76, 0x70, 0x6a, + 0x6f, 0xc3, 0xf3, 0x6a, + ], + Bitcoin::Negate8 => [ + 0xe8, 0x1b, 0xe0, 0xb1, 0x5c, 0x67, 0x1a, 0xb8, 0xdf, 0x1f, 0x48, 0x69, 0xc5, 0x7f, + 0x11, 0x11, 0x18, 0xcb, 0x66, 0x83, 0x54, 0x97, 0x5c, 0x63, 0x66, 0xec, 0xb2, 0xb8, + 0xbb, 0x7c, 0x15, 0xcf, + ], + Bitcoin::NumInputs => [ + 0x5c, 0x5a, 0xc4, 0xff, 0x6d, 0xa5, 0x6c, 0xb3, 0x72, 0xb2, 0x32, 0x66, 0x6e, 0x83, + 0x34, 0xb9, 0xe2, 0xcf, 0xb0, 0xdc, 0xb4, 0x18, 0xf1, 0x61, 0xbf, 0xf1, 0x49, 0xe8, + 0x4e, 0xc9, 0x2c, 0x3e, + ], + Bitcoin::NumOutputs => [ + 0x98, 0xa1, 0xcc, 0xa7, 0x05, 0xdf, 0xcf, 0xaf, 0xd3, 0xa6, 0x9e, 0x9a, 0xdc, 0x05, + 0xba, 0x47, 0xe1, 0xfe, 0xfa, 0x6a, 0x29, 0xf3, 0x42, 0x86, 0x20, 0x48, 0xe4, 0x96, + 0x86, 0x48, 0xc3, 0xd7, + ], + Bitcoin::One16 => [ + 0x2e, 0x5e, 0x3d, 0x95, 0xe4, 0x53, 0x16, 0x88, 0x8e, 0x4f, 0x37, 0x09, 0xef, 0x83, + 0x2b, 0x9f, 0xd9, 0xe1, 0x5f, 0x30, 0x71, 0x9b, 0xf5, 0x5f, 0xc2, 0xe0, 0xe0, 0x9a, + 0x36, 0x57, 0xd8, 0x82, + ], + Bitcoin::One32 => [ + 0x06, 0x42, 0x6b, 0x85, 0x3c, 0x1b, 0xcb, 0x33, 0x8a, 0xed, 0xbe, 0x1f, 0x89, 0xa6, + 0xd9, 0xb7, 0xa3, 0xda, 0x03, 0x8c, 0xd0, 0x0a, 0x44, 0x71, 0x18, 0x36, 0x93, 0x49, + 0x66, 0x9e, 0x29, 0x76, + ], + Bitcoin::One64 => [ + 0xab, 0x1d, 0x2c, 0xd9, 0x96, 0x78, 0xda, 0x3c, 0x12, 0x8d, 0x39, 0xad, 0x9f, 0xe6, + 0xff, 0xa9, 0x55, 0xc1, 0x6e, 0x5e, 0xf2, 0xc2, 0x5b, 0xb4, 0x31, 0x83, 0x15, 0x59, + 0x69, 0x51, 0xf4, 0x27, + ], + Bitcoin::One8 => [ + 0x3c, 0xc5, 0xf5, 0x23, 0xd6, 0xa6, 0x35, 0x5d, 0xc9, 0x24, 0xee, 0x0a, 0xc1, 0xf5, + 0xfe, 0x2c, 0x52, 0x12, 0x75, 0xe3, 0xaa, 0x9f, 0x21, 0xd3, 0x1b, 0x08, 0x2d, 0xb2, + 0xac, 0x23, 0x0d, 0x9d, + ], + Bitcoin::Or1 => [ + 0xc4, 0x65, 0x96, 0x43, 0x69, 0xfc, 0xa2, 0x09, 0x7f, 0x83, 0x53, 0x0c, 0x87, 0xbc, + 0xbc, 0x90, 0xc3, 0x06, 0x57, 0x9d, 0x9f, 0x3b, 0xfe, 0xdd, 0xf4, 0xa1, 0x72, 0xa4, + 0xea, 0x0b, 0x58, 0xec, + ], + Bitcoin::Or16 => [ + 0x5a, 0x98, 0x5e, 0x04, 0x3b, 0x85, 0x27, 0x3b, 0x90, 0xf9, 0x0e, 0x20, 0xf8, 0x2b, + 0x75, 0x32, 0x33, 0x51, 0xcf, 0x2a, 0x4e, 0x62, 0xa7, 0xf9, 0xcb, 0x2f, 0x05, 0x96, + 0x40, 0x2e, 0x9e, 0x28, + ], + Bitcoin::Or32 => [ + 0x35, 0x52, 0x38, 0x3a, 0x57, 0xff, 0xb4, 0x8d, 0x63, 0xa0, 0x33, 0x7a, 0xf0, 0xdd, + 0x6e, 0xfa, 0xb6, 0xb4, 0x6c, 0x5d, 0xe1, 0x72, 0x0e, 0x42, 0x0b, 0xdd, 0x1c, 0x82, + 0x27, 0x6b, 0xc9, 0xa9, + ], + Bitcoin::Or64 => [ + 0x51, 0xa1, 0x73, 0xda, 0xdc, 0xa0, 0x1a, 0xc6, 0xf6, 0x2e, 0x75, 0xd5, 0xcd, 0x35, + 0x22, 0xf0, 0x9f, 0xde, 0x62, 0xb1, 0x15, 0x13, 0xe0, 0x68, 0x42, 0x28, 0x52, 0xa4, + 0x91, 0x67, 0xb6, 0x06, + ], + Bitcoin::Or8 => [ + 0x79, 0xef, 0xbd, 0xcb, 0x53, 0x7b, 0xeb, 0xcb, 0x18, 0x8d, 0x11, 0x16, 0xb7, 0x8a, + 0x10, 0x9b, 0xff, 0xbc, 0x2a, 0x6c, 0xe3, 0xd1, 0xf8, 0x70, 0x15, 0x4a, 0x79, 0x56, + 0x09, 0x1b, 0x34, 0x2f, + ], + Bitcoin::OutpointHash => [ + 0x3a, 0x1a, 0xe9, 0x0e, 0x16, 0x7f, 0xb4, 0x0d, 0x6e, 0x13, 0xb4, 0x51, 0xad, 0x67, + 0x41, 0x0d, 0x8d, 0xd9, 0x91, 0xc8, 0x7d, 0x6a, 0x4a, 0x59, 0xcc, 0x76, 0xc6, 0x3f, + 0x3b, 0x9e, 0x5e, 0x56, + ], + Bitcoin::OutputHash => [ + 0x91, 0x21, 0x1f, 0xc6, 0x01, 0x1a, 0x64, 0x93, 0x00, 0xc6, 0xbe, 0xe9, 0x4f, 0xdd, + 0x48, 0xa9, 0x7f, 0xa2, 0xa9, 0xb6, 0xf2, 0x84, 0xbe, 0x01, 0x5d, 0x46, 0x2d, 0x17, + 0xde, 0x66, 0x4a, 0xc3, + ], + Bitcoin::OutputScriptHash => [ + 0xbd, 0xfd, 0xb2, 0x31, 0xf4, 0xf1, 0xa6, 0x2c, 0x9d, 0x7b, 0x03, 0x93, 0x1e, 0x7f, + 0x19, 0xa4, 0x54, 0x6a, 0xf2, 0x34, 0x75, 0x4c, 0xbf, 0x70, 0x05, 0x9f, 0xdd, 0x42, + 0xbb, 0xbc, 0x41, 0x26, + ], + Bitcoin::OutputScriptsHash => [ + 0xff, 0x20, 0xbc, 0x43, 0x65, 0xe7, 0x17, 0x07, 0x57, 0x1c, 0x6e, 0x17, 0x38, 0xe1, + 0xed, 0x32, 0x6f, 0x7c, 0x35, 0x1d, 0xe1, 0x30, 0x22, 0xae, 0xa3, 0xd6, 0x40, 0x6b, + 0x8a, 0xee, 0x8e, 0x3b, + ], + Bitcoin::OutputValue => [ + 0x93, 0x36, 0x43, 0xb6, 0xc5, 0xa6, 0x22, 0x0a, 0xbb, 0xca, 0x6f, 0x35, 0x09, 0xfe, + 0xff, 0x6d, 0x13, 0xef, 0xa6, 0xc9, 0xfa, 0xe9, 0x59, 0x24, 0x57, 0x53, 0x64, 0xf2, + 0xb1, 0x64, 0xd2, 0xbc, + ], + Bitcoin::OutputValuesHash => [ + 0x22, 0x89, 0x93, 0x79, 0x00, 0x57, 0x06, 0x6f, 0x20, 0x16, 0x97, 0x1d, 0xf5, 0x5e, + 0x6f, 0x67, 0xd2, 0x52, 0xef, 0xb6, 0xda, 0xab, 0xd0, 0xfc, 0x56, 0x6a, 0x8d, 0x21, + 0x56, 0xef, 0xbb, 0xfc, + ], + Bitcoin::OutputsHash => [ + 0xf2, 0xeb, 0x6d, 0x0f, 0x01, 0x8e, 0x6f, 0x15, 0xe3, 0x5b, 0xaa, 0x82, 0xe5, 0x7e, + 0x14, 0xfe, 0x34, 0x37, 0x96, 0xf2, 0x19, 0x68, 0x26, 0xbe, 0xd7, 0xc7, 0x87, 0x55, + 0x98, 0xd6, 0x64, 0x1d, + ], + Bitcoin::ParseLock => [ + 0x3d, 0xb8, 0x45, 0x35, 0xfa, 0x3d, 0x90, 0xef, 0x0b, 0x58, 0x1e, 0x22, 0xb6, 0x1d, + 0x21, 0x27, 0x84, 0x4b, 0x21, 0x16, 0xe8, 0x4f, 0x81, 0x4a, 0x5c, 0xba, 0xc5, 0x2d, + 0xf5, 0x15, 0xf2, 0xd2, + ], + Bitcoin::ParseSequence => [ + 0x38, 0xb2, 0x53, 0x3f, 0x5f, 0xed, 0xe8, 0x69, 0xba, 0xa1, 0x70, 0x69, 0x83, 0xdf, + 0x4c, 0x89, 0xd6, 0x2d, 0x5f, 0x90, 0x80, 0x0b, 0x47, 0xea, 0xb2, 0x11, 0x13, 0x31, + 0x1a, 0x5a, 0xae, 0xc9, + ], + Bitcoin::PointVerify1 => [ + 0xbe, 0x2a, 0x98, 0x90, 0xf1, 0xd5, 0xb6, 0x15, 0x14, 0x7f, 0x82, 0x41, 0xe0, 0x60, + 0x9b, 0x5c, 0xac, 0x01, 0xec, 0xe0, 0xa3, 0xf9, 0x23, 0x68, 0x67, 0xb2, 0xbf, 0xde, + 0xa1, 0xb8, 0x04, 0x4e, + ], + Bitcoin::RightExtend16_32 => [ + 0xdb, 0xf1, 0x8d, 0x87, 0xa7, 0x89, 0x21, 0x39, 0xa3, 0x88, 0xe9, 0xa9, 0x83, 0xc4, + 0x89, 0x92, 0xac, 0x35, 0xa8, 0x45, 0x56, 0xee, 0x0d, 0xef, 0xc1, 0xda, 0xdf, 0x0c, + 0x5f, 0x47, 0x1a, 0x26, + ], + Bitcoin::RightExtend16_64 => [ + 0xd0, 0x11, 0xac, 0xc7, 0x94, 0xe3, 0xc4, 0x78, 0x9a, 0xcc, 0xd0, 0xd5, 0xfe, 0x49, + 0x97, 0xd3, 0x34, 0xd9, 0x1f, 0x08, 0x31, 0xa1, 0xeb, 0x35, 0x04, 0xb4, 0xcb, 0x2d, + 0xdf, 0x47, 0x97, 0xaf, + ], + Bitcoin::RightExtend32_64 => [ + 0xa5, 0xaa, 0x5d, 0xb1, 0xe5, 0x35, 0xe7, 0x23, 0x2a, 0xd3, 0x6d, 0xaf, 0xba, 0x6d, + 0x5a, 0x20, 0x0d, 0x54, 0xeb, 0x85, 0x3b, 0x75, 0xdc, 0x70, 0xa5, 0x94, 0xed, 0x64, + 0xaa, 0x6b, 0xd9, 0xab, + ], + Bitcoin::RightExtend8_16 => [ + 0x81, 0x06, 0xd5, 0x8a, 0x80, 0x66, 0xee, 0x6e, 0x15, 0xe5, 0x5c, 0xa5, 0x2c, 0xb7, + 0xaf, 0xd8, 0xe3, 0x27, 0x75, 0x87, 0xbf, 0xd7, 0xde, 0xc0, 0xbe, 0x37, 0xd4, 0x06, + 0x74, 0x2a, 0x39, 0x31, + ], + Bitcoin::RightExtend8_32 => [ + 0xdf, 0xa4, 0xba, 0xfa, 0x43, 0x2a, 0x53, 0x38, 0xd3, 0x74, 0xde, 0xb6, 0xb7, 0x24, + 0xb7, 0xf6, 0xea, 0xe5, 0x58, 0x61, 0xfe, 0x73, 0x1d, 0x43, 0x04, 0x8a, 0xa3, 0x04, + 0xd1, 0xf7, 0xf9, 0xa2, + ], + Bitcoin::RightExtend8_64 => [ + 0x62, 0x0a, 0x37, 0x03, 0x8b, 0x6f, 0xa1, 0x27, 0x49, 0x5f, 0x0b, 0x46, 0x49, 0x6f, + 0x64, 0x35, 0xdd, 0x2d, 0xad, 0x7e, 0xf0, 0xc0, 0xfd, 0x2c, 0xd6, 0x5f, 0x54, 0xdc, + 0x18, 0x5e, 0x99, 0x7b, + ], + Bitcoin::RightPadHigh16_32 => [ + 0x2b, 0x6a, 0xbc, 0x38, 0x32, 0x1a, 0x7c, 0x54, 0x2f, 0xb1, 0x69, 0x74, 0x62, 0x1c, + 0xed, 0x80, 0x88, 0x0d, 0xb5, 0x19, 0xbb, 0x48, 0x60, 0x93, 0x42, 0x6e, 0x8c, 0xe1, + 0x8e, 0x01, 0x69, 0xb1, + ], + Bitcoin::RightPadHigh16_64 => [ + 0xad, 0x90, 0xd8, 0xff, 0xa5, 0x74, 0x50, 0xb3, 0xb5, 0xe9, 0x09, 0x62, 0x25, 0x34, + 0x9e, 0xd8, 0xf0, 0x72, 0xe1, 0x01, 0x72, 0x93, 0xf3, 0x92, 0xef, 0x85, 0x4e, 0x03, + 0x19, 0xab, 0xc9, 0x34, + ], + Bitcoin::RightPadHigh1_16 => [ + 0x28, 0x81, 0x58, 0xb1, 0xc9, 0x10, 0x87, 0x7b, 0x7e, 0xea, 0x3d, 0xfc, 0xf2, 0xb2, + 0xb7, 0x88, 0x92, 0x28, 0x08, 0xb6, 0xd6, 0xfa, 0x75, 0xf8, 0x96, 0x77, 0x19, 0x04, + 0x8b, 0x14, 0x12, 0x49, + ], + Bitcoin::RightPadHigh1_32 => [ + 0xee, 0x2a, 0xd7, 0x7f, 0x66, 0x8d, 0x3d, 0x6a, 0x2e, 0x68, 0x50, 0x6e, 0x49, 0x04, + 0xcf, 0x50, 0xa0, 0x84, 0x60, 0xe1, 0xd2, 0xb8, 0x6a, 0x81, 0xe1, 0x4e, 0x41, 0xf8, + 0xda, 0x4c, 0xdd, 0xf2, + ], + Bitcoin::RightPadHigh1_64 => [ + 0x3d, 0x6a, 0x7f, 0xe6, 0x9a, 0x11, 0x64, 0x2a, 0xce, 0xd6, 0x84, 0x2b, 0x89, 0xaa, + 0x1b, 0xb8, 0x41, 0x3e, 0x39, 0x90, 0x63, 0xcc, 0x16, 0x78, 0x6a, 0xf7, 0xc0, 0x33, + 0xda, 0xd5, 0x8b, 0x95, + ], + Bitcoin::RightPadHigh1_8 => [ + 0x28, 0x44, 0xbd, 0xfd, 0x6a, 0xba, 0x29, 0xdf, 0x03, 0xf9, 0x3a, 0xa6, 0xae, 0xb2, + 0x1c, 0x06, 0x40, 0x28, 0xdb, 0x05, 0xff, 0x77, 0xd8, 0xd9, 0x1c, 0xfd, 0xcd, 0xef, + 0xb1, 0x90, 0xc5, 0xbd, + ], + Bitcoin::RightPadHigh32_64 => [ + 0xb4, 0x32, 0xe5, 0x32, 0x1a, 0xe1, 0x71, 0x4c, 0xe1, 0x95, 0x29, 0xd8, 0x5f, 0x24, + 0xff, 0x89, 0x87, 0x91, 0x0e, 0xbc, 0xf0, 0x15, 0xf8, 0x7f, 0x15, 0xbb, 0xed, 0x55, + 0xf0, 0xa0, 0xe8, 0x92, + ], + Bitcoin::RightPadHigh8_16 => [ + 0x6f, 0x2d, 0x96, 0xc9, 0x54, 0x13, 0xca, 0x9a, 0xa8, 0xcc, 0x55, 0x0f, 0x25, 0x73, + 0xe1, 0x66, 0x99, 0x56, 0xd6, 0x07, 0x69, 0x2c, 0xf1, 0xca, 0x6d, 0xc7, 0x6d, 0x2f, + 0x2b, 0x4a, 0x3a, 0xc8, + ], + Bitcoin::RightPadHigh8_32 => [ + 0xdf, 0x2c, 0x7f, 0x92, 0x99, 0x00, 0xa4, 0x49, 0x01, 0xe6, 0xff, 0x65, 0x27, 0x6a, + 0x95, 0x1a, 0xeb, 0x95, 0xdf, 0x25, 0x0b, 0x13, 0x97, 0x14, 0xd4, 0x19, 0x54, 0x04, + 0xd7, 0x78, 0x98, 0xed, + ], + Bitcoin::RightPadHigh8_64 => [ + 0x79, 0xc0, 0x1d, 0xa3, 0xe6, 0x0b, 0x9c, 0x69, 0x35, 0xce, 0x3e, 0x15, 0x98, 0xb1, + 0x78, 0x40, 0xaf, 0x82, 0xdc, 0xb0, 0xdd, 0xc6, 0x3a, 0xef, 0x4a, 0x06, 0xe7, 0xf9, + 0xca, 0x5d, 0x27, 0x41, + ], + Bitcoin::RightPadLow16_32 => [ + 0x6f, 0x20, 0x10, 0x27, 0xcc, 0x75, 0x98, 0x02, 0x30, 0xa0, 0x70, 0x85, 0x9c, 0x3e, + 0x38, 0x02, 0x36, 0xa1, 0xcb, 0x10, 0xe6, 0x1a, 0x01, 0xaa, 0x1f, 0x6d, 0x23, 0x1d, + 0x15, 0x14, 0x2f, 0x25, + ], + Bitcoin::RightPadLow16_64 => [ + 0xb8, 0x6e, 0x1f, 0x0b, 0xfe, 0xc6, 0x55, 0x98, 0xd0, 0xa3, 0xd1, 0xec, 0x96, 0x03, + 0x05, 0xb9, 0x67, 0x45, 0x67, 0x3e, 0x1b, 0x16, 0xbf, 0x32, 0x7a, 0x71, 0x68, 0x05, + 0x83, 0xd7, 0x1d, 0x90, + ], + Bitcoin::RightPadLow1_16 => [ + 0x05, 0x2a, 0x64, 0x99, 0xc9, 0x3e, 0xe6, 0xbc, 0x1a, 0xe6, 0x57, 0xf8, 0x5f, 0xd4, + 0xd4, 0xfe, 0x67, 0x7a, 0xbc, 0xee, 0x54, 0x0d, 0x13, 0x40, 0x33, 0x54, 0x2e, 0x9a, + 0xb6, 0x0a, 0x63, 0xdd, + ], + Bitcoin::RightPadLow1_32 => [ + 0x5b, 0x70, 0xd4, 0x28, 0x96, 0x0e, 0x95, 0xcc, 0x40, 0xd5, 0x18, 0x46, 0xf5, 0x3a, + 0x4d, 0x0a, 0x35, 0xc9, 0x01, 0x5d, 0x15, 0x00, 0xb6, 0xbc, 0x84, 0x9b, 0x72, 0x83, + 0x5e, 0x2b, 0xd4, 0x40, + ], + Bitcoin::RightPadLow1_64 => [ + 0x44, 0xef, 0xeb, 0x87, 0xca, 0x2a, 0xd7, 0xfd, 0x4b, 0x73, 0xf1, 0x63, 0x07, 0xc7, + 0xf0, 0x59, 0x02, 0x65, 0x6f, 0x35, 0x09, 0x0f, 0xb0, 0xa4, 0x32, 0x6c, 0x64, 0x89, + 0x88, 0xae, 0x1d, 0x39, + ], + Bitcoin::RightPadLow1_8 => [ + 0x93, 0x40, 0x39, 0x8b, 0xcc, 0x8e, 0xa8, 0x3e, 0xc8, 0x40, 0xbe, 0x72, 0x9d, 0xbb, + 0x8b, 0x81, 0x20, 0x78, 0x24, 0xee, 0x87, 0x5d, 0x15, 0x82, 0x59, 0xd6, 0xda, 0xd2, + 0x0a, 0x83, 0x93, 0x0c, + ], + Bitcoin::RightPadLow32_64 => [ + 0x69, 0x3e, 0x28, 0x10, 0x1e, 0x04, 0xfd, 0xa4, 0x3b, 0x97, 0xe6, 0x11, 0xf0, 0xfe, + 0x98, 0x00, 0x0e, 0x14, 0x30, 0x2e, 0x5d, 0xcd, 0x6e, 0xd6, 0x5e, 0xee, 0x42, 0xe3, + 0x40, 0x14, 0x24, 0x2f, + ], + Bitcoin::RightPadLow8_16 => [ + 0x09, 0x6b, 0x25, 0xc3, 0xc8, 0x41, 0x5f, 0x04, 0xd8, 0x83, 0x27, 0x43, 0xeb, 0x2f, + 0x84, 0x56, 0xd5, 0xf0, 0xa6, 0x44, 0x91, 0x3d, 0x3e, 0xc5, 0x9d, 0x34, 0xf4, 0x55, + 0x25, 0x01, 0xfa, 0x20, + ], + Bitcoin::RightPadLow8_32 => [ + 0xfc, 0x7f, 0x57, 0x22, 0xa6, 0x2a, 0xa2, 0x20, 0x18, 0xcc, 0x81, 0xcd, 0x00, 0xa9, + 0x32, 0x6c, 0x7f, 0xe9, 0xc6, 0x3a, 0xbc, 0xe2, 0xbd, 0xa4, 0xc0, 0xe6, 0x6a, 0x3f, + 0x47, 0xc6, 0x7c, 0x53, + ], + Bitcoin::RightPadLow8_64 => [ + 0xa5, 0xbb, 0x7d, 0x5e, 0xfc, 0xa0, 0xe4, 0x8d, 0x9d, 0x80, 0xc5, 0x02, 0x71, 0x15, + 0xb4, 0x85, 0x78, 0x10, 0x51, 0xe0, 0xef, 0x46, 0xe4, 0xd6, 0x08, 0x31, 0x7a, 0x1c, + 0x42, 0x61, 0xbc, 0x46, + ], + Bitcoin::RightRotate16 => [ + 0x48, 0x2e, 0xa7, 0xe1, 0x21, 0x45, 0x01, 0xd9, 0x3c, 0x9a, 0xd1, 0x6f, 0xa8, 0xb9, + 0x7b, 0xf5, 0xb3, 0x84, 0xfc, 0x2b, 0x54, 0x78, 0x9b, 0x8c, 0xd9, 0xe7, 0x84, 0xcc, + 0xd0, 0xeb, 0x9d, 0x57, + ], + Bitcoin::RightRotate32 => [ + 0x09, 0x41, 0xb6, 0xee, 0xea, 0x9a, 0xf8, 0x19, 0x5b, 0x02, 0x8a, 0xfc, 0x0b, 0xd2, + 0xa5, 0x34, 0x21, 0x8b, 0xf9, 0x0d, 0x1a, 0x0e, 0x37, 0x3d, 0x74, 0x74, 0x18, 0x54, + 0x0b, 0x72, 0x6d, 0x73, + ], + Bitcoin::RightRotate64 => [ + 0x44, 0x4d, 0xbb, 0xc3, 0xdd, 0x2a, 0x11, 0xa5, 0xc7, 0xb0, 0x43, 0x9f, 0xdb, 0xa9, + 0x9a, 0xc7, 0x4a, 0x11, 0xb8, 0xee, 0xb2, 0xdb, 0x30, 0x1e, 0x24, 0x3e, 0xa8, 0x91, + 0x22, 0x90, 0x71, 0x52, + ], + Bitcoin::RightRotate8 => [ + 0x72, 0x65, 0xa3, 0x0c, 0x2e, 0x83, 0x6e, 0x65, 0x54, 0x4a, 0xba, 0x91, 0x1b, 0x64, + 0xd1, 0x8f, 0xa6, 0x9b, 0x17, 0x65, 0x45, 0x85, 0x6c, 0x77, 0xc4, 0xf0, 0xd7, 0x6f, + 0xc3, 0xf5, 0x83, 0x51, + ], + Bitcoin::RightShift16 => [ + 0xcd, 0x57, 0xa3, 0xd3, 0xab, 0x2d, 0x92, 0xd4, 0xf0, 0x86, 0x55, 0x04, 0x3a, 0x8b, + 0x8b, 0xb6, 0x73, 0x89, 0x81, 0xfa, 0xe6, 0xda, 0x01, 0x34, 0xb4, 0xde, 0xda, 0xce, + 0x5f, 0x00, 0x88, 0x60, + ], + Bitcoin::RightShift32 => [ + 0xd6, 0xb3, 0x26, 0xb1, 0xa3, 0x23, 0x57, 0xa3, 0x32, 0x80, 0x7d, 0x3f, 0xa1, 0xb1, + 0x56, 0xc2, 0x8b, 0x16, 0x22, 0xf7, 0x38, 0xde, 0xf1, 0x26, 0x81, 0x46, 0x7f, 0x34, + 0x9b, 0xd3, 0x49, 0x4b, + ], + Bitcoin::RightShift64 => [ + 0xb2, 0x09, 0x5f, 0x2d, 0x47, 0x33, 0x5d, 0x5f, 0x98, 0xc8, 0x54, 0x34, 0xa2, 0xfa, + 0xf5, 0xb0, 0xf7, 0x5c, 0xf8, 0x99, 0x01, 0x2a, 0x34, 0xbb, 0xcd, 0x0a, 0x14, 0xcb, + 0xed, 0xb6, 0x11, 0x07, + ], + Bitcoin::RightShift8 => [ + 0x4b, 0x2b, 0x1a, 0xa2, 0xef, 0x73, 0x21, 0x73, 0x17, 0x0d, 0x62, 0x1a, 0x38, 0xde, + 0xb2, 0x61, 0xe4, 0x73, 0xc0, 0x7c, 0x55, 0x8b, 0x05, 0x5a, 0x25, 0xa8, 0x6e, 0x4e, + 0x32, 0x1a, 0xfc, 0x04, + ], + Bitcoin::RightShiftWith16 => [ + 0x14, 0xb7, 0x76, 0x85, 0x47, 0xb3, 0xd3, 0xf4, 0x7e, 0xe5, 0xc2, 0xb8, 0x0d, 0x9b, + 0xda, 0xe2, 0xae, 0xc1, 0xf9, 0xc6, 0x59, 0x4e, 0xd3, 0x12, 0x7b, 0x12, 0x64, 0x5a, + 0xdc, 0xf5, 0x97, 0x54, + ], + Bitcoin::RightShiftWith32 => [ + 0x32, 0x7b, 0x6e, 0x98, 0xa6, 0xfd, 0x34, 0x0c, 0x60, 0xcf, 0x83, 0xaa, 0x64, 0x99, + 0x33, 0x11, 0x4c, 0xb8, 0xd8, 0x4f, 0x59, 0x0e, 0x01, 0x21, 0x3a, 0x26, 0x10, 0x01, + 0x2b, 0x46, 0x07, 0xea, + ], + Bitcoin::RightShiftWith64 => [ + 0x06, 0x2f, 0xa7, 0x4a, 0xf3, 0x47, 0x6e, 0x59, 0x38, 0x7b, 0xe0, 0x8e, 0x69, 0x49, + 0xa0, 0x05, 0x43, 0xbc, 0x84, 0xa2, 0xb6, 0x89, 0xea, 0x39, 0xad, 0x6e, 0xed, 0x7f, + 0x75, 0x67, 0x85, 0xd4, + ], + Bitcoin::RightShiftWith8 => [ + 0x14, 0x1b, 0xe4, 0x7e, 0x96, 0x7b, 0x2f, 0xd7, 0xc7, 0x12, 0x6c, 0x5a, 0xdf, 0x2d, + 0xfe, 0x47, 0x31, 0x5b, 0xbc, 0x10, 0x53, 0xbb, 0xe6, 0x05, 0xb3, 0x88, 0x98, 0xdb, + 0xed, 0x49, 0xf2, 0x27, + ], + Bitcoin::Rightmost16_1 => [ + 0x3f, 0x3c, 0x43, 0x46, 0x87, 0x17, 0x42, 0x26, 0x5e, 0x87, 0xf0, 0x01, 0xb4, 0x6d, + 0xe7, 0xd1, 0x98, 0x75, 0x1b, 0x34, 0xfa, 0xa1, 0x80, 0x18, 0xde, 0x60, 0xc8, 0x46, + 0x8d, 0x9b, 0x98, 0xa4, + ], + Bitcoin::Rightmost16_2 => [ + 0xc1, 0x8b, 0x9f, 0xdd, 0x34, 0x0a, 0x26, 0x7a, 0xc1, 0x6d, 0x4f, 0x39, 0xee, 0x75, + 0x43, 0x56, 0x52, 0xaa, 0xca, 0x52, 0x56, 0x50, 0xb5, 0x1a, 0x45, 0x87, 0x98, 0x04, + 0x8e, 0x62, 0x7d, 0x51, + ], + Bitcoin::Rightmost16_4 => [ + 0xc6, 0xc5, 0x3f, 0xa7, 0x1e, 0x23, 0x0c, 0xf0, 0x58, 0x51, 0x58, 0xf4, 0x70, 0x58, + 0x8b, 0xac, 0x5c, 0x51, 0x8f, 0x84, 0xf9, 0xfc, 0x23, 0x86, 0x52, 0xf1, 0x75, 0xfb, + 0x6e, 0xa1, 0x8c, 0x11, + ], + Bitcoin::Rightmost16_8 => [ + 0xee, 0x76, 0x9c, 0x1c, 0xc8, 0xa3, 0xfd, 0xd1, 0x83, 0x8f, 0xc9, 0xf0, 0x49, 0x0c, + 0xe7, 0x03, 0x93, 0xfd, 0x91, 0xba, 0x3c, 0xbd, 0x4a, 0xbd, 0x08, 0x64, 0x9f, 0xb9, + 0xc4, 0x43, 0x11, 0xbd, + ], + Bitcoin::Rightmost32_1 => [ + 0x1c, 0x44, 0x23, 0x69, 0xfb, 0x81, 0xf6, 0x11, 0xd3, 0x28, 0x01, 0x0b, 0x86, 0x4b, + 0xcc, 0xb7, 0xf3, 0x5e, 0xd4, 0x77, 0xdf, 0xa3, 0x85, 0x55, 0x74, 0xc1, 0x35, 0x64, + 0xcd, 0xbd, 0xb8, 0x60, + ], + Bitcoin::Rightmost32_16 => [ + 0xad, 0xd2, 0xc3, 0x39, 0x0d, 0x9a, 0xf7, 0xc2, 0x4a, 0x15, 0x9a, 0x37, 0xd6, 0x9d, + 0x44, 0x84, 0xd2, 0xc2, 0x4a, 0x2c, 0xb5, 0xb0, 0xeb, 0x2d, 0x3c, 0x49, 0x3d, 0x98, + 0x12, 0xac, 0xfd, 0x74, + ], + Bitcoin::Rightmost32_2 => [ + 0x00, 0xb8, 0x81, 0x5a, 0xd7, 0x42, 0x3d, 0xd5, 0x8c, 0xb9, 0x8b, 0xe8, 0x2c, 0xad, + 0x26, 0x67, 0x5c, 0x3b, 0xf5, 0x4a, 0x0b, 0xed, 0xba, 0xde, 0x34, 0x64, 0xb4, 0xfe, + 0x5a, 0x4e, 0x8c, 0xe6, + ], + Bitcoin::Rightmost32_4 => [ + 0x84, 0xfa, 0x5a, 0x54, 0xf7, 0x72, 0x9f, 0x9d, 0x68, 0x99, 0x4b, 0xea, 0xb9, 0x3a, + 0xe7, 0x9b, 0x8c, 0x4a, 0x10, 0xd5, 0xb7, 0xae, 0x97, 0x27, 0xaa, 0x17, 0x16, 0xe5, + 0x7d, 0x03, 0x3b, 0x74, + ], + Bitcoin::Rightmost32_8 => [ + 0x7d, 0x38, 0x05, 0xd3, 0xc7, 0x8c, 0x4e, 0xea, 0x91, 0xe3, 0xd3, 0x5e, 0xfd, 0xd4, + 0x7e, 0xed, 0xd4, 0x21, 0xaf, 0x84, 0xd2, 0x19, 0x10, 0x32, 0x93, 0x32, 0xa0, 0xb5, + 0x48, 0x7f, 0xab, 0x63, + ], + Bitcoin::Rightmost64_1 => [ + 0xd3, 0xb1, 0x64, 0xc5, 0xdc, 0x66, 0xcc, 0x7e, 0xf9, 0x23, 0x4f, 0xed, 0xe4, 0xdc, + 0x7f, 0x0d, 0xa5, 0xcd, 0x71, 0xc1, 0xc1, 0xd4, 0xca, 0xd6, 0x0f, 0xb4, 0xec, 0x57, + 0x3e, 0x2b, 0x8a, 0x75, + ], + Bitcoin::Rightmost64_16 => [ + 0xea, 0xe4, 0x34, 0x78, 0xf9, 0xf2, 0xf4, 0x52, 0xef, 0xac, 0x15, 0xee, 0xe6, 0x0f, + 0x8b, 0x52, 0x53, 0xd8, 0x0a, 0x2d, 0x32, 0x12, 0x9b, 0x4e, 0x5b, 0xa3, 0x83, 0x00, + 0xad, 0x98, 0x52, 0xfd, + ], + Bitcoin::Rightmost64_2 => [ + 0x9c, 0xd4, 0xa9, 0x8b, 0xbd, 0xb8, 0xa3, 0x35, 0x85, 0xc0, 0x0f, 0x47, 0xd6, 0xad, + 0xab, 0x7a, 0xf5, 0x42, 0x86, 0xfb, 0x8a, 0xe6, 0x0f, 0x72, 0x30, 0x11, 0xfb, 0x84, + 0xc0, 0xee, 0x78, 0xf9, + ], + Bitcoin::Rightmost64_32 => [ + 0x7f, 0x24, 0x20, 0xae, 0x5b, 0x0f, 0x5a, 0x3f, 0x6f, 0x2e, 0x60, 0xb6, 0x1f, 0x8a, + 0x41, 0x5c, 0x08, 0x8b, 0x94, 0xb2, 0x1c, 0x1a, 0x62, 0xa3, 0xfd, 0xaa, 0xc7, 0x49, + 0xdb, 0xdf, 0x4c, 0x71, + ], + Bitcoin::Rightmost64_4 => [ + 0xe2, 0x65, 0x55, 0x2a, 0x24, 0xfb, 0xcd, 0xec, 0x05, 0x83, 0xd7, 0x18, 0x3e, 0x48, + 0xeb, 0xc2, 0xff, 0x6d, 0x31, 0x65, 0x57, 0xba, 0xc5, 0x91, 0x5c, 0x03, 0xcb, 0x23, + 0x35, 0xd2, 0x32, 0x95, + ], + Bitcoin::Rightmost64_8 => [ + 0x98, 0xcd, 0x95, 0xf9, 0x5d, 0x46, 0x64, 0x1b, 0x04, 0x9e, 0x77, 0xbf, 0x90, 0xee, + 0xa5, 0x98, 0xad, 0xf2, 0x9e, 0xe5, 0x00, 0xe6, 0x50, 0x72, 0x87, 0x54, 0x8b, 0xb1, + 0xcd, 0xaf, 0x78, 0x4d, + ], + Bitcoin::Rightmost8_1 => [ + 0x08, 0x76, 0xfc, 0xd4, 0x69, 0x85, 0x91, 0xf3, 0x31, 0x91, 0x01, 0x57, 0x4c, 0xe1, + 0x53, 0xfc, 0xdf, 0xe9, 0x4f, 0x58, 0x1a, 0xac, 0x5e, 0x75, 0xf3, 0xcd, 0x74, 0x46, + 0xdf, 0x56, 0xf3, 0xc7, + ], + Bitcoin::Rightmost8_2 => [ + 0xb9, 0xf7, 0xb2, 0x90, 0xaf, 0xe7, 0xf1, 0x89, 0xe3, 0x2a, 0xeb, 0xf2, 0xcc, 0x4d, + 0xdc, 0xa9, 0x6b, 0xb0, 0x07, 0x64, 0xc7, 0xbe, 0x28, 0x87, 0xdc, 0xe0, 0x54, 0xd0, + 0x9e, 0x38, 0xc3, 0x53, + ], + Bitcoin::Rightmost8_4 => [ + 0xf2, 0x8e, 0x9a, 0xf5, 0xaf, 0x4c, 0x9c, 0xca, 0x4b, 0x43, 0xcc, 0x6a, 0xdf, 0x9d, + 0x9d, 0x8d, 0x16, 0x9c, 0x87, 0xc5, 0x55, 0x9f, 0x9f, 0x3c, 0xca, 0xc8, 0xf2, 0x35, + 0x2b, 0x62, 0x9f, 0x18, + ], + Bitcoin::ScalarAdd => [ + 0x11, 0xdd, 0xbe, 0xba, 0xeb, 0xf4, 0x21, 0x80, 0xa0, 0xb7, 0xed, 0xdf, 0xfd, 0xc4, + 0x8e, 0xc7, 0x51, 0x13, 0x30, 0xfb, 0x33, 0x15, 0xfa, 0x65, 0xd5, 0x8a, 0xff, 0x66, + 0xb9, 0xca, 0xf2, 0xd4, + ], + Bitcoin::ScalarInvert => [ + 0xa6, 0x39, 0x27, 0x25, 0xbb, 0x2d, 0xad, 0xbb, 0x1e, 0x76, 0xdf, 0x2d, 0xec, 0x57, + 0xdf, 0x55, 0xc3, 0xfc, 0xc5, 0x77, 0x3b, 0x62, 0x21, 0x8a, 0xec, 0x55, 0xa7, 0x5e, + 0x14, 0xf3, 0xd6, 0x0d, + ], + Bitcoin::ScalarIsZero => [ + 0xf7, 0x5e, 0xda, 0x06, 0xce, 0x6a, 0xf0, 0x9f, 0xae, 0x37, 0xdb, 0x4e, 0x62, 0x25, + 0xe6, 0xa8, 0xac, 0x86, 0xa2, 0x36, 0x37, 0x62, 0x7d, 0x62, 0x64, 0x09, 0x19, 0x0f, + 0xf3, 0xb3, 0x9d, 0x90, + ], + Bitcoin::ScalarMultiply => [ + 0x4a, 0x61, 0x67, 0x2a, 0xce, 0xc4, 0x88, 0x77, 0x56, 0xde, 0x1d, 0xb6, 0x04, 0x21, + 0xa1, 0x2b, 0x90, 0x1a, 0x85, 0x8a, 0x6e, 0xe6, 0x35, 0x2e, 0x55, 0x9d, 0x4c, 0xe5, + 0x97, 0x33, 0x52, 0xbe, + ], + Bitcoin::ScalarMultiplyLambda => [ + 0x49, 0xea, 0x9c, 0x3f, 0xb1, 0xd8, 0xff, 0x52, 0xd2, 0xdb, 0x03, 0x46, 0x9f, 0xdf, + 0xe8, 0x50, 0x50, 0x3f, 0xdd, 0xeb, 0x45, 0xe1, 0x6d, 0x26, 0xe8, 0x92, 0x8a, 0xdd, + 0x25, 0x87, 0x0e, 0x91, + ], + Bitcoin::ScalarNegate => [ + 0x1d, 0xbf, 0x8b, 0x49, 0x1e, 0xc6, 0x65, 0x80, 0x3f, 0x63, 0x33, 0x30, 0xd3, 0xff, + 0xb0, 0xe7, 0x81, 0xe6, 0x7c, 0x18, 0x01, 0xac, 0x9d, 0x49, 0xbb, 0xf4, 0x35, 0x89, + 0xab, 0xf7, 0x82, 0xbf, + ], + Bitcoin::ScalarNormalize => [ + 0x46, 0x33, 0x18, 0x0e, 0xa0, 0x2c, 0x4d, 0xf7, 0x81, 0x9d, 0x3d, 0x54, 0xa4, 0x01, + 0x73, 0x4f, 0x96, 0x5b, 0x31, 0xac, 0xc7, 0x84, 0x05, 0x4e, 0xbf, 0xb7, 0x31, 0x68, + 0x16, 0xb0, 0x29, 0xec, + ], + Bitcoin::ScalarSquare => [ + 0x8a, 0x27, 0x9e, 0x6f, 0x61, 0x3a, 0xa9, 0xe9, 0x34, 0xf2, 0xf2, 0xa3, 0x43, 0xc0, + 0xd3, 0x29, 0x1c, 0x36, 0x70, 0xe2, 0x97, 0xdd, 0xae, 0x20, 0x52, 0x9e, 0x82, 0x50, + 0x69, 0xef, 0xea, 0x0e, + ], + Bitcoin::Scale => [ + 0x12, 0x6e, 0x22, 0x12, 0x5b, 0xac, 0x80, 0xb9, 0x9b, 0x7b, 0x73, 0x43, 0xb4, 0xe5, + 0xe5, 0x86, 0x60, 0x82, 0x16, 0x10, 0x5d, 0x4d, 0xe6, 0xf7, 0x94, 0xad, 0xd3, 0x4e, + 0x23, 0xb1, 0x95, 0xca, + ], + Bitcoin::ScriptCMR => [ + 0xa8, 0xa4, 0xa6, 0x22, 0x10, 0xb5, 0xe4, 0x95, 0x0e, 0x25, 0x34, 0x24, 0x7c, 0x74, + 0x11, 0xd1, 0xc8, 0xff, 0x22, 0x86, 0x5b, 0x54, 0x56, 0xbb, 0xb2, 0x16, 0x38, 0xe9, + 0x14, 0xf5, 0xe5, 0x28, + ], + Bitcoin::Sha256Block => [ + 0x45, 0x35, 0xf3, 0xe1, 0xab, 0x9f, 0x1b, 0x75, 0x7a, 0x06, 0x91, 0x37, 0xe1, 0xd5, + 0xb1, 0xca, 0xad, 0x8e, 0x31, 0xf7, 0x8d, 0xc5, 0xfb, 0xd0, 0x73, 0x46, 0x49, 0xf9, + 0x40, 0xa7, 0xfc, 0x96, + ], + Bitcoin::Sha256Ctx8Add1 => [ + 0x9a, 0x47, 0x11, 0xb8, 0xc5, 0x69, 0x0e, 0x58, 0x7e, 0x5f, 0x79, 0xe6, 0x8d, 0x6e, + 0xca, 0x04, 0x74, 0x58, 0xaa, 0x63, 0xb8, 0xbc, 0x9e, 0xe5, 0x68, 0x08, 0x6a, 0x4a, + 0x1b, 0x56, 0xd8, 0x34, + ], + Bitcoin::Sha256Ctx8Add128 => [ + 0x1c, 0xb1, 0xdb, 0x8a, 0x05, 0x5b, 0x31, 0x97, 0xac, 0xf0, 0xf0, 0x8c, 0xe9, 0xc6, + 0x35, 0xad, 0xd6, 0x95, 0xb6, 0x0f, 0x23, 0x4b, 0x18, 0xe0, 0xb3, 0x23, 0xc9, 0x37, + 0xb0, 0x38, 0x5a, 0xea, + ], + Bitcoin::Sha256Ctx8Add16 => [ + 0xe0, 0x84, 0x54, 0x75, 0xeb, 0xb9, 0x01, 0x40, 0xfa, 0x4e, 0x01, 0xaf, 0x8a, 0x94, + 0x35, 0x99, 0x1a, 0xd8, 0x7a, 0xf9, 0x8c, 0x08, 0xae, 0xce, 0x11, 0x0e, 0x99, 0xcb, + 0xce, 0xcd, 0xee, 0x79, + ], + Bitcoin::Sha256Ctx8Add2 => [ + 0x7d, 0x69, 0x13, 0x8f, 0x1c, 0x94, 0x2b, 0xee, 0x2f, 0xdf, 0x60, 0x0c, 0xe4, 0x4b, + 0x36, 0xff, 0x97, 0x83, 0x9d, 0xc2, 0xbb, 0xda, 0xfb, 0xd5, 0xfa, 0xb4, 0xdf, 0xbc, + 0x3c, 0x97, 0x6f, 0x29, + ], + Bitcoin::Sha256Ctx8Add256 => [ + 0x4f, 0x5c, 0x29, 0xd5, 0x36, 0x86, 0xc0, 0x60, 0x62, 0xb3, 0x83, 0x24, 0xf8, 0xaf, + 0xf1, 0x7e, 0xc5, 0x56, 0xa2, 0x95, 0xff, 0x09, 0x8b, 0x10, 0xe7, 0x05, 0xdd, 0x22, + 0xe1, 0x3b, 0xc3, 0xc9, + ], + Bitcoin::Sha256Ctx8Add32 => [ + 0xd5, 0x7b, 0x67, 0xb1, 0x74, 0xe7, 0x8e, 0x38, 0xf9, 0xbc, 0xa8, 0xe0, 0x7a, 0xdd, + 0x61, 0xc7, 0x53, 0xe2, 0xc1, 0x56, 0xd8, 0xe9, 0x83, 0x2a, 0xa6, 0x62, 0x04, 0x55, + 0x00, 0xf5, 0x1a, 0x80, + ], + Bitcoin::Sha256Ctx8Add4 => [ + 0x95, 0xda, 0x32, 0x99, 0x3f, 0x5c, 0x7d, 0x00, 0x83, 0x06, 0x4c, 0xdf, 0xf1, 0xbe, + 0xc3, 0xb9, 0x36, 0xc6, 0x38, 0x33, 0x7a, 0xde, 0xc5, 0x47, 0x48, 0x7a, 0xf2, 0x32, + 0xd6, 0x9f, 0xdf, 0x65, + ], + Bitcoin::Sha256Ctx8Add512 => [ + 0x4a, 0xcb, 0x16, 0x3a, 0xa4, 0x8f, 0x09, 0xd5, 0xf2, 0x6d, 0x2b, 0x2a, 0xb1, 0x88, + 0xa6, 0xc6, 0xb6, 0xc4, 0xae, 0xdf, 0x23, 0xc9, 0x19, 0x00, 0x1c, 0x02, 0xee, 0x15, + 0xb3, 0x37, 0xa9, 0x6e, + ], + Bitcoin::Sha256Ctx8Add64 => [ + 0x52, 0xe5, 0x3e, 0xc5, 0x77, 0x0f, 0x9b, 0xe4, 0x06, 0x9a, 0xee, 0xfc, 0xb2, 0x13, + 0x22, 0xb1, 0x3a, 0xb6, 0xe3, 0x94, 0x1f, 0xdc, 0x2c, 0x85, 0xf4, 0xb4, 0x1b, 0xe6, + 0x7d, 0x38, 0xea, 0x7e, + ], + Bitcoin::Sha256Ctx8Add8 => [ + 0xc2, 0x6b, 0x28, 0xaf, 0xe5, 0xe8, 0x66, 0xd8, 0x46, 0x16, 0x81, 0x4d, 0x1a, 0x13, + 0xfb, 0x86, 0x30, 0xb9, 0xe8, 0x4e, 0x5d, 0x78, 0x15, 0x56, 0xc6, 0xd8, 0x23, 0x6e, + 0xfb, 0x45, 0xdf, 0xf9, + ], + Bitcoin::Sha256Ctx8AddBuffer511 => [ + 0xad, 0x69, 0x90, 0x46, 0x48, 0xa8, 0x23, 0x8d, 0x00, 0xd8, 0x51, 0x63, 0xfc, 0xe8, + 0x19, 0x63, 0xa0, 0x04, 0x7a, 0xb5, 0x82, 0xbe, 0x97, 0xa4, 0x14, 0x00, 0x65, 0x59, + 0x79, 0xcf, 0xdd, 0x28, + ], + Bitcoin::Sha256Ctx8Finalize => [ + 0x8e, 0x45, 0xbd, 0xc3, 0x87, 0xd4, 0xed, 0xfa, 0x73, 0x35, 0x25, 0xf3, 0xab, 0x19, + 0xe4, 0x2b, 0x58, 0xec, 0xb1, 0xb5, 0xf6, 0xdc, 0xcf, 0x94, 0xed, 0xbf, 0x59, 0x95, + 0x8a, 0xe3, 0xe1, 0x16, + ], + Bitcoin::Sha256Ctx8Init => [ + 0x63, 0x5f, 0x64, 0x05, 0x84, 0x86, 0x85, 0xc0, 0x11, 0xfe, 0xbd, 0x41, 0xfa, 0xac, + 0x87, 0x4b, 0xbb, 0xf5, 0xb2, 0x4d, 0x5f, 0xb1, 0x2f, 0xed, 0xbc, 0xb6, 0xcb, 0xff, + 0x95, 0xa0, 0xf3, 0x66, + ], + Bitcoin::Sha256Iv => [ + 0x12, 0xe4, 0x59, 0x37, 0x51, 0xc9, 0x46, 0x3b, 0x56, 0x25, 0x03, 0xc1, 0x40, 0xd7, + 0x8b, 0x3b, 0x75, 0x7a, 0x1f, 0x4f, 0x16, 0x32, 0x1d, 0x28, 0x62, 0xd3, 0x25, 0x43, + 0x85, 0x38, 0x97, 0x1b, + ], + Bitcoin::SigAllHash => [ + 0x09, 0x78, 0xb9, 0xe5, 0x0b, 0x9e, 0x8e, 0x09, 0x8b, 0x27, 0xf2, 0xb8, 0xb5, 0x9d, + 0xe5, 0x4f, 0x62, 0xba, 0x7c, 0x13, 0x33, 0xdf, 0x3b, 0xed, 0x22, 0x1e, 0x26, 0x62, + 0x68, 0x05, 0xbc, 0x55, + ], + Bitcoin::Some1 => [ + 0x15, 0xca, 0x4e, 0x4b, 0x82, 0xc2, 0xf9, 0x1b, 0x9a, 0x79, 0x29, 0x92, 0xcd, 0xc1, + 0xb2, 0x92, 0xab, 0x86, 0xa2, 0xd2, 0x93, 0x9c, 0x9a, 0x64, 0xb5, 0x0b, 0xe6, 0x0b, + 0xda, 0x6a, 0xb4, 0xca, + ], + Bitcoin::Some16 => [ + 0xa9, 0xdf, 0xbb, 0xea, 0xb5, 0x9d, 0xf7, 0x2a, 0x45, 0xfc, 0x3f, 0xc7, 0xac, 0x58, + 0x1e, 0xc8, 0xda, 0x71, 0x3f, 0x2f, 0x81, 0x03, 0xf7, 0x87, 0xaa, 0x1c, 0xee, 0x4e, + 0x0b, 0xa6, 0x48, 0x66, + ], + Bitcoin::Some32 => [ + 0x46, 0x33, 0xa3, 0x97, 0x74, 0x2e, 0xf4, 0x82, 0xbe, 0x2f, 0xa3, 0xfb, 0x64, 0x10, + 0xec, 0x79, 0xc3, 0x73, 0x83, 0x65, 0x69, 0xfb, 0xbc, 0xb1, 0xf9, 0x48, 0xec, 0x32, + 0x48, 0x73, 0x78, 0xb7, + ], + Bitcoin::Some64 => [ + 0x1d, 0xc2, 0x45, 0xac, 0x6f, 0x5b, 0x42, 0x2b, 0xd1, 0x88, 0x6e, 0xf5, 0x14, 0x4c, + 0x4d, 0xc7, 0x2c, 0x96, 0x73, 0x15, 0x59, 0x66, 0x07, 0x6c, 0xd8, 0x39, 0x68, 0x1d, + 0x9e, 0xc7, 0xf8, 0xf5, + ], + Bitcoin::Some8 => [ + 0x33, 0xaf, 0xb9, 0xc6, 0x45, 0x4e, 0x59, 0x0e, 0xc1, 0x3e, 0xd7, 0x5e, 0x1b, 0x7d, + 0x9c, 0x3a, 0x3d, 0xe6, 0x75, 0x2b, 0xcc, 0x7c, 0x1d, 0x4c, 0xb3, 0x63, 0xfa, 0x51, + 0x82, 0x8b, 0xcb, 0x74, + ], + Bitcoin::Subtract16 => [ + 0x4e, 0x06, 0xec, 0x31, 0x37, 0x62, 0x22, 0xe2, 0x5e, 0x27, 0xd0, 0x15, 0x9d, 0xc1, + 0xc0, 0x71, 0x4a, 0x44, 0xca, 0x6a, 0xac, 0xf9, 0x50, 0x5c, 0xaa, 0xd2, 0x80, 0xe9, + 0x73, 0xfb, 0x5c, 0xab, + ], + Bitcoin::Subtract32 => [ + 0xb9, 0xc0, 0xf3, 0x6e, 0x75, 0x22, 0xa8, 0xd9, 0x49, 0x05, 0x0d, 0x51, 0x6a, 0x05, + 0xce, 0x20, 0x3a, 0x1f, 0x9a, 0x9e, 0x37, 0x2f, 0xd2, 0x63, 0xde, 0x38, 0xb0, 0xe9, + 0x03, 0x13, 0x41, 0x98, + ], + Bitcoin::Subtract64 => [ + 0x1c, 0xdb, 0x5c, 0x74, 0xad, 0xd1, 0x02, 0xf5, 0x0f, 0x93, 0x8e, 0xd8, 0x86, 0xf4, + 0x96, 0xe5, 0xba, 0xb2, 0x75, 0x5c, 0x3c, 0x48, 0x4e, 0x88, 0x87, 0x90, 0x3d, 0x2f, + 0x6a, 0x57, 0xf3, 0xaa, + ], + Bitcoin::Subtract8 => [ + 0x4f, 0x21, 0x17, 0xa0, 0xe8, 0x10, 0x59, 0xff, 0x0c, 0xd6, 0x4d, 0x84, 0x88, 0x65, + 0x42, 0xe5, 0x75, 0xea, 0x8d, 0x6e, 0xc0, 0x31, 0x08, 0xfd, 0x0b, 0x50, 0x8b, 0x39, + 0x20, 0x8c, 0xd0, 0xef, + ], + Bitcoin::Swu => [ + 0x00, 0xf5, 0x1f, 0x4f, 0x4b, 0xec, 0xe7, 0x90, 0x03, 0xec, 0xad, 0x48, 0x1a, 0x12, + 0x5a, 0xf7, 0x17, 0x6e, 0x4d, 0xe9, 0x8c, 0x33, 0x92, 0x42, 0x5c, 0xb9, 0x14, 0x66, + 0x26, 0xc1, 0x3b, 0x3b, + ], + Bitcoin::TapEnvHash => [ + 0x19, 0xd9, 0x94, 0x4c, 0x4d, 0x45, 0x7c, 0x70, 0xba, 0xbc, 0x45, 0xcc, 0xcb, 0xd5, + 0x73, 0xb3, 0x9a, 0x51, 0xd0, 0xc9, 0x91, 0x15, 0xb4, 0x12, 0x78, 0x3b, 0x49, 0x00, + 0x82, 0xfd, 0x0e, 0x58, + ], + Bitcoin::TapdataInit => [ + 0xa4, 0xd0, 0x22, 0xef, 0x5c, 0xf4, 0x67, 0xbc, 0xa0, 0x32, 0x5e, 0x46, 0x3f, 0xca, + 0xce, 0x7c, 0xbd, 0xd6, 0x4f, 0xf8, 0xf7, 0x1c, 0x5c, 0x7f, 0x63, 0xe6, 0x07, 0x84, + 0xaa, 0x0a, 0xc4, 0x86, + ], + Bitcoin::TapleafHash => [ + 0x0c, 0x07, 0x16, 0xfe, 0x5d, 0x97, 0x8e, 0xa8, 0xe0, 0xc7, 0x5a, 0xdc, 0x82, 0x10, + 0xd6, 0x60, 0x06, 0x2e, 0x3d, 0xa0, 0x6f, 0x1a, 0x66, 0x61, 0x31, 0x79, 0x27, 0xd3, + 0xb8, 0x4b, 0x50, 0x73, + ], + Bitcoin::TapleafVersion => [ + 0xe2, 0xec, 0xb1, 0xcb, 0x0e, 0xd4, 0xed, 0x93, 0x48, 0x35, 0x45, 0xfd, 0x8a, 0x62, + 0xf8, 0xaa, 0x10, 0x17, 0x53, 0x49, 0xff, 0xcc, 0x5a, 0xd3, 0xde, 0x7f, 0x34, 0x84, + 0xea, 0x1f, 0x10, 0x3f, + ], + Bitcoin::Tappath => [ + 0x99, 0xe8, 0x21, 0x1e, 0x8c, 0x1b, 0xe6, 0xd9, 0xca, 0x98, 0xd3, 0xd4, 0x3d, 0x91, + 0x42, 0x56, 0x7e, 0x06, 0xa8, 0x40, 0x22, 0x39, 0x33, 0x03, 0xfa, 0xb0, 0xb5, 0x7d, + 0x39, 0x40, 0x74, 0xe8, + ], + Bitcoin::TappathHash => [ + 0x02, 0x11, 0x54, 0x6d, 0x07, 0x78, 0xe7, 0x87, 0x14, 0x1e, 0xce, 0x65, 0xdf, 0x6c, + 0xd1, 0xdb, 0x31, 0x38, 0x8f, 0xc1, 0x42, 0x19, 0x68, 0xc8, 0xcf, 0xd8, 0xd7, 0x59, + 0x26, 0xdb, 0x47, 0xb3, + ], + Bitcoin::TotalInputValue => [ + 0x81, 0x28, 0x7a, 0x15, 0x89, 0xdd, 0xc2, 0x17, 0x99, 0x26, 0xb7, 0x06, 0x5e, 0x9b, + 0x26, 0x77, 0xb7, 0xfb, 0x09, 0x9b, 0x95, 0xf9, 0x47, 0xa7, 0xdd, 0x59, 0x0c, 0xdd, + 0x4c, 0xcf, 0x4a, 0x56, + ], + Bitcoin::TotalOutputValue => [ + 0xba, 0x03, 0x2f, 0x3e, 0x62, 0xf8, 0xfc, 0xb0, 0x4b, 0x04, 0x29, 0xa2, 0x53, 0xb5, + 0xec, 0x57, 0xe4, 0xc8, 0x7a, 0xe2, 0xe9, 0x51, 0xe1, 0x45, 0xd7, 0x65, 0x0e, 0x7f, + 0x0c, 0x63, 0xe5, 0x55, + ], + Bitcoin::TransactionId => [ + 0x5c, 0x49, 0xea, 0x98, 0x6b, 0x32, 0x8b, 0xe2, 0xa4, 0xe0, 0xb3, 0x15, 0xb6, 0xb3, + 0xfe, 0xf2, 0x3c, 0x1f, 0x68, 0x56, 0xbb, 0xc3, 0xb0, 0x56, 0xc9, 0x9c, 0xf5, 0x9f, + 0xbd, 0x54, 0x6e, 0x65, + ], + Bitcoin::TxHash => [ + 0x54, 0xe5, 0x3c, 0x99, 0x93, 0xab, 0xd5, 0x5d, 0x1f, 0x85, 0x23, 0xd2, 0xbb, 0x21, + 0x7b, 0x32, 0xe6, 0xfe, 0x86, 0x1f, 0x84, 0xc9, 0x86, 0xb7, 0xee, 0x8b, 0xdc, 0x68, + 0x81, 0x06, 0x87, 0x4a, + ], + Bitcoin::TxIsFinal => [ + 0x7b, 0x0e, 0x4f, 0x4c, 0xa8, 0xe5, 0xaf, 0x61, 0xa1, 0xd3, 0x45, 0x4e, 0x11, 0xef, + 0x9a, 0xb6, 0x88, 0x70, 0x61, 0x21, 0x1c, 0x00, 0x90, 0xeb, 0xa9, 0x55, 0x3d, 0xa2, + 0xe4, 0x5d, 0x84, 0x73, + ], + Bitcoin::TxLockDistance => [ + 0xb6, 0xfb, 0xaa, 0xc2, 0x10, 0xa3, 0x06, 0xbe, 0x8b, 0x58, 0xd0, 0xd7, 0xb1, 0x56, + 0x3f, 0x62, 0x23, 0x36, 0xd2, 0xae, 0xb5, 0x6c, 0x39, 0x3d, 0x27, 0x64, 0x45, 0xa9, + 0xa2, 0x2c, 0xc4, 0xa7, + ], + Bitcoin::TxLockDuration => [ + 0x53, 0x57, 0x28, 0x18, 0xe7, 0xe5, 0xb9, 0x8f, 0x96, 0x8c, 0x9d, 0xa7, 0xdf, 0x50, + 0x90, 0xd9, 0x82, 0x6f, 0x9b, 0xcf, 0x84, 0xb6, 0x36, 0x39, 0x5e, 0xea, 0x32, 0x1b, + 0x69, 0x09, 0xec, 0xe9, + ], + Bitcoin::TxLockHeight => [ + 0x44, 0x9f, 0x61, 0xdf, 0x1a, 0x7b, 0xad, 0x8d, 0x9e, 0x0a, 0x96, 0x67, 0x14, 0x22, + 0x7e, 0x57, 0x10, 0x07, 0xf9, 0x3c, 0x51, 0x7b, 0x80, 0x5d, 0x61, 0x65, 0x10, 0xe8, + 0xff, 0x62, 0x17, 0x2b, + ], + Bitcoin::TxLockTime => [ + 0x31, 0xdf, 0x36, 0x3f, 0x17, 0xb2, 0xcf, 0xc9, 0x7a, 0x1f, 0x93, 0x72, 0xc1, 0x4a, + 0x32, 0x58, 0x64, 0xd7, 0xcb, 0x13, 0xaa, 0x8d, 0x52, 0x15, 0xfb, 0x25, 0x3d, 0x33, + 0x10, 0x91, 0x77, 0x62, + ], + Bitcoin::Verify => [ + 0xcd, 0xca, 0x2a, 0x05, 0xe5, 0x2c, 0xef, 0xa5, 0x9d, 0xc7, 0xa5, 0xb0, 0xda, 0xe2, + 0x20, 0x98, 0xfb, 0x89, 0x6e, 0x39, 0x13, 0xbf, 0xdd, 0x44, 0x6b, 0x59, 0x4e, 0x1f, + 0x92, 0x50, 0x78, 0x3e, + ], + Bitcoin::Version => [ + 0x83, 0x73, 0x58, 0x64, 0x00, 0xb6, 0x79, 0x0b, 0x46, 0xab, 0x04, 0x10, 0x52, 0x3c, + 0xf0, 0x1e, 0xb7, 0x4d, 0x10, 0xfa, 0xf4, 0x8a, 0x3a, 0xcc, 0x86, 0xc4, 0xc5, 0x1d, + 0x06, 0xa5, 0x2c, 0x49, + ], + Bitcoin::Xor1 => [ + 0x8c, 0x4e, 0x4e, 0x6e, 0xbf, 0x46, 0x30, 0xb2, 0x9b, 0x5a, 0x57, 0xea, 0x79, 0xf0, + 0xc9, 0xaf, 0x6b, 0xff, 0x54, 0xc4, 0xd2, 0xd7, 0x69, 0xbf, 0x51, 0x59, 0x47, 0x74, + 0xa5, 0x2b, 0x99, 0xc9, + ], + Bitcoin::Xor16 => [ + 0xd9, 0xf0, 0xaf, 0x3f, 0xe3, 0xfd, 0x24, 0x7c, 0x1d, 0xf3, 0x4a, 0x25, 0x27, 0x13, + 0xb2, 0xe9, 0x33, 0xa9, 0x45, 0xa5, 0x67, 0x19, 0x48, 0x7f, 0x8e, 0xd7, 0xf5, 0x63, + 0xea, 0x86, 0x1a, 0xb5, + ], + Bitcoin::Xor32 => [ + 0xd5, 0xae, 0x27, 0x12, 0xed, 0xea, 0xf6, 0x76, 0x52, 0x0f, 0xa3, 0xba, 0x0f, 0x40, + 0xbf, 0x4a, 0x16, 0x57, 0x43, 0x7e, 0xff, 0xbd, 0x99, 0x86, 0xd0, 0x6a, 0xe8, 0x1b, + 0x29, 0xa4, 0xf9, 0x8c, + ], + Bitcoin::Xor64 => [ + 0xc4, 0xdf, 0x1c, 0xcf, 0x33, 0x3e, 0xde, 0xbd, 0xd4, 0x0d, 0xea, 0x9a, 0x0e, 0x6c, + 0xbb, 0x83, 0x06, 0x31, 0xe8, 0x3a, 0x94, 0xbb, 0x77, 0x9f, 0xe6, 0x00, 0x7b, 0xc6, + 0xcb, 0x53, 0xa5, 0x44, + ], + Bitcoin::Xor8 => [ + 0x4a, 0xb1, 0x4a, 0x81, 0x4a, 0x39, 0x52, 0x8a, 0x80, 0xfd, 0xb4, 0x30, 0x58, 0x9b, + 0xa4, 0x50, 0x10, 0x4b, 0x9c, 0x72, 0x09, 0xaa, 0x2f, 0xe2, 0x85, 0xcd, 0x60, 0xc0, + 0x90, 0x43, 0x11, 0x4a, + ], + Bitcoin::XorXor1 => [ + 0x18, 0xb9, 0x44, 0x6a, 0x41, 0x66, 0xa3, 0xfe, 0xe2, 0xbc, 0xb2, 0x54, 0x5b, 0xb9, + 0x01, 0x18, 0xdc, 0xf0, 0xe8, 0xf8, 0x86, 0xa1, 0x07, 0x6d, 0x4c, 0x38, 0x60, 0x06, + 0x0c, 0xde, 0x1a, 0x51, + ], + Bitcoin::XorXor16 => [ + 0x94, 0x6c, 0xde, 0x87, 0x2e, 0x30, 0xe6, 0x50, 0x9d, 0xaf, 0xf4, 0x05, 0xf0, 0xe0, + 0xfe, 0xfe, 0x27, 0x55, 0x47, 0xb4, 0x0e, 0xb2, 0x03, 0x84, 0xaf, 0xe9, 0xa8, 0x63, + 0x60, 0xfc, 0x80, 0xef, + ], + Bitcoin::XorXor32 => [ + 0x65, 0x27, 0xdf, 0x67, 0xa5, 0x0d, 0x14, 0x8d, 0xb4, 0xfc, 0x8f, 0xee, 0xc7, 0x84, + 0x55, 0x64, 0x99, 0xa8, 0xc7, 0xf0, 0xfa, 0x7d, 0x28, 0xe6, 0x27, 0x8e, 0x99, 0x7f, + 0x49, 0x59, 0xbe, 0x39, + ], + Bitcoin::XorXor64 => [ + 0xf1, 0x62, 0xf9, 0xe6, 0x56, 0x63, 0xa6, 0x9a, 0xc5, 0xf9, 0x2a, 0x5e, 0xb5, 0x2c, + 0x03, 0x32, 0x39, 0x2e, 0xdd, 0x1e, 0xd1, 0xba, 0x35, 0x5e, 0x6f, 0x19, 0x40, 0x6e, + 0xab, 0xe3, 0xf6, 0xed, + ], + Bitcoin::XorXor8 => [ + 0xe0, 0x6d, 0x69, 0x4c, 0x5b, 0x40, 0x7d, 0xda, 0xd7, 0xaa, 0x1f, 0x88, 0x07, 0x16, + 0xbc, 0xb7, 0x0a, 0xcd, 0xba, 0x75, 0x85, 0xca, 0x40, 0x09, 0x9a, 0x0a, 0x0a, 0x61, + 0xf3, 0xad, 0x2d, 0xb5, + ], + }; + + Cmr::from_byte_array(bytes) } fn source_ty(&self) -> TypeName { @@ -4698,7 +6842,436 @@ impl Jet for Bitcoin { } fn cost(&self) -> Cost { - unimplemented!("Unspecified cost of Bitcoin jets") + match self { + Bitcoin::Add16 => Cost::from_milliweight(80), + Bitcoin::Add32 => Cost::from_milliweight(92), + Bitcoin::Add64 => Cost::from_milliweight(105), + Bitcoin::Add8 => Cost::from_milliweight(97), + Bitcoin::All16 => Cost::from_milliweight(60), + Bitcoin::All32 => Cost::from_milliweight(62), + Bitcoin::All64 => Cost::from_milliweight(63), + Bitcoin::All8 => Cost::from_milliweight(50), + Bitcoin::And1 => Cost::from_milliweight(77), + Bitcoin::And16 => Cost::from_milliweight(83), + Bitcoin::And32 => Cost::from_milliweight(77), + Bitcoin::And64 => Cost::from_milliweight(78), + Bitcoin::And8 => Cost::from_milliweight(98), + Bitcoin::AnnexHash => Cost::from_milliweight(1491), + Bitcoin::Bip0340Verify => Cost::from_milliweight(49421), + Bitcoin::BuildTapbranch => Cost::from_milliweight(2554), + Bitcoin::BuildTapleafSimplicity => Cost::from_milliweight(1927), + Bitcoin::BuildTaptweak => Cost::from_milliweight(77780), + Bitcoin::CheckLockDistance => Cost::from_milliweight(84), + Bitcoin::CheckLockDuration => Cost::from_milliweight(78), + Bitcoin::CheckLockHeight => Cost::from_milliweight(108), + Bitcoin::CheckLockTime => Cost::from_milliweight(123), + Bitcoin::CheckSigVerify => Cost::from_milliweight(50000), + Bitcoin::Ch1 => Cost::from_milliweight(50), + Bitcoin::Ch16 => Cost::from_milliweight(83), + Bitcoin::Ch32 => Cost::from_milliweight(69), + Bitcoin::Ch64 => Cost::from_milliweight(78), + Bitcoin::Ch8 => Cost::from_milliweight(86), + Bitcoin::Complement1 => Cost::from_milliweight(51), + Bitcoin::Complement16 => Cost::from_milliweight(86), + Bitcoin::Complement32 => Cost::from_milliweight(58), + Bitcoin::Complement64 => Cost::from_milliweight(64), + Bitcoin::Complement8 => Cost::from_milliweight(62), + Bitcoin::CurrentAnnexHash => Cost::from_milliweight(74), + Bitcoin::CurrentIndex => Cost::from_milliweight(66), + Bitcoin::CurrentPrevOutpoint => Cost::from_milliweight(130), + Bitcoin::CurrentScriptHash => Cost::from_milliweight(127), + Bitcoin::CurrentScriptSigHash => Cost::from_milliweight(126), + Bitcoin::CurrentSequence => Cost::from_milliweight(66), + Bitcoin::CurrentValue => Cost::from_milliweight(85), + Bitcoin::Decompress => Cost::from_milliweight(10495), + Bitcoin::Decrement16 => Cost::from_milliweight(58), + Bitcoin::Decrement32 => Cost::from_milliweight(57), + Bitcoin::Decrement64 => Cost::from_milliweight(79), + Bitcoin::Decrement8 => Cost::from_milliweight(77), + Bitcoin::Divides16 => Cost::from_milliweight(84), + Bitcoin::Divides32 => Cost::from_milliweight(80), + Bitcoin::Divides64 => Cost::from_milliweight(67), + Bitcoin::Divides8 => Cost::from_milliweight(73), + Bitcoin::Divide16 => Cost::from_milliweight(85), + Bitcoin::Divide32 => Cost::from_milliweight(82), + Bitcoin::Divide64 => Cost::from_milliweight(81), + Bitcoin::Divide8 => Cost::from_milliweight(85), + Bitcoin::DivMod128_64 => Cost::from_milliweight(169), + Bitcoin::DivMod16 => Cost::from_milliweight(92), + Bitcoin::DivMod32 => Cost::from_milliweight(90), + Bitcoin::DivMod64 => Cost::from_milliweight(82), + Bitcoin::DivMod8 => Cost::from_milliweight(91), + Bitcoin::Eq1 => Cost::from_milliweight(63), + Bitcoin::Eq16 => Cost::from_milliweight(68), + Bitcoin::Eq256 => Cost::from_milliweight(188), + Bitcoin::Eq32 => Cost::from_milliweight(74), + Bitcoin::Eq64 => Cost::from_milliweight(82), + Bitcoin::Eq8 => Cost::from_milliweight(76), + Bitcoin::Fee => Cost::from_milliweight(65), + Bitcoin::FeAdd => Cost::from_milliweight(777), + Bitcoin::FeInvert => Cost::from_milliweight(3237), + Bitcoin::FeIsOdd => Cost::from_milliweight(313), + Bitcoin::FeIsZero => Cost::from_milliweight(277), + Bitcoin::FeMultiply => Cost::from_milliweight(813), + Bitcoin::FeMultiplyBeta => Cost::from_milliweight(607), + Bitcoin::FeNegate => Cost::from_milliweight(541), + Bitcoin::FeNormalize => Cost::from_milliweight(656), + Bitcoin::FeSquare => Cost::from_milliweight(570), + Bitcoin::FeSquareRoot => Cost::from_milliweight(10162), + Bitcoin::FullAdd16 => Cost::from_milliweight(106), + Bitcoin::FullAdd32 => Cost::from_milliweight(96), + Bitcoin::FullAdd64 => Cost::from_milliweight(93), + Bitcoin::FullAdd8 => Cost::from_milliweight(131), + Bitcoin::FullDecrement16 => Cost::from_milliweight(60), + Bitcoin::FullDecrement32 => Cost::from_milliweight(71), + Bitcoin::FullDecrement64 => Cost::from_milliweight(71), + Bitcoin::FullDecrement8 => Cost::from_milliweight(68), + Bitcoin::FullIncrement16 => Cost::from_milliweight(70), + Bitcoin::FullIncrement32 => Cost::from_milliweight(57), + Bitcoin::FullIncrement64 => Cost::from_milliweight(68), + Bitcoin::FullIncrement8 => Cost::from_milliweight(73), + Bitcoin::FullLeftShift16_1 => Cost::from_milliweight(76), + Bitcoin::FullLeftShift16_2 => Cost::from_milliweight(59), + Bitcoin::FullLeftShift16_4 => Cost::from_milliweight(68), + Bitcoin::FullLeftShift16_8 => Cost::from_milliweight(68), + Bitcoin::FullLeftShift32_1 => Cost::from_milliweight(58), + Bitcoin::FullLeftShift32_16 => Cost::from_milliweight(52), + Bitcoin::FullLeftShift32_2 => Cost::from_milliweight(73), + Bitcoin::FullLeftShift32_4 => Cost::from_milliweight(59), + Bitcoin::FullLeftShift32_8 => Cost::from_milliweight(60), + Bitcoin::FullLeftShift64_1 => Cost::from_milliweight(74), + Bitcoin::FullLeftShift64_16 => Cost::from_milliweight(69), + Bitcoin::FullLeftShift64_2 => Cost::from_milliweight(70), + Bitcoin::FullLeftShift64_32 => Cost::from_milliweight(73), + Bitcoin::FullLeftShift64_4 => Cost::from_milliweight(66), + Bitcoin::FullLeftShift64_8 => Cost::from_milliweight(68), + Bitcoin::FullLeftShift8_1 => Cost::from_milliweight(60), + Bitcoin::FullLeftShift8_2 => Cost::from_milliweight(64), + Bitcoin::FullLeftShift8_4 => Cost::from_milliweight(72), + Bitcoin::FullMultiply16 => Cost::from_milliweight(99), + Bitcoin::FullMultiply32 => Cost::from_milliweight(87), + Bitcoin::FullMultiply64 => Cost::from_milliweight(103), + Bitcoin::FullMultiply8 => Cost::from_milliweight(95), + Bitcoin::FullRightShift16_1 => Cost::from_milliweight(55), + Bitcoin::FullRightShift16_2 => Cost::from_milliweight(60), + Bitcoin::FullRightShift16_4 => Cost::from_milliweight(64), + Bitcoin::FullRightShift16_8 => Cost::from_milliweight(55), + Bitcoin::FullRightShift32_1 => Cost::from_milliweight(49), + Bitcoin::FullRightShift32_16 => Cost::from_milliweight(48), + Bitcoin::FullRightShift32_2 => Cost::from_milliweight(66), + Bitcoin::FullRightShift32_4 => Cost::from_milliweight(49), + Bitcoin::FullRightShift32_8 => Cost::from_milliweight(66), + Bitcoin::FullRightShift64_1 => Cost::from_milliweight(60), + Bitcoin::FullRightShift64_16 => Cost::from_milliweight(73), + Bitcoin::FullRightShift64_2 => Cost::from_milliweight(76), + Bitcoin::FullRightShift64_32 => Cost::from_milliweight(73), + Bitcoin::FullRightShift64_4 => Cost::from_milliweight(56), + Bitcoin::FullRightShift64_8 => Cost::from_milliweight(68), + Bitcoin::FullRightShift8_1 => Cost::from_milliweight(59), + Bitcoin::FullRightShift8_2 => Cost::from_milliweight(49), + Bitcoin::FullRightShift8_4 => Cost::from_milliweight(51), + Bitcoin::FullSubtract16 => Cost::from_milliweight(99), + Bitcoin::FullSubtract32 => Cost::from_milliweight(92), + Bitcoin::FullSubtract64 => Cost::from_milliweight(109), + Bitcoin::FullSubtract8 => Cost::from_milliweight(106), + Bitcoin::GejAdd => Cost::from_milliweight(3000), + Bitcoin::GejDouble => Cost::from_milliweight(1862), + Bitcoin::GejEquiv => Cost::from_milliweight(2376), + Bitcoin::GejGeAdd => Cost::from_milliweight(2609), + Bitcoin::GejGeAddEx => Cost::from_milliweight(2860), + Bitcoin::GejGeEquiv => Cost::from_milliweight(1823), + Bitcoin::GejInfinity => Cost::from_milliweight(765), + Bitcoin::GejIsInfinity => Cost::from_milliweight(701), + Bitcoin::GejIsOnCurve => Cost::from_milliweight(1039), + Bitcoin::GejNegate => Cost::from_milliweight(1549), + Bitcoin::GejNormalize => Cost::from_milliweight(4184), + Bitcoin::GejRescale => Cost::from_milliweight(2011), + Bitcoin::GejXEquiv => Cost::from_milliweight(1103), + Bitcoin::GejYIsOdd => Cost::from_milliweight(3702), + Bitcoin::Generate => Cost::from_milliweight(49851), + Bitcoin::GeIsOnCurve => Cost::from_milliweight(688), + Bitcoin::GeNegate => Cost::from_milliweight(1071), + Bitcoin::HashToCurve => Cost::from_milliweight(69844), + Bitcoin::High1 => Cost::from_milliweight(42), + Bitcoin::High16 => Cost::from_milliweight(50), + Bitcoin::High32 => Cost::from_milliweight(64), + Bitcoin::High64 => Cost::from_milliweight(52), + Bitcoin::High8 => Cost::from_milliweight(59), + Bitcoin::Increment16 => Cost::from_milliweight(56), + Bitcoin::Increment32 => Cost::from_milliweight(73), + Bitcoin::Increment64 => Cost::from_milliweight(64), + Bitcoin::Increment8 => Cost::from_milliweight(69), + Bitcoin::InputsHash => Cost::from_milliweight(122), + Bitcoin::InputAnnexesHash => Cost::from_milliweight(124), + Bitcoin::InputAnnexHash => Cost::from_milliweight(77), + Bitcoin::InputHash => Cost::from_milliweight(832), + Bitcoin::InputOutpointsHash => Cost::from_milliweight(126), + Bitcoin::InputPrevOutpoint => Cost::from_milliweight(140), + Bitcoin::InputScriptsHash => Cost::from_milliweight(129), + Bitcoin::InputScriptHash => Cost::from_milliweight(143), + Bitcoin::InputScriptSigsHash => Cost::from_milliweight(127), + Bitcoin::InputScriptSigHash => Cost::from_milliweight(137), + Bitcoin::InputSequence => Cost::from_milliweight(78), + Bitcoin::InputSequencesHash => Cost::from_milliweight(125), + Bitcoin::InputUtxosHash => Cost::from_milliweight(122), + Bitcoin::InputUtxoHash => Cost::from_milliweight(824), + Bitcoin::InputValue => Cost::from_milliweight(81), + Bitcoin::InputValuesHash => Cost::from_milliweight(126), + Bitcoin::InternalKey => Cost::from_milliweight(124), + Bitcoin::IsOne16 => Cost::from_milliweight(64), + Bitcoin::IsOne32 => Cost::from_milliweight(64), + Bitcoin::IsOne64 => Cost::from_milliweight(66), + Bitcoin::IsOne8 => Cost::from_milliweight(47), + Bitcoin::IsZero16 => Cost::from_milliweight(52), + Bitcoin::IsZero32 => Cost::from_milliweight(58), + Bitcoin::IsZero64 => Cost::from_milliweight(68), + Bitcoin::IsZero8 => Cost::from_milliweight(59), + Bitcoin::Leftmost16_1 => Cost::from_milliweight(68), + Bitcoin::Leftmost16_2 => Cost::from_milliweight(58), + Bitcoin::Leftmost16_4 => Cost::from_milliweight(51), + Bitcoin::Leftmost16_8 => Cost::from_milliweight(62), + Bitcoin::Leftmost32_1 => Cost::from_milliweight(53), + Bitcoin::Leftmost32_16 => Cost::from_milliweight(63), + Bitcoin::Leftmost32_2 => Cost::from_milliweight(62), + Bitcoin::Leftmost32_4 => Cost::from_milliweight(61), + Bitcoin::Leftmost32_8 => Cost::from_milliweight(60), + Bitcoin::Leftmost64_1 => Cost::from_milliweight(65), + Bitcoin::Leftmost64_16 => Cost::from_milliweight(62), + Bitcoin::Leftmost64_2 => Cost::from_milliweight(61), + Bitcoin::Leftmost64_32 => Cost::from_milliweight(77), + Bitcoin::Leftmost64_4 => Cost::from_milliweight(80), + Bitcoin::Leftmost64_8 => Cost::from_milliweight(54), + Bitcoin::Leftmost8_1 => Cost::from_milliweight(54), + Bitcoin::Leftmost8_2 => Cost::from_milliweight(71), + Bitcoin::Leftmost8_4 => Cost::from_milliweight(65), + Bitcoin::LeftExtend16_32 => Cost::from_milliweight(72), + Bitcoin::LeftExtend16_64 => Cost::from_milliweight(69), + Bitcoin::LeftExtend1_16 => Cost::from_milliweight(50), + Bitcoin::LeftExtend1_32 => Cost::from_milliweight(48), + Bitcoin::LeftExtend1_64 => Cost::from_milliweight(49), + Bitcoin::LeftExtend1_8 => Cost::from_milliweight(46), + Bitcoin::LeftExtend32_64 => Cost::from_milliweight(69), + Bitcoin::LeftExtend8_16 => Cost::from_milliweight(58), + Bitcoin::LeftExtend8_32 => Cost::from_milliweight(86), + Bitcoin::LeftExtend8_64 => Cost::from_milliweight(98), + Bitcoin::LeftPadHigh16_32 => Cost::from_milliweight(71), + Bitcoin::LeftPadHigh16_64 => Cost::from_milliweight(82), + Bitcoin::LeftPadHigh1_16 => Cost::from_milliweight(106), + Bitcoin::LeftPadHigh1_32 => Cost::from_milliweight(220), + Bitcoin::LeftPadHigh1_64 => Cost::from_milliweight(302), + Bitcoin::LeftPadHigh1_8 => Cost::from_milliweight(73), + Bitcoin::LeftPadHigh32_64 => Cost::from_milliweight(69), + Bitcoin::LeftPadHigh8_16 => Cost::from_milliweight(65), + Bitcoin::LeftPadHigh8_32 => Cost::from_milliweight(105), + Bitcoin::LeftPadHigh8_64 => Cost::from_milliweight(113), + Bitcoin::LeftPadLow16_32 => Cost::from_milliweight(65), + Bitcoin::LeftPadLow16_64 => Cost::from_milliweight(68), + Bitcoin::LeftPadLow1_16 => Cost::from_milliweight(59), + Bitcoin::LeftPadLow1_32 => Cost::from_milliweight(47), + Bitcoin::LeftPadLow1_64 => Cost::from_milliweight(46), + Bitcoin::LeftPadLow1_8 => Cost::from_milliweight(48), + Bitcoin::LeftPadLow32_64 => Cost::from_milliweight(62), + Bitcoin::LeftPadLow8_16 => Cost::from_milliweight(56), + Bitcoin::LeftPadLow8_32 => Cost::from_milliweight(75), + Bitcoin::LeftPadLow8_64 => Cost::from_milliweight(116), + Bitcoin::LeftRotate16 => Cost::from_milliweight(88), + Bitcoin::LeftRotate32 => Cost::from_milliweight(62), + Bitcoin::LeftRotate64 => Cost::from_milliweight(68), + Bitcoin::LeftRotate8 => Cost::from_milliweight(66), + Bitcoin::LeftShift16 => Cost::from_milliweight(109), + Bitcoin::LeftShift32 => Cost::from_milliweight(79), + Bitcoin::LeftShift64 => Cost::from_milliweight(70), + Bitcoin::LeftShift8 => Cost::from_milliweight(72), + Bitcoin::LeftShiftWith16 => Cost::from_milliweight(72), + Bitcoin::LeftShiftWith32 => Cost::from_milliweight(87), + Bitcoin::LeftShiftWith64 => Cost::from_milliweight(97), + Bitcoin::LeftShiftWith8 => Cost::from_milliweight(104), + Bitcoin::Le16 => Cost::from_milliweight(83), + Bitcoin::Le32 => Cost::from_milliweight(99), + Bitcoin::Le64 => Cost::from_milliweight(79), + Bitcoin::Le8 => Cost::from_milliweight(93), + Bitcoin::LinearCombination1 => Cost::from_milliweight(85743), + Bitcoin::LinearVerify1 => Cost::from_milliweight(43579), + Bitcoin::LockTime => Cost::from_milliweight(66), + Bitcoin::Low1 => Cost::from_milliweight(40), + Bitcoin::Low16 => Cost::from_milliweight(60), + Bitcoin::Low32 => Cost::from_milliweight(52), + Bitcoin::Low64 => Cost::from_milliweight(50), + Bitcoin::Low8 => Cost::from_milliweight(45), + Bitcoin::Lt16 => Cost::from_milliweight(83), + Bitcoin::Lt32 => Cost::from_milliweight(89), + Bitcoin::Lt64 => Cost::from_milliweight(71), + Bitcoin::Lt8 => Cost::from_milliweight(86), + Bitcoin::Maj1 => Cost::from_milliweight(54), + Bitcoin::Maj16 => Cost::from_milliweight(85), + Bitcoin::Maj32 => Cost::from_milliweight(73), + Bitcoin::Maj64 => Cost::from_milliweight(79), + Bitcoin::Maj8 => Cost::from_milliweight(64), + Bitcoin::Max16 => Cost::from_milliweight(80), + Bitcoin::Max32 => Cost::from_milliweight(70), + Bitcoin::Max64 => Cost::from_milliweight(75), + Bitcoin::Max8 => Cost::from_milliweight(79), + Bitcoin::Median16 => Cost::from_milliweight(80), + Bitcoin::Median32 => Cost::from_milliweight(77), + Bitcoin::Median64 => Cost::from_milliweight(89), + Bitcoin::Median8 => Cost::from_milliweight(77), + Bitcoin::Min16 => Cost::from_milliweight(83), + Bitcoin::Min32 => Cost::from_milliweight(96), + Bitcoin::Min64 => Cost::from_milliweight(82), + Bitcoin::Min8 => Cost::from_milliweight(78), + Bitcoin::Modulo16 => Cost::from_milliweight(85), + Bitcoin::Modulo32 => Cost::from_milliweight(81), + Bitcoin::Modulo64 => Cost::from_milliweight(71), + Bitcoin::Modulo8 => Cost::from_milliweight(85), + Bitcoin::Multiply16 => Cost::from_milliweight(79), + Bitcoin::Multiply32 => Cost::from_milliweight(78), + Bitcoin::Multiply64 => Cost::from_milliweight(72), + Bitcoin::Multiply8 => Cost::from_milliweight(79), + Bitcoin::Negate16 => Cost::from_milliweight(69), + Bitcoin::Negate32 => Cost::from_milliweight(56), + Bitcoin::Negate64 => Cost::from_milliweight(56), + Bitcoin::Negate8 => Cost::from_milliweight(69), + Bitcoin::NumInputs => Cost::from_milliweight(74), + Bitcoin::NumOutputs => Cost::from_milliweight(68), + Bitcoin::One16 => Cost::from_milliweight(45), + Bitcoin::One32 => Cost::from_milliweight(45), + Bitcoin::One64 => Cost::from_milliweight(45), + Bitcoin::One8 => Cost::from_milliweight(46), + Bitcoin::Or1 => Cost::from_milliweight(56), + Bitcoin::Or16 => Cost::from_milliweight(78), + Bitcoin::Or32 => Cost::from_milliweight(80), + Bitcoin::Or64 => Cost::from_milliweight(71), + Bitcoin::Or8 => Cost::from_milliweight(81), + Bitcoin::OutpointHash => Cost::from_milliweight(1788), + Bitcoin::OutputsHash => Cost::from_milliweight(117), + Bitcoin::OutputHash => Cost::from_milliweight(822), + Bitcoin::OutputScriptsHash => Cost::from_milliweight(123), + Bitcoin::OutputScriptHash => Cost::from_milliweight(135), + Bitcoin::OutputValue => Cost::from_milliweight(82), + Bitcoin::OutputValuesHash => Cost::from_milliweight(119), + Bitcoin::ParseLock => Cost::from_milliweight(82), + Bitcoin::ParseSequence => Cost::from_milliweight(93), + Bitcoin::PointVerify1 => Cost::from_milliweight(41394), + Bitcoin::Rightmost16_1 => Cost::from_milliweight(70), + Bitcoin::Rightmost16_2 => Cost::from_milliweight(65), + Bitcoin::Rightmost16_4 => Cost::from_milliweight(72), + Bitcoin::Rightmost16_8 => Cost::from_milliweight(69), + Bitcoin::Rightmost32_1 => Cost::from_milliweight(70), + Bitcoin::Rightmost32_16 => Cost::from_milliweight(56), + Bitcoin::Rightmost32_2 => Cost::from_milliweight(74), + Bitcoin::Rightmost32_4 => Cost::from_milliweight(57), + Bitcoin::Rightmost32_8 => Cost::from_milliweight(55), + Bitcoin::Rightmost64_1 => Cost::from_milliweight(61), + Bitcoin::Rightmost64_16 => Cost::from_milliweight(63), + Bitcoin::Rightmost64_2 => Cost::from_milliweight(65), + Bitcoin::Rightmost64_32 => Cost::from_milliweight(64), + Bitcoin::Rightmost64_4 => Cost::from_milliweight(57), + Bitcoin::Rightmost64_8 => Cost::from_milliweight(49), + Bitcoin::Rightmost8_1 => Cost::from_milliweight(65), + Bitcoin::Rightmost8_2 => Cost::from_milliweight(63), + Bitcoin::Rightmost8_4 => Cost::from_milliweight(56), + Bitcoin::RightExtend16_32 => Cost::from_milliweight(73), + Bitcoin::RightExtend16_64 => Cost::from_milliweight(70), + Bitcoin::RightExtend32_64 => Cost::from_milliweight(62), + Bitcoin::RightExtend8_16 => Cost::from_milliweight(63), + Bitcoin::RightExtend8_32 => Cost::from_milliweight(69), + Bitcoin::RightExtend8_64 => Cost::from_milliweight(141), + Bitcoin::RightPadHigh16_32 => Cost::from_milliweight(66), + Bitcoin::RightPadHigh16_64 => Cost::from_milliweight(81), + Bitcoin::RightPadHigh1_16 => Cost::from_milliweight(114), + Bitcoin::RightPadHigh1_32 => Cost::from_milliweight(220), + Bitcoin::RightPadHigh1_64 => Cost::from_milliweight(313), + Bitcoin::RightPadHigh1_8 => Cost::from_milliweight(73), + Bitcoin::RightPadHigh32_64 => Cost::from_milliweight(62), + Bitcoin::RightPadHigh8_16 => Cost::from_milliweight(75), + Bitcoin::RightPadHigh8_32 => Cost::from_milliweight(81), + Bitcoin::RightPadHigh8_64 => Cost::from_milliweight(118), + Bitcoin::RightPadLow16_32 => Cost::from_milliweight(62), + Bitcoin::RightPadLow16_64 => Cost::from_milliweight(98), + Bitcoin::RightPadLow1_16 => Cost::from_milliweight(60), + Bitcoin::RightPadLow1_32 => Cost::from_milliweight(47), + Bitcoin::RightPadLow1_64 => Cost::from_milliweight(57), + Bitcoin::RightPadLow1_8 => Cost::from_milliweight(48), + Bitcoin::RightPadLow32_64 => Cost::from_milliweight(74), + Bitcoin::RightPadLow8_16 => Cost::from_milliweight(62), + Bitcoin::RightPadLow8_32 => Cost::from_milliweight(69), + Bitcoin::RightPadLow8_64 => Cost::from_milliweight(98), + Bitcoin::RightRotate16 => Cost::from_milliweight(67), + Bitcoin::RightRotate32 => Cost::from_milliweight(77), + Bitcoin::RightRotate64 => Cost::from_milliweight(64), + Bitcoin::RightRotate8 => Cost::from_milliweight(72), + Bitcoin::RightShift16 => Cost::from_milliweight(60), + Bitcoin::RightShift32 => Cost::from_milliweight(69), + Bitcoin::RightShift64 => Cost::from_milliweight(68), + Bitcoin::RightShift8 => Cost::from_milliweight(63), + Bitcoin::RightShiftWith16 => Cost::from_milliweight(83), + Bitcoin::RightShiftWith32 => Cost::from_milliweight(78), + Bitcoin::RightShiftWith64 => Cost::from_milliweight(72), + Bitcoin::RightShiftWith8 => Cost::from_milliweight(71), + Bitcoin::ScalarAdd => Cost::from_milliweight(778), + Bitcoin::ScalarInvert => Cost::from_milliweight(3178), + Bitcoin::ScalarIsZero => Cost::from_milliweight(271), + Bitcoin::ScalarMultiply => Cost::from_milliweight(793), + Bitcoin::ScalarMultiplyLambda => Cost::from_milliweight(567), + Bitcoin::ScalarNegate => Cost::from_milliweight(516), + Bitcoin::ScalarNormalize => Cost::from_milliweight(500), + Bitcoin::ScalarSquare => Cost::from_milliweight(571), + Bitcoin::Scale => Cost::from_milliweight(73548), + Bitcoin::ScriptCMR => Cost::from_milliweight(122), + Bitcoin::Sha256Block => Cost::from_milliweight(765), + Bitcoin::Sha256Ctx8Add1 => Cost::from_milliweight(664), + Bitcoin::Sha256Ctx8Add128 => Cost::from_milliweight(1778), + Bitcoin::Sha256Ctx8Add16 => Cost::from_milliweight(781), + Bitcoin::Sha256Ctx8Add2 => Cost::from_milliweight(674), + Bitcoin::Sha256Ctx8Add256 => Cost::from_milliweight(2894), + Bitcoin::Sha256Ctx8Add32 => Cost::from_milliweight(928), + Bitcoin::Sha256Ctx8Add4 => Cost::from_milliweight(656), + Bitcoin::Sha256Ctx8Add512 => Cost::from_milliweight(5161), + Bitcoin::Sha256Ctx8Add64 => Cost::from_milliweight(1220), + Bitcoin::Sha256Ctx8Add8 => Cost::from_milliweight(694), + Bitcoin::Sha256Ctx8AddBuffer511 => Cost::from_milliweight(5137), + Bitcoin::Sha256Ctx8Finalize => Cost::from_milliweight(833), + Bitcoin::Sha256Ctx8Init => Cost::from_milliweight(123), + Bitcoin::Sha256Iv => Cost::from_milliweight(92), + Bitcoin::SigAllHash => Cost::from_milliweight(120), + Bitcoin::Some1 => Cost::from_milliweight(60), + Bitcoin::Some16 => Cost::from_milliweight(52), + Bitcoin::Some32 => Cost::from_milliweight(49), + Bitcoin::Some64 => Cost::from_milliweight(62), + Bitcoin::Some8 => Cost::from_milliweight(57), + Bitcoin::Subtract16 => Cost::from_milliweight(93), + Bitcoin::Subtract32 => Cost::from_milliweight(87), + Bitcoin::Subtract64 => Cost::from_milliweight(125), + Bitcoin::Subtract8 => Cost::from_milliweight(96), + Bitcoin::Swu => Cost::from_milliweight(32780), + Bitcoin::TapdataInit => Cost::from_milliweight(1233), + Bitcoin::TapleafHash => Cost::from_milliweight(116), + Bitcoin::TapleafVersion => Cost::from_milliweight(66), + Bitcoin::Tappath => Cost::from_milliweight(76), + Bitcoin::TappathHash => Cost::from_milliweight(123), + Bitcoin::TapEnvHash => Cost::from_milliweight(120), + Bitcoin::TotalInputValue => Cost::from_milliweight(69), + Bitcoin::TotalOutputValue => Cost::from_milliweight(71), + Bitcoin::TransactionId => Cost::from_milliweight(122), + Bitcoin::TxHash => Cost::from_milliweight(119), + Bitcoin::TxIsFinal => Cost::from_milliweight(62), + Bitcoin::TxLockDistance => Cost::from_milliweight(72), + Bitcoin::TxLockDuration => Cost::from_milliweight(66), + Bitcoin::TxLockHeight => Cost::from_milliweight(72), + Bitcoin::TxLockTime => Cost::from_milliweight(72), + Bitcoin::Verify => Cost::from_milliweight(44), + Bitcoin::Version => Cost::from_milliweight(78), + Bitcoin::Xor1 => Cost::from_milliweight(60), + Bitcoin::Xor16 => Cost::from_milliweight(73), + Bitcoin::Xor32 => Cost::from_milliweight(77), + Bitcoin::Xor64 => Cost::from_milliweight(68), + Bitcoin::Xor8 => Cost::from_milliweight(80), + Bitcoin::XorXor1 => Cost::from_milliweight(50), + Bitcoin::XorXor16 => Cost::from_milliweight(82), + Bitcoin::XorXor32 => Cost::from_milliweight(82), + Bitcoin::XorXor64 => Cost::from_milliweight(80), + Bitcoin::XorXor8 => Cost::from_milliweight(86), + } } fn parse(s: &str) -> Result where Self: Sized { @@ -5579,6 +8152,894 @@ impl str::FromStr for Bitcoin { } } -pub(crate) fn c_jet_ptr(jet: &Bitcoin) -> fn(&mut CFrameItem, CFrameItem, &()) -> bool { - unimplemented!("Bitcoin jets have not yet been implemented.") +pub(crate) fn c_jet_ptr(jet: &Bitcoin) -> fn(&mut CFrameItem, CFrameItem, &c_bitcoin::CTxEnv) -> bool { + match jet { + Bitcoin::All8 => simplicity_sys::c_jets::jets_wrapper::all_8, + Bitcoin::Eq256 => simplicity_sys::c_jets::jets_wrapper::eq_256, + Bitcoin::Sha256Ctx8Add1 => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_1, + Bitcoin::Sha256Ctx8Add2 => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_2, + Bitcoin::Sha256Ctx8Add4 => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_4, + Bitcoin::Sha256Ctx8Add8 => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_8, + Bitcoin::Sha256Ctx8Add16 => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_16, + Bitcoin::Sha256Ctx8Add32 => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_32, + Bitcoin::Sha256Ctx8Add64 => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_64, + Bitcoin::Sha256Ctx8Add128 => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_128, + Bitcoin::Sha256Ctx8Add256 => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_256, + Bitcoin::Sha256Ctx8AddBuffer511 => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_buffer_511, + Bitcoin::Sha256Ctx8Finalize => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_finalize, + Bitcoin::Sha256Ctx8Init => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_init, + Bitcoin::Sha256Iv => simplicity_sys::c_jets::jets_wrapper::sha_256_iv, + Bitcoin::Sha256Block => simplicity_sys::c_jets::jets_wrapper::sha_256_block, + Bitcoin::Verify => simplicity_sys::c_jets::jets_wrapper::verify, + // bip_0340_verify ignores its environment (the C implementation lives + // in the env-free jets-secp256k1.c), so it can use the shared wrapper + // that passes a null environment, exactly like the elements backend. + Bitcoin::Bip0340Verify => simplicity_sys::c_jets::jets_wrapper::bip_0340_verify, + // Bitcoin jets whose C implementations read the transaction + // environment (`const txEnv* env`). The wrappers in the bitcoin c_env + // module forward the Rust `CTxEnv` reference to the C functions. + Bitcoin::SigAllHash => c_bitcoin::sig_all_hash, + Bitcoin::CheckLockHeight => c_bitcoin::check_lock_height, + Bitcoin::CheckLockDistance => c_bitcoin::check_lock_distance, + Bitcoin::CheckLockDuration => c_bitcoin::check_lock_duration, + Bitcoin::CurrentIndex => c_bitcoin::current_index, + Bitcoin::NumInputs => c_bitcoin::num_inputs, + Bitcoin::TxHash => c_bitcoin::tx_hash, + Bitcoin::TapEnvHash => c_bitcoin::tap_env_hash, + // Pure jets (no environment needed) + Bitcoin::Add16 => simplicity_sys::c_jets::jets_wrapper::add_16, + Bitcoin::Add32 => simplicity_sys::c_jets::jets_wrapper::add_32, + Bitcoin::Add64 => simplicity_sys::c_jets::jets_wrapper::add_64, + Bitcoin::Add8 => simplicity_sys::c_jets::jets_wrapper::add_8, + Bitcoin::All16 => simplicity_sys::c_jets::jets_wrapper::all_16, + Bitcoin::All32 => simplicity_sys::c_jets::jets_wrapper::all_32, + Bitcoin::All64 => simplicity_sys::c_jets::jets_wrapper::all_64, + Bitcoin::And1 => simplicity_sys::c_jets::jets_wrapper::and_1, + Bitcoin::And16 => simplicity_sys::c_jets::jets_wrapper::and_16, + Bitcoin::And32 => simplicity_sys::c_jets::jets_wrapper::and_32, + Bitcoin::And64 => simplicity_sys::c_jets::jets_wrapper::and_64, + Bitcoin::And8 => simplicity_sys::c_jets::jets_wrapper::and_8, + Bitcoin::Ch1 => simplicity_sys::c_jets::jets_wrapper::ch_1, + Bitcoin::Ch16 => simplicity_sys::c_jets::jets_wrapper::ch_16, + Bitcoin::Ch32 => simplicity_sys::c_jets::jets_wrapper::ch_32, + Bitcoin::Ch64 => simplicity_sys::c_jets::jets_wrapper::ch_64, + Bitcoin::Ch8 => simplicity_sys::c_jets::jets_wrapper::ch_8, + Bitcoin::CheckSigVerify => simplicity_sys::c_jets::jets_wrapper::check_sig_verify, + Bitcoin::Complement1 => simplicity_sys::c_jets::jets_wrapper::complement_1, + Bitcoin::Complement16 => simplicity_sys::c_jets::jets_wrapper::complement_16, + Bitcoin::Complement32 => simplicity_sys::c_jets::jets_wrapper::complement_32, + Bitcoin::Complement64 => simplicity_sys::c_jets::jets_wrapper::complement_64, + Bitcoin::Complement8 => simplicity_sys::c_jets::jets_wrapper::complement_8, + Bitcoin::Decompress => simplicity_sys::c_jets::jets_wrapper::decompress, + Bitcoin::Decrement16 => simplicity_sys::c_jets::jets_wrapper::decrement_16, + Bitcoin::Decrement32 => simplicity_sys::c_jets::jets_wrapper::decrement_32, + Bitcoin::Decrement64 => simplicity_sys::c_jets::jets_wrapper::decrement_64, + Bitcoin::Decrement8 => simplicity_sys::c_jets::jets_wrapper::decrement_8, + Bitcoin::DivMod128_64 => simplicity_sys::c_jets::jets_wrapper::div_mod_128_64, + Bitcoin::DivMod16 => simplicity_sys::c_jets::jets_wrapper::div_mod_16, + Bitcoin::DivMod32 => simplicity_sys::c_jets::jets_wrapper::div_mod_32, + Bitcoin::DivMod64 => simplicity_sys::c_jets::jets_wrapper::div_mod_64, + Bitcoin::DivMod8 => simplicity_sys::c_jets::jets_wrapper::div_mod_8, + Bitcoin::Divide16 => simplicity_sys::c_jets::jets_wrapper::divide_16, + Bitcoin::Divide32 => simplicity_sys::c_jets::jets_wrapper::divide_32, + Bitcoin::Divide64 => simplicity_sys::c_jets::jets_wrapper::divide_64, + Bitcoin::Divide8 => simplicity_sys::c_jets::jets_wrapper::divide_8, + Bitcoin::Divides16 => simplicity_sys::c_jets::jets_wrapper::divides_16, + Bitcoin::Divides32 => simplicity_sys::c_jets::jets_wrapper::divides_32, + Bitcoin::Divides64 => simplicity_sys::c_jets::jets_wrapper::divides_64, + Bitcoin::Divides8 => simplicity_sys::c_jets::jets_wrapper::divides_8, + Bitcoin::Eq1 => simplicity_sys::c_jets::jets_wrapper::eq_1, + Bitcoin::Eq16 => simplicity_sys::c_jets::jets_wrapper::eq_16, + Bitcoin::Eq32 => simplicity_sys::c_jets::jets_wrapper::eq_32, + Bitcoin::Eq64 => simplicity_sys::c_jets::jets_wrapper::eq_64, + Bitcoin::Eq8 => simplicity_sys::c_jets::jets_wrapper::eq_8, + Bitcoin::FeAdd => simplicity_sys::c_jets::jets_wrapper::fe_add, + Bitcoin::FeInvert => simplicity_sys::c_jets::jets_wrapper::fe_invert, + Bitcoin::FeIsOdd => simplicity_sys::c_jets::jets_wrapper::fe_is_odd, + Bitcoin::FeIsZero => simplicity_sys::c_jets::jets_wrapper::fe_is_zero, + Bitcoin::FeMultiply => simplicity_sys::c_jets::jets_wrapper::fe_multiply, + Bitcoin::FeMultiplyBeta => simplicity_sys::c_jets::jets_wrapper::fe_multiply_beta, + Bitcoin::FeNegate => simplicity_sys::c_jets::jets_wrapper::fe_negate, + Bitcoin::FeNormalize => simplicity_sys::c_jets::jets_wrapper::fe_normalize, + Bitcoin::FeSquare => simplicity_sys::c_jets::jets_wrapper::fe_square, + Bitcoin::FeSquareRoot => simplicity_sys::c_jets::jets_wrapper::fe_square_root, + Bitcoin::FullAdd16 => simplicity_sys::c_jets::jets_wrapper::full_add_16, + Bitcoin::FullAdd32 => simplicity_sys::c_jets::jets_wrapper::full_add_32, + Bitcoin::FullAdd64 => simplicity_sys::c_jets::jets_wrapper::full_add_64, + Bitcoin::FullAdd8 => simplicity_sys::c_jets::jets_wrapper::full_add_8, + Bitcoin::FullDecrement16 => simplicity_sys::c_jets::jets_wrapper::full_decrement_16, + Bitcoin::FullDecrement32 => simplicity_sys::c_jets::jets_wrapper::full_decrement_32, + Bitcoin::FullDecrement64 => simplicity_sys::c_jets::jets_wrapper::full_decrement_64, + Bitcoin::FullDecrement8 => simplicity_sys::c_jets::jets_wrapper::full_decrement_8, + Bitcoin::FullIncrement16 => simplicity_sys::c_jets::jets_wrapper::full_increment_16, + Bitcoin::FullIncrement32 => simplicity_sys::c_jets::jets_wrapper::full_increment_32, + Bitcoin::FullIncrement64 => simplicity_sys::c_jets::jets_wrapper::full_increment_64, + Bitcoin::FullIncrement8 => simplicity_sys::c_jets::jets_wrapper::full_increment_8, + Bitcoin::FullLeftShift16_1 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_16_1, + Bitcoin::FullLeftShift16_2 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_16_2, + Bitcoin::FullLeftShift16_4 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_16_4, + Bitcoin::FullLeftShift16_8 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_16_8, + Bitcoin::FullLeftShift32_1 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_32_1, + Bitcoin::FullLeftShift32_16 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_32_16, + Bitcoin::FullLeftShift32_2 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_32_2, + Bitcoin::FullLeftShift32_4 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_32_4, + Bitcoin::FullLeftShift32_8 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_32_8, + Bitcoin::FullLeftShift64_1 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_64_1, + Bitcoin::FullLeftShift64_16 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_64_16, + Bitcoin::FullLeftShift64_2 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_64_2, + Bitcoin::FullLeftShift64_32 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_64_32, + Bitcoin::FullLeftShift64_4 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_64_4, + Bitcoin::FullLeftShift64_8 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_64_8, + Bitcoin::FullLeftShift8_1 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_8_1, + Bitcoin::FullLeftShift8_2 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_8_2, + Bitcoin::FullLeftShift8_4 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_8_4, + Bitcoin::FullMultiply16 => simplicity_sys::c_jets::jets_wrapper::full_multiply_16, + Bitcoin::FullMultiply32 => simplicity_sys::c_jets::jets_wrapper::full_multiply_32, + Bitcoin::FullMultiply64 => simplicity_sys::c_jets::jets_wrapper::full_multiply_64, + Bitcoin::FullMultiply8 => simplicity_sys::c_jets::jets_wrapper::full_multiply_8, + Bitcoin::FullRightShift16_1 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_16_1, + Bitcoin::FullRightShift16_2 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_16_2, + Bitcoin::FullRightShift16_4 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_16_4, + Bitcoin::FullRightShift16_8 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_16_8, + Bitcoin::FullRightShift32_1 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_32_1, + Bitcoin::FullRightShift32_16 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_32_16, + Bitcoin::FullRightShift32_2 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_32_2, + Bitcoin::FullRightShift32_4 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_32_4, + Bitcoin::FullRightShift32_8 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_32_8, + Bitcoin::FullRightShift64_1 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_64_1, + Bitcoin::FullRightShift64_16 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_64_16, + Bitcoin::FullRightShift64_2 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_64_2, + Bitcoin::FullRightShift64_32 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_64_32, + Bitcoin::FullRightShift64_4 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_64_4, + Bitcoin::FullRightShift64_8 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_64_8, + Bitcoin::FullRightShift8_1 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_8_1, + Bitcoin::FullRightShift8_2 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_8_2, + Bitcoin::FullRightShift8_4 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_8_4, + Bitcoin::FullSubtract16 => simplicity_sys::c_jets::jets_wrapper::full_subtract_16, + Bitcoin::FullSubtract32 => simplicity_sys::c_jets::jets_wrapper::full_subtract_32, + Bitcoin::FullSubtract64 => simplicity_sys::c_jets::jets_wrapper::full_subtract_64, + Bitcoin::FullSubtract8 => simplicity_sys::c_jets::jets_wrapper::full_subtract_8, + Bitcoin::GeIsOnCurve => simplicity_sys::c_jets::jets_wrapper::ge_is_on_curve, + Bitcoin::GeNegate => simplicity_sys::c_jets::jets_wrapper::ge_negate, + Bitcoin::GejAdd => simplicity_sys::c_jets::jets_wrapper::gej_add, + Bitcoin::GejDouble => simplicity_sys::c_jets::jets_wrapper::gej_double, + Bitcoin::GejEquiv => simplicity_sys::c_jets::jets_wrapper::gej_equiv, + Bitcoin::GejGeAdd => simplicity_sys::c_jets::jets_wrapper::gej_ge_add, + Bitcoin::GejGeAddEx => simplicity_sys::c_jets::jets_wrapper::gej_ge_add_ex, + Bitcoin::GejGeEquiv => simplicity_sys::c_jets::jets_wrapper::gej_ge_equiv, + Bitcoin::GejInfinity => simplicity_sys::c_jets::jets_wrapper::gej_infinity, + Bitcoin::GejIsInfinity => simplicity_sys::c_jets::jets_wrapper::gej_is_infinity, + Bitcoin::GejIsOnCurve => simplicity_sys::c_jets::jets_wrapper::gej_is_on_curve, + Bitcoin::GejNegate => simplicity_sys::c_jets::jets_wrapper::gej_negate, + Bitcoin::GejNormalize => simplicity_sys::c_jets::jets_wrapper::gej_normalize, + Bitcoin::GejRescale => simplicity_sys::c_jets::jets_wrapper::gej_rescale, + Bitcoin::GejXEquiv => simplicity_sys::c_jets::jets_wrapper::gej_x_equiv, + Bitcoin::GejYIsOdd => simplicity_sys::c_jets::jets_wrapper::gej_y_is_odd, + Bitcoin::Generate => simplicity_sys::c_jets::jets_wrapper::generate, + Bitcoin::HashToCurve => simplicity_sys::c_jets::jets_wrapper::hash_to_curve, + Bitcoin::High1 => simplicity_sys::c_jets::jets_wrapper::high_1, + Bitcoin::High16 => simplicity_sys::c_jets::jets_wrapper::high_16, + Bitcoin::High32 => simplicity_sys::c_jets::jets_wrapper::high_32, + Bitcoin::High64 => simplicity_sys::c_jets::jets_wrapper::high_64, + Bitcoin::High8 => simplicity_sys::c_jets::jets_wrapper::high_8, + Bitcoin::Increment16 => simplicity_sys::c_jets::jets_wrapper::increment_16, + Bitcoin::Increment32 => simplicity_sys::c_jets::jets_wrapper::increment_32, + Bitcoin::Increment64 => simplicity_sys::c_jets::jets_wrapper::increment_64, + Bitcoin::Increment8 => simplicity_sys::c_jets::jets_wrapper::increment_8, + Bitcoin::IsOne16 => simplicity_sys::c_jets::jets_wrapper::is_one_16, + Bitcoin::IsOne32 => simplicity_sys::c_jets::jets_wrapper::is_one_32, + Bitcoin::IsOne64 => simplicity_sys::c_jets::jets_wrapper::is_one_64, + Bitcoin::IsOne8 => simplicity_sys::c_jets::jets_wrapper::is_one_8, + Bitcoin::IsZero16 => simplicity_sys::c_jets::jets_wrapper::is_zero_16, + Bitcoin::IsZero32 => simplicity_sys::c_jets::jets_wrapper::is_zero_32, + Bitcoin::IsZero64 => simplicity_sys::c_jets::jets_wrapper::is_zero_64, + Bitcoin::IsZero8 => simplicity_sys::c_jets::jets_wrapper::is_zero_8, + Bitcoin::Le16 => simplicity_sys::c_jets::jets_wrapper::le_16, + Bitcoin::Le32 => simplicity_sys::c_jets::jets_wrapper::le_32, + Bitcoin::Le64 => simplicity_sys::c_jets::jets_wrapper::le_64, + Bitcoin::Le8 => simplicity_sys::c_jets::jets_wrapper::le_8, + Bitcoin::LeftExtend16_32 => simplicity_sys::c_jets::jets_wrapper::left_extend_16_32, + Bitcoin::LeftExtend16_64 => simplicity_sys::c_jets::jets_wrapper::left_extend_16_64, + Bitcoin::LeftExtend1_16 => simplicity_sys::c_jets::jets_wrapper::left_extend_1_16, + Bitcoin::LeftExtend1_32 => simplicity_sys::c_jets::jets_wrapper::left_extend_1_32, + Bitcoin::LeftExtend1_64 => simplicity_sys::c_jets::jets_wrapper::left_extend_1_64, + Bitcoin::LeftExtend1_8 => simplicity_sys::c_jets::jets_wrapper::left_extend_1_8, + Bitcoin::LeftExtend32_64 => simplicity_sys::c_jets::jets_wrapper::left_extend_32_64, + Bitcoin::LeftExtend8_16 => simplicity_sys::c_jets::jets_wrapper::left_extend_8_16, + Bitcoin::LeftExtend8_32 => simplicity_sys::c_jets::jets_wrapper::left_extend_8_32, + Bitcoin::LeftExtend8_64 => simplicity_sys::c_jets::jets_wrapper::left_extend_8_64, + Bitcoin::LeftPadHigh16_32 => simplicity_sys::c_jets::jets_wrapper::left_pad_high_16_32, + Bitcoin::LeftPadHigh16_64 => simplicity_sys::c_jets::jets_wrapper::left_pad_high_16_64, + Bitcoin::LeftPadHigh1_16 => simplicity_sys::c_jets::jets_wrapper::left_pad_high_1_16, + Bitcoin::LeftPadHigh1_32 => simplicity_sys::c_jets::jets_wrapper::left_pad_high_1_32, + Bitcoin::LeftPadHigh1_64 => simplicity_sys::c_jets::jets_wrapper::left_pad_high_1_64, + Bitcoin::LeftPadHigh1_8 => simplicity_sys::c_jets::jets_wrapper::left_pad_high_1_8, + Bitcoin::LeftPadHigh32_64 => simplicity_sys::c_jets::jets_wrapper::left_pad_high_32_64, + Bitcoin::LeftPadHigh8_16 => simplicity_sys::c_jets::jets_wrapper::left_pad_high_8_16, + Bitcoin::LeftPadHigh8_32 => simplicity_sys::c_jets::jets_wrapper::left_pad_high_8_32, + Bitcoin::LeftPadHigh8_64 => simplicity_sys::c_jets::jets_wrapper::left_pad_high_8_64, + Bitcoin::LeftPadLow16_32 => simplicity_sys::c_jets::jets_wrapper::left_pad_low_16_32, + Bitcoin::LeftPadLow16_64 => simplicity_sys::c_jets::jets_wrapper::left_pad_low_16_64, + Bitcoin::LeftPadLow1_16 => simplicity_sys::c_jets::jets_wrapper::left_pad_low_1_16, + Bitcoin::LeftPadLow1_32 => simplicity_sys::c_jets::jets_wrapper::left_pad_low_1_32, + Bitcoin::LeftPadLow1_64 => simplicity_sys::c_jets::jets_wrapper::left_pad_low_1_64, + Bitcoin::LeftPadLow1_8 => simplicity_sys::c_jets::jets_wrapper::left_pad_low_1_8, + Bitcoin::LeftPadLow32_64 => simplicity_sys::c_jets::jets_wrapper::left_pad_low_32_64, + Bitcoin::LeftPadLow8_16 => simplicity_sys::c_jets::jets_wrapper::left_pad_low_8_16, + Bitcoin::LeftPadLow8_32 => simplicity_sys::c_jets::jets_wrapper::left_pad_low_8_32, + Bitcoin::LeftPadLow8_64 => simplicity_sys::c_jets::jets_wrapper::left_pad_low_8_64, + Bitcoin::LeftRotate16 => simplicity_sys::c_jets::jets_wrapper::left_rotate_16, + Bitcoin::LeftRotate32 => simplicity_sys::c_jets::jets_wrapper::left_rotate_32, + Bitcoin::LeftRotate64 => simplicity_sys::c_jets::jets_wrapper::left_rotate_64, + Bitcoin::LeftRotate8 => simplicity_sys::c_jets::jets_wrapper::left_rotate_8, + Bitcoin::LeftShift16 => simplicity_sys::c_jets::jets_wrapper::left_shift_16, + Bitcoin::LeftShift32 => simplicity_sys::c_jets::jets_wrapper::left_shift_32, + Bitcoin::LeftShift64 => simplicity_sys::c_jets::jets_wrapper::left_shift_64, + Bitcoin::LeftShift8 => simplicity_sys::c_jets::jets_wrapper::left_shift_8, + Bitcoin::LeftShiftWith16 => simplicity_sys::c_jets::jets_wrapper::left_shift_with_16, + Bitcoin::LeftShiftWith32 => simplicity_sys::c_jets::jets_wrapper::left_shift_with_32, + Bitcoin::LeftShiftWith64 => simplicity_sys::c_jets::jets_wrapper::left_shift_with_64, + Bitcoin::LeftShiftWith8 => simplicity_sys::c_jets::jets_wrapper::left_shift_with_8, + Bitcoin::Leftmost16_1 => simplicity_sys::c_jets::jets_wrapper::leftmost_16_1, + Bitcoin::Leftmost16_2 => simplicity_sys::c_jets::jets_wrapper::leftmost_16_2, + Bitcoin::Leftmost16_4 => simplicity_sys::c_jets::jets_wrapper::leftmost_16_4, + Bitcoin::Leftmost16_8 => simplicity_sys::c_jets::jets_wrapper::leftmost_16_8, + Bitcoin::Leftmost32_1 => simplicity_sys::c_jets::jets_wrapper::leftmost_32_1, + Bitcoin::Leftmost32_16 => simplicity_sys::c_jets::jets_wrapper::leftmost_32_16, + Bitcoin::Leftmost32_2 => simplicity_sys::c_jets::jets_wrapper::leftmost_32_2, + Bitcoin::Leftmost32_4 => simplicity_sys::c_jets::jets_wrapper::leftmost_32_4, + Bitcoin::Leftmost32_8 => simplicity_sys::c_jets::jets_wrapper::leftmost_32_8, + Bitcoin::Leftmost64_1 => simplicity_sys::c_jets::jets_wrapper::leftmost_64_1, + Bitcoin::Leftmost64_16 => simplicity_sys::c_jets::jets_wrapper::leftmost_64_16, + Bitcoin::Leftmost64_2 => simplicity_sys::c_jets::jets_wrapper::leftmost_64_2, + Bitcoin::Leftmost64_32 => simplicity_sys::c_jets::jets_wrapper::leftmost_64_32, + Bitcoin::Leftmost64_4 => simplicity_sys::c_jets::jets_wrapper::leftmost_64_4, + Bitcoin::Leftmost64_8 => simplicity_sys::c_jets::jets_wrapper::leftmost_64_8, + Bitcoin::Leftmost8_1 => simplicity_sys::c_jets::jets_wrapper::leftmost_8_1, + Bitcoin::Leftmost8_2 => simplicity_sys::c_jets::jets_wrapper::leftmost_8_2, + Bitcoin::Leftmost8_4 => simplicity_sys::c_jets::jets_wrapper::leftmost_8_4, + Bitcoin::LinearCombination1 => simplicity_sys::c_jets::jets_wrapper::linear_combination_1, + Bitcoin::LinearVerify1 => simplicity_sys::c_jets::jets_wrapper::linear_verify_1, + Bitcoin::Low1 => simplicity_sys::c_jets::jets_wrapper::low_1, + Bitcoin::Low16 => simplicity_sys::c_jets::jets_wrapper::low_16, + Bitcoin::Low32 => simplicity_sys::c_jets::jets_wrapper::low_32, + Bitcoin::Low64 => simplicity_sys::c_jets::jets_wrapper::low_64, + Bitcoin::Low8 => simplicity_sys::c_jets::jets_wrapper::low_8, + Bitcoin::Lt16 => simplicity_sys::c_jets::jets_wrapper::lt_16, + Bitcoin::Lt32 => simplicity_sys::c_jets::jets_wrapper::lt_32, + Bitcoin::Lt64 => simplicity_sys::c_jets::jets_wrapper::lt_64, + Bitcoin::Lt8 => simplicity_sys::c_jets::jets_wrapper::lt_8, + Bitcoin::Maj1 => simplicity_sys::c_jets::jets_wrapper::maj_1, + Bitcoin::Maj16 => simplicity_sys::c_jets::jets_wrapper::maj_16, + Bitcoin::Maj32 => simplicity_sys::c_jets::jets_wrapper::maj_32, + Bitcoin::Maj64 => simplicity_sys::c_jets::jets_wrapper::maj_64, + Bitcoin::Maj8 => simplicity_sys::c_jets::jets_wrapper::maj_8, + Bitcoin::Max16 => simplicity_sys::c_jets::jets_wrapper::max_16, + Bitcoin::Max32 => simplicity_sys::c_jets::jets_wrapper::max_32, + Bitcoin::Max64 => simplicity_sys::c_jets::jets_wrapper::max_64, + Bitcoin::Max8 => simplicity_sys::c_jets::jets_wrapper::max_8, + Bitcoin::Median16 => simplicity_sys::c_jets::jets_wrapper::median_16, + Bitcoin::Median32 => simplicity_sys::c_jets::jets_wrapper::median_32, + Bitcoin::Median64 => simplicity_sys::c_jets::jets_wrapper::median_64, + Bitcoin::Median8 => simplicity_sys::c_jets::jets_wrapper::median_8, + Bitcoin::Min16 => simplicity_sys::c_jets::jets_wrapper::min_16, + Bitcoin::Min32 => simplicity_sys::c_jets::jets_wrapper::min_32, + Bitcoin::Min64 => simplicity_sys::c_jets::jets_wrapper::min_64, + Bitcoin::Min8 => simplicity_sys::c_jets::jets_wrapper::min_8, + Bitcoin::Modulo16 => simplicity_sys::c_jets::jets_wrapper::modulo_16, + Bitcoin::Modulo32 => simplicity_sys::c_jets::jets_wrapper::modulo_32, + Bitcoin::Modulo64 => simplicity_sys::c_jets::jets_wrapper::modulo_64, + Bitcoin::Modulo8 => simplicity_sys::c_jets::jets_wrapper::modulo_8, + Bitcoin::Multiply16 => simplicity_sys::c_jets::jets_wrapper::multiply_16, + Bitcoin::Multiply32 => simplicity_sys::c_jets::jets_wrapper::multiply_32, + Bitcoin::Multiply64 => simplicity_sys::c_jets::jets_wrapper::multiply_64, + Bitcoin::Multiply8 => simplicity_sys::c_jets::jets_wrapper::multiply_8, + Bitcoin::Negate16 => simplicity_sys::c_jets::jets_wrapper::negate_16, + Bitcoin::Negate32 => simplicity_sys::c_jets::jets_wrapper::negate_32, + Bitcoin::Negate64 => simplicity_sys::c_jets::jets_wrapper::negate_64, + Bitcoin::Negate8 => simplicity_sys::c_jets::jets_wrapper::negate_8, + Bitcoin::One16 => simplicity_sys::c_jets::jets_wrapper::one_16, + Bitcoin::One32 => simplicity_sys::c_jets::jets_wrapper::one_32, + Bitcoin::One64 => simplicity_sys::c_jets::jets_wrapper::one_64, + Bitcoin::One8 => simplicity_sys::c_jets::jets_wrapper::one_8, + Bitcoin::Or1 => simplicity_sys::c_jets::jets_wrapper::or_1, + Bitcoin::Or16 => simplicity_sys::c_jets::jets_wrapper::or_16, + Bitcoin::Or32 => simplicity_sys::c_jets::jets_wrapper::or_32, + Bitcoin::Or64 => simplicity_sys::c_jets::jets_wrapper::or_64, + Bitcoin::Or8 => simplicity_sys::c_jets::jets_wrapper::or_8, + Bitcoin::ParseLock => simplicity_sys::c_jets::jets_wrapper::parse_lock, + Bitcoin::ParseSequence => simplicity_sys::c_jets::jets_wrapper::parse_sequence, + Bitcoin::PointVerify1 => simplicity_sys::c_jets::jets_wrapper::point_verify_1, + Bitcoin::RightExtend16_32 => simplicity_sys::c_jets::jets_wrapper::right_extend_16_32, + Bitcoin::RightExtend16_64 => simplicity_sys::c_jets::jets_wrapper::right_extend_16_64, + Bitcoin::RightExtend32_64 => simplicity_sys::c_jets::jets_wrapper::right_extend_32_64, + Bitcoin::RightExtend8_16 => simplicity_sys::c_jets::jets_wrapper::right_extend_8_16, + Bitcoin::RightExtend8_32 => simplicity_sys::c_jets::jets_wrapper::right_extend_8_32, + Bitcoin::RightExtend8_64 => simplicity_sys::c_jets::jets_wrapper::right_extend_8_64, + Bitcoin::RightPadHigh16_32 => simplicity_sys::c_jets::jets_wrapper::right_pad_high_16_32, + Bitcoin::RightPadHigh16_64 => simplicity_sys::c_jets::jets_wrapper::right_pad_high_16_64, + Bitcoin::RightPadHigh1_16 => simplicity_sys::c_jets::jets_wrapper::right_pad_high_1_16, + Bitcoin::RightPadHigh1_32 => simplicity_sys::c_jets::jets_wrapper::right_pad_high_1_32, + Bitcoin::RightPadHigh1_64 => simplicity_sys::c_jets::jets_wrapper::right_pad_high_1_64, + Bitcoin::RightPadHigh1_8 => simplicity_sys::c_jets::jets_wrapper::right_pad_high_1_8, + Bitcoin::RightPadHigh32_64 => simplicity_sys::c_jets::jets_wrapper::right_pad_high_32_64, + Bitcoin::RightPadHigh8_16 => simplicity_sys::c_jets::jets_wrapper::right_pad_high_8_16, + Bitcoin::RightPadHigh8_32 => simplicity_sys::c_jets::jets_wrapper::right_pad_high_8_32, + Bitcoin::RightPadHigh8_64 => simplicity_sys::c_jets::jets_wrapper::right_pad_high_8_64, + Bitcoin::RightPadLow16_32 => simplicity_sys::c_jets::jets_wrapper::right_pad_low_16_32, + Bitcoin::RightPadLow16_64 => simplicity_sys::c_jets::jets_wrapper::right_pad_low_16_64, + Bitcoin::RightPadLow1_16 => simplicity_sys::c_jets::jets_wrapper::right_pad_low_1_16, + Bitcoin::RightPadLow1_32 => simplicity_sys::c_jets::jets_wrapper::right_pad_low_1_32, + Bitcoin::RightPadLow1_64 => simplicity_sys::c_jets::jets_wrapper::right_pad_low_1_64, + Bitcoin::RightPadLow1_8 => simplicity_sys::c_jets::jets_wrapper::right_pad_low_1_8, + Bitcoin::RightPadLow32_64 => simplicity_sys::c_jets::jets_wrapper::right_pad_low_32_64, + Bitcoin::RightPadLow8_16 => simplicity_sys::c_jets::jets_wrapper::right_pad_low_8_16, + Bitcoin::RightPadLow8_32 => simplicity_sys::c_jets::jets_wrapper::right_pad_low_8_32, + Bitcoin::RightPadLow8_64 => simplicity_sys::c_jets::jets_wrapper::right_pad_low_8_64, + Bitcoin::RightRotate16 => simplicity_sys::c_jets::jets_wrapper::right_rotate_16, + Bitcoin::RightRotate32 => simplicity_sys::c_jets::jets_wrapper::right_rotate_32, + Bitcoin::RightRotate64 => simplicity_sys::c_jets::jets_wrapper::right_rotate_64, + Bitcoin::RightRotate8 => simplicity_sys::c_jets::jets_wrapper::right_rotate_8, + Bitcoin::RightShift16 => simplicity_sys::c_jets::jets_wrapper::right_shift_16, + Bitcoin::RightShift32 => simplicity_sys::c_jets::jets_wrapper::right_shift_32, + Bitcoin::RightShift64 => simplicity_sys::c_jets::jets_wrapper::right_shift_64, + Bitcoin::RightShift8 => simplicity_sys::c_jets::jets_wrapper::right_shift_8, + Bitcoin::RightShiftWith16 => simplicity_sys::c_jets::jets_wrapper::right_shift_with_16, + Bitcoin::RightShiftWith32 => simplicity_sys::c_jets::jets_wrapper::right_shift_with_32, + Bitcoin::RightShiftWith64 => simplicity_sys::c_jets::jets_wrapper::right_shift_with_64, + Bitcoin::RightShiftWith8 => simplicity_sys::c_jets::jets_wrapper::right_shift_with_8, + Bitcoin::Rightmost16_1 => simplicity_sys::c_jets::jets_wrapper::rightmost_16_1, + Bitcoin::Rightmost16_2 => simplicity_sys::c_jets::jets_wrapper::rightmost_16_2, + Bitcoin::Rightmost16_4 => simplicity_sys::c_jets::jets_wrapper::rightmost_16_4, + Bitcoin::Rightmost16_8 => simplicity_sys::c_jets::jets_wrapper::rightmost_16_8, + Bitcoin::Rightmost32_1 => simplicity_sys::c_jets::jets_wrapper::rightmost_32_1, + Bitcoin::Rightmost32_16 => simplicity_sys::c_jets::jets_wrapper::rightmost_32_16, + Bitcoin::Rightmost32_2 => simplicity_sys::c_jets::jets_wrapper::rightmost_32_2, + Bitcoin::Rightmost32_4 => simplicity_sys::c_jets::jets_wrapper::rightmost_32_4, + Bitcoin::Rightmost32_8 => simplicity_sys::c_jets::jets_wrapper::rightmost_32_8, + Bitcoin::Rightmost64_1 => simplicity_sys::c_jets::jets_wrapper::rightmost_64_1, + Bitcoin::Rightmost64_16 => simplicity_sys::c_jets::jets_wrapper::rightmost_64_16, + Bitcoin::Rightmost64_2 => simplicity_sys::c_jets::jets_wrapper::rightmost_64_2, + Bitcoin::Rightmost64_32 => simplicity_sys::c_jets::jets_wrapper::rightmost_64_32, + Bitcoin::Rightmost64_4 => simplicity_sys::c_jets::jets_wrapper::rightmost_64_4, + Bitcoin::Rightmost64_8 => simplicity_sys::c_jets::jets_wrapper::rightmost_64_8, + Bitcoin::Rightmost8_1 => simplicity_sys::c_jets::jets_wrapper::rightmost_8_1, + Bitcoin::Rightmost8_2 => simplicity_sys::c_jets::jets_wrapper::rightmost_8_2, + Bitcoin::Rightmost8_4 => simplicity_sys::c_jets::jets_wrapper::rightmost_8_4, + Bitcoin::ScalarAdd => simplicity_sys::c_jets::jets_wrapper::scalar_add, + Bitcoin::ScalarInvert => simplicity_sys::c_jets::jets_wrapper::scalar_invert, + Bitcoin::ScalarIsZero => simplicity_sys::c_jets::jets_wrapper::scalar_is_zero, + Bitcoin::ScalarMultiply => simplicity_sys::c_jets::jets_wrapper::scalar_multiply, + Bitcoin::ScalarMultiplyLambda => simplicity_sys::c_jets::jets_wrapper::scalar_multiply_lambda, + Bitcoin::ScalarNegate => simplicity_sys::c_jets::jets_wrapper::scalar_negate, + Bitcoin::ScalarNormalize => simplicity_sys::c_jets::jets_wrapper::scalar_normalize, + Bitcoin::ScalarSquare => simplicity_sys::c_jets::jets_wrapper::scalar_square, + Bitcoin::Scale => simplicity_sys::c_jets::jets_wrapper::scale, + Bitcoin::Sha256Ctx8Add512 => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_512, + Bitcoin::Some1 => simplicity_sys::c_jets::jets_wrapper::some_1, + Bitcoin::Some16 => simplicity_sys::c_jets::jets_wrapper::some_16, + Bitcoin::Some32 => simplicity_sys::c_jets::jets_wrapper::some_32, + Bitcoin::Some64 => simplicity_sys::c_jets::jets_wrapper::some_64, + Bitcoin::Some8 => simplicity_sys::c_jets::jets_wrapper::some_8, + Bitcoin::Subtract16 => simplicity_sys::c_jets::jets_wrapper::subtract_16, + Bitcoin::Subtract32 => simplicity_sys::c_jets::jets_wrapper::subtract_32, + Bitcoin::Subtract64 => simplicity_sys::c_jets::jets_wrapper::subtract_64, + Bitcoin::Subtract8 => simplicity_sys::c_jets::jets_wrapper::subtract_8, + Bitcoin::Swu => simplicity_sys::c_jets::jets_wrapper::swu, + Bitcoin::TapdataInit => simplicity_sys::c_jets::jets_wrapper::tapdata_init, + Bitcoin::Xor1 => simplicity_sys::c_jets::jets_wrapper::xor_1, + Bitcoin::Xor16 => simplicity_sys::c_jets::jets_wrapper::xor_16, + Bitcoin::Xor32 => simplicity_sys::c_jets::jets_wrapper::xor_32, + Bitcoin::Xor64 => simplicity_sys::c_jets::jets_wrapper::xor_64, + Bitcoin::Xor8 => simplicity_sys::c_jets::jets_wrapper::xor_8, + Bitcoin::XorXor1 => simplicity_sys::c_jets::jets_wrapper::xor_xor_1, + Bitcoin::XorXor16 => simplicity_sys::c_jets::jets_wrapper::xor_xor_16, + Bitcoin::XorXor32 => simplicity_sys::c_jets::jets_wrapper::xor_xor_32, + Bitcoin::XorXor64 => simplicity_sys::c_jets::jets_wrapper::xor_xor_64, + Bitcoin::XorXor8 => simplicity_sys::c_jets::jets_wrapper::xor_xor_8, + // Remaining env jets + Bitcoin::AnnexHash => c_bitcoin::annex_hash, + Bitcoin::BuildTapbranch => c_bitcoin::build_tapbranch, + Bitcoin::BuildTapleafSimplicity => c_bitcoin::build_tapleaf_simplicity, + Bitcoin::BuildTaptweak => c_bitcoin::build_taptweak, + Bitcoin::CheckLockTime => c_bitcoin::check_lock_time, + Bitcoin::CurrentAnnexHash => c_bitcoin::current_annex_hash, + Bitcoin::CurrentPrevOutpoint => c_bitcoin::current_prev_outpoint, + Bitcoin::CurrentScriptHash => c_bitcoin::current_script_hash, + Bitcoin::CurrentScriptSigHash => c_bitcoin::current_script_sig_hash, + Bitcoin::CurrentSequence => c_bitcoin::current_sequence, + Bitcoin::CurrentValue => c_bitcoin::current_value, + Bitcoin::Fee => c_bitcoin::fee, + Bitcoin::InputAnnexHash => c_bitcoin::input_annex_hash, + Bitcoin::InputAnnexesHash => c_bitcoin::input_annexes_hash, + Bitcoin::InputHash => c_bitcoin::input_hash, + Bitcoin::InputOutpointsHash => c_bitcoin::input_outpoints_hash, + Bitcoin::InputPrevOutpoint => c_bitcoin::input_prev_outpoint, + Bitcoin::InputScriptHash => c_bitcoin::input_script_hash, + Bitcoin::InputScriptSigHash => c_bitcoin::input_script_sig_hash, + Bitcoin::InputScriptSigsHash => c_bitcoin::input_script_sigs_hash, + Bitcoin::InputScriptsHash => c_bitcoin::input_scripts_hash, + Bitcoin::InputSequence => c_bitcoin::input_sequence, + Bitcoin::InputSequencesHash => c_bitcoin::input_sequences_hash, + Bitcoin::InputUtxoHash => c_bitcoin::input_utxo_hash, + Bitcoin::InputUtxosHash => c_bitcoin::input_utxos_hash, + Bitcoin::InputValue => c_bitcoin::input_value, + Bitcoin::InputValuesHash => c_bitcoin::input_values_hash, + Bitcoin::InputsHash => c_bitcoin::inputs_hash, + Bitcoin::InternalKey => c_bitcoin::internal_key, + Bitcoin::LockTime => c_bitcoin::lock_time, + Bitcoin::NumOutputs => c_bitcoin::num_outputs, + Bitcoin::OutpointHash => c_bitcoin::outpoint_hash, + Bitcoin::OutputHash => c_bitcoin::output_hash, + Bitcoin::OutputScriptHash => c_bitcoin::output_script_hash, + Bitcoin::OutputScriptsHash => c_bitcoin::output_scripts_hash, + Bitcoin::OutputValue => c_bitcoin::output_value, + Bitcoin::OutputValuesHash => c_bitcoin::output_values_hash, + Bitcoin::OutputsHash => c_bitcoin::outputs_hash, + Bitcoin::ScriptCMR => c_bitcoin::script_cmr, + Bitcoin::TapleafHash => c_bitcoin::tapleaf_hash, + Bitcoin::TapleafVersion => c_bitcoin::tapleaf_version, + Bitcoin::Tappath => c_bitcoin::tappath, + Bitcoin::TappathHash => c_bitcoin::tappath_hash, + Bitcoin::TotalInputValue => c_bitcoin::total_input_value, + Bitcoin::TotalOutputValue => c_bitcoin::total_output_value, + Bitcoin::TransactionId => c_bitcoin::transaction_id, + Bitcoin::TxIsFinal => c_bitcoin::tx_is_final, + Bitcoin::TxLockDistance => c_bitcoin::tx_lock_distance, + Bitcoin::TxLockDuration => c_bitcoin::tx_lock_duration, + Bitcoin::TxLockHeight => c_bitcoin::tx_lock_height, + Bitcoin::TxLockTime => c_bitcoin::tx_lock_time, + Bitcoin::Version => c_bitcoin::version, + } +} + + +#[cfg(test)] +mod bitcoin_cmr_tests { + use super::*; + use crate::merkle::cmr::Cmr; + + #[test] + fn cmr_matches_spec() { + assert_eq!(Bitcoin::Add16.cmr(), Cmr::from_byte_array([0x49, 0x42, 0x5a, 0x86, 0xe2, 0x0a, 0x67, 0x6d, 0x8b, 0x87, 0xe3, 0xc1, 0xa9, 0xb8, 0xea, 0x6e, 0xc7, 0x5d, 0x85, 0x9c, 0x12, 0xc5, 0x1b, 0xcb, 0x7f, 0xa9, 0xf9, 0x69, 0x12, 0xc3, 0x49, 0xcf])); + assert_eq!(Bitcoin::Add32.cmr(), Cmr::from_byte_array([0x46, 0x68, 0xcd, 0x55, 0xe8, 0xd1, 0x59, 0x19, 0x53, 0x32, 0x70, 0x14, 0xec, 0x64, 0xc8, 0xe7, 0xd5, 0x2b, 0x86, 0xb5, 0x3e, 0x11, 0xc0, 0x14, 0x57, 0xea, 0xf2, 0xc3, 0xd3, 0xce, 0xbf, 0x9f])); + assert_eq!(Bitcoin::Add64.cmr(), Cmr::from_byte_array([0xbe, 0x2b, 0x75, 0x19, 0x30, 0x3a, 0x67, 0xee, 0xa6, 0xb4, 0x82, 0x95, 0x0e, 0xda, 0x83, 0x43, 0x5e, 0x1d, 0xe8, 0x55, 0x9c, 0x39, 0x4a, 0x23, 0x62, 0x22, 0xff, 0x5b, 0xf0, 0x89, 0xd3, 0x46])); + assert_eq!(Bitcoin::Add8.cmr(), Cmr::from_byte_array([0xdf, 0xa1, 0x79, 0xad, 0xf4, 0x55, 0x0b, 0x28, 0x48, 0x73, 0xbf, 0x30, 0x12, 0x3e, 0x0d, 0x4e, 0x54, 0x06, 0x9b, 0x08, 0x58, 0x34, 0xce, 0x56, 0x58, 0x15, 0xef, 0x7e, 0x45, 0x78, 0x4a, 0xcb])); + assert_eq!(Bitcoin::All16.cmr(), Cmr::from_byte_array([0x24, 0xf4, 0x82, 0xa5, 0x13, 0xd3, 0x33, 0x62, 0x01, 0x5d, 0x28, 0xdf, 0x4b, 0xb6, 0xc3, 0xee, 0x08, 0xab, 0x8a, 0xfb, 0xbd, 0x25, 0x57, 0x1f, 0x0e, 0xa8, 0x9d, 0x8c, 0xab, 0xa3, 0x14, 0x04])); + assert_eq!(Bitcoin::All32.cmr(), Cmr::from_byte_array([0xa7, 0x16, 0x52, 0x2d, 0x0f, 0x37, 0x87, 0xc8, 0xb4, 0xd5, 0x07, 0x64, 0x7f, 0x1f, 0x80, 0x7b, 0x67, 0xf3, 0x20, 0xd6, 0xeb, 0x67, 0xb8, 0x4b, 0x60, 0x9c, 0xec, 0x1d, 0x2f, 0x12, 0x21, 0x8a])); + assert_eq!(Bitcoin::All64.cmr(), Cmr::from_byte_array([0x7a, 0xee, 0xfe, 0x2e, 0xce, 0x24, 0xba, 0xb3, 0x7c, 0x6e, 0x54, 0x30, 0xee, 0xd4, 0x19, 0xfc, 0xd5, 0xf0, 0x37, 0x91, 0x2d, 0x17, 0x70, 0xcb, 0x7d, 0x65, 0x20, 0xdc, 0xe5, 0x25, 0x29, 0x1a])); + assert_eq!(Bitcoin::All8.cmr(), Cmr::from_byte_array([0x46, 0x37, 0xf4, 0x0e, 0x5f, 0x47, 0x26, 0xb0, 0x05, 0x70, 0x76, 0x5a, 0xc7, 0x94, 0xe2, 0x9e, 0xd1, 0xbb, 0x26, 0x55, 0xff, 0xc4, 0x12, 0xb2, 0xdc, 0x41, 0x25, 0x8e, 0x41, 0xaa, 0xc6, 0x24])); + assert_eq!(Bitcoin::And1.cmr(), Cmr::from_byte_array([0x10, 0x68, 0x4d, 0x0d, 0xd7, 0x2c, 0xb0, 0xa8, 0x26, 0xa8, 0x63, 0x83, 0x4e, 0x01, 0x1f, 0x50, 0xfa, 0x0d, 0x55, 0x8b, 0xa7, 0x7d, 0x6b, 0x9f, 0x49, 0xa1, 0xac, 0x22, 0x90, 0x2a, 0x6a, 0xd0])); + assert_eq!(Bitcoin::And16.cmr(), Cmr::from_byte_array([0x37, 0x3c, 0x73, 0x0f, 0xad, 0x3e, 0x88, 0x47, 0x99, 0x1a, 0xa4, 0x17, 0xd9, 0xf0, 0x80, 0xee, 0x1c, 0xb8, 0x8a, 0x7f, 0x72, 0x06, 0xf3, 0xfa, 0x84, 0x0b, 0x19, 0x50, 0x77, 0x61, 0xfb, 0x23])); + assert_eq!(Bitcoin::And32.cmr(), Cmr::from_byte_array([0x13, 0xb0, 0x2c, 0x4c, 0x60, 0xae, 0x6e, 0xa4, 0x91, 0x16, 0x16, 0x49, 0xac, 0xf9, 0xa4, 0x7a, 0x70, 0x25, 0xaf, 0x84, 0x7d, 0x5f, 0x58, 0x1e, 0x6f, 0x1c, 0xcc, 0xfb, 0x21, 0xd3, 0x00, 0x1d])); + assert_eq!(Bitcoin::And64.cmr(), Cmr::from_byte_array([0x92, 0x18, 0x55, 0x35, 0xd4, 0x50, 0x54, 0x07, 0xde, 0xa3, 0xc8, 0xa6, 0x08, 0x26, 0xed, 0xe6, 0x4a, 0x8f, 0xbb, 0x3d, 0xb4, 0x86, 0xd5, 0x6f, 0x64, 0x2d, 0x21, 0x7c, 0x29, 0xcb, 0xd7, 0x95])); + assert_eq!(Bitcoin::And8.cmr(), Cmr::from_byte_array([0x26, 0x9a, 0x1b, 0x44, 0x62, 0x66, 0xf8, 0xf4, 0xa4, 0xa3, 0x8f, 0xa7, 0xe7, 0xe3, 0x91, 0x82, 0xf1, 0x52, 0x14, 0x36, 0x14, 0x2b, 0xad, 0xed, 0xf3, 0xaa, 0x63, 0xfb, 0x2f, 0x17, 0x2d, 0x2f])); + assert_eq!(Bitcoin::AnnexHash.cmr(), Cmr::from_byte_array([0x51, 0xfa, 0x19, 0x13, 0xa6, 0x29, 0x73, 0x48, 0x4a, 0x70, 0x0a, 0xf3, 0xff, 0x93, 0x26, 0x94, 0xd3, 0x89, 0x0a, 0xe0, 0xad, 0x87, 0xa4, 0x55, 0xda, 0xf4, 0x90, 0x6f, 0x22, 0x4a, 0x48, 0xd5])); + assert_eq!(Bitcoin::Bip0340Verify.cmr(), Cmr::from_byte_array([0x49, 0x15, 0x65, 0xfe, 0x23, 0xa7, 0xbd, 0xc1, 0x84, 0x2b, 0xe7, 0x49, 0x50, 0x93, 0x37, 0xf9, 0x68, 0x90, 0xd5, 0xb3, 0x58, 0xb3, 0x65, 0x20, 0x90, 0xda, 0x55, 0x66, 0x54, 0xe2, 0x95, 0x49])); + assert_eq!(Bitcoin::BuildTapbranch.cmr(), Cmr::from_byte_array([0xef, 0x8e, 0x92, 0x91, 0x9b, 0x26, 0x08, 0xea, 0x6b, 0x5b, 0xcd, 0xd3, 0x9c, 0x51, 0x78, 0xe5, 0x46, 0x24, 0x95, 0x53, 0x91, 0x4b, 0x0f, 0x8d, 0x33, 0x73, 0x5d, 0x28, 0x86, 0xe1, 0xa5, 0xe8])); + assert_eq!(Bitcoin::BuildTapleafSimplicity.cmr(), Cmr::from_byte_array([0x22, 0x41, 0x19, 0x09, 0x98, 0x41, 0x47, 0xde, 0x8f, 0x5a, 0x04, 0x28, 0x35, 0x8b, 0x47, 0x16, 0xdb, 0x08, 0x76, 0x64, 0xa7, 0x28, 0x56, 0x08, 0x52, 0xb0, 0xe6, 0x16, 0xeb, 0xc6, 0x2d, 0x30])); + assert_eq!(Bitcoin::BuildTaptweak.cmr(), Cmr::from_byte_array([0xf1, 0x92, 0xdb, 0x17, 0x06, 0x60, 0x8d, 0xef, 0x16, 0x5d, 0xbd, 0xda, 0x72, 0xa3, 0x8c, 0x88, 0x82, 0xcb, 0x36, 0xc6, 0xda, 0x47, 0x07, 0x0d, 0x8a, 0x5f, 0x58, 0x96, 0xfb, 0xda, 0x84, 0x34])); + assert_eq!(Bitcoin::CheckLockDistance.cmr(), Cmr::from_byte_array([0x38, 0xfd, 0xf7, 0xdd, 0x28, 0x53, 0x86, 0x70, 0xfb, 0x34, 0xc1, 0xbf, 0xe7, 0x2f, 0x17, 0xe2, 0xca, 0x57, 0x84, 0xf8, 0x7f, 0xed, 0x88, 0xea, 0xb5, 0x84, 0x79, 0x2b, 0x39, 0x74, 0xbd, 0x18])); + assert_eq!(Bitcoin::CheckLockDuration.cmr(), Cmr::from_byte_array([0x77, 0x50, 0x38, 0x32, 0x6e, 0xae, 0x25, 0xc7, 0x20, 0x9b, 0x24, 0x43, 0x06, 0xea, 0xa9, 0xf9, 0x20, 0x4c, 0x7e, 0xce, 0x2d, 0xd6, 0x3b, 0x45, 0x2e, 0x10, 0x01, 0x7f, 0xa4, 0xea, 0x53, 0xcf])); + assert_eq!(Bitcoin::CheckLockHeight.cmr(), Cmr::from_byte_array([0xb9, 0x0f, 0x15, 0x1f, 0x45, 0xb4, 0xeb, 0x37, 0x21, 0x06, 0x21, 0xf9, 0x70, 0x0a, 0x36, 0xc8, 0xc5, 0x04, 0xbe, 0xe0, 0x67, 0x77, 0x11, 0x63, 0xa8, 0xb8, 0x3a, 0x77, 0x18, 0xe6, 0x68, 0x6a])); + assert_eq!(Bitcoin::CheckLockTime.cmr(), Cmr::from_byte_array([0xa4, 0x51, 0xeb, 0xb2, 0x25, 0xd6, 0xb1, 0x33, 0xa5, 0xe6, 0x35, 0x39, 0x78, 0x00, 0xd4, 0x87, 0xb3, 0x96, 0x8b, 0x0d, 0xe5, 0x5c, 0x96, 0xeb, 0x82, 0xf2, 0x90, 0xec, 0xff, 0x9c, 0x25, 0x90])); + assert_eq!(Bitcoin::CheckSigVerify.cmr(), Cmr::from_byte_array([0xb5, 0x80, 0x15, 0x54, 0x6d, 0x28, 0x52, 0x66, 0x5d, 0xd2, 0x1b, 0xf1, 0x12, 0x66, 0x26, 0x70, 0x20, 0xfa, 0x5e, 0x27, 0x50, 0x01, 0xdd, 0x46, 0x18, 0xfa, 0x41, 0x56, 0x25, 0x95, 0x2e, 0x68])); + assert_eq!(Bitcoin::Ch1.cmr(), Cmr::from_byte_array([0x73, 0xb2, 0xa9, 0x81, 0xd7, 0x21, 0x98, 0x6f, 0x8c, 0xde, 0xd6, 0x97, 0xe0, 0x63, 0x05, 0xd4, 0x58, 0x54, 0x10, 0x2d, 0xff, 0x20, 0xc0, 0xe5, 0xb9, 0x8a, 0xe1, 0x76, 0x23, 0x2f, 0xf2, 0x5b])); + assert_eq!(Bitcoin::Ch16.cmr(), Cmr::from_byte_array([0x78, 0xde, 0x46, 0x5e, 0x61, 0xd9, 0xa5, 0x0f, 0x78, 0x25, 0x2f, 0xf4, 0xab, 0x23, 0xc9, 0xe6, 0x3a, 0xe6, 0x8c, 0x76, 0x9d, 0x36, 0x66, 0x12, 0x71, 0x20, 0x7d, 0xc6, 0x93, 0xf4, 0x69, 0xb4])); + assert_eq!(Bitcoin::Ch32.cmr(), Cmr::from_byte_array([0xed, 0x93, 0xbe, 0xf1, 0xf6, 0x6e, 0x3a, 0x75, 0xe6, 0x12, 0x06, 0x02, 0xec, 0xee, 0x67, 0x40, 0x65, 0x3e, 0x7b, 0xd4, 0x6e, 0x07, 0xeb, 0x77, 0x14, 0x4e, 0xf1, 0xbb, 0x2c, 0x9d, 0xe5, 0x3d])); + assert_eq!(Bitcoin::Ch64.cmr(), Cmr::from_byte_array([0xce, 0xd0, 0x07, 0x9b, 0x0b, 0xd1, 0xcc, 0x00, 0x20, 0x9a, 0x7c, 0xbc, 0x23, 0xf1, 0x3d, 0xfd, 0x20, 0x28, 0x08, 0xf0, 0xf5, 0x25, 0x7d, 0x8a, 0x50, 0xac, 0x54, 0x3e, 0x64, 0xee, 0x3a, 0x05])); + assert_eq!(Bitcoin::Ch8.cmr(), Cmr::from_byte_array([0xc7, 0x07, 0xca, 0x72, 0x3e, 0x24, 0xf6, 0xb2, 0x5b, 0xf3, 0x94, 0xa9, 0x9a, 0x4d, 0x75, 0xe8, 0x13, 0x79, 0xb4, 0x67, 0x84, 0x38, 0xac, 0x78, 0x9d, 0xee, 0x18, 0x8e, 0xdc, 0xce, 0x75, 0xfa])); + assert_eq!(Bitcoin::Complement1.cmr(), Cmr::from_byte_array([0x1b, 0xcf, 0xae, 0x13, 0xd5, 0xd2, 0x37, 0xa0, 0xbb, 0x9b, 0x1d, 0x75, 0x32, 0x04, 0x74, 0x62, 0xb2, 0x76, 0x90, 0xde, 0x5c, 0xac, 0x0e, 0x20, 0x19, 0x29, 0x89, 0x64, 0x57, 0x93, 0x40, 0x60])); + assert_eq!(Bitcoin::Complement16.cmr(), Cmr::from_byte_array([0x81, 0xad, 0x4d, 0x2c, 0x3d, 0x16, 0xbf, 0x34, 0x0a, 0xf3, 0x88, 0x6d, 0x35, 0x5c, 0xc5, 0xbd, 0x1d, 0x59, 0x67, 0xe1, 0x6a, 0xce, 0x92, 0x4f, 0x19, 0xec, 0xf7, 0xd4, 0x86, 0xd6, 0xc7, 0xe9])); + assert_eq!(Bitcoin::Complement32.cmr(), Cmr::from_byte_array([0x13, 0x74, 0x2c, 0x18, 0x04, 0xa9, 0x6e, 0x6c, 0x03, 0x95, 0x28, 0xbf, 0xd0, 0x3b, 0x8c, 0xf2, 0xb4, 0x62, 0x52, 0x6b, 0xb1, 0x81, 0xa3, 0xd8, 0xb4, 0x32, 0xf9, 0x9a, 0xc4, 0xf5, 0xa7, 0xef])); + assert_eq!(Bitcoin::Complement64.cmr(), Cmr::from_byte_array([0x65, 0xb7, 0xbd, 0x09, 0x36, 0x39, 0xc5, 0x6d, 0xa2, 0x85, 0xce, 0xfa, 0x2d, 0x04, 0x64, 0x64, 0x5e, 0x14, 0xdd, 0x13, 0x64, 0x2f, 0x34, 0x95, 0x7d, 0x47, 0x37, 0xbd, 0x52, 0xfa, 0xc5, 0x88])); + assert_eq!(Bitcoin::Complement8.cmr(), Cmr::from_byte_array([0x95, 0x4b, 0x70, 0xdc, 0xec, 0x53, 0x9e, 0x6b, 0x67, 0xdf, 0xfe, 0xc5, 0x3c, 0xf2, 0x4a, 0x66, 0x99, 0x39, 0x60, 0x8b, 0x22, 0x3f, 0x5f, 0x8b, 0x6d, 0x12, 0x9d, 0xaa, 0x48, 0xca, 0x1c, 0xf0])); + assert_eq!(Bitcoin::CurrentAnnexHash.cmr(), Cmr::from_byte_array([0xce, 0xd9, 0x02, 0x2e, 0xdc, 0x69, 0x24, 0x1f, 0xe7, 0x07, 0x49, 0xa7, 0xf5, 0xd4, 0x89, 0xc3, 0x13, 0x5e, 0xe8, 0xc9, 0x6f, 0xe6, 0x4c, 0x44, 0x64, 0x40, 0x1f, 0x98, 0x51, 0xd7, 0xa1, 0x7d])); + assert_eq!(Bitcoin::CurrentIndex.cmr(), Cmr::from_byte_array([0x0e, 0x8c, 0x96, 0x4c, 0x2f, 0x2b, 0x34, 0x90, 0x36, 0x2f, 0x3b, 0xbc, 0x74, 0x83, 0xde, 0xa3, 0x7f, 0xda, 0x81, 0x0b, 0x69, 0x31, 0x4f, 0xf6, 0x64, 0xfe, 0xa0, 0xe3, 0x27, 0x08, 0xec, 0x8f])); + assert_eq!(Bitcoin::CurrentPrevOutpoint.cmr(), Cmr::from_byte_array([0x64, 0x43, 0x39, 0x1b, 0x34, 0x40, 0x86, 0x84, 0x6d, 0x5a, 0x17, 0xa6, 0x2e, 0x3e, 0x06, 0x28, 0x2a, 0xd6, 0x96, 0x2c, 0x4d, 0xfc, 0xed, 0x2f, 0x6a, 0x83, 0xd0, 0xdf, 0xbf, 0x6a, 0x5c, 0x54])); + assert_eq!(Bitcoin::CurrentScriptHash.cmr(), Cmr::from_byte_array([0x23, 0x49, 0x8d, 0xd6, 0x64, 0x5e, 0xd1, 0x38, 0xb3, 0x44, 0x93, 0x7c, 0xf6, 0x54, 0xaa, 0xff, 0xa6, 0x27, 0xf8, 0x5a, 0x47, 0xca, 0xa6, 0x89, 0x54, 0xf1, 0x3f, 0x4c, 0x6a, 0x4d, 0xc7, 0x72])); + assert_eq!(Bitcoin::CurrentScriptSigHash.cmr(), Cmr::from_byte_array([0x34, 0xa3, 0xc5, 0x5d, 0x14, 0x73, 0x74, 0xd8, 0xf3, 0xa1, 0x76, 0x1b, 0xba, 0xb2, 0x86, 0x96, 0x84, 0x55, 0x40, 0x4c, 0x2c, 0xa0, 0x3f, 0x69, 0x39, 0x3f, 0x63, 0x39, 0xd0, 0xf5, 0x8b, 0x59])); + assert_eq!(Bitcoin::CurrentSequence.cmr(), Cmr::from_byte_array([0xc4, 0x9f, 0x76, 0xac, 0x79, 0xf8, 0xf1, 0x5c, 0x40, 0x9b, 0xa8, 0x15, 0xc1, 0x6e, 0xdc, 0xb8, 0xd1, 0x1e, 0x9a, 0x07, 0x56, 0x5c, 0x8e, 0x09, 0xb6, 0x3e, 0x7f, 0xdf, 0x31, 0x03, 0x00, 0x9f])); + assert_eq!(Bitcoin::CurrentValue.cmr(), Cmr::from_byte_array([0x91, 0xb9, 0x6e, 0x82, 0x9e, 0x3b, 0x49, 0x72, 0xb0, 0xcb, 0x09, 0x1a, 0x0a, 0x90, 0x4b, 0xa4, 0x11, 0x33, 0x8a, 0xbf, 0xc0, 0x8d, 0xa7, 0x86, 0xd5, 0xa8, 0x4f, 0x04, 0x9b, 0x5b, 0xa3, 0xb8])); + assert_eq!(Bitcoin::Decompress.cmr(), Cmr::from_byte_array([0x89, 0x00, 0x56, 0xdf, 0x82, 0x8a, 0x76, 0x6e, 0xe9, 0xf6, 0x56, 0x07, 0x22, 0x1e, 0x89, 0x46, 0xfa, 0x77, 0xc2, 0x56, 0xbb, 0x96, 0xe2, 0x31, 0xe1, 0x94, 0xd3, 0x00, 0x8c, 0xf3, 0x56, 0xf6])); + assert_eq!(Bitcoin::Decrement16.cmr(), Cmr::from_byte_array([0x35, 0xfd, 0xa3, 0x8b, 0x67, 0x2c, 0x38, 0x31, 0xd8, 0xca, 0x11, 0xa4, 0xf3, 0xa9, 0x59, 0x62, 0x22, 0x52, 0x9e, 0xb1, 0xc1, 0x5f, 0x8c, 0x70, 0x50, 0x13, 0x97, 0x7d, 0x7d, 0xfb, 0x5d, 0x8b])); + assert_eq!(Bitcoin::Decrement32.cmr(), Cmr::from_byte_array([0x3b, 0x2b, 0x19, 0x39, 0x55, 0x22, 0x84, 0xf6, 0x14, 0x69, 0x4b, 0xa1, 0x8d, 0xce, 0x70, 0xce, 0xe4, 0x76, 0xff, 0x42, 0xdc, 0xd0, 0x89, 0xe1, 0xa3, 0xc0, 0xa4, 0x2b, 0xeb, 0xd1, 0x08, 0xf6])); + assert_eq!(Bitcoin::Decrement64.cmr(), Cmr::from_byte_array([0x7e, 0xf7, 0xbd, 0xd3, 0x5d, 0xb6, 0x85, 0xae, 0x99, 0x05, 0x53, 0x37, 0x35, 0xa2, 0xc7, 0xa7, 0xcc, 0xbc, 0x17, 0x08, 0xae, 0x63, 0x6f, 0x93, 0x1b, 0x5c, 0xe0, 0x26, 0xe5, 0xa1, 0x7f, 0xed])); + assert_eq!(Bitcoin::Decrement8.cmr(), Cmr::from_byte_array([0xe3, 0x64, 0xf2, 0xe5, 0xc0, 0x8a, 0xe0, 0x11, 0x8e, 0xbe, 0x99, 0x3e, 0x8b, 0x3c, 0x95, 0x8c, 0x2b, 0xcc, 0x60, 0x62, 0xa3, 0x3b, 0xaa, 0xb9, 0x28, 0xc0, 0x4b, 0x3e, 0xc9, 0x32, 0xf5, 0x1b])); + assert_eq!(Bitcoin::Divides16.cmr(), Cmr::from_byte_array([0x10, 0xbb, 0x18, 0x18, 0x0e, 0xab, 0x5b, 0xad, 0xdc, 0x16, 0x5d, 0x03, 0x37, 0xc4, 0xad, 0xa0, 0x88, 0xe1, 0x57, 0xb1, 0xaa, 0x67, 0x83, 0x34, 0x2a, 0x45, 0x20, 0xa3, 0x24, 0xdd, 0x9d, 0x2b])); + assert_eq!(Bitcoin::Divides32.cmr(), Cmr::from_byte_array([0xf5, 0xe8, 0xe7, 0x8c, 0x82, 0x76, 0x9a, 0x48, 0xc9, 0x10, 0x3e, 0x44, 0xdd, 0xb4, 0x7f, 0x84, 0x1d, 0x76, 0x93, 0xb0, 0x41, 0x9e, 0x5e, 0x7d, 0xa4, 0xe6, 0x8b, 0x78, 0xb2, 0x37, 0xa5, 0x72])); + assert_eq!(Bitcoin::Divides64.cmr(), Cmr::from_byte_array([0x9e, 0xbd, 0x55, 0xfa, 0xe4, 0x18, 0x88, 0x5e, 0xea, 0x04, 0xc3, 0xcd, 0xff, 0xf5, 0x31, 0xb7, 0xd7, 0x14, 0xd0, 0x59, 0x4f, 0xa7, 0xda, 0x87, 0xeb, 0x65, 0x55, 0xd3, 0x6b, 0x95, 0x3d, 0xb2])); + assert_eq!(Bitcoin::Divides8.cmr(), Cmr::from_byte_array([0xa2, 0x36, 0xbc, 0x3e, 0x5c, 0xf4, 0xd2, 0x56, 0x40, 0x8b, 0xa3, 0x8c, 0x1e, 0xae, 0xe7, 0x36, 0x9a, 0x9c, 0x40, 0x2f, 0x74, 0xbc, 0xd1, 0xc8, 0x02, 0xf9, 0x09, 0x4f, 0xbf, 0x36, 0x80, 0x3d])); + assert_eq!(Bitcoin::Divide16.cmr(), Cmr::from_byte_array([0x52, 0xab, 0xfe, 0xf1, 0x79, 0x75, 0x4c, 0x90, 0xf9, 0xa4, 0x26, 0x0f, 0x32, 0x3a, 0x8c, 0xa4, 0x95, 0x15, 0x92, 0x90, 0x2b, 0x8e, 0xcb, 0xd6, 0x4b, 0xa4, 0x26, 0x56, 0xfa, 0xc0, 0x59, 0x68])); + assert_eq!(Bitcoin::Divide32.cmr(), Cmr::from_byte_array([0x4a, 0x8a, 0xe5, 0x35, 0x44, 0xe1, 0x47, 0xed, 0x02, 0x25, 0x04, 0x23, 0x79, 0x34, 0xcc, 0x25, 0x44, 0x79, 0xbc, 0xf9, 0x3d, 0xe1, 0xe1, 0x97, 0x4d, 0xda, 0xb3, 0xbb, 0x51, 0x6e, 0x60, 0x6c])); + assert_eq!(Bitcoin::Divide64.cmr(), Cmr::from_byte_array([0xd7, 0x02, 0x5d, 0x05, 0xad, 0xfa, 0xe6, 0x6b, 0x47, 0x10, 0xd0, 0xff, 0x1e, 0x87, 0xe8, 0x28, 0x15, 0x57, 0x3e, 0x9c, 0xb6, 0x31, 0xb4, 0xc7, 0xd1, 0x3d, 0x2f, 0x1b, 0xe4, 0xdd, 0x26, 0xd2])); + assert_eq!(Bitcoin::Divide8.cmr(), Cmr::from_byte_array([0x40, 0xcd, 0x1d, 0xac, 0xea, 0x24, 0x66, 0x9b, 0x6a, 0x58, 0x9b, 0x61, 0x47, 0x54, 0x74, 0xaf, 0x31, 0xd1, 0x4f, 0x8d, 0x46, 0x87, 0x70, 0x84, 0x52, 0xd3, 0xdf, 0x37, 0x30, 0x25, 0x31, 0x26])); + assert_eq!(Bitcoin::DivMod128_64.cmr(), Cmr::from_byte_array([0x9a, 0x94, 0x43, 0xa2, 0xb5, 0x41, 0xe2, 0x9f, 0x27, 0x2f, 0xfd, 0x56, 0x7d, 0x1b, 0xf7, 0x42, 0xd6, 0x8c, 0xcb, 0xe9, 0x53, 0x8a, 0x87, 0x29, 0x1b, 0x0c, 0xa6, 0x38, 0x15, 0x63, 0xac, 0x2c])); + assert_eq!(Bitcoin::DivMod16.cmr(), Cmr::from_byte_array([0x39, 0xbc, 0xb5, 0xc0, 0x1d, 0xc1, 0x80, 0x5c, 0x49, 0x19, 0x89, 0x5c, 0xb5, 0x9e, 0x8f, 0x3b, 0x41, 0x44, 0x67, 0x17, 0xf7, 0xff, 0x48, 0xfd, 0xc9, 0x37, 0xdd, 0x03, 0x80, 0x24, 0xa0, 0x8a])); + assert_eq!(Bitcoin::DivMod32.cmr(), Cmr::from_byte_array([0xfb, 0x12, 0x02, 0xf4, 0xe8, 0x66, 0x3a, 0x87, 0xf5, 0x68, 0x99, 0x2a, 0x18, 0x50, 0x24, 0xc7, 0x0b, 0x4f, 0x07, 0x9f, 0xbe, 0x95, 0x30, 0x01, 0x0f, 0x6d, 0xb2, 0x84, 0x21, 0x8a, 0xf6, 0xcd])); + assert_eq!(Bitcoin::DivMod64.cmr(), Cmr::from_byte_array([0x67, 0x64, 0xdf, 0x5e, 0x2a, 0xa0, 0x30, 0x32, 0x6e, 0xe5, 0x44, 0xc6, 0xe5, 0x3f, 0xf3, 0x8e, 0xf0, 0xb2, 0x85, 0x17, 0x91, 0x5e, 0xec, 0x65, 0xc7, 0x2e, 0xa5, 0x7a, 0x12, 0x98, 0x28, 0xeb])); + assert_eq!(Bitcoin::DivMod8.cmr(), Cmr::from_byte_array([0xd3, 0x00, 0x24, 0x4e, 0x48, 0x0d, 0xd9, 0x74, 0x12, 0x13, 0xe4, 0xcb, 0x0e, 0xba, 0x83, 0x6d, 0x30, 0x59, 0xe7, 0x78, 0xb8, 0x12, 0x2f, 0x78, 0x90, 0x03, 0x26, 0x73, 0x73, 0x9c, 0x6a, 0x2c])); + assert_eq!(Bitcoin::Eq1.cmr(), Cmr::from_byte_array([0x65, 0x49, 0xf9, 0x86, 0x20, 0x3a, 0x64, 0x97, 0x35, 0x6e, 0x43, 0x2b, 0x2a, 0xa1, 0x60, 0xd6, 0xee, 0x87, 0x0b, 0x11, 0x19, 0x08, 0x65, 0xbd, 0x36, 0xa4, 0x7c, 0xb0, 0x47, 0x04, 0x33, 0xa5])); + assert_eq!(Bitcoin::Eq16.cmr(), Cmr::from_byte_array([0x0c, 0x54, 0x02, 0xb0, 0xad, 0xc8, 0xfc, 0x65, 0x70, 0x1b, 0xb7, 0x5b, 0x32, 0x54, 0xc8, 0x35, 0xf8, 0xfe, 0xc1, 0x30, 0x81, 0xcd, 0x35, 0xe1, 0x32, 0x8f, 0x2b, 0xd7, 0xdb, 0xd2, 0x3f, 0xa6])); + assert_eq!(Bitcoin::Eq256.cmr(), Cmr::from_byte_array([0x26, 0x0e, 0x1d, 0x13, 0x6d, 0xd7, 0x44, 0xfc, 0xb0, 0x50, 0x7a, 0x2d, 0x27, 0x70, 0x27, 0xa7, 0x72, 0x43, 0x54, 0xeb, 0x17, 0x6b, 0x2f, 0xbf, 0x31, 0xc6, 0xc7, 0xd7, 0xfb, 0x3e, 0xcd, 0x6f])); + assert_eq!(Bitcoin::Eq32.cmr(), Cmr::from_byte_array([0xf5, 0xd6, 0xed, 0xc8, 0xb6, 0x16, 0x4e, 0x12, 0x5b, 0xbb, 0xef, 0x08, 0xc9, 0xe0, 0x8a, 0x1e, 0x6f, 0xd4, 0x92, 0xf5, 0xbd, 0xca, 0x6f, 0xdc, 0x8b, 0x5f, 0x5a, 0x6f, 0x05, 0xc5, 0xab, 0x96])); + assert_eq!(Bitcoin::Eq64.cmr(), Cmr::from_byte_array([0x1f, 0x93, 0xac, 0xb8, 0x09, 0x2f, 0xa0, 0x6d, 0xea, 0xf3, 0xc3, 0x87, 0xf5, 0x4a, 0x18, 0xff, 0xea, 0xa6, 0x9a, 0x47, 0xa6, 0xf5, 0xca, 0xf4, 0xae, 0x49, 0x7e, 0x5c, 0xc2, 0xb3, 0x6c, 0x43])); + assert_eq!(Bitcoin::Eq8.cmr(), Cmr::from_byte_array([0xd7, 0x52, 0xfa, 0x7f, 0x51, 0x47, 0x30, 0x14, 0xeb, 0xb6, 0x9e, 0x1e, 0x1d, 0x2c, 0x86, 0xd5, 0x11, 0x48, 0xb6, 0xba, 0xa0, 0x21, 0x37, 0xa4, 0x8f, 0x62, 0xd5, 0x7e, 0xaf, 0x8d, 0xf1, 0xcd])); + assert_eq!(Bitcoin::Fee.cmr(), Cmr::from_byte_array([0xfb, 0x9c, 0xa9, 0x39, 0x81, 0x67, 0x3d, 0x1d, 0x23, 0xae, 0xd2, 0x4d, 0x61, 0x2c, 0x1f, 0x5d, 0xc7, 0xcd, 0x49, 0xf8, 0x6d, 0x34, 0x8e, 0x67, 0xa1, 0x5b, 0xc4, 0xa7, 0x13, 0x0a, 0xe1, 0x85])); + assert_eq!(Bitcoin::FeAdd.cmr(), Cmr::from_byte_array([0xa6, 0xc9, 0x0e, 0x02, 0xfd, 0xe4, 0xee, 0x6e, 0xef, 0x66, 0x67, 0x37, 0x49, 0x2e, 0x14, 0xaf, 0xc8, 0x76, 0x25, 0x04, 0x97, 0x4a, 0xf5, 0xd5, 0x47, 0x2b, 0xb9, 0x43, 0x3a, 0xd2, 0xd2, 0x94])); + assert_eq!(Bitcoin::FeInvert.cmr(), Cmr::from_byte_array([0x7c, 0x4a, 0xba, 0xce, 0x33, 0xc7, 0x2b, 0x3b, 0xe1, 0xfd, 0x0e, 0xe3, 0x9f, 0xc6, 0xcb, 0x3e, 0xe5, 0xc8, 0xf1, 0x1e, 0xf2, 0x19, 0x98, 0xc0, 0x60, 0x2b, 0x52, 0x15, 0xaa, 0x2a, 0x75, 0xc2])); + assert_eq!(Bitcoin::FeIsOdd.cmr(), Cmr::from_byte_array([0x30, 0xf5, 0x17, 0x1f, 0x58, 0xf1, 0x08, 0x9d, 0x5d, 0xcf, 0xb6, 0xe6, 0x68, 0x3f, 0x5a, 0xde, 0x98, 0x4c, 0x07, 0x99, 0x76, 0x3c, 0xa7, 0x38, 0x3f, 0x75, 0xdf, 0x1c, 0xa0, 0x81, 0x3e, 0xfe])); + assert_eq!(Bitcoin::FeIsZero.cmr(), Cmr::from_byte_array([0xb0, 0xb7, 0x4d, 0x86, 0x51, 0xff, 0x55, 0x7c, 0xa9, 0x60, 0x44, 0xdd, 0x97, 0x28, 0x13, 0x38, 0xa8, 0xf7, 0xd3, 0xac, 0xb3, 0x84, 0x7d, 0x03, 0xac, 0xbf, 0x3d, 0x32, 0xd9, 0x6f, 0xae, 0x55])); + assert_eq!(Bitcoin::FeMultiply.cmr(), Cmr::from_byte_array([0x50, 0x6b, 0x93, 0x19, 0xc1, 0x7a, 0x14, 0xa9, 0x46, 0x9d, 0x46, 0x27, 0x61, 0xa3, 0x30, 0x3a, 0xb4, 0x7d, 0xdb, 0x3a, 0x30, 0x79, 0xfb, 0xa3, 0x40, 0x73, 0xaa, 0x55, 0x42, 0x16, 0xa3, 0x88])); + assert_eq!(Bitcoin::FeMultiplyBeta.cmr(), Cmr::from_byte_array([0x6e, 0x18, 0x0e, 0xea, 0xbe, 0x84, 0x22, 0xb7, 0x99, 0x68, 0xe7, 0x11, 0xdd, 0x00, 0xa4, 0xb6, 0x57, 0x8b, 0xb2, 0x75, 0xbe, 0xf4, 0x7f, 0xe5, 0xff, 0x96, 0x8f, 0x14, 0x72, 0xd7, 0x6f, 0x2a])); + assert_eq!(Bitcoin::FeNegate.cmr(), Cmr::from_byte_array([0xd4, 0x37, 0xea, 0x00, 0x33, 0x98, 0x80, 0xb3, 0x83, 0xd8, 0x5f, 0xb2, 0xae, 0xaf, 0x20, 0x1b, 0xbe, 0x8f, 0xfc, 0x83, 0x70, 0x50, 0x62, 0xf9, 0xc9, 0x68, 0x59, 0x0d, 0x5d, 0xb3, 0x37, 0xf6])); + assert_eq!(Bitcoin::FeNormalize.cmr(), Cmr::from_byte_array([0xec, 0x0c, 0x3d, 0xd9, 0xc5, 0x28, 0x63, 0x64, 0x78, 0xbe, 0xc0, 0xe1, 0x60, 0xe5, 0x0a, 0xd9, 0xbf, 0x45, 0x2c, 0x5b, 0x6f, 0x84, 0xe9, 0x40, 0xe1, 0x65, 0x84, 0xeb, 0x08, 0x5a, 0xce, 0x38])); + assert_eq!(Bitcoin::FeSquare.cmr(), Cmr::from_byte_array([0xb9, 0x04, 0x77, 0x2d, 0x74, 0xa1, 0x85, 0xb8, 0x28, 0xeb, 0x15, 0x47, 0x28, 0xd2, 0x49, 0xc5, 0x08, 0x47, 0x11, 0xe9, 0xa1, 0x83, 0x2b, 0x89, 0xca, 0xf2, 0xaf, 0x59, 0xf9, 0x60, 0xe1, 0x18])); + assert_eq!(Bitcoin::FeSquareRoot.cmr(), Cmr::from_byte_array([0x16, 0xfb, 0x9a, 0xce, 0xbe, 0x8b, 0x5b, 0x87, 0xf2, 0xea, 0x7d, 0xb6, 0xaa, 0x3a, 0x2a, 0xf8, 0x8c, 0xa2, 0xb5, 0x8f, 0x02, 0xcd, 0xc8, 0x7e, 0x7c, 0xe6, 0xbe, 0x0c, 0x1f, 0xfc, 0xe0, 0x14])); + assert_eq!(Bitcoin::FullAdd16.cmr(), Cmr::from_byte_array([0xc5, 0x03, 0xb0, 0x78, 0xdd, 0xe3, 0x99, 0xc6, 0x3a, 0xc4, 0xa2, 0x32, 0xbd, 0x2a, 0x32, 0x9b, 0x04, 0x30, 0x8c, 0x75, 0xea, 0xec, 0x53, 0xa2, 0xf8, 0x89, 0xb8, 0xdf, 0x0d, 0x03, 0x34, 0x72])); + assert_eq!(Bitcoin::FullAdd32.cmr(), Cmr::from_byte_array([0xa7, 0xaf, 0xd0, 0x40, 0xfc, 0xb0, 0xb2, 0xf2, 0x71, 0x90, 0x78, 0x1a, 0xe5, 0x3a, 0x6c, 0xca, 0x00, 0xe9, 0xfe, 0x59, 0x53, 0x11, 0x15, 0xc2, 0x58, 0xcc, 0xb6, 0x9d, 0x3b, 0xe5, 0xa2, 0x13])); + assert_eq!(Bitcoin::FullAdd64.cmr(), Cmr::from_byte_array([0x80, 0xa3, 0xef, 0x6c, 0xdb, 0x84, 0xae, 0x7c, 0x8d, 0xbc, 0xf3, 0xa1, 0x84, 0x24, 0x84, 0xc0, 0x98, 0xdf, 0x6f, 0x19, 0x42, 0x7a, 0x5a, 0x4a, 0xdf, 0xe7, 0x6c, 0xd5, 0xff, 0x28, 0x36, 0xca])); + assert_eq!(Bitcoin::FullAdd8.cmr(), Cmr::from_byte_array([0x4b, 0x90, 0x76, 0xb8, 0xc1, 0xad, 0x56, 0xc9, 0xdb, 0x6b, 0xb3, 0xba, 0xf5, 0x93, 0x89, 0x54, 0x46, 0xce, 0x61, 0xc7, 0x4f, 0x79, 0x7e, 0xb8, 0xb2, 0x30, 0xd2, 0x05, 0x42, 0x1c, 0x96, 0x17])); + assert_eq!(Bitcoin::FullDecrement16.cmr(), Cmr::from_byte_array([0xfb, 0xa3, 0xc9, 0x78, 0x6e, 0xa3, 0x07, 0xf6, 0xd8, 0x54, 0x34, 0xfd, 0xa2, 0x56, 0x24, 0x82, 0x43, 0xa0, 0x0b, 0xac, 0x9a, 0x53, 0x53, 0xb6, 0x1e, 0xd3, 0x9c, 0x60, 0x55, 0xb6, 0x93, 0xb0])); + assert_eq!(Bitcoin::FullDecrement32.cmr(), Cmr::from_byte_array([0x62, 0x3d, 0x21, 0xd0, 0x46, 0x79, 0x22, 0xc0, 0x01, 0xc5, 0x65, 0x68, 0x61, 0xd0, 0xdd, 0xb8, 0x60, 0xc0, 0xc9, 0xa8, 0x6b, 0xd4, 0xcf, 0xdc, 0x37, 0xa1, 0x4c, 0x14, 0x06, 0xe3, 0x44, 0x6e])); + assert_eq!(Bitcoin::FullDecrement64.cmr(), Cmr::from_byte_array([0x14, 0x8b, 0x3e, 0xe1, 0xf7, 0x49, 0xea, 0x0b, 0xfb, 0xa7, 0x63, 0xbe, 0xe9, 0x99, 0xa2, 0x96, 0x77, 0x45, 0x6e, 0xae, 0x9e, 0xf5, 0x3a, 0xd8, 0x78, 0xf8, 0xb6, 0x14, 0x94, 0xf0, 0x8f, 0x00])); + assert_eq!(Bitcoin::FullDecrement8.cmr(), Cmr::from_byte_array([0xb4, 0x1a, 0xfe, 0x97, 0x4e, 0xaa, 0x11, 0x82, 0xac, 0x46, 0x10, 0x52, 0x1e, 0x28, 0x27, 0x81, 0x31, 0x8c, 0xe2, 0x95, 0xa3, 0xf2, 0x3f, 0x0b, 0x87, 0x6a, 0xe2, 0x69, 0x67, 0x3f, 0xb1, 0xdf])); + assert_eq!(Bitcoin::FullIncrement16.cmr(), Cmr::from_byte_array([0xa6, 0x8e, 0xcc, 0xdb, 0x9e, 0xad, 0x29, 0x26, 0xc3, 0xe4, 0x5b, 0x4b, 0xae, 0x43, 0x1c, 0xc4, 0x66, 0xd5, 0x8b, 0x8f, 0xac, 0xc9, 0x5a, 0x1b, 0x48, 0x44, 0xb9, 0x12, 0xdf, 0x56, 0x76, 0xdf])); + assert_eq!(Bitcoin::FullIncrement32.cmr(), Cmr::from_byte_array([0xd0, 0xeb, 0x0e, 0x94, 0xa5, 0xc2, 0x57, 0x13, 0xeb, 0x94, 0x4c, 0xad, 0x4d, 0x70, 0x1c, 0x6a, 0x96, 0x88, 0x09, 0xbc, 0x1a, 0xf9, 0x03, 0xfd, 0xb1, 0x1e, 0x6f, 0xad, 0x0b, 0xb3, 0x1b, 0x10])); + assert_eq!(Bitcoin::FullIncrement64.cmr(), Cmr::from_byte_array([0xc0, 0x03, 0xd2, 0xe9, 0xb0, 0xa5, 0x10, 0xc2, 0xdd, 0x78, 0x3e, 0x7d, 0x64, 0xeb, 0x87, 0xb3, 0x38, 0x55, 0xd3, 0x29, 0x90, 0xdf, 0xc2, 0x86, 0x26, 0x6e, 0x47, 0x8d, 0xa4, 0xe7, 0x47, 0x91])); + assert_eq!(Bitcoin::FullIncrement8.cmr(), Cmr::from_byte_array([0x0b, 0xea, 0x24, 0x29, 0x18, 0xf2, 0xdd, 0x17, 0x64, 0x77, 0x78, 0x11, 0xe4, 0x44, 0x28, 0x63, 0x93, 0x52, 0x25, 0xb0, 0xf8, 0xb2, 0x39, 0xc2, 0x37, 0x52, 0xf9, 0xd8, 0x53, 0x92, 0xa1, 0x39])); + assert_eq!(Bitcoin::FullLeftShift16_1.cmr(), Cmr::from_byte_array([0xb3, 0x66, 0xa8, 0x16, 0x92, 0x2f, 0xc4, 0x55, 0x01, 0x0f, 0xe8, 0x8a, 0x5f, 0x6a, 0x5c, 0xf2, 0xce, 0xa9, 0x17, 0xe1, 0x2b, 0xd1, 0x40, 0xae, 0x6d, 0x43, 0xb6, 0x41, 0xe5, 0x7f, 0x42, 0xb3])); + assert_eq!(Bitcoin::FullLeftShift16_2.cmr(), Cmr::from_byte_array([0x27, 0x96, 0x0d, 0x0d, 0xf2, 0xfb, 0xbc, 0x38, 0x99, 0x3d, 0x86, 0xfb, 0x8f, 0x0c, 0xd2, 0xc3, 0x43, 0x4e, 0xdb, 0x11, 0x04, 0x82, 0x13, 0xc1, 0x41, 0x18, 0x93, 0xca, 0x99, 0x33, 0xb2, 0xee])); + assert_eq!(Bitcoin::FullLeftShift16_4.cmr(), Cmr::from_byte_array([0x65, 0x51, 0x37, 0xbe, 0xc5, 0xc0, 0x36, 0x8f, 0x29, 0xbc, 0x99, 0x2c, 0x88, 0x42, 0x1a, 0x15, 0x98, 0x56, 0x40, 0x39, 0x7b, 0x61, 0x7f, 0xc4, 0x8d, 0x33, 0x21, 0x0f, 0xc0, 0x05, 0x3a, 0xd1])); + assert_eq!(Bitcoin::FullLeftShift16_8.cmr(), Cmr::from_byte_array([0x16, 0x8f, 0x57, 0x6a, 0xa5, 0x6e, 0xa4, 0x7e, 0x07, 0x06, 0x46, 0xe7, 0x88, 0x96, 0xbe, 0xb2, 0x49, 0x8b, 0x1a, 0xe6, 0xb1, 0xff, 0x9c, 0x78, 0x62, 0x70, 0xe9, 0x55, 0x65, 0x84, 0x19, 0x29])); + assert_eq!(Bitcoin::FullLeftShift32_1.cmr(), Cmr::from_byte_array([0xd7, 0xcd, 0x52, 0x24, 0x49, 0x11, 0x8e, 0x81, 0x00, 0xa7, 0x66, 0x2f, 0x4d, 0xf0, 0x39, 0xf8, 0xca, 0xeb, 0xf4, 0x33, 0xeb, 0x03, 0x9e, 0xdc, 0x42, 0xe8, 0x82, 0x37, 0x92, 0xcc, 0xea, 0x8a])); + assert_eq!(Bitcoin::FullLeftShift32_16.cmr(), Cmr::from_byte_array([0x8b, 0xd8, 0x0d, 0x4d, 0x2f, 0x8b, 0x22, 0x46, 0xc1, 0x23, 0x15, 0xc4, 0x28, 0x41, 0xb4, 0xe4, 0x0a, 0x71, 0xae, 0x76, 0x96, 0x6a, 0x08, 0x95, 0x4d, 0x66, 0x6b, 0x86, 0x32, 0x86, 0x74, 0x37])); + assert_eq!(Bitcoin::FullLeftShift32_2.cmr(), Cmr::from_byte_array([0x13, 0x06, 0x3d, 0x62, 0x93, 0x83, 0x29, 0x31, 0x1f, 0xb7, 0xda, 0xbb, 0x15, 0xc3, 0xfe, 0x58, 0xc2, 0x88, 0x76, 0x83, 0x00, 0x97, 0xec, 0xc6, 0xbf, 0xdd, 0x48, 0x0b, 0xe1, 0x98, 0x81, 0x46])); + assert_eq!(Bitcoin::FullLeftShift32_4.cmr(), Cmr::from_byte_array([0x25, 0xa1, 0xb5, 0xdd, 0xe5, 0xdb, 0x28, 0x4e, 0x8a, 0x88, 0x21, 0x26, 0x7c, 0x26, 0x53, 0x01, 0x14, 0xbb, 0xe6, 0x71, 0xcf, 0xaf, 0xb4, 0x4a, 0x60, 0xd7, 0x50, 0x27, 0x67, 0xdb, 0x78, 0x2e])); + assert_eq!(Bitcoin::FullLeftShift32_8.cmr(), Cmr::from_byte_array([0xce, 0x54, 0x70, 0xaf, 0xbf, 0xad, 0xbf, 0xba, 0x68, 0xf9, 0xb2, 0xd5, 0xb0, 0x64, 0x5a, 0x44, 0x08, 0xbe, 0x6f, 0x85, 0xa6, 0x9c, 0x7f, 0x09, 0xd0, 0x96, 0x45, 0x53, 0x68, 0x04, 0x87, 0x64])); + assert_eq!(Bitcoin::FullLeftShift64_1.cmr(), Cmr::from_byte_array([0x05, 0x1f, 0x36, 0x05, 0x86, 0xc3, 0x79, 0xac, 0x2c, 0xe3, 0x99, 0xcb, 0xeb, 0x68, 0x7e, 0x77, 0x53, 0xb1, 0x5d, 0x73, 0x03, 0xdd, 0x31, 0x6c, 0xbd, 0x12, 0x30, 0x12, 0x08, 0x7c, 0xc6, 0x6f])); + assert_eq!(Bitcoin::FullLeftShift64_16.cmr(), Cmr::from_byte_array([0xb2, 0x48, 0xbe, 0x4d, 0xfc, 0xb8, 0x8c, 0x5d, 0x89, 0xb1, 0xca, 0x61, 0x86, 0xa0, 0x41, 0xe9, 0x02, 0xb4, 0xc8, 0xa6, 0x2b, 0xb1, 0x6e, 0x09, 0xfe, 0x15, 0x61, 0x6e, 0x0e, 0x3a, 0xbd, 0x6d])); + assert_eq!(Bitcoin::FullLeftShift64_2.cmr(), Cmr::from_byte_array([0x34, 0xbb, 0x51, 0x62, 0x6b, 0x1d, 0x6b, 0x89, 0x7a, 0xbc, 0x15, 0x5d, 0x03, 0x4f, 0xe0, 0x66, 0x3a, 0x0e, 0xc0, 0xfd, 0x8f, 0x64, 0x0e, 0x5f, 0xe1, 0xbf, 0x3c, 0xb7, 0x67, 0x0a, 0x29, 0x25])); + assert_eq!(Bitcoin::FullLeftShift64_32.cmr(), Cmr::from_byte_array([0x9d, 0xac, 0x8c, 0xd7, 0xfd, 0x8b, 0x48, 0x88, 0x9e, 0x55, 0xc5, 0xaa, 0x12, 0xfe, 0x97, 0xb7, 0x29, 0xfe, 0xbc, 0x04, 0x1a, 0x9f, 0xff, 0x44, 0xc4, 0xd9, 0xb6, 0xf1, 0xe0, 0x7e, 0xb4, 0x42])); + assert_eq!(Bitcoin::FullLeftShift64_4.cmr(), Cmr::from_byte_array([0x94, 0xb7, 0x3d, 0xad, 0xc3, 0xee, 0xeb, 0x2e, 0xe4, 0xa4, 0xd4, 0x44, 0xdd, 0x0f, 0x72, 0xac, 0x30, 0x62, 0x01, 0xf2, 0xff, 0xcf, 0x71, 0x4b, 0x8e, 0xbe, 0x79, 0x82, 0x74, 0x4c, 0x0c, 0x7e])); + assert_eq!(Bitcoin::FullLeftShift64_8.cmr(), Cmr::from_byte_array([0x0e, 0xf7, 0x14, 0x75, 0x7e, 0xcf, 0x11, 0xca, 0x3c, 0x73, 0xce, 0x25, 0xef, 0x24, 0xee, 0x72, 0x95, 0xdd, 0x41, 0x71, 0xcc, 0x16, 0x28, 0x7f, 0xe6, 0x97, 0x1b, 0xd6, 0x7b, 0x47, 0x8b, 0x46])); + assert_eq!(Bitcoin::FullLeftShift8_1.cmr(), Cmr::from_byte_array([0x9b, 0xfa, 0x48, 0xb7, 0xad, 0x51, 0x00, 0x91, 0xba, 0x60, 0x85, 0x44, 0x62, 0xd8, 0x59, 0xef, 0xd1, 0xa2, 0xaa, 0x18, 0x73, 0x1b, 0x5f, 0x0c, 0x9e, 0x2b, 0xa4, 0xd8, 0x9d, 0x3a, 0xa8, 0x43])); + assert_eq!(Bitcoin::FullLeftShift8_2.cmr(), Cmr::from_byte_array([0x79, 0x7c, 0x20, 0x87, 0x01, 0xb2, 0xa4, 0xe1, 0x04, 0x9e, 0x83, 0xd6, 0x95, 0xf5, 0x54, 0xb9, 0x84, 0xf5, 0xdb, 0x28, 0x21, 0x52, 0x55, 0x58, 0x7c, 0x37, 0x34, 0x21, 0x51, 0xb7, 0x24, 0x1d])); + assert_eq!(Bitcoin::FullLeftShift8_4.cmr(), Cmr::from_byte_array([0x37, 0xbd, 0xac, 0x91, 0x53, 0x8f, 0x22, 0x19, 0xcb, 0x89, 0xdf, 0x0e, 0xf9, 0xf1, 0x97, 0xcd, 0x68, 0x03, 0x1f, 0x27, 0x67, 0xe8, 0x94, 0xf0, 0x01, 0xc2, 0x6f, 0xff, 0x5e, 0xeb, 0x58, 0xcd])); + assert_eq!(Bitcoin::FullMultiply16.cmr(), Cmr::from_byte_array([0x09, 0xba, 0xff, 0x92, 0x1e, 0x9f, 0x14, 0xd1, 0x20, 0x8d, 0x1d, 0xd8, 0x26, 0x4c, 0xf1, 0xf3, 0xb8, 0x54, 0xc9, 0xaf, 0x21, 0xf7, 0x78, 0xb2, 0xb5, 0x5a, 0x8a, 0x42, 0x6d, 0xfe, 0x89, 0x28])); + assert_eq!(Bitcoin::FullMultiply32.cmr(), Cmr::from_byte_array([0x10, 0xc4, 0xb8, 0xc4, 0xc0, 0xac, 0xd9, 0x73, 0x90, 0xf8, 0x5c, 0xb3, 0xf5, 0xff, 0xe3, 0x6a, 0x29, 0x20, 0x37, 0xc1, 0x90, 0xee, 0xba, 0xb3, 0xe9, 0x89, 0x34, 0xfe, 0x93, 0xb2, 0xed, 0x90])); + assert_eq!(Bitcoin::FullMultiply64.cmr(), Cmr::from_byte_array([0x2d, 0xb1, 0x9d, 0xba, 0x90, 0xef, 0x86, 0x7b, 0x5a, 0x3e, 0x91, 0x4b, 0x89, 0xfd, 0xa2, 0xda, 0x63, 0x7c, 0xa8, 0x0c, 0x42, 0x67, 0xe1, 0x98, 0x18, 0x37, 0xee, 0x3c, 0x6f, 0xe3, 0xda, 0xf5])); + assert_eq!(Bitcoin::FullMultiply8.cmr(), Cmr::from_byte_array([0x7f, 0x46, 0xee, 0x72, 0x84, 0xf3, 0x9e, 0x73, 0x42, 0x75, 0xa2, 0x50, 0x9a, 0x0b, 0x73, 0x7e, 0xd9, 0x39, 0x11, 0x5f, 0x02, 0x19, 0xa5, 0x74, 0xd4, 0x69, 0xcd, 0x30, 0xb8, 0x19, 0xef, 0xe3])); + assert_eq!(Bitcoin::FullRightShift16_1.cmr(), Cmr::from_byte_array([0x7e, 0xbe, 0x0c, 0x66, 0xc3, 0xc7, 0xdc, 0x16, 0xa5, 0x46, 0x9e, 0x91, 0x79, 0x09, 0x84, 0x17, 0xac, 0x5f, 0x20, 0xa3, 0x9c, 0xc4, 0x1a, 0xc3, 0x82, 0xfb, 0x1d, 0xbd, 0x98, 0xe8, 0xe3, 0x0f])); + assert_eq!(Bitcoin::FullRightShift16_2.cmr(), Cmr::from_byte_array([0x8d, 0xb0, 0xc2, 0x16, 0x19, 0xc6, 0x2d, 0x63, 0xd4, 0xc2, 0x7b, 0xfc, 0xf6, 0x47, 0xd7, 0x09, 0xce, 0x37, 0xbe, 0xd0, 0x57, 0x18, 0xe9, 0x3e, 0x45, 0x15, 0xe2, 0x9e, 0xf3, 0x73, 0x0c, 0xf4])); + assert_eq!(Bitcoin::FullRightShift16_4.cmr(), Cmr::from_byte_array([0x5c, 0x74, 0xb1, 0x32, 0x06, 0x31, 0x79, 0x17, 0xe0, 0x70, 0xe5, 0xfc, 0x1c, 0x82, 0xf4, 0xc5, 0xc2, 0xfb, 0xe9, 0xf3, 0x1b, 0x81, 0x29, 0x46, 0xba, 0x23, 0x0d, 0x8c, 0x94, 0xd4, 0x06, 0x16])); + assert_eq!(Bitcoin::FullRightShift16_8.cmr(), Cmr::from_byte_array([0x11, 0x05, 0x81, 0x8a, 0xc9, 0x48, 0xd7, 0xbb, 0x63, 0x47, 0x07, 0xe6, 0x9d, 0xbf, 0x1f, 0x67, 0x90, 0x58, 0xa1, 0x3d, 0x35, 0xfa, 0xc2, 0xa6, 0x4d, 0xf9, 0x72, 0x62, 0xf2, 0x42, 0xb6, 0x3b])); + assert_eq!(Bitcoin::FullRightShift32_1.cmr(), Cmr::from_byte_array([0x9b, 0x42, 0xc8, 0xf3, 0x3b, 0xc5, 0x75, 0x0e, 0x2a, 0x83, 0xaa, 0xdb, 0xf2, 0x9c, 0xc7, 0xfc, 0xb9, 0x50, 0xfe, 0x5a, 0x40, 0xaa, 0x0e, 0xc5, 0x24, 0x52, 0xe5, 0x33, 0xf8, 0x25, 0xa1, 0x15])); + assert_eq!(Bitcoin::FullRightShift32_16.cmr(), Cmr::from_byte_array([0x0a, 0xe5, 0x65, 0x9c, 0x2f, 0xa7, 0x57, 0x94, 0x78, 0xeb, 0xd5, 0x7c, 0x4c, 0x98, 0xae, 0xe7, 0x77, 0x01, 0x56, 0x45, 0xb2, 0x84, 0x31, 0x81, 0x64, 0xfc, 0xbd, 0x30, 0x65, 0xfc, 0x87, 0x3c])); + assert_eq!(Bitcoin::FullRightShift32_2.cmr(), Cmr::from_byte_array([0x57, 0xfb, 0x1c, 0x03, 0xc2, 0xeb, 0x17, 0xf6, 0x23, 0x47, 0x87, 0x34, 0xfd, 0x69, 0x37, 0xf9, 0xe3, 0xef, 0x02, 0x7c, 0x15, 0x60, 0x03, 0x8f, 0xa6, 0x06, 0x69, 0x05, 0x17, 0x89, 0xe3, 0x68])); + assert_eq!(Bitcoin::FullRightShift32_4.cmr(), Cmr::from_byte_array([0x85, 0x82, 0xcd, 0xfa, 0x74, 0xef, 0x46, 0x6b, 0x81, 0x27, 0xb1, 0x97, 0x88, 0x13, 0x45, 0x93, 0x99, 0x8e, 0x49, 0x69, 0x00, 0xb3, 0x8f, 0x0f, 0x3d, 0x37, 0x58, 0x18, 0xd6, 0x73, 0x45, 0x1e])); + assert_eq!(Bitcoin::FullRightShift32_8.cmr(), Cmr::from_byte_array([0xd9, 0x05, 0x93, 0x2e, 0xbf, 0xca, 0x2a, 0x38, 0x61, 0x9d, 0x80, 0x7e, 0x28, 0xff, 0x2e, 0x0d, 0x3b, 0xe0, 0x8a, 0x26, 0x06, 0x76, 0xd2, 0x57, 0xef, 0xa0, 0x40, 0xc3, 0x05, 0xaa, 0xdc, 0x33])); + assert_eq!(Bitcoin::FullRightShift64_1.cmr(), Cmr::from_byte_array([0x3c, 0x15, 0x20, 0x9b, 0x99, 0xd2, 0x84, 0x5e, 0x22, 0x5e, 0x14, 0xe1, 0xe9, 0xe5, 0xe6, 0xa4, 0x87, 0x8b, 0xc8, 0xce, 0xa3, 0xf9, 0xf3, 0x6b, 0x8b, 0x53, 0x5a, 0xc6, 0x83, 0xe2, 0x9d, 0x00])); + assert_eq!(Bitcoin::FullRightShift64_16.cmr(), Cmr::from_byte_array([0x02, 0x85, 0x25, 0x7b, 0x09, 0x0d, 0x8d, 0xa1, 0x28, 0xef, 0x64, 0xa8, 0x0c, 0x8d, 0x16, 0xfd, 0xc3, 0xbf, 0x5c, 0xe5, 0x0f, 0xcd, 0x56, 0xfe, 0xc5, 0xf9, 0x02, 0x55, 0xd9, 0xc8, 0xdf, 0x47])); + assert_eq!(Bitcoin::FullRightShift64_2.cmr(), Cmr::from_byte_array([0x7e, 0xc2, 0xdd, 0x65, 0xc9, 0xe0, 0x13, 0xe3, 0xe4, 0xce, 0x90, 0xfb, 0xeb, 0x3f, 0xb1, 0xc7, 0x8c, 0xcc, 0x5d, 0x2a, 0x7d, 0x26, 0xd8, 0xaf, 0x77, 0xf9, 0x9d, 0xe8, 0x4c, 0xf7, 0x29, 0x73])); + assert_eq!(Bitcoin::FullRightShift64_32.cmr(), Cmr::from_byte_array([0x35, 0x6f, 0x7d, 0xd4, 0x6b, 0xa3, 0x3f, 0x84, 0xb0, 0x66, 0x72, 0xfd, 0xe9, 0xa2, 0x97, 0x2e, 0x80, 0xf3, 0xea, 0x96, 0x5a, 0xe8, 0xbc, 0x0b, 0xff, 0x67, 0xaa, 0x2f, 0x69, 0xf1, 0x0b, 0x56])); + assert_eq!(Bitcoin::FullRightShift64_4.cmr(), Cmr::from_byte_array([0x05, 0x46, 0x4a, 0x33, 0x35, 0xaf, 0xbb, 0x09, 0xd0, 0x46, 0x82, 0x8a, 0x92, 0x2c, 0x4d, 0xa0, 0xec, 0xee, 0xb1, 0x09, 0x77, 0xe4, 0x68, 0x01, 0xc9, 0x3c, 0xdd, 0x66, 0x8f, 0x22, 0xee, 0x63])); + assert_eq!(Bitcoin::FullRightShift64_8.cmr(), Cmr::from_byte_array([0x70, 0x17, 0x2e, 0x1a, 0x69, 0x48, 0xbf, 0x40, 0x12, 0x0e, 0x68, 0xfb, 0x8b, 0x4b, 0x23, 0xbc, 0x35, 0x5a, 0x12, 0x00, 0x2c, 0xcc, 0x1d, 0xb6, 0x47, 0xc8, 0x9b, 0x12, 0xd1, 0x0e, 0xc5, 0x06])); + assert_eq!(Bitcoin::FullRightShift8_1.cmr(), Cmr::from_byte_array([0x56, 0x69, 0xdb, 0xfc, 0xc6, 0x33, 0xec, 0x0b, 0xdf, 0x59, 0xe2, 0x2f, 0x03, 0xed, 0x4b, 0x64, 0x19, 0x20, 0x95, 0xf5, 0xdf, 0x20, 0xff, 0xc1, 0x2d, 0xd9, 0x0d, 0x7c, 0xda, 0x11, 0x37, 0x4f])); + assert_eq!(Bitcoin::FullRightShift8_2.cmr(), Cmr::from_byte_array([0x1f, 0x94, 0x43, 0x61, 0x09, 0xdf, 0x52, 0xb3, 0x45, 0xfa, 0x3a, 0x89, 0xac, 0x2a, 0x49, 0xed, 0xc9, 0xd2, 0x85, 0xf2, 0x1f, 0x45, 0xed, 0x11, 0xd7, 0x75, 0xf7, 0xf7, 0xf3, 0x9d, 0x3e, 0x8f])); + assert_eq!(Bitcoin::FullRightShift8_4.cmr(), Cmr::from_byte_array([0x71, 0x46, 0x98, 0xa2, 0x76, 0x84, 0xb5, 0xba, 0xa6, 0xb6, 0x48, 0x0e, 0xe3, 0xb2, 0x57, 0xcb, 0xb7, 0xcd, 0xab, 0x74, 0x72, 0xf3, 0x71, 0xa6, 0x27, 0x06, 0x18, 0xc0, 0xab, 0x12, 0x90, 0x8b])); + assert_eq!(Bitcoin::FullSubtract16.cmr(), Cmr::from_byte_array([0x40, 0x09, 0x61, 0x52, 0xb5, 0x4e, 0x74, 0x25, 0x45, 0x55, 0xa6, 0x5d, 0xcc, 0xc6, 0x29, 0xdf, 0x57, 0xb9, 0x79, 0xc8, 0x47, 0x00, 0x54, 0x50, 0x36, 0xfe, 0x19, 0x0a, 0x6a, 0xf3, 0xd3, 0x8a])); + assert_eq!(Bitcoin::FullSubtract32.cmr(), Cmr::from_byte_array([0xe7, 0x93, 0x0d, 0x64, 0x35, 0xa9, 0x68, 0x0b, 0xef, 0xb4, 0x9d, 0xb7, 0xd8, 0x7c, 0x2f, 0x50, 0xaf, 0xd4, 0x6d, 0x98, 0x88, 0x0d, 0xed, 0x50, 0xe5, 0x05, 0x5f, 0xa3, 0x09, 0xe1, 0xaf, 0xca])); + assert_eq!(Bitcoin::FullSubtract64.cmr(), Cmr::from_byte_array([0xff, 0x28, 0x1d, 0xf8, 0xc4, 0x2a, 0x31, 0x59, 0xd9, 0xff, 0xa9, 0x25, 0x16, 0xca, 0x89, 0x3e, 0x23, 0xb0, 0xeb, 0x93, 0x8b, 0x4c, 0xb0, 0xb3, 0xf1, 0x34, 0x46, 0x8e, 0x9f, 0x4e, 0xbc, 0x46])); + assert_eq!(Bitcoin::FullSubtract8.cmr(), Cmr::from_byte_array([0x7e, 0x3d, 0xcf, 0xe4, 0x56, 0xae, 0x3c, 0x5c, 0x87, 0xde, 0xbf, 0x04, 0x71, 0x89, 0xc2, 0x74, 0x82, 0xa4, 0xff, 0x4e, 0x8c, 0xfd, 0x1f, 0x17, 0x30, 0xc8, 0x7d, 0x2b, 0x7b, 0xff, 0x73, 0xba])); + assert_eq!(Bitcoin::GejAdd.cmr(), Cmr::from_byte_array([0x45, 0xba, 0x7f, 0x3d, 0x1e, 0x1e, 0x6d, 0x34, 0x9f, 0xcf, 0x86, 0x98, 0x7b, 0x0e, 0x7f, 0x7a, 0xce, 0x66, 0x2e, 0x82, 0x20, 0x1d, 0x35, 0x02, 0x60, 0x45, 0x4e, 0x2f, 0xfe, 0xec, 0xb5, 0x4d])); + assert_eq!(Bitcoin::GejDouble.cmr(), Cmr::from_byte_array([0x23, 0xe9, 0x78, 0xf3, 0x41, 0x54, 0x11, 0x9b, 0xde, 0xfc, 0x5d, 0x13, 0xfc, 0xfd, 0x0a, 0x34, 0xa7, 0x5e, 0x37, 0x26, 0xd6, 0xcb, 0x25, 0x81, 0x33, 0x70, 0xad, 0x7d, 0x9d, 0xe5, 0xe1, 0x33])); + assert_eq!(Bitcoin::GejEquiv.cmr(), Cmr::from_byte_array([0xb9, 0x4b, 0x2a, 0xac, 0x73, 0xa6, 0x7f, 0x44, 0x95, 0x85, 0x99, 0x13, 0x4d, 0xe2, 0x30, 0x17, 0x9e, 0x9d, 0x6b, 0xb6, 0x47, 0xfd, 0x06, 0x11, 0x15, 0x8a, 0xab, 0xa7, 0x0b, 0x73, 0xe4, 0x00])); + assert_eq!(Bitcoin::GejGeAdd.cmr(), Cmr::from_byte_array([0xf1, 0x16, 0x0b, 0x6f, 0x5e, 0xe2, 0xc5, 0x82, 0xe4, 0x95, 0x66, 0xe6, 0xc3, 0x86, 0xb3, 0x80, 0x94, 0xab, 0xc1, 0xa7, 0x18, 0x2d, 0x33, 0xa1, 0x50, 0x1f, 0xa2, 0xaa, 0xf0, 0x0a, 0xf3, 0xea])); + assert_eq!(Bitcoin::GejGeAddEx.cmr(), Cmr::from_byte_array([0xc3, 0xd7, 0x34, 0x7f, 0xfe, 0x2d, 0x9c, 0x83, 0x9a, 0xac, 0x56, 0x7e, 0x29, 0x98, 0xe0, 0x16, 0xaf, 0x39, 0x4e, 0x2a, 0x19, 0x29, 0x31, 0x4b, 0x52, 0xe3, 0x1e, 0xed, 0x67, 0x8e, 0x30, 0xbf])); + assert_eq!(Bitcoin::GejGeEquiv.cmr(), Cmr::from_byte_array([0x27, 0xc2, 0x99, 0x69, 0x13, 0x9f, 0x8d, 0x57, 0xed, 0xc9, 0x89, 0x5c, 0x30, 0x40, 0x3d, 0xf0, 0x15, 0xc5, 0x0c, 0xe7, 0x21, 0xc3, 0x81, 0xfb, 0x19, 0x7c, 0x0c, 0x04, 0x03, 0xf1, 0xdb, 0x0c])); + assert_eq!(Bitcoin::GejInfinity.cmr(), Cmr::from_byte_array([0xaa, 0xfb, 0x93, 0x80, 0xd6, 0x1a, 0x7f, 0x14, 0x78, 0x46, 0x80, 0x6b, 0x2c, 0xc3, 0x74, 0xfb, 0xe8, 0x2d, 0xd1, 0xae, 0xd4, 0x85, 0xb9, 0x8a, 0x0f, 0x16, 0x4b, 0x3a, 0x54, 0xc2, 0xc0, 0xb0])); + assert_eq!(Bitcoin::GejIsInfinity.cmr(), Cmr::from_byte_array([0xdb, 0x49, 0x5f, 0xd1, 0x31, 0x42, 0xe9, 0xb3, 0x37, 0x63, 0xfc, 0x6d, 0x48, 0xd2, 0xfb, 0x0e, 0x71, 0xb0, 0xd9, 0xd9, 0x9b, 0xd7, 0x26, 0xf4, 0x7a, 0xd1, 0x3f, 0xc5, 0x56, 0x06, 0x70, 0xa2])); + assert_eq!(Bitcoin::GejIsOnCurve.cmr(), Cmr::from_byte_array([0xbf, 0x4c, 0xa1, 0x3f, 0xf2, 0x12, 0xe3, 0x4b, 0xf1, 0x7d, 0x90, 0xc1, 0x2e, 0x45, 0x3d, 0x08, 0xac, 0x7d, 0xaa, 0x4a, 0x47, 0xd5, 0x7e, 0x85, 0xb4, 0x3f, 0x2d, 0x43, 0x66, 0xd4, 0x3d, 0xda])); + assert_eq!(Bitcoin::GejNegate.cmr(), Cmr::from_byte_array([0x01, 0xbd, 0x1a, 0x35, 0x1f, 0xb8, 0x16, 0x4c, 0x81, 0x3d, 0x91, 0x6d, 0x07, 0x77, 0x49, 0x99, 0x6b, 0x7d, 0xb1, 0x18, 0xd3, 0x15, 0x86, 0xca, 0x9d, 0x75, 0xe7, 0x56, 0x35, 0x18, 0xf4, 0x54])); + assert_eq!(Bitcoin::GejNormalize.cmr(), Cmr::from_byte_array([0xec, 0x59, 0x7d, 0x17, 0xe2, 0xef, 0xb6, 0xd2, 0xa0, 0x02, 0xd5, 0x0e, 0x67, 0x75, 0x27, 0xd3, 0xd4, 0xa2, 0x90, 0x7a, 0x11, 0x9d, 0x68, 0xf1, 0x22, 0x84, 0xb9, 0xa1, 0xb0, 0xd2, 0x30, 0x3a])); + assert_eq!(Bitcoin::GejRescale.cmr(), Cmr::from_byte_array([0x29, 0x77, 0xd9, 0x53, 0xef, 0x7a, 0x11, 0x56, 0xce, 0xc6, 0xdb, 0x2d, 0xc2, 0x92, 0x54, 0x12, 0x75, 0xcb, 0xc8, 0x2f, 0xb8, 0x29, 0xfd, 0x67, 0x1b, 0x97, 0x2e, 0x89, 0xeb, 0xed, 0x0c, 0x24])); + assert_eq!(Bitcoin::GejXEquiv.cmr(), Cmr::from_byte_array([0xf9, 0xf1, 0x89, 0xfc, 0x00, 0xb6, 0x1f, 0x72, 0xf1, 0x0b, 0xaa, 0xa2, 0x1b, 0xcd, 0x88, 0xe5, 0xd2, 0x2e, 0x0a, 0xa9, 0xb7, 0x50, 0x9a, 0xe1, 0x62, 0xa1, 0x83, 0xa4, 0xb6, 0x64, 0xa4, 0xaf])); + assert_eq!(Bitcoin::GejYIsOdd.cmr(), Cmr::from_byte_array([0x9e, 0xb6, 0xe4, 0x53, 0x5f, 0xb6, 0x9b, 0xf6, 0x09, 0x91, 0x65, 0x99, 0xf1, 0x34, 0x5a, 0xd7, 0x73, 0x5d, 0xa3, 0xf3, 0x94, 0x8d, 0x06, 0x86, 0x90, 0x8e, 0x44, 0xf4, 0x5b, 0x2f, 0xf6, 0x0c])); + assert_eq!(Bitcoin::Generate.cmr(), Cmr::from_byte_array([0x14, 0x88, 0x85, 0xac, 0x73, 0x81, 0x31, 0x13, 0xc5, 0x23, 0xe8, 0x09, 0xbe, 0xa4, 0x7f, 0xfd, 0x8b, 0x1d, 0xaf, 0x37, 0x8d, 0x9d, 0xd5, 0x4b, 0xf9, 0x66, 0xcc, 0xb8, 0x83, 0xb1, 0xa9, 0x84])); + assert_eq!(Bitcoin::GeIsOnCurve.cmr(), Cmr::from_byte_array([0x7d, 0x44, 0x87, 0x19, 0xf5, 0xf9, 0x57, 0x2b, 0xf5, 0x40, 0x2e, 0x12, 0xd1, 0x93, 0xaf, 0xf6, 0x77, 0x48, 0x2d, 0x66, 0xff, 0x3d, 0xcf, 0x27, 0x48, 0xf2, 0x5c, 0x6b, 0x73, 0x77, 0x02, 0x8c])); + assert_eq!(Bitcoin::GeNegate.cmr(), Cmr::from_byte_array([0x3d, 0x2c, 0x8d, 0xe4, 0xc7, 0x01, 0x5f, 0xd3, 0x13, 0x26, 0x95, 0xfd, 0x66, 0xdf, 0xcf, 0x0f, 0x17, 0x78, 0xc7, 0x91, 0x85, 0x26, 0x8e, 0x9f, 0xae, 0x77, 0x89, 0xda, 0x53, 0x8e, 0xca, 0x59])); + assert_eq!(Bitcoin::HashToCurve.cmr(), Cmr::from_byte_array([0xef, 0x4f, 0x54, 0x8b, 0x3c, 0x6c, 0x75, 0x17, 0x5f, 0x2c, 0xe2, 0xd1, 0x99, 0x3b, 0x2d, 0x19, 0x9b, 0xeb, 0x16, 0xc0, 0xa1, 0x40, 0x17, 0x5c, 0x48, 0xa1, 0x27, 0x7e, 0xfc, 0x43, 0xa9, 0x9b])); + assert_eq!(Bitcoin::High1.cmr(), Cmr::from_byte_array([0xb1, 0x09, 0xcf, 0x1c, 0xce, 0x35, 0xf7, 0xe9, 0xb6, 0x49, 0x67, 0x1a, 0x9b, 0x45, 0xdb, 0xc2, 0x40, 0x99, 0xa7, 0x13, 0xae, 0xb9, 0xa8, 0x9c, 0xc4, 0xcf, 0x6e, 0xf6, 0xed, 0x8b, 0x30, 0x8b])); + assert_eq!(Bitcoin::High16.cmr(), Cmr::from_byte_array([0x03, 0x5d, 0xad, 0xd9, 0xd7, 0xbf, 0x74, 0x33, 0x64, 0x45, 0xe7, 0x1d, 0xdc, 0x4d, 0x82, 0x02, 0x24, 0xff, 0x7e, 0x38, 0xe0, 0xb8, 0xd5, 0x2b, 0xec, 0x97, 0x29, 0xb5, 0x72, 0xb5, 0x31, 0xf9])); + assert_eq!(Bitcoin::High32.cmr(), Cmr::from_byte_array([0xc5, 0xf1, 0xdf, 0x0d, 0x64, 0xa2, 0x73, 0x7a, 0x63, 0x1b, 0x3a, 0xae, 0x8f, 0x26, 0x0e, 0x8b, 0x8d, 0xc1, 0x95, 0x7b, 0xd0, 0x92, 0x91, 0x1b, 0x91, 0xd2, 0x07, 0x8a, 0xd2, 0x1e, 0x41, 0x8a])); + assert_eq!(Bitcoin::High64.cmr(), Cmr::from_byte_array([0xa3, 0x12, 0x63, 0x3e, 0x0a, 0x23, 0x05, 0xe6, 0x9b, 0x3f, 0x34, 0x1d, 0x91, 0xd6, 0x83, 0xdd, 0x94, 0x19, 0x6a, 0x2f, 0x90, 0x05, 0xc9, 0xb1, 0x87, 0x2a, 0x2c, 0x15, 0xad, 0x46, 0xcf, 0x17])); + assert_eq!(Bitcoin::High8.cmr(), Cmr::from_byte_array([0xcb, 0xd7, 0x8d, 0x50, 0xaf, 0x77, 0x99, 0x85, 0x5a, 0xdc, 0x49, 0x03, 0xdb, 0xbe, 0xfc, 0x13, 0x45, 0xd5, 0x14, 0x84, 0xf0, 0x3d, 0x3c, 0x75, 0x5c, 0xaa, 0xa5, 0xca, 0xa9, 0x7d, 0x4a, 0x14])); + assert_eq!(Bitcoin::Increment16.cmr(), Cmr::from_byte_array([0x86, 0x77, 0x49, 0x49, 0x39, 0xb2, 0x7b, 0x86, 0xcb, 0x5a, 0x8c, 0x7f, 0x81, 0x72, 0xad, 0x55, 0x50, 0x95, 0x31, 0xc9, 0xb0, 0xe1, 0x1e, 0x99, 0x75, 0x7e, 0x29, 0x6c, 0xc3, 0xc7, 0xc1, 0x92])); + assert_eq!(Bitcoin::Increment32.cmr(), Cmr::from_byte_array([0x6b, 0xdb, 0xab, 0x7c, 0xfc, 0x16, 0xc5, 0x03, 0x36, 0x3c, 0x2f, 0x07, 0x7e, 0x02, 0xc3, 0x35, 0xda, 0x40, 0x61, 0x75, 0xd1, 0x92, 0xfb, 0xef, 0x50, 0xc0, 0x7f, 0xc2, 0x79, 0xb3, 0xf4, 0x0c])); + assert_eq!(Bitcoin::Increment64.cmr(), Cmr::from_byte_array([0x20, 0xe7, 0x5e, 0x71, 0x7c, 0xb7, 0x6d, 0x46, 0x95, 0x56, 0x4f, 0x7c, 0x20, 0x22, 0x1b, 0x7a, 0x01, 0x43, 0x13, 0x87, 0x38, 0xf1, 0x51, 0xaa, 0x19, 0x5e, 0xb1, 0x70, 0xec, 0x13, 0xc0, 0x49])); + assert_eq!(Bitcoin::Increment8.cmr(), Cmr::from_byte_array([0x5f, 0x4e, 0x05, 0x6e, 0xf4, 0xed, 0x8d, 0x68, 0xbf, 0x91, 0x1f, 0xc5, 0xcb, 0x69, 0x03, 0x7e, 0xbf, 0x6c, 0x92, 0x21, 0x73, 0x43, 0xa8, 0x90, 0x5d, 0x38, 0xc4, 0x32, 0xc1, 0x83, 0x23, 0x3c])); + assert_eq!(Bitcoin::InputsHash.cmr(), Cmr::from_byte_array([0xab, 0xbf, 0xe1, 0xc7, 0xd1, 0x15, 0xc4, 0x19, 0x1f, 0x50, 0x48, 0x39, 0xf9, 0x8c, 0x3f, 0x20, 0x42, 0x2b, 0x84, 0xe7, 0xfa, 0x14, 0xda, 0x14, 0x02, 0x89, 0x6c, 0x4d, 0x98, 0xbf, 0xa8, 0xd8])); + assert_eq!(Bitcoin::InputAnnexesHash.cmr(), Cmr::from_byte_array([0x89, 0xb6, 0x02, 0x70, 0x44, 0x14, 0x1f, 0x20, 0x65, 0xb6, 0xf2, 0x36, 0xcf, 0xcc, 0x13, 0xb9, 0x68, 0x48, 0x5e, 0x00, 0x74, 0x6b, 0x78, 0x59, 0x28, 0x69, 0x03, 0xc6, 0x8c, 0x7f, 0x88, 0x0d])); + assert_eq!(Bitcoin::InputAnnexHash.cmr(), Cmr::from_byte_array([0x94, 0x5b, 0x14, 0x7e, 0x5f, 0x0e, 0xdb, 0x83, 0x2d, 0x62, 0x34, 0x8c, 0xae, 0xea, 0xc2, 0x24, 0x56, 0xee, 0xe9, 0x44, 0x65, 0x37, 0x6d, 0xbf, 0x59, 0x6b, 0x9d, 0x62, 0x98, 0x5b, 0x01, 0xb6])); + assert_eq!(Bitcoin::InputHash.cmr(), Cmr::from_byte_array([0x3a, 0xd2, 0x22, 0x31, 0xd6, 0xb9, 0xdf, 0xf6, 0xa0, 0xb4, 0xdb, 0xcf, 0xf0, 0x44, 0xe1, 0x1c, 0x08, 0x2e, 0x04, 0x68, 0x4e, 0x73, 0xce, 0x95, 0xc2, 0x05, 0xe0, 0xc4, 0x49, 0x6e, 0x5e, 0xca])); + assert_eq!(Bitcoin::InputOutpointsHash.cmr(), Cmr::from_byte_array([0x17, 0x59, 0xc6, 0xf4, 0x70, 0xb9, 0xab, 0xa6, 0x2a, 0x31, 0x79, 0x1e, 0xa0, 0x10, 0x56, 0xe3, 0x60, 0x8b, 0xdf, 0x22, 0xf5, 0xdd, 0x43, 0xbf, 0x7d, 0xb0, 0x0e, 0xa5, 0x82, 0x3f, 0x7c, 0xce])); + assert_eq!(Bitcoin::InputPrevOutpoint.cmr(), Cmr::from_byte_array([0x5d, 0x17, 0x12, 0x42, 0x09, 0xee, 0x05, 0x21, 0x24, 0xe5, 0x52, 0x38, 0xe0, 0xb6, 0xa6, 0xfe, 0x85, 0xa4, 0x86, 0x88, 0xc1, 0xe1, 0x5e, 0x61, 0x81, 0xde, 0x94, 0xf7, 0x8d, 0xb0, 0x40, 0x18])); + assert_eq!(Bitcoin::InputScriptsHash.cmr(), Cmr::from_byte_array([0xf1, 0x77, 0x67, 0x1d, 0x60, 0x96, 0x0e, 0x46, 0x3a, 0x9a, 0x8f, 0x7e, 0x1f, 0x52, 0x13, 0xaa, 0xba, 0x91, 0x22, 0xd2, 0xdb, 0x75, 0xfe, 0x91, 0xf8, 0xf1, 0xcf, 0x91, 0xbe, 0x00, 0x19, 0x07])); + assert_eq!(Bitcoin::InputScriptHash.cmr(), Cmr::from_byte_array([0x05, 0x62, 0x41, 0x2f, 0x02, 0x1d, 0xa4, 0x81, 0x9b, 0x01, 0x9c, 0x8c, 0xd8, 0x87, 0xd5, 0x30, 0x49, 0x2b, 0x9f, 0x94, 0x2c, 0x4e, 0xbf, 0x21, 0xae, 0x39, 0xed, 0x32, 0x33, 0x0d, 0x7c, 0xfe])); + assert_eq!(Bitcoin::InputScriptSigsHash.cmr(), Cmr::from_byte_array([0xe7, 0x29, 0xc5, 0xf5, 0x8a, 0x93, 0x89, 0x08, 0x1a, 0x5c, 0xa8, 0x45, 0xf7, 0x6c, 0xb9, 0x80, 0xf0, 0x85, 0x99, 0xce, 0xb3, 0xc7, 0xd7, 0xea, 0xe1, 0x14, 0x5b, 0x53, 0xa6, 0x0a, 0xe3, 0xd5])); + assert_eq!(Bitcoin::InputScriptSigHash.cmr(), Cmr::from_byte_array([0x1c, 0x7e, 0xfb, 0x37, 0xcb, 0xc4, 0xb9, 0x96, 0xd9, 0xb8, 0xc6, 0x17, 0x08, 0xe6, 0x65, 0x73, 0xce, 0x87, 0xc1, 0xf0, 0xaa, 0x05, 0x22, 0xd0, 0x65, 0xba, 0x90, 0x25, 0x05, 0x6e, 0x3f, 0x80])); + assert_eq!(Bitcoin::InputSequence.cmr(), Cmr::from_byte_array([0x5d, 0xd1, 0x7f, 0xe1, 0x55, 0x0f, 0x48, 0xf7, 0xba, 0xed, 0x4d, 0x06, 0x80, 0x08, 0xd4, 0xa1, 0xff, 0x98, 0xcb, 0xeb, 0xe2, 0x54, 0x1c, 0x5d, 0xc7, 0x7a, 0xc5, 0x3a, 0xd8, 0x3f, 0xa7, 0x79])); + assert_eq!(Bitcoin::InputSequencesHash.cmr(), Cmr::from_byte_array([0x55, 0x97, 0x3d, 0x64, 0x43, 0x45, 0x74, 0x72, 0x81, 0x37, 0x73, 0x64, 0xba, 0xd2, 0xa8, 0x0b, 0x75, 0x8f, 0x45, 0x66, 0x60, 0xc1, 0x8d, 0xe5, 0xc0, 0x1a, 0x38, 0x82, 0x07, 0x1d, 0x50, 0xe8])); + assert_eq!(Bitcoin::InputUtxosHash.cmr(), Cmr::from_byte_array([0xd6, 0xf9, 0x0c, 0xd1, 0x04, 0xe1, 0xa5, 0xc6, 0x1a, 0x4b, 0x50, 0x00, 0xad, 0x9a, 0xba, 0x8d, 0x43, 0x00, 0x4b, 0xf9, 0x43, 0xdf, 0x32, 0x5f, 0xa6, 0x36, 0xd1, 0xa2, 0x2b, 0xec, 0xa0, 0xcb])); + assert_eq!(Bitcoin::InputUtxoHash.cmr(), Cmr::from_byte_array([0x93, 0x1e, 0x4e, 0x95, 0xe0, 0xa6, 0x47, 0x60, 0x27, 0x6e, 0x91, 0xb5, 0xdc, 0x74, 0x67, 0x80, 0xd0, 0x69, 0x7d, 0x0a, 0xf5, 0xaa, 0xf5, 0xbb, 0xc8, 0x1d, 0xbe, 0xb3, 0x98, 0x59, 0x6a, 0xbb])); + assert_eq!(Bitcoin::InputValue.cmr(), Cmr::from_byte_array([0x7d, 0x3c, 0x3f, 0x95, 0x5b, 0x2c, 0xf0, 0xd0, 0xd1, 0x28, 0x0a, 0x1b, 0xb1, 0x20, 0x46, 0x92, 0x92, 0xd1, 0x32, 0x9c, 0x83, 0xa9, 0xc2, 0xff, 0x7e, 0x7e, 0x1e, 0xb3, 0xf6, 0x97, 0x83, 0xa3])); + assert_eq!(Bitcoin::InputValuesHash.cmr(), Cmr::from_byte_array([0x29, 0x83, 0x9e, 0xad, 0x0e, 0xb0, 0x3f, 0xe4, 0x65, 0x42, 0xe3, 0x6d, 0x71, 0xe9, 0xe6, 0xaf, 0xdf, 0x96, 0x93, 0x01, 0x53, 0x3d, 0x74, 0xee, 0x09, 0x9b, 0x12, 0x66, 0xa2, 0x50, 0x55, 0x2c])); + assert_eq!(Bitcoin::InternalKey.cmr(), Cmr::from_byte_array([0x37, 0x48, 0x36, 0x99, 0x28, 0x10, 0x02, 0x2f, 0x88, 0xe0, 0x14, 0x5b, 0xca, 0xd7, 0x7f, 0x4a, 0x84, 0x91, 0xfa, 0x80, 0x83, 0xcb, 0x51, 0xc3, 0x01, 0xfc, 0xf7, 0xa1, 0x34, 0x78, 0xc2, 0xcc])); + assert_eq!(Bitcoin::IsOne16.cmr(), Cmr::from_byte_array([0x1b, 0xd3, 0xa2, 0x53, 0xdb, 0x24, 0x3f, 0xca, 0x45, 0x53, 0x37, 0x99, 0xfe, 0x91, 0x48, 0x38, 0xc3, 0x8e, 0x38, 0x06, 0xb1, 0x2b, 0xd7, 0xe8, 0x5c, 0xa7, 0x12, 0x07, 0xa8, 0x84, 0x62, 0xb0])); + assert_eq!(Bitcoin::IsOne32.cmr(), Cmr::from_byte_array([0x78, 0xb1, 0xba, 0xe0, 0x99, 0xec, 0x9c, 0x59, 0xcb, 0xf4, 0x12, 0x62, 0x51, 0xc1, 0xe9, 0x67, 0x41, 0xb3, 0x50, 0xd5, 0x63, 0xbd, 0x74, 0xd5, 0x44, 0x18, 0xba, 0x78, 0xeb, 0xea, 0x25, 0xbf])); + assert_eq!(Bitcoin::IsOne64.cmr(), Cmr::from_byte_array([0x81, 0x7b, 0x95, 0xa5, 0x39, 0x5e, 0xfb, 0xec, 0xbb, 0x85, 0x15, 0xa5, 0x5b, 0x3f, 0xfe, 0x1a, 0x4d, 0x7b, 0xac, 0x6e, 0x23, 0xdb, 0xca, 0x54, 0xad, 0x60, 0x66, 0x66, 0x2f, 0x20, 0x2b, 0x93])); + assert_eq!(Bitcoin::IsOne8.cmr(), Cmr::from_byte_array([0xf6, 0x92, 0x54, 0x91, 0xd3, 0x4b, 0x37, 0x74, 0x2c, 0xb0, 0x8d, 0xec, 0x19, 0x3e, 0xe5, 0x12, 0x5f, 0x93, 0x3c, 0xad, 0xcc, 0x23, 0x2a, 0xed, 0xee, 0xdb, 0x57, 0x2d, 0x12, 0x60, 0xff, 0xd5])); + assert_eq!(Bitcoin::IsZero16.cmr(), Cmr::from_byte_array([0x1b, 0xa7, 0x21, 0x3b, 0x58, 0x8b, 0xe0, 0x92, 0xb4, 0x46, 0x59, 0x9c, 0x2a, 0x60, 0xff, 0x54, 0x67, 0x13, 0x6a, 0x79, 0x75, 0x99, 0x61, 0x0b, 0xd7, 0xa5, 0xf1, 0x78, 0x04, 0xe3, 0x2a, 0x2c])); + assert_eq!(Bitcoin::IsZero32.cmr(), Cmr::from_byte_array([0x5e, 0xbf, 0x14, 0x66, 0x93, 0xf0, 0xe2, 0xd2, 0xf9, 0x36, 0x1b, 0x47, 0x6d, 0xba, 0x34, 0x85, 0x8b, 0x83, 0x2d, 0x66, 0xfa, 0xcf, 0x71, 0x3b, 0xfb, 0x32, 0xc3, 0xbb, 0x8d, 0xb9, 0xee, 0xbf])); + assert_eq!(Bitcoin::IsZero64.cmr(), Cmr::from_byte_array([0x19, 0xab, 0x9a, 0xc0, 0xcf, 0x42, 0x66, 0x82, 0x19, 0xba, 0x6c, 0xb8, 0x97, 0xe4, 0x87, 0xfe, 0x36, 0x80, 0x93, 0x7f, 0xff, 0xa8, 0xd2, 0x03, 0x51, 0x1d, 0xb7, 0x5d, 0xbb, 0x10, 0xc7, 0xe5])); + assert_eq!(Bitcoin::IsZero8.cmr(), Cmr::from_byte_array([0x8e, 0xff, 0x62, 0x08, 0x44, 0x07, 0xe9, 0xaf, 0xd5, 0x40, 0xf3, 0x18, 0xf6, 0x6b, 0xcf, 0x31, 0xdf, 0x1d, 0x42, 0xa5, 0xc1, 0x61, 0xca, 0xe3, 0x5a, 0x29, 0x48, 0x18, 0x0c, 0xa2, 0xaa, 0x2e])); + assert_eq!(Bitcoin::Leftmost16_1.cmr(), Cmr::from_byte_array([0x5b, 0xff, 0x4c, 0xb5, 0x58, 0x76, 0x05, 0xd5, 0xfd, 0x05, 0x9d, 0x77, 0x33, 0x49, 0x0d, 0x7d, 0xd2, 0x2d, 0x27, 0x8b, 0x59, 0x9e, 0x06, 0xd3, 0xb5, 0xdb, 0x6d, 0x79, 0xf3, 0xc9, 0x23, 0xbd])); + assert_eq!(Bitcoin::Leftmost16_2.cmr(), Cmr::from_byte_array([0x53, 0x6d, 0xb4, 0x86, 0xb1, 0x22, 0x27, 0xe5, 0xb0, 0x9d, 0x6f, 0xeb, 0xd2, 0x77, 0x6b, 0x1a, 0xbb, 0xc6, 0x74, 0x99, 0x96, 0xaa, 0x78, 0x3e, 0xd7, 0xe5, 0x37, 0x44, 0x6b, 0xbf, 0x15, 0x1b])); + assert_eq!(Bitcoin::Leftmost16_4.cmr(), Cmr::from_byte_array([0xf2, 0x32, 0x13, 0x67, 0x49, 0x6d, 0x1a, 0x77, 0xee, 0xa0, 0x5e, 0x95, 0xe3, 0xb8, 0x07, 0xd3, 0xba, 0x5f, 0x05, 0x13, 0x6c, 0xe0, 0x91, 0x2a, 0xe7, 0x17, 0xc8, 0x3a, 0x02, 0x61, 0xb2, 0xe1])); + assert_eq!(Bitcoin::Leftmost16_8.cmr(), Cmr::from_byte_array([0x24, 0x14, 0x8e, 0xf3, 0x0a, 0xd4, 0x3e, 0xbe, 0xc5, 0x63, 0x72, 0x83, 0x22, 0xc3, 0xce, 0x11, 0x79, 0xae, 0xd7, 0xa7, 0x82, 0x16, 0xd7, 0x99, 0x88, 0x8b, 0xf1, 0x8b, 0x39, 0x57, 0x06, 0x71])); + assert_eq!(Bitcoin::Leftmost32_1.cmr(), Cmr::from_byte_array([0xb9, 0x2e, 0x15, 0xec, 0x5d, 0xa0, 0x7e, 0xe8, 0xed, 0x39, 0x7c, 0xb9, 0xf6, 0x0a, 0x4c, 0x5d, 0xa8, 0x38, 0x62, 0x93, 0x1a, 0x90, 0x73, 0x59, 0xd2, 0x7c, 0xae, 0xb6, 0x0e, 0x60, 0xef, 0x8a])); + assert_eq!(Bitcoin::Leftmost32_16.cmr(), Cmr::from_byte_array([0xad, 0xb0, 0x27, 0xb2, 0x06, 0x56, 0x73, 0x58, 0x53, 0x26, 0xc0, 0x1c, 0x3b, 0xe2, 0xfa, 0xeb, 0x38, 0x63, 0x49, 0xe2, 0x90, 0x09, 0xb6, 0x57, 0x6e, 0xe5, 0x3a, 0x85, 0x55, 0x12, 0xcc, 0x67])); + assert_eq!(Bitcoin::Leftmost32_2.cmr(), Cmr::from_byte_array([0xb7, 0x5b, 0x31, 0xc5, 0x59, 0x12, 0x3d, 0x3d, 0x63, 0x35, 0x98, 0x59, 0x32, 0xb8, 0xb1, 0xb2, 0x66, 0x4e, 0xe5, 0x97, 0xaf, 0xb1, 0x5f, 0xd1, 0xa4, 0x99, 0xd0, 0x07, 0xcf, 0xf2, 0x75, 0x5c])); + assert_eq!(Bitcoin::Leftmost32_4.cmr(), Cmr::from_byte_array([0xcb, 0x75, 0x7e, 0x47, 0x1e, 0x9d, 0x9a, 0x40, 0x77, 0x1d, 0xd1, 0xcf, 0x3c, 0x1b, 0xf5, 0xd2, 0x3c, 0x17, 0xed, 0x68, 0xcd, 0xbd, 0xb2, 0x2d, 0xad, 0xa1, 0x7a, 0x73, 0xa7, 0xb4, 0x07, 0xb2])); + assert_eq!(Bitcoin::Leftmost32_8.cmr(), Cmr::from_byte_array([0xbf, 0xc5, 0x34, 0xb4, 0x9e, 0x06, 0x00, 0x6e, 0x19, 0xf3, 0xb6, 0x8e, 0x0a, 0x02, 0x39, 0x1c, 0x14, 0x9f, 0x9a, 0x34, 0xf4, 0x3e, 0xe3, 0x6b, 0x9f, 0x1d, 0x79, 0xa7, 0x9c, 0x9a, 0x9e, 0x4d])); + assert_eq!(Bitcoin::Leftmost64_1.cmr(), Cmr::from_byte_array([0x1b, 0x1d, 0x4e, 0x92, 0x38, 0x4b, 0x8b, 0x15, 0x9b, 0xa0, 0xd8, 0x06, 0x55, 0x8b, 0x54, 0x94, 0xe3, 0x61, 0x4e, 0xed, 0xe0, 0x3c, 0x94, 0x6c, 0xea, 0xf1, 0x41, 0xf3, 0x6f, 0x01, 0xc7, 0x9b])); + assert_eq!(Bitcoin::Leftmost64_16.cmr(), Cmr::from_byte_array([0x0d, 0xeb, 0xdc, 0x1a, 0xa0, 0x43, 0x30, 0x34, 0x42, 0xe1, 0x8f, 0xe0, 0x3d, 0x8a, 0x99, 0xd2, 0xbe, 0x6b, 0xb8, 0xa8, 0x69, 0x1a, 0xba, 0x19, 0x56, 0x62, 0x59, 0xe3, 0x67, 0x60, 0xf7, 0xf9])); + assert_eq!(Bitcoin::Leftmost64_2.cmr(), Cmr::from_byte_array([0x83, 0x9e, 0xcf, 0xa3, 0x18, 0x70, 0x5c, 0x25, 0x3d, 0x0c, 0x52, 0xff, 0x27, 0xb9, 0x04, 0x64, 0x92, 0x3d, 0x8c, 0x0e, 0x55, 0xa8, 0x2c, 0x0d, 0x16, 0x24, 0x02, 0x39, 0x7f, 0x36, 0x53, 0x78])); + assert_eq!(Bitcoin::Leftmost64_32.cmr(), Cmr::from_byte_array([0x92, 0x91, 0x97, 0xa9, 0x64, 0x28, 0x61, 0xa7, 0x7b, 0xd6, 0x62, 0x58, 0x05, 0x11, 0x97, 0xbe, 0x86, 0xff, 0x08, 0xe6, 0x28, 0xe3, 0x0f, 0x7e, 0xfc, 0xbd, 0x2c, 0x4d, 0xfe, 0xcf, 0x9b, 0xdd])); + assert_eq!(Bitcoin::Leftmost64_4.cmr(), Cmr::from_byte_array([0x02, 0xbd, 0x16, 0x45, 0xd5, 0x75, 0xf0, 0x4b, 0x3c, 0xbb, 0xaa, 0x6d, 0x8c, 0xa9, 0x86, 0xef, 0x1c, 0x8c, 0xd0, 0xff, 0xe1, 0x65, 0x89, 0x03, 0x93, 0x9d, 0xb7, 0x64, 0x56, 0x2a, 0x26, 0x47])); + assert_eq!(Bitcoin::Leftmost64_8.cmr(), Cmr::from_byte_array([0x35, 0x58, 0xb3, 0x1b, 0x3b, 0x6e, 0x8f, 0x9a, 0x28, 0x8f, 0xdc, 0x72, 0xf2, 0x46, 0x02, 0xbe, 0x05, 0x58, 0x19, 0x10, 0x71, 0xa5, 0x4a, 0x99, 0xfa, 0x03, 0xa0, 0x25, 0x34, 0xf8, 0x80, 0x05])); + assert_eq!(Bitcoin::Leftmost8_1.cmr(), Cmr::from_byte_array([0x28, 0x65, 0xef, 0xd4, 0x29, 0x83, 0xcb, 0xe3, 0xf8, 0x16, 0x37, 0x3a, 0xb8, 0xa8, 0x82, 0xf1, 0x83, 0x17, 0x19, 0x4d, 0xc1, 0xab, 0xa3, 0x8d, 0xa0, 0x30, 0x4b, 0x8c, 0x14, 0x4b, 0x1d, 0xa4])); + assert_eq!(Bitcoin::Leftmost8_2.cmr(), Cmr::from_byte_array([0x51, 0x96, 0x4c, 0xb0, 0x74, 0x05, 0xa8, 0xd2, 0x3d, 0x21, 0x87, 0x74, 0x1a, 0x9e, 0xd3, 0x04, 0xbc, 0xb4, 0x69, 0xd9, 0xac, 0x9f, 0x5d, 0x92, 0x55, 0x82, 0x5c, 0xfd, 0xa3, 0xda, 0x07, 0xc0])); + assert_eq!(Bitcoin::Leftmost8_4.cmr(), Cmr::from_byte_array([0x88, 0x3c, 0x94, 0xf8, 0xa2, 0x6c, 0xda, 0xb7, 0xbc, 0x5c, 0xd6, 0x31, 0xe5, 0x22, 0x55, 0xa8, 0x5e, 0xf6, 0xe0, 0x70, 0x76, 0x64, 0x57, 0xf6, 0x32, 0x1e, 0x2c, 0xcb, 0x11, 0x9d, 0x9b, 0x2b])); + assert_eq!(Bitcoin::LeftExtend16_32.cmr(), Cmr::from_byte_array([0x28, 0x99, 0x97, 0xfb, 0xa1, 0xfa, 0xe7, 0xec, 0x1c, 0x45, 0x31, 0xc5, 0x0b, 0xbf, 0x86, 0x71, 0xb8, 0x97, 0x13, 0x9b, 0xdd, 0x3a, 0xad, 0x97, 0xa3, 0x76, 0x39, 0x57, 0x4a, 0x04, 0x7c, 0x80])); + assert_eq!(Bitcoin::LeftExtend16_64.cmr(), Cmr::from_byte_array([0x5d, 0xff, 0x21, 0xf6, 0xe6, 0x12, 0x47, 0x75, 0xc5, 0x78, 0xea, 0xf4, 0x85, 0x5c, 0x0b, 0x01, 0x64, 0xf7, 0x87, 0x9b, 0x17, 0x60, 0xf9, 0x02, 0x7c, 0xb5, 0x0f, 0x7b, 0x5a, 0xcb, 0x49, 0x18])); + assert_eq!(Bitcoin::LeftExtend1_16.cmr(), Cmr::from_byte_array([0x8c, 0x87, 0xd7, 0x56, 0xd1, 0x4b, 0xd3, 0xd9, 0xa7, 0x86, 0x90, 0x81, 0x29, 0x12, 0xb8, 0x94, 0x29, 0xc0, 0x17, 0x1a, 0x41, 0x10, 0x3a, 0x58, 0xc6, 0xe9, 0xf2, 0x25, 0x14, 0x1a, 0x02, 0x22])); + assert_eq!(Bitcoin::LeftExtend1_32.cmr(), Cmr::from_byte_array([0xc8, 0xf1, 0x54, 0xd4, 0x6d, 0x2e, 0x78, 0x95, 0xda, 0x1b, 0x33, 0xc2, 0xb3, 0x15, 0xe6, 0xd4, 0xd4, 0x85, 0x1d, 0xde, 0xe2, 0x8a, 0xef, 0x8b, 0x70, 0x70, 0x90, 0x61, 0x6b, 0xc7, 0xee, 0xa0])); + assert_eq!(Bitcoin::LeftExtend1_64.cmr(), Cmr::from_byte_array([0xa3, 0x40, 0x4d, 0xf6, 0x8c, 0xc9, 0x20, 0x75, 0x4c, 0x6e, 0x18, 0x47, 0x20, 0x7d, 0xb3, 0x84, 0x5d, 0x11, 0xc7, 0x49, 0x09, 0xd0, 0x7c, 0xa8, 0x2a, 0xd1, 0xf1, 0xcc, 0x67, 0xbf, 0x3a, 0x9b])); + assert_eq!(Bitcoin::LeftExtend1_8.cmr(), Cmr::from_byte_array([0x3b, 0xca, 0x33, 0x97, 0xb8, 0x3c, 0x27, 0xf3, 0x63, 0x16, 0xf8, 0xb8, 0xb3, 0x03, 0x35, 0x0a, 0xfe, 0x8b, 0xa0, 0x07, 0x8f, 0x77, 0xf1, 0xd4, 0x2a, 0x9b, 0x78, 0x92, 0xb2, 0xa4, 0xdb, 0xee])); + assert_eq!(Bitcoin::LeftExtend32_64.cmr(), Cmr::from_byte_array([0x42, 0xcb, 0xeb, 0x01, 0xfe, 0x7a, 0x3a, 0x6d, 0xd3, 0x31, 0x1d, 0xb3, 0x36, 0x5f, 0x91, 0xe5, 0xc1, 0x18, 0xc7, 0xe4, 0x1f, 0x03, 0xaa, 0xe7, 0xb2, 0x83, 0xde, 0x6b, 0xb9, 0x05, 0x3e, 0x6b])); + assert_eq!(Bitcoin::LeftExtend8_16.cmr(), Cmr::from_byte_array([0x9a, 0x57, 0xc9, 0x6a, 0xf5, 0x71, 0x48, 0x96, 0xb7, 0x24, 0xde, 0x45, 0xeb, 0x9f, 0xe9, 0x7d, 0x73, 0x69, 0x7d, 0xe6, 0x2e, 0x8d, 0xad, 0x78, 0x71, 0xeb, 0x58, 0xf5, 0x81, 0xa0, 0x11, 0xbb])); + assert_eq!(Bitcoin::LeftExtend8_32.cmr(), Cmr::from_byte_array([0xd6, 0x24, 0xbd, 0x40, 0x40, 0x76, 0x3c, 0xb1, 0x3c, 0xca, 0xd4, 0x98, 0xf5, 0x3d, 0x38, 0xc1, 0x12, 0xf1, 0x92, 0x95, 0x68, 0x26, 0xda, 0xfe, 0xc9, 0xac, 0x91, 0x65, 0x79, 0x2b, 0x34, 0x7a])); + assert_eq!(Bitcoin::LeftExtend8_64.cmr(), Cmr::from_byte_array([0x9d, 0xc4, 0xa2, 0x05, 0x4d, 0x5d, 0x26, 0x34, 0x2a, 0xc5, 0x90, 0xb6, 0x67, 0xf1, 0xb0, 0x1d, 0xf5, 0x4f, 0xd0, 0xcd, 0xaa, 0x40, 0x5e, 0xf8, 0xcb, 0xb7, 0x6f, 0xd8, 0xf9, 0xb0, 0x0e, 0xe5])); + assert_eq!(Bitcoin::LeftPadHigh16_32.cmr(), Cmr::from_byte_array([0x05, 0x45, 0xc4, 0xb5, 0x8f, 0x00, 0x4a, 0x21, 0xe7, 0xf1, 0x29, 0xa4, 0xc0, 0x51, 0x89, 0x97, 0x17, 0x14, 0xca, 0xa2, 0xd9, 0x1d, 0x1d, 0xfd, 0x5f, 0xad, 0x3e, 0x63, 0x24, 0x49, 0x94, 0x28])); + assert_eq!(Bitcoin::LeftPadHigh16_64.cmr(), Cmr::from_byte_array([0x1c, 0x61, 0xd0, 0x3d, 0x49, 0x3b, 0xbd, 0x05, 0x82, 0x22, 0x59, 0xd1, 0x73, 0x0a, 0x8d, 0x7a, 0x5f, 0x55, 0xb0, 0xba, 0x2a, 0x93, 0x91, 0xa6, 0xc8, 0x88, 0x1e, 0xb4, 0x75, 0x04, 0xaf, 0xfd])); + assert_eq!(Bitcoin::LeftPadHigh1_16.cmr(), Cmr::from_byte_array([0x56, 0xfd, 0xf5, 0x4f, 0x1f, 0xcd, 0x19, 0x82, 0x5e, 0x7c, 0x3b, 0x79, 0x06, 0x15, 0xc1, 0xd3, 0xfe, 0x82, 0x88, 0x6c, 0x74, 0x7b, 0xc4, 0x87, 0x59, 0x87, 0xf5, 0x05, 0x16, 0x94, 0x5f, 0xb3])); + assert_eq!(Bitcoin::LeftPadHigh1_32.cmr(), Cmr::from_byte_array([0xdb, 0x33, 0x05, 0x9a, 0xbe, 0x2d, 0x43, 0x2d, 0x67, 0xf4, 0x2b, 0x1e, 0x94, 0x27, 0x56, 0xdc, 0xa6, 0xcd, 0xe6, 0x37, 0x85, 0xe5, 0xbd, 0x43, 0x0d, 0xc8, 0xf4, 0xae, 0xfc, 0x31, 0xb8, 0xdf])); + assert_eq!(Bitcoin::LeftPadHigh1_64.cmr(), Cmr::from_byte_array([0x1d, 0x66, 0x9c, 0x1f, 0xa5, 0xfd, 0x3e, 0xf6, 0x6e, 0xb4, 0xae, 0xf6, 0x18, 0x6e, 0x3e, 0xc1, 0x36, 0xee, 0x75, 0x84, 0x10, 0xdf, 0x3e, 0xde, 0xbb, 0x31, 0xbf, 0x26, 0xd4, 0x56, 0x20, 0x51])); + assert_eq!(Bitcoin::LeftPadHigh1_8.cmr(), Cmr::from_byte_array([0x9a, 0x1b, 0xad, 0x3d, 0x8a, 0xb9, 0x00, 0x30, 0x3d, 0xa2, 0x02, 0xf0, 0xf4, 0x49, 0xf0, 0xb7, 0xe6, 0x79, 0x5c, 0x2a, 0x7c, 0x12, 0x17, 0x18, 0x80, 0x0a, 0xc4, 0x0c, 0x87, 0xd8, 0x27, 0x29])); + assert_eq!(Bitcoin::LeftPadHigh32_64.cmr(), Cmr::from_byte_array([0x39, 0x20, 0xcc, 0x4b, 0x33, 0xba, 0xf7, 0xef, 0xa5, 0xca, 0xf9, 0xe7, 0x80, 0x01, 0x44, 0x67, 0x06, 0xf6, 0xe4, 0xe8, 0x26, 0x56, 0x74, 0x05, 0x7e, 0xed, 0x87, 0x17, 0x78, 0x08, 0x9e, 0x94])); + assert_eq!(Bitcoin::LeftPadHigh8_16.cmr(), Cmr::from_byte_array([0x75, 0x2e, 0x29, 0xf2, 0xfe, 0x2b, 0xec, 0xc3, 0xf6, 0x62, 0x90, 0xfe, 0x44, 0xe1, 0xae, 0xb3, 0x78, 0x41, 0x80, 0xdd, 0x90, 0x5e, 0x19, 0x62, 0x4e, 0x19, 0x5f, 0x21, 0x6c, 0x07, 0xc5, 0x7c])); + assert_eq!(Bitcoin::LeftPadHigh8_32.cmr(), Cmr::from_byte_array([0xbe, 0xe8, 0x8f, 0x1c, 0x8c, 0x30, 0x63, 0x4c, 0x6e, 0x95, 0xca, 0xcc, 0x0e, 0x9a, 0xdd, 0x49, 0x41, 0x32, 0x21, 0xfd, 0xab, 0xbd, 0x8d, 0x4c, 0x0a, 0xcc, 0xf1, 0xca, 0xe2, 0xd2, 0xa7, 0x78])); + assert_eq!(Bitcoin::LeftPadHigh8_64.cmr(), Cmr::from_byte_array([0x39, 0x23, 0x87, 0xf6, 0xdc, 0x04, 0xbf, 0xc5, 0x4d, 0xd4, 0xa2, 0x81, 0x19, 0xc8, 0x1d, 0x15, 0xd7, 0xa5, 0x80, 0x9b, 0xbf, 0x62, 0xfc, 0xc2, 0x7d, 0xc5, 0x5c, 0xf8, 0x2e, 0x9e, 0x5e, 0xe6])); + assert_eq!(Bitcoin::LeftPadLow16_32.cmr(), Cmr::from_byte_array([0x4f, 0xfd, 0x6c, 0xb3, 0x40, 0x23, 0x05, 0x82, 0x1d, 0xd8, 0x99, 0x70, 0xd7, 0x22, 0xd1, 0xc1, 0x3f, 0x1f, 0xf7, 0x73, 0x9f, 0xd5, 0xf3, 0x4b, 0xa1, 0x6c, 0x73, 0x65, 0x3b, 0x04, 0x47, 0x18])); + assert_eq!(Bitcoin::LeftPadLow16_64.cmr(), Cmr::from_byte_array([0xbe, 0x3e, 0xb8, 0x5c, 0x5f, 0x19, 0x91, 0x53, 0xfb, 0x1c, 0x46, 0x13, 0x5c, 0x04, 0xfa, 0xcf, 0xdb, 0xc6, 0xf1, 0xb7, 0x8c, 0x2b, 0xb7, 0xae, 0x75, 0xf1, 0x55, 0xbc, 0x3e, 0xa0, 0x8a, 0x8b])); + assert_eq!(Bitcoin::LeftPadLow1_16.cmr(), Cmr::from_byte_array([0xdd, 0xd0, 0x15, 0x3e, 0xf3, 0x12, 0xf2, 0x8d, 0x64, 0x2c, 0xd9, 0x4c, 0xb3, 0x6f, 0x32, 0x97, 0x75, 0xb0, 0x0d, 0xa8, 0x8f, 0xcc, 0xc4, 0xce, 0xa1, 0xba, 0xe8, 0x9b, 0xad, 0x13, 0xbe, 0x6b])); + assert_eq!(Bitcoin::LeftPadLow1_32.cmr(), Cmr::from_byte_array([0xbc, 0x9d, 0x31, 0x14, 0x35, 0x46, 0x7b, 0xc0, 0x8b, 0x10, 0x08, 0xe5, 0x47, 0xaa, 0x7a, 0x07, 0xe8, 0x3b, 0x15, 0x14, 0x68, 0x61, 0xa9, 0xe9, 0xb5, 0x41, 0x3b, 0xe3, 0x1b, 0x82, 0xb6, 0xb5])); + assert_eq!(Bitcoin::LeftPadLow1_64.cmr(), Cmr::from_byte_array([0x8b, 0xc6, 0x2f, 0x93, 0x60, 0x89, 0x4e, 0x48, 0xa4, 0x73, 0x2c, 0x95, 0x76, 0x9c, 0x8f, 0xaa, 0xe9, 0x56, 0x8f, 0x9d, 0xe8, 0xe8, 0xa2, 0x00, 0x83, 0x6b, 0xd4, 0xe5, 0x0b, 0x02, 0xcd, 0x84])); + assert_eq!(Bitcoin::LeftPadLow1_8.cmr(), Cmr::from_byte_array([0xf6, 0x6c, 0xd7, 0xa4, 0x2b, 0x32, 0x0f, 0x97, 0xc1, 0x9f, 0x2d, 0x54, 0x16, 0xcd, 0xe0, 0x87, 0x25, 0x3a, 0x27, 0x91, 0x29, 0x65, 0xd5, 0x5b, 0x65, 0x71, 0x2a, 0xd8, 0x09, 0xb8, 0x3c, 0xfd])); + assert_eq!(Bitcoin::LeftPadLow32_64.cmr(), Cmr::from_byte_array([0xa3, 0x3a, 0x07, 0xb9, 0xbc, 0xf9, 0x45, 0xf6, 0x4f, 0x07, 0x2b, 0x8b, 0x9c, 0x91, 0x48, 0x39, 0xa5, 0x85, 0xbf, 0xa9, 0xf3, 0x42, 0x5b, 0x14, 0x77, 0x54, 0xab, 0x55, 0xa8, 0xba, 0x6c, 0x0f])); + assert_eq!(Bitcoin::LeftPadLow8_16.cmr(), Cmr::from_byte_array([0x2a, 0x51, 0x6a, 0x79, 0x3f, 0x97, 0xc4, 0x5f, 0xea, 0xeb, 0xb1, 0xcc, 0x96, 0x1a, 0x15, 0x6d, 0x80, 0x35, 0x49, 0x28, 0x79, 0x78, 0x9d, 0x6e, 0xdc, 0x9b, 0x57, 0xe7, 0x2f, 0x11, 0xe5, 0xb5])); + assert_eq!(Bitcoin::LeftPadLow8_32.cmr(), Cmr::from_byte_array([0x1a, 0xa2, 0xe4, 0xd0, 0x4b, 0xd6, 0x90, 0x55, 0x12, 0x3d, 0xd6, 0xaa, 0xfe, 0x27, 0xf5, 0xf7, 0xf4, 0x7c, 0x3b, 0x30, 0x90, 0xc3, 0xa8, 0x27, 0x29, 0x73, 0xfe, 0x2f, 0x75, 0x16, 0x5a, 0x5d])); + assert_eq!(Bitcoin::LeftPadLow8_64.cmr(), Cmr::from_byte_array([0xb6, 0x52, 0xe0, 0xae, 0xdd, 0x0f, 0x4f, 0x66, 0xf6, 0xa1, 0xcd, 0x4b, 0xeb, 0xf8, 0x75, 0xff, 0x7b, 0xbb, 0x2d, 0xd9, 0x9b, 0x06, 0x5b, 0x2d, 0xb5, 0xb5, 0xb5, 0x90, 0x53, 0x61, 0x61, 0x4d])); + assert_eq!(Bitcoin::LeftRotate16.cmr(), Cmr::from_byte_array([0x8a, 0x12, 0xff, 0x6a, 0x4b, 0xf2, 0x37, 0x15, 0xdd, 0x3b, 0x76, 0x6b, 0x99, 0x67, 0xc7, 0x15, 0x8b, 0xf3, 0xed, 0x74, 0xb3, 0xdc, 0xe7, 0x30, 0xaf, 0xfc, 0xf4, 0x66, 0x16, 0x47, 0x8e, 0xcb])); + assert_eq!(Bitcoin::LeftRotate32.cmr(), Cmr::from_byte_array([0x2f, 0xcb, 0x52, 0x17, 0x2f, 0xd4, 0x9c, 0x36, 0x21, 0x7d, 0xea, 0xe0, 0xc2, 0x37, 0x14, 0x32, 0x1f, 0x69, 0xf5, 0xf1, 0x3f, 0x6e, 0x94, 0xb2, 0xbd, 0xfe, 0x4b, 0x74, 0x88, 0x69, 0x7f, 0xd5])); + assert_eq!(Bitcoin::LeftRotate64.cmr(), Cmr::from_byte_array([0x72, 0xcc, 0xd6, 0xc4, 0xe5, 0xfd, 0xf6, 0x8a, 0xd3, 0x3b, 0x6d, 0x58, 0xfb, 0x37, 0x2b, 0xe4, 0xf1, 0xb8, 0x0e, 0xef, 0x70, 0x1f, 0x9d, 0xb7, 0xe5, 0xed, 0x85, 0x9b, 0x96, 0xb3, 0x62, 0x09])); + assert_eq!(Bitcoin::LeftRotate8.cmr(), Cmr::from_byte_array([0x1a, 0xae, 0xc9, 0xf3, 0xb7, 0x5d, 0x89, 0xf8, 0x2a, 0x64, 0x98, 0x45, 0x8c, 0x44, 0x83, 0xcb, 0x9a, 0x78, 0x44, 0x89, 0x05, 0xf3, 0xbb, 0x39, 0xfc, 0x08, 0x3f, 0x14, 0xdd, 0xcc, 0xdc, 0x9b])); + assert_eq!(Bitcoin::LeftShift16.cmr(), Cmr::from_byte_array([0x37, 0xac, 0x63, 0x87, 0x21, 0xab, 0x09, 0x7a, 0x96, 0x02, 0xba, 0x4d, 0xc9, 0x2e, 0x19, 0xb5, 0xa1, 0x85, 0xb2, 0x32, 0x9f, 0x1a, 0xa6, 0x00, 0xcb, 0x9c, 0x15, 0x61, 0x5a, 0x00, 0x81, 0xf8])); + assert_eq!(Bitcoin::LeftShift32.cmr(), Cmr::from_byte_array([0x8e, 0x3c, 0x47, 0x3b, 0x28, 0x67, 0xf1, 0x54, 0x73, 0xb3, 0x63, 0x2d, 0xbf, 0xdd, 0x99, 0x77, 0x55, 0x51, 0xef, 0x5f, 0x9d, 0xba, 0x47, 0x5e, 0x9c, 0xf0, 0x90, 0x75, 0x80, 0x70, 0xf0, 0xbf])); + assert_eq!(Bitcoin::LeftShift64.cmr(), Cmr::from_byte_array([0x50, 0x49, 0xf4, 0x04, 0xd1, 0x73, 0x29, 0x9a, 0x3a, 0xee, 0x04, 0xcb, 0xc2, 0x46, 0x2c, 0xb3, 0x4c, 0x80, 0x69, 0xc1, 0xb6, 0xdb, 0x7f, 0xed, 0x0e, 0x38, 0x8f, 0xf6, 0xd4, 0x67, 0xa0, 0x86])); + assert_eq!(Bitcoin::LeftShift8.cmr(), Cmr::from_byte_array([0x83, 0x2f, 0x63, 0x6e, 0x63, 0x44, 0x6c, 0xef, 0xba, 0x8d, 0xf3, 0xa4, 0x6e, 0xfb, 0xb3, 0x61, 0x59, 0xc1, 0x88, 0x54, 0x56, 0x77, 0x68, 0xad, 0xc9, 0xb8, 0xdb, 0x8a, 0x07, 0x49, 0x2a, 0x58])); + assert_eq!(Bitcoin::LeftShiftWith16.cmr(), Cmr::from_byte_array([0xe6, 0x47, 0x62, 0xb1, 0xc5, 0xe6, 0x14, 0x4a, 0x71, 0x81, 0xea, 0xaf, 0x4d, 0xd9, 0xd9, 0xb3, 0xaa, 0x43, 0xaa, 0xd9, 0x55, 0x15, 0x81, 0x98, 0xee, 0x20, 0x90, 0xeb, 0xd9, 0xe4, 0xbb, 0x0d])); + assert_eq!(Bitcoin::LeftShiftWith32.cmr(), Cmr::from_byte_array([0x64, 0x76, 0xba, 0x89, 0x95, 0xf8, 0x3b, 0x5e, 0xe1, 0xeb, 0xc2, 0x2c, 0xb4, 0x16, 0xf5, 0x58, 0x15, 0x7f, 0x2e, 0x57, 0x69, 0x9a, 0x5c, 0xaf, 0x84, 0x29, 0x1f, 0xf3, 0xfc, 0x14, 0x83, 0xc1])); + assert_eq!(Bitcoin::LeftShiftWith64.cmr(), Cmr::from_byte_array([0x06, 0xb8, 0xfe, 0x67, 0xcf, 0xc5, 0x86, 0x32, 0x23, 0x97, 0xaf, 0x02, 0x4f, 0xde, 0x29, 0x11, 0xf7, 0xae, 0x87, 0xa0, 0x6a, 0xbc, 0x6c, 0x59, 0x30, 0x93, 0x40, 0x97, 0x15, 0x69, 0x1c, 0x19])); + assert_eq!(Bitcoin::LeftShiftWith8.cmr(), Cmr::from_byte_array([0xb1, 0xac, 0x9c, 0x68, 0x23, 0x58, 0xc4, 0x5b, 0xab, 0xf4, 0x06, 0x95, 0x56, 0xfe, 0x6e, 0x37, 0x5b, 0x45, 0x54, 0xde, 0x9e, 0x10, 0xc5, 0x91, 0xc1, 0x48, 0x39, 0x84, 0x47, 0xac, 0x18, 0x0e])); + assert_eq!(Bitcoin::Le16.cmr(), Cmr::from_byte_array([0x01, 0x67, 0x05, 0xa7, 0xd7, 0xdc, 0xe1, 0xaf, 0xc6, 0x3e, 0xab, 0x84, 0x20, 0x3f, 0x5f, 0x42, 0xd6, 0xb6, 0xbb, 0xad, 0x75, 0xce, 0xe3, 0x8c, 0xec, 0x5a, 0x51, 0x5b, 0x59, 0x97, 0x48, 0x9f])); + assert_eq!(Bitcoin::Le32.cmr(), Cmr::from_byte_array([0x53, 0x51, 0xfc, 0x5d, 0xeb, 0xe5, 0xb2, 0x98, 0xad, 0x70, 0x57, 0xe4, 0xa5, 0xa7, 0x6a, 0x3b, 0x9c, 0x65, 0x8a, 0xcd, 0xe7, 0xd1, 0xbb, 0x52, 0xe5, 0x88, 0x9c, 0xa1, 0xe3, 0x8f, 0x5e, 0xfb])); + assert_eq!(Bitcoin::Le64.cmr(), Cmr::from_byte_array([0xae, 0x2d, 0xe1, 0xe0, 0xcf, 0x73, 0x0d, 0x1d, 0xcc, 0x96, 0xd7, 0xcc, 0xfe, 0x71, 0x16, 0x8a, 0x24, 0x0d, 0xea, 0xf8, 0x04, 0x61, 0x5a, 0x7b, 0xa9, 0x20, 0xdc, 0x16, 0xfd, 0x6e, 0xa4, 0x5f])); + assert_eq!(Bitcoin::Le8.cmr(), Cmr::from_byte_array([0xaf, 0x29, 0xf6, 0x16, 0x8e, 0xbd, 0xc0, 0x9e, 0xfb, 0xe0, 0xe6, 0x39, 0xcb, 0x75, 0x0b, 0x12, 0x05, 0x78, 0x8f, 0x90, 0x21, 0xd6, 0x66, 0xef, 0xce, 0xfe, 0x13, 0xf1, 0x2f, 0x96, 0x71, 0xf0])); + assert_eq!(Bitcoin::LinearCombination1.cmr(), Cmr::from_byte_array([0x34, 0x10, 0xa9, 0xee, 0x33, 0x3d, 0xf8, 0xc8, 0xa0, 0x1c, 0x14, 0x11, 0x5b, 0x54, 0x43, 0x27, 0xe3, 0x24, 0xe2, 0x87, 0xaa, 0x11, 0x07, 0xe0, 0x19, 0x55, 0xbd, 0x20, 0x50, 0x6e, 0xa9, 0x87])); + assert_eq!(Bitcoin::LinearVerify1.cmr(), Cmr::from_byte_array([0xdc, 0x66, 0xd3, 0x31, 0xc1, 0x7f, 0x3f, 0xdd, 0xa3, 0x99, 0x46, 0x98, 0x1b, 0x39, 0xb3, 0x57, 0xd0, 0x55, 0x5c, 0x35, 0x62, 0xec, 0xae, 0x02, 0xaa, 0x2d, 0xad, 0x16, 0x3e, 0x6c, 0x9a, 0x2e])); + assert_eq!(Bitcoin::LockTime.cmr(), Cmr::from_byte_array([0x9a, 0xe0, 0xac, 0xc3, 0x7b, 0xc2, 0x04, 0x47, 0x79, 0xb0, 0x7c, 0x3d, 0x46, 0x02, 0xa5, 0xfd, 0xe8, 0xbc, 0x33, 0xf8, 0x79, 0xf6, 0x6b, 0x73, 0x9b, 0x10, 0xf0, 0x1a, 0xeb, 0x11, 0x54, 0xec])); + assert_eq!(Bitcoin::Low1.cmr(), Cmr::from_byte_array([0xfe, 0x62, 0x14, 0xf9, 0x67, 0x15, 0x6d, 0xcd, 0xe6, 0xdd, 0x49, 0xfd, 0xc5, 0x5e, 0xfb, 0x86, 0x50, 0x69, 0xfe, 0xab, 0xff, 0xf0, 0xfe, 0x93, 0x1d, 0xba, 0x85, 0x31, 0x34, 0xee, 0xd1, 0x30])); + assert_eq!(Bitcoin::Low16.cmr(), Cmr::from_byte_array([0x74, 0x93, 0xcf, 0x69, 0x8a, 0x48, 0x82, 0xe5, 0xc3, 0x57, 0x9d, 0x06, 0x51, 0x8e, 0x7e, 0xca, 0x2b, 0x84, 0x28, 0xf6, 0x2e, 0x2b, 0x51, 0x38, 0x02, 0xab, 0xe6, 0x22, 0x17, 0x0c, 0x20, 0xfe])); + assert_eq!(Bitcoin::Low32.cmr(), Cmr::from_byte_array([0x36, 0x2d, 0x66, 0xa4, 0xf0, 0xae, 0xb9, 0x65, 0x84, 0xa5, 0x67, 0x57, 0x82, 0x71, 0xb1, 0xf7, 0xbb, 0xfc, 0xc2, 0xde, 0x0d, 0xcf, 0x95, 0x79, 0x6b, 0x6f, 0x7a, 0x82, 0x6b, 0x2a, 0x8a, 0xf7])); + assert_eq!(Bitcoin::Low64.cmr(), Cmr::from_byte_array([0x97, 0x33, 0x23, 0xbc, 0x2b, 0x92, 0xe4, 0x28, 0x04, 0xd2, 0xe4, 0xf5, 0x8b, 0x86, 0xf6, 0x5b, 0x56, 0xf9, 0x1d, 0xee, 0xb4, 0x81, 0x0e, 0xab, 0x8a, 0x1d, 0xed, 0xa9, 0x69, 0x7a, 0x08, 0x72])); + assert_eq!(Bitcoin::Low8.cmr(), Cmr::from_byte_array([0xcd, 0x1a, 0x85, 0x58, 0xef, 0x99, 0xa3, 0x22, 0x60, 0x21, 0x7a, 0x76, 0x49, 0xff, 0x51, 0x40, 0xda, 0x69, 0xda, 0x70, 0x06, 0x72, 0x69, 0x0b, 0x27, 0x91, 0x7b, 0x07, 0xd7, 0xc1, 0x4c, 0x67])); + assert_eq!(Bitcoin::Lt16.cmr(), Cmr::from_byte_array([0x04, 0xac, 0xa8, 0x7e, 0x3e, 0x17, 0xf8, 0x05, 0xa2, 0x1c, 0xf2, 0x91, 0x7a, 0xee, 0x99, 0x57, 0xb9, 0x50, 0xb2, 0xdb, 0x5d, 0x7a, 0xe5, 0xc8, 0x26, 0xd4, 0xac, 0x2e, 0xc9, 0x7b, 0x5a, 0x52])); + assert_eq!(Bitcoin::Lt32.cmr(), Cmr::from_byte_array([0x23, 0xa0, 0xa5, 0xc1, 0x97, 0x74, 0x7e, 0x3a, 0x95, 0x79, 0xe9, 0x0e, 0x0f, 0x22, 0xf8, 0x4a, 0x29, 0xbf, 0xb5, 0xf0, 0x7b, 0x84, 0xb5, 0x9b, 0x26, 0x68, 0x8a, 0x0c, 0xd5, 0x9d, 0xfe, 0xbd])); + assert_eq!(Bitcoin::Lt64.cmr(), Cmr::from_byte_array([0xd2, 0x99, 0x90, 0x1c, 0x7b, 0x5b, 0x3a, 0x59, 0xff, 0xc8, 0xdd, 0x09, 0x54, 0x5a, 0x32, 0x38, 0x24, 0xb7, 0x79, 0xa9, 0x9b, 0x2d, 0x1a, 0x2f, 0x87, 0x45, 0x2d, 0x9e, 0x4b, 0xef, 0xaf, 0x30])); + assert_eq!(Bitcoin::Lt8.cmr(), Cmr::from_byte_array([0xdd, 0x94, 0x41, 0x3b, 0x52, 0x9c, 0x29, 0x8c, 0x16, 0x96, 0xe9, 0xfb, 0x08, 0xe6, 0x67, 0x67, 0xb3, 0xf8, 0x33, 0x7a, 0xc0, 0x2e, 0x44, 0xb0, 0x68, 0xe9, 0x40, 0x14, 0xf7, 0xc4, 0x1f, 0x2a])); + assert_eq!(Bitcoin::Maj1.cmr(), Cmr::from_byte_array([0x0e, 0x6f, 0xb4, 0x0f, 0xe3, 0x1a, 0x3a, 0x52, 0x6b, 0x44, 0xcf, 0x0b, 0x7c, 0x79, 0x36, 0xc7, 0x77, 0xcb, 0xba, 0x89, 0x65, 0xa7, 0x25, 0x52, 0x32, 0xa7, 0xcf, 0x53, 0xa9, 0x22, 0x88, 0x5a])); + assert_eq!(Bitcoin::Maj16.cmr(), Cmr::from_byte_array([0x38, 0x66, 0x9c, 0xe5, 0xe1, 0xe1, 0x71, 0x47, 0x54, 0x00, 0x73, 0x1b, 0xee, 0xb6, 0x0b, 0xca, 0xfa, 0xd6, 0x66, 0x04, 0xc9, 0x39, 0x40, 0x16, 0x0c, 0xd7, 0x12, 0x88, 0x35, 0x55, 0x93, 0x42])); + assert_eq!(Bitcoin::Maj32.cmr(), Cmr::from_byte_array([0x55, 0x54, 0x34, 0x9b, 0x58, 0x4f, 0x5c, 0x38, 0x72, 0xc7, 0xf4, 0xf2, 0x57, 0x82, 0x9e, 0x2a, 0xe8, 0x22, 0xd8, 0x23, 0x42, 0x4c, 0xeb, 0x95, 0x98, 0xf0, 0x83, 0x18, 0x58, 0x6a, 0x88, 0x07])); + assert_eq!(Bitcoin::Maj64.cmr(), Cmr::from_byte_array([0x73, 0x49, 0x03, 0xba, 0xef, 0xb7, 0x1d, 0x5e, 0xa4, 0x16, 0x48, 0xff, 0x43, 0xee, 0xe6, 0x98, 0x94, 0xe0, 0x63, 0xb3, 0x88, 0xea, 0x42, 0x2f, 0x96, 0xae, 0xde, 0x19, 0x3c, 0xea, 0xb8, 0x39])); + assert_eq!(Bitcoin::Maj8.cmr(), Cmr::from_byte_array([0xba, 0x47, 0xa3, 0x99, 0xdc, 0x94, 0x35, 0xe1, 0x8e, 0x08, 0x0a, 0x4e, 0x18, 0xaf, 0x7c, 0x65, 0x7f, 0xd3, 0x9f, 0x7c, 0xe7, 0xd6, 0x05, 0x2e, 0x46, 0x90, 0x23, 0x11, 0xb0, 0x78, 0xd5, 0x85])); + assert_eq!(Bitcoin::Max16.cmr(), Cmr::from_byte_array([0xaa, 0x55, 0x23, 0x74, 0x6c, 0xab, 0xfa, 0xf5, 0x66, 0x8e, 0x9e, 0x07, 0x37, 0xe5, 0x6b, 0x06, 0x06, 0x22, 0x51, 0xd7, 0xe8, 0x0a, 0xb9, 0xb9, 0x10, 0x6d, 0x8f, 0x17, 0x2d, 0xc8, 0x4d, 0xd6])); + assert_eq!(Bitcoin::Max32.cmr(), Cmr::from_byte_array([0x69, 0x22, 0x96, 0x5d, 0x14, 0x43, 0x45, 0xc9, 0x13, 0xec, 0xb3, 0x0b, 0x5e, 0xd4, 0x7e, 0x88, 0xda, 0xe3, 0x5c, 0x12, 0x21, 0xf2, 0x6a, 0xa9, 0x2d, 0xd5, 0xa5, 0xf6, 0x15, 0xdb, 0xdb, 0x53])); + assert_eq!(Bitcoin::Max64.cmr(), Cmr::from_byte_array([0x8a, 0x9b, 0xe9, 0x07, 0xb6, 0xa4, 0xc3, 0x0a, 0xbc, 0xc0, 0xf2, 0x2d, 0x01, 0x30, 0x74, 0xc2, 0xd5, 0x6b, 0xb0, 0x81, 0xf2, 0x62, 0x18, 0x57, 0xd5, 0x38, 0xcc, 0x97, 0x13, 0x1e, 0x44, 0x09])); + assert_eq!(Bitcoin::Max8.cmr(), Cmr::from_byte_array([0xb4, 0xbf, 0x93, 0x23, 0x40, 0x22, 0xe8, 0x60, 0xfe, 0x76, 0xc0, 0xb5, 0x36, 0x0e, 0x8b, 0x36, 0xff, 0x81, 0xee, 0x67, 0x05, 0xb5, 0x93, 0xac, 0xdf, 0x65, 0x5a, 0xc6, 0xe6, 0xd7, 0xae, 0xba])); + assert_eq!(Bitcoin::Median16.cmr(), Cmr::from_byte_array([0x17, 0xe2, 0xe8, 0x7f, 0x07, 0x60, 0xf4, 0xfb, 0x3c, 0x9f, 0xd0, 0xbe, 0xd0, 0x00, 0xd7, 0x39, 0x73, 0xab, 0x60, 0xf5, 0xe6, 0xc2, 0xc1, 0xfa, 0xb1, 0x7f, 0x9b, 0x23, 0xee, 0x6a, 0xca, 0x48])); + assert_eq!(Bitcoin::Median32.cmr(), Cmr::from_byte_array([0x11, 0x60, 0xae, 0x8e, 0xa8, 0xd3, 0x0f, 0x9a, 0x22, 0x33, 0xc4, 0x8e, 0x73, 0x12, 0x40, 0xf8, 0x44, 0x93, 0xb8, 0x28, 0xb5, 0x57, 0x93, 0xe2, 0xf4, 0x04, 0x2a, 0x19, 0x82, 0xac, 0x26, 0xa5])); + assert_eq!(Bitcoin::Median64.cmr(), Cmr::from_byte_array([0xc8, 0x73, 0x73, 0x64, 0x9e, 0x7e, 0x40, 0x50, 0xbb, 0x73, 0x33, 0x7e, 0x08, 0xeb, 0x5d, 0xe4, 0x52, 0x28, 0xab, 0x86, 0xad, 0x4e, 0x1f, 0x41, 0x91, 0xe5, 0x20, 0x2a, 0xa6, 0xaf, 0xa0, 0xc5])); + assert_eq!(Bitcoin::Median8.cmr(), Cmr::from_byte_array([0xc3, 0xb4, 0xe0, 0x89, 0x8a, 0x21, 0xbd, 0xe9, 0x4d, 0xae, 0xd3, 0x7a, 0x20, 0xad, 0xf9, 0x0c, 0x8b, 0xe5, 0x69, 0x1a, 0x03, 0xb6, 0xa1, 0xe5, 0x56, 0x38, 0x5d, 0x42, 0xeb, 0x19, 0x02, 0x2b])); + assert_eq!(Bitcoin::Min16.cmr(), Cmr::from_byte_array([0x5f, 0xd0, 0x05, 0x1e, 0xdb, 0x37, 0x19, 0xa6, 0x45, 0xb2, 0x72, 0xa0, 0x21, 0x08, 0xef, 0xbb, 0x3d, 0x9b, 0xc0, 0xf6, 0x06, 0x21, 0xbf, 0x5a, 0x5b, 0xab, 0xe1, 0x16, 0xd5, 0x55, 0xd5, 0x78])); + assert_eq!(Bitcoin::Min32.cmr(), Cmr::from_byte_array([0xd8, 0x07, 0x82, 0xa2, 0xb5, 0xd8, 0x6a, 0xb6, 0xb9, 0xc9, 0xc3, 0xfb, 0x77, 0x8a, 0x34, 0x73, 0xf6, 0x00, 0xb1, 0x85, 0xfe, 0x19, 0x25, 0xee, 0x9f, 0xc2, 0xe8, 0x77, 0x7e, 0xd2, 0x66, 0x01])); + assert_eq!(Bitcoin::Min64.cmr(), Cmr::from_byte_array([0xc5, 0xc0, 0x9d, 0x50, 0x13, 0x38, 0xe9, 0xa5, 0x12, 0xcf, 0x89, 0x76, 0xca, 0x4b, 0x32, 0xb9, 0x24, 0x80, 0xbe, 0xf6, 0xae, 0xb2, 0x9d, 0x36, 0xd5, 0x90, 0xd3, 0x5b, 0xf9, 0xf9, 0xec, 0xe1])); + assert_eq!(Bitcoin::Min8.cmr(), Cmr::from_byte_array([0x81, 0xd2, 0x1e, 0x12, 0x81, 0x42, 0x38, 0x81, 0x80, 0x2c, 0x0e, 0x0c, 0x7d, 0x22, 0xbd, 0x34, 0xd2, 0x6b, 0xd1, 0x2a, 0x4c, 0x4f, 0x1b, 0x70, 0x68, 0xe7, 0xe1, 0x83, 0x82, 0x08, 0x48, 0xe9])); + assert_eq!(Bitcoin::Modulo16.cmr(), Cmr::from_byte_array([0xb6, 0xb8, 0x7c, 0xfa, 0xb6, 0x7e, 0x55, 0x19, 0xf1, 0xc9, 0x98, 0xda, 0x47, 0x94, 0x37, 0xbb, 0x79, 0xe6, 0x74, 0xf7, 0x15, 0xe9, 0xa2, 0xe5, 0x38, 0xee, 0xc5, 0xec, 0x18, 0xe1, 0x8e, 0xa5])); + assert_eq!(Bitcoin::Modulo32.cmr(), Cmr::from_byte_array([0x8d, 0x48, 0x6e, 0x83, 0x16, 0x54, 0xf3, 0x8a, 0x32, 0xda, 0x35, 0xeb, 0x7b, 0xb6, 0x55, 0xa6, 0xed, 0x69, 0x4d, 0xbf, 0xa0, 0x58, 0x95, 0x7d, 0x9f, 0x5c, 0xbf, 0xcc, 0x57, 0x92, 0xc6, 0x5b])); + assert_eq!(Bitcoin::Modulo64.cmr(), Cmr::from_byte_array([0x14, 0xdf, 0x20, 0xd9, 0x3d, 0xfd, 0xef, 0xe2, 0x55, 0x9b, 0xac, 0x50, 0xed, 0x38, 0x19, 0x3b, 0xd7, 0x8b, 0xd6, 0x3f, 0x92, 0x9d, 0x86, 0xfb, 0x4f, 0x29, 0xa7, 0xc5, 0xaf, 0x32, 0x42, 0xad])); + assert_eq!(Bitcoin::Modulo8.cmr(), Cmr::from_byte_array([0x2c, 0x75, 0x8a, 0x7c, 0x0f, 0x59, 0xe8, 0x00, 0xe9, 0x4f, 0x3d, 0xc5, 0xa0, 0x01, 0xbf, 0x8e, 0xd9, 0x43, 0x5f, 0x75, 0xa2, 0xd9, 0x69, 0x30, 0xc5, 0x7e, 0xaa, 0xb0, 0xcd, 0x80, 0xaf, 0x5c])); + assert_eq!(Bitcoin::Multiply16.cmr(), Cmr::from_byte_array([0x75, 0xbd, 0x41, 0xf2, 0xd2, 0xb3, 0x39, 0xf0, 0x69, 0xbf, 0xdf, 0xd8, 0x02, 0xd6, 0x1e, 0x6c, 0xa8, 0xe3, 0xba, 0xd6, 0xfb, 0x6d, 0x95, 0xb6, 0x72, 0x09, 0x5b, 0x93, 0x34, 0x5f, 0x04, 0x7f])); + assert_eq!(Bitcoin::Multiply32.cmr(), Cmr::from_byte_array([0x84, 0xcb, 0xe6, 0xce, 0x87, 0x03, 0x79, 0x92, 0x13, 0x87, 0x7c, 0x1b, 0xd5, 0x05, 0xc7, 0x64, 0x34, 0x33, 0x69, 0x00, 0x2e, 0x50, 0x2c, 0x43, 0xd9, 0x7f, 0x3d, 0x57, 0x77, 0x2d, 0x6c, 0x87])); + assert_eq!(Bitcoin::Multiply64.cmr(), Cmr::from_byte_array([0x92, 0x98, 0x7b, 0x80, 0x1b, 0x92, 0xf6, 0x79, 0xeb, 0x96, 0x13, 0x68, 0x84, 0x44, 0xa1, 0x78, 0x87, 0x50, 0xa8, 0x50, 0x6e, 0x03, 0xa9, 0x21, 0x8c, 0x21, 0xec, 0xc7, 0x20, 0x82, 0xdc, 0x6a])); + assert_eq!(Bitcoin::Multiply8.cmr(), Cmr::from_byte_array([0x76, 0x4c, 0xab, 0x71, 0xdb, 0x94, 0x59, 0xa7, 0x69, 0x6d, 0x94, 0x4a, 0x50, 0x09, 0x5b, 0x1a, 0xeb, 0xdf, 0xd9, 0x28, 0x4b, 0xdb, 0x74, 0x96, 0xa7, 0xb3, 0x02, 0x41, 0xcc, 0xba, 0x3e, 0xce])); + assert_eq!(Bitcoin::Negate16.cmr(), Cmr::from_byte_array([0xe7, 0x60, 0xee, 0x40, 0x29, 0xc3, 0x4f, 0x89, 0x74, 0x06, 0xff, 0xde, 0xa5, 0x55, 0x84, 0x86, 0x62, 0xe8, 0x9c, 0x98, 0x3e, 0x60, 0x70, 0xbd, 0x02, 0x72, 0xad, 0x0f, 0xa3, 0x42, 0xef, 0xa3])); + assert_eq!(Bitcoin::Negate32.cmr(), Cmr::from_byte_array([0x84, 0x95, 0xb7, 0x40, 0x09, 0xad, 0x07, 0xc9, 0x30, 0x2a, 0x25, 0xae, 0x56, 0xc3, 0xe9, 0x73, 0x3f, 0x00, 0xc2, 0xba, 0xa4, 0x10, 0xea, 0xc4, 0xa5, 0x8e, 0x75, 0xdb, 0x83, 0xaf, 0x1d, 0x22])); + assert_eq!(Bitcoin::Negate64.cmr(), Cmr::from_byte_array([0x34, 0xe8, 0x9f, 0xaf, 0x34, 0x5a, 0xfd, 0x5e, 0x7b, 0x29, 0x00, 0x14, 0x52, 0xfc, 0x5f, 0xc2, 0xe3, 0x78, 0x3a, 0xf7, 0xf2, 0x10, 0x16, 0x43, 0xbd, 0x76, 0x70, 0x6a, 0x6f, 0xc3, 0xf3, 0x6a])); + assert_eq!(Bitcoin::Negate8.cmr(), Cmr::from_byte_array([0xe8, 0x1b, 0xe0, 0xb1, 0x5c, 0x67, 0x1a, 0xb8, 0xdf, 0x1f, 0x48, 0x69, 0xc5, 0x7f, 0x11, 0x11, 0x18, 0xcb, 0x66, 0x83, 0x54, 0x97, 0x5c, 0x63, 0x66, 0xec, 0xb2, 0xb8, 0xbb, 0x7c, 0x15, 0xcf])); + assert_eq!(Bitcoin::NumInputs.cmr(), Cmr::from_byte_array([0x5c, 0x5a, 0xc4, 0xff, 0x6d, 0xa5, 0x6c, 0xb3, 0x72, 0xb2, 0x32, 0x66, 0x6e, 0x83, 0x34, 0xb9, 0xe2, 0xcf, 0xb0, 0xdc, 0xb4, 0x18, 0xf1, 0x61, 0xbf, 0xf1, 0x49, 0xe8, 0x4e, 0xc9, 0x2c, 0x3e])); + assert_eq!(Bitcoin::NumOutputs.cmr(), Cmr::from_byte_array([0x98, 0xa1, 0xcc, 0xa7, 0x05, 0xdf, 0xcf, 0xaf, 0xd3, 0xa6, 0x9e, 0x9a, 0xdc, 0x05, 0xba, 0x47, 0xe1, 0xfe, 0xfa, 0x6a, 0x29, 0xf3, 0x42, 0x86, 0x20, 0x48, 0xe4, 0x96, 0x86, 0x48, 0xc3, 0xd7])); + assert_eq!(Bitcoin::One16.cmr(), Cmr::from_byte_array([0x2e, 0x5e, 0x3d, 0x95, 0xe4, 0x53, 0x16, 0x88, 0x8e, 0x4f, 0x37, 0x09, 0xef, 0x83, 0x2b, 0x9f, 0xd9, 0xe1, 0x5f, 0x30, 0x71, 0x9b, 0xf5, 0x5f, 0xc2, 0xe0, 0xe0, 0x9a, 0x36, 0x57, 0xd8, 0x82])); + assert_eq!(Bitcoin::One32.cmr(), Cmr::from_byte_array([0x06, 0x42, 0x6b, 0x85, 0x3c, 0x1b, 0xcb, 0x33, 0x8a, 0xed, 0xbe, 0x1f, 0x89, 0xa6, 0xd9, 0xb7, 0xa3, 0xda, 0x03, 0x8c, 0xd0, 0x0a, 0x44, 0x71, 0x18, 0x36, 0x93, 0x49, 0x66, 0x9e, 0x29, 0x76])); + assert_eq!(Bitcoin::One64.cmr(), Cmr::from_byte_array([0xab, 0x1d, 0x2c, 0xd9, 0x96, 0x78, 0xda, 0x3c, 0x12, 0x8d, 0x39, 0xad, 0x9f, 0xe6, 0xff, 0xa9, 0x55, 0xc1, 0x6e, 0x5e, 0xf2, 0xc2, 0x5b, 0xb4, 0x31, 0x83, 0x15, 0x59, 0x69, 0x51, 0xf4, 0x27])); + assert_eq!(Bitcoin::One8.cmr(), Cmr::from_byte_array([0x3c, 0xc5, 0xf5, 0x23, 0xd6, 0xa6, 0x35, 0x5d, 0xc9, 0x24, 0xee, 0x0a, 0xc1, 0xf5, 0xfe, 0x2c, 0x52, 0x12, 0x75, 0xe3, 0xaa, 0x9f, 0x21, 0xd3, 0x1b, 0x08, 0x2d, 0xb2, 0xac, 0x23, 0x0d, 0x9d])); + assert_eq!(Bitcoin::Or1.cmr(), Cmr::from_byte_array([0xc4, 0x65, 0x96, 0x43, 0x69, 0xfc, 0xa2, 0x09, 0x7f, 0x83, 0x53, 0x0c, 0x87, 0xbc, 0xbc, 0x90, 0xc3, 0x06, 0x57, 0x9d, 0x9f, 0x3b, 0xfe, 0xdd, 0xf4, 0xa1, 0x72, 0xa4, 0xea, 0x0b, 0x58, 0xec])); + assert_eq!(Bitcoin::Or16.cmr(), Cmr::from_byte_array([0x5a, 0x98, 0x5e, 0x04, 0x3b, 0x85, 0x27, 0x3b, 0x90, 0xf9, 0x0e, 0x20, 0xf8, 0x2b, 0x75, 0x32, 0x33, 0x51, 0xcf, 0x2a, 0x4e, 0x62, 0xa7, 0xf9, 0xcb, 0x2f, 0x05, 0x96, 0x40, 0x2e, 0x9e, 0x28])); + assert_eq!(Bitcoin::Or32.cmr(), Cmr::from_byte_array([0x35, 0x52, 0x38, 0x3a, 0x57, 0xff, 0xb4, 0x8d, 0x63, 0xa0, 0x33, 0x7a, 0xf0, 0xdd, 0x6e, 0xfa, 0xb6, 0xb4, 0x6c, 0x5d, 0xe1, 0x72, 0x0e, 0x42, 0x0b, 0xdd, 0x1c, 0x82, 0x27, 0x6b, 0xc9, 0xa9])); + assert_eq!(Bitcoin::Or64.cmr(), Cmr::from_byte_array([0x51, 0xa1, 0x73, 0xda, 0xdc, 0xa0, 0x1a, 0xc6, 0xf6, 0x2e, 0x75, 0xd5, 0xcd, 0x35, 0x22, 0xf0, 0x9f, 0xde, 0x62, 0xb1, 0x15, 0x13, 0xe0, 0x68, 0x42, 0x28, 0x52, 0xa4, 0x91, 0x67, 0xb6, 0x06])); + assert_eq!(Bitcoin::Or8.cmr(), Cmr::from_byte_array([0x79, 0xef, 0xbd, 0xcb, 0x53, 0x7b, 0xeb, 0xcb, 0x18, 0x8d, 0x11, 0x16, 0xb7, 0x8a, 0x10, 0x9b, 0xff, 0xbc, 0x2a, 0x6c, 0xe3, 0xd1, 0xf8, 0x70, 0x15, 0x4a, 0x79, 0x56, 0x09, 0x1b, 0x34, 0x2f])); + assert_eq!(Bitcoin::OutpointHash.cmr(), Cmr::from_byte_array([0x3a, 0x1a, 0xe9, 0x0e, 0x16, 0x7f, 0xb4, 0x0d, 0x6e, 0x13, 0xb4, 0x51, 0xad, 0x67, 0x41, 0x0d, 0x8d, 0xd9, 0x91, 0xc8, 0x7d, 0x6a, 0x4a, 0x59, 0xcc, 0x76, 0xc6, 0x3f, 0x3b, 0x9e, 0x5e, 0x56])); + assert_eq!(Bitcoin::OutputsHash.cmr(), Cmr::from_byte_array([0xf2, 0xeb, 0x6d, 0x0f, 0x01, 0x8e, 0x6f, 0x15, 0xe3, 0x5b, 0xaa, 0x82, 0xe5, 0x7e, 0x14, 0xfe, 0x34, 0x37, 0x96, 0xf2, 0x19, 0x68, 0x26, 0xbe, 0xd7, 0xc7, 0x87, 0x55, 0x98, 0xd6, 0x64, 0x1d])); + assert_eq!(Bitcoin::OutputHash.cmr(), Cmr::from_byte_array([0x91, 0x21, 0x1f, 0xc6, 0x01, 0x1a, 0x64, 0x93, 0x00, 0xc6, 0xbe, 0xe9, 0x4f, 0xdd, 0x48, 0xa9, 0x7f, 0xa2, 0xa9, 0xb6, 0xf2, 0x84, 0xbe, 0x01, 0x5d, 0x46, 0x2d, 0x17, 0xde, 0x66, 0x4a, 0xc3])); + assert_eq!(Bitcoin::OutputScriptsHash.cmr(), Cmr::from_byte_array([0xff, 0x20, 0xbc, 0x43, 0x65, 0xe7, 0x17, 0x07, 0x57, 0x1c, 0x6e, 0x17, 0x38, 0xe1, 0xed, 0x32, 0x6f, 0x7c, 0x35, 0x1d, 0xe1, 0x30, 0x22, 0xae, 0xa3, 0xd6, 0x40, 0x6b, 0x8a, 0xee, 0x8e, 0x3b])); + assert_eq!(Bitcoin::OutputScriptHash.cmr(), Cmr::from_byte_array([0xbd, 0xfd, 0xb2, 0x31, 0xf4, 0xf1, 0xa6, 0x2c, 0x9d, 0x7b, 0x03, 0x93, 0x1e, 0x7f, 0x19, 0xa4, 0x54, 0x6a, 0xf2, 0x34, 0x75, 0x4c, 0xbf, 0x70, 0x05, 0x9f, 0xdd, 0x42, 0xbb, 0xbc, 0x41, 0x26])); + assert_eq!(Bitcoin::OutputValue.cmr(), Cmr::from_byte_array([0x93, 0x36, 0x43, 0xb6, 0xc5, 0xa6, 0x22, 0x0a, 0xbb, 0xca, 0x6f, 0x35, 0x09, 0xfe, 0xff, 0x6d, 0x13, 0xef, 0xa6, 0xc9, 0xfa, 0xe9, 0x59, 0x24, 0x57, 0x53, 0x64, 0xf2, 0xb1, 0x64, 0xd2, 0xbc])); + assert_eq!(Bitcoin::OutputValuesHash.cmr(), Cmr::from_byte_array([0x22, 0x89, 0x93, 0x79, 0x00, 0x57, 0x06, 0x6f, 0x20, 0x16, 0x97, 0x1d, 0xf5, 0x5e, 0x6f, 0x67, 0xd2, 0x52, 0xef, 0xb6, 0xda, 0xab, 0xd0, 0xfc, 0x56, 0x6a, 0x8d, 0x21, 0x56, 0xef, 0xbb, 0xfc])); + assert_eq!(Bitcoin::ParseLock.cmr(), Cmr::from_byte_array([0x3d, 0xb8, 0x45, 0x35, 0xfa, 0x3d, 0x90, 0xef, 0x0b, 0x58, 0x1e, 0x22, 0xb6, 0x1d, 0x21, 0x27, 0x84, 0x4b, 0x21, 0x16, 0xe8, 0x4f, 0x81, 0x4a, 0x5c, 0xba, 0xc5, 0x2d, 0xf5, 0x15, 0xf2, 0xd2])); + assert_eq!(Bitcoin::ParseSequence.cmr(), Cmr::from_byte_array([0x38, 0xb2, 0x53, 0x3f, 0x5f, 0xed, 0xe8, 0x69, 0xba, 0xa1, 0x70, 0x69, 0x83, 0xdf, 0x4c, 0x89, 0xd6, 0x2d, 0x5f, 0x90, 0x80, 0x0b, 0x47, 0xea, 0xb2, 0x11, 0x13, 0x31, 0x1a, 0x5a, 0xae, 0xc9])); + assert_eq!(Bitcoin::PointVerify1.cmr(), Cmr::from_byte_array([0xbe, 0x2a, 0x98, 0x90, 0xf1, 0xd5, 0xb6, 0x15, 0x14, 0x7f, 0x82, 0x41, 0xe0, 0x60, 0x9b, 0x5c, 0xac, 0x01, 0xec, 0xe0, 0xa3, 0xf9, 0x23, 0x68, 0x67, 0xb2, 0xbf, 0xde, 0xa1, 0xb8, 0x04, 0x4e])); + assert_eq!(Bitcoin::Rightmost16_1.cmr(), Cmr::from_byte_array([0x3f, 0x3c, 0x43, 0x46, 0x87, 0x17, 0x42, 0x26, 0x5e, 0x87, 0xf0, 0x01, 0xb4, 0x6d, 0xe7, 0xd1, 0x98, 0x75, 0x1b, 0x34, 0xfa, 0xa1, 0x80, 0x18, 0xde, 0x60, 0xc8, 0x46, 0x8d, 0x9b, 0x98, 0xa4])); + assert_eq!(Bitcoin::Rightmost16_2.cmr(), Cmr::from_byte_array([0xc1, 0x8b, 0x9f, 0xdd, 0x34, 0x0a, 0x26, 0x7a, 0xc1, 0x6d, 0x4f, 0x39, 0xee, 0x75, 0x43, 0x56, 0x52, 0xaa, 0xca, 0x52, 0x56, 0x50, 0xb5, 0x1a, 0x45, 0x87, 0x98, 0x04, 0x8e, 0x62, 0x7d, 0x51])); + assert_eq!(Bitcoin::Rightmost16_4.cmr(), Cmr::from_byte_array([0xc6, 0xc5, 0x3f, 0xa7, 0x1e, 0x23, 0x0c, 0xf0, 0x58, 0x51, 0x58, 0xf4, 0x70, 0x58, 0x8b, 0xac, 0x5c, 0x51, 0x8f, 0x84, 0xf9, 0xfc, 0x23, 0x86, 0x52, 0xf1, 0x75, 0xfb, 0x6e, 0xa1, 0x8c, 0x11])); + assert_eq!(Bitcoin::Rightmost16_8.cmr(), Cmr::from_byte_array([0xee, 0x76, 0x9c, 0x1c, 0xc8, 0xa3, 0xfd, 0xd1, 0x83, 0x8f, 0xc9, 0xf0, 0x49, 0x0c, 0xe7, 0x03, 0x93, 0xfd, 0x91, 0xba, 0x3c, 0xbd, 0x4a, 0xbd, 0x08, 0x64, 0x9f, 0xb9, 0xc4, 0x43, 0x11, 0xbd])); + assert_eq!(Bitcoin::Rightmost32_1.cmr(), Cmr::from_byte_array([0x1c, 0x44, 0x23, 0x69, 0xfb, 0x81, 0xf6, 0x11, 0xd3, 0x28, 0x01, 0x0b, 0x86, 0x4b, 0xcc, 0xb7, 0xf3, 0x5e, 0xd4, 0x77, 0xdf, 0xa3, 0x85, 0x55, 0x74, 0xc1, 0x35, 0x64, 0xcd, 0xbd, 0xb8, 0x60])); + assert_eq!(Bitcoin::Rightmost32_16.cmr(), Cmr::from_byte_array([0xad, 0xd2, 0xc3, 0x39, 0x0d, 0x9a, 0xf7, 0xc2, 0x4a, 0x15, 0x9a, 0x37, 0xd6, 0x9d, 0x44, 0x84, 0xd2, 0xc2, 0x4a, 0x2c, 0xb5, 0xb0, 0xeb, 0x2d, 0x3c, 0x49, 0x3d, 0x98, 0x12, 0xac, 0xfd, 0x74])); + assert_eq!(Bitcoin::Rightmost32_2.cmr(), Cmr::from_byte_array([0x00, 0xb8, 0x81, 0x5a, 0xd7, 0x42, 0x3d, 0xd5, 0x8c, 0xb9, 0x8b, 0xe8, 0x2c, 0xad, 0x26, 0x67, 0x5c, 0x3b, 0xf5, 0x4a, 0x0b, 0xed, 0xba, 0xde, 0x34, 0x64, 0xb4, 0xfe, 0x5a, 0x4e, 0x8c, 0xe6])); + assert_eq!(Bitcoin::Rightmost32_4.cmr(), Cmr::from_byte_array([0x84, 0xfa, 0x5a, 0x54, 0xf7, 0x72, 0x9f, 0x9d, 0x68, 0x99, 0x4b, 0xea, 0xb9, 0x3a, 0xe7, 0x9b, 0x8c, 0x4a, 0x10, 0xd5, 0xb7, 0xae, 0x97, 0x27, 0xaa, 0x17, 0x16, 0xe5, 0x7d, 0x03, 0x3b, 0x74])); + assert_eq!(Bitcoin::Rightmost32_8.cmr(), Cmr::from_byte_array([0x7d, 0x38, 0x05, 0xd3, 0xc7, 0x8c, 0x4e, 0xea, 0x91, 0xe3, 0xd3, 0x5e, 0xfd, 0xd4, 0x7e, 0xed, 0xd4, 0x21, 0xaf, 0x84, 0xd2, 0x19, 0x10, 0x32, 0x93, 0x32, 0xa0, 0xb5, 0x48, 0x7f, 0xab, 0x63])); + assert_eq!(Bitcoin::Rightmost64_1.cmr(), Cmr::from_byte_array([0xd3, 0xb1, 0x64, 0xc5, 0xdc, 0x66, 0xcc, 0x7e, 0xf9, 0x23, 0x4f, 0xed, 0xe4, 0xdc, 0x7f, 0x0d, 0xa5, 0xcd, 0x71, 0xc1, 0xc1, 0xd4, 0xca, 0xd6, 0x0f, 0xb4, 0xec, 0x57, 0x3e, 0x2b, 0x8a, 0x75])); + assert_eq!(Bitcoin::Rightmost64_16.cmr(), Cmr::from_byte_array([0xea, 0xe4, 0x34, 0x78, 0xf9, 0xf2, 0xf4, 0x52, 0xef, 0xac, 0x15, 0xee, 0xe6, 0x0f, 0x8b, 0x52, 0x53, 0xd8, 0x0a, 0x2d, 0x32, 0x12, 0x9b, 0x4e, 0x5b, 0xa3, 0x83, 0x00, 0xad, 0x98, 0x52, 0xfd])); + assert_eq!(Bitcoin::Rightmost64_2.cmr(), Cmr::from_byte_array([0x9c, 0xd4, 0xa9, 0x8b, 0xbd, 0xb8, 0xa3, 0x35, 0x85, 0xc0, 0x0f, 0x47, 0xd6, 0xad, 0xab, 0x7a, 0xf5, 0x42, 0x86, 0xfb, 0x8a, 0xe6, 0x0f, 0x72, 0x30, 0x11, 0xfb, 0x84, 0xc0, 0xee, 0x78, 0xf9])); + assert_eq!(Bitcoin::Rightmost64_32.cmr(), Cmr::from_byte_array([0x7f, 0x24, 0x20, 0xae, 0x5b, 0x0f, 0x5a, 0x3f, 0x6f, 0x2e, 0x60, 0xb6, 0x1f, 0x8a, 0x41, 0x5c, 0x08, 0x8b, 0x94, 0xb2, 0x1c, 0x1a, 0x62, 0xa3, 0xfd, 0xaa, 0xc7, 0x49, 0xdb, 0xdf, 0x4c, 0x71])); + assert_eq!(Bitcoin::Rightmost64_4.cmr(), Cmr::from_byte_array([0xe2, 0x65, 0x55, 0x2a, 0x24, 0xfb, 0xcd, 0xec, 0x05, 0x83, 0xd7, 0x18, 0x3e, 0x48, 0xeb, 0xc2, 0xff, 0x6d, 0x31, 0x65, 0x57, 0xba, 0xc5, 0x91, 0x5c, 0x03, 0xcb, 0x23, 0x35, 0xd2, 0x32, 0x95])); + assert_eq!(Bitcoin::Rightmost64_8.cmr(), Cmr::from_byte_array([0x98, 0xcd, 0x95, 0xf9, 0x5d, 0x46, 0x64, 0x1b, 0x04, 0x9e, 0x77, 0xbf, 0x90, 0xee, 0xa5, 0x98, 0xad, 0xf2, 0x9e, 0xe5, 0x00, 0xe6, 0x50, 0x72, 0x87, 0x54, 0x8b, 0xb1, 0xcd, 0xaf, 0x78, 0x4d])); + assert_eq!(Bitcoin::Rightmost8_1.cmr(), Cmr::from_byte_array([0x08, 0x76, 0xfc, 0xd4, 0x69, 0x85, 0x91, 0xf3, 0x31, 0x91, 0x01, 0x57, 0x4c, 0xe1, 0x53, 0xfc, 0xdf, 0xe9, 0x4f, 0x58, 0x1a, 0xac, 0x5e, 0x75, 0xf3, 0xcd, 0x74, 0x46, 0xdf, 0x56, 0xf3, 0xc7])); + assert_eq!(Bitcoin::Rightmost8_2.cmr(), Cmr::from_byte_array([0xb9, 0xf7, 0xb2, 0x90, 0xaf, 0xe7, 0xf1, 0x89, 0xe3, 0x2a, 0xeb, 0xf2, 0xcc, 0x4d, 0xdc, 0xa9, 0x6b, 0xb0, 0x07, 0x64, 0xc7, 0xbe, 0x28, 0x87, 0xdc, 0xe0, 0x54, 0xd0, 0x9e, 0x38, 0xc3, 0x53])); + assert_eq!(Bitcoin::Rightmost8_4.cmr(), Cmr::from_byte_array([0xf2, 0x8e, 0x9a, 0xf5, 0xaf, 0x4c, 0x9c, 0xca, 0x4b, 0x43, 0xcc, 0x6a, 0xdf, 0x9d, 0x9d, 0x8d, 0x16, 0x9c, 0x87, 0xc5, 0x55, 0x9f, 0x9f, 0x3c, 0xca, 0xc8, 0xf2, 0x35, 0x2b, 0x62, 0x9f, 0x18])); + assert_eq!(Bitcoin::RightExtend16_32.cmr(), Cmr::from_byte_array([0xdb, 0xf1, 0x8d, 0x87, 0xa7, 0x89, 0x21, 0x39, 0xa3, 0x88, 0xe9, 0xa9, 0x83, 0xc4, 0x89, 0x92, 0xac, 0x35, 0xa8, 0x45, 0x56, 0xee, 0x0d, 0xef, 0xc1, 0xda, 0xdf, 0x0c, 0x5f, 0x47, 0x1a, 0x26])); + assert_eq!(Bitcoin::RightExtend16_64.cmr(), Cmr::from_byte_array([0xd0, 0x11, 0xac, 0xc7, 0x94, 0xe3, 0xc4, 0x78, 0x9a, 0xcc, 0xd0, 0xd5, 0xfe, 0x49, 0x97, 0xd3, 0x34, 0xd9, 0x1f, 0x08, 0x31, 0xa1, 0xeb, 0x35, 0x04, 0xb4, 0xcb, 0x2d, 0xdf, 0x47, 0x97, 0xaf])); + assert_eq!(Bitcoin::RightExtend32_64.cmr(), Cmr::from_byte_array([0xa5, 0xaa, 0x5d, 0xb1, 0xe5, 0x35, 0xe7, 0x23, 0x2a, 0xd3, 0x6d, 0xaf, 0xba, 0x6d, 0x5a, 0x20, 0x0d, 0x54, 0xeb, 0x85, 0x3b, 0x75, 0xdc, 0x70, 0xa5, 0x94, 0xed, 0x64, 0xaa, 0x6b, 0xd9, 0xab])); + assert_eq!(Bitcoin::RightExtend8_16.cmr(), Cmr::from_byte_array([0x81, 0x06, 0xd5, 0x8a, 0x80, 0x66, 0xee, 0x6e, 0x15, 0xe5, 0x5c, 0xa5, 0x2c, 0xb7, 0xaf, 0xd8, 0xe3, 0x27, 0x75, 0x87, 0xbf, 0xd7, 0xde, 0xc0, 0xbe, 0x37, 0xd4, 0x06, 0x74, 0x2a, 0x39, 0x31])); + assert_eq!(Bitcoin::RightExtend8_32.cmr(), Cmr::from_byte_array([0xdf, 0xa4, 0xba, 0xfa, 0x43, 0x2a, 0x53, 0x38, 0xd3, 0x74, 0xde, 0xb6, 0xb7, 0x24, 0xb7, 0xf6, 0xea, 0xe5, 0x58, 0x61, 0xfe, 0x73, 0x1d, 0x43, 0x04, 0x8a, 0xa3, 0x04, 0xd1, 0xf7, 0xf9, 0xa2])); + assert_eq!(Bitcoin::RightExtend8_64.cmr(), Cmr::from_byte_array([0x62, 0x0a, 0x37, 0x03, 0x8b, 0x6f, 0xa1, 0x27, 0x49, 0x5f, 0x0b, 0x46, 0x49, 0x6f, 0x64, 0x35, 0xdd, 0x2d, 0xad, 0x7e, 0xf0, 0xc0, 0xfd, 0x2c, 0xd6, 0x5f, 0x54, 0xdc, 0x18, 0x5e, 0x99, 0x7b])); + assert_eq!(Bitcoin::RightPadHigh16_32.cmr(), Cmr::from_byte_array([0x2b, 0x6a, 0xbc, 0x38, 0x32, 0x1a, 0x7c, 0x54, 0x2f, 0xb1, 0x69, 0x74, 0x62, 0x1c, 0xed, 0x80, 0x88, 0x0d, 0xb5, 0x19, 0xbb, 0x48, 0x60, 0x93, 0x42, 0x6e, 0x8c, 0xe1, 0x8e, 0x01, 0x69, 0xb1])); + assert_eq!(Bitcoin::RightPadHigh16_64.cmr(), Cmr::from_byte_array([0xad, 0x90, 0xd8, 0xff, 0xa5, 0x74, 0x50, 0xb3, 0xb5, 0xe9, 0x09, 0x62, 0x25, 0x34, 0x9e, 0xd8, 0xf0, 0x72, 0xe1, 0x01, 0x72, 0x93, 0xf3, 0x92, 0xef, 0x85, 0x4e, 0x03, 0x19, 0xab, 0xc9, 0x34])); + assert_eq!(Bitcoin::RightPadHigh1_16.cmr(), Cmr::from_byte_array([0x28, 0x81, 0x58, 0xb1, 0xc9, 0x10, 0x87, 0x7b, 0x7e, 0xea, 0x3d, 0xfc, 0xf2, 0xb2, 0xb7, 0x88, 0x92, 0x28, 0x08, 0xb6, 0xd6, 0xfa, 0x75, 0xf8, 0x96, 0x77, 0x19, 0x04, 0x8b, 0x14, 0x12, 0x49])); + assert_eq!(Bitcoin::RightPadHigh1_32.cmr(), Cmr::from_byte_array([0xee, 0x2a, 0xd7, 0x7f, 0x66, 0x8d, 0x3d, 0x6a, 0x2e, 0x68, 0x50, 0x6e, 0x49, 0x04, 0xcf, 0x50, 0xa0, 0x84, 0x60, 0xe1, 0xd2, 0xb8, 0x6a, 0x81, 0xe1, 0x4e, 0x41, 0xf8, 0xda, 0x4c, 0xdd, 0xf2])); + assert_eq!(Bitcoin::RightPadHigh1_64.cmr(), Cmr::from_byte_array([0x3d, 0x6a, 0x7f, 0xe6, 0x9a, 0x11, 0x64, 0x2a, 0xce, 0xd6, 0x84, 0x2b, 0x89, 0xaa, 0x1b, 0xb8, 0x41, 0x3e, 0x39, 0x90, 0x63, 0xcc, 0x16, 0x78, 0x6a, 0xf7, 0xc0, 0x33, 0xda, 0xd5, 0x8b, 0x95])); + assert_eq!(Bitcoin::RightPadHigh1_8.cmr(), Cmr::from_byte_array([0x28, 0x44, 0xbd, 0xfd, 0x6a, 0xba, 0x29, 0xdf, 0x03, 0xf9, 0x3a, 0xa6, 0xae, 0xb2, 0x1c, 0x06, 0x40, 0x28, 0xdb, 0x05, 0xff, 0x77, 0xd8, 0xd9, 0x1c, 0xfd, 0xcd, 0xef, 0xb1, 0x90, 0xc5, 0xbd])); + assert_eq!(Bitcoin::RightPadHigh32_64.cmr(), Cmr::from_byte_array([0xb4, 0x32, 0xe5, 0x32, 0x1a, 0xe1, 0x71, 0x4c, 0xe1, 0x95, 0x29, 0xd8, 0x5f, 0x24, 0xff, 0x89, 0x87, 0x91, 0x0e, 0xbc, 0xf0, 0x15, 0xf8, 0x7f, 0x15, 0xbb, 0xed, 0x55, 0xf0, 0xa0, 0xe8, 0x92])); + assert_eq!(Bitcoin::RightPadHigh8_16.cmr(), Cmr::from_byte_array([0x6f, 0x2d, 0x96, 0xc9, 0x54, 0x13, 0xca, 0x9a, 0xa8, 0xcc, 0x55, 0x0f, 0x25, 0x73, 0xe1, 0x66, 0x99, 0x56, 0xd6, 0x07, 0x69, 0x2c, 0xf1, 0xca, 0x6d, 0xc7, 0x6d, 0x2f, 0x2b, 0x4a, 0x3a, 0xc8])); + assert_eq!(Bitcoin::RightPadHigh8_32.cmr(), Cmr::from_byte_array([0xdf, 0x2c, 0x7f, 0x92, 0x99, 0x00, 0xa4, 0x49, 0x01, 0xe6, 0xff, 0x65, 0x27, 0x6a, 0x95, 0x1a, 0xeb, 0x95, 0xdf, 0x25, 0x0b, 0x13, 0x97, 0x14, 0xd4, 0x19, 0x54, 0x04, 0xd7, 0x78, 0x98, 0xed])); + assert_eq!(Bitcoin::RightPadHigh8_64.cmr(), Cmr::from_byte_array([0x79, 0xc0, 0x1d, 0xa3, 0xe6, 0x0b, 0x9c, 0x69, 0x35, 0xce, 0x3e, 0x15, 0x98, 0xb1, 0x78, 0x40, 0xaf, 0x82, 0xdc, 0xb0, 0xdd, 0xc6, 0x3a, 0xef, 0x4a, 0x06, 0xe7, 0xf9, 0xca, 0x5d, 0x27, 0x41])); + assert_eq!(Bitcoin::RightPadLow16_32.cmr(), Cmr::from_byte_array([0x6f, 0x20, 0x10, 0x27, 0xcc, 0x75, 0x98, 0x02, 0x30, 0xa0, 0x70, 0x85, 0x9c, 0x3e, 0x38, 0x02, 0x36, 0xa1, 0xcb, 0x10, 0xe6, 0x1a, 0x01, 0xaa, 0x1f, 0x6d, 0x23, 0x1d, 0x15, 0x14, 0x2f, 0x25])); + assert_eq!(Bitcoin::RightPadLow16_64.cmr(), Cmr::from_byte_array([0xb8, 0x6e, 0x1f, 0x0b, 0xfe, 0xc6, 0x55, 0x98, 0xd0, 0xa3, 0xd1, 0xec, 0x96, 0x03, 0x05, 0xb9, 0x67, 0x45, 0x67, 0x3e, 0x1b, 0x16, 0xbf, 0x32, 0x7a, 0x71, 0x68, 0x05, 0x83, 0xd7, 0x1d, 0x90])); + assert_eq!(Bitcoin::RightPadLow1_16.cmr(), Cmr::from_byte_array([0x05, 0x2a, 0x64, 0x99, 0xc9, 0x3e, 0xe6, 0xbc, 0x1a, 0xe6, 0x57, 0xf8, 0x5f, 0xd4, 0xd4, 0xfe, 0x67, 0x7a, 0xbc, 0xee, 0x54, 0x0d, 0x13, 0x40, 0x33, 0x54, 0x2e, 0x9a, 0xb6, 0x0a, 0x63, 0xdd])); + assert_eq!(Bitcoin::RightPadLow1_32.cmr(), Cmr::from_byte_array([0x5b, 0x70, 0xd4, 0x28, 0x96, 0x0e, 0x95, 0xcc, 0x40, 0xd5, 0x18, 0x46, 0xf5, 0x3a, 0x4d, 0x0a, 0x35, 0xc9, 0x01, 0x5d, 0x15, 0x00, 0xb6, 0xbc, 0x84, 0x9b, 0x72, 0x83, 0x5e, 0x2b, 0xd4, 0x40])); + assert_eq!(Bitcoin::RightPadLow1_64.cmr(), Cmr::from_byte_array([0x44, 0xef, 0xeb, 0x87, 0xca, 0x2a, 0xd7, 0xfd, 0x4b, 0x73, 0xf1, 0x63, 0x07, 0xc7, 0xf0, 0x59, 0x02, 0x65, 0x6f, 0x35, 0x09, 0x0f, 0xb0, 0xa4, 0x32, 0x6c, 0x64, 0x89, 0x88, 0xae, 0x1d, 0x39])); + assert_eq!(Bitcoin::RightPadLow1_8.cmr(), Cmr::from_byte_array([0x93, 0x40, 0x39, 0x8b, 0xcc, 0x8e, 0xa8, 0x3e, 0xc8, 0x40, 0xbe, 0x72, 0x9d, 0xbb, 0x8b, 0x81, 0x20, 0x78, 0x24, 0xee, 0x87, 0x5d, 0x15, 0x82, 0x59, 0xd6, 0xda, 0xd2, 0x0a, 0x83, 0x93, 0x0c])); + assert_eq!(Bitcoin::RightPadLow32_64.cmr(), Cmr::from_byte_array([0x69, 0x3e, 0x28, 0x10, 0x1e, 0x04, 0xfd, 0xa4, 0x3b, 0x97, 0xe6, 0x11, 0xf0, 0xfe, 0x98, 0x00, 0x0e, 0x14, 0x30, 0x2e, 0x5d, 0xcd, 0x6e, 0xd6, 0x5e, 0xee, 0x42, 0xe3, 0x40, 0x14, 0x24, 0x2f])); + assert_eq!(Bitcoin::RightPadLow8_16.cmr(), Cmr::from_byte_array([0x09, 0x6b, 0x25, 0xc3, 0xc8, 0x41, 0x5f, 0x04, 0xd8, 0x83, 0x27, 0x43, 0xeb, 0x2f, 0x84, 0x56, 0xd5, 0xf0, 0xa6, 0x44, 0x91, 0x3d, 0x3e, 0xc5, 0x9d, 0x34, 0xf4, 0x55, 0x25, 0x01, 0xfa, 0x20])); + assert_eq!(Bitcoin::RightPadLow8_32.cmr(), Cmr::from_byte_array([0xfc, 0x7f, 0x57, 0x22, 0xa6, 0x2a, 0xa2, 0x20, 0x18, 0xcc, 0x81, 0xcd, 0x00, 0xa9, 0x32, 0x6c, 0x7f, 0xe9, 0xc6, 0x3a, 0xbc, 0xe2, 0xbd, 0xa4, 0xc0, 0xe6, 0x6a, 0x3f, 0x47, 0xc6, 0x7c, 0x53])); + assert_eq!(Bitcoin::RightPadLow8_64.cmr(), Cmr::from_byte_array([0xa5, 0xbb, 0x7d, 0x5e, 0xfc, 0xa0, 0xe4, 0x8d, 0x9d, 0x80, 0xc5, 0x02, 0x71, 0x15, 0xb4, 0x85, 0x78, 0x10, 0x51, 0xe0, 0xef, 0x46, 0xe4, 0xd6, 0x08, 0x31, 0x7a, 0x1c, 0x42, 0x61, 0xbc, 0x46])); + assert_eq!(Bitcoin::RightRotate16.cmr(), Cmr::from_byte_array([0x48, 0x2e, 0xa7, 0xe1, 0x21, 0x45, 0x01, 0xd9, 0x3c, 0x9a, 0xd1, 0x6f, 0xa8, 0xb9, 0x7b, 0xf5, 0xb3, 0x84, 0xfc, 0x2b, 0x54, 0x78, 0x9b, 0x8c, 0xd9, 0xe7, 0x84, 0xcc, 0xd0, 0xeb, 0x9d, 0x57])); + assert_eq!(Bitcoin::RightRotate32.cmr(), Cmr::from_byte_array([0x09, 0x41, 0xb6, 0xee, 0xea, 0x9a, 0xf8, 0x19, 0x5b, 0x02, 0x8a, 0xfc, 0x0b, 0xd2, 0xa5, 0x34, 0x21, 0x8b, 0xf9, 0x0d, 0x1a, 0x0e, 0x37, 0x3d, 0x74, 0x74, 0x18, 0x54, 0x0b, 0x72, 0x6d, 0x73])); + assert_eq!(Bitcoin::RightRotate64.cmr(), Cmr::from_byte_array([0x44, 0x4d, 0xbb, 0xc3, 0xdd, 0x2a, 0x11, 0xa5, 0xc7, 0xb0, 0x43, 0x9f, 0xdb, 0xa9, 0x9a, 0xc7, 0x4a, 0x11, 0xb8, 0xee, 0xb2, 0xdb, 0x30, 0x1e, 0x24, 0x3e, 0xa8, 0x91, 0x22, 0x90, 0x71, 0x52])); + assert_eq!(Bitcoin::RightRotate8.cmr(), Cmr::from_byte_array([0x72, 0x65, 0xa3, 0x0c, 0x2e, 0x83, 0x6e, 0x65, 0x54, 0x4a, 0xba, 0x91, 0x1b, 0x64, 0xd1, 0x8f, 0xa6, 0x9b, 0x17, 0x65, 0x45, 0x85, 0x6c, 0x77, 0xc4, 0xf0, 0xd7, 0x6f, 0xc3, 0xf5, 0x83, 0x51])); + assert_eq!(Bitcoin::RightShift16.cmr(), Cmr::from_byte_array([0xcd, 0x57, 0xa3, 0xd3, 0xab, 0x2d, 0x92, 0xd4, 0xf0, 0x86, 0x55, 0x04, 0x3a, 0x8b, 0x8b, 0xb6, 0x73, 0x89, 0x81, 0xfa, 0xe6, 0xda, 0x01, 0x34, 0xb4, 0xde, 0xda, 0xce, 0x5f, 0x00, 0x88, 0x60])); + assert_eq!(Bitcoin::RightShift32.cmr(), Cmr::from_byte_array([0xd6, 0xb3, 0x26, 0xb1, 0xa3, 0x23, 0x57, 0xa3, 0x32, 0x80, 0x7d, 0x3f, 0xa1, 0xb1, 0x56, 0xc2, 0x8b, 0x16, 0x22, 0xf7, 0x38, 0xde, 0xf1, 0x26, 0x81, 0x46, 0x7f, 0x34, 0x9b, 0xd3, 0x49, 0x4b])); + assert_eq!(Bitcoin::RightShift64.cmr(), Cmr::from_byte_array([0xb2, 0x09, 0x5f, 0x2d, 0x47, 0x33, 0x5d, 0x5f, 0x98, 0xc8, 0x54, 0x34, 0xa2, 0xfa, 0xf5, 0xb0, 0xf7, 0x5c, 0xf8, 0x99, 0x01, 0x2a, 0x34, 0xbb, 0xcd, 0x0a, 0x14, 0xcb, 0xed, 0xb6, 0x11, 0x07])); + assert_eq!(Bitcoin::RightShift8.cmr(), Cmr::from_byte_array([0x4b, 0x2b, 0x1a, 0xa2, 0xef, 0x73, 0x21, 0x73, 0x17, 0x0d, 0x62, 0x1a, 0x38, 0xde, 0xb2, 0x61, 0xe4, 0x73, 0xc0, 0x7c, 0x55, 0x8b, 0x05, 0x5a, 0x25, 0xa8, 0x6e, 0x4e, 0x32, 0x1a, 0xfc, 0x04])); + assert_eq!(Bitcoin::RightShiftWith16.cmr(), Cmr::from_byte_array([0x14, 0xb7, 0x76, 0x85, 0x47, 0xb3, 0xd3, 0xf4, 0x7e, 0xe5, 0xc2, 0xb8, 0x0d, 0x9b, 0xda, 0xe2, 0xae, 0xc1, 0xf9, 0xc6, 0x59, 0x4e, 0xd3, 0x12, 0x7b, 0x12, 0x64, 0x5a, 0xdc, 0xf5, 0x97, 0x54])); + assert_eq!(Bitcoin::RightShiftWith32.cmr(), Cmr::from_byte_array([0x32, 0x7b, 0x6e, 0x98, 0xa6, 0xfd, 0x34, 0x0c, 0x60, 0xcf, 0x83, 0xaa, 0x64, 0x99, 0x33, 0x11, 0x4c, 0xb8, 0xd8, 0x4f, 0x59, 0x0e, 0x01, 0x21, 0x3a, 0x26, 0x10, 0x01, 0x2b, 0x46, 0x07, 0xea])); + assert_eq!(Bitcoin::RightShiftWith64.cmr(), Cmr::from_byte_array([0x06, 0x2f, 0xa7, 0x4a, 0xf3, 0x47, 0x6e, 0x59, 0x38, 0x7b, 0xe0, 0x8e, 0x69, 0x49, 0xa0, 0x05, 0x43, 0xbc, 0x84, 0xa2, 0xb6, 0x89, 0xea, 0x39, 0xad, 0x6e, 0xed, 0x7f, 0x75, 0x67, 0x85, 0xd4])); + assert_eq!(Bitcoin::RightShiftWith8.cmr(), Cmr::from_byte_array([0x14, 0x1b, 0xe4, 0x7e, 0x96, 0x7b, 0x2f, 0xd7, 0xc7, 0x12, 0x6c, 0x5a, 0xdf, 0x2d, 0xfe, 0x47, 0x31, 0x5b, 0xbc, 0x10, 0x53, 0xbb, 0xe6, 0x05, 0xb3, 0x88, 0x98, 0xdb, 0xed, 0x49, 0xf2, 0x27])); + assert_eq!(Bitcoin::ScalarAdd.cmr(), Cmr::from_byte_array([0x11, 0xdd, 0xbe, 0xba, 0xeb, 0xf4, 0x21, 0x80, 0xa0, 0xb7, 0xed, 0xdf, 0xfd, 0xc4, 0x8e, 0xc7, 0x51, 0x13, 0x30, 0xfb, 0x33, 0x15, 0xfa, 0x65, 0xd5, 0x8a, 0xff, 0x66, 0xb9, 0xca, 0xf2, 0xd4])); + assert_eq!(Bitcoin::ScalarInvert.cmr(), Cmr::from_byte_array([0xa6, 0x39, 0x27, 0x25, 0xbb, 0x2d, 0xad, 0xbb, 0x1e, 0x76, 0xdf, 0x2d, 0xec, 0x57, 0xdf, 0x55, 0xc3, 0xfc, 0xc5, 0x77, 0x3b, 0x62, 0x21, 0x8a, 0xec, 0x55, 0xa7, 0x5e, 0x14, 0xf3, 0xd6, 0x0d])); + assert_eq!(Bitcoin::ScalarIsZero.cmr(), Cmr::from_byte_array([0xf7, 0x5e, 0xda, 0x06, 0xce, 0x6a, 0xf0, 0x9f, 0xae, 0x37, 0xdb, 0x4e, 0x62, 0x25, 0xe6, 0xa8, 0xac, 0x86, 0xa2, 0x36, 0x37, 0x62, 0x7d, 0x62, 0x64, 0x09, 0x19, 0x0f, 0xf3, 0xb3, 0x9d, 0x90])); + assert_eq!(Bitcoin::ScalarMultiply.cmr(), Cmr::from_byte_array([0x4a, 0x61, 0x67, 0x2a, 0xce, 0xc4, 0x88, 0x77, 0x56, 0xde, 0x1d, 0xb6, 0x04, 0x21, 0xa1, 0x2b, 0x90, 0x1a, 0x85, 0x8a, 0x6e, 0xe6, 0x35, 0x2e, 0x55, 0x9d, 0x4c, 0xe5, 0x97, 0x33, 0x52, 0xbe])); + assert_eq!(Bitcoin::ScalarMultiplyLambda.cmr(), Cmr::from_byte_array([0x49, 0xea, 0x9c, 0x3f, 0xb1, 0xd8, 0xff, 0x52, 0xd2, 0xdb, 0x03, 0x46, 0x9f, 0xdf, 0xe8, 0x50, 0x50, 0x3f, 0xdd, 0xeb, 0x45, 0xe1, 0x6d, 0x26, 0xe8, 0x92, 0x8a, 0xdd, 0x25, 0x87, 0x0e, 0x91])); + assert_eq!(Bitcoin::ScalarNegate.cmr(), Cmr::from_byte_array([0x1d, 0xbf, 0x8b, 0x49, 0x1e, 0xc6, 0x65, 0x80, 0x3f, 0x63, 0x33, 0x30, 0xd3, 0xff, 0xb0, 0xe7, 0x81, 0xe6, 0x7c, 0x18, 0x01, 0xac, 0x9d, 0x49, 0xbb, 0xf4, 0x35, 0x89, 0xab, 0xf7, 0x82, 0xbf])); + assert_eq!(Bitcoin::ScalarNormalize.cmr(), Cmr::from_byte_array([0x46, 0x33, 0x18, 0x0e, 0xa0, 0x2c, 0x4d, 0xf7, 0x81, 0x9d, 0x3d, 0x54, 0xa4, 0x01, 0x73, 0x4f, 0x96, 0x5b, 0x31, 0xac, 0xc7, 0x84, 0x05, 0x4e, 0xbf, 0xb7, 0x31, 0x68, 0x16, 0xb0, 0x29, 0xec])); + assert_eq!(Bitcoin::ScalarSquare.cmr(), Cmr::from_byte_array([0x8a, 0x27, 0x9e, 0x6f, 0x61, 0x3a, 0xa9, 0xe9, 0x34, 0xf2, 0xf2, 0xa3, 0x43, 0xc0, 0xd3, 0x29, 0x1c, 0x36, 0x70, 0xe2, 0x97, 0xdd, 0xae, 0x20, 0x52, 0x9e, 0x82, 0x50, 0x69, 0xef, 0xea, 0x0e])); + assert_eq!(Bitcoin::Scale.cmr(), Cmr::from_byte_array([0x12, 0x6e, 0x22, 0x12, 0x5b, 0xac, 0x80, 0xb9, 0x9b, 0x7b, 0x73, 0x43, 0xb4, 0xe5, 0xe5, 0x86, 0x60, 0x82, 0x16, 0x10, 0x5d, 0x4d, 0xe6, 0xf7, 0x94, 0xad, 0xd3, 0x4e, 0x23, 0xb1, 0x95, 0xca])); + assert_eq!(Bitcoin::ScriptCMR.cmr(), Cmr::from_byte_array([0xa8, 0xa4, 0xa6, 0x22, 0x10, 0xb5, 0xe4, 0x95, 0x0e, 0x25, 0x34, 0x24, 0x7c, 0x74, 0x11, 0xd1, 0xc8, 0xff, 0x22, 0x86, 0x5b, 0x54, 0x56, 0xbb, 0xb2, 0x16, 0x38, 0xe9, 0x14, 0xf5, 0xe5, 0x28])); + assert_eq!(Bitcoin::Sha256Block.cmr(), Cmr::from_byte_array([0x45, 0x35, 0xf3, 0xe1, 0xab, 0x9f, 0x1b, 0x75, 0x7a, 0x06, 0x91, 0x37, 0xe1, 0xd5, 0xb1, 0xca, 0xad, 0x8e, 0x31, 0xf7, 0x8d, 0xc5, 0xfb, 0xd0, 0x73, 0x46, 0x49, 0xf9, 0x40, 0xa7, 0xfc, 0x96])); + assert_eq!(Bitcoin::Sha256Ctx8Add1.cmr(), Cmr::from_byte_array([0x9a, 0x47, 0x11, 0xb8, 0xc5, 0x69, 0x0e, 0x58, 0x7e, 0x5f, 0x79, 0xe6, 0x8d, 0x6e, 0xca, 0x04, 0x74, 0x58, 0xaa, 0x63, 0xb8, 0xbc, 0x9e, 0xe5, 0x68, 0x08, 0x6a, 0x4a, 0x1b, 0x56, 0xd8, 0x34])); + assert_eq!(Bitcoin::Sha256Ctx8Add128.cmr(), Cmr::from_byte_array([0x1c, 0xb1, 0xdb, 0x8a, 0x05, 0x5b, 0x31, 0x97, 0xac, 0xf0, 0xf0, 0x8c, 0xe9, 0xc6, 0x35, 0xad, 0xd6, 0x95, 0xb6, 0x0f, 0x23, 0x4b, 0x18, 0xe0, 0xb3, 0x23, 0xc9, 0x37, 0xb0, 0x38, 0x5a, 0xea])); + assert_eq!(Bitcoin::Sha256Ctx8Add16.cmr(), Cmr::from_byte_array([0xe0, 0x84, 0x54, 0x75, 0xeb, 0xb9, 0x01, 0x40, 0xfa, 0x4e, 0x01, 0xaf, 0x8a, 0x94, 0x35, 0x99, 0x1a, 0xd8, 0x7a, 0xf9, 0x8c, 0x08, 0xae, 0xce, 0x11, 0x0e, 0x99, 0xcb, 0xce, 0xcd, 0xee, 0x79])); + assert_eq!(Bitcoin::Sha256Ctx8Add2.cmr(), Cmr::from_byte_array([0x7d, 0x69, 0x13, 0x8f, 0x1c, 0x94, 0x2b, 0xee, 0x2f, 0xdf, 0x60, 0x0c, 0xe4, 0x4b, 0x36, 0xff, 0x97, 0x83, 0x9d, 0xc2, 0xbb, 0xda, 0xfb, 0xd5, 0xfa, 0xb4, 0xdf, 0xbc, 0x3c, 0x97, 0x6f, 0x29])); + assert_eq!(Bitcoin::Sha256Ctx8Add256.cmr(), Cmr::from_byte_array([0x4f, 0x5c, 0x29, 0xd5, 0x36, 0x86, 0xc0, 0x60, 0x62, 0xb3, 0x83, 0x24, 0xf8, 0xaf, 0xf1, 0x7e, 0xc5, 0x56, 0xa2, 0x95, 0xff, 0x09, 0x8b, 0x10, 0xe7, 0x05, 0xdd, 0x22, 0xe1, 0x3b, 0xc3, 0xc9])); + assert_eq!(Bitcoin::Sha256Ctx8Add32.cmr(), Cmr::from_byte_array([0xd5, 0x7b, 0x67, 0xb1, 0x74, 0xe7, 0x8e, 0x38, 0xf9, 0xbc, 0xa8, 0xe0, 0x7a, 0xdd, 0x61, 0xc7, 0x53, 0xe2, 0xc1, 0x56, 0xd8, 0xe9, 0x83, 0x2a, 0xa6, 0x62, 0x04, 0x55, 0x00, 0xf5, 0x1a, 0x80])); + assert_eq!(Bitcoin::Sha256Ctx8Add4.cmr(), Cmr::from_byte_array([0x95, 0xda, 0x32, 0x99, 0x3f, 0x5c, 0x7d, 0x00, 0x83, 0x06, 0x4c, 0xdf, 0xf1, 0xbe, 0xc3, 0xb9, 0x36, 0xc6, 0x38, 0x33, 0x7a, 0xde, 0xc5, 0x47, 0x48, 0x7a, 0xf2, 0x32, 0xd6, 0x9f, 0xdf, 0x65])); + assert_eq!(Bitcoin::Sha256Ctx8Add512.cmr(), Cmr::from_byte_array([0x4a, 0xcb, 0x16, 0x3a, 0xa4, 0x8f, 0x09, 0xd5, 0xf2, 0x6d, 0x2b, 0x2a, 0xb1, 0x88, 0xa6, 0xc6, 0xb6, 0xc4, 0xae, 0xdf, 0x23, 0xc9, 0x19, 0x00, 0x1c, 0x02, 0xee, 0x15, 0xb3, 0x37, 0xa9, 0x6e])); + assert_eq!(Bitcoin::Sha256Ctx8Add64.cmr(), Cmr::from_byte_array([0x52, 0xe5, 0x3e, 0xc5, 0x77, 0x0f, 0x9b, 0xe4, 0x06, 0x9a, 0xee, 0xfc, 0xb2, 0x13, 0x22, 0xb1, 0x3a, 0xb6, 0xe3, 0x94, 0x1f, 0xdc, 0x2c, 0x85, 0xf4, 0xb4, 0x1b, 0xe6, 0x7d, 0x38, 0xea, 0x7e])); + assert_eq!(Bitcoin::Sha256Ctx8Add8.cmr(), Cmr::from_byte_array([0xc2, 0x6b, 0x28, 0xaf, 0xe5, 0xe8, 0x66, 0xd8, 0x46, 0x16, 0x81, 0x4d, 0x1a, 0x13, 0xfb, 0x86, 0x30, 0xb9, 0xe8, 0x4e, 0x5d, 0x78, 0x15, 0x56, 0xc6, 0xd8, 0x23, 0x6e, 0xfb, 0x45, 0xdf, 0xf9])); + assert_eq!(Bitcoin::Sha256Ctx8AddBuffer511.cmr(), Cmr::from_byte_array([0xad, 0x69, 0x90, 0x46, 0x48, 0xa8, 0x23, 0x8d, 0x00, 0xd8, 0x51, 0x63, 0xfc, 0xe8, 0x19, 0x63, 0xa0, 0x04, 0x7a, 0xb5, 0x82, 0xbe, 0x97, 0xa4, 0x14, 0x00, 0x65, 0x59, 0x79, 0xcf, 0xdd, 0x28])); + assert_eq!(Bitcoin::Sha256Ctx8Finalize.cmr(), Cmr::from_byte_array([0x8e, 0x45, 0xbd, 0xc3, 0x87, 0xd4, 0xed, 0xfa, 0x73, 0x35, 0x25, 0xf3, 0xab, 0x19, 0xe4, 0x2b, 0x58, 0xec, 0xb1, 0xb5, 0xf6, 0xdc, 0xcf, 0x94, 0xed, 0xbf, 0x59, 0x95, 0x8a, 0xe3, 0xe1, 0x16])); + assert_eq!(Bitcoin::Sha256Ctx8Init.cmr(), Cmr::from_byte_array([0x63, 0x5f, 0x64, 0x05, 0x84, 0x86, 0x85, 0xc0, 0x11, 0xfe, 0xbd, 0x41, 0xfa, 0xac, 0x87, 0x4b, 0xbb, 0xf5, 0xb2, 0x4d, 0x5f, 0xb1, 0x2f, 0xed, 0xbc, 0xb6, 0xcb, 0xff, 0x95, 0xa0, 0xf3, 0x66])); + assert_eq!(Bitcoin::Sha256Iv.cmr(), Cmr::from_byte_array([0x12, 0xe4, 0x59, 0x37, 0x51, 0xc9, 0x46, 0x3b, 0x56, 0x25, 0x03, 0xc1, 0x40, 0xd7, 0x8b, 0x3b, 0x75, 0x7a, 0x1f, 0x4f, 0x16, 0x32, 0x1d, 0x28, 0x62, 0xd3, 0x25, 0x43, 0x85, 0x38, 0x97, 0x1b])); + assert_eq!(Bitcoin::SigAllHash.cmr(), Cmr::from_byte_array([0x09, 0x78, 0xb9, 0xe5, 0x0b, 0x9e, 0x8e, 0x09, 0x8b, 0x27, 0xf2, 0xb8, 0xb5, 0x9d, 0xe5, 0x4f, 0x62, 0xba, 0x7c, 0x13, 0x33, 0xdf, 0x3b, 0xed, 0x22, 0x1e, 0x26, 0x62, 0x68, 0x05, 0xbc, 0x55])); + assert_eq!(Bitcoin::Some1.cmr(), Cmr::from_byte_array([0x15, 0xca, 0x4e, 0x4b, 0x82, 0xc2, 0xf9, 0x1b, 0x9a, 0x79, 0x29, 0x92, 0xcd, 0xc1, 0xb2, 0x92, 0xab, 0x86, 0xa2, 0xd2, 0x93, 0x9c, 0x9a, 0x64, 0xb5, 0x0b, 0xe6, 0x0b, 0xda, 0x6a, 0xb4, 0xca])); + assert_eq!(Bitcoin::Some16.cmr(), Cmr::from_byte_array([0xa9, 0xdf, 0xbb, 0xea, 0xb5, 0x9d, 0xf7, 0x2a, 0x45, 0xfc, 0x3f, 0xc7, 0xac, 0x58, 0x1e, 0xc8, 0xda, 0x71, 0x3f, 0x2f, 0x81, 0x03, 0xf7, 0x87, 0xaa, 0x1c, 0xee, 0x4e, 0x0b, 0xa6, 0x48, 0x66])); + assert_eq!(Bitcoin::Some32.cmr(), Cmr::from_byte_array([0x46, 0x33, 0xa3, 0x97, 0x74, 0x2e, 0xf4, 0x82, 0xbe, 0x2f, 0xa3, 0xfb, 0x64, 0x10, 0xec, 0x79, 0xc3, 0x73, 0x83, 0x65, 0x69, 0xfb, 0xbc, 0xb1, 0xf9, 0x48, 0xec, 0x32, 0x48, 0x73, 0x78, 0xb7])); + assert_eq!(Bitcoin::Some64.cmr(), Cmr::from_byte_array([0x1d, 0xc2, 0x45, 0xac, 0x6f, 0x5b, 0x42, 0x2b, 0xd1, 0x88, 0x6e, 0xf5, 0x14, 0x4c, 0x4d, 0xc7, 0x2c, 0x96, 0x73, 0x15, 0x59, 0x66, 0x07, 0x6c, 0xd8, 0x39, 0x68, 0x1d, 0x9e, 0xc7, 0xf8, 0xf5])); + assert_eq!(Bitcoin::Some8.cmr(), Cmr::from_byte_array([0x33, 0xaf, 0xb9, 0xc6, 0x45, 0x4e, 0x59, 0x0e, 0xc1, 0x3e, 0xd7, 0x5e, 0x1b, 0x7d, 0x9c, 0x3a, 0x3d, 0xe6, 0x75, 0x2b, 0xcc, 0x7c, 0x1d, 0x4c, 0xb3, 0x63, 0xfa, 0x51, 0x82, 0x8b, 0xcb, 0x74])); + assert_eq!(Bitcoin::Subtract16.cmr(), Cmr::from_byte_array([0x4e, 0x06, 0xec, 0x31, 0x37, 0x62, 0x22, 0xe2, 0x5e, 0x27, 0xd0, 0x15, 0x9d, 0xc1, 0xc0, 0x71, 0x4a, 0x44, 0xca, 0x6a, 0xac, 0xf9, 0x50, 0x5c, 0xaa, 0xd2, 0x80, 0xe9, 0x73, 0xfb, 0x5c, 0xab])); + assert_eq!(Bitcoin::Subtract32.cmr(), Cmr::from_byte_array([0xb9, 0xc0, 0xf3, 0x6e, 0x75, 0x22, 0xa8, 0xd9, 0x49, 0x05, 0x0d, 0x51, 0x6a, 0x05, 0xce, 0x20, 0x3a, 0x1f, 0x9a, 0x9e, 0x37, 0x2f, 0xd2, 0x63, 0xde, 0x38, 0xb0, 0xe9, 0x03, 0x13, 0x41, 0x98])); + assert_eq!(Bitcoin::Subtract64.cmr(), Cmr::from_byte_array([0x1c, 0xdb, 0x5c, 0x74, 0xad, 0xd1, 0x02, 0xf5, 0x0f, 0x93, 0x8e, 0xd8, 0x86, 0xf4, 0x96, 0xe5, 0xba, 0xb2, 0x75, 0x5c, 0x3c, 0x48, 0x4e, 0x88, 0x87, 0x90, 0x3d, 0x2f, 0x6a, 0x57, 0xf3, 0xaa])); + assert_eq!(Bitcoin::Subtract8.cmr(), Cmr::from_byte_array([0x4f, 0x21, 0x17, 0xa0, 0xe8, 0x10, 0x59, 0xff, 0x0c, 0xd6, 0x4d, 0x84, 0x88, 0x65, 0x42, 0xe5, 0x75, 0xea, 0x8d, 0x6e, 0xc0, 0x31, 0x08, 0xfd, 0x0b, 0x50, 0x8b, 0x39, 0x20, 0x8c, 0xd0, 0xef])); + assert_eq!(Bitcoin::Swu.cmr(), Cmr::from_byte_array([0x00, 0xf5, 0x1f, 0x4f, 0x4b, 0xec, 0xe7, 0x90, 0x03, 0xec, 0xad, 0x48, 0x1a, 0x12, 0x5a, 0xf7, 0x17, 0x6e, 0x4d, 0xe9, 0x8c, 0x33, 0x92, 0x42, 0x5c, 0xb9, 0x14, 0x66, 0x26, 0xc1, 0x3b, 0x3b])); + assert_eq!(Bitcoin::TapdataInit.cmr(), Cmr::from_byte_array([0xa4, 0xd0, 0x22, 0xef, 0x5c, 0xf4, 0x67, 0xbc, 0xa0, 0x32, 0x5e, 0x46, 0x3f, 0xca, 0xce, 0x7c, 0xbd, 0xd6, 0x4f, 0xf8, 0xf7, 0x1c, 0x5c, 0x7f, 0x63, 0xe6, 0x07, 0x84, 0xaa, 0x0a, 0xc4, 0x86])); + assert_eq!(Bitcoin::TapleafHash.cmr(), Cmr::from_byte_array([0x0c, 0x07, 0x16, 0xfe, 0x5d, 0x97, 0x8e, 0xa8, 0xe0, 0xc7, 0x5a, 0xdc, 0x82, 0x10, 0xd6, 0x60, 0x06, 0x2e, 0x3d, 0xa0, 0x6f, 0x1a, 0x66, 0x61, 0x31, 0x79, 0x27, 0xd3, 0xb8, 0x4b, 0x50, 0x73])); + assert_eq!(Bitcoin::TapleafVersion.cmr(), Cmr::from_byte_array([0xe2, 0xec, 0xb1, 0xcb, 0x0e, 0xd4, 0xed, 0x93, 0x48, 0x35, 0x45, 0xfd, 0x8a, 0x62, 0xf8, 0xaa, 0x10, 0x17, 0x53, 0x49, 0xff, 0xcc, 0x5a, 0xd3, 0xde, 0x7f, 0x34, 0x84, 0xea, 0x1f, 0x10, 0x3f])); + assert_eq!(Bitcoin::Tappath.cmr(), Cmr::from_byte_array([0x99, 0xe8, 0x21, 0x1e, 0x8c, 0x1b, 0xe6, 0xd9, 0xca, 0x98, 0xd3, 0xd4, 0x3d, 0x91, 0x42, 0x56, 0x7e, 0x06, 0xa8, 0x40, 0x22, 0x39, 0x33, 0x03, 0xfa, 0xb0, 0xb5, 0x7d, 0x39, 0x40, 0x74, 0xe8])); + assert_eq!(Bitcoin::TappathHash.cmr(), Cmr::from_byte_array([0x02, 0x11, 0x54, 0x6d, 0x07, 0x78, 0xe7, 0x87, 0x14, 0x1e, 0xce, 0x65, 0xdf, 0x6c, 0xd1, 0xdb, 0x31, 0x38, 0x8f, 0xc1, 0x42, 0x19, 0x68, 0xc8, 0xcf, 0xd8, 0xd7, 0x59, 0x26, 0xdb, 0x47, 0xb3])); + assert_eq!(Bitcoin::TapEnvHash.cmr(), Cmr::from_byte_array([0x19, 0xd9, 0x94, 0x4c, 0x4d, 0x45, 0x7c, 0x70, 0xba, 0xbc, 0x45, 0xcc, 0xcb, 0xd5, 0x73, 0xb3, 0x9a, 0x51, 0xd0, 0xc9, 0x91, 0x15, 0xb4, 0x12, 0x78, 0x3b, 0x49, 0x00, 0x82, 0xfd, 0x0e, 0x58])); + assert_eq!(Bitcoin::TotalInputValue.cmr(), Cmr::from_byte_array([0x81, 0x28, 0x7a, 0x15, 0x89, 0xdd, 0xc2, 0x17, 0x99, 0x26, 0xb7, 0x06, 0x5e, 0x9b, 0x26, 0x77, 0xb7, 0xfb, 0x09, 0x9b, 0x95, 0xf9, 0x47, 0xa7, 0xdd, 0x59, 0x0c, 0xdd, 0x4c, 0xcf, 0x4a, 0x56])); + assert_eq!(Bitcoin::TotalOutputValue.cmr(), Cmr::from_byte_array([0xba, 0x03, 0x2f, 0x3e, 0x62, 0xf8, 0xfc, 0xb0, 0x4b, 0x04, 0x29, 0xa2, 0x53, 0xb5, 0xec, 0x57, 0xe4, 0xc8, 0x7a, 0xe2, 0xe9, 0x51, 0xe1, 0x45, 0xd7, 0x65, 0x0e, 0x7f, 0x0c, 0x63, 0xe5, 0x55])); + assert_eq!(Bitcoin::TransactionId.cmr(), Cmr::from_byte_array([0x5c, 0x49, 0xea, 0x98, 0x6b, 0x32, 0x8b, 0xe2, 0xa4, 0xe0, 0xb3, 0x15, 0xb6, 0xb3, 0xfe, 0xf2, 0x3c, 0x1f, 0x68, 0x56, 0xbb, 0xc3, 0xb0, 0x56, 0xc9, 0x9c, 0xf5, 0x9f, 0xbd, 0x54, 0x6e, 0x65])); + assert_eq!(Bitcoin::TxHash.cmr(), Cmr::from_byte_array([0x54, 0xe5, 0x3c, 0x99, 0x93, 0xab, 0xd5, 0x5d, 0x1f, 0x85, 0x23, 0xd2, 0xbb, 0x21, 0x7b, 0x32, 0xe6, 0xfe, 0x86, 0x1f, 0x84, 0xc9, 0x86, 0xb7, 0xee, 0x8b, 0xdc, 0x68, 0x81, 0x06, 0x87, 0x4a])); + assert_eq!(Bitcoin::TxIsFinal.cmr(), Cmr::from_byte_array([0x7b, 0x0e, 0x4f, 0x4c, 0xa8, 0xe5, 0xaf, 0x61, 0xa1, 0xd3, 0x45, 0x4e, 0x11, 0xef, 0x9a, 0xb6, 0x88, 0x70, 0x61, 0x21, 0x1c, 0x00, 0x90, 0xeb, 0xa9, 0x55, 0x3d, 0xa2, 0xe4, 0x5d, 0x84, 0x73])); + assert_eq!(Bitcoin::TxLockDistance.cmr(), Cmr::from_byte_array([0xb6, 0xfb, 0xaa, 0xc2, 0x10, 0xa3, 0x06, 0xbe, 0x8b, 0x58, 0xd0, 0xd7, 0xb1, 0x56, 0x3f, 0x62, 0x23, 0x36, 0xd2, 0xae, 0xb5, 0x6c, 0x39, 0x3d, 0x27, 0x64, 0x45, 0xa9, 0xa2, 0x2c, 0xc4, 0xa7])); + assert_eq!(Bitcoin::TxLockDuration.cmr(), Cmr::from_byte_array([0x53, 0x57, 0x28, 0x18, 0xe7, 0xe5, 0xb9, 0x8f, 0x96, 0x8c, 0x9d, 0xa7, 0xdf, 0x50, 0x90, 0xd9, 0x82, 0x6f, 0x9b, 0xcf, 0x84, 0xb6, 0x36, 0x39, 0x5e, 0xea, 0x32, 0x1b, 0x69, 0x09, 0xec, 0xe9])); + assert_eq!(Bitcoin::TxLockHeight.cmr(), Cmr::from_byte_array([0x44, 0x9f, 0x61, 0xdf, 0x1a, 0x7b, 0xad, 0x8d, 0x9e, 0x0a, 0x96, 0x67, 0x14, 0x22, 0x7e, 0x57, 0x10, 0x07, 0xf9, 0x3c, 0x51, 0x7b, 0x80, 0x5d, 0x61, 0x65, 0x10, 0xe8, 0xff, 0x62, 0x17, 0x2b])); + assert_eq!(Bitcoin::TxLockTime.cmr(), Cmr::from_byte_array([0x31, 0xdf, 0x36, 0x3f, 0x17, 0xb2, 0xcf, 0xc9, 0x7a, 0x1f, 0x93, 0x72, 0xc1, 0x4a, 0x32, 0x58, 0x64, 0xd7, 0xcb, 0x13, 0xaa, 0x8d, 0x52, 0x15, 0xfb, 0x25, 0x3d, 0x33, 0x10, 0x91, 0x77, 0x62])); + assert_eq!(Bitcoin::Verify.cmr(), Cmr::from_byte_array([0xcd, 0xca, 0x2a, 0x05, 0xe5, 0x2c, 0xef, 0xa5, 0x9d, 0xc7, 0xa5, 0xb0, 0xda, 0xe2, 0x20, 0x98, 0xfb, 0x89, 0x6e, 0x39, 0x13, 0xbf, 0xdd, 0x44, 0x6b, 0x59, 0x4e, 0x1f, 0x92, 0x50, 0x78, 0x3e])); + assert_eq!(Bitcoin::Version.cmr(), Cmr::from_byte_array([0x83, 0x73, 0x58, 0x64, 0x00, 0xb6, 0x79, 0x0b, 0x46, 0xab, 0x04, 0x10, 0x52, 0x3c, 0xf0, 0x1e, 0xb7, 0x4d, 0x10, 0xfa, 0xf4, 0x8a, 0x3a, 0xcc, 0x86, 0xc4, 0xc5, 0x1d, 0x06, 0xa5, 0x2c, 0x49])); + assert_eq!(Bitcoin::Xor1.cmr(), Cmr::from_byte_array([0x8c, 0x4e, 0x4e, 0x6e, 0xbf, 0x46, 0x30, 0xb2, 0x9b, 0x5a, 0x57, 0xea, 0x79, 0xf0, 0xc9, 0xaf, 0x6b, 0xff, 0x54, 0xc4, 0xd2, 0xd7, 0x69, 0xbf, 0x51, 0x59, 0x47, 0x74, 0xa5, 0x2b, 0x99, 0xc9])); + assert_eq!(Bitcoin::Xor16.cmr(), Cmr::from_byte_array([0xd9, 0xf0, 0xaf, 0x3f, 0xe3, 0xfd, 0x24, 0x7c, 0x1d, 0xf3, 0x4a, 0x25, 0x27, 0x13, 0xb2, 0xe9, 0x33, 0xa9, 0x45, 0xa5, 0x67, 0x19, 0x48, 0x7f, 0x8e, 0xd7, 0xf5, 0x63, 0xea, 0x86, 0x1a, 0xb5])); + assert_eq!(Bitcoin::Xor32.cmr(), Cmr::from_byte_array([0xd5, 0xae, 0x27, 0x12, 0xed, 0xea, 0xf6, 0x76, 0x52, 0x0f, 0xa3, 0xba, 0x0f, 0x40, 0xbf, 0x4a, 0x16, 0x57, 0x43, 0x7e, 0xff, 0xbd, 0x99, 0x86, 0xd0, 0x6a, 0xe8, 0x1b, 0x29, 0xa4, 0xf9, 0x8c])); + assert_eq!(Bitcoin::Xor64.cmr(), Cmr::from_byte_array([0xc4, 0xdf, 0x1c, 0xcf, 0x33, 0x3e, 0xde, 0xbd, 0xd4, 0x0d, 0xea, 0x9a, 0x0e, 0x6c, 0xbb, 0x83, 0x06, 0x31, 0xe8, 0x3a, 0x94, 0xbb, 0x77, 0x9f, 0xe6, 0x00, 0x7b, 0xc6, 0xcb, 0x53, 0xa5, 0x44])); + assert_eq!(Bitcoin::Xor8.cmr(), Cmr::from_byte_array([0x4a, 0xb1, 0x4a, 0x81, 0x4a, 0x39, 0x52, 0x8a, 0x80, 0xfd, 0xb4, 0x30, 0x58, 0x9b, 0xa4, 0x50, 0x10, 0x4b, 0x9c, 0x72, 0x09, 0xaa, 0x2f, 0xe2, 0x85, 0xcd, 0x60, 0xc0, 0x90, 0x43, 0x11, 0x4a])); + assert_eq!(Bitcoin::XorXor1.cmr(), Cmr::from_byte_array([0x18, 0xb9, 0x44, 0x6a, 0x41, 0x66, 0xa3, 0xfe, 0xe2, 0xbc, 0xb2, 0x54, 0x5b, 0xb9, 0x01, 0x18, 0xdc, 0xf0, 0xe8, 0xf8, 0x86, 0xa1, 0x07, 0x6d, 0x4c, 0x38, 0x60, 0x06, 0x0c, 0xde, 0x1a, 0x51])); + assert_eq!(Bitcoin::XorXor16.cmr(), Cmr::from_byte_array([0x94, 0x6c, 0xde, 0x87, 0x2e, 0x30, 0xe6, 0x50, 0x9d, 0xaf, 0xf4, 0x05, 0xf0, 0xe0, 0xfe, 0xfe, 0x27, 0x55, 0x47, 0xb4, 0x0e, 0xb2, 0x03, 0x84, 0xaf, 0xe9, 0xa8, 0x63, 0x60, 0xfc, 0x80, 0xef])); + assert_eq!(Bitcoin::XorXor32.cmr(), Cmr::from_byte_array([0x65, 0x27, 0xdf, 0x67, 0xa5, 0x0d, 0x14, 0x8d, 0xb4, 0xfc, 0x8f, 0xee, 0xc7, 0x84, 0x55, 0x64, 0x99, 0xa8, 0xc7, 0xf0, 0xfa, 0x7d, 0x28, 0xe6, 0x27, 0x8e, 0x99, 0x7f, 0x49, 0x59, 0xbe, 0x39])); + assert_eq!(Bitcoin::XorXor64.cmr(), Cmr::from_byte_array([0xf1, 0x62, 0xf9, 0xe6, 0x56, 0x63, 0xa6, 0x9a, 0xc5, 0xf9, 0x2a, 0x5e, 0xb5, 0x2c, 0x03, 0x32, 0x39, 0x2e, 0xdd, 0x1e, 0xd1, 0xba, 0x35, 0x5e, 0x6f, 0x19, 0x40, 0x6e, 0xab, 0xe3, 0xf6, 0xed])); + assert_eq!(Bitcoin::XorXor8.cmr(), Cmr::from_byte_array([0xe0, 0x6d, 0x69, 0x4c, 0x5b, 0x40, 0x7d, 0xda, 0xd7, 0xaa, 0x1f, 0x88, 0x07, 0x16, 0xbc, 0xb7, 0x0a, 0xcd, 0xba, 0x75, 0x85, 0xca, 0x40, 0x09, 0x9a, 0x0a, 0x0a, 0x61, 0xf3, 0xad, 0x2d, 0xb5])); + } + + #[test] + fn cost_matches_spec() { + assert_eq!(Bitcoin::Add16.cost(), Cost::from_milliweight(80)); + assert_eq!(Bitcoin::AnnexHash.cost(), Cost::from_milliweight(1491)); + assert_eq!(Bitcoin::Bip0340Verify.cost(), Cost::from_milliweight(49421)); + assert_eq!(Bitcoin::CheckSigVerify.cost(), Cost::from_milliweight(50000)); + assert_eq!(Bitcoin::Sha256Block.cost(), Cost::from_milliweight(765)); + assert_eq!(Bitcoin::Verify.cost(), Cost::from_milliweight(44)); + assert_eq!(Bitcoin::FullLeftShift64_32.cost(), Cost::from_milliweight(73)); + assert_eq!(Bitcoin::ScalarMultiply.cost(), Cost::from_milliweight(793)); + } } diff --git a/src/node/redeem.rs b/src/node/redeem.rs index c8748217..89202b5d 100644 --- a/src/node/redeem.rs +++ b/src/node/redeem.rs @@ -1050,7 +1050,7 @@ mod tests { #[test] #[cfg(all(feature = "elements", feature = "human_encoding"))] fn prune() { - use crate::jet::ElementsTxEnv; + use crate::jet::elements::ElementsEnv; let env = crate::jet::elements::ElementsEnv::dummy(); @@ -1083,7 +1083,7 @@ main := comp input comp process jet_verify : 1 -> 1"#; Value::product(Value::u64(0), Value::unit()), ), ]); - assert_correct_pruning::( + assert_correct_pruning::>( unpruned_prog, &unpruned_wit, pruned_prog, @@ -1111,7 +1111,7 @@ main := comp input comp process jet_verify : 1 -> 1"#; Value::product(Value::unit(), Value::u64(0)), ), ]); - assert_correct_pruning::( + assert_correct_pruning::>( unpruned_prog, &unpruned_wit, pruned_prog, @@ -1136,7 +1136,7 @@ process := assertl (take jet_is_zero_64) #{take jet_is_zero_64} : (2^64 + 1) * 1 main := comp input comp process jet_verify : 1 -> 1"#; let pruned_wit = HashMap::from([(Arc::from("wit1"), Value::left(Value::u64(0), Final::unit()))]); - assert_correct_pruning::( + assert_correct_pruning::>( prune_sum, &unpruned_wit, pruned_prog, @@ -1157,7 +1157,7 @@ main := comp input comp process jet_verify : 1 -> 1"#; Arc::from("wit1"), Value::right(Final::unit(), Value::u64(0)), )]); - assert_correct_pruning::( + assert_correct_pruning::>( prune_sum, &unpruned_wit, pruned_prog, diff --git a/src/policy/satisfy.rs b/src/policy/satisfy.rs index 534c5b5a..52c0713e 100644 --- a/src/policy/satisfy.rs +++ b/src/policy/satisfy.rs @@ -268,7 +268,7 @@ impl Policy { pub fn satisfy<'brand, S: Satisfier<'brand, Pk>>( &self, satisfier: &S, - env: &ElementsEnv>, + env: &ElementsEnv>, ) -> Result, SatisfierError> { let result = self.satisfy_internal(satisfier)?; match result.into_node() { @@ -332,10 +332,9 @@ mod tests { } } - fn get_satisfier<'tx, 'brand>( + fn get_satisfier<'tx, 'brand, T: core::borrow::Borrow>( context: types::Context<'brand>, - - env: &'tx ElementsEnv>, + env: &'tx ElementsEnv, ) -> PolicySatisfier<'tx, 'brand, XOnlyPublicKey> { let mut preimages = HashMap::new(); @@ -372,14 +371,17 @@ mod tests { } } - fn execute_successful(program: Arc, env: &ElementsEnv>) { + fn execute_successful>( + program: Arc, + env: &ElementsEnv, + ) { let mut mac = BitMachine::for_program(&program).unwrap(); assert!(mac.exec(&program, env).is_ok()); } - fn execute_unsuccessful( + fn execute_unsuccessful>( program: Arc, - env: &ElementsEnv>, + env: &ElementsEnv, ) { let mut mac = BitMachine::for_program(&program).unwrap(); assert!(mac.exec(&program, env).is_err()); diff --git a/src/policy/serialize.rs b/src/policy/serialize.rs index b56ca453..ae5c376a 100644 --- a/src/policy/serialize.rs +++ b/src/policy/serialize.rs @@ -257,7 +257,7 @@ mod tests { fn compile( policy: Policy, - ) -> (Arc, ElementsEnv>) { + ) -> (Arc, ElementsEnv) { let commit = policy.commit(); let env = ElementsEnv::dummy(); @@ -267,7 +267,7 @@ mod tests { fn execute_successful( commit: &CommitNode, witness: Vec, - env: &ElementsEnv>, + env: &ElementsEnv, ) -> bool { let finalized = commit .finalize(&mut SimpleFinalizer::new(witness.into_iter())) diff --git a/src/policy/sighash.rs b/src/policy/sighash.rs index 2766c454..d65ca7aa 100644 --- a/src/policy/sighash.rs +++ b/src/policy/sighash.rs @@ -81,7 +81,7 @@ impl + Clone> SighashCache { .collect(); let simplicity_env = crate::jet::elements::ElementsEnv::new( - self.tx.clone(), + (*self.tx).borrow(), utxos, input_index as u32, script_cmr,