diff --git a/.github/actions/config-variations/action.yml b/.github/actions/config-variations/action.yml index 661b6db44..7ddb5926f 100644 --- a/.github/actions/config-variations/action.yml +++ b/.github/actions/config-variations/action.yml @@ -31,7 +31,7 @@ runs: acvp: true opt: ${{ inputs.opt }} examples: true - extra_args: "--exclude-example basic_deterministic" + extra_args: "--exclude-example basic_deterministic --exclude-example disabled_apis --exclude-example disabled_apis_native" - name: "REDUCE_RAM" if: ${{ inputs.tests == 'all' || contains(inputs.tests, 'reduce-ram') }} uses: ./.github/actions/multi-functest @@ -60,7 +60,7 @@ runs: alloc: true opt: ${{ inputs.opt }} examples: true - extra_args: "--exclude-example basic_deterministic" + extra_args: "--exclude-example basic_deterministic --exclude-example disabled_apis --exclude-example disabled_apis_native" - name: "PCT enabled + broken" if: ${{ inputs.tests == 'all' || contains(inputs.tests, 'pct-enabled-broken') }} shell: bash diff --git a/Makefile b/Makefile index cb88f9b79..7752483aa 100644 --- a/Makefile +++ b/Makefile @@ -278,7 +278,9 @@ EXAMPLE_DIRS := \ examples/monolithic_build_multilevel \ examples/monolithic_build_multilevel_native \ examples/multilevel_build \ - examples/multilevel_build_native + examples/multilevel_build_native \ + examples/disabled_apis \ + examples/disabled_apis_native EXAMPLE_CLEAN_TARGETS := $(EXAMPLE_DIRS:%=clean-%) diff --git a/dev/aarch64_clean/meta.h b/dev/aarch64_clean/meta.h index 2923b8c55..688ba4c14 100644 --- a/dev/aarch64_clean/meta.h +++ b/dev/aarch64_clean/meta.h @@ -66,6 +66,7 @@ static MLD_INLINE int mld_rej_uniform_native(int32_t *r, unsigned len, return (int)mld_rej_uniform_asm(r, buf, buflen, mld_rej_uniform_table); } +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) #if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLDSA_ETA == 2 MLD_MUST_CHECK_RETURN_VALUE static MLD_INLINE int mld_rej_uniform_eta2_native(int32_t *r, unsigned len, @@ -119,7 +120,9 @@ static MLD_INLINE int mld_rej_uniform_eta4_native(int32_t *r, unsigned len, return (int)outlen; } #endif /* MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLDSA_ETA == 4 */ +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) #if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || \ (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87) MLD_MUST_CHECK_RETURN_VALUE @@ -140,6 +143,7 @@ static MLD_INLINE int mld_poly_decompose_88_native(int32_t *a1, int32_t *a0) } #endif /* MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 44 \ */ +#endif /* !MLD_CONFIG_NO_SIGN_API */ MLD_MUST_CHECK_RETURN_VALUE static MLD_INLINE int mld_poly_caddq_native(int32_t a[MLDSA_N]) @@ -148,6 +152,7 @@ static MLD_INLINE int mld_poly_caddq_native(int32_t a[MLDSA_N]) return MLD_NATIVE_FUNC_SUCCESS; } +#if !defined(MLD_CONFIG_NO_VERIFY_API) #if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || \ (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87) MLD_MUST_CHECK_RETURN_VALUE @@ -170,6 +175,7 @@ static MLD_INLINE int mld_poly_use_hint_88_native(int32_t *b, const int32_t *a, } #endif /* MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 44 \ */ +#endif /* !MLD_CONFIG_NO_VERIFY_API */ MLD_MUST_CHECK_RETURN_VALUE static MLD_INLINE int mld_poly_chknorm_native(const int32_t *a, int32_t B) @@ -177,6 +183,7 @@ static MLD_INLINE int mld_poly_chknorm_native(const int32_t *a, int32_t B) return mld_poly_chknorm_asm(a, B); } +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) #if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLD_CONFIG_PARAMETER_SET == 44 MLD_MUST_CHECK_RETURN_VALUE static MLD_INLINE int mld_polyz_unpack_17_native(int32_t *r, const uint8_t *buf) @@ -206,6 +213,7 @@ static MLD_INLINE int mld_poly_pointwise_montgomery_native( mld_poly_pointwise_montgomery_asm(out, in0, in1); return MLD_NATIVE_FUNC_SUCCESS; } +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ #if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLDSA_L == 4 MLD_MUST_CHECK_RETURN_VALUE diff --git a/dev/aarch64_clean/src/arith_native_aarch64.h b/dev/aarch64_clean/src/arith_native_aarch64.h index 9737b70e4..17e10ae99 100644 --- a/dev/aarch64_clean/src/arith_native_aarch64.h +++ b/dev/aarch64_clean/src/arith_native_aarch64.h @@ -26,13 +26,22 @@ extern const int32_t mld_aarch64_intt_zetas_layer123456[]; #define mld_rej_uniform_table MLD_NAMESPACE(rej_uniform_table) extern const uint8_t mld_rej_uniform_table[]; +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) #define mld_rej_uniform_eta_table MLD_NAMESPACE(rej_uniform_eta_table) extern const uint8_t mld_rej_uniform_eta_table[]; +#endif +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) +#if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLD_CONFIG_PARAMETER_SET == 44 #define mld_polyz_unpack_17_indices MLD_NAMESPACE(polyz_unpack_17_indices) extern const uint8_t mld_polyz_unpack_17_indices[]; +#endif +#if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || \ + (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87) #define mld_polyz_unpack_19_indices MLD_NAMESPACE(polyz_unpack_19_indices) extern const uint8_t mld_polyz_unpack_19_indices[]; +#endif +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ /* @@ -60,6 +69,7 @@ MLD_MUST_CHECK_RETURN_VALUE uint64_t mld_rej_uniform_asm(int32_t *r, const uint8_t *buf, unsigned buflen, const uint8_t *table); +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) #define mld_rej_uniform_eta2_asm MLD_NAMESPACE(rej_uniform_eta2_asm) MLD_MUST_CHECK_RETURN_VALUE uint64_t mld_rej_uniform_eta2_asm(int32_t *r, const uint8_t *buf, @@ -69,12 +79,15 @@ uint64_t mld_rej_uniform_eta2_asm(int32_t *r, const uint8_t *buf, MLD_MUST_CHECK_RETURN_VALUE uint64_t mld_rej_uniform_eta4_asm(int32_t *r, const uint8_t *buf, unsigned buflen, const uint8_t *table); +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) #define mld_poly_decompose_32_asm MLD_NAMESPACE(poly_decompose_32_asm) void mld_poly_decompose_32_asm(int32_t *a1, int32_t *a0); #define mld_poly_decompose_88_asm MLD_NAMESPACE(poly_decompose_88_asm) void mld_poly_decompose_88_asm(int32_t *a1, int32_t *a0); +#endif /* !MLD_CONFIG_NO_SIGN_API */ #define mld_poly_caddq_asm MLD_NAMESPACE(poly_caddq_asm) void mld_poly_caddq_asm(int32_t *a) @@ -87,11 +100,13 @@ __contract__( ensures(array_bound(a, 0, MLDSA_N, 0, MLDSA_Q)) ); +#if !defined(MLD_CONFIG_NO_VERIFY_API) #define mld_poly_use_hint_32_asm MLD_NAMESPACE(poly_use_hint_32_asm) void mld_poly_use_hint_32_asm(int32_t *b, const int32_t *a, const int32_t *h); #define mld_poly_use_hint_88_asm MLD_NAMESPACE(poly_use_hint_88_asm) void mld_poly_use_hint_88_asm(int32_t *b, const int32_t *a, const int32_t *h); +#endif /* !MLD_CONFIG_NO_VERIFY_API */ #define mld_poly_chknorm_asm MLD_NAMESPACE(poly_chknorm_asm) MLD_MUST_CHECK_RETURN_VALUE @@ -106,6 +121,7 @@ __contract__( ensures((return_value == 0) == array_abs_bound(a, 0, MLDSA_N, B)) ); +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) #define mld_polyz_unpack_17_asm MLD_NAMESPACE(polyz_unpack_17_asm) void mld_polyz_unpack_17_asm(int32_t *r, const uint8_t *buf, const uint8_t *indices); @@ -118,6 +134,7 @@ void mld_polyz_unpack_19_asm(int32_t *r, const uint8_t *buf, MLD_NAMESPACE(poly_pointwise_montgomery_asm) void mld_poly_pointwise_montgomery_asm(int32_t *, const int32_t *, const int32_t *); +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ #define mld_polyvecl_pointwise_acc_montgomery_l4_asm \ MLD_NAMESPACE(polyvecl_pointwise_acc_montgomery_l4_asm) diff --git a/dev/aarch64_clean/src/pointwise_montgomery.S b/dev/aarch64_clean/src/pointwise_montgomery.S index e6dc6b317..e300687b0 100644 --- a/dev/aarch64_clean/src/pointwise_montgomery.S +++ b/dev/aarch64_clean/src/pointwise_montgomery.S @@ -3,7 +3,9 @@ */ #include "../../../common.h" -#if defined(MLD_ARITH_BACKEND_AARCH64) && !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) +#if defined(MLD_ARITH_BACKEND_AARCH64) && \ + (!defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API)) && \ + !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) /* simpasm: header-end */ .macro montgomery_reduce_long res, inl, inh @@ -164,4 +166,5 @@ poly_pointwise_montgomery_loop_start: .unreq q_c_3 /* simpasm: footer-start */ -#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED */ +#endif /* MLD_ARITH_BACKEND_AARCH64 && (!MLD_CONFIG_NO_SIGN_API || \ + !MLD_CONFIG_NO_VERIFY_API) && !MLD_CONFIG_MULTILEVEL_NO_SHARED */ diff --git a/dev/aarch64_clean/src/poly_decompose_32_asm.S b/dev/aarch64_clean/src/poly_decompose_32_asm.S index 15b50a751..70bbd1dd9 100644 --- a/dev/aarch64_clean/src/poly_decompose_32_asm.S +++ b/dev/aarch64_clean/src/poly_decompose_32_asm.S @@ -4,7 +4,7 @@ */ #include "../../../common.h" -#if defined(MLD_ARITH_BACKEND_AARCH64) && !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ +#if defined(MLD_ARITH_BACKEND_AARCH64) && !defined(MLD_CONFIG_NO_SIGN_API) && !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87)) /* simpasm: header-end */ @@ -137,6 +137,7 @@ poly_decompose_32_loop: .unreq gamma2_2x .unreq barrett_const /* simpasm: footer-start */ -#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ +#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_NO_SIGN_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 65 \ || MLD_CONFIG_PARAMETER_SET == 87) */ diff --git a/dev/aarch64_clean/src/poly_decompose_88_asm.S b/dev/aarch64_clean/src/poly_decompose_88_asm.S index a1167705b..90576b5aa 100644 --- a/dev/aarch64_clean/src/poly_decompose_88_asm.S +++ b/dev/aarch64_clean/src/poly_decompose_88_asm.S @@ -4,7 +4,7 @@ */ #include "../../../common.h" -#if defined(MLD_ARITH_BACKEND_AARCH64) && !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ +#if defined(MLD_ARITH_BACKEND_AARCH64) && !defined(MLD_CONFIG_NO_SIGN_API) && !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLD_CONFIG_PARAMETER_SET == 44) /* simpasm: header-end */ @@ -135,6 +135,7 @@ poly_decompose_88_loop: .unreq gamma2_2x .unreq barrett_const /* simpasm: footer-start */ -#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ +#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_NO_SIGN_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 44) \ */ diff --git a/dev/aarch64_clean/src/poly_use_hint_32_asm.S b/dev/aarch64_clean/src/poly_use_hint_32_asm.S index a218335b4..d5d5d5894 100644 --- a/dev/aarch64_clean/src/poly_use_hint_32_asm.S +++ b/dev/aarch64_clean/src/poly_use_hint_32_asm.S @@ -4,7 +4,7 @@ */ #include "../../../common.h" -#if defined(MLD_ARITH_BACKEND_AARCH64) && !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ +#if defined(MLD_ARITH_BACKEND_AARCH64) && !defined(MLD_CONFIG_NO_VERIFY_API) && !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87)) /* simpasm: header-end */ @@ -120,6 +120,7 @@ poly_use_hint_32_loop: .unreq barrett_const .unreq mask_15 /* simpasm: footer-start */ -#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ +#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_NO_VERIFY_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 65 \ || MLD_CONFIG_PARAMETER_SET == 87) */ diff --git a/dev/aarch64_clean/src/poly_use_hint_88_asm.S b/dev/aarch64_clean/src/poly_use_hint_88_asm.S index 9d530832f..93c37b06b 100644 --- a/dev/aarch64_clean/src/poly_use_hint_88_asm.S +++ b/dev/aarch64_clean/src/poly_use_hint_88_asm.S @@ -4,7 +4,7 @@ */ #include "../../../common.h" -#if defined(MLD_ARITH_BACKEND_AARCH64) && !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ +#if defined(MLD_ARITH_BACKEND_AARCH64) && !defined(MLD_CONFIG_NO_VERIFY_API) && !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLD_CONFIG_PARAMETER_SET == 44) /* simpasm: header-end */ @@ -122,6 +122,7 @@ poly_use_hint_88_loop: .unreq barrett_const .unreq const_43 /* simpasm: footer-start */ -#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ +#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_NO_VERIFY_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 44) \ */ diff --git a/dev/aarch64_clean/src/polyz_unpack_17_asm.S b/dev/aarch64_clean/src/polyz_unpack_17_asm.S index 569ef51da..32b289648 100644 --- a/dev/aarch64_clean/src/polyz_unpack_17_asm.S +++ b/dev/aarch64_clean/src/polyz_unpack_17_asm.S @@ -5,7 +5,9 @@ */ #include "../../../common.h" -#if defined(MLD_ARITH_BACKEND_AARCH64) && !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ +#if defined(MLD_ARITH_BACKEND_AARCH64) && \ + (!defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API)) && \ + !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLD_CONFIG_PARAMETER_SET == 44) /* simpasm: header-end */ @@ -101,6 +103,7 @@ polyz_unpack_17_loop: .unreq mask .unreq gamma1 /* simpasm: footer-start */ -#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ +#endif /* MLD_ARITH_BACKEND_AARCH64 && (!MLD_CONFIG_NO_SIGN_API || \ + !MLD_CONFIG_NO_VERIFY_API) && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 44) \ */ diff --git a/dev/aarch64_clean/src/polyz_unpack_19_asm.S b/dev/aarch64_clean/src/polyz_unpack_19_asm.S index ac6b4b420..65754d655 100644 --- a/dev/aarch64_clean/src/polyz_unpack_19_asm.S +++ b/dev/aarch64_clean/src/polyz_unpack_19_asm.S @@ -5,7 +5,9 @@ */ #include "../../../common.h" -#if defined(MLD_ARITH_BACKEND_AARCH64) && !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ +#if defined(MLD_ARITH_BACKEND_AARCH64) && \ + (!defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API)) && \ + !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87)) /* simpasm: header-end */ @@ -98,6 +100,7 @@ polyz_unpack_19_loop: .unreq mask .unreq gamma1 /* simpasm: footer-start */ -#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ +#endif /* MLD_ARITH_BACKEND_AARCH64 && (!MLD_CONFIG_NO_SIGN_API || \ + !MLD_CONFIG_NO_VERIFY_API) && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 65 \ || MLD_CONFIG_PARAMETER_SET == 87) */ diff --git a/dev/aarch64_clean/src/polyz_unpack_table.c b/dev/aarch64_clean/src/polyz_unpack_table.c index 1fb8ff400..3d482285c 100644 --- a/dev/aarch64_clean/src/polyz_unpack_table.c +++ b/dev/aarch64_clean/src/polyz_unpack_table.c @@ -16,22 +16,32 @@ #include "arith_native_aarch64.h" +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) /* Table of indices used for tbl instructions in polyz_unpack_{17,19}. * See autogen for details. */ +#if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLD_CONFIG_PARAMETER_SET == 44 MLD_ALIGN const uint8_t mld_polyz_unpack_17_indices[] = { 0, 1, 2, 255, 2, 3, 4, 255, 4, 5, 6, 255, 6, 7, 8, 255, 9, 10, 11, 255, 11, 12, 13, 255, 13, 14, 15, 255, 15, 16, 17, 255, 2, 3, 4, 255, 4, 5, 6, 255, 6, 7, 8, 255, 8, 9, 10, 255, 11, 12, 13, 255, 13, 14, 15, 255, 15, 16, 17, 255, 17, 18, 19, 255, }; +#endif /* MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 44 \ + */ +#if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || \ + (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87) MLD_ALIGN const uint8_t mld_polyz_unpack_19_indices[] = { 0, 1, 2, 255, 2, 3, 4, 255, 5, 6, 7, 255, 7, 8, 9, 255, 10, 11, 12, 255, 12, 13, 14, 255, 15, 16, 17, 255, 17, 18, 19, 255, 4, 5, 6, 255, 6, 7, 8, 255, 9, 10, 11, 255, 11, 12, 13, 255, 14, 15, 16, 255, 16, 17, 18, 255, 19, 20, 21, 255, 21, 22, 23, 255, }; +#endif /* MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 65 \ + || MLD_CONFIG_PARAMETER_SET == 87 */ + +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ #else /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED */ diff --git a/dev/aarch64_clean/src/rej_uniform_eta2_asm.S b/dev/aarch64_clean/src/rej_uniform_eta2_asm.S index c7c84b1ca..687c04bf4 100644 --- a/dev/aarch64_clean/src/rej_uniform_eta2_asm.S +++ b/dev/aarch64_clean/src/rej_uniform_eta2_asm.S @@ -6,6 +6,7 @@ #include "../../../common.h" #if defined(MLD_ARITH_BACKEND_AARCH64) && \ + !defined(MLD_CONFIG_NO_KEYPAIR_API) && \ !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLDSA_ETA == 2) /* simpasm: header-end */ @@ -335,5 +336,6 @@ rej_uniform_eta2_final_copy: #undef MLD_STACK_SIZE /* simpasm: footer-start */ -#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ +#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_NO_KEYPAIR_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLDSA_ETA == 2) */ diff --git a/dev/aarch64_clean/src/rej_uniform_eta4_asm.S b/dev/aarch64_clean/src/rej_uniform_eta4_asm.S index 9ade1938f..158bf6cd4 100644 --- a/dev/aarch64_clean/src/rej_uniform_eta4_asm.S +++ b/dev/aarch64_clean/src/rej_uniform_eta4_asm.S @@ -6,6 +6,7 @@ #include "../../../common.h" #if defined(MLD_ARITH_BACKEND_AARCH64) && \ + !defined(MLD_CONFIG_NO_KEYPAIR_API) && \ !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLDSA_ETA == 4) /* simpasm: header-end */ @@ -312,5 +313,6 @@ rej_uniform_eta4_final_copy: #undef MLD_STACK_SIZE /* simpasm: footer-start */ -#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ +#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_NO_KEYPAIR_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLDSA_ETA == 4) */ diff --git a/dev/aarch64_clean/src/rej_uniform_eta_table.c b/dev/aarch64_clean/src/rej_uniform_eta_table.c index 13ce6df66..395e99cc0 100644 --- a/dev/aarch64_clean/src/rej_uniform_eta_table.c +++ b/dev/aarch64_clean/src/rej_uniform_eta_table.c @@ -11,7 +11,8 @@ #include "../../../common.h" -#if defined(MLD_ARITH_BACKEND_AARCH64) && \ +#if defined(MLD_ARITH_BACKEND_AARCH64) && \ + !defined(MLD_CONFIG_NO_KEYPAIR_API) && \ !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) #include "arith_native_aarch64.h" @@ -536,8 +537,10 @@ MLD_ALIGN const uint8_t mld_rej_uniform_eta_table[] = { 8, 9, 10, 11, 12, 13, 14, 15 /* 255 */, }; -#else /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED */ +#else /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_NO_KEYPAIR_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED */ MLD_EMPTY_CU(aarch64_rej_uniform_eta_table) -#endif /* !(MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED) */ +#endif /* !(MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_NO_KEYPAIR_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED) */ diff --git a/dev/aarch64_opt/meta.h b/dev/aarch64_opt/meta.h index 2923b8c55..688ba4c14 100644 --- a/dev/aarch64_opt/meta.h +++ b/dev/aarch64_opt/meta.h @@ -66,6 +66,7 @@ static MLD_INLINE int mld_rej_uniform_native(int32_t *r, unsigned len, return (int)mld_rej_uniform_asm(r, buf, buflen, mld_rej_uniform_table); } +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) #if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLDSA_ETA == 2 MLD_MUST_CHECK_RETURN_VALUE static MLD_INLINE int mld_rej_uniform_eta2_native(int32_t *r, unsigned len, @@ -119,7 +120,9 @@ static MLD_INLINE int mld_rej_uniform_eta4_native(int32_t *r, unsigned len, return (int)outlen; } #endif /* MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLDSA_ETA == 4 */ +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) #if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || \ (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87) MLD_MUST_CHECK_RETURN_VALUE @@ -140,6 +143,7 @@ static MLD_INLINE int mld_poly_decompose_88_native(int32_t *a1, int32_t *a0) } #endif /* MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 44 \ */ +#endif /* !MLD_CONFIG_NO_SIGN_API */ MLD_MUST_CHECK_RETURN_VALUE static MLD_INLINE int mld_poly_caddq_native(int32_t a[MLDSA_N]) @@ -148,6 +152,7 @@ static MLD_INLINE int mld_poly_caddq_native(int32_t a[MLDSA_N]) return MLD_NATIVE_FUNC_SUCCESS; } +#if !defined(MLD_CONFIG_NO_VERIFY_API) #if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || \ (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87) MLD_MUST_CHECK_RETURN_VALUE @@ -170,6 +175,7 @@ static MLD_INLINE int mld_poly_use_hint_88_native(int32_t *b, const int32_t *a, } #endif /* MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 44 \ */ +#endif /* !MLD_CONFIG_NO_VERIFY_API */ MLD_MUST_CHECK_RETURN_VALUE static MLD_INLINE int mld_poly_chknorm_native(const int32_t *a, int32_t B) @@ -177,6 +183,7 @@ static MLD_INLINE int mld_poly_chknorm_native(const int32_t *a, int32_t B) return mld_poly_chknorm_asm(a, B); } +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) #if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLD_CONFIG_PARAMETER_SET == 44 MLD_MUST_CHECK_RETURN_VALUE static MLD_INLINE int mld_polyz_unpack_17_native(int32_t *r, const uint8_t *buf) @@ -206,6 +213,7 @@ static MLD_INLINE int mld_poly_pointwise_montgomery_native( mld_poly_pointwise_montgomery_asm(out, in0, in1); return MLD_NATIVE_FUNC_SUCCESS; } +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ #if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLDSA_L == 4 MLD_MUST_CHECK_RETURN_VALUE diff --git a/dev/aarch64_opt/src/arith_native_aarch64.h b/dev/aarch64_opt/src/arith_native_aarch64.h index 9737b70e4..17e10ae99 100644 --- a/dev/aarch64_opt/src/arith_native_aarch64.h +++ b/dev/aarch64_opt/src/arith_native_aarch64.h @@ -26,13 +26,22 @@ extern const int32_t mld_aarch64_intt_zetas_layer123456[]; #define mld_rej_uniform_table MLD_NAMESPACE(rej_uniform_table) extern const uint8_t mld_rej_uniform_table[]; +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) #define mld_rej_uniform_eta_table MLD_NAMESPACE(rej_uniform_eta_table) extern const uint8_t mld_rej_uniform_eta_table[]; +#endif +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) +#if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLD_CONFIG_PARAMETER_SET == 44 #define mld_polyz_unpack_17_indices MLD_NAMESPACE(polyz_unpack_17_indices) extern const uint8_t mld_polyz_unpack_17_indices[]; +#endif +#if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || \ + (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87) #define mld_polyz_unpack_19_indices MLD_NAMESPACE(polyz_unpack_19_indices) extern const uint8_t mld_polyz_unpack_19_indices[]; +#endif +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ /* @@ -60,6 +69,7 @@ MLD_MUST_CHECK_RETURN_VALUE uint64_t mld_rej_uniform_asm(int32_t *r, const uint8_t *buf, unsigned buflen, const uint8_t *table); +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) #define mld_rej_uniform_eta2_asm MLD_NAMESPACE(rej_uniform_eta2_asm) MLD_MUST_CHECK_RETURN_VALUE uint64_t mld_rej_uniform_eta2_asm(int32_t *r, const uint8_t *buf, @@ -69,12 +79,15 @@ uint64_t mld_rej_uniform_eta2_asm(int32_t *r, const uint8_t *buf, MLD_MUST_CHECK_RETURN_VALUE uint64_t mld_rej_uniform_eta4_asm(int32_t *r, const uint8_t *buf, unsigned buflen, const uint8_t *table); +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) #define mld_poly_decompose_32_asm MLD_NAMESPACE(poly_decompose_32_asm) void mld_poly_decompose_32_asm(int32_t *a1, int32_t *a0); #define mld_poly_decompose_88_asm MLD_NAMESPACE(poly_decompose_88_asm) void mld_poly_decompose_88_asm(int32_t *a1, int32_t *a0); +#endif /* !MLD_CONFIG_NO_SIGN_API */ #define mld_poly_caddq_asm MLD_NAMESPACE(poly_caddq_asm) void mld_poly_caddq_asm(int32_t *a) @@ -87,11 +100,13 @@ __contract__( ensures(array_bound(a, 0, MLDSA_N, 0, MLDSA_Q)) ); +#if !defined(MLD_CONFIG_NO_VERIFY_API) #define mld_poly_use_hint_32_asm MLD_NAMESPACE(poly_use_hint_32_asm) void mld_poly_use_hint_32_asm(int32_t *b, const int32_t *a, const int32_t *h); #define mld_poly_use_hint_88_asm MLD_NAMESPACE(poly_use_hint_88_asm) void mld_poly_use_hint_88_asm(int32_t *b, const int32_t *a, const int32_t *h); +#endif /* !MLD_CONFIG_NO_VERIFY_API */ #define mld_poly_chknorm_asm MLD_NAMESPACE(poly_chknorm_asm) MLD_MUST_CHECK_RETURN_VALUE @@ -106,6 +121,7 @@ __contract__( ensures((return_value == 0) == array_abs_bound(a, 0, MLDSA_N, B)) ); +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) #define mld_polyz_unpack_17_asm MLD_NAMESPACE(polyz_unpack_17_asm) void mld_polyz_unpack_17_asm(int32_t *r, const uint8_t *buf, const uint8_t *indices); @@ -118,6 +134,7 @@ void mld_polyz_unpack_19_asm(int32_t *r, const uint8_t *buf, MLD_NAMESPACE(poly_pointwise_montgomery_asm) void mld_poly_pointwise_montgomery_asm(int32_t *, const int32_t *, const int32_t *); +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ #define mld_polyvecl_pointwise_acc_montgomery_l4_asm \ MLD_NAMESPACE(polyvecl_pointwise_acc_montgomery_l4_asm) diff --git a/dev/aarch64_opt/src/pointwise_montgomery.S b/dev/aarch64_opt/src/pointwise_montgomery.S index e6dc6b317..e300687b0 100644 --- a/dev/aarch64_opt/src/pointwise_montgomery.S +++ b/dev/aarch64_opt/src/pointwise_montgomery.S @@ -3,7 +3,9 @@ */ #include "../../../common.h" -#if defined(MLD_ARITH_BACKEND_AARCH64) && !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) +#if defined(MLD_ARITH_BACKEND_AARCH64) && \ + (!defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API)) && \ + !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) /* simpasm: header-end */ .macro montgomery_reduce_long res, inl, inh @@ -164,4 +166,5 @@ poly_pointwise_montgomery_loop_start: .unreq q_c_3 /* simpasm: footer-start */ -#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED */ +#endif /* MLD_ARITH_BACKEND_AARCH64 && (!MLD_CONFIG_NO_SIGN_API || \ + !MLD_CONFIG_NO_VERIFY_API) && !MLD_CONFIG_MULTILEVEL_NO_SHARED */ diff --git a/dev/aarch64_opt/src/poly_decompose_32_asm.S b/dev/aarch64_opt/src/poly_decompose_32_asm.S index 1f5b16ebd..18c0a4d54 100644 --- a/dev/aarch64_opt/src/poly_decompose_32_asm.S +++ b/dev/aarch64_opt/src/poly_decompose_32_asm.S @@ -4,7 +4,7 @@ */ #include "../../../common.h" -#if defined(MLD_ARITH_BACKEND_AARCH64) && !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ +#if defined(MLD_ARITH_BACKEND_AARCH64) && !defined(MLD_CONFIG_NO_SIGN_API) && !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87)) /* simpasm: header-end */ @@ -108,6 +108,7 @@ poly_decompose_32_loop: .unreq gamma2_2x .unreq barrett_const /* simpasm: footer-start */ -#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ +#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_NO_SIGN_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 65 \ || MLD_CONFIG_PARAMETER_SET == 87) */ diff --git a/dev/aarch64_opt/src/poly_decompose_88_asm.S b/dev/aarch64_opt/src/poly_decompose_88_asm.S index ef569d445..bb92ca823 100644 --- a/dev/aarch64_opt/src/poly_decompose_88_asm.S +++ b/dev/aarch64_opt/src/poly_decompose_88_asm.S @@ -4,7 +4,7 @@ */ #include "../../../common.h" -#if defined(MLD_ARITH_BACKEND_AARCH64) && !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ +#if defined(MLD_ARITH_BACKEND_AARCH64) && !defined(MLD_CONFIG_NO_SIGN_API) && !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLD_CONFIG_PARAMETER_SET == 44) /* simpasm: header-end */ @@ -106,6 +106,7 @@ poly_decompose_88_loop: .unreq gamma2_2x .unreq barrett_const /* simpasm: footer-start */ -#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ +#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_NO_SIGN_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 44) \ */ diff --git a/dev/aarch64_opt/src/poly_use_hint_32_asm.S b/dev/aarch64_opt/src/poly_use_hint_32_asm.S index a218335b4..d5d5d5894 100644 --- a/dev/aarch64_opt/src/poly_use_hint_32_asm.S +++ b/dev/aarch64_opt/src/poly_use_hint_32_asm.S @@ -4,7 +4,7 @@ */ #include "../../../common.h" -#if defined(MLD_ARITH_BACKEND_AARCH64) && !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ +#if defined(MLD_ARITH_BACKEND_AARCH64) && !defined(MLD_CONFIG_NO_VERIFY_API) && !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87)) /* simpasm: header-end */ @@ -120,6 +120,7 @@ poly_use_hint_32_loop: .unreq barrett_const .unreq mask_15 /* simpasm: footer-start */ -#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ +#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_NO_VERIFY_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 65 \ || MLD_CONFIG_PARAMETER_SET == 87) */ diff --git a/dev/aarch64_opt/src/poly_use_hint_88_asm.S b/dev/aarch64_opt/src/poly_use_hint_88_asm.S index 9d530832f..93c37b06b 100644 --- a/dev/aarch64_opt/src/poly_use_hint_88_asm.S +++ b/dev/aarch64_opt/src/poly_use_hint_88_asm.S @@ -4,7 +4,7 @@ */ #include "../../../common.h" -#if defined(MLD_ARITH_BACKEND_AARCH64) && !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ +#if defined(MLD_ARITH_BACKEND_AARCH64) && !defined(MLD_CONFIG_NO_VERIFY_API) && !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLD_CONFIG_PARAMETER_SET == 44) /* simpasm: header-end */ @@ -122,6 +122,7 @@ poly_use_hint_88_loop: .unreq barrett_const .unreq const_43 /* simpasm: footer-start */ -#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ +#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_NO_VERIFY_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 44) \ */ diff --git a/dev/aarch64_opt/src/polyz_unpack_17_asm.S b/dev/aarch64_opt/src/polyz_unpack_17_asm.S index 569ef51da..32b289648 100644 --- a/dev/aarch64_opt/src/polyz_unpack_17_asm.S +++ b/dev/aarch64_opt/src/polyz_unpack_17_asm.S @@ -5,7 +5,9 @@ */ #include "../../../common.h" -#if defined(MLD_ARITH_BACKEND_AARCH64) && !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ +#if defined(MLD_ARITH_BACKEND_AARCH64) && \ + (!defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API)) && \ + !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLD_CONFIG_PARAMETER_SET == 44) /* simpasm: header-end */ @@ -101,6 +103,7 @@ polyz_unpack_17_loop: .unreq mask .unreq gamma1 /* simpasm: footer-start */ -#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ +#endif /* MLD_ARITH_BACKEND_AARCH64 && (!MLD_CONFIG_NO_SIGN_API || \ + !MLD_CONFIG_NO_VERIFY_API) && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 44) \ */ diff --git a/dev/aarch64_opt/src/polyz_unpack_19_asm.S b/dev/aarch64_opt/src/polyz_unpack_19_asm.S index ac6b4b420..65754d655 100644 --- a/dev/aarch64_opt/src/polyz_unpack_19_asm.S +++ b/dev/aarch64_opt/src/polyz_unpack_19_asm.S @@ -5,7 +5,9 @@ */ #include "../../../common.h" -#if defined(MLD_ARITH_BACKEND_AARCH64) && !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ +#if defined(MLD_ARITH_BACKEND_AARCH64) && \ + (!defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API)) && \ + !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87)) /* simpasm: header-end */ @@ -98,6 +100,7 @@ polyz_unpack_19_loop: .unreq mask .unreq gamma1 /* simpasm: footer-start */ -#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ +#endif /* MLD_ARITH_BACKEND_AARCH64 && (!MLD_CONFIG_NO_SIGN_API || \ + !MLD_CONFIG_NO_VERIFY_API) && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 65 \ || MLD_CONFIG_PARAMETER_SET == 87) */ diff --git a/dev/aarch64_opt/src/polyz_unpack_table.c b/dev/aarch64_opt/src/polyz_unpack_table.c index 1fb8ff400..3d482285c 100644 --- a/dev/aarch64_opt/src/polyz_unpack_table.c +++ b/dev/aarch64_opt/src/polyz_unpack_table.c @@ -16,22 +16,32 @@ #include "arith_native_aarch64.h" +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) /* Table of indices used for tbl instructions in polyz_unpack_{17,19}. * See autogen for details. */ +#if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLD_CONFIG_PARAMETER_SET == 44 MLD_ALIGN const uint8_t mld_polyz_unpack_17_indices[] = { 0, 1, 2, 255, 2, 3, 4, 255, 4, 5, 6, 255, 6, 7, 8, 255, 9, 10, 11, 255, 11, 12, 13, 255, 13, 14, 15, 255, 15, 16, 17, 255, 2, 3, 4, 255, 4, 5, 6, 255, 6, 7, 8, 255, 8, 9, 10, 255, 11, 12, 13, 255, 13, 14, 15, 255, 15, 16, 17, 255, 17, 18, 19, 255, }; +#endif /* MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 44 \ + */ +#if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || \ + (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87) MLD_ALIGN const uint8_t mld_polyz_unpack_19_indices[] = { 0, 1, 2, 255, 2, 3, 4, 255, 5, 6, 7, 255, 7, 8, 9, 255, 10, 11, 12, 255, 12, 13, 14, 255, 15, 16, 17, 255, 17, 18, 19, 255, 4, 5, 6, 255, 6, 7, 8, 255, 9, 10, 11, 255, 11, 12, 13, 255, 14, 15, 16, 255, 16, 17, 18, 255, 19, 20, 21, 255, 21, 22, 23, 255, }; +#endif /* MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 65 \ + || MLD_CONFIG_PARAMETER_SET == 87 */ + +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ #else /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED */ diff --git a/dev/aarch64_opt/src/rej_uniform_eta2_asm.S b/dev/aarch64_opt/src/rej_uniform_eta2_asm.S index c7c84b1ca..687c04bf4 100644 --- a/dev/aarch64_opt/src/rej_uniform_eta2_asm.S +++ b/dev/aarch64_opt/src/rej_uniform_eta2_asm.S @@ -6,6 +6,7 @@ #include "../../../common.h" #if defined(MLD_ARITH_BACKEND_AARCH64) && \ + !defined(MLD_CONFIG_NO_KEYPAIR_API) && \ !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLDSA_ETA == 2) /* simpasm: header-end */ @@ -335,5 +336,6 @@ rej_uniform_eta2_final_copy: #undef MLD_STACK_SIZE /* simpasm: footer-start */ -#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ +#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_NO_KEYPAIR_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLDSA_ETA == 2) */ diff --git a/dev/aarch64_opt/src/rej_uniform_eta4_asm.S b/dev/aarch64_opt/src/rej_uniform_eta4_asm.S index 9ade1938f..158bf6cd4 100644 --- a/dev/aarch64_opt/src/rej_uniform_eta4_asm.S +++ b/dev/aarch64_opt/src/rej_uniform_eta4_asm.S @@ -6,6 +6,7 @@ #include "../../../common.h" #if defined(MLD_ARITH_BACKEND_AARCH64) && \ + !defined(MLD_CONFIG_NO_KEYPAIR_API) && \ !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLDSA_ETA == 4) /* simpasm: header-end */ @@ -312,5 +313,6 @@ rej_uniform_eta4_final_copy: #undef MLD_STACK_SIZE /* simpasm: footer-start */ -#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ +#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_NO_KEYPAIR_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLDSA_ETA == 4) */ diff --git a/dev/aarch64_opt/src/rej_uniform_eta_table.c b/dev/aarch64_opt/src/rej_uniform_eta_table.c index 13ce6df66..395e99cc0 100644 --- a/dev/aarch64_opt/src/rej_uniform_eta_table.c +++ b/dev/aarch64_opt/src/rej_uniform_eta_table.c @@ -11,7 +11,8 @@ #include "../../../common.h" -#if defined(MLD_ARITH_BACKEND_AARCH64) && \ +#if defined(MLD_ARITH_BACKEND_AARCH64) && \ + !defined(MLD_CONFIG_NO_KEYPAIR_API) && \ !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) #include "arith_native_aarch64.h" @@ -536,8 +537,10 @@ MLD_ALIGN const uint8_t mld_rej_uniform_eta_table[] = { 8, 9, 10, 11, 12, 13, 14, 15 /* 255 */, }; -#else /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED */ +#else /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_NO_KEYPAIR_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED */ MLD_EMPTY_CU(aarch64_rej_uniform_eta_table) -#endif /* !(MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED) */ +#endif /* !(MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_NO_KEYPAIR_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED) */ diff --git a/dev/fips202/aarch64/auto.h b/dev/fips202/aarch64/auto.h index 7432fa566..77ca273a6 100644 --- a/dev/fips202/aarch64/auto.h +++ b/dev/fips202/aarch64/auto.h @@ -37,6 +37,7 @@ #include "x1_scalar.h" #endif +#if !defined(MLD_CONFIG_SERIAL_FIPS202_ONLY) && !defined(MLD_CONFIG_REDUCE_RAM) /* * Keccak-f1600x2/x4 * @@ -68,4 +69,6 @@ #endif /* !__ARM_FEATURE_SHA3 */ +#endif /* !MLD_CONFIG_SERIAL_FIPS202_ONLY && !MLD_CONFIG_REDUCE_RAM */ + #endif /* !MLD_DEV_FIPS202_AARCH64_AUTO_H */ diff --git a/dev/x86_64/meta.h b/dev/x86_64/meta.h index 9e45b661e..c9a533a5e 100644 --- a/dev/x86_64/meta.h +++ b/dev/x86_64/meta.h @@ -83,6 +83,7 @@ static MLD_INLINE int mld_rej_uniform_native(int32_t *r, unsigned len, return (int)mld_rej_uniform_avx2(r, buf); } +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) #if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLDSA_ETA == 2 MLD_MUST_CHECK_RETURN_VALUE static MLD_INLINE int mld_rej_uniform_eta2_native(int32_t *r, unsigned len, @@ -140,7 +141,9 @@ static MLD_INLINE int mld_rej_uniform_eta4_native(int32_t *r, unsigned len, return (int)outlen; } #endif /* MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLDSA_ETA == 4 */ +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) #if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || \ (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87) MLD_MUST_CHECK_RETURN_VALUE @@ -169,7 +172,7 @@ static MLD_INLINE int mld_poly_decompose_88_native(int32_t *a1, int32_t *a0) } #endif /* MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 44 \ */ - +#endif /* !MLD_CONFIG_NO_SIGN_API */ MLD_MUST_CHECK_RETURN_VALUE static MLD_INLINE int mld_poly_caddq_native(int32_t a[MLDSA_N]) @@ -182,6 +185,7 @@ static MLD_INLINE int mld_poly_caddq_native(int32_t a[MLDSA_N]) return MLD_NATIVE_FUNC_SUCCESS; } +#if !defined(MLD_CONFIG_NO_VERIFY_API) #if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || \ (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87) MLD_MUST_CHECK_RETURN_VALUE @@ -212,7 +216,7 @@ static MLD_INLINE int mld_poly_use_hint_88_native(int32_t *b, const int32_t *a, } #endif /* MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 44 \ */ - +#endif /* !MLD_CONFIG_NO_VERIFY_API */ MLD_MUST_CHECK_RETURN_VALUE static MLD_INLINE int mld_poly_chknorm_native(const int32_t *a, int32_t B) @@ -224,6 +228,7 @@ static MLD_INLINE int mld_poly_chknorm_native(const int32_t *a, int32_t B) return mld_poly_chknorm_avx2(a, B); } +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) #if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLD_CONFIG_PARAMETER_SET == 44 MLD_MUST_CHECK_RETURN_VALUE static MLD_INLINE int mld_polyz_unpack_17_native(int32_t *r, const uint8_t *a) @@ -264,6 +269,7 @@ static MLD_INLINE int mld_poly_pointwise_montgomery_native( mld_pointwise_avx2(c, a, b, mld_qdata); return MLD_NATIVE_FUNC_SUCCESS; } +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ #if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLDSA_L == 4 MLD_MUST_CHECK_RETURN_VALUE diff --git a/dev/x86_64/src/arith_native_x86_64.h b/dev/x86_64/src/arith_native_x86_64.h index 956a6e541..e4172ee93 100644 --- a/dev/x86_64/src/arith_native_x86_64.h +++ b/dev/x86_64/src/arith_native_x86_64.h @@ -67,6 +67,7 @@ MLD_MUST_CHECK_RETURN_VALUE unsigned mld_rej_uniform_avx2(int32_t *r, const uint8_t buf[MLD_AVX2_REJ_UNIFORM_BUFLEN]); +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) #define mld_rej_uniform_eta2_avx2 MLD_NAMESPACE(mld_rej_uniform_eta2_avx2) MLD_MUST_CHECK_RETURN_VALUE unsigned mld_rej_uniform_eta2_avx2( @@ -76,31 +77,38 @@ unsigned mld_rej_uniform_eta2_avx2( MLD_MUST_CHECK_RETURN_VALUE unsigned mld_rej_uniform_eta4_avx2( int32_t *r, const uint8_t buf[MLD_AVX2_REJ_UNIFORM_ETA4_BUFLEN]); +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) #define mld_poly_decompose_32_avx2 MLD_NAMESPACE(mld_poly_decompose_32_avx2) void mld_poly_decompose_32_avx2(int32_t *a1, int32_t *a0); #define mld_poly_decompose_88_avx2 MLD_NAMESPACE(mld_poly_decompose_88_avx2) void mld_poly_decompose_88_avx2(int32_t *a1, int32_t *a0); +#endif /* !MLD_CONFIG_NO_SIGN_API */ #define mld_poly_caddq_avx2 MLD_NAMESPACE(poly_caddq_avx2) void mld_poly_caddq_avx2(int32_t *r); +#if !defined(MLD_CONFIG_NO_VERIFY_API) #define mld_poly_use_hint_32_avx2 MLD_NAMESPACE(mld_poly_use_hint_32_avx2) void mld_poly_use_hint_32_avx2(int32_t *b, const int32_t *a, const int32_t *h); #define mld_poly_use_hint_88_avx2 MLD_NAMESPACE(mld_poly_use_hint_88_avx2) void mld_poly_use_hint_88_avx2(int32_t *b, const int32_t *a, const int32_t *h); +#endif /* !MLD_CONFIG_NO_VERIFY_API */ #define mld_poly_chknorm_avx2 MLD_NAMESPACE(mld_poly_chknorm_avx2) MLD_MUST_CHECK_RETURN_VALUE int mld_poly_chknorm_avx2(const int32_t *a, int32_t B); +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) #define mld_polyz_unpack_17_avx2 MLD_NAMESPACE(mld_polyz_unpack_17_avx2) void mld_polyz_unpack_17_avx2(int32_t *r, const uint8_t *a); #define mld_polyz_unpack_19_avx2 MLD_NAMESPACE(mld_polyz_unpack_19_avx2) void mld_polyz_unpack_19_avx2(int32_t *r, const uint8_t *a); +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ #define mld_pointwise_avx2 MLD_NAMESPACE(pointwise_avx2) void mld_pointwise_avx2(int32_t *c, const int32_t *a, const int32_t *b, diff --git a/dev/x86_64/src/poly_decompose_32_avx2.c b/dev/x86_64/src/poly_decompose_32_avx2.c index 4bc584b1b..c97d0c729 100644 --- a/dev/x86_64/src/poly_decompose_32_avx2.c +++ b/dev/x86_64/src/poly_decompose_32_avx2.c @@ -24,6 +24,7 @@ #include "../../../common.h" #if defined(MLD_ARITH_BACKEND_X86_64_DEFAULT) && \ + !defined(MLD_CONFIG_NO_SIGN_API) && \ !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || \ (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87)) @@ -143,13 +144,14 @@ void mld_poly_decompose_32_avx2(int32_t *a1, int32_t *a0) } } -#else /* MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_MULTILEVEL_NO_SHARED \ - && (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == \ - 65 || MLD_CONFIG_PARAMETER_SET == 87) */ +#else /* MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_NO_SIGN_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ + (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 65 \ + || MLD_CONFIG_PARAMETER_SET == 87) */ MLD_EMPTY_CU(avx2_poly_decompose_32) -#endif /* !(MLD_ARITH_BACKEND_X86_64_DEFAULT && \ +#endif /* !(MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_NO_SIGN_API && \ !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 65 \ || MLD_CONFIG_PARAMETER_SET == 87)) */ diff --git a/dev/x86_64/src/poly_decompose_88_avx2.c b/dev/x86_64/src/poly_decompose_88_avx2.c index edb9114c8..d6a28d2d1 100644 --- a/dev/x86_64/src/poly_decompose_88_avx2.c +++ b/dev/x86_64/src/poly_decompose_88_avx2.c @@ -24,6 +24,7 @@ #include "../../../common.h" #if defined(MLD_ARITH_BACKEND_X86_64_DEFAULT) && \ + !defined(MLD_CONFIG_NO_SIGN_API) && \ !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || \ MLD_CONFIG_PARAMETER_SET == 44) @@ -143,13 +144,14 @@ void mld_poly_decompose_88_avx2(int32_t *a1, int32_t *a0) _mm256_store_si256((__m256i *)&a0[8 * i], f0); } } -#else /* MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_MULTILEVEL_NO_SHARED \ - && (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == \ - 44) */ +#else /* MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_NO_SIGN_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ + (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 44) \ + */ MLD_EMPTY_CU(avx2_poly_decompose_88) -#endif /* !(MLD_ARITH_BACKEND_X86_64_DEFAULT && \ +#endif /* !(MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_NO_SIGN_API && \ !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == \ 44)) */ diff --git a/dev/x86_64/src/poly_use_hint_32_avx2.c b/dev/x86_64/src/poly_use_hint_32_avx2.c index 9a5c866bb..f38e13ef1 100644 --- a/dev/x86_64/src/poly_use_hint_32_avx2.c +++ b/dev/x86_64/src/poly_use_hint_32_avx2.c @@ -20,6 +20,7 @@ #include "../../../common.h" #if defined(MLD_ARITH_BACKEND_X86_64_DEFAULT) && \ + !defined(MLD_CONFIG_NO_VERIFY_API) && \ !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || \ (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87)) @@ -86,13 +87,14 @@ void mld_poly_use_hint_32_avx2(int32_t *b, const int32_t *a, } } -#else /* MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_MULTILEVEL_NO_SHARED \ - && (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == \ - 65 || MLD_CONFIG_PARAMETER_SET == 87) */ +#else /* MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_NO_VERIFY_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ + (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 65 \ + || MLD_CONFIG_PARAMETER_SET == 87) */ MLD_EMPTY_CU(avx2_poly_use_hint_32) -#endif /* !(MLD_ARITH_BACKEND_X86_64_DEFAULT && \ +#endif /* !(MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_NO_VERIFY_API && \ !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 65 \ || MLD_CONFIG_PARAMETER_SET == 87)) */ diff --git a/dev/x86_64/src/poly_use_hint_88_avx2.c b/dev/x86_64/src/poly_use_hint_88_avx2.c index 32fa2e6c6..01c17bb54 100644 --- a/dev/x86_64/src/poly_use_hint_88_avx2.c +++ b/dev/x86_64/src/poly_use_hint_88_avx2.c @@ -20,6 +20,7 @@ #include "../../../common.h" #if defined(MLD_ARITH_BACKEND_X86_64_DEFAULT) && \ + !defined(MLD_CONFIG_NO_VERIFY_API) && \ !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || \ MLD_CONFIG_PARAMETER_SET == 44) @@ -88,15 +89,16 @@ void mld_poly_use_hint_88_avx2(int32_t *b, const int32_t *a, } } -#else /* MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_MULTILEVEL_NO_SHARED \ - && (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == \ - 44) */ +#else /* MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_NO_VERIFY_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ + (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 44) \ + */ MLD_EMPTY_CU(avx2_poly_use_hint_88) -#endif /* !(MLD_ARITH_BACKEND_X86_64_DEFAULT && \ - !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ - (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == \ +#endif /* !(MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_NO_VERIFY_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ + (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == \ 44)) */ /* To facilitate single-compilation-unit (SCU) builds, undefine all macros. diff --git a/dev/x86_64/src/polyz_unpack_17_avx2.c b/dev/x86_64/src/polyz_unpack_17_avx2.c index 9e8dd9158..ac98bf64f 100644 --- a/dev/x86_64/src/polyz_unpack_17_avx2.c +++ b/dev/x86_64/src/polyz_unpack_17_avx2.c @@ -20,6 +20,8 @@ #include "../../../common.h" #if defined(MLD_ARITH_BACKEND_X86_64_DEFAULT) && \ + (!defined(MLD_CONFIG_NO_SIGN_API) || \ + !defined(MLD_CONFIG_NO_VERIFY_API)) && \ !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || \ MLD_CONFIG_PARAMETER_SET == 44) @@ -79,13 +81,14 @@ void mld_polyz_unpack_17_avx2(int32_t *r, const uint8_t *a) _mm256_store_si256((__m256i *)&r[8 * i], f); } } -#else /* MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_MULTILEVEL_NO_SHARED \ - && (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == \ - 44) */ +#else /* MLD_ARITH_BACKEND_X86_64_DEFAULT && (!MLD_CONFIG_NO_SIGN_API || \ + !MLD_CONFIG_NO_VERIFY_API) && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ + (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 44) \ + */ MLD_EMPTY_CU(avx2_polyz_unpack_17) -#endif /* !(MLD_ARITH_BACKEND_X86_64_DEFAULT && \ - !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ +#endif /* !(MLD_ARITH_BACKEND_X86_64_DEFAULT && (!MLD_CONFIG_NO_SIGN_API || \ + !MLD_CONFIG_NO_VERIFY_API) && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == \ 44)) */ diff --git a/dev/x86_64/src/polyz_unpack_19_avx2.c b/dev/x86_64/src/polyz_unpack_19_avx2.c index a5cc1b641..fe5c3895b 100644 --- a/dev/x86_64/src/polyz_unpack_19_avx2.c +++ b/dev/x86_64/src/polyz_unpack_19_avx2.c @@ -20,6 +20,8 @@ #include "../../../common.h" #if defined(MLD_ARITH_BACKEND_X86_64_DEFAULT) && \ + (!defined(MLD_CONFIG_NO_SIGN_API) || \ + !defined(MLD_CONFIG_NO_VERIFY_API)) && \ !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || \ (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87)) @@ -81,13 +83,14 @@ void mld_polyz_unpack_19_avx2(int32_t *r, const uint8_t *a) } } -#else /* MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_MULTILEVEL_NO_SHARED \ - && (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == \ - 65 || MLD_CONFIG_PARAMETER_SET == 87) */ +#else /* MLD_ARITH_BACKEND_X86_64_DEFAULT && (!MLD_CONFIG_NO_SIGN_API || \ + !MLD_CONFIG_NO_VERIFY_API) && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ + (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 65 \ + || MLD_CONFIG_PARAMETER_SET == 87) */ MLD_EMPTY_CU(avx2_polyz_unpack_19) -#endif /* !(MLD_ARITH_BACKEND_X86_64_DEFAULT && \ - !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ +#endif /* !(MLD_ARITH_BACKEND_X86_64_DEFAULT && (!MLD_CONFIG_NO_SIGN_API || \ + !MLD_CONFIG_NO_VERIFY_API) && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 65 \ || MLD_CONFIG_PARAMETER_SET == 87)) */ diff --git a/dev/x86_64/src/rej_uniform_eta2_avx2.c b/dev/x86_64/src/rej_uniform_eta2_avx2.c index b763d403b..dac73995b 100644 --- a/dev/x86_64/src/rej_uniform_eta2_avx2.c +++ b/dev/x86_64/src/rej_uniform_eta2_avx2.c @@ -20,6 +20,7 @@ #include "../../../common.h" #if defined(MLD_ARITH_BACKEND_X86_64_DEFAULT) && \ + !defined(MLD_CONFIG_NO_KEYPAIR_API) && \ !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLDSA_ETA == 2) @@ -141,13 +142,14 @@ unsigned int mld_rej_uniform_eta2_avx2( return ctr; } -#else /* MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_MULTILEVEL_NO_SHARED \ - && (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLDSA_ETA == 2) */ +#else /* MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_NO_KEYPAIR_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ + (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLDSA_ETA == 2) */ MLD_EMPTY_CU(avx2_rej_uniform_eta2) -#endif /* !(MLD_ARITH_BACKEND_X86_64_DEFAULT && \ - !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ +#endif /* !(MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_NO_KEYPAIR_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLDSA_ETA == 2)) */ /* To facilitate single-compilation-unit (SCU) builds, undefine all macros. diff --git a/dev/x86_64/src/rej_uniform_eta4_avx2.c b/dev/x86_64/src/rej_uniform_eta4_avx2.c index 9ae716437..6f41486d2 100644 --- a/dev/x86_64/src/rej_uniform_eta4_avx2.c +++ b/dev/x86_64/src/rej_uniform_eta4_avx2.c @@ -20,6 +20,7 @@ #include "../../../common.h" #if defined(MLD_ARITH_BACKEND_X86_64_DEFAULT) && \ + !defined(MLD_CONFIG_NO_KEYPAIR_API) && \ !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLDSA_ETA == 4) @@ -125,13 +126,14 @@ unsigned int mld_rej_uniform_eta4_avx2( return ctr; } -#else /* MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_MULTILEVEL_NO_SHARED \ - && (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLDSA_ETA == 4) */ +#else /* MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_NO_KEYPAIR_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ + (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLDSA_ETA == 4) */ MLD_EMPTY_CU(avx2_rej_uniform_eta4) -#endif /* !(MLD_ARITH_BACKEND_X86_64_DEFAULT && \ - !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ +#endif /* !(MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_NO_KEYPAIR_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLDSA_ETA == 4)) */ /* To facilitate single-compilation-unit (SCU) builds, undefine all macros. diff --git a/examples/README.md b/examples/README.md index 61fac1119..1c0fd0a8b 100644 --- a/examples/README.md +++ b/examples/README.md @@ -47,6 +47,11 @@ custom FIPS-202 backend. See [monolithic_build](monolithic_build) for an example of how to build mldsa-native (with C backend) from a single auto-generated compilation unit. +## Monobuild (with native code) + +See [monolithic_build_native](monolithic_build_native) for an example of how to build mldsa-native from a single +auto-generated compilation unit, while also linking in assembly from the native backends. + ## Multi-level monobuild (C only) See [monolithic_build_multilevel](monolithic_build_multilevel) for an example of how to build all security levels of @@ -57,3 +62,14 @@ mldsa-native (with C backend) inside a single compilation unit, sharing the leve See [monolithic_build_multilevel_native](monolithic_build_multilevel_native) for an example of how to build all security levels of mldsa-native inside a single compilation unit, sharing the level-independent code, while also linking in assembly from the native backends. + +## Disabled APIs (C only) + +See [disabled_apis](disabled_apis) for an example of building mldsa-native with individual APIs disabled +(`MLD_CONFIG_NO_KEYPAIR_API`, `MLD_CONFIG_NO_SIGN_API`, `MLD_CONFIG_NO_VERIFY_API`). +Tests all four disabled API combinations across all three parameter sets. + +## Disabled APIs (with native code) + +See [disabled_apis_native](disabled_apis_native) for the same as above, but with native arithmetic and +FIPS-202 backends enabled. diff --git a/examples/basic_deterministic/mldsa_native/mldsa_native_config.h b/examples/basic_deterministic/mldsa_native/mldsa_native_config.h index a17df9b47..9c67475d8 100644 --- a/examples/basic_deterministic/mldsa_native/mldsa_native_config.h +++ b/examples/basic_deterministic/mldsa_native/mldsa_native_config.h @@ -127,6 +127,57 @@ *****************************************************************************/ /* #define MLD_CONFIG_EXTERNAL_API_QUALIFIER */ +/****************************************************************************** + * Name: MLD_CONFIG_NO_KEYPAIR_API + * + * Description: By default, mldsa-native includes support for generating key + * pairs. If you don't need this, set MLD_CONFIG_NO_KEYPAIR_API + * to exclude crypto_sign_keypair, crypto_sign_keypair_internal, + * crypto_sign_pk_from_sk, and all internal APIs only needed by + * those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_KEYPAIR_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_SIGN_API + * + * Description: By default, mldsa-native includes support for creating + * signatures. If you don't need this, set MLD_CONFIG_NO_SIGN_API + * to exclude crypto_sign, crypto_sign_signature, + * crypto_sign_signature_extmu, crypto_sign_signature_internal, + * crypto_sign_signature_pre_hash_internal, + * crypto_sign_signature_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_SIGN_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_VERIFY_API + * + * Description: By default, mldsa-native includes support for verifying + * signatures. If you don't need this, set + * MLD_CONFIG_NO_VERIFY_API to exclude crypto_sign_open, + * crypto_sign_verify, crypto_sign_verify_extmu, + * crypto_sign_verify_internal, + * crypto_sign_verify_pre_hash_internal, + * crypto_sign_verify_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_VERIFY_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_INTERNAL_API_ONLY + * + * Description: Set this to remove all public APIs except + * crypto_sign_keypair_internal, crypto_sign_signature_internal, + * and crypto_sign_verify_internal. + * + *****************************************************************************/ +/* #define MLD_CONFIG_INTERNAL_API_ONLY */ + /****************************************************************************** * Name: MLD_CONFIG_NO_RANDOMIZED_API * diff --git a/examples/basic_lowram/mldsa_native/mldsa_native_config.h b/examples/basic_lowram/mldsa_native/mldsa_native_config.h index c2993903f..629dacf62 100644 --- a/examples/basic_lowram/mldsa_native/mldsa_native_config.h +++ b/examples/basic_lowram/mldsa_native/mldsa_native_config.h @@ -126,6 +126,57 @@ *****************************************************************************/ /* #define MLD_CONFIG_EXTERNAL_API_QUALIFIER */ +/****************************************************************************** + * Name: MLD_CONFIG_NO_KEYPAIR_API + * + * Description: By default, mldsa-native includes support for generating key + * pairs. If you don't need this, set MLD_CONFIG_NO_KEYPAIR_API + * to exclude crypto_sign_keypair, crypto_sign_keypair_internal, + * crypto_sign_pk_from_sk, and all internal APIs only needed by + * those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_KEYPAIR_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_SIGN_API + * + * Description: By default, mldsa-native includes support for creating + * signatures. If you don't need this, set MLD_CONFIG_NO_SIGN_API + * to exclude crypto_sign, crypto_sign_signature, + * crypto_sign_signature_extmu, crypto_sign_signature_internal, + * crypto_sign_signature_pre_hash_internal, + * crypto_sign_signature_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_SIGN_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_VERIFY_API + * + * Description: By default, mldsa-native includes support for verifying + * signatures. If you don't need this, set + * MLD_CONFIG_NO_VERIFY_API to exclude crypto_sign_open, + * crypto_sign_verify, crypto_sign_verify_extmu, + * crypto_sign_verify_internal, + * crypto_sign_verify_pre_hash_internal, + * crypto_sign_verify_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_VERIFY_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_INTERNAL_API_ONLY + * + * Description: Set this to remove all public APIs except + * crypto_sign_keypair_internal, crypto_sign_signature_internal, + * and crypto_sign_verify_internal. + * + *****************************************************************************/ +/* #define MLD_CONFIG_INTERNAL_API_ONLY */ + /****************************************************************************** * Name: MLD_CONFIG_NO_RANDOMIZED_API * diff --git a/examples/bring_your_own_fips202/mldsa_native/mldsa_native_config.h b/examples/bring_your_own_fips202/mldsa_native/mldsa_native_config.h index ab4bed70d..1c5517319 100644 --- a/examples/bring_your_own_fips202/mldsa_native/mldsa_native_config.h +++ b/examples/bring_your_own_fips202/mldsa_native/mldsa_native_config.h @@ -127,6 +127,57 @@ *****************************************************************************/ /* #define MLD_CONFIG_EXTERNAL_API_QUALIFIER */ +/****************************************************************************** + * Name: MLD_CONFIG_NO_KEYPAIR_API + * + * Description: By default, mldsa-native includes support for generating key + * pairs. If you don't need this, set MLD_CONFIG_NO_KEYPAIR_API + * to exclude crypto_sign_keypair, crypto_sign_keypair_internal, + * crypto_sign_pk_from_sk, and all internal APIs only needed by + * those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_KEYPAIR_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_SIGN_API + * + * Description: By default, mldsa-native includes support for creating + * signatures. If you don't need this, set MLD_CONFIG_NO_SIGN_API + * to exclude crypto_sign, crypto_sign_signature, + * crypto_sign_signature_extmu, crypto_sign_signature_internal, + * crypto_sign_signature_pre_hash_internal, + * crypto_sign_signature_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_SIGN_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_VERIFY_API + * + * Description: By default, mldsa-native includes support for verifying + * signatures. If you don't need this, set + * MLD_CONFIG_NO_VERIFY_API to exclude crypto_sign_open, + * crypto_sign_verify, crypto_sign_verify_extmu, + * crypto_sign_verify_internal, + * crypto_sign_verify_pre_hash_internal, + * crypto_sign_verify_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_VERIFY_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_INTERNAL_API_ONLY + * + * Description: Set this to remove all public APIs except + * crypto_sign_keypair_internal, crypto_sign_signature_internal, + * and crypto_sign_verify_internal. + * + *****************************************************************************/ +/* #define MLD_CONFIG_INTERNAL_API_ONLY */ + /****************************************************************************** * Name: MLD_CONFIG_NO_RANDOMIZED_API * diff --git a/examples/bring_your_own_fips202_static/mldsa_native/mldsa_native_config.h b/examples/bring_your_own_fips202_static/mldsa_native/mldsa_native_config.h index 05b726a43..0168b5228 100644 --- a/examples/bring_your_own_fips202_static/mldsa_native/mldsa_native_config.h +++ b/examples/bring_your_own_fips202_static/mldsa_native/mldsa_native_config.h @@ -128,6 +128,57 @@ *****************************************************************************/ /* #define MLD_CONFIG_EXTERNAL_API_QUALIFIER */ +/****************************************************************************** + * Name: MLD_CONFIG_NO_KEYPAIR_API + * + * Description: By default, mldsa-native includes support for generating key + * pairs. If you don't need this, set MLD_CONFIG_NO_KEYPAIR_API + * to exclude crypto_sign_keypair, crypto_sign_keypair_internal, + * crypto_sign_pk_from_sk, and all internal APIs only needed by + * those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_KEYPAIR_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_SIGN_API + * + * Description: By default, mldsa-native includes support for creating + * signatures. If you don't need this, set MLD_CONFIG_NO_SIGN_API + * to exclude crypto_sign, crypto_sign_signature, + * crypto_sign_signature_extmu, crypto_sign_signature_internal, + * crypto_sign_signature_pre_hash_internal, + * crypto_sign_signature_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_SIGN_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_VERIFY_API + * + * Description: By default, mldsa-native includes support for verifying + * signatures. If you don't need this, set + * MLD_CONFIG_NO_VERIFY_API to exclude crypto_sign_open, + * crypto_sign_verify, crypto_sign_verify_extmu, + * crypto_sign_verify_internal, + * crypto_sign_verify_pre_hash_internal, + * crypto_sign_verify_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_VERIFY_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_INTERNAL_API_ONLY + * + * Description: Set this to remove all public APIs except + * crypto_sign_keypair_internal, crypto_sign_signature_internal, + * and crypto_sign_verify_internal. + * + *****************************************************************************/ +/* #define MLD_CONFIG_INTERNAL_API_ONLY */ + /****************************************************************************** * Name: MLD_CONFIG_NO_RANDOMIZED_API * diff --git a/examples/custom_backend/mldsa_native/mldsa_native_config.h b/examples/custom_backend/mldsa_native/mldsa_native_config.h index 1ca99a0f2..621890eee 100644 --- a/examples/custom_backend/mldsa_native/mldsa_native_config.h +++ b/examples/custom_backend/mldsa_native/mldsa_native_config.h @@ -129,6 +129,57 @@ *****************************************************************************/ /* #define MLD_CONFIG_EXTERNAL_API_QUALIFIER */ +/****************************************************************************** + * Name: MLD_CONFIG_NO_KEYPAIR_API + * + * Description: By default, mldsa-native includes support for generating key + * pairs. If you don't need this, set MLD_CONFIG_NO_KEYPAIR_API + * to exclude crypto_sign_keypair, crypto_sign_keypair_internal, + * crypto_sign_pk_from_sk, and all internal APIs only needed by + * those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_KEYPAIR_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_SIGN_API + * + * Description: By default, mldsa-native includes support for creating + * signatures. If you don't need this, set MLD_CONFIG_NO_SIGN_API + * to exclude crypto_sign, crypto_sign_signature, + * crypto_sign_signature_extmu, crypto_sign_signature_internal, + * crypto_sign_signature_pre_hash_internal, + * crypto_sign_signature_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_SIGN_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_VERIFY_API + * + * Description: By default, mldsa-native includes support for verifying + * signatures. If you don't need this, set + * MLD_CONFIG_NO_VERIFY_API to exclude crypto_sign_open, + * crypto_sign_verify, crypto_sign_verify_extmu, + * crypto_sign_verify_internal, + * crypto_sign_verify_pre_hash_internal, + * crypto_sign_verify_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_VERIFY_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_INTERNAL_API_ONLY + * + * Description: Set this to remove all public APIs except + * crypto_sign_keypair_internal, crypto_sign_signature_internal, + * and crypto_sign_verify_internal. + * + *****************************************************************************/ +/* #define MLD_CONFIG_INTERNAL_API_ONLY */ + /****************************************************************************** * Name: MLD_CONFIG_NO_RANDOMIZED_API * diff --git a/examples/disabled_apis/.gitignore b/examples/disabled_apis/.gitignore new file mode 100644 index 000000000..eb98a94f1 --- /dev/null +++ b/examples/disabled_apis/.gitignore @@ -0,0 +1,3 @@ +# SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT + +build diff --git a/examples/disabled_apis/Makefile b/examples/disabled_apis/Makefile new file mode 100644 index 000000000..2de4a7bcc --- /dev/null +++ b/examples/disabled_apis/Makefile @@ -0,0 +1,113 @@ +# Copyright (c) The mlkem-native project authors +# Copyright (c) The mldsa-native project authors +# SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT + +.PHONY: build run clean +.DEFAULT_GOAL := all + +CC ?= gcc + +# Adjust CFLAGS if needed +CFLAGS := \ + -Wall \ + -Wextra \ + -Werror=unused-result \ + -Wpedantic \ + -Werror \ + -Wmissing-prototypes \ + -Wshadow \ + -Wpointer-arith \ + -Wredundant-decls \ + -Wconversion \ + -Wsign-conversion \ + -Wno-long-long \ + -Wno-unknown-pragmas \ + -Wno-unused-command-line-argument \ + -O3 \ + -fomit-frame-pointer \ + -std=c99 \ + -pedantic \ + -MMD \ + $(CFLAGS) + +AUTO ?= 1 +include auto.mk + +# Append cross-prefix for cross compilation +ifeq (,$(findstring $(CROSS_PREFIX),$(CC))) +CC := $(CROSS_PREFIX)$(CC) +endif + +MLD_SOURCE=$(wildcard \ + mldsa_native/src/*.c \ + mldsa_native/src/**/*.c \ + mldsa_native/src/**/**/*.c \ + mldsa_native/src/**/**/**/*.c) + +INC=-Imldsa_native +RNG_SOURCE=$(wildcard test_only_rng/*.c) +ALL_SOURCE=$(MLD_SOURCE) $(RNG_SOURCE) main.c + +BUILD_DIR=build + +CFLAGS += -DMLD_CONFIG_NAMESPACE_PREFIX=mldsa + +# Disabled API flags +KEYGEN_ONLY_FLAGS = -DMLD_CONFIG_NO_SIGN_API -DMLD_CONFIG_NO_VERIFY_API +SIGN_ONLY_FLAGS = -DMLD_CONFIG_NO_KEYPAIR_API -DMLD_CONFIG_NO_VERIFY_API +VERIFY_ONLY_FLAGS = -DMLD_CONFIG_NO_KEYPAIR_API -DMLD_CONFIG_NO_SIGN_API +SIGN_VERIFY_FLAGS = -DMLD_CONFIG_NO_KEYPAIR_API + +# Per-target CFLAGS for each combination +$(BUILD_DIR)/test_keygen_only_44: CFLAGS += -DMLD_CONFIG_PARAMETER_SET=44 $(KEYGEN_ONLY_FLAGS) +$(BUILD_DIR)/test_keygen_only_65: CFLAGS += -DMLD_CONFIG_PARAMETER_SET=65 $(KEYGEN_ONLY_FLAGS) +$(BUILD_DIR)/test_keygen_only_87: CFLAGS += -DMLD_CONFIG_PARAMETER_SET=87 $(KEYGEN_ONLY_FLAGS) +$(BUILD_DIR)/test_sign_only_44: CFLAGS += -DMLD_CONFIG_PARAMETER_SET=44 $(SIGN_ONLY_FLAGS) +$(BUILD_DIR)/test_sign_only_65: CFLAGS += -DMLD_CONFIG_PARAMETER_SET=65 $(SIGN_ONLY_FLAGS) +$(BUILD_DIR)/test_sign_only_87: CFLAGS += -DMLD_CONFIG_PARAMETER_SET=87 $(SIGN_ONLY_FLAGS) +$(BUILD_DIR)/test_verify_only_44: CFLAGS += -DMLD_CONFIG_PARAMETER_SET=44 $(VERIFY_ONLY_FLAGS) +$(BUILD_DIR)/test_verify_only_65: CFLAGS += -DMLD_CONFIG_PARAMETER_SET=65 $(VERIFY_ONLY_FLAGS) +$(BUILD_DIR)/test_verify_only_87: CFLAGS += -DMLD_CONFIG_PARAMETER_SET=87 $(VERIFY_ONLY_FLAGS) +$(BUILD_DIR)/test_sign_verify_44: CFLAGS += -DMLD_CONFIG_PARAMETER_SET=44 $(SIGN_VERIFY_FLAGS) +$(BUILD_DIR)/test_sign_verify_65: CFLAGS += -DMLD_CONFIG_PARAMETER_SET=65 $(SIGN_VERIFY_FLAGS) +$(BUILD_DIR)/test_sign_verify_87: CFLAGS += -DMLD_CONFIG_PARAMETER_SET=87 $(SIGN_VERIFY_FLAGS) + +ALL_BINARIES = \ + $(BUILD_DIR)/test_keygen_only_44 \ + $(BUILD_DIR)/test_keygen_only_65 \ + $(BUILD_DIR)/test_keygen_only_87 \ + $(BUILD_DIR)/test_sign_only_44 \ + $(BUILD_DIR)/test_sign_only_65 \ + $(BUILD_DIR)/test_sign_only_87 \ + $(BUILD_DIR)/test_verify_only_44 \ + $(BUILD_DIR)/test_verify_only_65 \ + $(BUILD_DIR)/test_verify_only_87 \ + $(BUILD_DIR)/test_sign_verify_44 \ + $(BUILD_DIR)/test_sign_verify_65 \ + $(BUILD_DIR)/test_sign_verify_87 + +$(ALL_BINARIES): $(ALL_SOURCE) + echo "$@" + mkdir -p $(BUILD_DIR) + $(CC) $(CFLAGS) $(INC) $^ -o $@ + +all: build + +build: $(ALL_BINARIES) + +run: $(ALL_BINARIES) + $(EXEC_WRAPPER) ./$(BUILD_DIR)/test_keygen_only_44 + $(EXEC_WRAPPER) ./$(BUILD_DIR)/test_keygen_only_65 + $(EXEC_WRAPPER) ./$(BUILD_DIR)/test_keygen_only_87 + $(EXEC_WRAPPER) ./$(BUILD_DIR)/test_sign_only_44 + $(EXEC_WRAPPER) ./$(BUILD_DIR)/test_sign_only_65 + $(EXEC_WRAPPER) ./$(BUILD_DIR)/test_sign_only_87 + $(EXEC_WRAPPER) ./$(BUILD_DIR)/test_verify_only_44 + $(EXEC_WRAPPER) ./$(BUILD_DIR)/test_verify_only_65 + $(EXEC_WRAPPER) ./$(BUILD_DIR)/test_verify_only_87 + $(EXEC_WRAPPER) ./$(BUILD_DIR)/test_sign_verify_44 + $(EXEC_WRAPPER) ./$(BUILD_DIR)/test_sign_verify_65 + $(EXEC_WRAPPER) ./$(BUILD_DIR)/test_sign_verify_87 + +clean: + rm -rf $(BUILD_DIR) diff --git a/examples/disabled_apis/README.md b/examples/disabled_apis/README.md new file mode 100644 index 000000000..286bf1fea --- /dev/null +++ b/examples/disabled_apis/README.md @@ -0,0 +1,29 @@ +[//]: # (SPDX-License-Identifier: CC-BY-4.0) + +# Disabled APIs + +This directory tests building mldsa-native with individual APIs disabled +via `MLD_CONFIG_NO_KEYPAIR_API`, `MLD_CONFIG_NO_SIGN_API`, and +`MLD_CONFIG_NO_VERIFY_API`. + +## Use Case + +Use these configuration options when you only need a subset of ML-DSA +functionality and want to minimize code size. + +## What is tested + +For each parameter set (44, 65, 87), the following configurations are +built and tested: + +- **keygen_only**: `MLD_CONFIG_NO_SIGN_API` + `MLD_CONFIG_NO_VERIFY_API` +- **sign_only**: `MLD_CONFIG_NO_KEYPAIR_API` + `MLD_CONFIG_NO_VERIFY_API` +- **verify_only**: `MLD_CONFIG_NO_KEYPAIR_API` + `MLD_CONFIG_NO_SIGN_API` +- **sign_verify**: `MLD_CONFIG_NO_KEYPAIR_API` + +## Usage + +```bash +make build # Build all 12 variants +make run # Run all 12 variants +``` diff --git a/examples/disabled_apis/auto.mk b/examples/disabled_apis/auto.mk new file mode 120000 index 000000000..ce5c161cb --- /dev/null +++ b/examples/disabled_apis/auto.mk @@ -0,0 +1 @@ +../../test/mk/auto.mk \ No newline at end of file diff --git a/examples/disabled_apis/expected_test_vectors.h b/examples/disabled_apis/expected_test_vectors.h new file mode 100644 index 000000000..b5e619e01 --- /dev/null +++ b/examples/disabled_apis/expected_test_vectors.h @@ -0,0 +1,2360 @@ +/* + * Copyright (c) The mldsa-native project authors + * SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT + */ + +/* + * Expected test vectors generated using the deterministic RNG from + * test_only_rng/notrandombytes with the same message, context, and + * RNG state as in the basic example. + */ + +#ifndef EXPECTED_TEST_VECTORS_H +#define EXPECTED_TEST_VECTORS_H + +#include + +#if MLD_CONFIG_PARAMETER_SET == 44 +const uint8_t expected_pk[] = { + 0xe1, 0xae, 0xd9, 0xfe, 0x3c, 0x2c, 0xb5, 0x70, 0xd1, 0x82, 0x51, 0x08, + 0x12, 0x3c, 0x36, 0x39, 0xb5, 0xe3, 0x73, 0xf6, 0x5f, 0x8c, 0xed, 0x56, + 0x26, 0x15, 0xc7, 0xe1, 0xea, 0x48, 0xce, 0x8e, 0xcb, 0x58, 0xb2, 0xe7, + 0x6b, 0x3b, 0x41, 0x26, 0xee, 0x2a, 0x06, 0x1b, 0x47, 0x09, 0xe7, 0x43, + 0x28, 0x4e, 0xbd, 0xbf, 0xdf, 0x7b, 0x8b, 0x0d, 0xe6, 0x9b, 0xb2, 0x68, + 0x2c, 0xf6, 0xd7, 0x51, 0x26, 0x05, 0x2f, 0x86, 0xb9, 0x7c, 0xfa, 0xa0, + 0x76, 0x97, 0x6d, 0xee, 0x97, 0xf1, 0x15, 0xed, 0x1e, 0x51, 0xe2, 0x23, + 0x43, 0xa0, 0x25, 0x41, 0x96, 0xd8, 0x47, 0x6f, 0xc5, 0xbd, 0xff, 0xc5, + 0x9b, 0xb8, 0x2a, 0x9d, 0xff, 0x43, 0x2c, 0x89, 0x6c, 0x2a, 0x92, 0xf5, + 0xe0, 0xa9, 0xb0, 0xfd, 0x8a, 0xc4, 0xb7, 0x1f, 0xc5, 0x8b, 0x61, 0xec, + 0x38, 0xf6, 0xca, 0x49, 0x16, 0x29, 0xa1, 0xab, 0x74, 0x01, 0xcb, 0x6d, + 0xa6, 0x53, 0x64, 0x76, 0x79, 0x6f, 0x06, 0xb7, 0xea, 0xf8, 0xa7, 0x49, + 0x78, 0x97, 0xae, 0x4b, 0xc7, 0x4f, 0x91, 0x10, 0x37, 0x7f, 0x67, 0x11, + 0xe9, 0x71, 0xa3, 0xb5, 0xa7, 0x6c, 0x3f, 0xda, 0x73, 0xb6, 0x11, 0x55, + 0x1c, 0xcd, 0xfc, 0xe3, 0x0f, 0xb4, 0xe1, 0x90, 0x88, 0xc0, 0xb1, 0xbf, + 0xbe, 0xaa, 0x59, 0x3a, 0x9d, 0x0e, 0x4d, 0xe7, 0xa1, 0x5a, 0x3b, 0x49, + 0x9a, 0x48, 0x87, 0xfa, 0xec, 0x94, 0x5f, 0x86, 0x7a, 0x20, 0x89, 0x55, + 0x43, 0x69, 0x14, 0xf2, 0xb2, 0x95, 0x73, 0xb0, 0xda, 0xfa, 0xfe, 0x57, + 0xe2, 0xa0, 0x02, 0xbc, 0x15, 0x56, 0xc3, 0xf6, 0xc3, 0xf8, 0xe9, 0x11, + 0xed, 0x14, 0x03, 0xb0, 0xfa, 0x85, 0x92, 0x9e, 0x46, 0x01, 0xeb, 0x8e, + 0x9f, 0xcd, 0xad, 0x71, 0x72, 0x83, 0x2c, 0x4a, 0xf5, 0xe6, 0x8a, 0xcc, + 0x66, 0x68, 0x79, 0x7d, 0x5d, 0x91, 0xb3, 0xd9, 0x2c, 0xd8, 0x92, 0x1c, + 0x0d, 0xeb, 0x53, 0xfe, 0x90, 0x4a, 0x08, 0x1f, 0xf2, 0xa9, 0xdd, 0xb7, + 0xf2, 0xcf, 0x0d, 0x28, 0xb5, 0x0a, 0xe3, 0xf7, 0x22, 0xb3, 0x7f, 0x3c, + 0x3e, 0x55, 0x31, 0xe5, 0xd0, 0x61, 0x02, 0xcd, 0x3c, 0x7a, 0x06, 0xcf, + 0xce, 0xed, 0x1e, 0xf8, 0xd7, 0x15, 0x77, 0x38, 0x41, 0xa8, 0x5d, 0xcf, + 0x32, 0x51, 0x27, 0xa3, 0x3c, 0xba, 0x53, 0x1b, 0x46, 0xc9, 0x40, 0xa2, + 0x04, 0x95, 0xee, 0xf0, 0x4e, 0x6f, 0x1c, 0xe3, 0x61, 0x33, 0xa7, 0x9e, + 0x01, 0xfe, 0x98, 0xa9, 0x7a, 0x87, 0xf3, 0x0b, 0x66, 0x0b, 0x68, 0xee, + 0x9f, 0xfa, 0x15, 0xc7, 0xf8, 0x70, 0xb1, 0x7e, 0x4f, 0x9a, 0xf7, 0x2c, + 0xab, 0x37, 0x0b, 0xcd, 0x88, 0xe0, 0x87, 0x13, 0x80, 0x22, 0x50, 0x05, + 0xa4, 0xb6, 0x44, 0xfc, 0x9a, 0xef, 0xfb, 0xb3, 0x4f, 0x71, 0xeb, 0x7c, + 0x4e, 0x07, 0xc8, 0x4b, 0xb9, 0xba, 0x73, 0x5a, 0x6c, 0x65, 0xdb, 0x69, + 0x72, 0x7a, 0xdf, 0x27, 0x44, 0x9f, 0x86, 0xe1, 0xdc, 0x01, 0xd1, 0xc9, + 0x43, 0x27, 0x34, 0xc8, 0x9f, 0x0b, 0xae, 0x1d, 0x3e, 0x43, 0xfe, 0x27, + 0x8d, 0xf4, 0xd0, 0x8b, 0xe6, 0xf4, 0x8e, 0x90, 0x05, 0xe7, 0x31, 0x50, + 0x3f, 0x7a, 0x39, 0x8c, 0x1a, 0xd3, 0x76, 0x51, 0x36, 0x45, 0x10, 0x9f, + 0x89, 0x8b, 0x04, 0xcf, 0xe7, 0xde, 0x5e, 0xb7, 0xcf, 0x25, 0x19, 0xdc, + 0x19, 0xaf, 0xe3, 0x3c, 0x0c, 0x8f, 0x55, 0x71, 0x73, 0x6d, 0x5f, 0x4e, + 0xb5, 0x0e, 0x09, 0x68, 0x21, 0x40, 0x41, 0x52, 0x8f, 0xb8, 0xfa, 0x1f, + 0xa0, 0x17, 0xc2, 0x7e, 0x75, 0x3c, 0xbf, 0xcf, 0x08, 0x41, 0x1f, 0x6b, + 0x8d, 0xcc, 0xb4, 0x71, 0xc6, 0x4a, 0xfe, 0xee, 0xb6, 0xcc, 0x4c, 0x56, + 0x91, 0x95, 0x2b, 0xac, 0x46, 0x71, 0xab, 0x60, 0xe8, 0xdb, 0xb7, 0x00, + 0x92, 0x4a, 0xcd, 0x62, 0x05, 0x46, 0x19, 0x55, 0xd0, 0xec, 0xbb, 0x79, + 0x20, 0x77, 0x41, 0xc7, 0x39, 0x90, 0x87, 0x45, 0x17, 0xbd, 0xa1, 0xb2, + 0x43, 0xfb, 0x92, 0xd4, 0xa9, 0xb8, 0x47, 0x4d, 0xa5, 0x66, 0x90, 0xa7, + 0x21, 0x3c, 0x34, 0x96, 0x9e, 0x7b, 0xc6, 0x9e, 0x51, 0x9d, 0x40, 0x7f, + 0x38, 0xb6, 0x36, 0x9b, 0x1d, 0x77, 0x68, 0x48, 0xae, 0x10, 0xc5, 0x13, + 0xf0, 0xaf, 0x9d, 0xa0, 0x71, 0x5b, 0x7b, 0xbb, 0x39, 0xd6, 0xe6, 0x5b, + 0xe5, 0x91, 0x20, 0x2c, 0x0a, 0xea, 0x74, 0x28, 0xe0, 0xeb, 0x0a, 0x86, + 0xad, 0xd7, 0x3a, 0xce, 0x7d, 0xdb, 0x31, 0x59, 0xae, 0xc3, 0x48, 0x9f, + 0xae, 0x5a, 0x79, 0x1e, 0x97, 0x0f, 0x45, 0x86, 0xd6, 0x71, 0x4b, 0x72, + 0xc7, 0x51, 0x84, 0xf1, 0x0d, 0x9b, 0x40, 0xc5, 0x55, 0xbf, 0x56, 0xe8, + 0x6c, 0xbe, 0x0a, 0x98, 0xb5, 0x87, 0x55, 0xa4, 0x51, 0x1b, 0xa2, 0x4b, + 0xa7, 0xa8, 0x7f, 0xdf, 0xb7, 0x35, 0x90, 0xcd, 0x65, 0x73, 0x30, 0x59, + 0x6d, 0xc5, 0x4f, 0x45, 0xeb, 0x10, 0x8e, 0x22, 0x72, 0x34, 0x4a, 0xa8, + 0x03, 0xb5, 0x3f, 0x62, 0x16, 0x2e, 0xa8, 0xd5, 0xf4, 0x95, 0x58, 0x03, + 0x4a, 0xb5, 0x60, 0x42, 0x18, 0x95, 0x2a, 0xbd, 0xd3, 0x46, 0xdc, 0x2b, + 0x0c, 0xea, 0xf9, 0x74, 0x86, 0xdf, 0x8b, 0xb9, 0x0e, 0x8c, 0x18, 0xea, + 0xd6, 0x06, 0x49, 0x96, 0xf3, 0x46, 0x51, 0xb5, 0xc1, 0xf1, 0x4a, 0x62, + 0x25, 0x71, 0x4d, 0x2c, 0x73, 0x33, 0x6f, 0x57, 0xf7, 0xbf, 0x9d, 0xdd, + 0x80, 0x6b, 0xb8, 0x85, 0x77, 0x6f, 0x4b, 0x36, 0xcd, 0xbf, 0x21, 0x78, + 0x40, 0x72, 0xc9, 0xfb, 0x71, 0x39, 0x8c, 0x90, 0xe1, 0x2a, 0x6f, 0x2d, + 0xa8, 0xe8, 0xa1, 0x65, 0x2a, 0x49, 0xe5, 0xfb, 0x19, 0x11, 0xd6, 0x96, + 0x9f, 0xe8, 0x49, 0x27, 0xb7, 0x9e, 0x77, 0x68, 0x0d, 0x79, 0xab, 0x1d, + 0x22, 0x51, 0xee, 0xa6, 0x2f, 0x9b, 0x85, 0xf0, 0xe9, 0x85, 0x7e, 0x90, + 0xf9, 0x18, 0x02, 0xc3, 0xc1, 0xa2, 0x84, 0x8a, 0xcd, 0x95, 0xa2, 0x52, + 0x86, 0x71, 0x02, 0xc2, 0x09, 0x5a, 0x9c, 0x52, 0xfb, 0x34, 0x00, 0x05, + 0xdd, 0x83, 0x24, 0xb8, 0x30, 0x8f, 0xf0, 0x7c, 0xd8, 0x19, 0x81, 0x56, + 0x53, 0xa6, 0x4e, 0xa0, 0x92, 0x2a, 0xa8, 0xc5, 0x55, 0xe3, 0xc8, 0xa3, + 0x44, 0xaf, 0x0a, 0x69, 0x02, 0x46, 0x73, 0xfd, 0xdd, 0xe5, 0xbb, 0x11, + 0x7e, 0xc9, 0x9e, 0x3a, 0x1f, 0x27, 0x44, 0x1f, 0xb4, 0x30, 0xde, 0xa1, + 0x33, 0xf1, 0xe9, 0x74, 0x2a, 0xb2, 0x8c, 0xae, 0xb8, 0x7f, 0xb8, 0x52, + 0x56, 0x04, 0x85, 0x80, 0x54, 0xe4, 0x0d, 0xfc, 0xe6, 0x39, 0xde, 0x47, + 0x5b, 0x03, 0xba, 0xd6, 0xa4, 0xee, 0xd0, 0xcf, 0x7a, 0xd1, 0x75, 0xad, + 0xf8, 0xca, 0xac, 0x2e, 0x6d, 0x74, 0x89, 0x7c, 0x36, 0x87, 0x6a, 0x13, + 0xa6, 0x6f, 0xee, 0x84, 0x87, 0x97, 0xfc, 0x06, 0x2f, 0x82, 0x89, 0x47, + 0xa6, 0x07, 0xf7, 0xb6, 0x10, 0x96, 0x2e, 0xc5, 0x68, 0x6d, 0xf7, 0x86, + 0x93, 0x60, 0x96, 0xf6, 0x19, 0x77, 0xab, 0x17, 0x38, 0xf3, 0xea, 0x15, + 0x31, 0xac, 0xe7, 0x20, 0xaf, 0x5c, 0x55, 0x07, 0x25, 0x5a, 0xfc, 0x4d, + 0x7c, 0x00, 0x53, 0x09, 0x8b, 0x00, 0x50, 0x90, 0x50, 0xa1, 0x90, 0xcb, + 0x57, 0x00, 0xca, 0x19, 0xd0, 0xf6, 0xa3, 0x81, 0xd3, 0x48, 0xf1, 0xd3, + 0xb5, 0xe1, 0xaa, 0x96, 0xd8, 0xde, 0x32, 0x99, 0x98, 0x32, 0xa2, 0x9e, + 0x26, 0xbe, 0xaa, 0x7d, 0xb7, 0x75, 0xd8, 0x3d, 0xb4, 0x12, 0x27, 0x06, + 0x8d, 0xfb, 0xde, 0x60, 0xc0, 0x87, 0xcb, 0x0c, 0xf7, 0x2e, 0x80, 0x5c, + 0xc9, 0x5d, 0xdb, 0xbe, 0x57, 0x97, 0xf9, 0x69, 0x67, 0xa0, 0xdb, 0x96, + 0xe1, 0x2d, 0xa1, 0x9a, 0xc9, 0x92, 0x32, 0x2e, 0xcf, 0x24, 0x0b, 0xd1, + 0x13, 0xa3, 0xe1, 0x1a, 0xcc, 0x97, 0x24, 0x98, 0x62, 0xaa, 0xb1, 0x09, + 0x90, 0xc5, 0x5d, 0x6f, 0xdc, 0x9a, 0x95, 0xc0, 0x2b, 0x61, 0x0a, 0x11, + 0xa7, 0x8f, 0x69, 0x75, 0x93, 0x62, 0xf7, 0xd1, 0xb4, 0x60, 0xd5, 0x9c, + 0x49, 0x4b, 0x6d, 0x94, 0x50, 0xee, 0x14, 0xe4, 0x4f, 0xac, 0x37, 0xbf, + 0x82, 0xac, 0xb0, 0x51, 0xd2, 0x7d, 0x20, 0xad, 0xef, 0xe4, 0x81, 0x19, + 0x98, 0x28, 0xf7, 0x44, 0xf8, 0x41, 0x68, 0xfa, 0x54, 0x0a, 0x55, 0xa6, + 0xcf, 0xcd, 0x29, 0x7d, 0xc9, 0x0a, 0xa7, 0x44, 0x2b, 0xf0, 0x0b, 0xbe, + 0x80, 0x36, 0x60, 0xe2, 0x13, 0x42, 0xd0, 0x7f, 0x6a, 0xf9, 0xc5, 0x10, + 0x5a, 0x3c, 0x7e, 0x28, 0xe2, 0xf6, 0x4b, 0x1f, 0x10, 0x4c, 0x13, 0x47, + 0xcb, 0x18, 0x0c, 0x0e, 0xba, 0xd7, 0x70, 0x81, 0x80, 0xd5, 0x58, 0xe5, + 0xc7, 0xaf, 0x2a, 0x67, 0x33, 0x0d, 0xd1, 0xe1, 0x82, 0xe1, 0x62, 0x6a, + 0xc1, 0xcf, 0xc9, 0x26, 0x21, 0x56, 0x3c, 0xaa, 0x6f, 0xe5, 0xc3, 0x94, + 0x72, 0x55, 0x8e, 0xc8, 0x0b, 0xbc, 0x0b, 0x88, 0x4f, 0xd8, 0x1e, 0x09, + 0xa5, 0x7d, 0xe4, 0x38, 0xa7, 0x59, 0x04, 0x98, 0xe3, 0x7c, 0x49, 0x77, + 0x21, 0x0b, 0xe6, 0x81, 0x60, 0xc1, 0xfe, 0x02, 0xd8, 0x13, 0xd9, 0xbd, + 0x8a, 0x28, 0xfd, 0x14, 0xc6, 0xc9, 0x2b, 0x2c, 0x20, 0x5a, 0x0a, 0x8b, + 0x70, 0x62, 0x88, 0x64, 0x0a, 0x84, 0xfa, 0x3d, 0x1d, 0xfd, 0x85, 0x5b, + 0x6f, 0xc6, 0x9f, 0xca, 0xa4, 0xa2, 0x73, 0xed, 0x66, 0x9b, 0x3d, 0x6d, + 0x8e, 0xc6, 0x5f, 0x0e, 0x27, 0x46, 0x5e, 0xc8, 0x3f, 0xaf, 0x31, 0xad, + 0x21, 0x80, 0x02, 0x23, 0xc8, 0x4f, 0x9b, 0xfe, 0xc8, 0xc3, 0x1e, 0x47, + 0xc4, 0x65, 0x61, 0x7f, 0xa3, 0x79, 0x31, 0x12, 0x3c, 0xee, 0x14, 0xf1, + 0x96, 0x1e, 0xc2, 0x5d, 0x2c, 0x91, 0x9e, 0xb0, 0xb7, 0x0a, 0x31, 0xa4, + 0x80, 0xbd, 0xd3, 0x75, +}; + +const uint8_t expected_sk[] = { + 0xe1, 0xae, 0xd9, 0xfe, 0x3c, 0x2c, 0xb5, 0x70, 0xd1, 0x82, 0x51, 0x08, + 0x12, 0x3c, 0x36, 0x39, 0xb5, 0xe3, 0x73, 0xf6, 0x5f, 0x8c, 0xed, 0x56, + 0x26, 0x15, 0xc7, 0xe1, 0xea, 0x48, 0xce, 0x8e, 0xdc, 0x0e, 0xb3, 0x14, + 0x4c, 0x75, 0xb6, 0x5a, 0x54, 0x78, 0x67, 0xaa, 0x07, 0x18, 0x6c, 0xba, + 0x72, 0x59, 0x9c, 0x8d, 0x8c, 0x90, 0xf3, 0x1b, 0x15, 0x84, 0xb8, 0x17, + 0xef, 0x02, 0x12, 0x26, 0x29, 0x6c, 0xca, 0x62, 0x24, 0x81, 0x5e, 0xa4, + 0xa4, 0x02, 0x0b, 0xa8, 0x4f, 0xfc, 0x34, 0x9d, 0x30, 0xe9, 0x6a, 0xd2, + 0xc9, 0x20, 0x1a, 0x14, 0xcd, 0xf1, 0x17, 0xbe, 0x63, 0x52, 0x77, 0x3f, + 0x4c, 0x12, 0x0e, 0x07, 0x1a, 0x39, 0xff, 0xbb, 0xb8, 0x83, 0xa9, 0xf4, + 0x80, 0x7a, 0x46, 0x9c, 0xfb, 0xaf, 0xad, 0x27, 0xa0, 0x06, 0x6f, 0x11, + 0xc1, 0xe1, 0x0e, 0x16, 0x0f, 0xf2, 0x36, 0xf1, 0x1b, 0x91, 0x08, 0x4b, + 0x36, 0x85, 0x18, 0xc4, 0x31, 0x1b, 0x29, 0x64, 0x04, 0x27, 0x6e, 0x19, + 0x14, 0x62, 0x04, 0x49, 0x92, 0xe0, 0x84, 0x41, 0x0b, 0x92, 0x29, 0xe1, + 0x28, 0x2d, 0x93, 0xb6, 0x09, 0x23, 0xa5, 0x30, 0x89, 0x82, 0x80, 0x00, + 0x24, 0x44, 0x18, 0x30, 0x70, 0x00, 0x27, 0x90, 0xca, 0x28, 0x4a, 0x88, + 0x12, 0x41, 0x5b, 0xb8, 0x68, 0x12, 0x06, 0x6a, 0x18, 0x37, 0x01, 0x01, + 0x06, 0x25, 0xda, 0x16, 0x85, 0x08, 0x05, 0x32, 0x81, 0x20, 0x8c, 0x61, + 0x14, 0x4e, 0xc0, 0xc0, 0x8c, 0xc9, 0x32, 0x30, 0x11, 0x27, 0x2a, 0x23, + 0xb8, 0x90, 0x88, 0x90, 0x20, 0x14, 0x32, 0x89, 0x13, 0xa3, 0x44, 0x14, + 0x27, 0x62, 0x0c, 0xb4, 0x0c, 0x50, 0xa0, 0x45, 0x41, 0x42, 0x4c, 0x19, + 0x11, 0x22, 0x1a, 0xb4, 0x71, 0xa0, 0x30, 0x32, 0x44, 0x42, 0x44, 0xa2, + 0x42, 0x32, 0xe3, 0x94, 0x51, 0x63, 0xa4, 0x08, 0x54, 0x12, 0x88, 0x5b, + 0x00, 0x71, 0x10, 0x42, 0x62, 0x52, 0x10, 0x68, 0xd3, 0xc6, 0x81, 0x92, + 0x02, 0x64, 0xdb, 0x22, 0x89, 0xcc, 0x90, 0x70, 0x82, 0x18, 0x0d, 0x8a, + 0x04, 0x6e, 0x12, 0x35, 0x60, 0x1c, 0x04, 0x12, 0x02, 0x05, 0x62, 0xc3, + 0x20, 0x42, 0xdb, 0x20, 0x84, 0x12, 0xb9, 0x05, 0xa3, 0x16, 0x42, 0x09, + 0x08, 0x05, 0x89, 0x44, 0x2c, 0x20, 0x89, 0x69, 0x22, 0xa8, 0x10, 0x08, + 0x93, 0x85, 0x9a, 0x42, 0x4a, 0x21, 0x89, 0x60, 0xd1, 0x48, 0x4c, 0x13, + 0x46, 0x11, 0x8c, 0x40, 0x85, 0x0b, 0x14, 0x46, 0x09, 0x25, 0x2d, 0xcc, + 0x32, 0x80, 0x4b, 0x32, 0x66, 0x50, 0xb4, 0x2c, 0xc8, 0xa2, 0x30, 0x24, + 0x06, 0x61, 0xa1, 0x98, 0x65, 0xe3, 0x86, 0x28, 0xa1, 0x22, 0x49, 0x19, + 0xa7, 0x40, 0x49, 0x10, 0x41, 0x4a, 0x44, 0x02, 0x03, 0x42, 0x08, 0x4b, + 0x46, 0x80, 0x1a, 0x13, 0x52, 0x00, 0xa5, 0x24, 0x80, 0x34, 0x8e, 0x8b, + 0x82, 0x08, 0x92, 0x86, 0x4c, 0x23, 0x40, 0x6a, 0x09, 0x94, 0x25, 0x24, + 0x19, 0x28, 0x04, 0xb1, 0x00, 0x51, 0xa2, 0x6d, 0xe0, 0x36, 0x08, 0x12, + 0x09, 0x69, 0x43, 0x42, 0x4e, 0x91, 0x84, 0x91, 0xca, 0x48, 0x64, 0x0a, + 0xb6, 0x24, 0xe2, 0x42, 0x4d, 0x08, 0xa8, 0x09, 0x01, 0x86, 0x50, 0x00, + 0x18, 0x29, 0x1c, 0x82, 0x09, 0x13, 0xa7, 0x81, 0x60, 0xc8, 0x0d, 0x43, + 0x14, 0x40, 0xe0, 0xc8, 0x51, 0xc0, 0x96, 0x51, 0x5b, 0x34, 0x4d, 0xd3, + 0x84, 0x0c, 0x02, 0x22, 0x8a, 0xcb, 0xc0, 0x2d, 0x21, 0x26, 0x50, 0x92, + 0x00, 0x20, 0x1a, 0x36, 0x44, 0xa0, 0x36, 0x84, 0xe3, 0xb2, 0x21, 0x24, + 0x25, 0x65, 0xc8, 0x34, 0x82, 0x0c, 0x49, 0x8d, 0x03, 0xa0, 0x6d, 0x20, + 0x05, 0x32, 0x91, 0x36, 0x29, 0x1b, 0x33, 0x91, 0x13, 0x92, 0x40, 0x04, + 0x32, 0x10, 0x1b, 0x97, 0x29, 0x0a, 0x90, 0x40, 0x99, 0x22, 0x12, 0x9c, + 0xa8, 0x91, 0xcc, 0xa8, 0x69, 0x02, 0x16, 0x60, 0x14, 0x16, 0x40, 0x81, + 0x10, 0x12, 0x00, 0x35, 0x68, 0xe1, 0xa6, 0x20, 0x1a, 0xa2, 0x40, 0xd1, + 0x36, 0x46, 0xd0, 0x30, 0x10, 0x0c, 0x92, 0x91, 0x21, 0x07, 0x66, 0x5b, + 0x82, 0x50, 0x60, 0x10, 0x61, 0x21, 0x17, 0x61, 0x59, 0x10, 0x02, 0x00, + 0x96, 0x2c, 0x5c, 0x86, 0x0d, 0x0b, 0x90, 0x09, 0xdb, 0x20, 0x26, 0xc1, + 0x94, 0x80, 0x18, 0xc7, 0x65, 0x03, 0x16, 0x22, 0x1a, 0x36, 0x70, 0x49, + 0x14, 0x2c, 0xe4, 0xc6, 0x64, 0x81, 0x84, 0x81, 0xa1, 0x86, 0x68, 0x14, + 0x89, 0x44, 0x9c, 0x94, 0x80, 0xd4, 0x98, 0x4c, 0x12, 0xc0, 0x64, 0x21, + 0x34, 0x69, 0x44, 0x12, 0x51, 0x82, 0x88, 0x29, 0x93, 0x16, 0x20, 0x59, + 0x10, 0x61, 0xd8, 0x04, 0x0d, 0xa0, 0x92, 0x91, 0x9c, 0x34, 0x2a, 0x03, + 0xc9, 0x8d, 0x84, 0x14, 0x0c, 0x44, 0xc8, 0x21, 0x52, 0x80, 0x88, 0x48, + 0x18, 0x12, 0x61, 0x42, 0x08, 0xd3, 0x32, 0x46, 0x04, 0x13, 0x6c, 0xda, + 0xb4, 0x6d, 0x9c, 0xc0, 0x49, 0x1b, 0x28, 0x52, 0x10, 0x48, 0x66, 0x90, + 0xc2, 0x90, 0x51, 0x46, 0x41, 0x4a, 0x80, 0x49, 0xc8, 0xb0, 0x0d, 0x0b, + 0x34, 0x91, 0x62, 0x34, 0x05, 0x12, 0xb8, 0x25, 0x23, 0x88, 0x0d, 0x43, + 0x28, 0x88, 0x8b, 0xa8, 0x51, 0xd9, 0x08, 0x81, 0x02, 0xa2, 0x91, 0xd8, + 0x30, 0x00, 0xd9, 0x10, 0x86, 0x14, 0x09, 0x2a, 0x51, 0x38, 0x6a, 0x9b, + 0x12, 0x60, 0x61, 0x06, 0x0d, 0x1c, 0xc0, 0x21, 0x64, 0x20, 0x4c, 0x54, + 0x46, 0x48, 0x9b, 0xb6, 0x10, 0x61, 0xc4, 0x60, 0xe3, 0x04, 0x91, 0xdc, + 0x26, 0x4c, 0xa4, 0xa2, 0x49, 0x90, 0x98, 0x8c, 0x11, 0x44, 0x65, 0x1c, + 0xa7, 0x89, 0x02, 0x19, 0x71, 0xcb, 0x34, 0x51, 0x88, 0xb8, 0x04, 0xdc, + 0x18, 0x81, 0xd4, 0x00, 0x4c, 0x88, 0xb2, 0x09, 0x1a, 0xa9, 0x2d, 0xe2, + 0x38, 0x29, 0x91, 0xc2, 0x40, 0x00, 0x93, 0x10, 0xc2, 0x40, 0x20, 0xe1, + 0xa6, 0x70, 0x24, 0x18, 0x2a, 0x21, 0x26, 0x82, 0x48, 0x28, 0x91, 0xc4, + 0xa2, 0x01, 0x5a, 0x82, 0x88, 0x08, 0x84, 0x48, 0x88, 0xc6, 0x49, 0x00, + 0x20, 0x52, 0x64, 0x34, 0x06, 0xd4, 0x40, 0x26, 0xdc, 0x02, 0x51, 0x21, + 0x90, 0x0d, 0x1c, 0x87, 0x41, 0xc3, 0x08, 0x50, 0x18, 0x20, 0x11, 0x21, + 0x14, 0x49, 0x09, 0x01, 0x64, 0x20, 0x98, 0x80, 0x12, 0xb5, 0x8c, 0x90, + 0x38, 0x06, 0xc1, 0xa8, 0x81, 0x81, 0x16, 0x41, 0xe3, 0xb8, 0x49, 0x43, + 0x30, 0x72, 0x22, 0x24, 0x20, 0x20, 0x48, 0x05, 0x0a, 0x19, 0x89, 0xc2, + 0xc8, 0x50, 0xdb, 0x90, 0x28, 0x58, 0x34, 0x61, 0x5e, 0x21, 0xa6, 0x23, + 0x17, 0x51, 0xcf, 0xb5, 0xdf, 0xae, 0xf7, 0x2a, 0xb6, 0xbe, 0x6c, 0x54, + 0x1e, 0xfe, 0xb6, 0x31, 0x4e, 0xea, 0xd7, 0x4b, 0x09, 0x06, 0xc5, 0x9d, + 0x8d, 0xb1, 0x59, 0x17, 0xb1, 0x7b, 0x5a, 0x80, 0x23, 0x65, 0x6a, 0x97, + 0x8f, 0xf1, 0x23, 0xf9, 0x61, 0xff, 0xde, 0x8a, 0xaa, 0x62, 0x51, 0xea, + 0x16, 0x7d, 0x4a, 0x72, 0x38, 0x76, 0x47, 0xfd, 0x47, 0x32, 0xdb, 0x05, + 0x24, 0xd2, 0xf9, 0x6b, 0x8e, 0x58, 0x0e, 0x7b, 0x63, 0xca, 0x6e, 0xc5, + 0x22, 0x75, 0xf3, 0x22, 0x6b, 0x53, 0xb6, 0x4e, 0x19, 0x63, 0x78, 0xfa, + 0xb4, 0x76, 0x70, 0xda, 0x5a, 0x37, 0x49, 0xd5, 0x8c, 0xff, 0x7e, 0x19, + 0x38, 0x93, 0x51, 0xb1, 0xf4, 0x4d, 0x9f, 0xfc, 0x72, 0xaf, 0xd4, 0xfa, + 0x57, 0xcf, 0x17, 0x72, 0x72, 0xd4, 0xb7, 0x40, 0x5b, 0x42, 0x49, 0x15, + 0xa6, 0xe5, 0x6b, 0x94, 0x8f, 0x1f, 0x61, 0xc5, 0xc2, 0x0a, 0x25, 0x12, + 0xf7, 0x46, 0x40, 0x63, 0xb6, 0x84, 0x04, 0x09, 0x05, 0x0b, 0xd9, 0x3e, + 0x07, 0xc9, 0x13, 0x0d, 0x5f, 0x25, 0x55, 0x50, 0xe0, 0x9a, 0x7e, 0xb6, + 0x5e, 0x31, 0x30, 0xaa, 0x85, 0x29, 0x93, 0x8b, 0xe4, 0xe4, 0x91, 0x61, + 0x1c, 0x80, 0x11, 0x89, 0x67, 0x76, 0xec, 0xc9, 0x25, 0x3a, 0xeb, 0x1a, + 0x20, 0xe8, 0xcd, 0xc4, 0xe9, 0xf9, 0x75, 0x2e, 0xa3, 0x59, 0xa5, 0xe9, + 0xc7, 0x9b, 0x17, 0x03, 0x78, 0x4a, 0x22, 0xd3, 0x0d, 0x96, 0xee, 0xa9, + 0x85, 0x12, 0x2c, 0xda, 0x5e, 0x05, 0x63, 0x1c, 0x34, 0x78, 0x21, 0x12, + 0x6f, 0xd1, 0x0e, 0x85, 0x04, 0xd5, 0xff, 0xe5, 0xc9, 0xb1, 0x80, 0xa8, + 0x7a, 0x9b, 0x6a, 0xe4, 0x42, 0xaa, 0xfd, 0x4b, 0x3d, 0xa6, 0xd3, 0x3d, + 0x05, 0x8d, 0x0e, 0x1e, 0x4a, 0x78, 0x65, 0x47, 0x91, 0x00, 0xb8, 0xdc, + 0xe8, 0xcb, 0x36, 0xea, 0x7d, 0xc8, 0xf4, 0xb1, 0x46, 0x08, 0x3d, 0xe4, + 0x8b, 0x0f, 0x32, 0xf1, 0x77, 0xfa, 0xbf, 0x06, 0xb8, 0x02, 0xa2, 0xab, + 0x1d, 0x66, 0x15, 0x74, 0xee, 0xd3, 0x83, 0x18, 0xf1, 0xc4, 0x68, 0xcf, + 0x50, 0x33, 0x84, 0x2c, 0x69, 0x68, 0x9a, 0x45, 0xc7, 0x27, 0x49, 0xd6, + 0xff, 0x0e, 0x09, 0x5c, 0xa5, 0x90, 0x12, 0xe5, 0x80, 0x8f, 0x3f, 0x5e, + 0x70, 0xff, 0xc5, 0x90, 0xf4, 0xcd, 0x9a, 0xe4, 0x85, 0x07, 0x9d, 0xcd, + 0xcc, 0x7f, 0xd1, 0xa1, 0xb1, 0xb1, 0x7b, 0x23, 0x1c, 0xfe, 0xc2, 0xc9, + 0x73, 0xd4, 0x9c, 0x81, 0xfb, 0xc5, 0x1e, 0xd7, 0x97, 0xfb, 0xc9, 0x46, + 0x76, 0x81, 0x33, 0xa2, 0x53, 0x5a, 0x19, 0x72, 0x7c, 0x90, 0x26, 0x02, + 0x38, 0x48, 0x7b, 0x94, 0x14, 0x22, 0x30, 0xf9, 0xa5, 0x03, 0x01, 0x74, + 0x1f, 0xc1, 0xd9, 0x09, 0x9c, 0xd2, 0x48, 0xd9, 0xc3, 0xab, 0x2b, 0xfd, + 0x1b, 0xd6, 0xa6, 0x5f, 0x54, 0x8b, 0x16, 0x83, 0x39, 0xf8, 0x9d, 0x6d, + 0xe9, 0x89, 0x5f, 0xd2, 0xf2, 0x3b, 0xf6, 0x78, 0xca, 0x3b, 0x71, 0x40, + 0x3d, 0x97, 0xd7, 0xca, 0xfd, 0x40, 0x79, 0xc1, 0x72, 0xc9, 0xac, 0x93, + 0x09, 0x48, 0x2e, 0x71, 0x73, 0xfc, 0x5c, 0x04, 0x80, 0xc7, 0x90, 0x4c, + 0x23, 0xa1, 0xf7, 0xe0, 0x3f, 0x21, 0x6a, 0xee, 0xa8, 0xec, 0xda, 0x9e, + 0x8e, 0x5e, 0xa7, 0x87, 0xc8, 0xb1, 0x43, 0x1c, 0xde, 0xd0, 0x0d, 0xdb, + 0x8a, 0x0b, 0x97, 0xb1, 0x5a, 0xce, 0x7f, 0xdb, 0xea, 0x3f, 0x06, 0x40, + 0xcb, 0x28, 0xb5, 0xcc, 0xd6, 0xc8, 0xd6, 0x03, 0xf9, 0x6a, 0x68, 0x75, + 0xa2, 0xde, 0x06, 0xba, 0x80, 0x9e, 0xfe, 0x25, 0x0a, 0x87, 0x38, 0x2b, + 0x0d, 0xf9, 0x89, 0x87, 0x4f, 0x5b, 0x3b, 0x90, 0xe3, 0x9e, 0x02, 0x61, + 0xeb, 0x78, 0xf8, 0x54, 0x9c, 0x0b, 0x53, 0x41, 0x48, 0x90, 0x8f, 0x71, + 0xd1, 0x6e, 0xf2, 0x5b, 0x5f, 0xdd, 0xf3, 0xb7, 0x21, 0xda, 0xdd, 0x3a, + 0x85, 0x4b, 0x20, 0x5b, 0xcf, 0x45, 0x40, 0x0f, 0x79, 0xcd, 0x9a, 0xbc, + 0x19, 0x5d, 0x16, 0xab, 0xf0, 0xd2, 0x42, 0x20, 0x3a, 0x61, 0xa0, 0x59, + 0x58, 0x3b, 0xb8, 0xf1, 0x65, 0x92, 0x98, 0x13, 0x0c, 0x26, 0x95, 0x05, + 0x71, 0xb3, 0xae, 0xd8, 0xab, 0x35, 0x17, 0x19, 0x8d, 0x17, 0xb4, 0xc0, + 0x81, 0x36, 0x76, 0x4f, 0xc4, 0xce, 0x4b, 0x4f, 0x53, 0xc1, 0x97, 0x23, + 0x6b, 0xf7, 0x5d, 0x2b, 0x69, 0x64, 0xbf, 0x85, 0xb0, 0x9f, 0x56, 0x20, + 0x99, 0x96, 0xbe, 0x04, 0x3b, 0xaa, 0x37, 0x3f, 0xc7, 0x1d, 0x7d, 0xfc, + 0x4e, 0x42, 0x78, 0xc1, 0x09, 0xa8, 0x81, 0x13, 0xfc, 0x9a, 0xfc, 0x73, + 0xa6, 0xbf, 0x2d, 0x0e, 0x4c, 0x72, 0xd3, 0xac, 0xbf, 0x66, 0xea, 0xd7, + 0xf9, 0xb0, 0x67, 0x10, 0x75, 0x60, 0x56, 0x1f, 0x9d, 0x91, 0xc6, 0x71, + 0x94, 0xb6, 0xfc, 0xe3, 0x93, 0xf8, 0xa8, 0xc3, 0x69, 0x8e, 0x55, 0xc2, + 0x0a, 0xbf, 0x8e, 0x66, 0x4a, 0x30, 0x70, 0xd2, 0xbe, 0xdf, 0x9a, 0xc9, + 0x07, 0x83, 0xe0, 0xc8, 0xbe, 0x09, 0xa1, 0x65, 0xae, 0x07, 0xc4, 0x63, + 0xfe, 0x88, 0x60, 0x48, 0xc2, 0x3a, 0x2f, 0x47, 0x86, 0x2d, 0x93, 0x2c, + 0x04, 0xd1, 0xd4, 0x2d, 0x98, 0xc8, 0x7f, 0xfb, 0x9a, 0xc9, 0x1e, 0xcb, + 0xba, 0x42, 0x48, 0xfb, 0x90, 0x59, 0x77, 0xc3, 0x0f, 0x8d, 0x7d, 0x46, + 0x8f, 0xbb, 0xa3, 0x0f, 0x90, 0x90, 0x10, 0x37, 0x96, 0x46, 0x3b, 0x91, + 0xe7, 0x8d, 0xe1, 0xea, 0x45, 0x78, 0xb1, 0xff, 0xb5, 0xe6, 0xf6, 0xf0, + 0xa3, 0x12, 0xa1, 0x4f, 0x7a, 0xc8, 0x6e, 0x8f, 0xe9, 0x50, 0x18, 0x5a, + 0x55, 0x91, 0x6f, 0xf6, 0xaf, 0x2e, 0x2a, 0xb8, 0xf8, 0x5b, 0xf8, 0x3f, + 0x70, 0xb0, 0x68, 0x14, 0x4c, 0x2b, 0xa2, 0x3e, 0x75, 0x74, 0xae, 0x14, + 0x1d, 0x0f, 0x17, 0xce, 0x26, 0xa7, 0xab, 0x2f, 0x2f, 0x8a, 0xb8, 0x09, + 0x38, 0xd0, 0xbe, 0xed, 0x70, 0x3b, 0xc5, 0x24, 0xc5, 0x3d, 0x56, 0x8a, + 0x5c, 0x08, 0xdb, 0xe8, 0x37, 0x68, 0xe5, 0xea, 0xaf, 0x9d, 0x0b, 0x8f, + 0x8f, 0x0e, 0x02, 0xa3, 0xbe, 0x0f, 0xc2, 0x9a, 0x9d, 0xe1, 0x97, 0x46, + 0xc2, 0xd8, 0xa4, 0xef, 0x99, 0x8b, 0x45, 0x67, 0xbd, 0xd8, 0xc1, 0xb8, + 0x93, 0x8e, 0x9a, 0xe3, 0x73, 0x62, 0x1f, 0x33, 0x83, 0x7b, 0xc5, 0x0f, + 0x56, 0xc1, 0x4f, 0x10, 0x0e, 0x73, 0x7f, 0x5b, 0x70, 0x0e, 0xd6, 0xc0, + 0xc1, 0xc0, 0x29, 0xe1, 0xd3, 0xa2, 0x63, 0xb5, 0x8a, 0x8e, 0x64, 0x31, + 0x0b, 0x1a, 0xf1, 0x87, 0xef, 0xda, 0x2e, 0x2e, 0xc0, 0x1f, 0x47, 0x4b, + 0xf7, 0xce, 0xe0, 0x21, 0x2f, 0x73, 0x04, 0xe6, 0xc4, 0xd6, 0x62, 0x55, + 0xbc, 0xd8, 0xc5, 0x36, 0x77, 0xce, 0x29, 0x35, 0x15, 0x81, 0x53, 0xd5, + 0xc6, 0x3a, 0x4b, 0x76, 0x21, 0x3a, 0xe7, 0x5e, 0xa3, 0xac, 0xb4, 0xfd, + 0xdb, 0x90, 0xa0, 0x75, 0x32, 0x49, 0x41, 0xcc, 0x75, 0x2e, 0x54, 0x2b, + 0xeb, 0xb6, 0xd6, 0xbe, 0xb4, 0xb0, 0x32, 0x71, 0x62, 0x29, 0xef, 0xd9, + 0x7f, 0x4c, 0xc4, 0x47, 0x95, 0x3d, 0xf5, 0x9e, 0x4c, 0x06, 0x3b, 0xfc, + 0xcc, 0x58, 0xdf, 0x6f, 0xf6, 0x46, 0xf7, 0x2a, 0xaf, 0xcd, 0x43, 0xd2, + 0x60, 0x7f, 0x98, 0x6c, 0x9b, 0x9d, 0xc1, 0xc3, 0x85, 0x56, 0x6a, 0x2b, + 0x97, 0x5b, 0x7b, 0x73, 0xab, 0xa6, 0x54, 0x7c, 0x4b, 0x0c, 0x13, 0xb6, + 0x1c, 0x0e, 0x89, 0x9f, 0xef, 0xff, 0x0d, 0xd2, 0x91, 0x94, 0xf6, 0xf4, + 0x74, 0x3d, 0x74, 0x50, 0xb5, 0x24, 0x00, 0x81, 0x09, 0x8d, 0x0e, 0x6e, + 0x8b, 0x37, 0x47, 0xe6, 0x0d, 0xa9, 0xc5, 0xa2, 0x0e, 0x24, 0xf4, 0xa8, + 0x9b, 0x74, 0x3b, 0x26, 0xec, 0xde, 0x94, 0x2f, 0x31, 0xe2, 0x1e, 0xd0, + 0x87, 0xce, 0xe4, 0x3f, 0xba, 0x93, 0x01, 0x23, 0x9e, 0xc7, 0x4d, 0xd4, + 0x64, 0x15, 0x6c, 0x66, 0xa7, 0x65, 0x1d, 0x7e, 0x0a, 0xe3, 0x5e, 0xb8, + 0x42, 0x70, 0x70, 0x76, 0x92, 0xff, 0xaf, 0xe9, 0xd3, 0x69, 0x26, 0xf2, + 0x23, 0x8f, 0xee, 0xda, 0x73, 0x6a, 0xac, 0x0a, 0xe6, 0x3a, 0x15, 0x16, + 0xdb, 0xef, 0x17, 0x7d, 0x14, 0x3a, 0x44, 0x8a, 0x1c, 0x13, 0x76, 0xd4, + 0x0f, 0x3a, 0x32, 0x04, 0x65, 0xab, 0x4b, 0xd0, 0x99, 0xbb, 0x63, 0x83, + 0x7d, 0xf2, 0xbc, 0xa8, 0x60, 0x55, 0x8d, 0x2d, 0x81, 0x02, 0x01, 0x35, + 0x1c, 0xa9, 0xf9, 0xf5, 0x6d, 0x96, 0x85, 0x54, 0x10, 0xf7, 0xa1, 0xf2, + 0x1f, 0x53, 0x16, 0x06, 0x2e, 0x34, 0x8a, 0x31, 0x66, 0x3a, 0xc0, 0xcc, + 0xcc, 0x67, 0x0d, 0xee, 0x60, 0x4c, 0xf9, 0xe2, 0x19, 0x3d, 0x4d, 0x1a, + 0xec, 0x9c, 0x41, 0x9a, 0x6a, 0x5c, 0x1f, 0xbd, 0xaa, 0x5d, 0x0f, 0x1c, + 0x79, 0xf5, 0xc1, 0xaf, 0xf5, 0xb6, 0xcf, 0xfe, 0xe1, 0x9c, 0xf9, 0xf1, + 0xf4, 0x0e, 0x10, 0xbc, 0xc6, 0x03, 0xee, 0x96, 0xfc, 0x0c, 0x38, 0xae, + 0x24, 0x21, 0x73, 0x85, 0xba, 0xf7, 0xf0, 0xa8, 0xff, 0xbe, 0xae, 0xd3, + 0x0c, 0xdd, 0xa8, 0xdd, 0x91, 0x57, 0x28, 0x25, 0xd3, 0x41, 0x14, 0xe2, + 0x80, 0x15, 0x84, 0xe3, 0x85, 0xd2, 0x06, 0x81, 0x02, 0x99, 0xfe, 0x96, + 0x07, 0xd9, 0x44, 0x9e, 0x26, 0xed, 0x0d, 0xde, 0x8c, 0xc7, 0x8d, 0x11, + 0xfc, 0xc1, 0x50, 0x01, 0xaf, 0xd5, 0x2e, 0xd0, 0x75, 0x7a, 0x5f, 0x48, + 0x25, 0x26, 0x5f, 0x10, 0x3c, 0x42, 0x49, 0xb1, 0x16, 0x87, 0x36, 0xd3, + 0xd6, 0x7a, 0x02, 0xd1, 0x97, 0xd0, 0x08, 0x80, 0x23, 0xdf, 0x12, 0xa0, + 0xf7, 0x0d, 0x08, 0x26, 0x56, 0x35, 0x44, 0x2b, 0xd6, 0xd5, 0xa3, 0x77, + 0xa5, 0x8c, 0xa7, 0x21, 0x02, 0xc5, 0x86, 0x10, 0x15, 0x50, 0x31, 0x8f, + 0xb8, 0x41, 0x65, 0xef, 0xca, 0xe4, 0xfa, 0x13, 0x07, 0x53, 0x51, 0x12, + 0x75, 0xf8, 0x42, 0xd6, 0x07, 0x43, 0x41, 0xe0, 0xeb, 0x5b, 0xaf, 0x88, + 0xc7, 0x49, 0x0a, 0xbf, 0x54, 0x04, 0x81, 0x0d, 0xc8, 0xe8, 0x11, 0x9e, + 0xfa, 0xb9, 0x75, 0x17, 0x54, 0x7a, 0x56, 0xba, 0x27, 0x28, 0x7b, 0x66, + 0x80, 0xde, 0xad, 0x97, 0xe3, 0xda, 0x56, 0x13, 0x3a, 0x36, 0xad, 0xe7, + 0xb0, 0xe4, 0x1a, 0xcb, 0xfd, 0x20, 0x3f, 0xd8, 0x47, 0xb2, 0x8f, 0xa3, + 0x4b, 0x3e, 0xe7, 0x9e, 0x15, 0x08, 0x34, 0xc9, 0xd9, 0x79, 0x10, 0x5a, + 0x13, 0x1f, 0xcc, 0x37, 0xe7, 0x29, 0x95, 0xc7, 0xf8, 0xbd, 0xe2, 0x36, + 0x17, 0x43, 0x88, 0xf0, 0x1c, 0x5d, 0x8d, 0x1a, 0x27, 0x66, 0x03, 0x93, + 0x50, 0x33, 0xec, 0x04, 0x58, 0x22, 0x24, 0x91, 0x23, 0x50, 0xcd, 0x3a, + 0x82, 0x6b, 0xd9, 0x0e, 0x8e, 0x65, 0x8e, 0x09, 0x38, 0x57, 0x0e, 0xd3, + 0x84, 0x58, 0xb5, 0x98, 0xb0, 0x1f, 0x0b, 0xa1, 0xfd, 0xdf, 0x03, 0x8a, + 0x4e, 0xfe, 0xe5, 0x61, 0xcd, 0xb5, 0x08, 0xb3, 0x88, 0xf6, 0xd8, 0x2c, + 0x6b, 0xe1, 0x92, 0xcc, 0x60, 0x22, 0x72, 0x1e, 0xe3, 0x7c, 0x33, 0x21, + 0x01, 0x68, 0x41, 0xb1, 0x92, 0xc6, 0x7f, 0xe9, 0x1d, 0xa8, 0xb0, 0x60, + 0xf5, 0xe7, 0xd5, 0xd9, 0x72, 0x50, 0x45, 0x5e, 0x75, 0xb6, 0x68, 0x02, + 0x15, 0xbf, 0xf1, 0x1f, 0x6d, 0xe7, 0x11, 0xdb, 0x7e, 0x54, 0x10, 0x92, + 0x21, 0x21, 0x8e, 0x71, 0x85, 0xb4, 0x3f, 0x06, 0xb5, 0x3d, 0xef, 0x59, + 0xb7, 0x61, 0x24, 0xc4, 0x5e, 0xcd, 0x4a, 0x23, 0x18, 0x0a, 0xff, 0x01, + 0x54, 0xab, 0xe9, 0x4a, 0x57, 0x99, 0x5f, 0xd9, 0xfc, 0xfc, 0x5c, 0xda, + 0x89, 0xc1, 0xd1, 0x75, 0xe5, 0x63, 0xd8, 0x0c, 0xc4, 0x94, 0x30, 0x00, + 0xf3, 0x19, 0x23, 0x7a, 0xee, 0x11, 0xae, 0xab, 0x6a, 0x6d, 0xc6, 0x7d, + 0x9f, 0x1c, 0x2d, 0x44, 0x9e, 0x3d, 0xe3, 0x6b, 0x50, 0xc3, 0x89, 0x88, + 0x9c, 0xfb, 0x11, 0x42, 0x1a, 0x94, 0x43, 0x28, 0xc8, 0xc2, 0x5a, 0x32, + 0x5e, 0x5e, 0xfb, 0xb7, 0x69, 0x37, 0x0b, 0x54, 0x4c, 0x1b, 0x65, 0xef, + 0xae, 0xe4, 0xfa, 0xc0, 0x26, 0xe1, 0x10, 0xf9, 0xda, 0xca, 0x14, 0xf3, + 0x82, 0xdf, 0x63, 0xdf, 0x9c, 0x50, 0xb0, 0xe8, 0x54, 0xab, 0xaa, 0x75, + 0xc0, 0x6e, 0x0b, 0x39, 0x2b, 0x5c, 0x40, 0xa4, 0x45, 0x31, 0xbf, 0x4f, + 0x7c, 0x63, 0xd0, 0xed, 0x86, 0x25, 0x6c, 0x4e, 0xd6, 0x51, 0x86, 0xe7, + 0x38, 0x9e, 0xdc, 0x05, +}; + +const uint8_t expected_sig[] = { + 0x27, 0x5e, 0xbe, 0x2d, 0x23, 0x1a, 0x76, 0xc5, 0xd9, 0x77, 0xcb, 0x62, + 0x25, 0x04, 0xdb, 0x23, 0x31, 0xa9, 0xa8, 0xcd, 0xbc, 0xde, 0xf2, 0x20, + 0xfd, 0xa7, 0xb5, 0xf5, 0x59, 0xae, 0xe6, 0xdd, 0x62, 0xfa, 0x34, 0x96, + 0x4f, 0x1d, 0xcd, 0x84, 0x82, 0xee, 0xc1, 0x74, 0x96, 0x3d, 0x98, 0xd9, + 0x42, 0x9d, 0xd0, 0x77, 0x9c, 0xf9, 0x9e, 0x0e, 0xa7, 0xcb, 0x70, 0xeb, + 0xe7, 0xcd, 0xce, 0x8c, 0xdc, 0x37, 0x15, 0x95, 0x0e, 0x24, 0x70, 0x4f, + 0x33, 0x6e, 0x4f, 0xad, 0xed, 0x4d, 0xf3, 0xe5, 0x38, 0xc1, 0xcd, 0xbb, + 0xde, 0xf1, 0xd2, 0x0d, 0xd6, 0x6b, 0xa3, 0x68, 0x92, 0x4c, 0x4b, 0x4f, + 0x89, 0xa0, 0xa8, 0xc8, 0x36, 0x93, 0x91, 0x17, 0xe7, 0x16, 0xed, 0xcb, + 0xdc, 0xf6, 0x28, 0x13, 0x32, 0x60, 0x14, 0xe0, 0x28, 0x7a, 0x69, 0x05, + 0x1d, 0xf7, 0x3b, 0xdf, 0x18, 0x0c, 0xaf, 0xba, 0x46, 0xf1, 0x5e, 0xd4, + 0xd3, 0xd0, 0x8e, 0x9a, 0xe2, 0xac, 0xdd, 0x0e, 0x5f, 0xb1, 0x69, 0xe2, + 0x74, 0x77, 0x2e, 0x52, 0xf9, 0x11, 0x3d, 0xd8, 0xe5, 0x36, 0x6f, 0x7d, + 0x7d, 0xde, 0x7c, 0xa7, 0x1d, 0x37, 0xdf, 0x6d, 0x5e, 0xea, 0xc8, 0xc0, + 0x72, 0x3f, 0x79, 0xbd, 0x0b, 0x6d, 0x7f, 0x9a, 0x15, 0x90, 0xda, 0xc1, + 0xae, 0xce, 0xf3, 0x44, 0x35, 0x5e, 0x83, 0x86, 0x7e, 0x89, 0x18, 0xa7, + 0x97, 0x8e, 0x87, 0x7c, 0x15, 0xd2, 0xd2, 0x7e, 0xf2, 0xc8, 0x29, 0x4f, + 0x70, 0x0f, 0xa6, 0xd4, 0x76, 0xe8, 0xdd, 0x7d, 0x7a, 0x2d, 0xfe, 0x0a, + 0x0c, 0x5c, 0xb1, 0xef, 0xec, 0x1a, 0x32, 0xca, 0x87, 0xff, 0x6b, 0xb1, + 0xa0, 0xe1, 0x2e, 0x01, 0x52, 0xb2, 0xb8, 0x74, 0x34, 0xb3, 0xfb, 0x15, + 0x0f, 0x17, 0xca, 0x74, 0xc1, 0xc1, 0x61, 0x86, 0x40, 0x38, 0x58, 0xba, + 0x82, 0x26, 0x66, 0x33, 0xa4, 0x52, 0xf3, 0xb5, 0x36, 0x60, 0xd8, 0x5a, + 0x8d, 0x9d, 0x28, 0x18, 0x3a, 0x68, 0x34, 0x2a, 0xa2, 0xe2, 0xb5, 0x39, + 0xed, 0x7d, 0xe5, 0xbe, 0x46, 0xb9, 0x04, 0x0c, 0xf3, 0xef, 0x88, 0x6e, + 0x9d, 0x6f, 0x23, 0xe2, 0x44, 0xe5, 0x2e, 0x3a, 0x7a, 0x1d, 0x49, 0x0f, + 0xdd, 0xcd, 0xd6, 0x4e, 0x0d, 0x0b, 0xc3, 0x35, 0xf2, 0xd1, 0x5d, 0x73, + 0x5d, 0x07, 0xca, 0x5c, 0xbd, 0x14, 0xec, 0x57, 0xb3, 0xbd, 0x37, 0xe7, + 0xdf, 0x06, 0x7d, 0xe0, 0x58, 0x4a, 0xcf, 0x7a, 0xc5, 0xa7, 0x24, 0x62, + 0x6f, 0x09, 0x75, 0x69, 0x74, 0x7f, 0xdf, 0xc8, 0x69, 0x5c, 0x20, 0x10, + 0x3a, 0xe8, 0x01, 0x12, 0xa3, 0xfb, 0xda, 0x4c, 0x3a, 0x0d, 0x3c, 0x3e, + 0x26, 0xe0, 0xa6, 0x7f, 0xb2, 0x6b, 0x0b, 0x68, 0x0a, 0x68, 0x86, 0xb1, + 0xfa, 0x61, 0x3a, 0xe8, 0x77, 0xdc, 0x42, 0xf7, 0xf4, 0x39, 0x9a, 0x40, + 0x58, 0x71, 0xc7, 0x0f, 0xf4, 0x0e, 0xc5, 0x1e, 0xe0, 0x28, 0x45, 0x7d, + 0xba, 0x84, 0xe4, 0x34, 0x69, 0xf9, 0xa5, 0x8a, 0x80, 0x43, 0xc0, 0x8d, + 0x04, 0x33, 0x43, 0xb8, 0xd7, 0x5d, 0x93, 0xed, 0x0f, 0x31, 0x6a, 0x4d, + 0xbf, 0xb7, 0x44, 0x41, 0x1b, 0xd4, 0xac, 0x9d, 0x83, 0x66, 0x08, 0x92, + 0xad, 0x3c, 0x0e, 0x1a, 0xe8, 0xd4, 0xe1, 0x5c, 0x63, 0xcf, 0x27, 0x48, + 0x5a, 0x8f, 0xc5, 0x6f, 0x83, 0x6b, 0x6f, 0xe8, 0xda, 0x1f, 0xba, 0xe9, + 0x7e, 0x11, 0xab, 0x8b, 0x4e, 0xc1, 0x9e, 0x23, 0x69, 0x1f, 0x42, 0x40, + 0xad, 0xbb, 0xfb, 0x4f, 0xe2, 0x50, 0xc9, 0x46, 0xe7, 0x15, 0x15, 0xf8, + 0x61, 0x09, 0x2a, 0x0b, 0x37, 0x43, 0xd4, 0x98, 0x5f, 0xc8, 0x4d, 0x06, + 0xe7, 0x0c, 0x3f, 0x83, 0x59, 0xd5, 0xcd, 0x2d, 0xde, 0x1e, 0x3a, 0x87, + 0x4e, 0xf7, 0x0a, 0x3c, 0x84, 0x72, 0x47, 0x11, 0x02, 0x6c, 0xe8, 0x93, + 0xcd, 0x24, 0xe9, 0x23, 0x86, 0x78, 0x53, 0xe0, 0xc6, 0x2f, 0xba, 0xa7, + 0xed, 0xaf, 0xba, 0x42, 0x80, 0x0d, 0xe6, 0xae, 0xda, 0xed, 0xbc, 0x65, + 0x21, 0x6d, 0x13, 0x90, 0x61, 0xb4, 0x05, 0x7b, 0x07, 0x86, 0xd7, 0x89, + 0x30, 0x9c, 0xc1, 0x9a, 0x41, 0x4d, 0xe8, 0x2b, 0x35, 0x21, 0x3a, 0x8a, + 0x60, 0x83, 0x1a, 0x97, 0x10, 0x98, 0xb6, 0xe1, 0x6b, 0xb5, 0xb1, 0xa1, + 0x36, 0x34, 0x60, 0x1b, 0x96, 0x5d, 0x1f, 0x2a, 0xd8, 0xf2, 0x94, 0xdd, + 0x58, 0x3d, 0x0f, 0xbe, 0x9d, 0xfc, 0xf5, 0x24, 0xb1, 0xd2, 0xc3, 0x36, + 0xef, 0xdb, 0x8e, 0x97, 0x3c, 0x9a, 0x4f, 0x48, 0xe3, 0x84, 0x91, 0xd8, + 0x39, 0x91, 0xf6, 0x55, 0xeb, 0x62, 0x51, 0x3d, 0x8f, 0x55, 0x60, 0x5e, + 0x00, 0xe0, 0xd2, 0xc7, 0x66, 0x51, 0xf1, 0xe2, 0xb7, 0x43, 0xc3, 0xe6, + 0x12, 0x9a, 0xe5, 0x84, 0xe0, 0x10, 0x76, 0xc7, 0x75, 0x6e, 0xa6, 0xee, + 0x11, 0xe4, 0xaf, 0xbd, 0x8a, 0x4f, 0x1d, 0x05, 0x29, 0x4f, 0xce, 0xa5, + 0x73, 0x92, 0x57, 0x7e, 0x0d, 0x11, 0xbc, 0xf8, 0x74, 0x4d, 0xf7, 0xb9, + 0x40, 0x0d, 0x5a, 0xa1, 0x19, 0x76, 0x4a, 0xae, 0x21, 0x16, 0xd4, 0x3f, + 0x76, 0xbf, 0x27, 0xbd, 0x2f, 0xe4, 0x25, 0x21, 0x00, 0x4e, 0xcc, 0x7c, + 0xc6, 0x57, 0xa4, 0xbf, 0xf1, 0x56, 0x90, 0xe0, 0xa4, 0xa3, 0xee, 0xcf, + 0x43, 0x4f, 0xda, 0x77, 0x47, 0x51, 0x79, 0x6a, 0x29, 0xb4, 0x2c, 0xdf, + 0xca, 0x47, 0xcb, 0xb8, 0x82, 0x7e, 0x44, 0x62, 0x9b, 0x8f, 0x61, 0x7b, + 0x3a, 0x93, 0x82, 0x1f, 0x69, 0xb7, 0xb1, 0xa6, 0x2c, 0xe1, 0xb2, 0x65, + 0xa0, 0x6d, 0x6f, 0xe4, 0x79, 0xd8, 0x30, 0xe0, 0xee, 0xd8, 0x83, 0x01, + 0xb2, 0x1f, 0x5c, 0x90, 0x44, 0x86, 0x48, 0x11, 0xf9, 0x11, 0xff, 0xea, + 0x45, 0x43, 0xae, 0x8a, 0x6b, 0x99, 0xf2, 0x1f, 0x02, 0x51, 0x4a, 0x35, + 0x02, 0x34, 0xd3, 0xe8, 0xda, 0xb1, 0x4b, 0xe3, 0xa5, 0x60, 0xce, 0x67, + 0xe3, 0x62, 0x59, 0xfc, 0x00, 0x0a, 0xe2, 0xfe, 0x7b, 0x1e, 0xe6, 0xf5, + 0x75, 0x19, 0x9b, 0x5e, 0xcb, 0xe6, 0xf5, 0x80, 0x9e, 0x3c, 0xb8, 0x54, + 0xd6, 0x0b, 0xfd, 0x48, 0xe0, 0xfa, 0x82, 0x2b, 0x5b, 0x26, 0xf9, 0x49, + 0xaf, 0xbe, 0x9c, 0x78, 0x73, 0xce, 0xc5, 0x65, 0xe2, 0x94, 0x2b, 0xd9, + 0xd0, 0x27, 0x3a, 0x66, 0x3e, 0xe2, 0xe0, 0x10, 0x79, 0x3d, 0xde, 0xc8, + 0x47, 0xdb, 0x1e, 0xc3, 0xe7, 0x51, 0xae, 0x59, 0xeb, 0x38, 0x66, 0x63, + 0x40, 0x8f, 0xbe, 0x1e, 0xb2, 0x2b, 0xeb, 0x64, 0x5f, 0xdd, 0x24, 0xc4, + 0x5a, 0x25, 0x59, 0xa2, 0xda, 0x4f, 0xdf, 0xf8, 0xb0, 0xb0, 0xf7, 0xcd, + 0x1f, 0x14, 0xcd, 0x09, 0x48, 0x70, 0x27, 0x1b, 0xde, 0xc4, 0xf0, 0xf3, + 0x56, 0x97, 0x8a, 0xb7, 0xf4, 0x19, 0x76, 0xe3, 0x9a, 0x33, 0x55, 0xfe, + 0x93, 0x68, 0xca, 0x1f, 0x3d, 0x44, 0x86, 0x39, 0x5d, 0x84, 0x58, 0x50, + 0xf2, 0xf1, 0xea, 0x4a, 0x5c, 0x1c, 0x74, 0xf0, 0x4b, 0xa5, 0x9c, 0x30, + 0xa0, 0x14, 0x1a, 0x80, 0xe0, 0xde, 0x3e, 0xae, 0x7f, 0x10, 0x18, 0x4a, + 0x1e, 0x9e, 0x6b, 0x75, 0x1a, 0xca, 0x08, 0x4e, 0x61, 0x72, 0x43, 0x9b, + 0x18, 0x4d, 0x2c, 0xd8, 0xb4, 0xc9, 0xea, 0x00, 0xb0, 0xdf, 0x1b, 0xcb, + 0x03, 0xc3, 0x7a, 0x27, 0xff, 0x41, 0x9d, 0xf9, 0xfd, 0xb3, 0x0c, 0xc0, + 0x48, 0x5d, 0x7c, 0xae, 0x5a, 0x72, 0x69, 0x93, 0x68, 0xe1, 0x9e, 0x9f, + 0x1f, 0x5c, 0x0a, 0x60, 0x90, 0x1a, 0x8e, 0x5a, 0x30, 0xd4, 0x2c, 0xbd, + 0xe1, 0x20, 0x51, 0xbc, 0x1c, 0x50, 0xb5, 0xf7, 0x42, 0x23, 0x35, 0x0f, + 0x92, 0xe2, 0xbb, 0x2a, 0x04, 0xa7, 0xde, 0x2e, 0x25, 0xfa, 0xed, 0x20, + 0x83, 0x9c, 0xd4, 0x56, 0xe0, 0x4d, 0x8d, 0x79, 0xa5, 0xa0, 0x6f, 0x49, + 0x62, 0x82, 0x9a, 0xa7, 0x4e, 0x54, 0x95, 0x0a, 0xc6, 0x5e, 0x27, 0x65, + 0x6d, 0x11, 0x2b, 0x35, 0x72, 0x34, 0x48, 0xd2, 0xe4, 0x9e, 0x07, 0x7d, + 0x03, 0x27, 0x15, 0x93, 0x55, 0x5c, 0x32, 0x43, 0xdb, 0x34, 0x8d, 0xbd, + 0x8d, 0x88, 0xa5, 0x24, 0x07, 0x93, 0x89, 0x37, 0xb9, 0x17, 0x15, 0xad, + 0xc7, 0x68, 0x86, 0x63, 0x0f, 0x10, 0x53, 0x8f, 0x40, 0xd3, 0x7b, 0x22, + 0x2b, 0x1a, 0x4c, 0xcb, 0x4f, 0x51, 0xf1, 0x3b, 0x19, 0xb8, 0x42, 0x53, + 0xaf, 0xf6, 0xb9, 0x57, 0x7f, 0xba, 0x8d, 0xb8, 0xb7, 0x3b, 0xe3, 0xc5, + 0xab, 0x4a, 0x26, 0x21, 0x6e, 0xce, 0x27, 0xb8, 0xc3, 0x99, 0x56, 0x14, + 0xdd, 0x5b, 0x61, 0x82, 0xbf, 0xd3, 0xc8, 0x76, 0xee, 0x22, 0xaf, 0x21, + 0x21, 0x1d, 0x4e, 0x33, 0xb5, 0x43, 0x3a, 0xfb, 0x91, 0xa0, 0xaa, 0xe3, + 0x10, 0x4a, 0x50, 0x42, 0xd4, 0x5f, 0x92, 0x0e, 0x71, 0x60, 0x4f, 0xaa, + 0xef, 0x66, 0x45, 0xfe, 0xf7, 0xc8, 0xb0, 0x73, 0x75, 0x91, 0x0b, 0x86, + 0x40, 0xa5, 0x02, 0x28, 0xf7, 0xe0, 0x1f, 0x5d, 0xe6, 0xe3, 0xa4, 0x57, + 0xbd, 0x29, 0xaa, 0x53, 0xae, 0x35, 0x30, 0x78, 0x73, 0xd6, 0xb7, 0x01, + 0x9d, 0x13, 0x50, 0xf6, 0x39, 0xa2, 0x3e, 0x03, 0x04, 0xaa, 0x6d, 0xcf, + 0x6b, 0xff, 0x9a, 0xbe, 0x3e, 0x0a, 0xd4, 0x20, 0xce, 0x42, 0x1f, 0xca, + 0x2f, 0xd3, 0x2c, 0xd1, 0xf4, 0xd2, 0x50, 0xd3, 0xa2, 0xc1, 0x1e, 0x87, + 0xbf, 0xeb, 0xb8, 0xa8, 0xd4, 0x1c, 0x96, 0xb8, 0x8e, 0xbe, 0x35, 0x5f, + 0x08, 0x28, 0x20, 0x2b, 0xdc, 0xa4, 0xf5, 0xf6, 0xde, 0xca, 0x1e, 0xcb, + 0x93, 0x3b, 0x64, 0x79, 0x00, 0x3c, 0x8d, 0xbb, 0x5c, 0x7a, 0x40, 0x14, + 0x58, 0x12, 0xa4, 0xf7, 0x6e, 0x51, 0xfb, 0xe7, 0x6f, 0x49, 0x5b, 0xc2, + 0xc9, 0x05, 0x38, 0x9c, 0x08, 0x78, 0x71, 0x27, 0x2b, 0xf5, 0xbf, 0xd6, + 0x38, 0xaa, 0x45, 0xe1, 0xe1, 0x4c, 0xfb, 0xfd, 0xb7, 0xe6, 0xcf, 0xad, + 0x9e, 0x56, 0xaf, 0x12, 0x12, 0x98, 0xe6, 0x38, 0xaa, 0xee, 0xdb, 0x9e, + 0xca, 0xe1, 0x79, 0x6d, 0x44, 0xfb, 0x19, 0x50, 0x92, 0x00, 0x06, 0x2c, + 0x24, 0x71, 0x6c, 0x34, 0x45, 0xac, 0xf9, 0x82, 0x66, 0xa8, 0x63, 0x80, + 0xa8, 0x5b, 0x21, 0x3c, 0x36, 0x71, 0x93, 0x40, 0x7b, 0xff, 0xa2, 0xd0, + 0x72, 0xb4, 0x66, 0xfa, 0xfc, 0xa0, 0xee, 0xca, 0x15, 0x73, 0x52, 0xe7, + 0x9d, 0x11, 0xd3, 0xbc, 0xab, 0x37, 0x31, 0x0e, 0xaf, 0xdc, 0x05, 0x30, + 0x79, 0x8c, 0x25, 0x75, 0x5c, 0x60, 0xc7, 0x9a, 0xfc, 0x88, 0xea, 0xe6, + 0x09, 0x9f, 0xd1, 0x4f, 0x13, 0xf4, 0x41, 0x54, 0x5b, 0x7a, 0xe4, 0x49, + 0x3c, 0x0f, 0x15, 0xe9, 0xa4, 0x85, 0xb2, 0x92, 0x07, 0xea, 0xea, 0x7c, + 0xc1, 0x6d, 0xa9, 0x03, 0xb3, 0x31, 0xce, 0x1e, 0x82, 0xca, 0x9e, 0x3c, + 0x88, 0x88, 0xc1, 0x04, 0x5f, 0xbe, 0xd5, 0x94, 0x0d, 0x67, 0x98, 0x27, + 0xd0, 0x0f, 0x43, 0xf3, 0xb3, 0xfc, 0xff, 0x24, 0xa2, 0x1e, 0x17, 0x06, + 0xb0, 0x52, 0x16, 0x7c, 0xd8, 0x49, 0x74, 0x51, 0xcf, 0x2d, 0x36, 0x16, + 0xb0, 0x88, 0xb2, 0x2b, 0x1d, 0x72, 0x70, 0xab, 0xe2, 0xf6, 0x5f, 0xa5, + 0x2d, 0x4e, 0xd1, 0x42, 0x3c, 0x83, 0x84, 0xb2, 0x56, 0xeb, 0x8d, 0xce, + 0x33, 0x46, 0xdb, 0x3d, 0x4f, 0x97, 0xea, 0x37, 0x5e, 0x0d, 0xd7, 0x4c, + 0x9a, 0x7e, 0xc9, 0x0e, 0x69, 0x4d, 0x97, 0x15, 0x1e, 0x09, 0xbe, 0x7e, + 0xff, 0xe8, 0xf5, 0xab, 0xe9, 0xe7, 0xed, 0x4b, 0x41, 0xa5, 0xf2, 0x2a, + 0x24, 0x48, 0x8b, 0x72, 0x4b, 0x9d, 0xcf, 0x45, 0xdb, 0xc0, 0xaf, 0xa8, + 0x0f, 0x0f, 0x67, 0x37, 0xd3, 0x8b, 0xe1, 0x67, 0x90, 0xd8, 0x1c, 0x58, + 0x36, 0x46, 0x51, 0x52, 0xea, 0xb4, 0x75, 0xb1, 0xcd, 0xc5, 0x39, 0x16, + 0xe0, 0xec, 0x16, 0xf7, 0xf8, 0x0f, 0x5d, 0x13, 0x84, 0x62, 0x34, 0x86, + 0x42, 0x05, 0xa8, 0x08, 0x84, 0xa9, 0x77, 0x12, 0xc1, 0x56, 0xdd, 0x28, + 0xde, 0x39, 0x33, 0x21, 0x3d, 0xbd, 0x94, 0xce, 0xe4, 0xb3, 0x17, 0x9b, + 0x09, 0x20, 0xf0, 0x25, 0xce, 0x00, 0x34, 0x8e, 0x12, 0x94, 0x74, 0x0b, + 0x16, 0xa1, 0x60, 0x76, 0x24, 0xf0, 0xbf, 0xe3, 0x3a, 0x83, 0x8f, 0x40, + 0x47, 0x2e, 0x1c, 0xd5, 0x35, 0x25, 0x87, 0xb3, 0x11, 0xdc, 0x98, 0xb0, + 0xa6, 0x5f, 0x6a, 0x05, 0x1d, 0x06, 0x8d, 0xe8, 0xb0, 0x98, 0xf0, 0x43, + 0x29, 0x84, 0xe4, 0xef, 0x34, 0x67, 0x74, 0x64, 0xe8, 0xb8, 0xf0, 0xd4, + 0x9e, 0xc1, 0x3f, 0x5f, 0xeb, 0xe0, 0x9b, 0x37, 0xf8, 0x75, 0x46, 0x47, + 0xa5, 0x3e, 0x42, 0x20, 0x50, 0xc4, 0x5d, 0xf3, 0xdf, 0x4e, 0xf8, 0x0e, + 0x1e, 0x15, 0x10, 0x3e, 0xf1, 0x68, 0xad, 0x87, 0xad, 0xe5, 0x45, 0x5e, + 0x22, 0xba, 0x2e, 0x51, 0xa0, 0xbf, 0xdc, 0x87, 0xca, 0xe4, 0x1f, 0x2f, + 0x2c, 0xae, 0xa9, 0x14, 0xd7, 0xdd, 0x01, 0xa8, 0x4f, 0x43, 0xcb, 0x84, + 0x92, 0xbf, 0xf9, 0x3d, 0xf0, 0x6b, 0x19, 0x43, 0xb0, 0xdf, 0xff, 0x94, + 0x76, 0xe2, 0x84, 0xf9, 0x31, 0x88, 0x7e, 0xc6, 0x87, 0x58, 0xbe, 0x5d, + 0x8b, 0xf8, 0xb5, 0xdc, 0x95, 0x16, 0x5f, 0xa1, 0x2c, 0xe8, 0x53, 0x36, + 0x64, 0xf5, 0x5d, 0xa0, 0x74, 0x12, 0x78, 0x59, 0x73, 0x69, 0x5a, 0x2b, + 0x36, 0x4a, 0xff, 0x5b, 0xef, 0x49, 0x2c, 0xb2, 0x9e, 0x59, 0xf0, 0x39, + 0x56, 0xe1, 0xd0, 0x1a, 0x05, 0xb2, 0x7c, 0xd1, 0x40, 0x09, 0xdf, 0x00, + 0xc9, 0x15, 0x53, 0xa2, 0xda, 0x84, 0xb5, 0x85, 0x05, 0x76, 0xa6, 0x1b, + 0xcb, 0x06, 0xb2, 0xc8, 0xa0, 0xc5, 0x23, 0x8f, 0xb0, 0xe8, 0xf5, 0xd9, + 0xd0, 0x19, 0x29, 0xfe, 0x2d, 0x9a, 0x57, 0x76, 0x5f, 0xf2, 0xef, 0x71, + 0x16, 0xee, 0x28, 0x7b, 0xe4, 0x48, 0xeb, 0xda, 0xe0, 0xd5, 0xbc, 0x0e, + 0x46, 0x6b, 0x06, 0x5d, 0xe5, 0x91, 0x2d, 0xcb, 0xc4, 0x53, 0xa6, 0x16, + 0xd5, 0xe7, 0xd8, 0xf1, 0xdd, 0x4f, 0xbb, 0xcc, 0x55, 0x67, 0x19, 0x98, + 0x94, 0x95, 0x5e, 0xd6, 0xf5, 0xf7, 0xe8, 0x6a, 0xf7, 0x20, 0x86, 0x3a, + 0x43, 0xbf, 0xe9, 0xec, 0x6b, 0x33, 0x49, 0x19, 0x43, 0xfb, 0xeb, 0x3f, + 0xf4, 0x9d, 0x29, 0x66, 0xb9, 0x6e, 0xb5, 0x15, 0x4b, 0x8d, 0x3c, 0x3c, + 0xfa, 0xf2, 0x87, 0xba, 0x61, 0x11, 0x40, 0xe6, 0xb4, 0x6f, 0xf5, 0xe1, + 0x24, 0x32, 0x69, 0x3e, 0xff, 0xf7, 0xbc, 0xee, 0x82, 0xf2, 0x9e, 0x6d, + 0x3f, 0x6c, 0xcc, 0x0f, 0x4f, 0xc3, 0xf1, 0xdb, 0x1e, 0x81, 0xd7, 0x9b, + 0x22, 0xa8, 0xa7, 0x36, 0x6d, 0xa9, 0x6f, 0x46, 0x1a, 0xa7, 0xff, 0x00, + 0x4b, 0xd8, 0xab, 0xe7, 0x50, 0x3b, 0xe9, 0xc0, 0x57, 0xec, 0x8d, 0x0c, + 0xa0, 0xee, 0x8c, 0x2a, 0x74, 0xf2, 0x94, 0xf9, 0x0c, 0x20, 0x14, 0xd9, + 0xad, 0x0d, 0x4e, 0xac, 0x35, 0x44, 0x59, 0x28, 0x24, 0x31, 0x32, 0xaa, + 0x6d, 0xc2, 0x13, 0xb9, 0xee, 0x75, 0x0c, 0x5f, 0x39, 0xef, 0x31, 0xca, + 0x28, 0x48, 0x56, 0x59, 0xfb, 0xa8, 0xd8, 0x2b, 0x70, 0x61, 0x22, 0x43, + 0x43, 0xb9, 0x60, 0x44, 0xeb, 0xf8, 0x98, 0x87, 0x25, 0x84, 0xa2, 0xaa, + 0x37, 0xd4, 0xb8, 0xd6, 0x3d, 0xa3, 0xa1, 0x4a, 0x81, 0xc2, 0xa9, 0xea, + 0xa2, 0xd6, 0x63, 0x76, 0x50, 0xeb, 0xcd, 0x19, 0x40, 0xb1, 0x7c, 0xf6, + 0xc1, 0x44, 0x01, 0x25, 0xe0, 0xdd, 0xb8, 0x39, 0xef, 0x46, 0x3d, 0x50, + 0x33, 0xed, 0xb1, 0x63, 0x65, 0xd7, 0x50, 0xe7, 0x95, 0xba, 0xab, 0xa7, + 0x14, 0xe5, 0x60, 0xcb, 0x81, 0x6e, 0x88, 0x3c, 0x06, 0x6e, 0x7d, 0x8e, + 0xe7, 0xbb, 0xa5, 0xc2, 0xbd, 0xae, 0x46, 0x8f, 0x43, 0x04, 0x29, 0xe6, + 0x17, 0x38, 0x05, 0x2d, 0x97, 0x93, 0x5b, 0xf9, 0xef, 0x4d, 0x2e, 0x75, + 0x6c, 0x69, 0xba, 0x08, 0xf2, 0x21, 0x1e, 0x21, 0xe6, 0x8a, 0x5b, 0x8c, + 0xd4, 0x8e, 0xde, 0x64, 0x9b, 0x9d, 0x54, 0x58, 0x65, 0x3e, 0xdd, 0x8a, + 0x1e, 0x81, 0x4e, 0x45, 0xe8, 0xfb, 0x20, 0xc3, 0x3a, 0xf0, 0x50, 0x1e, + 0x8a, 0x18, 0xea, 0x2b, 0xf5, 0xe1, 0xa6, 0xb6, 0xc8, 0xa0, 0x02, 0x3d, + 0x6e, 0xfa, 0x0b, 0x51, 0x95, 0x4e, 0x4c, 0x11, 0xb0, 0xc4, 0x62, 0x58, + 0xa6, 0x9c, 0x13, 0x4e, 0xbe, 0xc9, 0x29, 0x93, 0x29, 0x15, 0x5f, 0xaf, + 0x0e, 0xc3, 0xb3, 0x26, 0x3f, 0xdc, 0x4c, 0x33, 0xb8, 0x4b, 0x11, 0xae, + 0x1f, 0xd7, 0x05, 0x39, 0xcf, 0xfe, 0xc3, 0x6d, 0xf0, 0xc0, 0x77, 0x02, + 0xb8, 0x9b, 0x3d, 0x1b, 0x3d, 0x72, 0xfe, 0x7e, 0x18, 0x60, 0x9b, 0xc4, + 0x8b, 0xac, 0x25, 0x6d, 0x3b, 0x80, 0x34, 0xbc, 0x51, 0xaf, 0xf6, 0xff, + 0x66, 0x98, 0x86, 0x6e, 0x9e, 0x9a, 0xfe, 0x6d, 0x21, 0x4d, 0xf1, 0x58, + 0x3e, 0x3e, 0x43, 0xe3, 0x7e, 0x40, 0xb0, 0xb3, 0xd8, 0x12, 0xa5, 0xce, + 0x09, 0x41, 0x8c, 0x1d, 0x73, 0xcd, 0xfc, 0x63, 0xed, 0xeb, 0x08, 0x1e, + 0x34, 0xfb, 0xed, 0x75, 0xb7, 0x86, 0x84, 0x7c, 0x80, 0xe9, 0xe4, 0xa3, + 0x1c, 0x4a, 0x0d, 0x11, 0x16, 0x24, 0xb2, 0xb1, 0x99, 0xe5, 0xe3, 0x2e, + 0x2f, 0x70, 0xcd, 0x1e, 0x35, 0x14, 0x79, 0xba, 0xa2, 0x51, 0x7a, 0x29, + 0x5c, 0x75, 0x8f, 0xdd, 0x22, 0xdf, 0xb2, 0x64, 0xd9, 0x95, 0x11, 0x33, + 0x97, 0xee, 0x69, 0x42, 0x01, 0x96, 0x98, 0x1b, 0x43, 0xc2, 0xec, 0xf9, + 0xb0, 0xdb, 0x69, 0x34, 0xab, 0x98, 0x1b, 0xb2, 0x04, 0x05, 0x14, 0x1d, + 0x25, 0x2f, 0x32, 0x41, 0x50, 0x51, 0x55, 0x62, 0x6d, 0x78, 0x7f, 0x8b, + 0xbb, 0xc2, 0xcd, 0xcf, 0xe4, 0xed, 0x04, 0x1f, 0x25, 0x30, 0x43, 0x64, + 0x69, 0x7c, 0x87, 0xa3, 0xa9, 0xb1, 0xc1, 0xd1, 0xdc, 0x01, 0x10, 0x1d, + 0x27, 0x3f, 0x5c, 0x5d, 0x75, 0x82, 0x9b, 0xaa, 0xb3, 0xe8, 0x0c, 0x11, + 0x1f, 0x24, 0x38, 0x41, 0x45, 0x54, 0x5f, 0x69, 0x85, 0x8d, 0x93, 0x9e, + 0xc5, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x16, 0x25, 0x32, 0x42, +}; + +#elif MLD_CONFIG_PARAMETER_SET == 65 +const uint8_t expected_pk[] = { + 0xb9, 0x28, 0xd6, 0x32, 0xf8, 0x1a, 0x59, 0xe2, 0x63, 0xcb, 0x7b, 0x31, + 0xe0, 0x93, 0x2e, 0xb5, 0xf4, 0x62, 0x4f, 0xb1, 0x61, 0x7b, 0xba, 0x47, + 0x61, 0xa7, 0x28, 0x9b, 0x31, 0x25, 0x31, 0x7e, 0xbe, 0x38, 0xa7, 0x36, + 0x48, 0x3d, 0xe3, 0xcf, 0x8d, 0x42, 0xba, 0x0e, 0x1d, 0x65, 0x11, 0xc5, + 0x49, 0xa0, 0x0d, 0x7e, 0xb0, 0xde, 0xa7, 0x39, 0xed, 0x8e, 0x3b, 0x67, + 0xaa, 0xf4, 0x49, 0x91, 0x72, 0x21, 0xfd, 0x6a, 0x1f, 0xda, 0xa1, 0x18, + 0x00, 0xe5, 0xd2, 0x96, 0xf9, 0x72, 0x28, 0xae, 0xfa, 0x26, 0x1a, 0x58, + 0x52, 0x5c, 0x43, 0xb1, 0x6a, 0x8c, 0xf2, 0x0d, 0xb8, 0x0f, 0x7b, 0x7f, + 0xf4, 0x4b, 0x9a, 0x5f, 0xab, 0x0b, 0xf2, 0x80, 0xb9, 0x25, 0x5f, 0xd3, + 0x6b, 0xc9, 0xf0, 0x12, 0x73, 0x13, 0x2c, 0xdc, 0x7d, 0x58, 0xe0, 0x3a, + 0x58, 0xd6, 0xab, 0x1e, 0x23, 0x69, 0xd0, 0x1b, 0xe7, 0x00, 0x6f, 0xca, + 0x81, 0x0d, 0x5d, 0x73, 0x7e, 0x1d, 0xed, 0x3a, 0x62, 0x7f, 0x32, 0x6d, + 0xaa, 0x55, 0x9a, 0x43, 0x86, 0xff, 0xd2, 0x5e, 0x9e, 0x98, 0xb1, 0x12, + 0x18, 0xde, 0x38, 0x7a, 0x3d, 0x95, 0xa0, 0x4d, 0x6b, 0xba, 0xf3, 0xdd, + 0x67, 0x0a, 0x0c, 0xf8, 0x9d, 0xc9, 0x26, 0x3c, 0x7d, 0x08, 0x79, 0x21, + 0x02, 0xb9, 0x18, 0x5f, 0x80, 0xa1, 0x36, 0x07, 0x05, 0xc3, 0xc0, 0x84, + 0xf2, 0xad, 0x94, 0x48, 0xf8, 0x9b, 0x56, 0x2a, 0xc8, 0xd3, 0xe1, 0x0c, + 0x95, 0xe7, 0xc6, 0xd7, 0x8a, 0x31, 0xb4, 0x5e, 0x59, 0x0c, 0xf6, 0x00, + 0x7d, 0x8b, 0x7d, 0x88, 0x11, 0xf0, 0xb0, 0x0e, 0xb9, 0x3e, 0x09, 0x1f, + 0xb6, 0x52, 0xf7, 0x11, 0xf8, 0xb6, 0xf1, 0x66, 0x52, 0xde, 0x14, 0x5a, + 0x9f, 0x9a, 0x76, 0x92, 0xb7, 0xc1, 0x85, 0x4f, 0x15, 0xba, 0xe1, 0x95, + 0x42, 0x1e, 0xd4, 0x48, 0x91, 0xe7, 0x64, 0x4a, 0x8c, 0x17, 0xd4, 0xfe, + 0xeb, 0xe3, 0x30, 0x7f, 0x6f, 0xfe, 0x54, 0xc5, 0x93, 0xf2, 0xa9, 0x5b, + 0xdd, 0xcb, 0xbb, 0xd6, 0xe9, 0x1f, 0xe8, 0xdf, 0x04, 0x13, 0x6c, 0xec, + 0x59, 0xae, 0xe5, 0xb7, 0x04, 0xd5, 0x10, 0x81, 0x71, 0x87, 0x9d, 0xb7, + 0x53, 0x50, 0x8f, 0x08, 0x3a, 0x54, 0xa8, 0x10, 0xaf, 0x47, 0x03, 0xcf, + 0xb3, 0xc6, 0xe8, 0xa8, 0x7f, 0xeb, 0xcc, 0x9c, 0x3a, 0xf2, 0x62, 0x6f, + 0x13, 0xd6, 0x14, 0xee, 0x74, 0x72, 0x78, 0x95, 0x22, 0xc5, 0xc3, 0x2c, + 0x45, 0xb4, 0xb6, 0x03, 0xb5, 0x8c, 0x59, 0xec, 0xe6, 0xcc, 0x4e, 0xe0, + 0x48, 0xf5, 0x80, 0xb6, 0x38, 0x30, 0xe0, 0xfb, 0xd5, 0x53, 0x4e, 0x43, + 0x5b, 0xfa, 0x20, 0x8b, 0xc1, 0x56, 0xf2, 0x56, 0x95, 0x3c, 0xba, 0x39, + 0xdd, 0xc9, 0x26, 0xe3, 0xa8, 0x98, 0x07, 0xa9, 0x46, 0x10, 0xb4, 0xd3, + 0xea, 0xcf, 0x01, 0x8e, 0x8e, 0x3f, 0xc8, 0xcc, 0xe9, 0x04, 0x5d, 0x29, + 0x9a, 0x0b, 0x13, 0x0a, 0x61, 0xfd, 0xbd, 0x12, 0x53, 0x3d, 0xd8, 0x72, + 0xd3, 0x0d, 0x2f, 0x4a, 0x28, 0x94, 0x83, 0x1f, 0x87, 0xab, 0x70, 0x04, + 0xef, 0xee, 0x6f, 0x78, 0xc5, 0x63, 0x43, 0x6d, 0xd6, 0x59, 0xf1, 0xed, + 0x1f, 0xf2, 0x6c, 0x96, 0xf4, 0xe0, 0x54, 0x54, 0x61, 0x57, 0xf6, 0x47, + 0x8a, 0x8c, 0x7a, 0x0c, 0x47, 0xa3, 0xc3, 0xa6, 0xa0, 0x12, 0xc0, 0x7b, + 0x74, 0xbd, 0x1d, 0x98, 0xf3, 0xa5, 0x71, 0xe3, 0x01, 0x91, 0x9d, 0x58, + 0x77, 0xc0, 0x2a, 0x18, 0xa6, 0x17, 0xfe, 0x7f, 0x6c, 0x5e, 0x18, 0xc8, + 0x0f, 0xeb, 0xe8, 0x0e, 0x56, 0x50, 0x70, 0xed, 0x5a, 0x98, 0xc7, 0x02, + 0x0a, 0x5f, 0x91, 0xd4, 0xc0, 0xd0, 0x2c, 0x3c, 0xc4, 0x34, 0x5e, 0x47, + 0xa9, 0xa2, 0x1b, 0x35, 0x94, 0x97, 0x76, 0xc9, 0x3c, 0x63, 0xba, 0x5c, + 0x9b, 0x1f, 0x8d, 0x52, 0xd3, 0xd4, 0xaa, 0xba, 0x03, 0xf9, 0x94, 0xbc, + 0xef, 0xeb, 0xdc, 0xa5, 0xaa, 0x4b, 0x7e, 0xaf, 0x74, 0xbf, 0x4d, 0x08, + 0xff, 0x3c, 0x9d, 0x01, 0xa7, 0x91, 0xf6, 0x78, 0x4c, 0x60, 0x2f, 0xfb, + 0xaf, 0x9d, 0x10, 0x4b, 0xf4, 0x51, 0x81, 0x9b, 0x45, 0x6e, 0x86, 0xef, + 0x5b, 0xe6, 0xb0, 0xd8, 0xb9, 0xed, 0xf9, 0x54, 0x7d, 0x93, 0x96, 0x1d, + 0x73, 0x2c, 0x99, 0x1c, 0x4a, 0x8e, 0x1e, 0xc3, 0xa8, 0xde, 0xbe, 0xe3, + 0x3d, 0x64, 0x2f, 0x79, 0x76, 0x14, 0xc2, 0x4b, 0x34, 0x14, 0xf6, 0xbf, + 0xb8, 0x53, 0x0a, 0x31, 0x15, 0x8b, 0x92, 0x45, 0xdf, 0x63, 0x02, 0xf1, + 0x6b, 0xca, 0xdb, 0x5c, 0x88, 0x48, 0xda, 0x3d, 0x60, 0xc1, 0x64, 0x99, + 0xa7, 0x65, 0x90, 0x2d, 0x86, 0x1a, 0x8a, 0xff, 0x48, 0x67, 0xac, 0x52, + 0x09, 0xbc, 0x17, 0xf5, 0x60, 0x52, 0xf8, 0x29, 0x10, 0x44, 0x01, 0x44, + 0x2c, 0x7e, 0xc2, 0x64, 0xeb, 0x4f, 0x79, 0x02, 0x93, 0x76, 0x39, 0x8b, + 0xb1, 0x52, 0xdf, 0x19, 0xcd, 0x63, 0x37, 0xcf, 0xd5, 0x31, 0xf5, 0xfb, + 0x84, 0x0c, 0xaf, 0x54, 0x4b, 0xb0, 0x57, 0x9d, 0xb6, 0xe4, 0x25, 0x1d, + 0x69, 0xf4, 0x6e, 0x1b, 0xa4, 0xeb, 0x64, 0x8b, 0x01, 0x9c, 0xfe, 0xea, + 0x0d, 0xe4, 0x63, 0x39, 0x98, 0x50, 0x0f, 0xfa, 0x68, 0x09, 0xdf, 0x9f, + 0x6f, 0x21, 0x20, 0x5b, 0xbb, 0x99, 0xc5, 0x7d, 0xb2, 0x66, 0xaa, 0xdf, + 0xa2, 0xb8, 0x6d, 0x11, 0xd7, 0xff, 0x60, 0xe7, 0xbe, 0x3b, 0xb1, 0x06, + 0xd0, 0x1c, 0xa1, 0x63, 0x52, 0x75, 0x7e, 0x51, 0x0a, 0xf7, 0x1b, 0x4d, + 0x5c, 0x1d, 0x53, 0x85, 0xff, 0xa1, 0x81, 0x7d, 0xf7, 0x29, 0xa6, 0x63, + 0x7a, 0xfc, 0x3a, 0x49, 0x51, 0x5d, 0x10, 0xb7, 0x2c, 0x73, 0xa2, 0xec, + 0xa8, 0x4c, 0x7f, 0xa6, 0x19, 0xbc, 0x5c, 0x47, 0xd5, 0xb2, 0xad, 0x13, + 0x4c, 0x4d, 0xe6, 0x18, 0xd0, 0x15, 0x84, 0x20, 0xaa, 0xb2, 0xf9, 0xcb, + 0x59, 0x62, 0xe9, 0xff, 0x05, 0xda, 0x9b, 0x83, 0xcb, 0xa1, 0x94, 0x5b, + 0xe4, 0x60, 0x0b, 0x57, 0x9b, 0x0c, 0xcb, 0xdd, 0xb5, 0x9e, 0xdc, 0xb1, + 0xb1, 0x80, 0x5d, 0xdb, 0x7f, 0x1f, 0x7f, 0xab, 0xb5, 0xbe, 0x42, 0x85, + 0x30, 0x9d, 0xf7, 0x7e, 0xd3, 0x6f, 0xbf, 0x6c, 0xad, 0x00, 0xcf, 0x9e, + 0x58, 0x8a, 0xf4, 0x02, 0x86, 0x40, 0x75, 0x52, 0xa5, 0x98, 0x39, 0x2d, + 0xee, 0x52, 0x09, 0x5e, 0x4f, 0xab, 0xde, 0x9a, 0x77, 0x07, 0x05, 0x6a, + 0x7c, 0x17, 0x09, 0x3d, 0xcd, 0x8b, 0x49, 0xb4, 0x22, 0xd3, 0xec, 0xa8, + 0xf2, 0xc0, 0xd2, 0x5d, 0x6e, 0x69, 0x1d, 0xfb, 0x6d, 0xc0, 0x8e, 0x6f, + 0xf5, 0xfa, 0xe4, 0xca, 0x6c, 0x02, 0x1c, 0x7f, 0x36, 0xf9, 0x4a, 0x29, + 0x0d, 0x22, 0x8d, 0x27, 0x2c, 0xa2, 0xbc, 0x9e, 0xff, 0x1b, 0xca, 0x9d, + 0x53, 0x93, 0x73, 0x6b, 0x18, 0xb8, 0xd6, 0x29, 0x7b, 0x44, 0x57, 0x84, + 0x3d, 0xf2, 0x9d, 0x39, 0xe2, 0x0d, 0xa2, 0x96, 0x0f, 0x1d, 0xb1, 0x56, + 0x51, 0x95, 0x54, 0x1c, 0xb8, 0x8a, 0xf8, 0xb4, 0xa6, 0xda, 0xf6, 0xd2, + 0x72, 0xbb, 0xcf, 0x07, 0x58, 0xed, 0x38, 0x0b, 0xd6, 0x97, 0xe6, 0xa6, + 0x58, 0xd1, 0x8e, 0x6f, 0x6f, 0x55, 0x37, 0xe2, 0xff, 0x54, 0xf2, 0x75, + 0x90, 0x04, 0x2f, 0x64, 0x47, 0x05, 0xb8, 0x5d, 0xb4, 0x6b, 0x2c, 0x1e, + 0x35, 0xd8, 0xef, 0x31, 0x8f, 0x5d, 0x88, 0xb9, 0x94, 0xcd, 0x22, 0x43, + 0xe1, 0xbe, 0xe4, 0x2c, 0xdb, 0xa4, 0x7e, 0xae, 0x8b, 0xaa, 0xf0, 0x3a, + 0x47, 0x9c, 0x24, 0x6f, 0x01, 0x13, 0xf2, 0x79, 0xdc, 0x35, 0x74, 0xfb, + 0x34, 0x69, 0x1a, 0x72, 0x3d, 0xae, 0x34, 0x0a, 0x6d, 0xeb, 0x79, 0xd0, + 0xaa, 0x22, 0x80, 0xfe, 0x53, 0x09, 0xcb, 0xb8, 0x7c, 0xa2, 0x60, 0xb0, + 0x0d, 0x8b, 0x7f, 0xec, 0x3e, 0x5e, 0xd8, 0x58, 0x64, 0x59, 0x5c, 0xeb, + 0xaa, 0xbf, 0x00, 0x71, 0xd9, 0x0a, 0x50, 0xae, 0xd4, 0x75, 0x89, 0x04, + 0x44, 0x62, 0x2b, 0x2f, 0x6a, 0x84, 0x8d, 0xe9, 0x1a, 0xa5, 0xf9, 0x6f, + 0xfa, 0xe9, 0x1d, 0xe7, 0xa4, 0x62, 0xcd, 0xcc, 0x07, 0x0b, 0xbc, 0x53, + 0xb9, 0xb3, 0x19, 0x66, 0x28, 0x29, 0x76, 0xdb, 0x50, 0xf8, 0x4f, 0x63, + 0xca, 0xa2, 0x33, 0xf9, 0x70, 0xd7, 0xd2, 0x0a, 0xe9, 0x83, 0x75, 0x97, + 0x83, 0x7e, 0xa6, 0x75, 0x72, 0x95, 0x90, 0xb8, 0xfc, 0xd6, 0x6e, 0x30, + 0x0a, 0x52, 0x49, 0x60, 0xab, 0xa3, 0x81, 0xa3, 0x2d, 0x7a, 0xcc, 0x90, + 0x29, 0x61, 0xa2, 0xb8, 0x76, 0x30, 0xf8, 0x2f, 0xe2, 0xba, 0xef, 0x40, + 0xe3, 0xec, 0xcd, 0x9e, 0x03, 0x55, 0x5e, 0xdf, 0xaa, 0xc7, 0xe1, 0x29, + 0x3b, 0x21, 0x3e, 0x8d, 0xc8, 0xe6, 0x67, 0xb2, 0xf2, 0xbd, 0x82, 0xa9, + 0x0e, 0x6b, 0x76, 0x1c, 0xf2, 0x81, 0x93, 0x61, 0x1a, 0x4c, 0x52, 0x99, + 0x00, 0x3c, 0xd9, 0x8f, 0x62, 0xfc, 0x00, 0xa5, 0xd9, 0xa9, 0xd0, 0x61, + 0x31, 0x86, 0x04, 0x05, 0xae, 0xaa, 0x7d, 0x55, 0x6c, 0x89, 0xf7, 0xa3, + 0xe4, 0x9d, 0x57, 0x29, 0xf3, 0x29, 0x73, 0x9f, 0xe6, 0xc0, 0x7c, 0x0a, + 0x84, 0x1a, 0x4b, 0xf6, 0xa5, 0x86, 0x3c, 0xea, 0x4f, 0x05, 0x20, 0x66, + 0x87, 0x23, 0x7c, 0xca, 0x68, 0x5b, 0xb5, 0x77, 0x38, 0xc8, 0xae, 0xd1, + 0x81, 0x55, 0xd1, 0x03, 0xa6, 0x6f, 0x2e, 0x25, 0x8f, 0x07, 0xbf, 0x38, + 0xb0, 0x89, 0x47, 0xc8, 0xdc, 0x44, 0x8e, 0x9f, 0xd6, 0xba, 0xda, 0xd5, + 0xe7, 0x6c, 0x80, 0x40, 0x9c, 0x39, 0x76, 0x90, 0xb1, 0x1a, 0x3a, 0x8e, + 0x30, 0x73, 0x0c, 0x03, 0x78, 0x59, 0x8e, 0xd8, 0x08, 0x82, 0x1a, 0x32, + 0xc5, 0xc3, 0x6d, 0x83, 0xf9, 0x55, 0xe1, 0x96, 0x11, 0xdf, 0x5b, 0x26, + 0xe7, 0x59, 0x7f, 0x82, 0x9d, 0x79, 0x2f, 0x35, 0x8a, 0xd0, 0xbc, 0x09, + 0x70, 0x58, 0x06, 0x73, 0x10, 0xa9, 0x40, 0x7d, 0x3c, 0x83, 0x3f, 0x39, + 0x54, 0x4b, 0x6e, 0x2b, 0x27, 0x82, 0xe4, 0x0f, 0xa5, 0x15, 0x59, 0xfe, + 0x57, 0xc7, 0x0c, 0xa5, 0x51, 0xf0, 0x6d, 0x73, 0x40, 0xfd, 0xca, 0x00, + 0x76, 0x37, 0x41, 0xba, 0x01, 0x3d, 0xb6, 0x35, 0xf5, 0x00, 0xd1, 0x2a, + 0x58, 0x1a, 0xbb, 0x16, 0xf2, 0x37, 0xaa, 0x52, 0x05, 0x39, 0x1a, 0xb5, + 0xa7, 0x97, 0x3b, 0xfe, 0xc3, 0xd3, 0x48, 0xed, 0x49, 0xf0, 0xa0, 0x5d, + 0x36, 0x0f, 0xf6, 0xfb, 0x1d, 0xc0, 0x1e, 0x5e, 0xb3, 0x46, 0xa7, 0xc3, + 0x9b, 0xbb, 0xfd, 0x40, 0x91, 0x7c, 0xe5, 0xa8, 0xe3, 0x17, 0x90, 0xf5, + 0xac, 0xe4, 0xe4, 0x21, 0xed, 0x96, 0x98, 0x63, 0x41, 0xb2, 0x98, 0x37, + 0x30, 0xef, 0x88, 0x15, 0xd0, 0x3e, 0x43, 0x0a, 0xe1, 0xbf, 0xe1, 0xe4, + 0x29, 0x8f, 0xc9, 0xdf, 0x2d, 0xe3, 0x08, 0xfd, 0xcd, 0x7c, 0xc0, 0x5d, + 0x09, 0x47, 0x8e, 0xc7, 0xed, 0xfb, 0x85, 0x55, 0xba, 0xfd, 0x3a, 0x6b, + 0x96, 0x0f, 0x06, 0x91, 0x93, 0x2b, 0xc6, 0x42, 0x92, 0xe7, 0xf3, 0xd6, + 0xeb, 0x3a, 0x2a, 0x9f, 0x96, 0x89, 0x63, 0x71, 0xd6, 0x44, 0xd1, 0xe4, + 0x13, 0xae, 0x8c, 0x44, 0x16, 0xa0, 0xc1, 0x29, 0x61, 0x00, 0x27, 0x06, + 0x8f, 0x25, 0x1f, 0x3d, 0x01, 0x02, 0x4c, 0xeb, 0x5f, 0x43, 0x7d, 0x9a, + 0x7d, 0x6c, 0x76, 0xda, 0x8d, 0x10, 0xc8, 0x85, 0x25, 0x9a, 0xe9, 0x36, + 0xe5, 0xfa, 0x3d, 0x89, 0xb4, 0x07, 0x73, 0xfd, 0x45, 0x03, 0x15, 0x42, + 0x4e, 0x86, 0x6b, 0x25, 0x35, 0x63, 0x5f, 0x46, 0x97, 0xfe, 0x84, 0x14, + 0x48, 0x43, 0xb6, 0x3f, 0xfb, 0xbd, 0x36, 0xf8, 0xa6, 0xec, 0x53, 0x51, + 0xf4, 0xc8, 0x1e, 0x21, 0xfa, 0x42, 0x22, 0x6a, 0x47, 0xfb, 0xc7, 0x0d, + 0xe3, 0x05, 0x66, 0xc9, 0xb1, 0xf1, 0x47, 0xc2, 0x8d, 0xc6, 0x40, 0xdf, + 0xa9, 0x5d, 0xb3, 0x24, 0x10, 0xc5, 0x3b, 0xf2, 0x9d, 0xb4, 0x52, 0x59, + 0x61, 0xf6, 0x31, 0x9d, 0x67, 0xd5, 0x1e, 0x33, 0x3b, 0xd9, 0xe3, 0x24, + 0x1a, 0x63, 0x24, 0x59, 0x73, 0x7c, 0xb8, 0x67, 0xa1, 0x43, 0x44, 0x7c, + 0x03, 0x25, 0x3d, 0x13, 0x80, 0x2d, 0x3e, 0xa2, 0xab, 0x17, 0x99, 0x30, + 0x91, 0xe0, 0x0e, 0xab, 0x57, 0xe1, 0x2f, 0x7d, 0x29, 0x4d, 0x9a, 0xb0, + 0xda, 0x3f, 0x1f, 0x03, 0x0f, 0x11, 0x5f, 0x04, 0x03, 0xd2, 0x95, 0x05, + 0xb3, 0xc8, 0xb2, 0xfc, 0x9b, 0x62, 0x80, 0x58, 0x79, 0x46, 0x41, 0xf2, + 0x9e, 0xe8, 0x3d, 0x5e, 0x1d, 0x60, 0xbe, 0xf8, 0x3f, 0x65, 0x27, 0x4b, + 0xd0, 0x3d, 0x4d, 0x84, 0x34, 0x1a, 0x06, 0x25, 0x15, 0x6f, 0x50, 0x65, + 0x99, 0xb5, 0xde, 0xb4, 0xe2, 0xfc, 0x64, 0x79, 0x1b, 0x3e, 0xd5, 0xf9, + 0x99, 0xcc, 0x32, 0x2a, 0xb0, 0xcd, 0xd7, 0x1e, 0x63, 0xa0, 0xac, 0xf0, + 0x29, 0x9e, 0xe3, 0x46, 0x15, 0xa3, 0xc3, 0x30, 0xd3, 0x8b, 0x8e, 0xd9, + 0x2b, 0x8b, 0x37, 0xb1, 0x46, 0x3b, 0x86, 0x51, 0x58, 0x4d, 0x9c, 0xd4, + 0xc9, 0x2a, 0x9a, 0x38, 0x9c, 0x98, 0x01, 0xb4, 0xb8, 0xad, 0xd5, 0x18, + 0x6c, 0x6c, 0x42, 0x5d, 0x1d, 0xeb, 0x28, 0xc7, 0x61, 0xa6, 0xd5, 0x0d, + 0x93, 0x8b, 0x3d, 0x2e, 0xc6, 0xb0, 0x22, 0x5d, 0x37, 0x5b, 0x70, 0x83, + 0x58, 0x13, 0x1f, 0x5e, 0xd5, 0x67, 0x2e, 0x76, 0x3d, 0xd3, 0x2a, 0xd5, + 0x60, 0x01, 0x10, 0x22, 0x37, 0xa9, 0xc6, 0xdc, 0x78, 0x7e, 0x12, 0xbd, + 0x53, 0xe6, 0xd2, 0xa7, 0x72, 0xba, 0x85, 0x6e, 0x5f, 0x91, 0x51, 0x63, + 0x85, 0x43, 0xe9, 0x44, 0xd2, 0xf7, 0x2a, 0x16, 0x22, 0x69, 0xb1, 0x25, + 0x54, 0x9c, 0x98, 0x7c, 0x6b, 0xf2, 0x4a, 0x32, 0x14, 0x1f, 0x8c, 0xfb, + 0x97, 0xf3, 0x3c, 0xaa, 0x7c, 0x47, 0x03, 0x28, 0x7e, 0xc7, 0xf4, 0xca, + 0xcc, 0x36, 0xe5, 0xb7, 0x61, 0xf9, 0x93, 0x27, 0xde, 0x9a, 0xd7, 0x4f, + 0xa3, 0x2e, 0xc1, 0xbc, 0xf3, 0x4c, 0xf8, 0x4a, 0x95, 0x05, 0x33, 0xc2, + 0x1e, 0x20, 0xd4, 0x19, 0x14, 0x87, 0x8d, 0xe0, 0xf7, 0x63, 0x3e, 0xb3, + 0x33, 0x31, 0x9d, 0xa6, 0x50, 0x0e, 0x37, 0x64, 0x3a, 0x32, 0xb2, 0x8c, + 0x18, 0xa2, 0x0d, 0xbd, 0x1c, 0x18, 0x67, 0x91, 0x35, 0x23, 0x46, 0x12, + 0x30, 0x71, 0xbd, 0x5c, 0x5c, 0x16, 0x17, 0xef, 0x62, 0x4a, 0xea, 0x50, + 0xe3, 0x02, 0x2e, 0x99, 0x26, 0x15, 0x79, 0x53, 0x1a, 0x0b, 0x0d, 0x2e, + 0xf5, 0xfa, 0x0f, 0xb2, 0x90, 0xcd, 0x6f, 0xf6, 0x32, 0x29, 0x6f, 0x31, + 0x8f, 0x31, 0x1e, 0x99, 0x43, 0xeb, 0x73, 0xea, +}; + +const uint8_t expected_sk[] = { + 0xb9, 0x28, 0xd6, 0x32, 0xf8, 0x1a, 0x59, 0xe2, 0x63, 0xcb, 0x7b, 0x31, + 0xe0, 0x93, 0x2e, 0xb5, 0xf4, 0x62, 0x4f, 0xb1, 0x61, 0x7b, 0xba, 0x47, + 0x61, 0xa7, 0x28, 0x9b, 0x31, 0x25, 0x31, 0x7e, 0x0d, 0xca, 0xf5, 0x78, + 0x04, 0x9a, 0x77, 0xa1, 0x01, 0x12, 0x31, 0x28, 0x90, 0xf8, 0x39, 0xb6, + 0xe9, 0xcf, 0x5b, 0x33, 0xb6, 0x76, 0x82, 0x7f, 0xe0, 0xab, 0xe3, 0x5e, + 0xc0, 0x37, 0xab, 0xce, 0x7e, 0x94, 0x0d, 0x4f, 0xd2, 0x1a, 0x8d, 0x81, + 0x8e, 0xe7, 0xe4, 0x83, 0x96, 0x7e, 0x27, 0xb1, 0x9e, 0x90, 0x5b, 0x46, + 0x8f, 0xd6, 0x3b, 0x43, 0x5e, 0xe9, 0xe5, 0x35, 0xfc, 0xdd, 0xce, 0x8d, + 0xeb, 0x16, 0xfb, 0x23, 0xd2, 0x67, 0x4b, 0x2d, 0xba, 0xf1, 0x6e, 0xe4, + 0xf9, 0x39, 0xd4, 0xa8, 0x91, 0xd0, 0x9d, 0x5e, 0x71, 0xcd, 0x3a, 0x6a, + 0x6b, 0x1b, 0xa7, 0x7a, 0xf4, 0x90, 0x4a, 0xff, 0x05, 0x84, 0x76, 0x82, + 0x62, 0x24, 0x65, 0x73, 0x53, 0x40, 0x18, 0x21, 0x07, 0x37, 0x75, 0x71, + 0x82, 0x04, 0x62, 0x48, 0x54, 0x85, 0x73, 0x27, 0x21, 0x47, 0x15, 0x02, + 0x10, 0x60, 0x54, 0x83, 0x40, 0x41, 0x17, 0x12, 0x77, 0x80, 0x53, 0x24, + 0x64, 0x52, 0x87, 0x60, 0x57, 0x41, 0x44, 0x33, 0x57, 0x43, 0x00, 0x83, + 0x44, 0x15, 0x50, 0x70, 0x26, 0x13, 0x51, 0x65, 0x18, 0x85, 0x41, 0x27, + 0x34, 0x27, 0x74, 0x74, 0x04, 0x34, 0x18, 0x52, 0x48, 0x08, 0x15, 0x56, + 0x16, 0x42, 0x78, 0x31, 0x60, 0x71, 0x26, 0x07, 0x67, 0x51, 0x20, 0x02, + 0x41, 0x48, 0x58, 0x78, 0x56, 0x34, 0x08, 0x76, 0x65, 0x76, 0x11, 0x06, + 0x23, 0x48, 0x30, 0x41, 0x48, 0x10, 0x81, 0x60, 0x88, 0x10, 0x23, 0x66, + 0x02, 0x72, 0x80, 0x67, 0x13, 0x06, 0x03, 0x42, 0x87, 0x32, 0x27, 0x53, + 0x35, 0x56, 0x56, 0x54, 0x37, 0x60, 0x82, 0x71, 0x86, 0x53, 0x04, 0x87, + 0x26, 0x11, 0x14, 0x54, 0x24, 0x75, 0x51, 0x01, 0x73, 0x32, 0x71, 0x20, + 0x75, 0x02, 0x73, 0x86, 0x56, 0x43, 0x10, 0x84, 0x68, 0x66, 0x33, 0x64, + 0x63, 0x73, 0x64, 0x44, 0x83, 0x75, 0x36, 0x48, 0x51, 0x17, 0x33, 0x76, + 0x43, 0x85, 0x42, 0x26, 0x55, 0x37, 0x40, 0x30, 0x20, 0x67, 0x40, 0x60, + 0x84, 0x70, 0x27, 0x77, 0x25, 0x11, 0x35, 0x57, 0x24, 0x23, 0x20, 0x13, + 0x27, 0x31, 0x37, 0x63, 0x80, 0x26, 0x87, 0x22, 0x05, 0x84, 0x42, 0x78, + 0x61, 0x34, 0x48, 0x66, 0x27, 0x30, 0x27, 0x36, 0x46, 0x30, 0x57, 0x86, + 0x11, 0x28, 0x78, 0x65, 0x30, 0x47, 0x72, 0x42, 0x63, 0x75, 0x84, 0x76, + 0x32, 0x06, 0x64, 0x45, 0x27, 0x70, 0x12, 0x52, 0x14, 0x55, 0x33, 0x22, + 0x21, 0x23, 0x71, 0x18, 0x82, 0x64, 0x02, 0x40, 0x68, 0x04, 0x88, 0x48, + 0x70, 0x55, 0x11, 0x25, 0x00, 0x32, 0x75, 0x50, 0x70, 0x22, 0x02, 0x72, + 0x26, 0x06, 0x62, 0x81, 0x77, 0x70, 0x84, 0x14, 0x08, 0x52, 0x72, 0x21, + 0x56, 0x61, 0x82, 0x48, 0x62, 0x70, 0x61, 0x13, 0x43, 0x87, 0x71, 0x75, + 0x78, 0x10, 0x82, 0x41, 0x32, 0x55, 0x45, 0x25, 0x01, 0x47, 0x74, 0x03, + 0x60, 0x67, 0x83, 0x26, 0x26, 0x77, 0x78, 0x31, 0x81, 0x04, 0x45, 0x18, + 0x34, 0x64, 0x26, 0x84, 0x41, 0x17, 0x73, 0x57, 0x76, 0x55, 0x16, 0x60, + 0x52, 0x02, 0x33, 0x60, 0x01, 0x81, 0x68, 0x36, 0x17, 0x80, 0x31, 0x17, + 0x84, 0x62, 0x28, 0x67, 0x55, 0x42, 0x22, 0x86, 0x26, 0x72, 0x08, 0x64, + 0x58, 0x74, 0x10, 0x40, 0x37, 0x14, 0x70, 0x22, 0x22, 0x32, 0x24, 0x42, + 0x75, 0x75, 0x08, 0x86, 0x11, 0x68, 0x03, 0x55, 0x83, 0x04, 0x62, 0x02, + 0x36, 0x50, 0x18, 0x65, 0x20, 0x33, 0x01, 0x87, 0x28, 0x32, 0x73, 0x38, + 0x10, 0x66, 0x16, 0x65, 0x83, 0x82, 0x25, 0x54, 0x46, 0x51, 0x08, 0x46, + 0x51, 0x84, 0x08, 0x78, 0x70, 0x00, 0x44, 0x13, 0x30, 0x00, 0x37, 0x70, + 0x36, 0x41, 0x33, 0x16, 0x31, 0x17, 0x65, 0x82, 0x08, 0x24, 0x25, 0x45, + 0x60, 0x43, 0x44, 0x07, 0x64, 0x61, 0x63, 0x45, 0x18, 0x12, 0x43, 0x32, + 0x34, 0x48, 0x48, 0x15, 0x88, 0x83, 0x74, 0x74, 0x61, 0x82, 0x84, 0x68, + 0x52, 0x56, 0x05, 0x86, 0x56, 0x77, 0x10, 0x27, 0x55, 0x64, 0x34, 0x16, + 0x44, 0x88, 0x38, 0x56, 0x53, 0x21, 0x38, 0x86, 0x08, 0x12, 0x12, 0x31, + 0x83, 0x55, 0x78, 0x64, 0x83, 0x47, 0x16, 0x41, 0x25, 0x01, 0x84, 0x88, + 0x64, 0x40, 0x21, 0x06, 0x57, 0x64, 0x32, 0x64, 0x40, 0x33, 0x36, 0x42, + 0x24, 0x44, 0x58, 0x04, 0x82, 0x47, 0x53, 0x22, 0x00, 0x48, 0x07, 0x24, + 0x62, 0x46, 0x51, 0x40, 0x38, 0x24, 0x58, 0x36, 0x37, 0x30, 0x86, 0x78, + 0x03, 0x07, 0x63, 0x01, 0x25, 0x15, 0x72, 0x47, 0x61, 0x68, 0x75, 0x17, + 0x82, 0x21, 0x83, 0x65, 0x76, 0x83, 0x02, 0x64, 0x32, 0x55, 0x54, 0x74, + 0x10, 0x38, 0x47, 0x77, 0x61, 0x17, 0x62, 0x82, 0x37, 0x15, 0x22, 0x66, + 0x32, 0x38, 0x13, 0x20, 0x14, 0x50, 0x83, 0x41, 0x70, 0x45, 0x37, 0x36, + 0x08, 0x68, 0x14, 0x77, 0x11, 0x34, 0x10, 0x00, 0x47, 0x71, 0x54, 0x60, + 0x87, 0x27, 0x74, 0x84, 0x74, 0x31, 0x00, 0x62, 0x45, 0x68, 0x25, 0x50, + 0x34, 0x31, 0x73, 0x74, 0x45, 0x51, 0x83, 0x02, 0x04, 0x56, 0x46, 0x31, + 0x57, 0x53, 0x36, 0x86, 0x10, 0x60, 0x73, 0x34, 0x27, 0x24, 0x25, 0x60, + 0x48, 0x73, 0x13, 0x75, 0x65, 0x75, 0x33, 0x72, 0x18, 0x16, 0x82, 0x47, + 0x68, 0x15, 0x58, 0x70, 0x77, 0x33, 0x12, 0x17, 0x11, 0x38, 0x84, 0x44, + 0x73, 0x88, 0x83, 0x61, 0x10, 0x88, 0x21, 0x76, 0x86, 0x38, 0x87, 0x77, + 0x26, 0x80, 0x08, 0x36, 0x25, 0x45, 0x52, 0x30, 0x27, 0x68, 0x11, 0x71, + 0x32, 0x68, 0x42, 0x30, 0x31, 0x52, 0x37, 0x16, 0x04, 0x51, 0x12, 0x57, + 0x25, 0x41, 0x17, 0x14, 0x11, 0x07, 0x11, 0x28, 0x60, 0x17, 0x04, 0x14, + 0x76, 0x87, 0x23, 0x51, 0x88, 0x41, 0x21, 0x33, 0x78, 0x48, 0x75, 0x43, + 0x78, 0x73, 0x86, 0x47, 0x53, 0x24, 0x23, 0x55, 0x06, 0x46, 0x42, 0x03, + 0x52, 0x42, 0x12, 0x77, 0x80, 0x24, 0x32, 0x20, 0x68, 0x21, 0x58, 0x53, + 0x14, 0x24, 0x44, 0x67, 0x47, 0x74, 0x76, 0x02, 0x77, 0x41, 0x41, 0x00, + 0x40, 0x02, 0x81, 0x24, 0x51, 0x66, 0x27, 0x05, 0x31, 0x08, 0x17, 0x45, + 0x37, 0x53, 0x02, 0x21, 0x04, 0x06, 0x84, 0x11, 0x07, 0x86, 0x73, 0x50, + 0x78, 0x40, 0x57, 0x87, 0x02, 0x02, 0x00, 0x43, 0x43, 0x81, 0x20, 0x57, + 0x07, 0x31, 0x47, 0x78, 0x86, 0x70, 0x67, 0x18, 0x22, 0x57, 0x85, 0x52, + 0x46, 0x17, 0x22, 0x35, 0x71, 0x88, 0x65, 0x86, 0x50, 0x17, 0x58, 0x22, + 0x12, 0x65, 0x85, 0x01, 0x81, 0x34, 0x03, 0x26, 0x83, 0x42, 0x53, 0x15, + 0x44, 0x12, 0x87, 0x83, 0x73, 0x41, 0x15, 0x08, 0x65, 0x43, 0x88, 0x67, + 0x06, 0x20, 0x55, 0x00, 0x30, 0x44, 0x18, 0x21, 0x65, 0x22, 0x46, 0x36, + 0x15, 0x54, 0x18, 0x63, 0x84, 0x28, 0x26, 0x77, 0x87, 0x03, 0x67, 0x13, + 0x62, 0x24, 0x37, 0x02, 0x56, 0x84, 0x10, 0x83, 0x32, 0x63, 0x57, 0x62, + 0x41, 0x88, 0x07, 0x88, 0x64, 0x65, 0x77, 0x77, 0x32, 0x67, 0x62, 0x42, + 0x02, 0x03, 0x22, 0x06, 0x20, 0x48, 0x41, 0x16, 0x08, 0x60, 0x88, 0x46, + 0x80, 0x78, 0x45, 0x34, 0x78, 0x62, 0x03, 0x83, 0x41, 0x20, 0x78, 0x62, + 0x85, 0x83, 0x31, 0x54, 0x87, 0x56, 0x01, 0x30, 0x38, 0x31, 0x40, 0x55, + 0x27, 0x11, 0x70, 0x40, 0x21, 0x64, 0x23, 0x67, 0x83, 0x44, 0x37, 0x80, + 0x03, 0x76, 0x62, 0x43, 0x05, 0x03, 0x37, 0x70, 0x48, 0x22, 0x60, 0x45, + 0x54, 0x15, 0x13, 0x85, 0x62, 0x72, 0x21, 0x05, 0x68, 0x02, 0x46, 0x57, + 0x65, 0x57, 0x43, 0x72, 0x77, 0x07, 0x24, 0x64, 0x00, 0x17, 0x12, 0x10, + 0x20, 0x00, 0x86, 0x26, 0x63, 0x56, 0x15, 0x02, 0x46, 0x81, 0x31, 0x63, + 0x58, 0x88, 0x61, 0x22, 0x18, 0x08, 0x45, 0x23, 0x07, 0x86, 0x57, 0x77, + 0x31, 0x30, 0x22, 0x05, 0x14, 0x30, 0x38, 0x04, 0x46, 0x56, 0x01, 0x04, + 0x77, 0x50, 0x76, 0x23, 0x07, 0x70, 0x02, 0x54, 0x77, 0x77, 0x35, 0x66, + 0x31, 0x32, 0x63, 0x86, 0x55, 0x26, 0x74, 0x05, 0x18, 0x22, 0x81, 0x11, + 0x01, 0x34, 0x68, 0x04, 0x43, 0x06, 0x75, 0x68, 0x72, 0x03, 0x47, 0x30, + 0x84, 0x67, 0x11, 0x46, 0x31, 0x47, 0x84, 0x31, 0x28, 0x46, 0x27, 0x18, + 0x24, 0x62, 0x35, 0x22, 0x51, 0x23, 0x83, 0x25, 0x02, 0x24, 0x04, 0x67, + 0x57, 0x73, 0x07, 0x25, 0x80, 0x36, 0x32, 0x58, 0x57, 0x26, 0x76, 0x30, + 0x74, 0x73, 0x07, 0x15, 0x03, 0x76, 0x51, 0x85, 0x18, 0x62, 0x25, 0x25, + 0x81, 0x55, 0x45, 0x04, 0x05, 0x34, 0x45, 0x83, 0x36, 0x17, 0x22, 0x75, + 0x18, 0x07, 0x65, 0x53, 0x24, 0x43, 0x35, 0x30, 0x74, 0x44, 0x72, 0x73, + 0x36, 0x12, 0x74, 0x82, 0x45, 0x16, 0x14, 0x16, 0x55, 0x04, 0x80, 0x88, + 0x21, 0x58, 0x40, 0x58, 0x47, 0x14, 0x51, 0x65, 0x78, 0x12, 0x35, 0x21, + 0x56, 0x60, 0x53, 0x46, 0x42, 0x80, 0x73, 0x80, 0x51, 0x88, 0x25, 0x77, + 0x30, 0x71, 0x72, 0x81, 0x04, 0x58, 0x54, 0x32, 0x56, 0x61, 0x54, 0x53, + 0x21, 0x83, 0x00, 0x34, 0x17, 0x74, 0x56, 0x07, 0x05, 0x24, 0x85, 0x10, + 0x50, 0x73, 0x62, 0x11, 0x64, 0x31, 0x23, 0x72, 0x74, 0x03, 0x46, 0x32, + 0x62, 0x63, 0x45, 0x81, 0x73, 0x66, 0x74, 0x56, 0x01, 0x18, 0x42, 0x48, + 0x35, 0x23, 0x70, 0x05, 0x16, 0x48, 0x01, 0x51, 0x14, 0x53, 0x33, 0x30, + 0x82, 0x77, 0x22, 0x12, 0x50, 0x86, 0x27, 0x35, 0x60, 0x84, 0x80, 0x52, + 0x88, 0x71, 0x56, 0x58, 0x83, 0x87, 0x86, 0x24, 0x36, 0x21, 0x57, 0x33, + 0x46, 0x36, 0x62, 0x75, 0x23, 0x80, 0x10, 0x70, 0x28, 0x47, 0x12, 0x44, + 0x02, 0x28, 0x73, 0x50, 0x21, 0x16, 0x12, 0x34, 0x53, 0x00, 0x12, 0x47, + 0x50, 0x56, 0x54, 0x50, 0x41, 0x63, 0x62, 0x65, 0x21, 0x34, 0x53, 0x17, + 0x35, 0x03, 0x45, 0x60, 0x75, 0x48, 0x10, 0x82, 0x73, 0x76, 0x71, 0x81, + 0x33, 0x56, 0x14, 0x50, 0x33, 0x30, 0x04, 0x15, 0x36, 0x04, 0x66, 0x18, + 0x70, 0x64, 0x07, 0x70, 0x06, 0x48, 0x20, 0x83, 0x08, 0x58, 0x08, 0x06, + 0x23, 0x37, 0x03, 0x48, 0x77, 0x32, 0x11, 0x84, 0x03, 0x32, 0x33, 0x67, + 0x62, 0x54, 0x08, 0x36, 0x85, 0x38, 0x87, 0x82, 0x43, 0x14, 0x56, 0x11, + 0x18, 0x22, 0x48, 0x37, 0x07, 0x88, 0x52, 0x44, 0x10, 0x33, 0x38, 0x60, + 0x12, 0x20, 0x63, 0x32, 0x70, 0x08, 0x06, 0x41, 0x46, 0x05, 0x07, 0x12, + 0x73, 0x73, 0x33, 0x00, 0x07, 0x17, 0x38, 0x36, 0x82, 0x55, 0x44, 0x63, + 0x10, 0x47, 0x35, 0x35, 0x60, 0x54, 0x46, 0x03, 0x83, 0x13, 0x26, 0x45, + 0x71, 0x64, 0x65, 0x31, 0x08, 0x10, 0x82, 0x25, 0x62, 0x02, 0x15, 0x42, + 0x67, 0x71, 0x48, 0x68, 0x58, 0x04, 0x14, 0x35, 0x23, 0x04, 0x03, 0x11, + 0x61, 0x34, 0x70, 0x31, 0x41, 0x56, 0x64, 0x80, 0x78, 0x22, 0x43, 0x57, + 0x46, 0x82, 0x35, 0x47, 0x54, 0x74, 0x33, 0x30, 0x70, 0x70, 0x72, 0x25, + 0x86, 0xc2, 0xac, 0x3a, 0x70, 0x5e, 0x01, 0x15, 0x4c, 0x92, 0xdd, 0x7a, + 0xfa, 0xe4, 0xd2, 0x09, 0xe3, 0x63, 0x03, 0x8f, 0x69, 0xfe, 0xe3, 0xc4, + 0xb3, 0xc9, 0xea, 0x36, 0x79, 0xb3, 0x52, 0x2e, 0xfd, 0x9c, 0x6d, 0x26, + 0x25, 0x25, 0x1b, 0x6b, 0x3f, 0xdc, 0xe4, 0x63, 0x25, 0x3b, 0xa5, 0x51, + 0x4f, 0x3c, 0x80, 0x21, 0x36, 0xad, 0x7a, 0x0f, 0x19, 0xaf, 0xd5, 0x08, + 0x41, 0x58, 0x95, 0xf3, 0xce, 0x25, 0x5c, 0xed, 0x8b, 0x03, 0xfa, 0xdc, + 0x24, 0x86, 0x91, 0x12, 0x19, 0xf2, 0xa6, 0x62, 0x6d, 0x77, 0x82, 0x6f, + 0x86, 0x8e, 0xde, 0x24, 0xe8, 0xb9, 0xd7, 0x23, 0x63, 0xb8, 0x60, 0xb1, + 0xda, 0x29, 0x07, 0x40, 0x3c, 0xb1, 0xb2, 0x5e, 0x0e, 0xb3, 0x3c, 0xc8, + 0x96, 0x8c, 0xee, 0xd3, 0xd7, 0x95, 0x5c, 0x84, 0xca, 0xeb, 0x87, 0x44, + 0x37, 0xba, 0xd1, 0xde, 0x4f, 0x9a, 0x33, 0x4f, 0x2e, 0x60, 0x52, 0xef, + 0x5a, 0x29, 0xda, 0x1c, 0x33, 0x2a, 0x03, 0x61, 0xc7, 0x70, 0x43, 0xc4, + 0x3f, 0x47, 0xc7, 0x81, 0xc5, 0x78, 0xb5, 0x79, 0x5d, 0xbb, 0x5f, 0x6b, + 0xaf, 0x97, 0x46, 0xcc, 0x5b, 0x6a, 0xed, 0xd0, 0x36, 0xe5, 0xd7, 0xd1, + 0x13, 0xc7, 0x13, 0xb6, 0x8c, 0x5e, 0x95, 0xf7, 0x40, 0xbf, 0xaf, 0x65, + 0x45, 0x2c, 0x98, 0x19, 0xc1, 0x78, 0xbc, 0x79, 0x80, 0x34, 0x11, 0x17, + 0x31, 0x0c, 0x2c, 0x20, 0x2f, 0xa7, 0x35, 0xd3, 0x1a, 0x58, 0x0f, 0x2d, + 0x5a, 0xd4, 0x71, 0x3f, 0xb5, 0x85, 0x49, 0xb2, 0x86, 0x4a, 0x0e, 0x5b, + 0x1e, 0xc8, 0x58, 0x12, 0xbb, 0x63, 0xdb, 0x37, 0xa7, 0x97, 0x9b, 0xd9, + 0x8a, 0x36, 0x6e, 0x07, 0x66, 0xb7, 0xae, 0x2e, 0x96, 0x48, 0xee, 0x00, + 0x0e, 0xed, 0x38, 0xc8, 0x76, 0x0d, 0xcb, 0x08, 0x76, 0x8b, 0x1a, 0x4f, + 0x83, 0x9d, 0x49, 0x7f, 0x0e, 0x0e, 0xfa, 0x35, 0x85, 0x35, 0xc4, 0xfb, + 0x45, 0xe0, 0xe0, 0xbd, 0xa6, 0x0d, 0xd7, 0xdc, 0x10, 0x9b, 0x88, 0xc9, + 0xc0, 0xdb, 0x48, 0x41, 0x7a, 0xb2, 0xf3, 0x35, 0x92, 0xf8, 0x9f, 0x4e, + 0x05, 0xa3, 0x6d, 0x9a, 0xaf, 0xe8, 0x77, 0x25, 0x79, 0xba, 0x87, 0x02, + 0xb7, 0x1d, 0x9a, 0xaa, 0x9e, 0x8e, 0x5e, 0x16, 0x5e, 0x0c, 0xf7, 0xbb, + 0x59, 0x6f, 0x8a, 0xc8, 0x46, 0x5a, 0xbb, 0x79, 0xe3, 0x64, 0x63, 0x8e, + 0x96, 0x54, 0x02, 0x0b, 0x11, 0xbf, 0xc0, 0xb5, 0x84, 0xb1, 0xca, 0x32, + 0x47, 0x34, 0x9b, 0xf7, 0x76, 0x15, 0x78, 0x00, 0xfd, 0x42, 0x2a, 0x2c, + 0xfb, 0x6b, 0x3f, 0x70, 0xa8, 0x9e, 0x51, 0x99, 0x9e, 0x29, 0xf3, 0x15, + 0xa7, 0x79, 0x11, 0xbb, 0x3c, 0x95, 0xe2, 0x55, 0xe9, 0xf4, 0xca, 0x97, + 0x28, 0x0d, 0x14, 0x1c, 0xbc, 0xee, 0xae, 0xd7, 0x20, 0x3b, 0x82, 0x4f, + 0xb5, 0x60, 0xe7, 0x49, 0xc1, 0x4b, 0xd0, 0x0e, 0x0d, 0xfc, 0x64, 0x24, + 0x63, 0x45, 0x78, 0x79, 0x16, 0x5b, 0x5b, 0xfe, 0x6a, 0x78, 0xe2, 0xc3, + 0x18, 0xbd, 0x89, 0x1d, 0xe6, 0x88, 0xa9, 0xb4, 0xfc, 0x2d, 0xb6, 0x7f, + 0xde, 0x17, 0xe0, 0xb2, 0x60, 0xa7, 0x77, 0xab, 0xaa, 0xfb, 0x67, 0x4b, + 0xb7, 0xa7, 0x69, 0x9b, 0x11, 0xf7, 0xb2, 0x0c, 0xcf, 0xd3, 0xb2, 0x5e, + 0x04, 0x79, 0x55, 0x15, 0x59, 0xc2, 0x61, 0x15, 0x14, 0xce, 0xd0, 0xb3, + 0x85, 0xb8, 0x31, 0xe0, 0xbb, 0xec, 0xa3, 0xd3, 0x1b, 0x37, 0x12, 0xa1, + 0x86, 0xa4, 0x10, 0x5f, 0x7c, 0x98, 0x6c, 0xa7, 0x3f, 0xf9, 0xe0, 0xbc, + 0x14, 0x38, 0x9f, 0x2c, 0xe8, 0x9b, 0xa8, 0x37, 0x8f, 0x93, 0x48, 0x57, + 0x60, 0x3b, 0x80, 0x26, 0x15, 0xc3, 0x4a, 0x21, 0x40, 0x91, 0xd8, 0x30, + 0x85, 0x8f, 0x19, 0xbc, 0x5e, 0xe7, 0x8a, 0x26, 0xe4, 0xf6, 0x7d, 0xfa, + 0x3b, 0x28, 0xc6, 0x29, 0x77, 0xae, 0x79, 0xe2, 0x2b, 0x8e, 0x34, 0x6e, + 0xd0, 0xa7, 0xea, 0x87, 0x6e, 0x95, 0xf8, 0x7e, 0x07, 0xd6, 0xba, 0x44, + 0xf2, 0xc2, 0x0b, 0x8f, 0x78, 0xe7, 0x79, 0x47, 0xb5, 0xf1, 0xe6, 0xf9, + 0x43, 0x0a, 0x22, 0x2f, 0x5f, 0x09, 0xd1, 0xd0, 0xe4, 0x28, 0xad, 0x62, + 0x52, 0x44, 0x60, 0xb7, 0xaa, 0x10, 0x4d, 0xa6, 0x9c, 0xda, 0x9a, 0x5f, + 0x4e, 0x82, 0xad, 0x62, 0xc3, 0x35, 0xa2, 0xb6, 0xd4, 0x9d, 0x4d, 0xa2, + 0xae, 0x2e, 0x04, 0xae, 0x74, 0xa8, 0x0d, 0x26, 0xc0, 0x7a, 0xb0, 0x99, + 0x90, 0x15, 0x04, 0xcf, 0xf2, 0x12, 0x96, 0x44, 0xff, 0x30, 0x03, 0x33, + 0xba, 0xf2, 0x90, 0xa3, 0xc5, 0x79, 0x32, 0x3c, 0x92, 0x9d, 0x52, 0x22, + 0xc4, 0x2b, 0xdb, 0x2e, 0x0e, 0x05, 0x3b, 0x33, 0xdc, 0xdc, 0xd7, 0xea, + 0x2a, 0x0c, 0x22, 0x9f, 0xfc, 0x1f, 0x16, 0x84, 0x1a, 0xc0, 0x5a, 0xc9, + 0xaa, 0x9f, 0x42, 0xec, 0xee, 0x01, 0x3e, 0x95, 0x65, 0xec, 0x89, 0x28, + 0x2e, 0x85, 0x0d, 0x7d, 0x12, 0xea, 0xa2, 0x38, 0x1c, 0x2f, 0x5f, 0x8f, + 0xe6, 0xae, 0x9d, 0xa5, 0x1d, 0x9c, 0x5e, 0x2d, 0x50, 0x82, 0x82, 0x8b, + 0xe2, 0x31, 0xc5, 0xa2, 0xe6, 0x9e, 0xe6, 0xa7, 0x8b, 0xc8, 0xc1, 0x15, + 0x43, 0xfc, 0x41, 0xfc, 0x23, 0x17, 0x34, 0x90, 0x2a, 0xf1, 0x07, 0xb6, + 0x11, 0xd5, 0x5a, 0x74, 0xd0, 0x3a, 0x17, 0xbd, 0x2d, 0xf5, 0x51, 0xac, + 0xdf, 0x8c, 0xfe, 0xd6, 0x4d, 0x2a, 0xee, 0x82, 0x37, 0x08, 0xf7, 0xd1, + 0x72, 0x5e, 0xa2, 0x89, 0xcd, 0xf0, 0x88, 0x8b, 0xb8, 0x98, 0x9e, 0x24, + 0x04, 0x9c, 0x76, 0xb5, 0xf6, 0x8e, 0x06, 0x0e, 0x94, 0x1c, 0xb5, 0x8e, + 0xd0, 0x79, 0xac, 0xc4, 0x27, 0x57, 0x38, 0x83, 0x79, 0xd0, 0x54, 0xc7, + 0xe8, 0x45, 0x61, 0x19, 0x4b, 0x28, 0xaa, 0x29, 0x87, 0x1f, 0x1b, 0x83, + 0x66, 0xd1, 0x2d, 0x01, 0xd2, 0x11, 0x4b, 0xe5, 0xf6, 0x22, 0x25, 0xb8, + 0xfc, 0xbe, 0x4e, 0x9d, 0x19, 0xc3, 0xe6, 0x87, 0x14, 0xb0, 0x7d, 0xbe, + 0xf1, 0x78, 0x38, 0xeb, 0xa9, 0xcc, 0x94, 0x74, 0xa2, 0xb8, 0x4c, 0x68, + 0x11, 0x3f, 0xd3, 0x37, 0x0c, 0xb3, 0x41, 0xe5, 0xcb, 0xd7, 0x2e, 0xc6, + 0x85, 0xf3, 0x4b, 0x39, 0xe6, 0x4d, 0x9a, 0x07, 0x30, 0xc3, 0x81, 0xb7, + 0x81, 0x66, 0xe5, 0x59, 0x09, 0xd1, 0x8f, 0x06, 0xa9, 0xe6, 0x03, 0xb6, + 0x6a, 0x6b, 0xc9, 0x1d, 0xbe, 0xed, 0x41, 0x1f, 0xe3, 0xd0, 0xd3, 0xf1, + 0x1e, 0xc3, 0xa4, 0xa4, 0x36, 0x6c, 0xa4, 0xb6, 0x53, 0xd6, 0x09, 0xc8, + 0x24, 0x17, 0xa7, 0x89, 0x61, 0x16, 0x3c, 0x77, 0x47, 0xed, 0xdd, 0xb2, + 0x3e, 0xd0, 0x27, 0x6f, 0xe6, 0x7e, 0xb0, 0x40, 0xb4, 0xde, 0xb3, 0xd3, + 0x20, 0x34, 0x20, 0xa7, 0xdf, 0xa8, 0x85, 0xbb, 0x41, 0x02, 0xc4, 0x30, + 0xfe, 0xab, 0x61, 0x9f, 0x8e, 0x0d, 0x55, 0xcf, 0xf9, 0xd6, 0x1c, 0xc2, + 0xb3, 0x03, 0xe4, 0x3e, 0xf2, 0x53, 0x6c, 0xdf, 0x70, 0x1c, 0x53, 0x8e, + 0x9c, 0xe9, 0x31, 0x76, 0x76, 0x3a, 0xbc, 0x43, 0x83, 0x20, 0xeb, 0xf6, + 0xe3, 0x23, 0xbd, 0x79, 0xfe, 0xd1, 0x44, 0x4d, 0x6b, 0xeb, 0x5d, 0xf9, + 0x34, 0x09, 0x42, 0xe4, 0xff, 0xba, 0xe4, 0x42, 0xba, 0x6d, 0xc7, 0xd2, + 0xb9, 0x68, 0x8d, 0x12, 0xc2, 0x28, 0xca, 0xff, 0xac, 0x90, 0x12, 0xc4, + 0x0d, 0x97, 0x26, 0xd0, 0xe5, 0x42, 0x96, 0xb9, 0xf1, 0x64, 0x62, 0x04, + 0xee, 0xba, 0x70, 0xc2, 0xeb, 0x75, 0xa1, 0xdd, 0x00, 0x11, 0xd5, 0xf6, + 0x61, 0x7d, 0x1d, 0x54, 0x01, 0x46, 0x45, 0x3c, 0x97, 0xd4, 0x1f, 0x42, + 0x49, 0x91, 0x93, 0x22, 0xe4, 0xd3, 0x58, 0xd6, 0x52, 0x49, 0x0a, 0x88, + 0x13, 0x62, 0x52, 0x0a, 0x1a, 0x5d, 0xb9, 0x98, 0x41, 0x3e, 0xc7, 0x71, + 0x08, 0x1d, 0x24, 0x3a, 0x17, 0xfb, 0xc0, 0xf4, 0x91, 0xb8, 0x02, 0x56, + 0x58, 0x72, 0x2f, 0xaa, 0xf1, 0xb7, 0xd6, 0x0e, 0x8f, 0x06, 0x0e, 0xe6, + 0xbb, 0xde, 0xa1, 0x19, 0x1c, 0xb0, 0x4a, 0xf9, 0xc5, 0x17, 0x85, 0xd6, + 0x83, 0xd0, 0xd5, 0xd5, 0xb7, 0xd4, 0x2e, 0xa3, 0xac, 0xc4, 0xcc, 0xf0, + 0xc2, 0x54, 0xa1, 0x4a, 0xea, 0xa5, 0xed, 0xc4, 0x0c, 0x04, 0x7e, 0xcc, + 0x34, 0x73, 0xf5, 0xfc, 0x20, 0xd0, 0xaf, 0x85, 0xbf, 0x4c, 0xd1, 0xec, + 0x9e, 0x75, 0x74, 0x27, 0xa8, 0x11, 0x05, 0xd2, 0xd7, 0xf1, 0x28, 0x79, + 0x0c, 0xcf, 0xe0, 0xe6, 0xec, 0xf6, 0x3e, 0xd9, 0xde, 0xf1, 0x34, 0x36, + 0x03, 0x61, 0x13, 0xf2, 0x64, 0x44, 0x37, 0x17, 0x89, 0x27, 0x30, 0x9c, + 0x38, 0xf4, 0x55, 0xb8, 0xd9, 0x6e, 0x7a, 0x59, 0x20, 0xa7, 0xea, 0x05, + 0xb4, 0x42, 0x44, 0x45, 0xa8, 0x96, 0xfa, 0x47, 0x99, 0xaa, 0x39, 0x71, + 0xe3, 0x53, 0x89, 0x19, 0xc9, 0xdb, 0x04, 0x5e, 0x62, 0x02, 0x3c, 0x7e, + 0x3f, 0x1f, 0x94, 0x37, 0x6b, 0xc8, 0x59, 0x35, 0x55, 0x20, 0x23, 0x66, + 0xec, 0xb9, 0xbc, 0x17, 0x35, 0xa7, 0x6f, 0xe2, 0x4b, 0xab, 0xe5, 0x6e, + 0x83, 0x18, 0x38, 0xff, 0xc4, 0xb5, 0xb6, 0x35, 0xb1, 0x2a, 0xbd, 0x35, + 0xdb, 0xfe, 0xc7, 0xd1, 0xb0, 0xd6, 0x6e, 0x8c, 0xf9, 0x13, 0x72, 0x46, + 0x8d, 0x85, 0x67, 0x9c, 0xa7, 0xf7, 0x81, 0x0a, 0x09, 0x8a, 0xfe, 0xdc, + 0x15, 0x1c, 0x27, 0x14, 0x4a, 0x10, 0xed, 0xac, 0xf8, 0x52, 0x54, 0x77, + 0x39, 0x7d, 0x09, 0xce, 0x6b, 0x9d, 0xd4, 0xa0, 0xef, 0x33, 0x1d, 0x51, + 0xdd, 0xe9, 0x71, 0x45, 0x3f, 0x24, 0xf9, 0xb7, 0x49, 0x99, 0x2d, 0x7a, + 0x8d, 0xc9, 0x9f, 0xd2, 0xf3, 0xb5, 0xae, 0x1c, 0xc6, 0x00, 0x29, 0xe8, + 0xcb, 0xfe, 0xe9, 0x73, 0x27, 0xbc, 0x1f, 0xef, 0xb5, 0xc6, 0xe8, 0x9c, + 0xc9, 0x7e, 0x30, 0x1b, 0xd7, 0xfa, 0x85, 0x2e, 0x27, 0x0a, 0x75, 0x5a, + 0x24, 0x4c, 0x84, 0x54, 0x6c, 0x75, 0x68, 0x88, 0xaa, 0x13, 0xda, 0x8b, + 0xbe, 0x52, 0xb4, 0x21, 0xa8, 0x8f, 0x39, 0x8c, 0xdc, 0x0f, 0x9d, 0xcd, + 0x8b, 0x1b, 0x34, 0x0b, 0x7e, 0x8c, 0xca, 0x1e, 0xae, 0x63, 0xa4, 0x71, + 0xc7, 0x4a, 0x2f, 0x37, 0x06, 0x09, 0xad, 0x23, 0xa4, 0x99, 0x8c, 0x24, + 0x69, 0x42, 0x94, 0xb7, 0x63, 0x53, 0x3a, 0xbf, 0xa2, 0xda, 0x3a, 0x9d, + 0x32, 0x8e, 0x26, 0x06, 0x86, 0x44, 0x8b, 0x6f, 0xb4, 0x48, 0x85, 0x83, + 0x29, 0x1d, 0x32, 0xa7, 0x64, 0xd7, 0xb0, 0x6a, 0x08, 0x57, 0x97, 0xbc, + 0xd0, 0xd5, 0x7c, 0xe6, 0xa6, 0xd7, 0x36, 0x22, 0xed, 0x55, 0x1a, 0x4d, + 0xfd, 0xb7, 0x7e, 0x28, 0xcf, 0x66, 0x40, 0x0b, 0xc5, 0x2d, 0x0d, 0xa3, + 0x9d, 0x89, 0x9e, 0x5d, 0x7b, 0xfc, 0xf4, 0x3b, 0x1f, 0x3b, 0x9f, 0xc0, + 0xe0, 0xb5, 0x9a, 0x08, 0xa5, 0x36, 0x64, 0xb3, 0x6c, 0xb1, 0x74, 0xe0, + 0xdb, 0x1c, 0xc8, 0xac, 0xf3, 0x44, 0x4c, 0x08, 0x6e, 0x98, 0x37, 0x8c, + 0x1b, 0xa6, 0xa3, 0x5b, 0xbf, 0xa3, 0x82, 0xfe, 0x66, 0xc5, 0x0b, 0xb9, + 0x98, 0x2e, 0xd3, 0x0a, 0x26, 0x88, 0xb8, 0x11, 0xa9, 0x04, 0x2c, 0xa5, + 0x35, 0xca, 0x9c, 0xec, 0x7e, 0x19, 0xcd, 0x11, 0x43, 0x6d, 0x1a, 0x61, + 0xa0, 0x31, 0x0b, 0x6b, 0x15, 0x20, 0x0b, 0xfc, 0xaf, 0x37, 0x99, 0xa9, + 0x1c, 0x58, 0xd1, 0xa2, 0xf5, 0x4b, 0x28, 0x8b, 0x70, 0x2b, 0xa0, 0x9d, + 0xac, 0x42, 0x38, 0x10, 0x60, 0x4a, 0xf0, 0x46, 0xe2, 0xde, 0x67, 0xa5, + 0xad, 0x33, 0x9f, 0xda, 0x29, 0x59, 0xe9, 0xd3, 0xfb, 0x0f, 0xa6, 0xb2, + 0xc7, 0xa5, 0x63, 0x23, 0x72, 0xf1, 0x6d, 0x10, 0x01, 0xd5, 0x94, 0x90, + 0xb5, 0x5c, 0x74, 0x0f, 0xc4, 0xc7, 0x1b, 0x1f, 0xb4, 0x1a, 0x94, 0x1a, + 0xab, 0xed, 0xa5, 0x31, 0x0e, 0xdd, 0xed, 0x55, 0xb3, 0x28, 0x36, 0x55, + 0x51, 0x91, 0x41, 0xb0, 0x30, 0xaf, 0x78, 0xe4, 0xc5, 0xfa, 0xb8, 0xf3, + 0xb1, 0x49, 0x61, 0xf9, 0x13, 0xea, 0xe2, 0x0c, 0x9a, 0x04, 0x30, 0x25, + 0x3c, 0xe3, 0x16, 0x3d, 0x7c, 0xb3, 0x7e, 0xcd, 0xd4, 0xec, 0xd8, 0x31, + 0x1a, 0x79, 0xdc, 0x75, 0xc6, 0x11, 0x51, 0x4d, 0xf8, 0x57, 0x7d, 0x56, + 0x2c, 0xdc, 0xee, 0xd4, 0x39, 0x89, 0x74, 0xbd, 0x02, 0xe3, 0xd4, 0xd8, + 0x25, 0x57, 0x46, 0xa4, 0xad, 0x4d, 0x49, 0x93, 0x48, 0x56, 0xcd, 0x4b, + 0x94, 0xd5, 0x21, 0x68, 0x52, 0xd0, 0x9a, 0x2b, 0xee, 0x54, 0x5e, 0x6a, + 0x90, 0x01, 0x40, 0x6b, 0x48, 0x75, 0xf1, 0xab, 0x77, 0x6b, 0x2d, 0x0c, + 0xed, 0x57, 0x78, 0x9a, 0x5f, 0xdc, 0x3b, 0x7d, 0xc1, 0xcc, 0x9b, 0xd1, + 0xf8, 0x44, 0x32, 0x82, 0xf8, 0xc5, 0x41, 0xbb, 0x84, 0xcb, 0x78, 0xf0, + 0x02, 0x0f, 0x94, 0x07, 0xfd, 0xa9, 0x7b, 0xdf, 0x9f, 0x2c, 0xdf, 0xfe, + 0x59, 0x4a, 0x68, 0x6d, 0x21, 0xc5, 0x76, 0x9e, 0xda, 0x57, 0x21, 0xce, + 0xec, 0x65, 0xf0, 0xe7, 0xfc, 0x7f, 0x70, 0xec, 0xb8, 0x98, 0x4c, 0x58, + 0x5c, 0x64, 0xe8, 0x4a, 0x1f, 0xdc, 0x5e, 0x9c, 0x46, 0xf8, 0xde, 0x03, + 0x84, 0xf4, 0x73, 0x0c, 0x96, 0x06, 0xfd, 0xcf, 0x5e, 0x64, 0x39, 0x7c, + 0x12, 0xd8, 0x4d, 0xfe, 0xfb, 0x21, 0x0e, 0xa8, 0x99, 0xca, 0x35, 0xaa, + 0x4e, 0x7e, 0x3e, 0x53, 0x5f, 0x59, 0xd5, 0xf9, 0xb4, 0xdc, 0xaf, 0x4c, + 0xfb, 0x6b, 0xf3, 0x6b, 0x42, 0xb9, 0xd5, 0x6e, 0xa3, 0x29, 0x33, 0x51, + 0xe6, 0x98, 0xac, 0x21, 0x82, 0x60, 0x3e, 0xd3, 0x03, 0x0e, 0xe8, 0x26, + 0xf4, 0x91, 0x51, 0x53, 0x6c, 0x08, 0xad, 0x35, 0x46, 0x73, 0x14, 0x2d, + 0xfd, 0x16, 0xac, 0xdf, 0xc1, 0x0e, 0x6c, 0x91, 0xb5, 0x38, 0x8e, 0x7b, + 0x5b, 0xc8, 0x7a, 0xdd, 0x87, 0xaf, 0x47, 0x59, 0xdd, 0x7b, 0x10, 0xfa, + 0x5f, 0x1a, 0x39, 0xb7, 0xa3, 0x7e, 0x58, 0xfa, 0x6b, 0x3a, 0xc1, 0x8d, + 0x81, 0x84, 0x75, 0x2a, 0x0d, 0xcd, 0xc6, 0xb7, 0x56, 0x26, 0xba, 0x4e, + 0x5c, 0x95, 0x37, 0xdb, 0x0c, 0x74, 0x43, 0x1d, 0xdb, 0xa1, 0xb2, 0x4b, + 0x7b, 0xd5, 0xc9, 0x43, 0x03, 0xff, 0xc2, 0xea, 0x5d, 0xe8, 0xaf, 0xa7, + 0xdf, 0x6f, 0x48, 0x4f, 0xa5, 0x22, 0x19, 0x73, 0x5b, 0x95, 0xc5, 0x56, + 0x86, 0x01, 0xc9, 0x19, 0xf1, 0x97, 0x76, 0xd2, 0x26, 0x88, 0x97, 0xd8, + 0x6d, 0x2f, 0x7b, 0x0a, 0xc7, 0xab, 0x24, 0x7e, 0x2f, 0x98, 0x38, 0x23, + 0x0f, 0x11, 0xb8, 0x3d, 0x40, 0x0f, 0x79, 0xf3, 0xb0, 0x27, 0x2f, 0x36, + 0x31, 0x1c, 0x42, 0x92, 0xc8, 0x5e, 0x6a, 0x18, 0xaa, 0x26, 0x67, 0xa8, + 0xbc, 0xe8, 0xa0, 0xe4, 0xe4, 0x03, 0x57, 0xc5, 0x7e, 0xdc, 0x71, 0x83, + 0xd8, 0xa3, 0x5c, 0x3d, 0x68, 0xa4, 0x18, 0x73, 0x09, 0x26, 0x04, 0x2a, + 0x27, 0x8d, 0x3a, 0x59, 0xb6, 0x6e, 0x67, 0x1c, 0x5c, 0xf0, 0x86, 0x77, + 0x45, 0xeb, 0xbc, 0xc8, 0xd2, 0x10, 0x4b, 0xd8, 0xec, 0x14, 0x37, 0x3a, + 0x84, 0x8d, 0x3c, 0x2f, 0x81, 0x2b, 0x0a, 0xca, 0x58, 0xf4, 0xaf, 0xed, + 0xf5, 0x27, 0x4c, 0x4f, 0xe8, 0xb0, 0x88, 0x86, 0xb4, 0x9e, 0xec, 0xd8, + 0x09, 0xc0, 0xa8, 0x3e, 0x70, 0x60, 0x06, 0xe8, 0x59, 0x4f, 0x00, 0x21, + 0x24, 0xb8, 0xb4, 0x82, 0xb1, 0xc0, 0x44, 0xda, 0x37, 0x0b, 0xd1, 0x27, + 0x12, 0xdf, 0x98, 0x91, 0xa9, 0x9d, 0x12, 0x8f, 0x3e, 0x0d, 0xa8, 0x09, + 0x79, 0x74, 0x69, 0xc2, 0x81, 0x0d, 0x4a, 0xc1, 0xe7, 0x23, 0x10, 0xb0, + 0x3a, 0x97, 0x73, 0xb1, 0xe3, 0xf5, 0xfb, 0x88, 0x62, 0x73, 0xbc, 0xc4, + 0xea, 0x08, 0x12, 0xd3, 0xa3, 0xe6, 0x03, 0x99, 0xd2, 0x28, 0xf6, 0x5c, + 0xb7, 0x11, 0x5c, 0xec, 0xa8, 0xf5, 0x17, 0x8a, 0x91, 0x32, 0x25, 0xcd, + 0xb0, 0xb5, 0x68, 0xb3, 0x9d, 0x53, 0x87, 0xe4, 0x31, 0xba, 0x19, 0xd7, + 0x52, 0xb2, 0x98, 0x17, 0x01, 0xd3, 0x23, 0x56, 0x05, 0x8a, 0x5b, 0xb2, + 0x37, 0x9b, 0x57, 0x80, 0xa9, 0x74, 0xfe, 0x7a, 0xc2, 0xbf, 0x0d, 0x98, + 0xfc, 0xcb, 0xe6, 0x2b, 0x6e, 0x3f, 0x36, 0x1a, 0xc7, 0x92, 0xfd, 0x1a, + 0x6a, 0x4b, 0x55, 0x81, 0xac, 0xf4, 0x1e, 0xad, 0x32, 0xc3, 0x4d, 0xa6, + 0xdb, 0x27, 0x69, 0x6f, 0xf0, 0x78, 0x34, 0xab, 0xa1, 0xdf, 0x4d, 0x59, + 0x55, 0x08, 0x26, 0x80, 0xa5, 0x51, 0x75, 0x39, 0x6f, 0x9d, 0x59, 0xc6, + 0xb9, 0xd4, 0x23, 0x61, 0xc5, 0x81, 0xfe, 0xd1, 0x18, 0xca, 0xeb, 0xf7, + 0x0f, 0xa7, 0x84, 0x93, 0xb9, 0x1e, 0x4b, 0x07, 0xcf, 0x38, 0x5b, 0x17, + 0x42, 0x96, 0x3f, 0xd7, 0x9e, 0x7c, 0xfe, 0x24, 0x50, 0x89, 0x83, 0x4a, + 0x87, 0x70, 0xd3, 0x13, 0xb0, 0x67, 0xe8, 0x9b, 0x38, 0x04, 0x46, 0x5b, + 0x8a, 0x72, 0xc9, 0x19, 0x3e, 0xad, 0xfe, 0x1b, 0xcc, 0x72, 0xb8, 0x95, + 0x0f, 0xdc, 0x4b, 0x11, 0xdf, 0x73, 0xd4, 0x84, 0x0c, 0xf5, 0x5b, 0x49, + 0xb7, 0xfd, 0xef, 0x57, 0x76, 0xc1, 0x89, 0xb3, 0xc7, 0x8b, 0xd9, 0xc5, + 0x19, 0x0b, 0x45, 0x99, 0x55, 0xe4, 0xba, 0x8f, 0xdf, 0xdc, 0x8c, 0x2f, + 0xaa, 0xbc, 0xe4, 0x4f, 0x15, 0xb3, 0x8b, 0xfd, 0x13, 0x59, 0x62, 0x1e, + 0x34, 0x04, 0x9c, 0xea, 0xfc, 0xf6, 0xc9, 0x69, 0xc6, 0x9d, 0x59, 0x53, + 0xde, 0xb5, 0x70, 0x78, 0x9c, 0x61, 0xf9, 0x2d, 0x98, 0x57, 0xbc, 0x24, + 0x53, 0x77, 0x61, 0x33, 0x4a, 0x03, 0x59, 0xf9, 0x6e, 0x08, 0x97, 0x83, + 0x30, 0xb8, 0x26, 0x5f, 0xf4, 0x04, 0x85, 0x76, 0x7e, 0xfc, 0x3c, 0x26, + 0x86, 0x10, 0x3a, 0x15, 0x71, 0xdc, 0xeb, 0x17, 0x35, 0x2c, 0x14, 0xa1, + 0xd6, 0x5d, 0x32, 0x21, 0xd5, 0xb2, 0xfa, 0x9e, 0x5c, 0xfa, 0x52, 0x22, + 0x54, 0xb8, 0xfe, 0xbb, 0x85, 0x6c, 0xe0, 0xab, 0xb8, 0xf3, 0xfa, 0x2d, + 0x7d, 0x6a, 0x1c, 0xe5, 0x80, 0x5a, 0x37, 0x36, 0x3e, 0xaa, 0xd7, 0x0a, + 0xf9, 0x68, 0x36, 0x69, 0x53, 0x08, 0x8e, 0x05, 0x75, 0x73, 0x17, 0xbb, + 0x23, 0xea, 0x62, 0x56, 0x25, 0xab, 0xa4, 0xf0, 0x76, 0xb7, 0xd4, 0xd9, + 0x31, 0xf3, 0xa9, 0x43, 0x03, 0xa4, 0x29, 0xb5, 0x04, 0x78, 0x45, 0x76, + 0x45, 0xcc, 0x0c, 0xb9, 0x92, 0x0c, 0x66, 0xc9, 0xb7, 0xce, 0x5c, 0x9d, + 0x79, 0x1b, 0xc7, 0xbb, 0x7b, 0x8e, 0x1d, 0x2c, 0x42, 0xba, 0x47, 0xd7, + 0x3a, 0xfe, 0xb3, 0x40, 0x1a, 0xa9, 0xca, 0xaa, 0xc9, 0x2e, 0x9c, 0xb5, + 0xe4, 0xed, 0x02, 0x1f, 0x77, 0x3f, 0x3d, 0x52, 0xc3, 0x78, 0xb9, 0x9b, + 0xbe, 0x7f, 0x8b, 0x90, 0x83, 0x30, 0x1e, 0x54, 0xf1, 0xda, 0x9a, 0x9d, +}; + +const uint8_t expected_sig[] = { + 0x8b, 0x6f, 0x79, 0x00, 0xcc, 0x79, 0x57, 0xee, 0x16, 0x86, 0x87, 0xd5, + 0xcf, 0xb6, 0x90, 0x2c, 0xc6, 0x30, 0xeb, 0x8d, 0x39, 0xae, 0x9b, 0xf1, + 0x66, 0xe0, 0xd6, 0x93, 0xa5, 0x4e, 0x26, 0x9b, 0x96, 0x8f, 0xd1, 0x46, + 0x97, 0xbe, 0x71, 0x1c, 0xf3, 0xa5, 0xe5, 0xae, 0x8d, 0x4b, 0xf2, 0xe6, + 0x48, 0x8f, 0xe9, 0x5e, 0x07, 0xef, 0xe4, 0xbb, 0x39, 0xc1, 0xc9, 0x3c, + 0xc3, 0x0b, 0xfb, 0x2a, 0x29, 0x06, 0xfe, 0x01, 0xcb, 0x63, 0x83, 0x10, + 0xa8, 0xc8, 0xa0, 0x29, 0xa5, 0x80, 0xeb, 0xbd, 0xa9, 0xd9, 0x0b, 0x61, + 0xbc, 0xce, 0x11, 0x55, 0x66, 0x12, 0xc7, 0x5b, 0xd2, 0x7a, 0x5a, 0xc8, + 0xab, 0xab, 0xbf, 0x3a, 0x1f, 0x96, 0x1a, 0x70, 0xcb, 0x41, 0x5f, 0xc8, + 0xb7, 0x09, 0x22, 0x98, 0x9b, 0xb8, 0xf7, 0x2d, 0x49, 0x65, 0x1d, 0x09, + 0x8b, 0x70, 0xb5, 0x42, 0xc9, 0x89, 0x5b, 0x74, 0xb4, 0x28, 0x82, 0x01, + 0x53, 0x12, 0x3e, 0x23, 0xf6, 0x54, 0xf8, 0x51, 0x12, 0x4b, 0x02, 0x3a, + 0x7e, 0xb6, 0x1f, 0xac, 0xa0, 0xe6, 0x6f, 0xf8, 0x61, 0x82, 0xe4, 0xfb, + 0x96, 0x2a, 0xd2, 0xaf, 0x3c, 0xea, 0x6e, 0xdc, 0x18, 0x8a, 0x5d, 0x90, + 0xda, 0xa2, 0x5d, 0xa7, 0x8f, 0x5b, 0x50, 0x46, 0xaf, 0x8c, 0x17, 0x6a, + 0x4c, 0x39, 0xfc, 0x31, 0x4c, 0x4b, 0xc2, 0x57, 0x66, 0x61, 0x98, 0xbf, + 0xe6, 0xfb, 0x54, 0x96, 0xd3, 0x70, 0xb8, 0xaf, 0xcd, 0x8b, 0xcc, 0x00, + 0x07, 0x92, 0x15, 0xc2, 0xbb, 0x48, 0xbb, 0xc6, 0xb7, 0xb5, 0x58, 0x8c, + 0xfc, 0xf0, 0xda, 0x6a, 0x0d, 0xf7, 0x1d, 0x7d, 0xc6, 0x27, 0x26, 0x1a, + 0x99, 0xc5, 0x2f, 0xf8, 0x97, 0x65, 0x43, 0x86, 0xd6, 0x25, 0x23, 0x2b, + 0x06, 0x8f, 0x12, 0xa1, 0xae, 0xbb, 0x58, 0x34, 0x25, 0xec, 0x5b, 0x68, + 0xa4, 0xe1, 0x03, 0xfc, 0x26, 0xa2, 0xd6, 0x2b, 0x61, 0x10, 0x47, 0xbd, + 0x16, 0xe5, 0xca, 0x4a, 0xce, 0xed, 0x89, 0x09, 0x1a, 0xed, 0x22, 0xc1, + 0xca, 0x44, 0xe3, 0xef, 0x72, 0x34, 0xab, 0xab, 0x61, 0x5c, 0x9f, 0x5f, + 0xb5, 0xf5, 0xe8, 0x2d, 0x89, 0xea, 0x4b, 0x40, 0x65, 0x57, 0x8b, 0xa2, + 0x95, 0x40, 0x9c, 0x72, 0xc0, 0x46, 0x69, 0x45, 0x06, 0xf6, 0x07, 0x5b, + 0x2d, 0xa5, 0x46, 0xca, 0x5d, 0xfb, 0x40, 0xb7, 0x48, 0x59, 0x5b, 0xe2, + 0x1b, 0x38, 0xb2, 0x15, 0x75, 0x66, 0x67, 0x58, 0x00, 0x3f, 0xde, 0x8a, + 0x63, 0x13, 0x34, 0x6a, 0x30, 0xca, 0xb4, 0xd5, 0x3e, 0xe0, 0x6d, 0x14, + 0xb8, 0x9a, 0x48, 0xef, 0xfd, 0xbd, 0x6d, 0x20, 0x11, 0x4d, 0x25, 0xe5, + 0xab, 0x15, 0x8d, 0xe5, 0x91, 0xbc, 0xc6, 0x69, 0x8a, 0xf8, 0xab, 0x3a, + 0x82, 0xae, 0xc5, 0x03, 0x2c, 0xcf, 0x54, 0xdc, 0xcd, 0xe8, 0x49, 0x53, + 0xb5, 0xd8, 0xc2, 0x24, 0xf8, 0x8c, 0x38, 0x8f, 0xe3, 0xfe, 0x3a, 0x18, + 0x15, 0xa8, 0xda, 0x77, 0xc8, 0x81, 0x72, 0xc6, 0xc1, 0x60, 0xa3, 0x73, + 0x65, 0x68, 0x5c, 0xf3, 0x1d, 0x8d, 0x61, 0x21, 0x65, 0xfb, 0x45, 0xc4, + 0x4c, 0x31, 0x88, 0x25, 0x0d, 0x52, 0x75, 0x3b, 0xec, 0x54, 0xe0, 0xb1, + 0x9c, 0x7c, 0xdf, 0xe3, 0x3b, 0x77, 0x31, 0x33, 0xd7, 0x25, 0x99, 0xff, + 0xc5, 0x40, 0x1e, 0x85, 0x09, 0xfd, 0x2d, 0x24, 0x4a, 0x92, 0xe7, 0x77, + 0x48, 0xa5, 0x46, 0xf4, 0x8e, 0xa3, 0x6b, 0x24, 0xe4, 0x6b, 0x31, 0xf6, + 0xe0, 0x16, 0x49, 0x9b, 0x9f, 0xa3, 0x1a, 0x5c, 0x05, 0x5e, 0x81, 0x62, + 0xc8, 0x14, 0x52, 0xb4, 0x21, 0xfd, 0x76, 0x6d, 0x88, 0xe9, 0x3b, 0x0b, + 0x75, 0x27, 0x92, 0x47, 0x5a, 0x58, 0x08, 0x26, 0xa7, 0xa2, 0x48, 0x1c, + 0x14, 0x3e, 0x5e, 0xdf, 0x81, 0x83, 0x83, 0x3e, 0xc6, 0x72, 0x27, 0xc4, + 0x6a, 0x46, 0x2b, 0xf2, 0x8d, 0x42, 0x11, 0xb9, 0x15, 0xd7, 0xf0, 0x20, + 0x29, 0x53, 0xba, 0xf0, 0x6e, 0x41, 0x3d, 0xee, 0x19, 0xf2, 0x43, 0xf3, + 0x6d, 0x00, 0xe2, 0x43, 0x77, 0xb9, 0xa9, 0x78, 0x34, 0x48, 0x3c, 0x1a, + 0x8b, 0xbd, 0xa1, 0xe5, 0x90, 0x59, 0x5b, 0xd6, 0x1e, 0x22, 0xdf, 0xb2, + 0xa7, 0x96, 0x7d, 0x55, 0x86, 0x66, 0x95, 0xb7, 0x06, 0xe7, 0x60, 0x2a, + 0x01, 0x48, 0x3f, 0xd4, 0xa7, 0xd4, 0xc2, 0x38, 0xa4, 0x10, 0x8e, 0x4f, + 0x97, 0xad, 0xa3, 0xb9, 0xe2, 0xaa, 0x13, 0xb1, 0x16, 0x89, 0x3d, 0x74, + 0x60, 0x94, 0x8c, 0xc3, 0xe6, 0x5f, 0xcf, 0xdc, 0x58, 0x17, 0x98, 0x27, + 0x86, 0xae, 0x2a, 0x0d, 0xe8, 0x33, 0x79, 0xc8, 0xc8, 0x5b, 0x59, 0xb0, + 0xba, 0xac, 0xd3, 0x6e, 0x2d, 0x7b, 0x0b, 0x9a, 0xb5, 0xfd, 0x58, 0x42, + 0xeb, 0x80, 0xf4, 0x6b, 0x9a, 0x2f, 0x19, 0x43, 0x75, 0xb4, 0xcb, 0xc9, + 0xd5, 0x28, 0xf5, 0xb9, 0x67, 0x82, 0xb4, 0xed, 0x8c, 0x3f, 0x3d, 0x6b, + 0x6d, 0x1b, 0x80, 0x13, 0x5c, 0x7b, 0x2e, 0xfa, 0xa0, 0x32, 0xba, 0xb5, + 0x46, 0xd6, 0xe7, 0x90, 0xe9, 0xd1, 0x91, 0xa0, 0xaa, 0x26, 0x35, 0xa2, + 0x0d, 0x98, 0x44, 0x11, 0xae, 0xf9, 0xc5, 0x12, 0x4d, 0x1a, 0x7c, 0x53, + 0xea, 0xf6, 0x05, 0x8d, 0x3a, 0x74, 0x92, 0xc9, 0x65, 0xeb, 0x6f, 0xb5, + 0xb4, 0xd2, 0xcd, 0x5c, 0xec, 0xaf, 0x95, 0xcb, 0xb4, 0x3c, 0x22, 0xca, + 0x1c, 0x06, 0x85, 0x16, 0x96, 0x24, 0x8c, 0x6c, 0x80, 0xf8, 0xb3, 0xa7, + 0x87, 0x77, 0xeb, 0x09, 0x71, 0xc8, 0x95, 0xfb, 0x5e, 0xe5, 0x6f, 0x78, + 0xf9, 0x60, 0xf9, 0x9e, 0x58, 0x7b, 0xbd, 0x47, 0xdd, 0x48, 0x2e, 0x56, + 0xcd, 0x63, 0x72, 0xc9, 0x4b, 0x65, 0x2d, 0x41, 0xe8, 0x81, 0x19, 0x33, + 0x4b, 0xf6, 0x02, 0xc6, 0xcb, 0x2e, 0xdf, 0x3d, 0xc8, 0xdd, 0x2f, 0x0f, + 0x09, 0x67, 0xf0, 0xaa, 0x3c, 0x51, 0xdc, 0x8d, 0xc6, 0xc3, 0xb2, 0x3b, + 0x15, 0x85, 0xcb, 0xeb, 0x62, 0xef, 0xa3, 0xf9, 0x94, 0xf4, 0x35, 0x9c, + 0x59, 0xcc, 0xc2, 0x68, 0xb4, 0xde, 0x02, 0x75, 0x8e, 0xf5, 0x33, 0xca, + 0xd5, 0xc5, 0x24, 0xae, 0xf6, 0xde, 0x2b, 0x01, 0xf4, 0x56, 0xb9, 0xa5, + 0xa7, 0xe0, 0x64, 0x2e, 0xba, 0x1d, 0x53, 0x54, 0x46, 0xcf, 0x64, 0x16, + 0x12, 0xe2, 0xa6, 0xcc, 0x18, 0xb4, 0x77, 0x8b, 0x19, 0x50, 0x43, 0x96, + 0xc8, 0x5d, 0xc3, 0x58, 0xf0, 0xfd, 0x5e, 0x13, 0xa9, 0x10, 0x67, 0xdf, + 0x25, 0xdb, 0xaf, 0x38, 0x5f, 0xbd, 0x35, 0xc1, 0x49, 0x44, 0xe8, 0x1f, + 0x12, 0xa4, 0x7c, 0x28, 0xa3, 0xd6, 0x0d, 0x6f, 0x44, 0xa9, 0x5f, 0xfc, + 0x9f, 0xfa, 0x11, 0x62, 0x87, 0x5b, 0x0e, 0x91, 0xd4, 0xb6, 0xd3, 0x71, + 0xc2, 0x77, 0x19, 0xf6, 0x7c, 0x11, 0x30, 0x5e, 0x5c, 0xd3, 0x1e, 0x90, + 0x05, 0x31, 0x63, 0xbb, 0xef, 0x85, 0xe0, 0x27, 0x94, 0x80, 0xcb, 0x33, + 0xbc, 0x5e, 0x45, 0x87, 0x62, 0xdf, 0xd4, 0x12, 0x2f, 0xf5, 0x41, 0x15, + 0x03, 0x0c, 0x80, 0xe8, 0xe2, 0x06, 0xde, 0x4b, 0x46, 0x70, 0x94, 0xd2, + 0x0d, 0x85, 0x72, 0x27, 0xe5, 0x6c, 0xeb, 0xd2, 0x78, 0x0b, 0x38, 0x40, + 0xe8, 0xdb, 0x47, 0x5c, 0xba, 0xd0, 0x21, 0x33, 0x8f, 0xb8, 0xc0, 0x66, + 0x1e, 0xd1, 0xb0, 0x94, 0xa3, 0x39, 0xc7, 0x87, 0xaf, 0x97, 0x98, 0xce, + 0x6d, 0x03, 0x1a, 0xdb, 0x52, 0x96, 0x0b, 0x9d, 0x5b, 0xf8, 0xa3, 0xf4, + 0x41, 0x95, 0x72, 0xad, 0x0e, 0x98, 0x61, 0x7f, 0xf3, 0x8f, 0x23, 0xeb, + 0xc0, 0xdf, 0xd7, 0x70, 0x26, 0x8c, 0xb3, 0xb3, 0xf0, 0xa2, 0x8a, 0x39, + 0xdd, 0x61, 0xb4, 0x53, 0xe0, 0x2a, 0x6f, 0x91, 0x34, 0x9c, 0x76, 0xf6, + 0x52, 0x93, 0xe6, 0x39, 0xb7, 0x54, 0x07, 0x46, 0x82, 0x2d, 0x05, 0x6d, + 0x9a, 0x00, 0x53, 0x65, 0x68, 0x93, 0x91, 0x00, 0xda, 0xe0, 0x93, 0x34, + 0x60, 0xb1, 0x93, 0x0b, 0x64, 0xa8, 0x12, 0xd2, 0x51, 0x3c, 0xdb, 0xb0, + 0x4c, 0x39, 0x4e, 0xce, 0xbd, 0xf0, 0x65, 0x12, 0x8a, 0xd4, 0x80, 0x7d, + 0x82, 0x85, 0xe4, 0x92, 0xc2, 0x77, 0x1e, 0xcf, 0xd9, 0xab, 0x0f, 0x9b, + 0x32, 0x2e, 0x3f, 0xe1, 0x0e, 0x87, 0x1c, 0x87, 0x34, 0xe7, 0x93, 0x16, + 0x95, 0x09, 0x7d, 0x24, 0xa8, 0xb5, 0xe0, 0x9f, 0x23, 0x87, 0x5c, 0x0b, + 0x31, 0x4a, 0x2f, 0xe2, 0x5c, 0x82, 0x49, 0x51, 0xe4, 0x93, 0xcb, 0x05, + 0x23, 0x4f, 0x8a, 0x83, 0x88, 0xfb, 0x89, 0xb0, 0x08, 0xd6, 0x64, 0xad, + 0x51, 0x84, 0x40, 0x29, 0xb1, 0xca, 0x74, 0x26, 0x29, 0x5a, 0x61, 0x01, + 0x2e, 0xa0, 0xeb, 0xeb, 0x02, 0xb5, 0xff, 0xd8, 0x20, 0x6a, 0x5e, 0x8d, + 0x17, 0x1e, 0xa3, 0xd7, 0x2f, 0x20, 0x0b, 0x93, 0x17, 0x24, 0xf7, 0x90, + 0x7b, 0xc6, 0xba, 0xd8, 0xf9, 0xe9, 0x0a, 0x2a, 0x7a, 0x81, 0x23, 0x81, + 0x03, 0x6f, 0x1e, 0x0d, 0x87, 0x83, 0xd1, 0xcf, 0x92, 0x2f, 0x19, 0x82, + 0x4e, 0x6c, 0x0a, 0x02, 0xb6, 0x70, 0xbc, 0xe1, 0x58, 0xe7, 0x16, 0xdb, + 0x2f, 0x74, 0x9f, 0xe1, 0xc2, 0x1e, 0x64, 0xc6, 0x48, 0x08, 0xee, 0xea, + 0x52, 0x9a, 0xce, 0x2c, 0xc5, 0x0c, 0x7a, 0x63, 0xf1, 0x6a, 0xbd, 0x2c, + 0x8b, 0xd5, 0x4a, 0xfa, 0x1e, 0xab, 0x9a, 0x5b, 0x25, 0xb8, 0xfa, 0x0a, + 0xe9, 0x68, 0x80, 0x6f, 0x80, 0x57, 0x10, 0x54, 0xb8, 0xa2, 0x16, 0xbd, + 0xfe, 0xf7, 0xea, 0x01, 0xc7, 0x94, 0x5a, 0x95, 0xe3, 0x61, 0xa5, 0x49, + 0x84, 0xf5, 0x79, 0x78, 0xb5, 0x0a, 0x96, 0xca, 0x01, 0x1b, 0xd0, 0x0b, + 0x51, 0x30, 0xd3, 0x48, 0xfc, 0x4d, 0x50, 0x71, 0x09, 0x73, 0xea, 0x37, + 0xcd, 0x9d, 0x3d, 0xde, 0x30, 0x56, 0x21, 0xf0, 0xef, 0x84, 0xad, 0x27, + 0xe1, 0x83, 0xdb, 0xfb, 0xcd, 0x11, 0xb2, 0xbd, 0x30, 0x67, 0x8a, 0x88, + 0x09, 0x0e, 0x9d, 0x96, 0x09, 0xba, 0xda, 0x9d, 0xf0, 0xe9, 0xb4, 0xa6, + 0x7a, 0x04, 0xf9, 0x4b, 0xb8, 0x51, 0xa9, 0x99, 0xf3, 0xbb, 0x77, 0x95, + 0x0a, 0xa1, 0xa6, 0xa1, 0x24, 0xfc, 0xcc, 0x45, 0xe8, 0x83, 0xc8, 0x6f, + 0x48, 0xad, 0x9a, 0x73, 0xd0, 0xe0, 0x57, 0x7d, 0xe4, 0x78, 0x65, 0xef, + 0xae, 0xc2, 0xfe, 0x7a, 0x56, 0xaf, 0x03, 0x71, 0x2b, 0xe6, 0xa1, 0x7e, + 0xe5, 0x12, 0xf8, 0xc3, 0x75, 0xc7, 0x22, 0x5f, 0x1b, 0x52, 0x90, 0xe5, + 0xdf, 0xba, 0x9d, 0xe2, 0x68, 0xe0, 0xb3, 0x7a, 0x9e, 0x14, 0xff, 0xb5, + 0x0a, 0x80, 0x20, 0x49, 0x88, 0xe9, 0x9c, 0xe4, 0xb5, 0xaf, 0x7e, 0x51, + 0xec, 0xe7, 0xfc, 0x64, 0x65, 0x21, 0x10, 0xc6, 0x1f, 0x7f, 0x93, 0x7d, + 0xd8, 0xf5, 0xd0, 0x98, 0x94, 0x44, 0xf8, 0x49, 0x6a, 0x51, 0x0a, 0x54, + 0xf4, 0x9f, 0xee, 0x3c, 0x56, 0xbf, 0x4c, 0xe4, 0xde, 0x1c, 0x9b, 0x11, + 0x7e, 0x9a, 0x71, 0x11, 0x80, 0x33, 0xd5, 0xb0, 0x9b, 0xef, 0x67, 0x29, + 0xa4, 0x7d, 0x70, 0x31, 0x3f, 0x8b, 0x2e, 0x4a, 0x0f, 0x2c, 0x91, 0x3d, + 0x3e, 0x3d, 0x8c, 0x0a, 0x2b, 0xf1, 0xdd, 0xbf, 0x61, 0xe6, 0xa3, 0xef, + 0x6d, 0x82, 0xc8, 0xb7, 0x5e, 0x2b, 0x83, 0xc9, 0x4e, 0xa0, 0x85, 0x7f, + 0x01, 0x5a, 0xca, 0x6e, 0x90, 0xfa, 0x7e, 0x82, 0x4d, 0x35, 0x7e, 0xe0, + 0x26, 0x40, 0xf4, 0xa6, 0xae, 0xc3, 0x89, 0xf3, 0xca, 0x55, 0x2c, 0xb5, + 0x29, 0x05, 0x94, 0x45, 0xa7, 0x45, 0xf3, 0x3d, 0xbb, 0x53, 0x5e, 0xca, + 0x7c, 0x84, 0x8f, 0x72, 0x98, 0x93, 0x90, 0x1f, 0x56, 0x72, 0xdb, 0xbd, + 0xa9, 0xeb, 0xf9, 0xe9, 0xce, 0xb1, 0x41, 0xc3, 0xaa, 0xa0, 0xc4, 0x74, + 0x23, 0xc1, 0xeb, 0x7d, 0x41, 0xcd, 0xa4, 0x62, 0xec, 0xfc, 0x9a, 0xa4, + 0x16, 0xec, 0x67, 0x41, 0x89, 0xf0, 0x0e, 0xf3, 0xd1, 0xa2, 0x2f, 0xba, + 0x5d, 0x93, 0x36, 0x46, 0xf5, 0x52, 0x64, 0x91, 0xe7, 0x40, 0x91, 0x20, + 0xa1, 0xc9, 0xaa, 0x4c, 0x79, 0xc4, 0xbb, 0x67, 0x79, 0xad, 0x43, 0xab, + 0xba, 0xde, 0xfc, 0xf1, 0x74, 0x81, 0x33, 0xc0, 0x3f, 0x39, 0xd1, 0xd1, + 0xdf, 0xc0, 0x53, 0x33, 0xb2, 0x92, 0x37, 0xe6, 0x86, 0x2a, 0xe4, 0xe1, + 0x7c, 0x98, 0xf7, 0xdb, 0x5c, 0xa9, 0xff, 0x8d, 0x9c, 0xab, 0xe2, 0xf2, + 0xd5, 0xb1, 0x42, 0xa9, 0xf4, 0x97, 0x80, 0xcd, 0xde, 0x25, 0x2e, 0x87, + 0x92, 0xdd, 0xcf, 0xed, 0x67, 0x93, 0x8c, 0x5a, 0x1d, 0xee, 0xcf, 0x9d, + 0x50, 0x8f, 0xa7, 0xe3, 0x5c, 0xa3, 0x68, 0x78, 0x24, 0xeb, 0x60, 0xa3, + 0x8b, 0x36, 0xbb, 0xcb, 0x46, 0xee, 0x77, 0xfb, 0xf8, 0x69, 0x24, 0xd1, + 0xfa, 0xad, 0x76, 0x76, 0x5e, 0x54, 0xe5, 0xb6, 0x36, 0xc6, 0xdd, 0xa9, + 0x6c, 0x44, 0x15, 0xf7, 0x0a, 0xf8, 0xbb, 0xba, 0xec, 0x35, 0xff, 0xc9, + 0xd6, 0x5d, 0xf5, 0x73, 0x4a, 0x15, 0x8f, 0x7b, 0x6e, 0xf4, 0xa0, 0x6d, + 0x10, 0xbb, 0x67, 0x0c, 0xb4, 0x69, 0xad, 0xb6, 0x40, 0xf7, 0x5f, 0x37, + 0x28, 0xc4, 0x08, 0x49, 0xd0, 0x16, 0x70, 0x80, 0xea, 0x55, 0x66, 0x07, + 0xc8, 0x03, 0x1b, 0xf6, 0xd3, 0x03, 0x04, 0x74, 0xe0, 0x50, 0x3f, 0xd2, + 0x53, 0x92, 0xa0, 0x9d, 0x59, 0xc9, 0x74, 0xf2, 0x7e, 0x3b, 0x33, 0x02, + 0x10, 0x0b, 0x39, 0xf7, 0x4f, 0x6b, 0x58, 0xb2, 0x1a, 0xda, 0x65, 0x44, + 0xd1, 0x7c, 0x3f, 0xd7, 0xe3, 0xac, 0xe2, 0x1f, 0x38, 0xc1, 0x6a, 0xb0, + 0xdc, 0xc3, 0x9c, 0x7b, 0x11, 0x3c, 0x05, 0x21, 0x96, 0x76, 0x98, 0x76, + 0x82, 0xc1, 0x54, 0xdf, 0xdc, 0x8f, 0x4c, 0xd2, 0x63, 0x04, 0x06, 0x77, + 0x36, 0xe6, 0x2e, 0xd1, 0x00, 0x28, 0x42, 0x7c, 0x4a, 0x27, 0x90, 0x46, + 0xc9, 0xce, 0x33, 0x1c, 0xae, 0xda, 0x79, 0x64, 0x7f, 0x52, 0x3f, 0x58, + 0x11, 0x76, 0x4a, 0xb6, 0x72, 0xd8, 0x76, 0xae, 0xfd, 0x5c, 0x57, 0x69, + 0x76, 0x91, 0x84, 0x21, 0xc4, 0x9b, 0xd8, 0xa2, 0xff, 0x93, 0x02, 0x77, + 0x61, 0x57, 0x96, 0x7b, 0x8e, 0xfc, 0xf2, 0x6c, 0x11, 0x2b, 0x5e, 0x88, + 0x5c, 0x17, 0x1d, 0x12, 0x79, 0x3a, 0x78, 0xb6, 0x9d, 0x70, 0xfa, 0xd4, + 0xc1, 0x5c, 0x90, 0x0e, 0x0a, 0xd1, 0x3c, 0x7d, 0xcf, 0xee, 0x8a, 0xb2, + 0xb2, 0x4d, 0xce, 0x89, 0x32, 0xa9, 0x6c, 0x56, 0x57, 0x85, 0xb1, 0xbf, + 0x18, 0x1d, 0xc6, 0xe1, 0x17, 0xc5, 0x92, 0x42, 0x99, 0xf9, 0x9f, 0x04, + 0xec, 0x38, 0xf8, 0xa0, 0xd2, 0xab, 0xe6, 0x13, 0x4d, 0x9c, 0x18, 0x86, + 0x3e, 0x18, 0x73, 0x2c, 0xac, 0xe0, 0xb9, 0xf9, 0x87, 0x74, 0xb8, 0xd7, + 0x47, 0x6e, 0x42, 0xfc, 0x29, 0xa0, 0x1f, 0x56, 0x68, 0xb6, 0x23, 0x96, + 0xa2, 0x8d, 0x54, 0x81, 0x0f, 0x60, 0xb9, 0xde, 0x93, 0xfc, 0xfd, 0xde, + 0xbe, 0xb3, 0xb5, 0x87, 0xec, 0x9f, 0x17, 0xc2, 0x77, 0x6e, 0xa0, 0x62, + 0xdb, 0x66, 0xba, 0xc5, 0x05, 0x12, 0x46, 0x5d, 0x3c, 0x23, 0x29, 0x68, + 0xe5, 0x31, 0xe3, 0x15, 0xec, 0xac, 0x15, 0x9a, 0xbf, 0x42, 0x65, 0x80, + 0x45, 0x9c, 0x1d, 0xc2, 0x0e, 0x18, 0x47, 0x40, 0x44, 0xc1, 0x55, 0x24, + 0x5a, 0x35, 0xad, 0x59, 0xd2, 0xc6, 0xc3, 0x68, 0x58, 0xbd, 0x6f, 0xcf, + 0x5d, 0xb1, 0x9b, 0x0c, 0x92, 0x39, 0x22, 0x49, 0x66, 0x2e, 0x03, 0x7b, + 0x75, 0x5c, 0x6c, 0xde, 0x37, 0x54, 0xa9, 0x07, 0x2f, 0x7e, 0xc1, 0x3e, + 0x3b, 0xab, 0xd2, 0xa9, 0xfa, 0xc7, 0x6b, 0xd5, 0x14, 0x08, 0x35, 0x89, + 0x0b, 0x31, 0x18, 0x54, 0x7d, 0x6b, 0x53, 0x80, 0x6e, 0x32, 0x9b, 0xff, + 0x61, 0x7f, 0x36, 0xe5, 0x28, 0x40, 0xbc, 0xc7, 0x19, 0xb3, 0xae, 0xfa, + 0x95, 0xa8, 0xae, 0xd2, 0x97, 0x72, 0xc6, 0x91, 0x36, 0x3a, 0xa6, 0xec, + 0x4a, 0x41, 0x63, 0x6b, 0x28, 0xef, 0x5a, 0xa1, 0xdb, 0xf2, 0xd9, 0xfd, + 0x61, 0x72, 0xa4, 0xd2, 0x9e, 0xf7, 0x47, 0xf4, 0x4e, 0xea, 0x2a, 0xa5, + 0x35, 0xe1, 0x77, 0x3a, 0x53, 0x28, 0xa6, 0x55, 0x48, 0x0c, 0x1e, 0x44, + 0xfc, 0xc1, 0x31, 0x5a, 0x00, 0xcd, 0x29, 0xc1, 0x5c, 0xca, 0x2a, 0x07, + 0x01, 0x63, 0xac, 0xb3, 0xfb, 0xf6, 0x0b, 0xac, 0xfd, 0xe8, 0x7b, 0xed, + 0xf9, 0x3d, 0x9a, 0xbc, 0x67, 0x28, 0x1c, 0xd9, 0x3f, 0x97, 0x28, 0x4a, + 0xe7, 0xd0, 0x08, 0xe9, 0x3e, 0xa0, 0xcb, 0x0f, 0xe0, 0x3f, 0x1b, 0x80, + 0x43, 0x74, 0xd9, 0x9d, 0x0b, 0x22, 0x81, 0xf7, 0xec, 0x71, 0x2a, 0x29, + 0x9e, 0x5d, 0x1e, 0x8d, 0xf4, 0x22, 0x95, 0x78, 0x86, 0xcb, 0xf0, 0x9d, + 0xe7, 0x6a, 0x66, 0x7e, 0x28, 0xb5, 0x47, 0xb6, 0xdc, 0x0d, 0x03, 0x3c, + 0x09, 0x58, 0x76, 0x93, 0x39, 0xb2, 0xd3, 0x75, 0xb4, 0x51, 0x55, 0x84, + 0x30, 0x24, 0x0a, 0x76, 0xf4, 0x97, 0xe7, 0x0f, 0x5a, 0x67, 0xee, 0xf4, + 0xc7, 0x69, 0x8d, 0xf2, 0x32, 0x29, 0x5c, 0x33, 0x82, 0x5f, 0x6c, 0x47, + 0xd0, 0xe2, 0xbd, 0x62, 0xd6, 0x4c, 0x6d, 0x0d, 0xba, 0x87, 0xd3, 0x43, + 0x7e, 0x2d, 0xa6, 0x14, 0x09, 0x4f, 0x3b, 0xc3, 0x04, 0x14, 0xe5, 0x65, + 0xe9, 0x3b, 0x6a, 0xca, 0xb5, 0x96, 0x84, 0x3f, 0x53, 0x49, 0x22, 0x45, + 0x91, 0xff, 0xf9, 0x26, 0x75, 0x0d, 0x9c, 0xa7, 0x00, 0xf4, 0x65, 0xc4, + 0x60, 0x72, 0xab, 0xeb, 0xf8, 0xa8, 0x72, 0xfe, 0xd8, 0xde, 0x93, 0x67, + 0xcb, 0x09, 0xcc, 0xa0, 0xce, 0x9f, 0x67, 0x63, 0x26, 0xfa, 0x7f, 0x89, + 0xaa, 0x3e, 0x6d, 0xb2, 0x90, 0xd7, 0xef, 0x3e, 0x2a, 0x66, 0x26, 0x33, + 0xe6, 0x26, 0xc1, 0x58, 0xf8, 0x91, 0xea, 0x2f, 0xd0, 0x84, 0x21, 0x41, + 0x93, 0xa6, 0x36, 0x40, 0xb5, 0x4c, 0xac, 0x21, 0x88, 0x37, 0x47, 0x8a, + 0xb8, 0xf3, 0x33, 0x73, 0x12, 0xd7, 0x5a, 0x55, 0xf9, 0xd1, 0x1e, 0x75, + 0xa4, 0x66, 0x68, 0x3f, 0xf7, 0xb2, 0xc4, 0x5d, 0x1b, 0xb1, 0x61, 0x0f, + 0xaf, 0x4b, 0x9b, 0x20, 0x2b, 0x05, 0x68, 0x1c, 0x6c, 0x97, 0x8d, 0xb8, + 0x7b, 0x96, 0xda, 0xe0, 0x67, 0x15, 0x4c, 0x51, 0x71, 0x0d, 0xd3, 0x7b, + 0xde, 0xaa, 0xd3, 0x58, 0xf5, 0xc9, 0x62, 0x0a, 0xc2, 0x33, 0x1f, 0xf3, + 0xc3, 0x30, 0xb5, 0x64, 0xd1, 0x59, 0x41, 0x0e, 0xae, 0xaa, 0x0d, 0xdf, + 0x9f, 0x5d, 0x3f, 0x15, 0x0d, 0x46, 0x7a, 0x6d, 0x2e, 0x29, 0x1b, 0xc0, + 0xd3, 0x11, 0x10, 0x5d, 0xdc, 0x6a, 0x35, 0x8c, 0x43, 0xc8, 0x9f, 0x05, + 0x80, 0xdc, 0x25, 0x24, 0x37, 0x70, 0x7e, 0x1c, 0xe9, 0x85, 0x5a, 0xef, + 0x83, 0x3a, 0x55, 0x68, 0x83, 0x17, 0xf4, 0xc7, 0xae, 0xe4, 0x84, 0xc9, + 0x64, 0x5d, 0x2f, 0xb6, 0xca, 0x10, 0x95, 0xb8, 0xd6, 0x80, 0xfd, 0x05, + 0xa5, 0x06, 0x32, 0x34, 0x91, 0x01, 0xd2, 0x02, 0x90, 0xe1, 0xf7, 0x89, + 0x8a, 0xee, 0x18, 0x04, 0x93, 0xd9, 0xb4, 0x63, 0x4b, 0xf7, 0x7a, 0x9c, + 0x1b, 0x4b, 0xf9, 0x31, 0x32, 0xd9, 0xf2, 0x55, 0x4e, 0xc1, 0x02, 0xce, + 0x77, 0x38, 0x36, 0x29, 0xb8, 0x54, 0x8c, 0xc2, 0x27, 0x5f, 0xd9, 0xae, + 0x3e, 0x1e, 0xcd, 0xe9, 0x07, 0x90, 0x4c, 0xe0, 0xda, 0x16, 0x6e, 0xdf, + 0xde, 0x3a, 0x61, 0x89, 0x9f, 0x79, 0xd0, 0xd4, 0x66, 0x95, 0xad, 0xe4, + 0x11, 0x7d, 0xa1, 0xae, 0xec, 0x3e, 0x6e, 0x20, 0x5a, 0xd0, 0x28, 0x0e, + 0x55, 0xec, 0xcf, 0x34, 0xec, 0xb7, 0xfc, 0xa4, 0xb3, 0x8f, 0x56, 0x13, + 0x50, 0xcc, 0x15, 0x10, 0x74, 0x40, 0x72, 0x42, 0x20, 0x22, 0xb3, 0xaf, + 0xf3, 0x68, 0xba, 0x95, 0x45, 0xcb, 0xef, 0x92, 0xd5, 0x14, 0x4c, 0x1f, + 0xe3, 0xc1, 0xa6, 0x03, 0x4e, 0x05, 0xd2, 0x1a, 0xee, 0xd2, 0x48, 0x44, + 0x2e, 0x50, 0x3b, 0x86, 0xc8, 0x6a, 0xc8, 0x4c, 0xca, 0x2a, 0xb6, 0xf7, + 0x3c, 0xaf, 0xdc, 0x62, 0xb1, 0x49, 0x13, 0xfe, 0xe7, 0x32, 0xea, 0x78, + 0xfa, 0xba, 0xcf, 0x15, 0x47, 0x58, 0xdc, 0x19, 0x73, 0x1d, 0xff, 0xbd, + 0xcc, 0x27, 0xf6, 0xfc, 0x66, 0x68, 0xa7, 0x29, 0xaf, 0x2b, 0x25, 0x0c, + 0x15, 0x47, 0xff, 0xc1, 0x00, 0x9d, 0xfa, 0x58, 0x9c, 0xaa, 0xf9, 0xcc, + 0x4c, 0x51, 0x1d, 0xda, 0xf3, 0x3c, 0x10, 0xd0, 0x3b, 0x59, 0x30, 0x02, + 0x68, 0x29, 0x1c, 0xa7, 0x22, 0xea, 0x81, 0xd3, 0x29, 0x71, 0x39, 0xe8, + 0x72, 0x7f, 0x7d, 0x94, 0x0a, 0x64, 0x2c, 0xe6, 0x55, 0xfb, 0x90, 0x78, + 0x7e, 0x6c, 0x3e, 0xfe, 0x57, 0x14, 0x61, 0xef, 0xe2, 0x63, 0x57, 0x6c, + 0x13, 0x97, 0x27, 0x2b, 0x38, 0x44, 0xab, 0x74, 0x76, 0x11, 0xa6, 0x60, + 0xad, 0x8e, 0xad, 0xe5, 0xa5, 0xa1, 0x66, 0xc5, 0xe1, 0x4d, 0x27, 0xa0, + 0x79, 0x7a, 0x09, 0xe6, 0xf0, 0x28, 0x3f, 0xcb, 0xc6, 0xf8, 0x94, 0xc0, + 0xf1, 0x13, 0xbe, 0x62, 0x6a, 0x52, 0x75, 0x52, 0xd3, 0x82, 0x31, 0xbd, + 0x15, 0xf2, 0xe8, 0x2e, 0xb1, 0x62, 0x03, 0x1e, 0xe2, 0xb3, 0xec, 0xbc, + 0x3c, 0x12, 0xca, 0x62, 0x4e, 0xc2, 0x3a, 0x51, 0x1c, 0xdf, 0xa2, 0x84, + 0x88, 0xe5, 0x7e, 0xd7, 0x5d, 0xd7, 0xbf, 0xf2, 0x7d, 0xbd, 0x9a, 0x90, + 0x63, 0xfd, 0x8a, 0x84, 0x2b, 0x9d, 0x89, 0x27, 0x63, 0x4c, 0x0a, 0xe3, + 0x70, 0x94, 0x7b, 0xe6, 0xb3, 0xd7, 0xcb, 0xcb, 0x8a, 0xeb, 0x6b, 0x53, + 0x34, 0x2f, 0x62, 0x44, 0x2d, 0x73, 0x63, 0x8a, 0xf4, 0xa2, 0x01, 0xd7, + 0x12, 0xb6, 0x8d, 0x8c, 0x4b, 0x73, 0x2b, 0x44, 0x50, 0x49, 0x6f, 0x01, + 0xac, 0xc5, 0x15, 0x37, 0x6c, 0xde, 0xd4, 0x02, 0xb1, 0x12, 0x80, 0x73, + 0xb2, 0x52, 0x0e, 0xe0, 0xb5, 0x75, 0xc9, 0x48, 0xcf, 0x18, 0x5c, 0xcc, + 0xaf, 0x58, 0xa2, 0x3e, 0x28, 0xe4, 0xab, 0xde, 0xea, 0x2a, 0xcf, 0x58, + 0x22, 0xc4, 0x68, 0xea, 0x9b, 0x7b, 0x90, 0xc5, 0xdc, 0x1c, 0x37, 0xd1, + 0x8a, 0x4f, 0xe7, 0x24, 0x23, 0x39, 0xb9, 0x62, 0xb8, 0x41, 0x13, 0x7b, + 0xe2, 0x1e, 0x0d, 0x4e, 0x38, 0x11, 0xa3, 0xb9, 0x10, 0xbb, 0x10, 0x6f, + 0x40, 0x9f, 0x50, 0x05, 0xc7, 0x0e, 0xb9, 0x9e, 0xab, 0x7c, 0x3c, 0x78, + 0xce, 0x54, 0xbf, 0xbf, 0x40, 0x36, 0x76, 0xbc, 0x4b, 0x64, 0x32, 0xca, + 0x0e, 0x2d, 0x91, 0x87, 0xd5, 0x00, 0x19, 0xbf, 0x12, 0xd0, 0x35, 0x7c, + 0xa1, 0xe5, 0xcf, 0x7a, 0x2d, 0x08, 0x62, 0xed, 0x34, 0x61, 0xe3, 0xda, + 0x2c, 0xcc, 0x1b, 0xf8, 0x12, 0xfe, 0xfd, 0x19, 0xa2, 0xc3, 0x70, 0xfd, + 0x4f, 0x5b, 0x5d, 0x20, 0xd2, 0xe1, 0xc5, 0xac, 0xe7, 0xa1, 0x84, 0x00, + 0xbd, 0x46, 0x81, 0xfd, 0x54, 0x69, 0xed, 0x1a, 0x7a, 0x32, 0xbb, 0x75, + 0x22, 0x76, 0x6d, 0x34, 0x24, 0xcc, 0xe6, 0xbe, 0x78, 0x5a, 0x75, 0x6c, + 0xbc, 0x62, 0xb8, 0x14, 0xf7, 0x13, 0x73, 0xc2, 0xdc, 0xb6, 0xfa, 0xfb, + 0x97, 0xfe, 0x27, 0x7b, 0x33, 0xb8, 0xeb, 0x20, 0xd2, 0x0f, 0x4f, 0xed, + 0xd1, 0xd0, 0x63, 0xf7, 0xc5, 0x8e, 0xec, 0xcc, 0xd2, 0x31, 0x38, 0x35, + 0x65, 0x33, 0x5c, 0x63, 0x85, 0xf7, 0x3d, 0xc3, 0x62, 0x26, 0x52, 0x0a, + 0x67, 0xda, 0x87, 0x1f, 0x9e, 0x47, 0xec, 0x6b, 0xf5, 0x74, 0x1a, 0xc5, + 0xa7, 0xa0, 0x0f, 0xdd, 0xc5, 0x42, 0xf4, 0xda, 0x41, 0x1a, 0x48, 0xa9, + 0xbe, 0x4f, 0xb6, 0x28, 0x17, 0xe9, 0xf5, 0xd7, 0x00, 0xb3, 0xfe, 0x05, + 0x4e, 0xa7, 0xdf, 0x65, 0x7a, 0xb8, 0x4f, 0xe0, 0xfe, 0x58, 0x9e, 0xba, + 0x45, 0x11, 0xba, 0xc2, 0xdb, 0x97, 0x97, 0xa4, 0xbc, 0x18, 0x21, 0x1b, + 0xad, 0x82, 0xef, 0xb1, 0x5f, 0x2f, 0x25, 0x9d, 0xca, 0x52, 0xa5, 0x6d, + 0x8c, 0xab, 0x07, 0x2b, 0x7b, 0x6a, 0x77, 0x9d, 0xdf, 0xfb, 0xae, 0x6e, + 0x49, 0x18, 0x25, 0x4a, 0xf2, 0x7d, 0xa0, 0x32, 0xc8, 0x53, 0x10, 0xc3, + 0xf2, 0xef, 0xf3, 0xe7, 0x79, 0xd7, 0x6a, 0x0e, 0x61, 0xff, 0x89, 0xc9, + 0x42, 0xe8, 0x6e, 0x4f, 0x78, 0xe1, 0x5f, 0xcd, 0x7a, 0xf6, 0x27, 0x72, + 0x67, 0xea, 0x0b, 0xa6, 0xcc, 0x34, 0xb7, 0x8f, 0x92, 0x3c, 0x95, 0xb9, + 0x0a, 0x5d, 0x49, 0x2e, 0xb7, 0x7d, 0x31, 0x9c, 0x79, 0x61, 0x95, 0x9c, + 0x60, 0x56, 0x8d, 0x35, 0x00, 0xc5, 0x8b, 0xe6, 0x02, 0x0f, 0x26, 0x39, + 0x7b, 0x93, 0x94, 0xb1, 0xcd, 0xde, 0xed, 0xfa, 0x2a, 0x4b, 0x63, 0xa8, + 0x1b, 0x31, 0x43, 0x5e, 0x69, 0x7c, 0xd6, 0x15, 0x35, 0x9c, 0xa2, 0xd7, + 0xdf, 0x0e, 0x1a, 0x20, 0x50, 0xf5, 0x02, 0x21, 0x30, 0x35, 0x3c, 0x60, + 0x71, 0xad, 0xd0, 0xe3, 0xed, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0c, 0x10, 0x17, 0x1d, 0x22, 0x2d, +}; + +#elif MLD_CONFIG_PARAMETER_SET == 87 +const uint8_t expected_pk[] = { + 0xb4, 0x32, 0xa7, 0x61, 0x06, 0x53, 0x60, 0x1e, 0x6c, 0xa4, 0x96, 0xdc, + 0x35, 0x4c, 0x99, 0x93, 0x20, 0xed, 0x4d, 0x1b, 0x20, 0x89, 0x75, 0x0c, + 0x8f, 0x64, 0x0f, 0x6a, 0x13, 0x46, 0x4f, 0xda, 0x78, 0x66, 0x0d, 0xa5, + 0x27, 0x7b, 0xbc, 0x9c, 0xda, 0xbb, 0x43, 0xcd, 0x38, 0x43, 0xa1, 0xbd, + 0x53, 0x46, 0xd5, 0x0f, 0x59, 0x1e, 0xcd, 0x77, 0x83, 0x7e, 0xb3, 0xbc, + 0x50, 0xfa, 0xeb, 0x8e, 0xb2, 0x02, 0x80, 0x7b, 0x1e, 0x52, 0xe7, 0xe2, + 0x90, 0xac, 0xdb, 0xaa, 0xe6, 0x10, 0x27, 0xc9, 0x1c, 0xc7, 0x62, 0xb2, + 0x00, 0xd2, 0x82, 0x28, 0x8b, 0xd5, 0x9c, 0x52, 0x41, 0x75, 0x3c, 0x1f, + 0xcd, 0x01, 0xc4, 0x6a, 0xd9, 0xd0, 0xfe, 0x19, 0xeb, 0xcb, 0x73, 0xbb, + 0x9b, 0xb4, 0xf6, 0xc6, 0x1c, 0x79, 0x0a, 0xfa, 0x95, 0xaf, 0xb9, 0xeb, + 0x1c, 0x0c, 0xa5, 0x16, 0xdd, 0x79, 0x78, 0xf6, 0x20, 0x37, 0xce, 0xd4, + 0x49, 0xa6, 0x11, 0x6d, 0xa1, 0xe6, 0x14, 0xe8, 0xc3, 0xb5, 0xf4, 0x96, + 0xc3, 0xcd, 0x2d, 0x2d, 0x18, 0x70, 0xe6, 0x08, 0xf4, 0xfa, 0xfd, 0x99, + 0x3e, 0xed, 0x3f, 0xf1, 0x20, 0x56, 0xa1, 0x3e, 0xc6, 0xf3, 0x57, 0x64, + 0xf8, 0x67, 0xcb, 0x15, 0xe6, 0xeb, 0xfd, 0x65, 0x4a, 0x66, 0x5d, 0x4e, + 0x2d, 0x2c, 0x6a, 0x80, 0x4f, 0x1c, 0xa0, 0xcc, 0x10, 0x1b, 0xb3, 0x35, + 0xe4, 0xfd, 0x1b, 0xf3, 0x0b, 0xc7, 0xf3, 0x3c, 0x54, 0x8b, 0x66, 0x98, + 0x5e, 0x55, 0xc8, 0xac, 0xca, 0xc3, 0x47, 0x5f, 0x4f, 0xf5, 0x57, 0x42, + 0x23, 0xec, 0x4e, 0x79, 0xcc, 0x78, 0x8c, 0x60, 0xd1, 0x3e, 0x22, 0xf2, + 0x41, 0x53, 0xcc, 0x31, 0xa3, 0xc4, 0xfc, 0x8e, 0xd7, 0xcd, 0x63, 0x9c, + 0x5e, 0xa8, 0x5a, 0x14, 0x29, 0x17, 0xf9, 0x63, 0x28, 0x4e, 0xf1, 0xb9, + 0x32, 0x2f, 0x0d, 0x28, 0x8e, 0x32, 0x7f, 0x72, 0x72, 0x79, 0xe3, 0xcc, + 0xbc, 0x51, 0xf1, 0x6d, 0x12, 0x60, 0x24, 0x70, 0x6d, 0xfb, 0x91, 0x8a, + 0xd1, 0xc9, 0xe5, 0x7a, 0x0d, 0x43, 0x5a, 0xc7, 0xd8, 0xea, 0x1e, 0x73, + 0xbd, 0x3a, 0xfb, 0x1e, 0x27, 0x70, 0x1d, 0x97, 0x9b, 0x44, 0x76, 0x98, + 0x5e, 0x51, 0x84, 0x86, 0xfb, 0x11, 0x8c, 0xfd, 0xf3, 0xe2, 0xc7, 0xf0, + 0xc9, 0x5f, 0x99, 0x62, 0x15, 0x8a, 0x83, 0xfd, 0xdc, 0xe9, 0x3a, 0xda, + 0xfc, 0x8f, 0xe7, 0x65, 0x81, 0x40, 0x80, 0xa9, 0xd2, 0xd7, 0xdf, 0xe4, + 0x33, 0xfe, 0x5e, 0x8c, 0x26, 0x75, 0x64, 0x27, 0x31, 0xf5, 0x6f, 0x7c, + 0x8a, 0x9b, 0x49, 0x74, 0x43, 0x82, 0xfc, 0xe0, 0xbb, 0x19, 0x1d, 0xcd, + 0x76, 0x19, 0xa3, 0xe1, 0xbe, 0x53, 0x02, 0x96, 0x88, 0xbd, 0xe8, 0x75, + 0x7b, 0x24, 0x34, 0x59, 0x9b, 0xf0, 0x31, 0x09, 0x73, 0x24, 0xf4, 0x32, + 0xe1, 0xf9, 0x57, 0x27, 0x1f, 0x81, 0xf0, 0x62, 0xd9, 0x79, 0x18, 0x21, + 0xfa, 0x15, 0x47, 0xe0, 0xca, 0xbe, 0x96, 0x81, 0x3f, 0x92, 0x38, 0x65, + 0x00, 0x47, 0x0c, 0xfa, 0xcf, 0xf0, 0xec, 0x36, 0x2b, 0xba, 0x1b, 0x8b, + 0xb5, 0x52, 0xc1, 0x5f, 0xcf, 0x5d, 0x4c, 0xf0, 0x80, 0x5e, 0xd9, 0x11, + 0x92, 0x07, 0xba, 0x26, 0x14, 0x33, 0xac, 0x66, 0x7f, 0x16, 0x97, 0xe5, + 0xd4, 0x3d, 0x6e, 0xa7, 0x52, 0x58, 0xec, 0xe4, 0xe4, 0x83, 0xa3, 0x26, + 0xa3, 0xa2, 0x8e, 0xa3, 0x4c, 0x74, 0x96, 0xb7, 0x6a, 0x84, 0x15, 0x31, + 0xc1, 0x3a, 0x97, 0xf8, 0xd0, 0xb6, 0xf4, 0x62, 0x02, 0x68, 0x05, 0xf3, + 0x81, 0x59, 0x2d, 0x9d, 0x28, 0x29, 0x13, 0xa0, 0x81, 0x53, 0x08, 0xdd, + 0xa0, 0x8d, 0x7b, 0x63, 0xc9, 0x8e, 0xff, 0xf7, 0x36, 0xf2, 0xf3, 0x6b, + 0x91, 0x3c, 0xae, 0xbf, 0x42, 0xc2, 0xc3, 0xec, 0x0c, 0x93, 0x06, 0x74, + 0x4f, 0x5f, 0x48, 0x26, 0xaf, 0x24, 0xda, 0xf7, 0x84, 0xc3, 0x3a, 0xb3, + 0x26, 0xf7, 0xed, 0x69, 0xd2, 0xcb, 0x46, 0x03, 0x8b, 0xd3, 0x3d, 0x2c, + 0xe8, 0xa0, 0xbd, 0x87, 0x62, 0xba, 0xb8, 0xb7, 0x92, 0xc4, 0xe4, 0x7a, + 0x13, 0x32, 0x73, 0x09, 0x93, 0xb9, 0xa0, 0x58, 0xd4, 0xa4, 0x7b, 0x0a, + 0x57, 0x5a, 0xcb, 0x06, 0xd3, 0xc0, 0x1f, 0x8c, 0xdd, 0x5c, 0xd5, 0x9f, + 0xe2, 0xbd, 0x63, 0x1d, 0x11, 0x6a, 0x6d, 0xa4, 0x31, 0xb6, 0x6b, 0x78, + 0x13, 0x97, 0xc8, 0x89, 0x3e, 0x37, 0x75, 0x02, 0x8b, 0xff, 0x8e, 0x82, + 0xe1, 0x51, 0x36, 0xb0, 0xcd, 0xc8, 0x95, 0x2e, 0x5c, 0x1d, 0xb0, 0x7b, + 0xb8, 0x8c, 0x9f, 0x6d, 0x3e, 0x3b, 0xa9, 0x35, 0x94, 0x59, 0xe7, 0x50, + 0xc5, 0x16, 0x2e, 0xea, 0x91, 0xed, 0x73, 0x76, 0xa7, 0xaf, 0x3a, 0x26, + 0xd6, 0xc4, 0x26, 0x5d, 0xed, 0x42, 0x84, 0xf5, 0x97, 0x5f, 0xf9, 0xa1, + 0xd8, 0xc8, 0x5a, 0xa9, 0xc6, 0x76, 0x82, 0x8e, 0x2c, 0x39, 0x4a, 0x9f, + 0x73, 0x2a, 0xd4, 0x00, 0x04, 0xd2, 0x50, 0xb5, 0x88, 0x74, 0x29, 0xd3, + 0xe8, 0x92, 0x3a, 0x6b, 0x04, 0x27, 0xe0, 0xa7, 0xdf, 0xc9, 0x41, 0x13, + 0x31, 0x21, 0xcc, 0xc3, 0xb7, 0x23, 0x20, 0xde, 0xc5, 0xff, 0xf6, 0x78, + 0x9c, 0x32, 0x7c, 0x09, 0x5a, 0xd3, 0x99, 0xbf, 0x6c, 0x2d, 0xd0, 0x96, + 0xa1, 0xfa, 0x20, 0x53, 0xff, 0xb9, 0x65, 0x50, 0xa7, 0x99, 0x2b, 0x9f, + 0xb2, 0x03, 0xcb, 0xca, 0x3b, 0x00, 0x04, 0x86, 0xe1, 0x11, 0x46, 0x90, + 0x39, 0x3c, 0xae, 0xd7, 0x81, 0x4a, 0x60, 0xbd, 0x94, 0x5b, 0x0b, 0xe4, + 0xd3, 0x34, 0xdc, 0x91, 0xfd, 0x84, 0x9a, 0xea, 0x6b, 0xb8, 0x00, 0x8a, + 0x74, 0x88, 0xc0, 0x37, 0x3c, 0x1d, 0xc2, 0xbe, 0xc0, 0x90, 0x4a, 0xaf, + 0x50, 0x32, 0x42, 0x54, 0xdf, 0x61, 0x04, 0x64, 0x90, 0xba, 0xa7, 0xce, + 0x47, 0x85, 0x1d, 0x12, 0xd6, 0xab, 0xd1, 0x83, 0x80, 0x3a, 0x5c, 0x4a, + 0x48, 0x34, 0x52, 0xf1, 0xd8, 0xfe, 0x0d, 0x55, 0xa6, 0xe8, 0x5a, 0xf7, + 0xd2, 0x04, 0x66, 0x47, 0xff, 0x69, 0xcd, 0x6b, 0xc5, 0x99, 0x80, 0x31, + 0x21, 0xc8, 0xbf, 0xdf, 0x0c, 0x0e, 0x7a, 0xd9, 0x76, 0x70, 0x0d, 0xa4, + 0x2e, 0x91, 0x2e, 0x4c, 0x86, 0x75, 0xb6, 0x10, 0x3a, 0xf0, 0x0c, 0x11, + 0x6e, 0x44, 0xdf, 0x1b, 0x6c, 0xc2, 0x88, 0xbd, 0x9e, 0x95, 0x92, 0x85, + 0x9b, 0x5a, 0x52, 0x1f, 0x5b, 0x9c, 0xcb, 0xb0, 0x8b, 0xa6, 0x15, 0x4d, + 0xa7, 0xe5, 0xe3, 0x80, 0xda, 0x01, 0x1c, 0x93, 0xc9, 0x5b, 0x4f, 0x42, + 0x2c, 0x55, 0xfb, 0x2a, 0x93, 0xa5, 0x96, 0xb7, 0x58, 0x1e, 0xe3, 0x48, + 0x12, 0x5d, 0xb2, 0xb2, 0x99, 0xfd, 0xfb, 0x36, 0xe3, 0xbd, 0xe6, 0xe8, + 0xd1, 0x5d, 0xbd, 0x80, 0x10, 0x4b, 0xd3, 0x3a, 0xdd, 0xfc, 0xeb, 0xc8, + 0x03, 0x6d, 0x8f, 0xe5, 0xd9, 0xc4, 0x89, 0x58, 0x63, 0xb7, 0x4e, 0xa2, + 0x3e, 0xf9, 0xcb, 0x83, 0xfa, 0x4e, 0xea, 0xfd, 0x5b, 0x18, 0x7d, 0xdd, + 0x36, 0x65, 0xab, 0xa8, 0x58, 0x99, 0x8a, 0x51, 0xff, 0x7a, 0xa0, 0xdb, + 0xc9, 0x70, 0x7a, 0x58, 0x65, 0xf0, 0x48, 0x92, 0x2c, 0x2e, 0xa4, 0xae, + 0xb8, 0x5d, 0x51, 0x52, 0x89, 0x9b, 0x6c, 0x05, 0x99, 0x16, 0xbe, 0xbc, + 0xd7, 0x82, 0x70, 0xad, 0xd6, 0x41, 0x25, 0x0b, 0xfb, 0xbf, 0x1a, 0x4c, + 0x83, 0xf9, 0x47, 0xf7, 0xf4, 0xf5, 0x10, 0x54, 0x2c, 0x9c, 0xbf, 0xb0, + 0xab, 0x24, 0x51, 0xec, 0xd1, 0x38, 0x59, 0x95, 0xa8, 0x8d, 0x3d, 0xc6, + 0x5b, 0x41, 0xc6, 0x26, 0xb1, 0xe4, 0x22, 0x87, 0xf7, 0x73, 0xa9, 0x80, + 0x2b, 0xa9, 0xf0, 0x3e, 0xd3, 0xae, 0x1c, 0xe7, 0x6e, 0x1e, 0x24, 0xdf, + 0xba, 0x4c, 0xe2, 0xc6, 0x81, 0xc1, 0x50, 0xde, 0xa9, 0xfc, 0xa0, 0x9a, + 0xc7, 0x6c, 0x64, 0xfd, 0xa6, 0x3a, 0x83, 0x01, 0x4a, 0xae, 0x33, 0x99, + 0x91, 0xdc, 0x63, 0xee, 0x23, 0xab, 0x6f, 0x95, 0xd4, 0xb4, 0xd5, 0x03, + 0x5a, 0xc1, 0x2a, 0x3b, 0x64, 0xb8, 0x86, 0xde, 0x5e, 0xa4, 0xa1, 0xa1, + 0x54, 0xa4, 0x36, 0x7e, 0xb0, 0x2d, 0x43, 0xe7, 0xa4, 0x27, 0xbe, 0x59, + 0x80, 0xcc, 0x80, 0x4c, 0xbd, 0x9b, 0xbf, 0x67, 0x5a, 0x91, 0x34, 0xd1, + 0x99, 0xd6, 0xa7, 0x21, 0xf8, 0x95, 0x4f, 0x76, 0x46, 0x03, 0x2d, 0xc0, + 0x5a, 0x9b, 0x45, 0x2f, 0x38, 0x2d, 0x5b, 0xac, 0xd7, 0x46, 0xd6, 0x0a, + 0xfd, 0xae, 0x40, 0x79, 0xb4, 0x8f, 0x72, 0xb6, 0xf8, 0x20, 0x47, 0x1f, + 0x39, 0x93, 0x6e, 0x85, 0x1c, 0xd9, 0x3f, 0x4e, 0x72, 0xeb, 0x71, 0xb4, + 0xa6, 0x49, 0x8d, 0xe0, 0x38, 0x93, 0x29, 0xfe, 0x90, 0x82, 0xfb, 0x71, + 0xf3, 0x57, 0x04, 0x09, 0x8f, 0x53, 0x26, 0xb7, 0x23, 0xde, 0x5c, 0xc3, + 0xc6, 0xcd, 0xd1, 0x7f, 0xfe, 0xf0, 0x74, 0x45, 0x7e, 0x82, 0x5d, 0x0b, + 0x1d, 0xc6, 0xaa, 0xe4, 0xcd, 0x99, 0x24, 0x22, 0x17, 0x8f, 0xd6, 0x28, + 0x1c, 0xa6, 0x34, 0xdb, 0x6f, 0xf3, 0x81, 0x55, 0x80, 0x30, 0x87, 0x9f, + 0xdc, 0xdd, 0x0b, 0x2f, 0x84, 0xe1, 0x66, 0xe3, 0xbc, 0x66, 0xcd, 0xc1, + 0xe1, 0x3a, 0x35, 0x1a, 0x10, 0xd8, 0xe3, 0x33, 0xa2, 0x7a, 0x1d, 0x14, + 0x7f, 0x61, 0x38, 0x22, 0x9d, 0xad, 0xe4, 0x93, 0x9c, 0xd8, 0x57, 0xd4, + 0xa5, 0x77, 0x8e, 0x75, 0x85, 0x79, 0x90, 0xf7, 0x9e, 0xeb, 0xce, 0x90, + 0x91, 0x0f, 0x43, 0x5f, 0x44, 0x06, 0xd9, 0x55, 0xf0, 0xdd, 0xff, 0x51, + 0x90, 0x9c, 0x7f, 0xba, 0x86, 0xa9, 0x62, 0x21, 0x0d, 0x25, 0xef, 0xa9, + 0xdf, 0x49, 0x48, 0xf1, 0xb2, 0xcc, 0x1e, 0xce, 0x73, 0xca, 0x71, 0xc0, + 0xd9, 0x88, 0x19, 0x16, 0xf9, 0x31, 0xd4, 0xb5, 0xaa, 0x6a, 0xfc, 0x8c, + 0x11, 0xbf, 0xfb, 0xef, 0x9e, 0x18, 0x6b, 0x42, 0xeb, 0x79, 0xcd, 0x3a, + 0x08, 0x76, 0x7f, 0xc3, 0xc7, 0xb0, 0x42, 0x8c, 0x75, 0x4b, 0x77, 0x01, + 0x1e, 0x1e, 0x6d, 0x5b, 0x03, 0x98, 0x9b, 0xf6, 0xd4, 0x7c, 0x9c, 0xb9, + 0xb5, 0xba, 0x6d, 0xf7, 0xae, 0x95, 0xa6, 0x6d, 0x71, 0x86, 0x53, 0x47, + 0xb7, 0x51, 0x27, 0xaa, 0xbb, 0x7a, 0xe7, 0x4c, 0xd5, 0x2f, 0x21, 0x33, + 0x2d, 0xf7, 0x43, 0x12, 0xf0, 0x27, 0x4b, 0xd7, 0xd1, 0x3d, 0x2c, 0x50, + 0x96, 0x42, 0x63, 0x52, 0xf9, 0x71, 0xa3, 0x44, 0xea, 0x87, 0x86, 0x70, + 0xef, 0xe4, 0xee, 0xdf, 0x65, 0xa9, 0xcf, 0x9d, 0x49, 0xc0, 0xd9, 0x41, + 0x83, 0x58, 0x64, 0x86, 0xb1, 0x06, 0x46, 0xc4, 0x99, 0x0a, 0x13, 0xd0, + 0xa3, 0x4b, 0xd0, 0xe0, 0xd1, 0xfe, 0xf8, 0xd0, 0x49, 0xdb, 0x0c, 0x7b, + 0x81, 0x1f, 0x7a, 0x50, 0x69, 0xcb, 0x19, 0xdc, 0xe6, 0xff, 0xa7, 0x6d, + 0x9b, 0x48, 0x50, 0x6c, 0xc3, 0x99, 0xa0, 0xa0, 0x6d, 0x03, 0xea, 0x9d, + 0x60, 0x1d, 0x70, 0x29, 0x93, 0xac, 0x92, 0x00, 0x5c, 0xee, 0x2b, 0x6e, + 0x9c, 0xf4, 0x27, 0x00, 0xd2, 0xd2, 0x90, 0x44, 0x82, 0xa2, 0xb1, 0xa4, + 0xa6, 0x69, 0x5d, 0x04, 0x0f, 0x85, 0xef, 0xa6, 0xfa, 0xc5, 0x37, 0x7f, + 0x29, 0x3a, 0xec, 0x26, 0x04, 0x71, 0xc2, 0x53, 0xc8, 0x0d, 0x8e, 0xc1, + 0x97, 0xb7, 0x99, 0x0e, 0xa0, 0xca, 0x35, 0x56, 0xac, 0xf6, 0x71, 0xa4, + 0xa6, 0xba, 0x49, 0xd6, 0x38, 0x89, 0x3d, 0xcb, 0x70, 0x68, 0x2a, 0xb8, + 0xb0, 0x2f, 0x83, 0xc9, 0x96, 0x22, 0x43, 0x16, 0xd2, 0x19, 0xee, 0x4a, + 0xe8, 0xdd, 0xe8, 0x77, 0x7c, 0x21, 0x92, 0x84, 0xfc, 0x3a, 0xa6, 0x5f, + 0xec, 0x89, 0xfe, 0x70, 0x9c, 0x5a, 0xbb, 0x99, 0xa8, 0xb1, 0xdc, 0xd5, + 0x79, 0x73, 0x86, 0xe1, 0x17, 0x5c, 0xc8, 0xbe, 0xda, 0x88, 0x47, 0xb1, + 0xcb, 0x78, 0xa5, 0xfd, 0x90, 0xce, 0x19, 0x47, 0x49, 0x6e, 0x87, 0x92, + 0x00, 0x3c, 0xb0, 0x9e, 0x79, 0x92, 0x95, 0x09, 0x48, 0xf8, 0x11, 0x34, + 0x11, 0x5d, 0x7e, 0xdb, 0x5e, 0xda, 0xc0, 0xcc, 0xcb, 0xe3, 0x21, 0xec, + 0x47, 0x3d, 0xf2, 0xbe, 0xb3, 0x39, 0xb3, 0xd0, 0x27, 0x18, 0x00, 0x31, + 0xfa, 0xaf, 0x06, 0x8e, 0xe4, 0x28, 0x9c, 0x45, 0xad, 0x62, 0x77, 0xc9, + 0xc1, 0x4e, 0xe0, 0xa2, 0xe3, 0xb5, 0x58, 0x82, 0x7d, 0xeb, 0x0c, 0xfa, + 0xd0, 0x50, 0xea, 0x1f, 0xce, 0xa1, 0x3e, 0x93, 0xd8, 0x69, 0x9f, 0x5c, + 0x69, 0x36, 0x10, 0x0e, 0x3d, 0x88, 0x63, 0x06, 0xf4, 0xc5, 0x33, 0x46, + 0x10, 0x65, 0x63, 0xb3, 0x8d, 0x13, 0x3d, 0x47, 0x22, 0x51, 0xae, 0xf1, + 0x39, 0x68, 0x35, 0xe9, 0x3b, 0x73, 0x6d, 0xa4, 0xfb, 0x13, 0x56, 0xf0, + 0xcf, 0xc3, 0x47, 0x73, 0x9e, 0x98, 0x51, 0x1b, 0x94, 0x26, 0xed, 0x2d, + 0xdb, 0x66, 0xd8, 0x5a, 0x39, 0x2f, 0xa8, 0x27, 0xa5, 0xcd, 0xbd, 0x34, + 0x11, 0x7a, 0xf0, 0xf0, 0xaf, 0xf6, 0x70, 0x86, 0x50, 0x5b, 0x71, 0x69, + 0x1d, 0x82, 0x71, 0x65, 0xc5, 0xc4, 0x9a, 0x4e, 0x9b, 0xea, 0xa1, 0x82, + 0x04, 0x79, 0xb6, 0xeb, 0xde, 0xc5, 0x9e, 0x50, 0xb7, 0xf1, 0x04, 0x40, + 0x08, 0xad, 0x75, 0x6e, 0x18, 0x91, 0x1b, 0xe5, 0x61, 0xcb, 0x77, 0x6c, + 0xa4, 0xaa, 0xdc, 0x0c, 0x4c, 0x91, 0x96, 0xf2, 0x10, 0x6d, 0x2b, 0x0e, + 0x4e, 0x93, 0x14, 0xd2, 0x0b, 0x1d, 0xa3, 0x80, 0x81, 0x26, 0xde, 0x2e, + 0x48, 0x65, 0x86, 0xd3, 0xa7, 0xe2, 0xea, 0x43, 0x6a, 0x3d, 0x46, 0x14, + 0x95, 0x36, 0x0b, 0x21, 0x1e, 0x57, 0x6e, 0x71, 0xbf, 0x9a, 0x70, 0xde, + 0xe8, 0xf8, 0xc4, 0xd4, 0x0c, 0x50, 0x39, 0x9f, 0x97, 0x0b, 0x2d, 0x25, + 0x69, 0x3e, 0x43, 0xfb, 0x56, 0xeb, 0x07, 0xee, 0x9a, 0x76, 0x73, 0xc9, + 0xe0, 0x10, 0x00, 0x06, 0x5e, 0x12, 0x48, 0xdc, 0x90, 0x26, 0x91, 0x54, + 0xe8, 0x12, 0x58, 0x0c, 0x86, 0x1c, 0x7e, 0x33, 0xbf, 0xcc, 0x62, 0x2b, + 0x2b, 0x81, 0x8a, 0x2a, 0xfd, 0xc4, 0x55, 0x91, 0x8a, 0xe9, 0x62, 0x5b, + 0x86, 0xea, 0x63, 0x39, 0x82, 0xb5, 0xf9, 0x8d, 0xda, 0x6f, 0xd9, 0x48, + 0xf5, 0x43, 0x51, 0x2c, 0xe1, 0xde, 0x3f, 0x66, 0x2c, 0xab, 0x02, 0x9d, + 0x29, 0x5c, 0xc8, 0xf8, 0xd8, 0x39, 0x81, 0x8a, 0x82, 0x54, 0x52, 0xb6, + 0x6d, 0x74, 0xbd, 0x15, 0x60, 0x81, 0x41, 0x19, 0xbf, 0xc6, 0xbb, 0x78, + 0x2a, 0x15, 0x76, 0xf2, 0xd2, 0x90, 0xc7, 0x8a, 0x32, 0x18, 0x66, 0x51, + 0xef, 0xb2, 0x28, 0xd8, 0x8f, 0x9d, 0xa7, 0x6b, 0x80, 0x15, 0xea, 0x4e, + 0x60, 0x23, 0x1a, 0x53, 0x46, 0x72, 0xce, 0x4c, 0x61, 0x6f, 0xcc, 0x2e, + 0xdb, 0x21, 0x0d, 0x50, 0x94, 0x29, 0x2a, 0x3d, 0xf3, 0x92, 0x07, 0xdf, + 0x53, 0x81, 0xfc, 0x01, 0xb2, 0x14, 0xe2, 0x8a, 0xc3, 0x6a, 0x46, 0xe4, + 0x23, 0xd9, 0xf9, 0xae, 0x7a, 0xd9, 0x4c, 0xc5, 0x30, 0x8b, 0xcb, 0x3b, + 0xd1, 0x20, 0xed, 0x48, 0x1b, 0x0a, 0x10, 0xe4, 0xdf, 0x02, 0xb7, 0xc8, + 0x87, 0x7c, 0x72, 0x7b, 0x0e, 0x41, 0x77, 0x67, 0x6e, 0xa6, 0x4f, 0x7e, + 0xaf, 0xeb, 0x0c, 0x12, 0xb9, 0x4c, 0x10, 0x24, 0xc7, 0x96, 0x8d, 0x99, + 0xf6, 0xb2, 0x07, 0x1a, 0x75, 0x31, 0x69, 0xaf, 0xdd, 0xe9, 0x7d, 0x5f, + 0x54, 0x78, 0x44, 0x79, 0xa9, 0x7c, 0x4c, 0x86, 0xda, 0x2f, 0x8c, 0x8f, + 0xb4, 0x36, 0x13, 0xeb, 0xd6, 0xff, 0x53, 0x96, 0xd6, 0x1d, 0xda, 0x69, + 0x1d, 0x8d, 0x3a, 0x20, 0x41, 0xee, 0x8b, 0xba, 0x85, 0x30, 0x8f, 0x57, + 0x85, 0xd7, 0x38, 0x4f, 0xf2, 0x96, 0xa5, 0x72, 0xd4, 0x81, 0x6c, 0x79, + 0xdb, 0x86, 0x5d, 0xeb, 0x2c, 0xb7, 0x4e, 0x0a, 0xfd, 0x9c, 0xef, 0x23, + 0xda, 0x9f, 0xd5, 0x43, 0x51, 0xbc, 0x8c, 0x6c, 0x31, 0x06, 0xf9, 0x1d, + 0x6e, 0x56, 0x40, 0x13, 0x3a, 0x9a, 0x44, 0xa8, 0x55, 0x4a, 0x40, 0xe4, + 0x50, 0x4a, 0xab, 0x29, 0x3e, 0xa5, 0xc4, 0x1b, 0x7f, 0xd0, 0x7b, 0x4d, + 0x18, 0xd5, 0x2f, 0x5f, 0x8c, 0x82, 0x2a, 0x7c, 0x03, 0x3b, 0x22, 0x69, + 0xa7, 0xf1, 0x6e, 0xb2, 0xa0, 0x3f, 0xcc, 0x94, 0x4f, 0x70, 0x98, 0x41, + 0xa3, 0x35, 0x15, 0x6d, 0x44, 0xee, 0xa4, 0x6a, 0x7c, 0x91, 0x64, 0x66, + 0x89, 0x9f, 0x77, 0xdb, 0x1a, 0x22, 0x6d, 0xec, 0xb4, 0xfc, 0x69, 0x04, + 0x09, 0x0a, 0x79, 0x55, 0xd4, 0x87, 0xe9, 0x6a, 0xbc, 0x68, 0xd2, 0x07, + 0x78, 0x9d, 0x58, 0x5c, 0xdd, 0xd6, 0x19, 0x82, 0xa2, 0xf1, 0xbd, 0xf6, + 0x16, 0x2b, 0x49, 0x18, 0xe7, 0xc8, 0x5d, 0xe6, 0xe1, 0x08, 0xe2, 0x74, + 0x45, 0x00, 0xc0, 0xdb, 0x0a, 0x08, 0x15, 0x39, 0xd9, 0xc1, 0x3e, 0x98, + 0x09, 0x42, 0x19, 0xb4, 0x6f, 0xbe, 0xe4, 0x4e, 0x72, 0x69, 0xc4, 0xb5, + 0xd0, 0xda, 0xd6, 0x76, 0x5e, 0x55, 0xf1, 0x33, 0x58, 0x5e, 0x87, 0xfd, + 0x86, 0xf0, 0x8b, 0xdf, 0xea, 0xf7, 0x89, 0x0e, 0x3b, 0xeb, 0x56, 0x66, + 0x46, 0x26, 0x7a, 0x07, 0xc5, 0xc8, 0x9d, 0xba, 0x99, 0x4e, 0x89, 0xf7, + 0xf9, 0xaa, 0x9d, 0x42, 0xea, 0xf3, 0x9c, 0x5a, 0x86, 0xc0, 0xa8, 0xa3, + 0x61, 0x42, 0x7f, 0x3c, 0xe6, 0x15, 0x49, 0x75, 0xd3, 0xb1, 0xbd, 0x07, + 0xa0, 0x27, 0xd6, 0x66, 0x85, 0x81, 0xe3, 0x3e, 0x9f, 0x58, 0x3c, 0x00, + 0x11, 0x65, 0x10, 0x1c, 0x4a, 0xf1, 0x63, 0x4c, 0xca, 0x41, 0x15, 0x9f, + 0xca, 0x52, 0x92, 0x9c, 0xfa, 0x87, 0x09, 0xe6, 0x8e, 0x27, 0x66, 0x38, + 0x68, 0x6d, 0x89, 0xa5, 0xd9, 0x20, 0x9b, 0x0a, 0x02, 0x83, 0xe1, 0xe9, + 0x7d, 0x9b, 0x30, 0xdd, 0xac, 0x4e, 0xd0, 0x16, 0x2a, 0x22, 0x3c, 0x2b, + 0xd3, 0xab, 0xd1, 0x9c, 0xad, 0x86, 0x23, 0xc2, 0x62, 0x52, 0x5e, 0x8d, + 0xd7, 0xa0, 0x1b, 0x77, 0x6e, 0x15, 0x94, 0xbc, 0x92, 0x5e, 0xf1, 0x8b, + 0x75, 0x9f, 0xf3, 0xdf, 0x1f, 0xd0, 0x26, 0x9e, 0x4d, 0xe1, 0x20, 0x87, + 0x75, 0xa9, 0xc2, 0xc2, 0x45, 0x26, 0x35, 0x72, 0xb8, 0xe0, 0xbb, 0x29, + 0x5f, 0x8c, 0x7c, 0x52, 0x02, 0xef, 0x29, 0x4c, 0x2d, 0xe1, 0x3a, 0xf7, + 0x3e, 0xf8, 0x7d, 0xcd, 0x88, 0xf7, 0x25, 0x9f, 0x70, 0x56, 0xa2, 0xcb, + 0xb5, 0x0d, 0xd0, 0x01, 0xf1, 0x0b, 0x01, 0x77, 0x65, 0x53, 0x14, 0x71, + 0xf0, 0x53, 0xc5, 0x08, 0x70, 0xe2, 0xfb, 0xc7, 0x28, 0x11, 0xd5, 0x19, + 0xcf, 0xd5, 0x99, 0xe5, 0x21, 0xde, 0x61, 0x3a, 0x9d, 0x7a, 0xe8, 0x90, + 0x9d, 0xde, 0xc3, 0xf1, 0x2b, 0x86, 0x94, 0xce, 0xa1, 0x4c, 0xea, 0xe0, + 0xb8, 0x02, 0x05, 0xb4, 0xca, 0x70, 0xb3, 0xac, 0xff, 0x3c, 0xa4, 0xf4, + 0xb6, 0x5d, 0xa3, 0x9a, 0xab, 0x95, 0x00, 0xeb, 0xb8, 0x39, 0xf1, 0x36, + 0xe1, 0xc7, 0x4d, 0xc6, 0x39, 0x1a, 0xa2, 0x74, 0xe3, 0xf0, 0x3d, 0xee, + 0x0c, 0x19, 0x48, 0x7a, 0x61, 0x54, 0xee, 0xc9, 0x1e, 0x5a, 0xc6, 0x82, + 0x1f, 0x9d, 0xd8, 0xda, 0x5d, 0x3a, 0x76, 0xff, 0xee, 0xe8, 0x90, 0x5a, + 0xf7, 0x66, 0xca, 0xd7, 0x95, 0x40, 0xdf, 0x11, 0x36, 0x40, 0x61, 0x56, + 0xbc, 0x46, 0x10, 0x45, 0x22, 0x5e, 0x03, 0x0e, 0x01, 0xe8, 0xb4, 0x69, + 0x0b, 0x37, 0x89, 0x85, 0xfe, 0x55, 0x51, 0x3b, 0xd0, 0x0c, 0x81, 0xde, + 0x96, 0x4d, 0x82, 0xe9, 0x04, 0x4f, 0x81, 0xa9, 0xed, 0xd5, 0x4b, 0x95, +}; + +const uint8_t expected_sk[] = { + 0xb4, 0x32, 0xa7, 0x61, 0x06, 0x53, 0x60, 0x1e, 0x6c, 0xa4, 0x96, 0xdc, + 0x35, 0x4c, 0x99, 0x93, 0x20, 0xed, 0x4d, 0x1b, 0x20, 0x89, 0x75, 0x0c, + 0x8f, 0x64, 0x0f, 0x6a, 0x13, 0x46, 0x4f, 0xda, 0xb9, 0xa7, 0xf3, 0x6e, + 0xea, 0x34, 0x28, 0x91, 0x0c, 0x2c, 0xda, 0xe3, 0x8f, 0xe7, 0xe6, 0xcd, + 0xbe, 0xe6, 0x2a, 0xb1, 0xeb, 0x51, 0x3d, 0x69, 0x51, 0xab, 0xbd, 0x71, + 0x4b, 0xc5, 0x05, 0x80, 0x16, 0xd8, 0xfc, 0xd6, 0x9f, 0xa4, 0x2d, 0x6f, + 0xe5, 0xf6, 0x80, 0xe4, 0x1e, 0x50, 0x84, 0xe1, 0xda, 0x76, 0x21, 0xbe, + 0xa3, 0xef, 0xa6, 0x81, 0x4b, 0x77, 0x6a, 0x3f, 0x1d, 0x1a, 0x8f, 0x8a, + 0x22, 0x3f, 0xe2, 0x5a, 0xdc, 0xc6, 0x0a, 0x63, 0x76, 0x49, 0xc6, 0x12, + 0xe3, 0x4b, 0x36, 0xc4, 0xb0, 0xb0, 0x22, 0x90, 0xf2, 0x80, 0xf1, 0xd8, + 0xc1, 0x74, 0x6e, 0x9b, 0x34, 0x5e, 0xab, 0x0a, 0x04, 0x11, 0x6d, 0x19, + 0x95, 0x4c, 0x04, 0xc4, 0x89, 0x22, 0x97, 0x24, 0x21, 0x14, 0x41, 0x91, + 0x22, 0x2d, 0x1c, 0x09, 0x2d, 0x10, 0x34, 0x4a, 0x60, 0xc4, 0x24, 0x9b, + 0xb0, 0x45, 0xdb, 0x98, 0x84, 0x44, 0x84, 0x68, 0xc9, 0x06, 0x31, 0x22, + 0xa6, 0x61, 0x51, 0x10, 0x65, 0xdb, 0x06, 0x62, 0x14, 0xa1, 0x8c, 0xe0, + 0xc8, 0x20, 0x98, 0x96, 0x85, 0x60, 0x14, 0x0d, 0x22, 0x99, 0x84, 0x09, + 0x23, 0x22, 0xa1, 0x44, 0x2a, 0x14, 0xc7, 0x48, 0x02, 0x47, 0x8e, 0x5b, + 0x84, 0x6d, 0xc8, 0x36, 0x2a, 0x22, 0xa1, 0x8c, 0x24, 0x20, 0x20, 0x01, + 0x13, 0x46, 0x4a, 0x82, 0x11, 0x54, 0xb8, 0x49, 0x9a, 0x86, 0x84, 0x08, + 0xb7, 0x85, 0x12, 0x37, 0x00, 0x04, 0x38, 0x85, 0x09, 0x46, 0x21, 0xdc, + 0xa8, 0x49, 0x81, 0x84, 0x6d, 0x42, 0xa0, 0x70, 0x4c, 0x82, 0x81, 0xa0, + 0x14, 0x66, 0x02, 0x81, 0x41, 0xd8, 0x28, 0x65, 0x88, 0xb8, 0x21, 0xdb, + 0x16, 0x2d, 0x1c, 0x41, 0x26, 0xd8, 0xa0, 0x2d, 0x04, 0x10, 0x48, 0x51, + 0x38, 0x4a, 0x4c, 0x04, 0x52, 0x19, 0x43, 0x72, 0x22, 0x30, 0x50, 0x4c, + 0x14, 0x08, 0xe2, 0x96, 0x89, 0x0c, 0xa1, 0x84, 0x0c, 0x46, 0x46, 0x03, + 0x46, 0x72, 0x20, 0x82, 0x30, 0xe2, 0x18, 0x45, 0xc0, 0x42, 0x01, 0xda, + 0x22, 0x86, 0x1b, 0x23, 0x90, 0x50, 0x32, 0x6c, 0x8a, 0x88, 0x80, 0xd1, + 0xc2, 0x2c, 0x9b, 0x96, 0x44, 0xd4, 0x00, 0x20, 0x21, 0x44, 0x80, 0xd8, + 0xb8, 0x61, 0x08, 0x43, 0x44, 0x20, 0x25, 0x4e, 0x09, 0x10, 0x8a, 0x81, + 0x46, 0x2c, 0x0c, 0x80, 0x89, 0x80, 0x84, 0x84, 0x81, 0x08, 0x48, 0x11, + 0x82, 0x29, 0x5b, 0x44, 0x82, 0x61, 0x48, 0x28, 0x02, 0xa1, 0x04, 0xc1, + 0x44, 0x25, 0x03, 0x12, 0x92, 0x0c, 0x29, 0x24, 0x64, 0x10, 0x0c, 0x19, + 0x42, 0x45, 0x12, 0x83, 0x20, 0x01, 0x06, 0x89, 0x60, 0x14, 0x11, 0x90, + 0x88, 0x45, 0x83, 0xa4, 0x80, 0xd0, 0x88, 0x50, 0x14, 0x36, 0x2d, 0x81, + 0xc8, 0x71, 0x0a, 0x13, 0x46, 0x4c, 0x94, 0x89, 0xdb, 0x86, 0x40, 0xd8, + 0x08, 0x01, 0x91, 0x40, 0x90, 0x19, 0x83, 0x25, 0xa3, 0x36, 0x40, 0x4b, + 0x18, 0x28, 0x92, 0x36, 0x20, 0xa2, 0x02, 0x61, 0xd4, 0x92, 0x21, 0xd3, + 0x26, 0x24, 0x04, 0x35, 0x69, 0x08, 0x29, 0x51, 0x01, 0x02, 0x91, 0x23, + 0x93, 0x64, 0xe0, 0xc6, 0x51, 0xda, 0x28, 0x42, 0x24, 0x30, 0x0d, 0xca, + 0xa0, 0x4d, 0xe2, 0x08, 0x00, 0x81, 0x24, 0x4e, 0x11, 0x25, 0x2a, 0x53, + 0x28, 0x51, 0x00, 0x24, 0x20, 0x90, 0x04, 0x4e, 0x23, 0x94, 0x80, 0x49, + 0xb6, 0x89, 0x00, 0x97, 0x6c, 0x41, 0xc4, 0x0c, 0x4a, 0x84, 0x10, 0xc0, + 0x44, 0x60, 0x01, 0x00, 0x26, 0xd3, 0x92, 0x4d, 0x9b, 0x36, 0x6c, 0x0c, + 0x06, 0x0c, 0x08, 0x24, 0x8d, 0xdc, 0x30, 0x0d, 0xa0, 0x14, 0x65, 0x0c, + 0x32, 0x68, 0x88, 0x42, 0x28, 0x92, 0x26, 0x0e, 0x03, 0x41, 0x80, 0x60, + 0xa0, 0x30, 0xd8, 0xc0, 0x49, 0xd8, 0x92, 0x70, 0x08, 0x18, 0x6e, 0x0b, + 0x04, 0x86, 0x91, 0x38, 0x6c, 0xd2, 0x06, 0x61, 0x09, 0x09, 0x69, 0xca, + 0x18, 0x42, 0x09, 0x31, 0x70, 0x10, 0x27, 0x22, 0x20, 0x12, 0x45, 0x01, + 0x39, 0x51, 0x09, 0x32, 0x72, 0x60, 0x14, 0x64, 0xa4, 0x82, 0x04, 0x93, + 0x96, 0x64, 0xa2, 0x24, 0x2a, 0xdb, 0x36, 0x40, 0x42, 0x24, 0x68, 0x9a, + 0xc8, 0x64, 0x09, 0x94, 0x24, 0x0a, 0x30, 0x0e, 0x09, 0x32, 0x21, 0x8b, + 0x38, 0x12, 0xd1, 0x08, 0x4c, 0x53, 0x98, 0x0c, 0x02, 0x06, 0x90, 0x4a, + 0x86, 0x81, 0x89, 0xc8, 0x4c, 0x09, 0x49, 0x40, 0x63, 0x20, 0x28, 0x84, + 0x28, 0x92, 0xd4, 0x06, 0x28, 0x91, 0xa2, 0x20, 0xcb, 0x10, 0x0a, 0xcb, + 0xa2, 0x2d, 0x1a, 0x07, 0x10, 0xe1, 0x94, 0x04, 0x04, 0xa4, 0x89, 0xe2, + 0xc6, 0x89, 0x4a, 0x16, 0x2d, 0xda, 0x12, 0x2e, 0x21, 0x87, 0x0d, 0x1a, + 0x04, 0x2a, 0x1c, 0x06, 0x4d, 0xca, 0x44, 0x6c, 0x8c, 0x22, 0x49, 0x0c, + 0x17, 0x22, 0x58, 0x96, 0x08, 0xe2, 0x40, 0x92, 0x18, 0x45, 0x20, 0x23, + 0x06, 0x26, 0x11, 0xb0, 0x44, 0x82, 0x28, 0x80, 0x40, 0x30, 0x4e, 0x58, + 0x00, 0x01, 0x63, 0x38, 0x0a, 0x23, 0x85, 0x61, 0x09, 0xb2, 0x70, 0x08, + 0xb5, 0x71, 0x03, 0x08, 0x81, 0x51, 0x00, 0x49, 0x12, 0x92, 0x71, 0x4c, + 0x22, 0x31, 0x5a, 0x40, 0x52, 0x04, 0x94, 0x4c, 0x0b, 0x43, 0x0a, 0x18, + 0x07, 0x41, 0x01, 0x20, 0x26, 0x9b, 0x48, 0x8a, 0x58, 0x10, 0x02, 0x19, + 0xa7, 0x0c, 0x5a, 0x86, 0x89, 0x82, 0x44, 0x2e, 0x23, 0x07, 0x65, 0x5a, + 0x48, 0x6d, 0x1a, 0x30, 0x4a, 0x50, 0xa8, 0x80, 0x21, 0xa0, 0x70, 0x02, + 0xc8, 0x8c, 0x09, 0x36, 0x31, 0xd9, 0x82, 0x20, 0xda, 0xb0, 0x30, 0x1b, + 0x06, 0x4d, 0x20, 0xb8, 0x6c, 0x10, 0xc0, 0x68, 0x1b, 0x43, 0x10, 0x19, + 0xb6, 0x88, 0xe0, 0x14, 0x6d, 0x13, 0x19, 0x51, 0x1b, 0xc0, 0x49, 0xd2, + 0x36, 0x02, 0x08, 0x93, 0x41, 0xe4, 0x02, 0x22, 0xd9, 0x32, 0x22, 0xc2, + 0x18, 0x44, 0x14, 0xa9, 0x69, 0x0b, 0xa0, 0x88, 0x60, 0x84, 0x51, 0x94, + 0x16, 0x29, 0xa1, 0x10, 0x42, 0x03, 0x85, 0x31, 0x22, 0x24, 0x00, 0x08, + 0xb4, 0x88, 0xc2, 0xb2, 0x71, 0x11, 0xb3, 0x31, 0xda, 0x80, 0x40, 0x24, + 0x23, 0x4e, 0x4a, 0x32, 0x70, 0x13, 0x37, 0x06, 0xda, 0x00, 0x25, 0x41, + 0x44, 0x4c, 0x63, 0x10, 0x81, 0xd8, 0x32, 0x72, 0x4c, 0xa0, 0x8d, 0xa2, + 0x30, 0x48, 0xc4, 0x80, 0x29, 0xc8, 0x96, 0x6d, 0x0a, 0xa9, 0x90, 0x08, + 0xa1, 0x8c, 0x84, 0x24, 0x2e, 0x21, 0x13, 0x21, 0x9b, 0xa2, 0x44, 0x8c, + 0xa2, 0x04, 0x18, 0xc9, 0x50, 0x5c, 0x36, 0x70, 0x4c, 0x44, 0x52, 0x90, + 0x10, 0x45, 0x84, 0x14, 0x09, 0x63, 0x00, 0x85, 0x03, 0x15, 0x4c, 0xd4, + 0xc2, 0x28, 0x89, 0x28, 0x71, 0xdb, 0x14, 0x45, 0x01, 0x11, 0x2d, 0xd2, + 0x08, 0x62, 0x22, 0x33, 0x89, 0x13, 0xc0, 0x65, 0x53, 0x82, 0x69, 0x10, + 0x81, 0x50, 0x92, 0xb6, 0x4c, 0x62, 0xc8, 0x40, 0x59, 0x32, 0x41, 0x91, + 0x24, 0x6a, 0xd0, 0x94, 0x01, 0x83, 0x20, 0x52, 0x92, 0x06, 0x0d, 0x09, + 0x08, 0x02, 0x24, 0xb1, 0x8d, 0x0c, 0x49, 0x40, 0x08, 0x17, 0x60, 0x1b, + 0x36, 0x84, 0xc0, 0xc6, 0x0d, 0xa0, 0x84, 0x70, 0x91, 0x08, 0x24, 0x53, + 0xb4, 0x29, 0x61, 0xb2, 0x00, 0x20, 0x19, 0x8c, 0xc8, 0x06, 0x08, 0xe3, + 0xb8, 0x45, 0xc4, 0x16, 0x21, 0xc8, 0xb4, 0x88, 0x51, 0x42, 0x09, 0x80, + 0x02, 0x84, 0xc3, 0x84, 0x24, 0x53, 0x00, 0x66, 0x23, 0x20, 0x80, 0x42, + 0x04, 0x61, 0xda, 0x26, 0x81, 0x04, 0x05, 0x01, 0xc8, 0x34, 0x6d, 0xd2, + 0x84, 0x84, 0x59, 0xa4, 0x49, 0x5b, 0xb0, 0x00, 0x04, 0x20, 0x21, 0x5c, + 0xb8, 0x41, 0xd8, 0x00, 0x31, 0x13, 0x24, 0x4e, 0x83, 0x12, 0x4e, 0x1b, + 0x95, 0x80, 0x49, 0x22, 0x01, 0x82, 0x80, 0x65, 0xca, 0x46, 0x8a, 0x41, + 0xa8, 0x4d, 0x98, 0x00, 0x41, 0xc3, 0x96, 0x28, 0x93, 0xb0, 0x8c, 0x00, + 0xb5, 0x30, 0x10, 0x49, 0x0d, 0x60, 0x14, 0x01, 0xd1, 0x96, 0x41, 0xa4, + 0x84, 0x70, 0xca, 0x12, 0x0a, 0xd0, 0x98, 0x08, 0x20, 0x08, 0x88, 0x1b, + 0x20, 0x6d, 0x13, 0x15, 0x46, 0x40, 0x28, 0x20, 0xdc, 0xb6, 0x0d, 0x82, + 0x06, 0x86, 0x92, 0x02, 0x41, 0x00, 0x31, 0x49, 0xc3, 0x44, 0x6c, 0x54, + 0x88, 0x71, 0x92, 0x46, 0x6c, 0x09, 0x41, 0x6e, 0xa3, 0xc4, 0x60, 0x01, + 0x29, 0x00, 0x1b, 0xa8, 0x8d, 0x10, 0x04, 0x85, 0x08, 0x88, 0x90, 0x9a, + 0x02, 0x46, 0x98, 0x10, 0x12, 0x1b, 0x47, 0x40, 0x23, 0x32, 0x26, 0x8a, + 0x94, 0x65, 0x01, 0x88, 0x44, 0x22, 0xc2, 0x88, 0x98, 0x48, 0x85, 0x83, + 0x40, 0x09, 0x40, 0x98, 0x50, 0x19, 0x00, 0x51, 0x24, 0x17, 0x01, 0xd2, + 0x38, 0x91, 0x04, 0xa5, 0x6d, 0x84, 0x86, 0x6d, 0xc3, 0x02, 0x89, 0x03, + 0x06, 0x31, 0x11, 0x45, 0x0d, 0x13, 0x11, 0x21, 0x84, 0x14, 0x40, 0xd8, + 0xa6, 0x65, 0x04, 0x26, 0x46, 0x62, 0xb0, 0x0d, 0x1c, 0xa4, 0x24, 0x51, + 0x08, 0x12, 0x0c, 0x48, 0x29, 0xc4, 0xc0, 0x2c, 0x8c, 0xa8, 0x05, 0x5a, + 0xa6, 0x60, 0x44, 0x00, 0x08, 0x62, 0x20, 0x71, 0x81, 0x26, 0x85, 0x93, + 0x36, 0x04, 0x1b, 0x93, 0x30, 0x81, 0x38, 0x2a, 0xe3, 0x32, 0x48, 0x83, + 0x36, 0x89, 0x22, 0x88, 0x48, 0x99, 0xc2, 0x0d, 0xe4, 0x44, 0x2a, 0x93, + 0x34, 0x2e, 0x18, 0x45, 0x05, 0x1b, 0x84, 0x0d, 0x01, 0xc1, 0x25, 0x0c, + 0xb9, 0x6d, 0x49, 0x12, 0x0d, 0x1c, 0x14, 0x10, 0x0c, 0xb4, 0x4c, 0x12, + 0xc0, 0x24, 0xd8, 0x28, 0x49, 0xe1, 0x00, 0x2d, 0x00, 0xb7, 0x69, 0x1b, + 0xa3, 0x25, 0x01, 0x01, 0x85, 0x1b, 0x07, 0x88, 0x52, 0x38, 0x88, 0x13, + 0x85, 0x08, 0xe1, 0x86, 0x28, 0x4c, 0x46, 0x88, 0x4b, 0x96, 0x4d, 0x64, + 0xa0, 0x91, 0x43, 0x04, 0x2c, 0x92, 0x14, 0x62, 0x04, 0xa2, 0x8c, 0x98, + 0x06, 0x8d, 0x10, 0x40, 0x8d, 0x63, 0x06, 0x04, 0x22, 0x03, 0x49, 0x02, + 0x38, 0x6c, 0x12, 0x49, 0x4e, 0x12, 0x08, 0x70, 0x08, 0x85, 0x44, 0xa2, + 0x04, 0x71, 0x98, 0x94, 0x69, 0xa4, 0x20, 0x21, 0xe0, 0x02, 0x66, 0xa4, + 0xa4, 0x85, 0x11, 0xc6, 0x70, 0x1b, 0x97, 0x69, 0x93, 0x04, 0x2a, 0x23, + 0x40, 0x0c, 0x08, 0xc2, 0x70, 0x91, 0xc4, 0x01, 0xe2, 0x24, 0x44, 0xd8, + 0x00, 0x31, 0x11, 0x27, 0x02, 0x12, 0x42, 0x86, 0x23, 0xc8, 0x00, 0x4c, + 0x04, 0x24, 0x9b, 0x40, 0x71, 0x50, 0x00, 0x04, 0x20, 0xb2, 0x04, 0x1a, + 0x09, 0x2e, 0x43, 0x02, 0x0d, 0x42, 0x22, 0x64, 0xc9, 0xb8, 0x8d, 0x08, + 0x35, 0x72, 0x93, 0x20, 0x08, 0x01, 0x82, 0x84, 0x88, 0xb2, 0x85, 0x58, + 0x46, 0x10, 0x64, 0x04, 0x22, 0xd0, 0x16, 0x00, 0x93, 0x80, 0x24, 0xdc, + 0x00, 0x06, 0x0c, 0x14, 0x31, 0x23, 0x48, 0x88, 0x63, 0x88, 0x21, 0x91, + 0x12, 0x8e, 0x0a, 0x88, 0x60, 0x21, 0x88, 0x8d, 0x11, 0x86, 0x81, 0x88, + 0x10, 0x0a, 0x1c, 0xb8, 0x0c, 0x19, 0x39, 0x42, 0x08, 0x83, 0x50, 0x84, + 0x28, 0x51, 0xd0, 0x04, 0x0c, 0x98, 0x48, 0x00, 0x52, 0x38, 0x72, 0xe3, + 0x38, 0x42, 0xe4, 0x32, 0x48, 0xcc, 0x80, 0x88, 0x24, 0x83, 0x88, 0x83, + 0xb6, 0x31, 0x19, 0xc5, 0x30, 0x80, 0x12, 0x24, 0xd4, 0x82, 0x89, 0x94, + 0x24, 0x81, 0x10, 0x11, 0x8c, 0xe0, 0xc4, 0x60, 0xf4, 0xcd, 0x7d, 0x38, + 0x0c, 0x7f, 0x3d, 0x43, 0x61, 0xfa, 0x04, 0x79, 0x7d, 0x53, 0x56, 0xb7, + 0xe5, 0x8d, 0x91, 0xb7, 0x42, 0x43, 0x97, 0xe6, 0xcb, 0x45, 0x17, 0x89, + 0xa8, 0x41, 0xd6, 0xed, 0xe4, 0xfb, 0x1d, 0x0f, 0x16, 0xef, 0x70, 0x9c, + 0xf7, 0xb3, 0x98, 0x43, 0xa7, 0x9c, 0xea, 0x2c, 0x6e, 0xd9, 0x9b, 0x85, + 0x7e, 0x20, 0x6f, 0x11, 0xdd, 0xd9, 0x96, 0xa8, 0xdb, 0xc3, 0xcf, 0x6c, + 0xc6, 0xa3, 0xc0, 0x50, 0x3b, 0x82, 0x5d, 0x3b, 0xb6, 0x8f, 0x91, 0xb3, + 0x0c, 0x97, 0x55, 0xa2, 0x8a, 0x18, 0x93, 0xd4, 0x74, 0xb6, 0x05, 0x32, + 0x92, 0xbf, 0xe0, 0x73, 0x92, 0x46, 0x35, 0xea, 0x93, 0x97, 0x99, 0x87, + 0xea, 0x37, 0xfb, 0x4c, 0x57, 0xf3, 0xf3, 0xaa, 0xa5, 0x1b, 0xaa, 0x93, + 0x5a, 0xf0, 0x65, 0x25, 0xcd, 0x23, 0x62, 0xbb, 0x45, 0x46, 0x25, 0xf4, + 0xee, 0x50, 0x05, 0xda, 0x05, 0xf2, 0xc1, 0xb9, 0x46, 0x09, 0xb1, 0xda, + 0x7f, 0xdf, 0x6a, 0xea, 0x9a, 0x4e, 0xe8, 0xa3, 0x3e, 0x5b, 0xd6, 0x4c, + 0x83, 0x4e, 0x85, 0x35, 0x05, 0x82, 0xda, 0xae, 0x4c, 0x41, 0x9e, 0x56, + 0x68, 0x24, 0x58, 0x0e, 0x8c, 0x36, 0x8b, 0x18, 0xe7, 0xd1, 0x2e, 0x99, + 0x91, 0x11, 0x46, 0xf3, 0x9b, 0x82, 0x66, 0x3f, 0xd2, 0xb6, 0xf8, 0xc6, + 0x1d, 0x4f, 0x54, 0xe0, 0xef, 0x38, 0x31, 0x42, 0x5e, 0x3c, 0x02, 0xea, + 0xad, 0xb3, 0xf5, 0x63, 0x99, 0xb7, 0xb7, 0xce, 0xd2, 0x96, 0x98, 0x20, + 0x41, 0xe3, 0x25, 0x9e, 0x3f, 0x6a, 0x56, 0x7f, 0x6e, 0x2a, 0x21, 0x14, + 0xb0, 0x08, 0x6d, 0x03, 0x41, 0xa6, 0x3e, 0xd7, 0x21, 0x2f, 0xf6, 0x27, + 0xb0, 0xc9, 0x90, 0xe3, 0xd5, 0x70, 0xfe, 0x5e, 0x5d, 0x47, 0x65, 0x5b, + 0x8f, 0x1c, 0xee, 0xc4, 0x4c, 0x5a, 0x59, 0x0a, 0x65, 0x07, 0xdd, 0x4c, + 0xf5, 0xf1, 0xe6, 0x91, 0xa8, 0xfd, 0x74, 0xbb, 0xc7, 0x5f, 0xe8, 0x82, + 0x31, 0x10, 0x1c, 0x57, 0xb5, 0x3c, 0xda, 0x31, 0x32, 0x6e, 0x66, 0xe4, + 0xef, 0x97, 0xde, 0x8a, 0xf2, 0x5f, 0x07, 0x3d, 0x5a, 0x00, 0xc1, 0x06, + 0x31, 0x1c, 0x2e, 0xd1, 0xf7, 0x46, 0x2e, 0x96, 0xc5, 0x76, 0x92, 0xed, + 0x38, 0x26, 0xe9, 0x25, 0x5a, 0x9e, 0xc5, 0x2f, 0x48, 0x36, 0x8b, 0xce, + 0xc3, 0x1a, 0x65, 0xb8, 0x16, 0xd5, 0x5e, 0x48, 0xe2, 0x35, 0x48, 0xa3, + 0x54, 0x53, 0xb4, 0xa1, 0xa1, 0x0a, 0xde, 0xd4, 0x06, 0xb6, 0x59, 0x12, + 0xb4, 0x4b, 0x23, 0x7a, 0x90, 0xa3, 0x42, 0x14, 0x3a, 0x8a, 0x14, 0xb7, + 0x3b, 0x86, 0xef, 0x4c, 0xf5, 0x3a, 0x95, 0x50, 0x97, 0x8e, 0xe2, 0xb3, + 0x35, 0x4e, 0x6b, 0x66, 0xc8, 0x71, 0x43, 0x33, 0xc1, 0xef, 0xe3, 0xa4, + 0x59, 0x74, 0x14, 0x16, 0x33, 0x60, 0xdc, 0x37, 0xa2, 0xac, 0xf9, 0x7a, + 0x65, 0x7b, 0x86, 0x66, 0x75, 0xb6, 0x9d, 0xd9, 0x4f, 0xe4, 0x4b, 0xb7, + 0xef, 0x6f, 0xa9, 0x42, 0x96, 0xa9, 0x5b, 0xf4, 0xaa, 0x22, 0x3c, 0xe8, + 0x59, 0xc0, 0xac, 0xc1, 0xbd, 0x8f, 0x40, 0x87, 0x50, 0x4d, 0x35, 0x44, + 0xb7, 0xf4, 0x60, 0xce, 0x7b, 0x8c, 0xf4, 0x47, 0xb7, 0x64, 0x17, 0x84, + 0x89, 0xcf, 0x66, 0x5a, 0x22, 0xcd, 0xf4, 0xf0, 0x4b, 0x4b, 0x47, 0xf1, + 0x38, 0x74, 0x75, 0x23, 0x91, 0x00, 0x83, 0x3e, 0x9d, 0xfd, 0xbe, 0xda, + 0x18, 0x98, 0x78, 0xcd, 0x3a, 0x5d, 0x5d, 0xb8, 0xbc, 0x54, 0xf9, 0xcd, + 0xe2, 0x13, 0x8e, 0x15, 0x2b, 0xb6, 0x9a, 0xcf, 0xb7, 0xcf, 0xce, 0x4e, + 0x5f, 0x01, 0x77, 0x2c, 0xe0, 0xe7, 0x0c, 0x30, 0x58, 0x0e, 0x76, 0xec, + 0xae, 0x9b, 0x51, 0x56, 0x1c, 0xa6, 0xd4, 0x3f, 0x62, 0xa9, 0x1a, 0x7c, + 0x06, 0x42, 0x49, 0xef, 0x69, 0x44, 0x91, 0x67, 0xee, 0xe1, 0x26, 0x13, + 0xb6, 0x7b, 0x63, 0xee, 0x28, 0xed, 0x98, 0x13, 0x7f, 0xf7, 0x4e, 0x86, + 0xad, 0x34, 0x38, 0x9c, 0x0f, 0xfd, 0xd6, 0xc2, 0xce, 0x9b, 0x80, 0x02, + 0x80, 0xa9, 0x77, 0xdd, 0x1e, 0xdc, 0x77, 0xff, 0x0f, 0xe4, 0xcc, 0x44, + 0x53, 0x3c, 0x4c, 0x62, 0xca, 0x41, 0xb2, 0xb4, 0xab, 0x0e, 0xda, 0x53, + 0xca, 0x94, 0xfe, 0x2a, 0x9d, 0x81, 0xfa, 0x77, 0xcf, 0xa8, 0xdc, 0xb4, + 0xc9, 0x6a, 0xec, 0x5a, 0x9b, 0xb3, 0x90, 0xe3, 0x45, 0xb2, 0x3c, 0x1f, + 0xa5, 0x87, 0x1c, 0xb7, 0xe7, 0x6f, 0xf7, 0x9d, 0x20, 0x11, 0x82, 0x83, + 0xe4, 0xb2, 0x49, 0x30, 0x49, 0x16, 0x4c, 0x64, 0x11, 0x92, 0x4f, 0x39, + 0xc1, 0xe4, 0xd4, 0x7f, 0x5d, 0xdc, 0x7b, 0x6d, 0x58, 0x1c, 0x05, 0x10, + 0x06, 0x85, 0x0a, 0xe4, 0x98, 0xd5, 0x0f, 0xa3, 0xd1, 0xfa, 0x97, 0xe3, + 0xff, 0xb3, 0x73, 0xf1, 0x55, 0x8a, 0x68, 0xc2, 0xb4, 0x08, 0x92, 0x39, + 0x92, 0xf0, 0x18, 0xfd, 0x1f, 0x97, 0xf7, 0xda, 0x3a, 0x2a, 0xe5, 0x5e, + 0x43, 0x09, 0xb0, 0xd0, 0x8c, 0x62, 0x4b, 0xc4, 0xb1, 0xda, 0x62, 0x01, + 0x04, 0x34, 0x05, 0xec, 0x32, 0x4c, 0xff, 0x39, 0xee, 0x27, 0x9f, 0x8b, + 0x71, 0x34, 0x77, 0xc8, 0xc3, 0x36, 0x7d, 0x63, 0x82, 0x20, 0x58, 0xfc, + 0x9f, 0xfd, 0x44, 0x02, 0x1f, 0x95, 0x69, 0xd9, 0xde, 0xd3, 0xfe, 0xa4, + 0x38, 0xb0, 0xdf, 0xae, 0xc6, 0x02, 0x70, 0xf8, 0x15, 0x99, 0x6d, 0x6f, + 0x52, 0xee, 0xe5, 0x5f, 0xf4, 0x37, 0xbd, 0xed, 0xd0, 0xad, 0x00, 0xa6, + 0x12, 0xce, 0xf4, 0x45, 0x4e, 0x39, 0x97, 0xf4, 0xce, 0x03, 0x94, 0x61, + 0x4b, 0xae, 0x68, 0x56, 0x53, 0xe7, 0x69, 0x4b, 0xd4, 0xb9, 0xa8, 0x88, + 0x33, 0x28, 0x04, 0x3a, 0x86, 0x05, 0x2f, 0x3e, 0x63, 0xf8, 0x11, 0x67, + 0xb4, 0xbc, 0x57, 0xbc, 0xd4, 0x78, 0xd4, 0x9d, 0x62, 0x11, 0xed, 0x20, + 0x23, 0x24, 0x7b, 0xa5, 0x3c, 0x84, 0xcf, 0x63, 0x83, 0x49, 0xf9, 0xdb, + 0x03, 0x53, 0x56, 0x39, 0x94, 0x8a, 0x56, 0xf3, 0x9a, 0x9a, 0x92, 0x75, + 0x9d, 0x62, 0x16, 0x44, 0x4e, 0x8f, 0x2f, 0x06, 0x51, 0x2c, 0x05, 0x4f, + 0x30, 0xd4, 0x94, 0x22, 0x49, 0xd1, 0xc9, 0xec, 0x49, 0x54, 0x7d, 0xee, + 0x2f, 0xfa, 0x53, 0x5a, 0x78, 0x4d, 0xfc, 0xee, 0x49, 0x35, 0x44, 0x48, + 0x0f, 0x18, 0xe9, 0x17, 0xb7, 0x5b, 0x16, 0x4a, 0xf5, 0x75, 0x33, 0x07, + 0x0a, 0xa4, 0xb6, 0xf5, 0x27, 0x00, 0xbf, 0x58, 0x02, 0x36, 0xc8, 0xc6, + 0x65, 0x3e, 0x75, 0x0c, 0xae, 0x54, 0x35, 0xc2, 0x3d, 0x27, 0x9b, 0x12, + 0x3f, 0x48, 0x21, 0x06, 0x39, 0x5d, 0xb8, 0xf5, 0xdd, 0xcc, 0x03, 0x12, + 0x42, 0xe7, 0xa0, 0x7e, 0xe4, 0xe8, 0x93, 0xf4, 0xb6, 0x47, 0x2c, 0x63, + 0x4b, 0xac, 0x70, 0xca, 0x11, 0x9d, 0x6e, 0x0f, 0x80, 0x8f, 0x9f, 0xb1, + 0x23, 0x61, 0x5d, 0xf6, 0x69, 0x87, 0x59, 0x1f, 0xa6, 0x15, 0x39, 0x40, + 0x33, 0xdf, 0xbc, 0x50, 0x5f, 0x19, 0x7e, 0x03, 0x9c, 0x8f, 0xe0, 0xae, + 0x97, 0x36, 0xf1, 0xb8, 0xa8, 0x9b, 0xff, 0x5f, 0x47, 0x2a, 0x5c, 0xe9, + 0x0f, 0x07, 0x8e, 0xc8, 0xe6, 0xa4, 0x1c, 0x81, 0x6c, 0xc5, 0x80, 0x19, + 0xcc, 0xbf, 0x20, 0x43, 0xee, 0x97, 0x93, 0x30, 0x0c, 0x2c, 0x90, 0x52, + 0x2c, 0x8b, 0xa2, 0x89, 0x95, 0x5a, 0xa4, 0xb6, 0x67, 0xa5, 0xee, 0x88, + 0x6b, 0xb7, 0xe3, 0x3e, 0x7d, 0xac, 0x48, 0x39, 0x71, 0x63, 0xd7, 0x83, + 0xea, 0xc2, 0xeb, 0x1e, 0x5a, 0x83, 0xc0, 0xbd, 0x33, 0x90, 0x43, 0x38, + 0x2e, 0x34, 0x3c, 0x6c, 0xfb, 0x5b, 0xf9, 0xf7, 0x9d, 0x80, 0x15, 0xf8, + 0x02, 0x0c, 0x0c, 0x59, 0xa3, 0xbb, 0x68, 0xf4, 0xcb, 0xe1, 0x07, 0x43, + 0x0b, 0x4a, 0x52, 0x79, 0x20, 0x36, 0x10, 0x29, 0xa7, 0xd1, 0x7e, 0x10, + 0x85, 0xfc, 0x39, 0x62, 0x1a, 0x1c, 0x7b, 0xbd, 0x30, 0xa0, 0x74, 0x1b, + 0x44, 0xb9, 0x95, 0xe3, 0x9a, 0x81, 0xac, 0x92, 0xf3, 0x77, 0x69, 0xa0, + 0xbf, 0x02, 0x68, 0x24, 0x9e, 0x60, 0x4e, 0xf9, 0xc2, 0xd5, 0x1d, 0xda, + 0xc0, 0x7e, 0xe6, 0x85, 0xec, 0x53, 0x17, 0xdb, 0x9f, 0x96, 0x82, 0x16, + 0x7d, 0x6e, 0x62, 0xe2, 0x91, 0x2f, 0x6e, 0xd6, 0x94, 0x00, 0x97, 0x11, + 0x7a, 0xb9, 0x6d, 0x9e, 0x7b, 0xb9, 0xd1, 0x5e, 0x86, 0x3e, 0x93, 0xa2, + 0x37, 0x52, 0x56, 0x40, 0x09, 0x7a, 0xab, 0x18, 0xd9, 0x8a, 0x26, 0x98, + 0x58, 0x75, 0xd9, 0xdf, 0x1d, 0xce, 0x74, 0x14, 0x39, 0x07, 0x37, 0x43, + 0x61, 0x87, 0x80, 0x7a, 0xf2, 0x7b, 0x66, 0x77, 0x37, 0x56, 0x3c, 0x09, + 0x59, 0x5c, 0xf3, 0x4c, 0xc7, 0xf3, 0x4e, 0x2e, 0xa3, 0xf6, 0x63, 0x42, + 0x7b, 0x8c, 0x1e, 0x2e, 0x88, 0xe1, 0xd9, 0xe1, 0x82, 0x3e, 0x00, 0x3d, + 0x49, 0xf1, 0x83, 0x6a, 0x2b, 0x23, 0x5c, 0x7e, 0x67, 0x95, 0xd5, 0xbb, + 0x79, 0x02, 0x14, 0xa9, 0x14, 0xb9, 0x96, 0x93, 0x7d, 0x66, 0xcc, 0x29, + 0x48, 0x85, 0x7f, 0x6a, 0x0e, 0xef, 0xd0, 0xee, 0x08, 0x8a, 0xf4, 0x26, + 0xac, 0xed, 0xaa, 0x08, 0xa5, 0x8d, 0xa8, 0x67, 0x0f, 0x6a, 0xf9, 0x55, + 0x06, 0x54, 0xe6, 0x1c, 0xf3, 0xb1, 0xf4, 0xa3, 0x82, 0x5e, 0x33, 0x6c, + 0xec, 0x27, 0xb9, 0xaf, 0x38, 0x60, 0xbe, 0x3b, 0x14, 0x1e, 0xc1, 0xfb, + 0x3d, 0x33, 0xb3, 0x2f, 0xef, 0x59, 0xfd, 0xc3, 0xc6, 0x90, 0x37, 0x78, + 0xa1, 0xb5, 0x62, 0x0e, 0x99, 0xe6, 0x4d, 0x1f, 0x69, 0x23, 0x7b, 0xbc, + 0xab, 0xfd, 0x74, 0xc9, 0x94, 0x75, 0x82, 0xb0, 0x4c, 0xb4, 0x03, 0x21, + 0x91, 0x77, 0x41, 0xb1, 0x38, 0x2f, 0xb2, 0xaf, 0x1d, 0x65, 0xde, 0xd2, + 0xe2, 0xc9, 0x26, 0x26, 0x34, 0x8d, 0xa7, 0xe3, 0xd8, 0x6b, 0xcd, 0x30, + 0x21, 0x5d, 0x17, 0x33, 0xd6, 0xf7, 0x12, 0x7a, 0x3d, 0x74, 0x69, 0x7e, + 0xd3, 0xd0, 0x15, 0xda, 0xff, 0x57, 0xa9, 0xd4, 0xd7, 0x49, 0xe5, 0x67, + 0xeb, 0x82, 0x22, 0x0d, 0x6d, 0xc9, 0x3f, 0x81, 0x96, 0xc0, 0x28, 0xfa, + 0xcb, 0xb5, 0x02, 0xc1, 0xa5, 0x90, 0xa8, 0x94, 0x63, 0x23, 0x1e, 0xa2, + 0x50, 0xa2, 0x43, 0x87, 0x91, 0xa7, 0xd7, 0x97, 0x11, 0x60, 0xf7, 0xb3, + 0xaf, 0x29, 0xc8, 0xcc, 0xe9, 0x63, 0xc1, 0x5b, 0x37, 0xca, 0xfa, 0x7a, + 0x0f, 0xf7, 0xf3, 0x34, 0x2f, 0x72, 0x3f, 0x3d, 0xab, 0x88, 0x68, 0xef, + 0x7c, 0x9c, 0xf1, 0x6a, 0xe9, 0x00, 0xb2, 0x9e, 0xfd, 0x01, 0xf0, 0xf5, + 0xb7, 0x54, 0x08, 0xa8, 0xac, 0x3c, 0xa1, 0x92, 0x55, 0x55, 0xeb, 0x67, + 0x16, 0xbc, 0x26, 0xe1, 0x96, 0x23, 0xd0, 0xe0, 0x4b, 0x9c, 0x52, 0x74, + 0x90, 0x27, 0xe4, 0xc8, 0x59, 0x8e, 0xf1, 0xf5, 0x30, 0x30, 0xdc, 0x94, + 0xc4, 0x00, 0x32, 0xac, 0x0d, 0x96, 0x46, 0x90, 0xd7, 0xfc, 0x1a, 0x3c, + 0x4b, 0x85, 0x35, 0x88, 0x56, 0xef, 0x59, 0x14, 0x11, 0x44, 0x25, 0x99, + 0x23, 0x8c, 0xa0, 0x5e, 0xde, 0x0f, 0xe1, 0x79, 0x2f, 0x29, 0xa5, 0x19, + 0xa1, 0xbc, 0xf8, 0x20, 0x57, 0x01, 0xb0, 0x8c, 0x57, 0x0c, 0x45, 0xf2, + 0xca, 0x8f, 0x48, 0x58, 0xeb, 0xb8, 0x36, 0xa2, 0x1e, 0xd5, 0x4e, 0x7c, + 0x46, 0x4f, 0x34, 0x8c, 0xd3, 0x51, 0x64, 0xd9, 0x5e, 0x1e, 0x6e, 0x06, + 0xb6, 0x31, 0xf7, 0x2e, 0xb7, 0xe3, 0x8d, 0x30, 0x88, 0x7c, 0xe0, 0xde, + 0xb9, 0x34, 0x36, 0xf4, 0x24, 0x3f, 0x3b, 0xb3, 0x9d, 0x92, 0x91, 0x7d, + 0x53, 0xbc, 0x25, 0xca, 0x30, 0xa6, 0x52, 0xbd, 0xf9, 0xc9, 0x8b, 0x71, + 0x4a, 0x53, 0x48, 0x00, 0x7d, 0xe6, 0x43, 0x39, 0xe1, 0xe2, 0xe3, 0x6c, + 0x92, 0x1b, 0x53, 0xcb, 0x5f, 0x98, 0xa3, 0xc6, 0x1c, 0x51, 0xc9, 0x69, + 0xc6, 0x15, 0x2f, 0x2a, 0xd5, 0x52, 0x93, 0x53, 0xb8, 0x20, 0xa0, 0x1b, + 0xc3, 0x11, 0x54, 0x38, 0x81, 0x5b, 0x13, 0xb2, 0x32, 0xb4, 0x83, 0xd0, + 0xb5, 0xcf, 0x40, 0xa7, 0x98, 0xb8, 0x6f, 0x30, 0x03, 0xe1, 0xd1, 0x8b, + 0xc1, 0x8a, 0x54, 0x65, 0x02, 0x7e, 0x55, 0x24, 0x28, 0x4d, 0xea, 0x29, + 0x48, 0x9b, 0x8b, 0xd5, 0x02, 0x24, 0xe8, 0xeb, 0xe9, 0xd0, 0x1b, 0x8b, + 0x8a, 0x0a, 0x75, 0x52, 0xf5, 0x64, 0xd7, 0x72, 0x1b, 0x37, 0x59, 0x4b, + 0xe8, 0x06, 0x9c, 0x54, 0x8c, 0x65, 0x9e, 0xb7, 0x08, 0xb1, 0xd2, 0xa0, + 0xe6, 0x44, 0x1c, 0x06, 0x42, 0x40, 0xec, 0x2c, 0xf0, 0x5a, 0xd8, 0xbb, + 0x2d, 0x09, 0x08, 0x5a, 0x92, 0x26, 0x0c, 0xc6, 0xe3, 0x2a, 0xdb, 0xd7, + 0x27, 0xea, 0x5a, 0x53, 0x00, 0xec, 0x53, 0x2d, 0xdc, 0x54, 0x4f, 0x76, + 0xaa, 0x88, 0xe9, 0x26, 0x37, 0x3c, 0xf7, 0x9c, 0x19, 0x86, 0x50, 0x1c, + 0xcb, 0x9d, 0xcd, 0x3a, 0xfa, 0x47, 0x40, 0x36, 0xe1, 0x4d, 0x97, 0xc1, + 0x2a, 0x12, 0x28, 0x9f, 0x89, 0x15, 0x48, 0x3c, 0xc9, 0xcf, 0x3c, 0xdc, + 0x55, 0x73, 0x37, 0x15, 0x70, 0x6b, 0x25, 0x89, 0xe0, 0x23, 0x13, 0x44, + 0xab, 0x10, 0xaa, 0x30, 0x0e, 0x5e, 0x1c, 0x54, 0x21, 0x3b, 0xbf, 0xad, + 0x0a, 0xa7, 0x3f, 0xb1, 0x5c, 0xa2, 0x09, 0xb1, 0xe6, 0x1d, 0x6a, 0x17, + 0xe4, 0x3c, 0x42, 0x49, 0xa9, 0xe0, 0x0d, 0x1c, 0x91, 0x62, 0x51, 0x84, + 0x3a, 0xea, 0x05, 0x56, 0xeb, 0x7a, 0xec, 0xe2, 0xbd, 0x2d, 0x63, 0x89, + 0x4a, 0x9b, 0x3d, 0xbf, 0x46, 0x93, 0x85, 0xad, 0xd4, 0xb7, 0xc5, 0x99, + 0x43, 0xb1, 0xfc, 0x4d, 0xdc, 0xb2, 0xab, 0x6a, 0x86, 0xfd, 0x7b, 0x03, + 0xe8, 0x2b, 0x88, 0x33, 0x0a, 0xe2, 0x39, 0x80, 0x0d, 0xd4, 0x33, 0x1a, + 0xf9, 0x3c, 0x34, 0xa6, 0xb3, 0x40, 0xae, 0x1c, 0x29, 0x26, 0xe5, 0xae, + 0x2f, 0x04, 0xe8, 0xb8, 0xd5, 0xf6, 0x64, 0x15, 0x27, 0x0d, 0xd9, 0x01, + 0x25, 0x8d, 0x53, 0x06, 0xef, 0x38, 0x91, 0x44, 0x7c, 0xbd, 0x84, 0x3e, + 0xe8, 0xfe, 0x17, 0x57, 0xcf, 0xc6, 0xf1, 0x47, 0x28, 0x67, 0xbe, 0x4d, + 0x29, 0x0d, 0xaa, 0xd4, 0x52, 0x2e, 0x9c, 0x04, 0x88, 0x8a, 0x08, 0x73, + 0xad, 0x0a, 0x05, 0x9f, 0x93, 0xd0, 0xc7, 0x31, 0x31, 0x04, 0x5e, 0x74, + 0x13, 0x8b, 0x88, 0x69, 0x25, 0x5b, 0xfe, 0x33, 0x9d, 0xb5, 0x6d, 0xf5, + 0x93, 0x87, 0x1d, 0x63, 0x37, 0x54, 0x08, 0xfd, 0x8f, 0x72, 0xca, 0x58, + 0xf3, 0x88, 0x6d, 0xd5, 0xb1, 0x68, 0x80, 0xde, 0xca, 0x80, 0x94, 0xb7, + 0xbc, 0x14, 0x44, 0x48, 0x0a, 0x7c, 0xd3, 0xd5, 0x78, 0x6a, 0xfa, 0x44, + 0xce, 0xae, 0x65, 0x05, 0x2c, 0x89, 0xcb, 0xc5, 0x34, 0xad, 0x27, 0x9f, + 0xcb, 0x57, 0x21, 0x1d, 0xd2, 0x92, 0xcc, 0xa2, 0x4b, 0xe5, 0x80, 0x0f, + 0x77, 0x3b, 0xc9, 0x34, 0x69, 0x4a, 0x7d, 0x97, 0x32, 0x57, 0xc1, 0x5e, + 0x1d, 0x39, 0x8a, 0x5a, 0x4b, 0x77, 0x00, 0x27, 0xb6, 0xef, 0x7e, 0xab, + 0x64, 0x57, 0x41, 0xfb, 0x94, 0x63, 0xf0, 0xfc, 0x4c, 0xc7, 0x92, 0xc5, + 0xe7, 0x3e, 0x83, 0xf1, 0x85, 0x4a, 0x5b, 0xbc, 0x33, 0x06, 0x3a, 0x36, + 0x5c, 0xb6, 0x20, 0x59, 0xdb, 0xec, 0x6a, 0x10, 0x33, 0xb4, 0x19, 0x4b, + 0x51, 0xe3, 0xbf, 0xdb, 0x26, 0x14, 0x5d, 0xa3, 0x4b, 0x51, 0x77, 0x17, + 0x24, 0xaf, 0xd1, 0x9c, 0x9d, 0x2e, 0x90, 0x56, 0x14, 0x40, 0x0e, 0x3b, + 0xea, 0x79, 0xa2, 0x02, 0xdf, 0xd8, 0x23, 0xde, 0xe1, 0x6f, 0x8b, 0xb5, + 0xe6, 0x69, 0x90, 0x94, 0x7d, 0x9e, 0x7f, 0xc5, 0x26, 0x89, 0xe2, 0x24, + 0x0f, 0x70, 0x06, 0x4d, 0x4e, 0x67, 0xed, 0xfe, 0xa0, 0x69, 0xc2, 0x81, + 0x08, 0xe3, 0x3c, 0x5e, 0x58, 0x14, 0xee, 0x96, 0x09, 0xf6, 0x85, 0xba, + 0x1f, 0xc5, 0xc3, 0x5d, 0xb6, 0xda, 0xed, 0x5a, 0xd3, 0xba, 0x19, 0xc4, + 0xb7, 0x78, 0x45, 0x4a, 0xd5, 0x1e, 0x2b, 0x3e, 0x60, 0xf8, 0xa3, 0xdc, + 0x87, 0xe4, 0x02, 0x98, 0x6a, 0x7d, 0x8a, 0xe1, 0x33, 0xf2, 0x95, 0xbf, + 0x72, 0x7e, 0xc4, 0xd2, 0xd7, 0x21, 0x72, 0x63, 0x98, 0xb7, 0x3f, 0x50, + 0x36, 0xef, 0x32, 0xc0, 0x1d, 0x29, 0xd0, 0x70, 0xed, 0xf4, 0x19, 0xbf, + 0xcd, 0xd0, 0x65, 0x84, 0xab, 0xc9, 0x04, 0x51, 0x44, 0xbb, 0x2e, 0x0b, + 0x1b, 0x42, 0x42, 0x81, 0x75, 0x28, 0x53, 0xf5, 0x69, 0x4e, 0x4b, 0xbe, + 0x47, 0xfc, 0x05, 0x32, 0xdb, 0x0c, 0xee, 0xf3, 0x36, 0x32, 0xb2, 0xbe, + 0xa2, 0xc9, 0xbf, 0x48, 0x7a, 0xba, 0xce, 0x66, 0x32, 0xff, 0x46, 0xcc, + 0xe1, 0x40, 0x50, 0xb0, 0xdb, 0xf9, 0xd1, 0x56, 0xd4, 0x79, 0x20, 0x98, + 0x51, 0x13, 0x1c, 0x28, 0xf1, 0xa9, 0x79, 0xb5, 0x93, 0x25, 0x12, 0x44, + 0xba, 0x7e, 0xf1, 0x7f, 0x9e, 0x44, 0xf3, 0x19, 0x9d, 0x8e, 0x70, 0x10, + 0x91, 0x08, 0x48, 0x95, 0x6f, 0xd3, 0xff, 0xb5, 0xac, 0x0c, 0x2b, 0xfe, + 0xa8, 0x3a, 0x2e, 0x02, 0xf9, 0xbb, 0x0a, 0x93, 0x7e, 0xd6, 0xd5, 0x58, + 0x15, 0x11, 0x8f, 0x90, 0x6b, 0xaa, 0x8e, 0x4e, 0x02, 0xd5, 0xfe, 0x05, + 0xc3, 0x97, 0x84, 0x15, 0x2b, 0x11, 0x00, 0x06, 0x01, 0x0e, 0xf7, 0x18, + 0x55, 0xb5, 0xf5, 0x5e, 0x5b, 0xb8, 0xf6, 0xb5, 0x80, 0x38, 0xd0, 0x52, + 0x97, 0x44, 0x31, 0xe1, 0x60, 0x3f, 0xd2, 0x3e, 0x1b, 0x8f, 0x0f, 0x27, + 0xf1, 0xba, 0x48, 0x3c, 0xc8, 0x92, 0xf1, 0x67, 0x05, 0x4d, 0xf9, 0x28, + 0x35, 0xda, 0x5e, 0x83, 0x2f, 0xe8, 0x9b, 0x71, 0xac, 0xd9, 0xc2, 0x97, + 0x0d, 0x52, 0x63, 0xbb, 0xc7, 0x43, 0x35, 0x4d, 0x9f, 0xb6, 0x4a, 0x9c, + 0x08, 0xd2, 0x14, 0xfb, 0x00, 0x2e, 0xdd, 0x5a, 0xfc, 0x55, 0xa7, 0x8d, + 0xcd, 0xc6, 0x39, 0x2a, 0xf2, 0x55, 0x8e, 0x0a, 0x2d, 0x0f, 0x8a, 0x12, + 0x02, 0xe1, 0x0a, 0x72, 0xdc, 0xd5, 0x74, 0x82, 0xff, 0xc1, 0xb3, 0x57, + 0x7b, 0xcd, 0xa6, 0x12, 0x2a, 0x30, 0x32, 0x8b, 0xba, 0xd6, 0x24, 0x85, + 0x7d, 0x11, 0x5d, 0x18, 0xd2, 0x01, 0x44, 0xb4, 0x8a, 0x96, 0xc6, 0x7a, + 0x6f, 0x13, 0xe7, 0x82, 0xb2, 0x5b, 0xd3, 0x11, 0x0d, 0x23, 0xf4, 0xb3, + 0xb5, 0x69, 0x4d, 0x0a, 0xfa, 0x35, 0xec, 0xb4, 0x7f, 0xb7, 0x3c, 0x06, + 0x13, 0x81, 0x27, 0x35, 0xf8, 0x0b, 0x21, 0xb4, 0x79, 0x3e, 0xf0, 0x97, + 0xb4, 0xf6, 0x3e, 0xe4, 0x63, 0x66, 0x4a, 0x86, 0xe0, 0x78, 0x68, 0x3a, + 0x0c, 0x11, 0x98, 0xd9, 0xe2, 0x37, 0x3c, 0xde, 0x1a, 0x88, 0x45, 0x2c, + 0xae, 0xd1, 0xbb, 0x98, 0xb0, 0x0d, 0x60, 0x11, 0xde, 0x42, 0x27, 0x75, + 0x3b, 0x9a, 0x84, 0x82, 0xba, 0xeb, 0xd5, 0xe2, 0x54, 0x22, 0xc7, 0x2c, + 0xc6, 0x07, 0x05, 0x8b, 0x54, 0xe4, 0x5e, 0xdc, 0x85, 0xb6, 0xfa, 0xe2, + 0x36, 0xd7, 0x99, 0x1a, 0xc4, 0x8b, 0xe9, 0x8f, 0xee, 0xeb, 0x49, 0x1e, + 0x63, 0x4e, 0xdf, 0x98, 0x2a, 0xb7, 0xd5, 0x31, 0x0f, 0x40, 0x7f, 0xb3, + 0xa8, 0xa3, 0xe2, 0x51, 0xa2, 0x2d, 0xa7, 0x53, 0xd3, 0x16, 0x6f, 0xa7, + 0xa6, 0xa6, 0x6e, 0x9a, 0x99, 0x02, 0xfe, 0x7e, 0x02, 0x41, 0x59, 0x0f, + 0x21, 0x81, 0x46, 0x72, 0x0d, 0xa5, 0xf6, 0x2f, 0x15, 0xc8, 0x57, 0x07, + 0x98, 0xf5, 0x68, 0x13, 0xe1, 0x3a, 0xba, 0xe3, 0x06, 0x81, 0xbf, 0x55, + 0xaf, 0x70, 0xab, 0xac, 0x59, 0xa4, 0xeb, 0x36, 0x84, 0xb9, 0x39, 0xaf, + 0x49, 0x32, 0xaf, 0x8f, 0x32, 0xf4, 0x58, 0x37, 0x10, 0x3d, 0xdb, 0xc3, + 0xb1, 0xce, 0x56, 0x39, 0xfc, 0x34, 0xe9, 0x0c, 0x42, 0xf9, 0xa0, 0xbc, + 0x22, 0x28, 0x83, 0x72, 0xc5, 0xf0, 0x4b, 0x9a, 0xb0, 0x1e, 0x84, 0x93, + 0x3d, 0x9d, 0xcb, 0x36, 0x94, 0xd5, 0x16, 0xca, 0x70, 0x7d, 0x33, 0xda, + 0x12, 0xdc, 0x1b, 0x73, 0x6c, 0x0f, 0xef, 0x7e, 0x1f, 0x12, 0x83, 0x6d, + 0x80, 0x01, 0xb6, 0x00, 0x3b, 0xbb, 0x78, 0x6c, 0x64, 0x99, 0xb9, 0x4c, + 0xf3, 0x16, 0x88, 0x0b, 0x7b, 0x84, 0x2a, 0x8e, 0x39, 0x8c, 0xe7, 0x2d, + 0x0a, 0x25, 0xd7, 0x17, 0x95, 0xac, 0xcb, 0xb8, 0x89, 0xab, 0xe2, 0x18, + 0x66, 0xaf, 0x8c, 0x6e, 0x07, 0x6e, 0xfb, 0x27, 0x3a, 0x81, 0x0e, 0x58, + 0xd1, 0x8b, 0xb0, 0x80, 0x1d, 0x89, 0x8e, 0xfe, 0xe3, 0x8b, 0x9e, 0x34, + 0x51, 0xca, 0x9a, 0x05, 0xce, 0xb9, 0xc5, 0xd9, 0x66, 0xf6, 0x9c, 0x70, + 0x75, 0x41, 0xa0, 0xee, 0x5a, 0xa7, 0x84, 0xce, 0xea, 0x64, 0x0e, 0x6f, + 0x28, 0x8c, 0x06, 0xae, 0x3e, 0x00, 0x50, 0x00, 0x29, 0xfc, 0x63, 0xa1, + 0x04, 0x27, 0xf0, 0xe7, 0x04, 0x06, 0x78, 0x25, 0xee, 0xd6, 0xf1, 0x76, + 0x6d, 0x3a, 0x61, 0x47, 0x9c, 0xd2, 0x1b, 0xc6, 0xe9, 0x31, 0xf8, 0xae, + 0xa2, 0xd0, 0xa5, 0x25, 0x99, 0x9b, 0xca, 0x91, 0xfc, 0xcb, 0x79, 0x16, + 0xf1, 0x77, 0x92, 0xde, 0xad, 0xc6, 0xff, 0xed, 0xbc, 0x82, 0x4b, 0x77, + 0xe9, 0x73, 0x91, 0x4d, 0x71, 0xc6, 0x30, 0x3a, 0x6b, 0x60, 0xf9, 0x24, + 0xdf, 0x34, 0x66, 0x07, 0x4e, 0xa6, 0xb7, 0x4b, 0xb2, 0xaa, 0x6c, 0x05, + 0xfd, 0x87, 0x5b, 0x07, 0x06, 0x67, 0x98, 0x59, 0x87, 0xaf, 0x6c, 0x16, + 0x11, 0x8e, 0x77, 0x09, 0x29, 0x67, 0x70, 0x7c, 0x52, 0x7a, 0x2f, 0xdf, + 0x38, 0x95, 0xe9, 0x10, 0x29, 0x94, 0xe4, 0x80, 0xa3, 0x0c, 0xed, 0x17, + 0xec, 0x07, 0x61, 0x89, 0xc6, 0x95, 0x89, 0x69, 0xf5, 0x16, 0x78, 0x72, + 0xb3, 0x61, 0x84, 0xe6, 0x56, 0xd7, 0xad, 0x3f, 0xb6, 0x0b, 0x2a, 0x53, + 0xcd, 0xe1, 0xc1, 0xf2, 0x6f, 0xb4, 0x86, 0x22, 0xf8, 0x47, 0x93, 0xdf, + 0x5e, 0xba, 0x5d, 0xe3, 0x9c, 0xd4, 0xaa, 0xc1, 0x1e, 0xe9, 0x72, 0xe1, + 0xb3, 0xcc, 0x91, 0xa7, 0xa4, 0xea, 0xa3, 0x9c, 0x8c, 0x76, 0xe4, 0xa6, + 0x4c, 0xa8, 0xcc, 0xde, 0xd8, 0x6b, 0x23, 0x7a, 0xea, 0x43, 0xd9, 0xad, + 0x2f, 0x9b, 0x54, 0x30, 0xe7, 0x7c, 0x05, 0x05, 0x11, 0x6d, 0x2e, 0x0b, + 0xd7, 0xea, 0x84, 0x23, 0x1e, 0x30, 0xe5, 0x44, 0xe9, 0x1c, 0x6e, 0x28, + 0x2e, 0x4c, 0x8a, 0xce, 0x6c, 0x60, 0xbb, 0xe0, 0x30, 0x1f, 0xc0, 0x83, + 0x91, 0x7f, 0x62, 0xf6, 0x7c, 0x6d, 0x66, 0x7a, 0x1c, 0xc2, 0x97, 0x01, + 0x5f, 0x92, 0x30, 0x08, 0x34, 0x78, 0x36, 0xe3, 0x12, 0x7e, 0xfe, 0xe1, + 0x21, 0x74, 0xa7, 0x36, 0x34, 0xd3, 0x64, 0x72, 0x89, 0x64, 0xea, 0x3b, + 0x65, 0xb1, 0xcf, 0xa2, 0x72, 0xaf, 0x3e, 0x6c, 0x04, 0x43, 0x49, 0x6f, + 0xfb, 0x5c, 0xc6, 0x61, 0xa7, 0xdb, 0xf9, 0xf3, 0xee, 0x62, 0x33, 0x40, + 0x6c, 0x2b, 0x87, 0xb3, 0x81, 0x5b, 0x17, 0xa1, 0xd0, 0x31, 0x0c, 0xb7, + 0x15, 0xb3, 0x5f, 0xc8, 0xc3, 0x88, 0x7b, 0x76, 0x6a, 0x9b, 0xc0, 0x03, + 0xd6, 0x9a, 0x38, 0x7c, 0x0a, 0x85, 0x72, 0x92, 0x55, 0x52, 0xfb, 0x33, + 0x06, 0xa3, 0x25, 0x8a, 0x97, 0x43, 0xdb, 0x17, 0x90, 0x36, 0x02, 0x3a, + 0x72, 0x44, 0xd5, 0xd5, 0xf9, 0x3a, 0x18, 0xba, 0x9e, 0x1b, 0xc3, 0xa9, + 0xb9, 0x3b, 0x46, 0x06, 0x01, 0xab, 0x40, 0x64, 0x9f, 0x42, 0xda, 0xa9, + 0xf3, 0x18, 0x67, 0x33, 0xbd, 0xbd, 0x43, 0xd5, 0x70, 0x8a, 0xd5, 0xcb, + 0x76, 0xf2, 0xd1, 0x07, 0xac, 0xc4, 0xe5, 0x5e, 0xb9, 0x49, 0xa0, 0x28, + 0xe0, 0xae, 0xa7, 0x1e, 0xad, 0xee, 0x27, 0xb9, 0x98, 0xd5, 0xa2, 0xa1, + 0xe5, 0x9b, 0xa1, 0x84, 0xa8, 0x30, 0x44, 0x18, 0x52, 0xfd, 0xf3, 0xa5, + 0xa8, 0xcc, 0x26, 0x70, 0x56, 0x41, 0xe9, 0x18, 0x59, 0x21, 0x7f, 0x0c, + 0x06, 0x5f, 0x3a, 0x8a, 0x2c, 0x8a, 0x9f, 0x8d, 0x76, 0x59, 0x12, 0x7b, + 0x4f, 0x9e, 0x6f, 0x3a, 0xad, 0x49, 0xe7, 0xe7, 0x15, 0x2c, 0xf4, 0xfd, + 0x70, 0xde, 0x4a, 0x71, 0xd4, 0x96, 0x51, 0x63, 0x23, 0x53, 0x14, 0x8b, + 0x5e, 0x35, 0xa1, 0x77, 0x80, 0xa0, 0x94, 0xe9, 0x23, 0x81, 0xbc, 0x9a, + 0x48, 0x43, 0x24, 0x03, 0xd0, 0xa8, 0xd7, 0x8d, 0x3d, 0xa5, 0xd4, 0x8c, + 0x8b, 0x51, 0x84, 0x51, 0x54, 0x80, 0x70, 0x19, 0xc8, 0xfe, 0x80, 0x34, + 0x8b, 0x5b, 0xc8, 0x51, 0x31, 0x2b, 0x7e, 0x4d, 0x57, 0xf9, 0x66, 0xe9, + 0x17, 0x7e, 0xbe, 0x7b, 0xae, 0x11, 0xd5, 0xb2, 0xca, 0xf6, 0xa1, 0x66, + 0x94, 0x41, 0x23, 0xee, 0x55, 0xd4, 0x3a, 0xbf, 0x71, 0x58, 0x37, 0x75, + 0x06, 0xcb, 0x57, 0x4d, 0x4f, 0x5f, 0x63, 0x72, 0xa3, 0x83, 0x8b, 0x4d, + 0x61, 0x78, 0xa7, 0x24, 0xe7, 0xd9, 0x14, 0xd8, 0x61, 0xd5, 0xf2, 0xec, + 0x69, 0x46, 0x56, 0x1f, 0x44, 0x91, 0xa9, 0x6e, 0xc8, 0x9e, 0x17, 0xa1, + 0xaf, 0x68, 0x48, 0x15, 0xe5, 0xea, 0x01, 0xeb, 0x7c, 0x4e, 0x36, 0xd1, + 0x45, 0xe8, 0xba, 0x54, 0xa6, 0x61, 0x2d, 0xa1, 0x13, 0xa9, 0x4c, 0x6d, +}; + +const uint8_t expected_sig[] = { + 0xdf, 0xe6, 0xe1, 0xa5, 0x20, 0xc1, 0xac, 0x98, 0x55, 0x2c, 0xf2, 0x13, + 0x65, 0x42, 0xe2, 0xb0, 0x77, 0x5f, 0x15, 0x00, 0x8f, 0x14, 0x48, 0xa1, + 0xe3, 0xee, 0x81, 0x35, 0x15, 0x34, 0xad, 0x6e, 0x60, 0x85, 0x00, 0xf8, + 0x18, 0x53, 0x0d, 0xa0, 0xc5, 0x41, 0xc4, 0x48, 0x09, 0x1b, 0x34, 0x0c, + 0x0e, 0xcf, 0xc6, 0x3d, 0x38, 0x78, 0x8b, 0x69, 0xe5, 0x6f, 0x4d, 0x43, + 0xfa, 0xa6, 0x75, 0x26, 0x8a, 0x75, 0x97, 0x10, 0x6a, 0x1f, 0x3c, 0xa6, + 0x94, 0xa9, 0x93, 0x8f, 0xe5, 0x62, 0xbf, 0x94, 0xe4, 0xd0, 0x0d, 0x11, + 0x4d, 0x03, 0xe2, 0xd8, 0xdf, 0x68, 0xb7, 0x87, 0x62, 0xc9, 0xdc, 0xc9, + 0x36, 0x4f, 0xcc, 0xd1, 0xa4, 0xae, 0x7e, 0xa4, 0xb9, 0xaf, 0xaf, 0xf0, + 0x8a, 0xe6, 0xff, 0x83, 0xe7, 0x54, 0x22, 0x6e, 0x3f, 0x2e, 0xa0, 0x4f, + 0xa8, 0x31, 0x53, 0xf3, 0x62, 0xeb, 0x04, 0xfa, 0xd1, 0x57, 0x39, 0x43, + 0xf9, 0xe0, 0x31, 0x12, 0x45, 0x09, 0x8b, 0x9e, 0x1e, 0x7a, 0x2b, 0x85, + 0xee, 0xdd, 0xe8, 0x1e, 0xd7, 0xc0, 0x17, 0xb4, 0xd2, 0xdc, 0x36, 0xa9, + 0xe4, 0x49, 0x88, 0xbf, 0x71, 0x43, 0x9d, 0x3e, 0xd2, 0x10, 0xe7, 0x82, + 0xb5, 0xfe, 0xdd, 0x42, 0xc8, 0x1b, 0x11, 0xf6, 0x52, 0x23, 0x98, 0x83, + 0x48, 0xec, 0xec, 0x70, 0x8b, 0xe7, 0x49, 0x9a, 0xd7, 0xd9, 0x7b, 0x47, + 0x4e, 0xe2, 0x5e, 0x17, 0x1a, 0xa0, 0x0e, 0x60, 0x85, 0x3a, 0x30, 0x8c, + 0x1c, 0x26, 0xb4, 0xe1, 0xb5, 0x2b, 0x48, 0xf4, 0xb8, 0x93, 0x2f, 0x79, + 0x3a, 0x1e, 0xb6, 0x3b, 0x07, 0x3b, 0x1e, 0x15, 0xd7, 0x85, 0x5e, 0xd4, + 0x06, 0x0e, 0xcd, 0x6a, 0x93, 0x3a, 0x93, 0x29, 0x6a, 0xbe, 0x68, 0x8a, + 0xb6, 0xb8, 0xfa, 0xc5, 0x63, 0x48, 0x98, 0x10, 0x6d, 0xd9, 0xd3, 0x5b, + 0x29, 0x5f, 0x93, 0x90, 0x08, 0x1c, 0x1a, 0x15, 0x7b, 0x0a, 0x59, 0x9d, + 0x64, 0x24, 0x45, 0xb6, 0xd3, 0x7b, 0xc1, 0x5d, 0x74, 0x1f, 0x0b, 0x8e, + 0x18, 0xf2, 0x92, 0x8e, 0xd4, 0x7f, 0x72, 0x5c, 0x98, 0x1f, 0x8b, 0xa5, + 0xb8, 0xf4, 0x7e, 0x12, 0x6a, 0x93, 0xb9, 0xb5, 0xf1, 0xda, 0x97, 0x75, + 0x4f, 0x56, 0x80, 0x88, 0x64, 0x2b, 0xe0, 0x59, 0xcd, 0x5e, 0x91, 0x64, + 0x9c, 0x0c, 0xa8, 0xdd, 0xac, 0xcb, 0xf3, 0x48, 0x3b, 0x5c, 0xc4, 0xc5, + 0xb9, 0x9a, 0x0b, 0x8e, 0x5d, 0x9a, 0xd5, 0xb7, 0xf0, 0xd4, 0x07, 0x48, + 0xb9, 0x63, 0x02, 0x87, 0x8d, 0xae, 0x7e, 0x03, 0x33, 0x4f, 0x86, 0x15, + 0x1b, 0x3b, 0xdf, 0xda, 0xce, 0xd3, 0x1e, 0xc0, 0x76, 0xb5, 0x1c, 0xdd, + 0xb8, 0x32, 0x87, 0x7d, 0x59, 0x18, 0x72, 0x0c, 0xde, 0x8f, 0x63, 0x2d, + 0x38, 0xf2, 0xe9, 0xc2, 0x81, 0xed, 0xfa, 0x2d, 0x61, 0xef, 0x48, 0xdb, + 0xa2, 0xeb, 0xfe, 0x52, 0x31, 0x1e, 0x21, 0x0a, 0x08, 0xf6, 0x02, 0xd3, + 0xc0, 0x32, 0x3b, 0x6b, 0x2f, 0x64, 0xc4, 0xb3, 0x4b, 0xfe, 0x69, 0x78, + 0xbf, 0x20, 0x62, 0x07, 0x77, 0xdf, 0x2c, 0x18, 0x53, 0x61, 0x8e, 0x05, + 0x01, 0x86, 0xab, 0xab, 0xec, 0x18, 0x8c, 0x15, 0x63, 0x1f, 0xe9, 0x99, + 0xb2, 0x35, 0x77, 0xe1, 0x58, 0xf1, 0xa9, 0x4d, 0x1a, 0xb9, 0x8c, 0x30, + 0x63, 0x6f, 0x9e, 0x7d, 0x4e, 0xcf, 0xb5, 0x6c, 0xf3, 0xe4, 0xdc, 0xab, + 0xf9, 0xae, 0x58, 0xf8, 0x1d, 0x08, 0x7b, 0x73, 0x82, 0x58, 0xc8, 0x67, + 0x48, 0x1a, 0x5e, 0x3d, 0xdb, 0xac, 0x1b, 0x1b, 0xef, 0xeb, 0xa4, 0xe5, + 0x67, 0x48, 0x76, 0xd1, 0x96, 0x4f, 0x6c, 0x7d, 0x06, 0x8c, 0x02, 0x86, + 0x95, 0x83, 0xb6, 0x9b, 0x5e, 0x9a, 0xb5, 0x85, 0xc0, 0x4f, 0x13, 0x1c, + 0x32, 0xf8, 0x29, 0xdf, 0x47, 0x85, 0xdb, 0xe4, 0x37, 0xdc, 0xd8, 0x04, + 0x18, 0xdd, 0xca, 0x97, 0xdd, 0x67, 0x13, 0xbe, 0x74, 0x95, 0xdc, 0xd0, + 0xcc, 0xe6, 0xb5, 0xa5, 0x12, 0x9b, 0x23, 0x4f, 0x41, 0x8c, 0xcc, 0x95, + 0xf4, 0xb0, 0x5f, 0x2a, 0xc4, 0xbf, 0x88, 0xda, 0x55, 0xcb, 0x13, 0x93, + 0x22, 0x60, 0x51, 0x43, 0xc7, 0x9a, 0x2c, 0xfa, 0xb2, 0x59, 0xc1, 0xe6, + 0x8a, 0xa4, 0xb8, 0xfb, 0xd3, 0x31, 0x1d, 0xc7, 0x88, 0xdc, 0xbc, 0xe9, + 0xba, 0xe7, 0xdc, 0xe3, 0xdd, 0x90, 0x96, 0xb4, 0xb4, 0x0a, 0xc1, 0x07, + 0x31, 0x3f, 0xdb, 0xc5, 0x4d, 0x73, 0x58, 0x86, 0x15, 0x37, 0x07, 0x86, + 0x03, 0x17, 0x16, 0x18, 0x15, 0xb9, 0x26, 0x35, 0x8a, 0x43, 0x22, 0xae, + 0x21, 0x52, 0x05, 0x4e, 0x5c, 0x3f, 0x3e, 0xb9, 0x2a, 0x19, 0x13, 0xfd, + 0x31, 0x47, 0x6a, 0x74, 0xaa, 0xb9, 0xc6, 0x2c, 0x13, 0x8c, 0x21, 0xc4, + 0x8d, 0x00, 0xf4, 0x24, 0xf2, 0xb7, 0xd3, 0x13, 0xad, 0x29, 0x5e, 0x50, + 0x0b, 0x0e, 0x9f, 0x9a, 0xb7, 0xf6, 0x9e, 0xba, 0x12, 0x23, 0x84, 0x8c, + 0xbe, 0x2c, 0x14, 0x1e, 0xe6, 0x79, 0x15, 0x20, 0x2d, 0x32, 0x08, 0xd8, + 0x1c, 0x87, 0x1b, 0xa8, 0xc0, 0xbb, 0x85, 0xa9, 0x71, 0x30, 0x5e, 0x39, + 0x48, 0x87, 0xdc, 0x3d, 0x03, 0x29, 0x19, 0xd1, 0xd4, 0x21, 0x3a, 0x53, + 0x2d, 0x5e, 0x78, 0xff, 0x94, 0x4b, 0x91, 0xa6, 0xb5, 0xe5, 0x42, 0x56, + 0x67, 0x6a, 0x0e, 0xf3, 0x2d, 0x6a, 0x4e, 0xd7, 0x3a, 0x81, 0xb1, 0x4d, + 0x0b, 0x66, 0x5f, 0x43, 0x28, 0x7c, 0x75, 0x8b, 0x2b, 0x99, 0x24, 0xc2, + 0x5e, 0x8c, 0x22, 0xf0, 0xd5, 0xb3, 0xfc, 0x86, 0x62, 0xf3, 0xd2, 0x6c, + 0xa7, 0x48, 0x04, 0x44, 0x5d, 0x93, 0x74, 0x37, 0x16, 0x2c, 0x19, 0x12, + 0x57, 0x49, 0xef, 0xd5, 0xd6, 0x92, 0xdc, 0x51, 0xf8, 0x55, 0x3a, 0xc0, + 0x0b, 0xdf, 0x41, 0xb5, 0x01, 0x59, 0x7e, 0x85, 0x65, 0xdb, 0x44, 0xbd, + 0x04, 0x96, 0x1a, 0xd4, 0x6e, 0x22, 0x54, 0x92, 0xdb, 0xc7, 0xc5, 0x3a, + 0xdf, 0x0c, 0xf4, 0x1b, 0xdc, 0x14, 0xf6, 0x91, 0x9c, 0xbe, 0xf8, 0x8e, + 0x70, 0xd1, 0x3a, 0x0e, 0x58, 0xe6, 0xb9, 0xd3, 0xaa, 0xa2, 0x70, 0xba, + 0xdd, 0x16, 0x13, 0x19, 0xd1, 0x96, 0x78, 0x04, 0x2f, 0xd7, 0x38, 0x8c, + 0x35, 0x1f, 0xfc, 0x58, 0xa4, 0x4c, 0xa9, 0x9a, 0xae, 0x13, 0x3b, 0xc1, + 0x20, 0x4b, 0x66, 0x0f, 0x72, 0x42, 0x0a, 0x53, 0x84, 0x54, 0x71, 0x06, + 0xdb, 0x85, 0x8f, 0x40, 0xa6, 0x09, 0xf7, 0x24, 0xc4, 0x35, 0xf7, 0x1d, + 0xd4, 0x3d, 0x54, 0x75, 0xaf, 0xc4, 0x78, 0x0f, 0xce, 0xe0, 0x0c, 0x90, + 0x0f, 0xd5, 0x2e, 0x61, 0xf7, 0x58, 0xaa, 0xf0, 0xc7, 0x37, 0x5a, 0x59, + 0x1f, 0x8a, 0x03, 0x98, 0x43, 0xb7, 0x27, 0x78, 0x4e, 0x44, 0x5a, 0xb5, + 0x29, 0xf5, 0xab, 0x9e, 0xb7, 0x2a, 0xc4, 0xa3, 0x03, 0x00, 0xe3, 0x28, + 0x57, 0xc9, 0x2a, 0x98, 0xb8, 0xa1, 0x45, 0x1d, 0xfa, 0x6e, 0xb3, 0x0d, + 0x42, 0x5a, 0xb6, 0xb1, 0x0e, 0x5c, 0xbe, 0x82, 0xe2, 0x36, 0x40, 0x4b, + 0x05, 0x28, 0xd9, 0xbc, 0x27, 0xd6, 0x77, 0x00, 0xc9, 0x29, 0x6a, 0xd6, + 0x19, 0x8f, 0x8d, 0xda, 0xe1, 0xc3, 0x8b, 0x69, 0x71, 0xd0, 0xf7, 0xc8, + 0x33, 0xef, 0xe6, 0x23, 0x6b, 0xcb, 0x00, 0x56, 0x0a, 0x9b, 0x9d, 0x60, + 0x3a, 0xd3, 0xad, 0xd9, 0x5c, 0x6a, 0x7d, 0xab, 0x35, 0x71, 0x93, 0xc5, + 0xf2, 0x6a, 0x38, 0x0e, 0xfb, 0xd9, 0x9b, 0xa5, 0xda, 0x52, 0x45, 0xef, + 0x93, 0x94, 0x5b, 0x08, 0x8c, 0x07, 0xab, 0x2e, 0x99, 0x88, 0x77, 0xb5, + 0x15, 0x66, 0x7f, 0x0e, 0xfa, 0xb0, 0x29, 0xe4, 0x88, 0xd9, 0xdd, 0x22, + 0xaf, 0x7a, 0x4e, 0xb5, 0xd0, 0x62, 0x85, 0x27, 0x33, 0xf1, 0xb7, 0x34, + 0xb1, 0xe6, 0xda, 0x9f, 0x3c, 0xfe, 0xf5, 0xd4, 0xef, 0x56, 0x48, 0x93, + 0x7a, 0x54, 0xa2, 0x7f, 0x07, 0xea, 0x31, 0xb8, 0x8b, 0xca, 0xb9, 0xdb, + 0x1e, 0x2b, 0xb5, 0x16, 0xe6, 0x0e, 0xd9, 0x3f, 0x7c, 0xf0, 0xc2, 0x3e, + 0x57, 0x64, 0x60, 0x97, 0xfb, 0xdf, 0x8c, 0x3e, 0x56, 0x22, 0x92, 0x2a, + 0xb2, 0x21, 0x00, 0x0a, 0x75, 0x89, 0x68, 0xe7, 0x51, 0xa3, 0x63, 0x05, + 0xe1, 0x6f, 0x1e, 0x1e, 0x80, 0xa2, 0x4b, 0x5d, 0xb7, 0xf4, 0xb7, 0x45, + 0x85, 0x00, 0x84, 0x6e, 0xbe, 0x0b, 0x67, 0xbf, 0x21, 0x06, 0x5a, 0x56, + 0x79, 0xe9, 0x6b, 0x0e, 0x72, 0x19, 0x2d, 0x09, 0x78, 0xd5, 0x5e, 0xc2, + 0x32, 0xee, 0x29, 0xd4, 0x7a, 0x65, 0xc7, 0xfe, 0x16, 0x86, 0xd2, 0x29, + 0x71, 0xe5, 0x91, 0x0e, 0x3e, 0x86, 0xd5, 0x00, 0xc4, 0xfc, 0xd9, 0xae, + 0xd3, 0x7c, 0x13, 0xfd, 0x62, 0xce, 0x0c, 0xb2, 0xe5, 0x1f, 0x6d, 0xed, + 0x55, 0x6f, 0xc1, 0xaa, 0xa1, 0x74, 0x59, 0x46, 0x83, 0xd5, 0x5d, 0x71, + 0x17, 0x13, 0x1d, 0x0b, 0x25, 0xfb, 0x0a, 0xcd, 0x67, 0xfe, 0x57, 0x93, + 0xc2, 0x71, 0x55, 0x6c, 0x68, 0xfa, 0x40, 0xdb, 0xdd, 0xce, 0xd5, 0x5c, + 0xce, 0x0a, 0x1d, 0xfa, 0x19, 0x30, 0xe2, 0x2b, 0x63, 0x98, 0x16, 0x2c, + 0x67, 0x69, 0x55, 0xe5, 0xc1, 0x6c, 0x6e, 0xb7, 0x92, 0x6a, 0xbb, 0x10, + 0xd3, 0x13, 0x2e, 0x73, 0x91, 0x74, 0xcb, 0x9f, 0x5c, 0x7f, 0x5c, 0x48, + 0x58, 0x36, 0x13, 0x47, 0xf7, 0x49, 0xae, 0x90, 0x15, 0x53, 0xb5, 0xe6, + 0x37, 0xfb, 0x81, 0x47, 0xb4, 0x69, 0x84, 0xca, 0x95, 0xab, 0x19, 0x2a, + 0x28, 0xc2, 0x8a, 0xf1, 0xcd, 0xf9, 0x3e, 0xd3, 0xaf, 0xe1, 0x75, 0xf7, + 0x94, 0x74, 0x1c, 0xf5, 0x32, 0xcf, 0x70, 0xbd, 0x69, 0xcc, 0xa8, 0x3c, + 0xca, 0x59, 0x53, 0xfa, 0xcb, 0xe7, 0xb6, 0x36, 0x70, 0xea, 0xe2, 0x84, + 0xfa, 0x5e, 0xbd, 0xd7, 0x59, 0x3d, 0x21, 0xc6, 0x9f, 0x5c, 0x1f, 0xa6, + 0xa9, 0xf1, 0xd3, 0x26, 0x9e, 0xff, 0xbc, 0x81, 0xfe, 0xbe, 0xee, 0x64, + 0xd9, 0x63, 0x94, 0x4b, 0x15, 0xd8, 0x95, 0xaa, 0xec, 0x10, 0xc9, 0xe2, + 0xe1, 0x05, 0x37, 0x64, 0xc4, 0xb0, 0x2e, 0xa5, 0x0e, 0x4c, 0x2d, 0x03, + 0x53, 0xf1, 0x93, 0x77, 0x9d, 0x46, 0x14, 0x67, 0x48, 0x5f, 0xad, 0x1b, + 0xdc, 0xb9, 0x74, 0xa2, 0x6c, 0xfc, 0xd2, 0xa0, 0x1f, 0x43, 0x89, 0x15, + 0xc5, 0x0c, 0xb0, 0x9e, 0x1e, 0xc2, 0xd6, 0x44, 0xd9, 0x6e, 0xfc, 0xb4, + 0x9c, 0x95, 0x90, 0xcd, 0xc3, 0x17, 0x1c, 0x6a, 0xce, 0x03, 0x56, 0x9f, + 0xe7, 0xcd, 0x7e, 0xe7, 0xa2, 0x0c, 0x2b, 0x0d, 0x59, 0xb0, 0xc9, 0x4c, + 0x6e, 0x33, 0x6d, 0x43, 0xc4, 0x3a, 0x10, 0x24, 0x03, 0x3e, 0x09, 0xb6, + 0x86, 0x13, 0xba, 0x18, 0x19, 0xd3, 0xff, 0xeb, 0xa5, 0x25, 0x8f, 0x6f, + 0xc8, 0xe6, 0x96, 0xa4, 0xd2, 0x66, 0x40, 0x81, 0x79, 0xe8, 0x39, 0x18, + 0x41, 0x02, 0x66, 0x5c, 0x30, 0x5f, 0x58, 0x9d, 0x35, 0x16, 0xc6, 0x96, + 0xa8, 0x68, 0xbc, 0x09, 0x83, 0x17, 0x2c, 0x5f, 0x5e, 0xd0, 0x1d, 0xb0, + 0x48, 0x5e, 0xcf, 0x91, 0x16, 0x4d, 0xa0, 0xba, 0xbc, 0x61, 0xa8, 0x3f, + 0x30, 0x09, 0xbb, 0xa3, 0x12, 0xcd, 0xdc, 0x29, 0xf7, 0xb0, 0xad, 0x05, + 0x17, 0xd6, 0xd3, 0x16, 0xfb, 0xe5, 0x99, 0xf4, 0x71, 0x62, 0xa3, 0x45, + 0x45, 0xc7, 0x9b, 0xaa, 0x45, 0xd3, 0x35, 0xfe, 0xfb, 0x63, 0xaf, 0xe7, + 0x85, 0x31, 0xc9, 0x66, 0x26, 0xa9, 0xda, 0x8c, 0xc6, 0xf6, 0xd5, 0xdf, + 0xb1, 0xa9, 0xf1, 0xb6, 0x3d, 0x92, 0xae, 0x4d, 0xbc, 0x74, 0x7d, 0x76, + 0x5a, 0x59, 0x8c, 0x87, 0xff, 0x95, 0x2f, 0x67, 0x37, 0x30, 0x1a, 0xc1, + 0x23, 0x2e, 0x0c, 0xaa, 0x80, 0x1c, 0xf3, 0xa3, 0x74, 0x94, 0xb2, 0xda, + 0x1a, 0xb8, 0x46, 0xec, 0x30, 0x76, 0xf4, 0xdf, 0xfb, 0x00, 0xb3, 0x6f, + 0x86, 0xc1, 0xc5, 0x3a, 0x5d, 0x11, 0x14, 0x87, 0xeb, 0x30, 0xd8, 0x33, + 0x18, 0x00, 0x01, 0x76, 0x43, 0x82, 0xcd, 0x1c, 0x36, 0x54, 0xd2, 0x64, + 0x5b, 0xfb, 0x93, 0xca, 0x20, 0x1d, 0xa3, 0x20, 0x99, 0xc3, 0x8e, 0x5c, + 0x82, 0xfc, 0x56, 0x07, 0x41, 0x4b, 0x4f, 0x54, 0xc7, 0xb5, 0xe8, 0x6d, + 0x7e, 0xd8, 0x8a, 0x56, 0xb4, 0x76, 0x1e, 0xd3, 0x82, 0x97, 0xdd, 0x2b, + 0xd9, 0x80, 0xb7, 0xb6, 0xeb, 0x3d, 0xe5, 0xe0, 0x20, 0x27, 0x8c, 0xf0, + 0xd6, 0x14, 0xc7, 0xcd, 0x79, 0xbc, 0xa0, 0x21, 0x85, 0xc3, 0x02, 0xae, + 0x73, 0xc4, 0x0a, 0x39, 0x1a, 0x98, 0x61, 0xc3, 0x86, 0xd8, 0x97, 0x67, + 0x87, 0xe9, 0x56, 0x0b, 0x61, 0xa6, 0x7e, 0x07, 0xfb, 0x0a, 0x8b, 0xd1, + 0x90, 0xbd, 0x39, 0x22, 0xdb, 0xc2, 0x7f, 0xaa, 0x79, 0xb7, 0x39, 0x09, + 0xc1, 0x69, 0xdb, 0xe2, 0x7f, 0xec, 0xde, 0x80, 0x7a, 0x6c, 0xde, 0x76, + 0xa4, 0xe8, 0xe0, 0x8d, 0x71, 0xfa, 0x62, 0xf0, 0x2e, 0x7b, 0xf4, 0xce, + 0x65, 0x18, 0x42, 0xde, 0x92, 0x1b, 0xdc, 0xc9, 0xa7, 0x8d, 0xa5, 0x91, + 0x0f, 0xa5, 0x1b, 0x89, 0xcf, 0x29, 0x10, 0x1d, 0x94, 0x78, 0x1b, 0xea, + 0x79, 0x35, 0x62, 0xd4, 0x29, 0xe6, 0x59, 0x8c, 0xc1, 0xd2, 0xf3, 0x32, + 0x71, 0x09, 0xce, 0x51, 0xd7, 0x14, 0x29, 0x92, 0xbf, 0xdf, 0x9a, 0x69, + 0xda, 0x61, 0x03, 0x0f, 0xa2, 0x0a, 0xab, 0x57, 0x1c, 0xca, 0xab, 0x42, + 0x63, 0x63, 0x1e, 0x35, 0x5d, 0x8d, 0xba, 0x6f, 0x4b, 0x6b, 0x5e, 0x7c, + 0xc0, 0x1e, 0xb7, 0xf4, 0x65, 0xbd, 0x13, 0x1c, 0xf2, 0xa9, 0x73, 0x38, + 0xc3, 0x47, 0xc9, 0x32, 0xf0, 0x30, 0x57, 0x05, 0x42, 0x52, 0xac, 0x72, + 0xee, 0x9f, 0x4e, 0x21, 0xbf, 0x38, 0x19, 0x6d, 0x48, 0xec, 0x97, 0xcb, + 0x70, 0x9e, 0xee, 0xb3, 0xa1, 0xaa, 0xa6, 0x7e, 0xe9, 0x16, 0xdf, 0xcd, + 0x1c, 0x56, 0xcf, 0xf0, 0x9f, 0x4d, 0xd1, 0x8c, 0x14, 0x50, 0x5d, 0x23, + 0x96, 0xe0, 0x1f, 0x61, 0x79, 0xbf, 0x44, 0xfd, 0xa2, 0x31, 0xf7, 0x4c, + 0x0c, 0x8d, 0x8c, 0x1b, 0xbf, 0x8d, 0x45, 0xbf, 0x0b, 0xd8, 0xfb, 0x6f, + 0xff, 0x15, 0xc0, 0x44, 0x7c, 0xb9, 0xb8, 0xf9, 0xef, 0x0d, 0x79, 0x11, + 0x3b, 0x79, 0xd2, 0x52, 0x89, 0x5a, 0xcd, 0x0f, 0x10, 0x92, 0x42, 0xfe, + 0xcf, 0x0a, 0x11, 0x8a, 0x8a, 0xda, 0xee, 0xc8, 0x6b, 0xd9, 0xab, 0xec, + 0xb4, 0x25, 0x6f, 0x8d, 0x68, 0x26, 0xe8, 0xdd, 0xf5, 0xa4, 0xe8, 0x65, + 0x37, 0x03, 0xb0, 0xad, 0x73, 0x3b, 0x4d, 0x74, 0x57, 0x7f, 0x0f, 0x6c, + 0xb0, 0x5d, 0x59, 0x80, 0x13, 0xa1, 0x6c, 0xb0, 0xed, 0x26, 0xec, 0x79, + 0x50, 0x5f, 0x5c, 0xb7, 0xa6, 0xae, 0xe8, 0x0a, 0x6d, 0x55, 0x9a, 0x7f, + 0x59, 0x23, 0xa3, 0x7e, 0x84, 0x7b, 0x3b, 0xfc, 0xde, 0xe1, 0xd9, 0x7c, + 0xd6, 0x87, 0xb3, 0x0e, 0xdb, 0xc1, 0x8c, 0x5e, 0x77, 0xb7, 0x23, 0xd7, + 0x14, 0xd4, 0x23, 0xb4, 0xac, 0x45, 0xbf, 0xfe, 0x40, 0x20, 0x4d, 0x91, + 0x20, 0x94, 0xbd, 0x58, 0xb1, 0x99, 0x69, 0xaf, 0x31, 0x68, 0xbd, 0x61, + 0x5e, 0x87, 0x81, 0x54, 0x4e, 0x2d, 0x03, 0xc2, 0xe2, 0xcd, 0xdc, 0x59, + 0xe5, 0x35, 0xcf, 0xb8, 0xfc, 0x65, 0xed, 0x46, 0xb3, 0x92, 0xe7, 0xf8, + 0x3a, 0x32, 0xaa, 0x0e, 0x5a, 0x82, 0x58, 0x4e, 0x77, 0xd8, 0x33, 0xc9, + 0xb0, 0x3e, 0xad, 0xa5, 0x92, 0xe9, 0xa9, 0x8c, 0x00, 0x72, 0x8f, 0xdc, + 0x77, 0x9d, 0x5c, 0x97, 0xd6, 0x58, 0x20, 0x1e, 0xf4, 0x55, 0x2d, 0xc0, + 0x30, 0xf0, 0x66, 0xda, 0x2d, 0x11, 0xac, 0xd4, 0x2d, 0xd5, 0x25, 0x42, + 0x1d, 0xce, 0x49, 0xb5, 0x95, 0x79, 0x9b, 0x6c, 0x65, 0xe0, 0x8a, 0xc5, + 0x9f, 0x75, 0xe3, 0xe6, 0xf8, 0xa6, 0x88, 0xd6, 0x93, 0x70, 0x4f, 0x89, + 0x94, 0x74, 0xbd, 0xef, 0xc2, 0x1a, 0x55, 0x74, 0x37, 0x44, 0x85, 0x1e, + 0xa9, 0xbb, 0x3f, 0x15, 0xc7, 0x84, 0x80, 0xa5, 0xab, 0xc3, 0x91, 0x8e, + 0xd6, 0x32, 0x46, 0x0d, 0xfa, 0xd1, 0x19, 0xd1, 0xfc, 0x02, 0xe2, 0x20, + 0xa6, 0xa9, 0xf7, 0xf4, 0xcc, 0x5b, 0x54, 0x4f, 0x4a, 0x73, 0x35, 0xda, + 0xf0, 0x31, 0x81, 0x1a, 0x82, 0xe7, 0xd4, 0xc8, 0xb4, 0x1d, 0x70, 0xa9, + 0x5d, 0x67, 0xb9, 0x7d, 0x4b, 0xcd, 0xa4, 0x81, 0xf9, 0xb2, 0x38, 0x07, + 0x16, 0xd5, 0x28, 0x82, 0xb9, 0x76, 0x5b, 0xa1, 0x09, 0x7a, 0xe7, 0x2a, + 0xcf, 0xc0, 0x3d, 0x2a, 0x42, 0x9a, 0xf3, 0xc8, 0x64, 0x15, 0x7c, 0x94, + 0xd0, 0x97, 0xee, 0x34, 0xb6, 0xf0, 0xb2, 0xba, 0x7e, 0xb2, 0xbb, 0x4e, + 0xbf, 0x88, 0xd0, 0x6b, 0xc5, 0x9c, 0xb9, 0xf2, 0x7d, 0xbf, 0x5d, 0x87, + 0xbc, 0x36, 0x4a, 0xd1, 0x1b, 0x6f, 0x40, 0x09, 0xba, 0x26, 0x51, 0xd6, + 0xc0, 0xaf, 0x27, 0xce, 0x27, 0x8d, 0x93, 0xa8, 0x6c, 0x91, 0xe7, 0x91, + 0x42, 0xc0, 0x68, 0x36, 0x5b, 0xd5, 0x56, 0x4c, 0xe2, 0x77, 0xc3, 0xac, + 0x56, 0xe3, 0x1c, 0xc2, 0xf9, 0x78, 0x02, 0x39, 0x7d, 0xed, 0x18, 0x2a, + 0x01, 0x48, 0xe6, 0xf6, 0x7e, 0x34, 0x50, 0xf4, 0x57, 0x56, 0x93, 0xdb, + 0x85, 0x1b, 0x1e, 0x1a, 0x6f, 0x3e, 0x07, 0x3c, 0xad, 0x3f, 0x8d, 0x75, + 0x53, 0xc3, 0x20, 0x72, 0x93, 0x28, 0xd2, 0x86, 0xc8, 0xa5, 0x90, 0xf2, + 0x5f, 0x13, 0xd5, 0xa5, 0xbe, 0x88, 0x9e, 0x9a, 0x57, 0x2c, 0x53, 0x3f, + 0x11, 0x25, 0x00, 0x00, 0x4a, 0x16, 0x8d, 0xd3, 0x3f, 0x2d, 0x3d, 0x88, + 0xbb, 0x4c, 0x4f, 0x9a, 0xb9, 0x97, 0x5f, 0xed, 0x71, 0xa9, 0x68, 0xd9, + 0x4a, 0x14, 0x24, 0xc7, 0xbe, 0xff, 0x85, 0x57, 0xa3, 0x21, 0xe3, 0x21, + 0x79, 0x1f, 0xd0, 0xbb, 0xb7, 0x73, 0xde, 0x60, 0x02, 0x4b, 0x8f, 0x7d, + 0xb3, 0xb3, 0x8a, 0xda, 0x4c, 0xf4, 0xb8, 0xf1, 0x31, 0xff, 0x32, 0x7b, + 0xd8, 0xfa, 0xb1, 0xcb, 0xb4, 0x58, 0xf5, 0xc8, 0x64, 0xdf, 0xfe, 0x3d, + 0x89, 0x52, 0x5c, 0x52, 0x95, 0xf3, 0xba, 0x0d, 0x1d, 0x2c, 0xc4, 0xf7, + 0x3c, 0x3b, 0x6f, 0x8e, 0xc7, 0xab, 0xad, 0x3d, 0x3d, 0x95, 0x9b, 0xc7, + 0x71, 0x36, 0xae, 0x08, 0xc3, 0x08, 0x79, 0xfa, 0x24, 0xee, 0xd9, 0xf9, + 0x63, 0xc7, 0xd9, 0x16, 0x19, 0x8e, 0x0d, 0xaf, 0x52, 0x87, 0x86, 0x7d, + 0xec, 0xe5, 0xea, 0x5a, 0xda, 0x86, 0x9d, 0x0e, 0x50, 0x53, 0x8c, 0x24, + 0xa8, 0x69, 0xc4, 0xf3, 0x85, 0x7b, 0x34, 0x67, 0x19, 0x35, 0xec, 0xd4, + 0xd4, 0x50, 0xe0, 0xe6, 0xe9, 0x29, 0x5b, 0x92, 0xee, 0xba, 0xa9, 0xef, + 0xf6, 0x35, 0x23, 0x8b, 0xdb, 0x48, 0x32, 0x25, 0x41, 0xf3, 0x55, 0x12, + 0x33, 0xc3, 0x6c, 0xed, 0x32, 0xe1, 0x64, 0x7a, 0x8d, 0xa2, 0x19, 0x5a, + 0x26, 0xf2, 0x83, 0xf1, 0xe4, 0x27, 0xdb, 0x67, 0xc3, 0x89, 0x37, 0xea, + 0x78, 0x19, 0xc6, 0xa3, 0x82, 0x84, 0x1c, 0xf3, 0x2b, 0xbe, 0xde, 0xba, + 0xe7, 0x60, 0x2e, 0xf5, 0x4e, 0xb6, 0x73, 0x29, 0xac, 0xc7, 0x55, 0xab, + 0x21, 0xe9, 0x95, 0x78, 0xd5, 0x8e, 0x27, 0xdc, 0x92, 0x5f, 0xc0, 0xcb, + 0xee, 0x66, 0x09, 0x0a, 0xfc, 0x94, 0x43, 0x44, 0x50, 0x35, 0x57, 0xf8, + 0x08, 0xf9, 0x97, 0xa2, 0x0e, 0xde, 0x81, 0xe1, 0xd1, 0xa0, 0x41, 0xfe, + 0xe6, 0x08, 0x6c, 0x98, 0x8c, 0x81, 0x46, 0x0e, 0xf9, 0x9a, 0x54, 0xfe, + 0xc3, 0x91, 0xe3, 0xd4, 0x46, 0xca, 0x52, 0xa2, 0x73, 0x9e, 0x4d, 0xa7, + 0xfd, 0xa1, 0x8e, 0x43, 0x28, 0xf5, 0xa3, 0xa2, 0x62, 0x20, 0x53, 0x62, + 0x05, 0x49, 0xba, 0x06, 0xe2, 0xeb, 0xba, 0xfb, 0x8e, 0xa0, 0x22, 0xc7, + 0xf9, 0xcc, 0x7f, 0x8b, 0xa8, 0x5d, 0x55, 0xd2, 0x24, 0xff, 0xdd, 0x2c, + 0xc1, 0xd0, 0x3d, 0xe4, 0x79, 0xea, 0xba, 0x62, 0xe5, 0xa2, 0x62, 0xf4, + 0x1f, 0xec, 0xb0, 0x07, 0xf2, 0x0d, 0x32, 0x84, 0x86, 0x81, 0x3d, 0x95, + 0xc1, 0x64, 0xfe, 0x9a, 0x3d, 0x8f, 0x4b, 0x6d, 0xfb, 0x0d, 0x42, 0xcf, + 0xbf, 0xdb, 0x51, 0xb2, 0x16, 0xa2, 0x35, 0xaa, 0xe7, 0x31, 0x54, 0xc2, + 0x87, 0xc6, 0xa5, 0x30, 0x71, 0x64, 0x65, 0xff, 0x41, 0x20, 0xb0, 0x83, + 0xdb, 0xb7, 0x95, 0xce, 0xd7, 0xcc, 0x7a, 0x77, 0xad, 0xb8, 0xb7, 0x4c, + 0xfc, 0x11, 0x05, 0x2b, 0xc4, 0xd4, 0xb6, 0x8b, 0xae, 0x13, 0xa5, 0x40, + 0x18, 0x6e, 0x0d, 0xe3, 0xc6, 0xb0, 0x81, 0x46, 0x46, 0x7e, 0x52, 0x0b, + 0x85, 0x4d, 0x98, 0xd9, 0x42, 0xdf, 0xde, 0x45, 0xc1, 0x5a, 0x33, 0x12, + 0x46, 0x26, 0xb3, 0x6f, 0xf2, 0x8b, 0x37, 0x6b, 0xfd, 0x08, 0xf4, 0x46, + 0x86, 0x89, 0x63, 0x63, 0x21, 0xe5, 0xa9, 0xb7, 0xd0, 0x09, 0x17, 0x52, + 0xee, 0xea, 0xdf, 0x97, 0xb7, 0x73, 0x2e, 0x54, 0x2c, 0x7b, 0x70, 0xd3, + 0xda, 0x26, 0x57, 0x1f, 0xb0, 0x19, 0xd9, 0x91, 0x18, 0x69, 0x75, 0x42, + 0x63, 0xcf, 0x6c, 0x8c, 0x98, 0x5e, 0x17, 0x99, 0x7e, 0x1d, 0xdc, 0x67, + 0x6d, 0x99, 0xd9, 0x02, 0x6e, 0x73, 0x90, 0x5a, 0x4f, 0x0a, 0xb4, 0x48, + 0xfb, 0xc5, 0xbd, 0xd2, 0x10, 0x05, 0xa6, 0x12, 0x68, 0x36, 0x28, 0x51, + 0x60, 0x1c, 0xa1, 0xe9, 0x90, 0x54, 0xa5, 0x53, 0xc3, 0x48, 0x9e, 0xd8, + 0x42, 0x52, 0x85, 0x0e, 0xff, 0xfe, 0xbf, 0xad, 0x3a, 0xa4, 0x57, 0x09, + 0x13, 0x38, 0x64, 0x15, 0x7c, 0xfd, 0xed, 0x91, 0x76, 0x44, 0x20, 0x84, + 0xd9, 0x90, 0xab, 0xfe, 0xfd, 0xd6, 0xab, 0xf1, 0xb3, 0x25, 0x21, 0x3d, + 0x97, 0x72, 0xb2, 0x95, 0xc5, 0x22, 0x80, 0xd9, 0x4a, 0x49, 0x9d, 0x99, + 0xc2, 0x4a, 0x9a, 0x59, 0xb3, 0x71, 0x75, 0x5b, 0xf9, 0x89, 0x7a, 0xdd, + 0xa9, 0xb3, 0xc3, 0xeb, 0x42, 0x91, 0xe2, 0x97, 0x30, 0x40, 0x48, 0x68, + 0x19, 0x3b, 0xf5, 0x7b, 0x4e, 0x33, 0x4b, 0x0c, 0xf3, 0xed, 0xda, 0x76, + 0x3f, 0xb0, 0x4b, 0x53, 0x85, 0x04, 0x33, 0x07, 0x53, 0xd8, 0x55, 0xa2, + 0xfb, 0x30, 0x2c, 0x66, 0xbd, 0x21, 0xf8, 0xfa, 0x20, 0x14, 0x9a, 0x0d, + 0x7f, 0xc9, 0x2f, 0x5b, 0x34, 0x29, 0x09, 0x16, 0xb5, 0x0a, 0x8d, 0xdf, + 0xa2, 0x84, 0x9a, 0xae, 0xe6, 0xa0, 0x50, 0x80, 0x31, 0x04, 0xd3, 0x0c, + 0x8f, 0xd1, 0x8a, 0xfd, 0xb4, 0xa5, 0xae, 0xf5, 0x3c, 0x62, 0xae, 0x45, + 0x70, 0xbb, 0x54, 0x62, 0xc8, 0x50, 0x71, 0x42, 0x85, 0xf6, 0x6f, 0xa0, + 0xf0, 0x10, 0x8a, 0x09, 0xbd, 0x71, 0x78, 0xa6, 0x5e, 0xe4, 0x03, 0x8f, + 0x3b, 0xd0, 0x5c, 0x37, 0x55, 0x1a, 0xc8, 0x57, 0x26, 0x62, 0x6c, 0xc4, + 0x67, 0x71, 0x9d, 0x97, 0xc0, 0xea, 0x35, 0x3e, 0x12, 0xd0, 0x2b, 0xc2, + 0x8f, 0x9e, 0xa6, 0x41, 0x48, 0x33, 0x83, 0x38, 0x37, 0x7e, 0xd4, 0xe3, + 0xee, 0x94, 0x8b, 0x81, 0xa4, 0x60, 0xdd, 0xdd, 0xc1, 0x8a, 0x7b, 0xda, + 0xa8, 0x46, 0xb8, 0x42, 0x3a, 0x25, 0xd6, 0x81, 0x89, 0x29, 0x21, 0xc2, + 0x0c, 0x5b, 0xfd, 0x3e, 0x8c, 0x65, 0x91, 0x52, 0xb3, 0x74, 0x1f, 0xd1, + 0x49, 0x7e, 0x1d, 0x59, 0x58, 0x96, 0xb5, 0xee, 0x32, 0xa4, 0xa8, 0x07, + 0x7c, 0xd1, 0x5b, 0x4b, 0xf8, 0x43, 0x5a, 0xa5, 0xcc, 0x60, 0xcc, 0x08, + 0x6a, 0x3c, 0x41, 0x66, 0x99, 0xe3, 0xa8, 0xe0, 0xb8, 0x87, 0xfc, 0x92, + 0xc0, 0x79, 0xc5, 0x3f, 0xd6, 0xc6, 0x8c, 0x01, 0xf4, 0xa5, 0x05, 0xad, + 0x51, 0xed, 0x04, 0xd7, 0x55, 0xc0, 0x73, 0x05, 0x0e, 0x73, 0xe5, 0x39, + 0x45, 0x5b, 0x95, 0x4a, 0x34, 0x07, 0x99, 0xdf, 0x4c, 0x35, 0xf5, 0x0c, + 0x27, 0x6d, 0xd1, 0x45, 0xf1, 0xfd, 0x24, 0xb7, 0xfe, 0xea, 0x11, 0x5d, + 0xa2, 0xc5, 0xa6, 0x81, 0x37, 0x1d, 0xc2, 0x31, 0x31, 0xfc, 0xe0, 0xf4, + 0xd7, 0xe9, 0x98, 0x8b, 0xe3, 0x70, 0x51, 0x62, 0xc8, 0x61, 0x6d, 0xec, + 0x75, 0x56, 0x71, 0xae, 0x88, 0xe0, 0x80, 0xf5, 0xb7, 0x85, 0x10, 0xb7, + 0x3d, 0x16, 0x78, 0x5f, 0x72, 0xab, 0x8f, 0x63, 0xc6, 0xd5, 0xa8, 0xc9, + 0x9c, 0xef, 0x8d, 0x9a, 0xc5, 0x4f, 0x63, 0xad, 0xc0, 0xf3, 0x1f, 0x69, + 0x0e, 0xce, 0x29, 0x92, 0xc1, 0x3b, 0xb0, 0xc5, 0xed, 0x0a, 0x7b, 0x92, + 0xd0, 0x4c, 0x9c, 0x82, 0xb0, 0x51, 0xf6, 0x33, 0x61, 0x3b, 0x76, 0x48, + 0x38, 0xf4, 0x7c, 0xaa, 0x52, 0x87, 0x15, 0x1a, 0xbe, 0xb8, 0xdc, 0x9b, + 0x16, 0xd2, 0x07, 0xf7, 0xf9, 0x74, 0xe0, 0xaf, 0x0e, 0x29, 0x05, 0xec, + 0x6c, 0x0e, 0x3b, 0xa7, 0xe7, 0xa4, 0xfc, 0xa4, 0xef, 0x57, 0x16, 0x7f, + 0x13, 0xbd, 0x8c, 0x42, 0x02, 0x55, 0x70, 0x56, 0xa5, 0xa9, 0x01, 0x29, + 0x12, 0x7d, 0x80, 0x46, 0x18, 0x8e, 0x39, 0x3f, 0x44, 0x55, 0xec, 0xef, + 0x60, 0x58, 0x7d, 0xce, 0x64, 0x8e, 0x9c, 0xea, 0xe4, 0x73, 0xd1, 0x48, + 0x9c, 0x3f, 0x92, 0xa0, 0x9a, 0x76, 0xa5, 0x5a, 0x13, 0x1f, 0x10, 0xb9, + 0xb7, 0xb1, 0xde, 0x49, 0x22, 0x58, 0xf4, 0x43, 0x5f, 0x03, 0x43, 0xc3, + 0x6c, 0xbf, 0x82, 0xaf, 0x88, 0x39, 0xfd, 0xb2, 0x28, 0x9b, 0x47, 0x3f, + 0x83, 0x3d, 0xd9, 0x7c, 0xf0, 0xc9, 0xc5, 0xa2, 0xb4, 0xd6, 0x0d, 0x59, + 0x51, 0x27, 0x60, 0x10, 0x5e, 0xbb, 0x18, 0xa6, 0x42, 0x4a, 0x9d, 0xc4, + 0x16, 0x0e, 0xb6, 0x57, 0x23, 0x03, 0x24, 0x27, 0xdc, 0x20, 0x56, 0x30, + 0x8b, 0x0f, 0xb6, 0xb7, 0x73, 0xf5, 0x36, 0x3e, 0xf6, 0x7a, 0x71, 0xa5, + 0x57, 0xcc, 0x6d, 0xc6, 0xf3, 0xdc, 0x35, 0xfb, 0x95, 0xf7, 0xa7, 0xd7, + 0x56, 0x38, 0xd4, 0x15, 0xe2, 0xd5, 0x6f, 0x70, 0x30, 0xc8, 0x7d, 0x8a, + 0x87, 0xe6, 0xd1, 0xe0, 0x50, 0x62, 0xde, 0xfa, 0x29, 0x40, 0x97, 0xa0, + 0x54, 0x63, 0x31, 0xd3, 0x08, 0x87, 0x0a, 0xdc, 0x6e, 0x5e, 0xab, 0x8d, + 0x16, 0xaf, 0x6e, 0x8b, 0x1a, 0x77, 0xf6, 0xd4, 0xe0, 0xbf, 0x59, 0xab, + 0xc7, 0xb0, 0x45, 0x18, 0xaa, 0xe6, 0x65, 0x6f, 0x7d, 0x13, 0xb2, 0xbf, + 0xb3, 0x66, 0x72, 0xfa, 0xfd, 0xee, 0xad, 0x07, 0x56, 0x51, 0x6a, 0xe2, + 0xff, 0xb2, 0xaf, 0x4d, 0xd1, 0xf2, 0x77, 0x35, 0x5e, 0x90, 0xcd, 0xe7, + 0xa8, 0x32, 0x4d, 0x9f, 0xbd, 0xa8, 0xce, 0xab, 0xf1, 0x49, 0x98, 0xb5, + 0x23, 0x5c, 0x62, 0x2d, 0x43, 0x31, 0x80, 0x87, 0xc2, 0xa8, 0xf5, 0xb9, + 0xb6, 0xae, 0x7f, 0x37, 0x13, 0xb8, 0x6b, 0x73, 0xf3, 0x56, 0x38, 0xa7, + 0x9b, 0x97, 0x69, 0x37, 0x00, 0xdc, 0xff, 0xfe, 0x58, 0xc9, 0x12, 0x47, + 0x75, 0x98, 0x1f, 0xad, 0xd8, 0xb5, 0xc8, 0x47, 0x4f, 0xd0, 0x72, 0x63, + 0x54, 0x25, 0x6c, 0x88, 0xc9, 0x9f, 0x3c, 0x82, 0xe0, 0xdd, 0x4c, 0xff, + 0x8e, 0xaf, 0x8f, 0x8e, 0xea, 0x84, 0x3f, 0x73, 0xdd, 0x9e, 0x18, 0x73, + 0x47, 0x70, 0xc7, 0xc7, 0x99, 0x65, 0xcf, 0xf3, 0xb6, 0x24, 0xed, 0x97, + 0x8f, 0xcd, 0x93, 0x1e, 0xff, 0x6e, 0x9c, 0xf1, 0x30, 0x14, 0x1a, 0x27, + 0x59, 0x6a, 0x0e, 0xf3, 0xe4, 0xfa, 0x1d, 0x65, 0xb5, 0x53, 0xe4, 0xab, + 0xb1, 0x3e, 0xe1, 0x91, 0xf4, 0x6d, 0x99, 0xca, 0x7d, 0x03, 0x08, 0x50, + 0xea, 0xa9, 0x39, 0x7f, 0x6d, 0xe7, 0x43, 0xfb, 0x64, 0xcc, 0x4b, 0x9e, + 0xa0, 0x26, 0xe4, 0x0e, 0xff, 0xb7, 0x11, 0x0a, 0x29, 0x50, 0x90, 0xd7, + 0x4d, 0x62, 0x9a, 0x4a, 0x23, 0xb7, 0xd3, 0x53, 0xde, 0x3a, 0xd1, 0xba, + 0xd3, 0x10, 0x59, 0xc6, 0xc5, 0x5e, 0xac, 0xf9, 0x61, 0x74, 0x54, 0xf4, + 0x27, 0x9f, 0x9a, 0x61, 0x13, 0xdc, 0xe5, 0x96, 0xe3, 0x95, 0x0d, 0xcc, + 0xbd, 0x81, 0x74, 0x79, 0x73, 0xef, 0x2e, 0x0b, 0x0f, 0x91, 0x65, 0x3c, + 0x26, 0x7c, 0x47, 0x10, 0x31, 0x0b, 0xfb, 0x41, 0x0c, 0xc2, 0xa8, 0xc4, + 0x0e, 0xbd, 0x0a, 0x8c, 0xa4, 0x80, 0x45, 0x57, 0x62, 0x0b, 0x4d, 0x44, + 0x5e, 0x59, 0x77, 0xfd, 0x3d, 0xf3, 0xd7, 0x92, 0x49, 0xc1, 0xcb, 0x8a, + 0x54, 0x56, 0x3b, 0xde, 0xcf, 0x16, 0x9a, 0x65, 0xbe, 0xac, 0x64, 0xe1, + 0xd4, 0xd4, 0x1e, 0xac, 0x6b, 0x4a, 0xad, 0xc4, 0x33, 0xac, 0xcb, 0x83, + 0xf4, 0x4d, 0xe8, 0xb6, 0xd7, 0x23, 0xd7, 0x71, 0x25, 0xa2, 0x25, 0x3d, + 0x7e, 0xf0, 0x3b, 0x7f, 0x61, 0x11, 0x56, 0xd4, 0x83, 0xc8, 0xc0, 0x29, + 0x38, 0x10, 0x73, 0xad, 0x6a, 0xb7, 0xb9, 0xd2, 0x2e, 0x9f, 0xae, 0x16, + 0x5e, 0xa6, 0x13, 0x1c, 0xc2, 0x17, 0x73, 0x43, 0x03, 0xdd, 0xa6, 0xaf, + 0x9a, 0x17, 0x31, 0xb8, 0x86, 0x97, 0xc2, 0xd6, 0xe6, 0xed, 0xd4, 0xe1, + 0x7d, 0xb9, 0xa6, 0x96, 0xc1, 0x4b, 0xcb, 0x11, 0x1e, 0xe1, 0xe0, 0xd2, + 0x28, 0x69, 0x68, 0x3b, 0x21, 0x17, 0x63, 0x0c, 0xc0, 0x49, 0x30, 0x22, + 0x3a, 0x59, 0x72, 0xe6, 0x47, 0xb4, 0xdc, 0xa8, 0x29, 0x1c, 0x89, 0xa6, + 0x3a, 0x77, 0x99, 0xea, 0x46, 0xce, 0x38, 0xda, 0x31, 0x88, 0xad, 0xe7, + 0x26, 0xce, 0xc6, 0x56, 0x04, 0x30, 0xfa, 0x01, 0xac, 0xbb, 0xe2, 0xb8, + 0x23, 0xe4, 0x9d, 0x4f, 0x77, 0x02, 0x00, 0x28, 0xf1, 0xe0, 0x19, 0x3f, + 0x22, 0x4f, 0x22, 0x69, 0x87, 0xc0, 0x4e, 0x26, 0x33, 0xfe, 0x6c, 0x70, + 0x56, 0x3b, 0x60, 0x5f, 0xfb, 0xf8, 0x43, 0xcf, 0x3f, 0xb9, 0xcb, 0x80, + 0x22, 0xbb, 0x0a, 0xa8, 0x1c, 0x3e, 0x7e, 0x4d, 0x42, 0x60, 0x5c, 0x8e, + 0xfa, 0x42, 0xb3, 0x95, 0xe7, 0x92, 0x6b, 0xec, 0x7a, 0x95, 0x88, 0x98, + 0xe3, 0xf9, 0x0d, 0xe5, 0x08, 0xf1, 0x26, 0x96, 0x2a, 0x81, 0x2b, 0x7c, + 0x0d, 0x12, 0xa0, 0x7f, 0x7b, 0x39, 0xf6, 0xcc, 0x1b, 0x2d, 0x2c, 0xe9, + 0x5b, 0x02, 0x9b, 0x5c, 0x94, 0x51, 0x13, 0xe8, 0xa0, 0x19, 0xce, 0xde, + 0x07, 0x1b, 0xda, 0x39, 0x14, 0xb5, 0x8b, 0xcf, 0x79, 0x3e, 0x2b, 0xb8, + 0x75, 0xab, 0x81, 0xee, 0x5e, 0x08, 0x33, 0xc3, 0x49, 0x5b, 0x4a, 0x9c, + 0x74, 0x34, 0xde, 0x08, 0x61, 0x03, 0x38, 0xe3, 0xd8, 0xff, 0xc5, 0xc0, + 0xb5, 0x40, 0xd5, 0x26, 0x57, 0x85, 0xf1, 0xb7, 0x77, 0xb6, 0x36, 0xe0, + 0x8d, 0x43, 0x3a, 0xef, 0xfe, 0x0f, 0xf7, 0xee, 0x67, 0x6c, 0x7b, 0xd1, + 0x83, 0xf6, 0x10, 0xda, 0x67, 0x04, 0x3a, 0x27, 0xd8, 0x3a, 0xcb, 0x9d, + 0x4c, 0xa6, 0x9a, 0xc7, 0xea, 0x07, 0xc6, 0x76, 0x79, 0x1b, 0x23, 0x4a, + 0x68, 0x2f, 0x14, 0x84, 0x42, 0x79, 0xe8, 0x1f, 0xf2, 0xe6, 0xac, 0x72, + 0xb0, 0xb0, 0xb6, 0x39, 0x95, 0x40, 0xa4, 0x6e, 0x54, 0x2e, 0xb7, 0xb5, + 0x13, 0x70, 0x48, 0x0d, 0x27, 0xed, 0x2c, 0xa2, 0x64, 0x53, 0xb4, 0x04, + 0x84, 0xab, 0xd8, 0xea, 0x2a, 0x8c, 0xac, 0x5b, 0x1d, 0xb8, 0xb2, 0xbe, + 0x55, 0x2b, 0x4a, 0x47, 0xfc, 0xe0, 0x15, 0x78, 0xb6, 0xd6, 0xff, 0x20, + 0xa8, 0x8a, 0xec, 0x8b, 0x30, 0xef, 0xc5, 0xc6, 0xec, 0xa0, 0xdf, 0xd3, + 0xc4, 0x2b, 0x4a, 0xdf, 0xef, 0x5c, 0x46, 0xb3, 0x31, 0xc7, 0x5f, 0x8f, + 0x1e, 0x99, 0x76, 0x81, 0x71, 0x61, 0xdb, 0xc3, 0xc4, 0x0f, 0x66, 0x7b, + 0xd7, 0x44, 0xc7, 0x8d, 0x12, 0x38, 0x71, 0x7c, 0xd8, 0x41, 0xf6, 0x8a, + 0xb9, 0xba, 0xd2, 0x1f, 0xa1, 0x27, 0x64, 0x67, 0x51, 0xb2, 0xaf, 0xea, + 0x02, 0x95, 0x79, 0x20, 0x0a, 0xc8, 0xaa, 0x03, 0x11, 0xb6, 0x8b, 0x7d, + 0x86, 0xb7, 0xef, 0x5e, 0x3f, 0x0b, 0x91, 0x47, 0xf0, 0x43, 0xb4, 0x54, + 0x1d, 0x16, 0x66, 0xe9, 0x63, 0x1a, 0x55, 0xaf, 0x34, 0xad, 0x11, 0x68, + 0x4d, 0x36, 0xb7, 0x0c, 0x6d, 0x4d, 0xed, 0xba, 0x14, 0xe8, 0xf6, 0xe2, + 0x15, 0x64, 0xb6, 0x15, 0x28, 0xbf, 0xd2, 0x4d, 0xb6, 0x6f, 0xca, 0x5f, + 0x81, 0x1b, 0xf0, 0x31, 0xf5, 0xd3, 0xe0, 0x06, 0xc7, 0xf3, 0x0c, 0x18, + 0x91, 0x45, 0x22, 0xa2, 0x30, 0x48, 0x82, 0xeb, 0x42, 0xfc, 0x8f, 0x2a, + 0xa3, 0x1a, 0x8d, 0x84, 0x28, 0x20, 0x16, 0x95, 0xd9, 0x66, 0x67, 0x2b, + 0xef, 0xc6, 0x6e, 0x56, 0x1c, 0x62, 0x74, 0x16, 0x5c, 0x3e, 0x17, 0xd0, + 0xb7, 0xdd, 0x70, 0xb6, 0x0e, 0x79, 0x46, 0xc5, 0x4e, 0x72, 0x46, 0x69, + 0xf5, 0xa1, 0x1c, 0x7b, 0xd5, 0x67, 0x5c, 0xb3, 0x46, 0x4d, 0x18, 0x31, + 0x47, 0x42, 0x20, 0xe6, 0x12, 0x84, 0x4e, 0x16, 0x0f, 0x4a, 0xd0, 0xc4, + 0x91, 0xa3, 0xbd, 0x91, 0xcd, 0x86, 0x4c, 0xcd, 0x4b, 0x2e, 0x62, 0x84, + 0xea, 0x19, 0x2d, 0x21, 0x1a, 0x64, 0xc4, 0xd2, 0x24, 0x92, 0x96, 0x04, + 0x66, 0xb5, 0x4a, 0xe4, 0xa9, 0xd6, 0xaf, 0x12, 0x9b, 0xb5, 0x59, 0xe0, + 0x5c, 0x84, 0x84, 0x7c, 0x68, 0x99, 0xd8, 0x23, 0xa2, 0x15, 0xa7, 0x82, + 0xa5, 0x66, 0x95, 0x8f, 0xfe, 0x57, 0xc1, 0x12, 0x6c, 0x89, 0xe5, 0x5b, + 0x5d, 0x64, 0xdb, 0x81, 0x4f, 0x77, 0x3c, 0xc8, 0x52, 0x4e, 0x2a, 0xd6, + 0x74, 0x3c, 0x4b, 0x11, 0xfc, 0xc1, 0x7c, 0x01, 0xba, 0x0f, 0x0f, 0x57, + 0x8a, 0xbe, 0x5b, 0x16, 0x88, 0x96, 0xe6, 0xe9, 0x60, 0xcf, 0x66, 0xe9, + 0xe6, 0x07, 0xb0, 0x0b, 0xa3, 0xa0, 0xad, 0xdf, 0x70, 0xd4, 0xcb, 0x2e, + 0x33, 0x2f, 0xe5, 0xf2, 0x1e, 0x0d, 0x74, 0x7a, 0xf9, 0x4a, 0x0f, 0x32, + 0xb4, 0xa1, 0xc9, 0xf5, 0x3f, 0x0a, 0x06, 0xf9, 0x67, 0x45, 0x9c, 0xd9, + 0x58, 0xd4, 0x0e, 0x72, 0x55, 0x47, 0x49, 0x9b, 0xab, 0x9c, 0x66, 0xe7, + 0x4d, 0x9a, 0x02, 0x1b, 0x41, 0xad, 0xe5, 0x8c, 0x7f, 0xa1, 0xdc, 0xad, + 0xcd, 0x74, 0xda, 0x9f, 0xfa, 0x87, 0x32, 0xc1, 0x07, 0x8e, 0x9b, 0xef, + 0x28, 0x2f, 0x17, 0x6d, 0xdb, 0x84, 0x4b, 0xa8, 0x7d, 0x31, 0xa8, 0x32, + 0xe4, 0x9a, 0x1e, 0x0e, 0xef, 0x68, 0xf4, 0xac, 0x03, 0x6c, 0x68, 0xcc, + 0x28, 0xbb, 0xfb, 0x21, 0xb8, 0x11, 0xd7, 0xf9, 0xe8, 0x24, 0x37, 0xdf, + 0xe0, 0xb2, 0xef, 0xd6, 0xec, 0xdf, 0xcf, 0xf5, 0x50, 0x19, 0xa3, 0xa9, + 0x1b, 0x01, 0x2e, 0x94, 0x42, 0xb0, 0x14, 0x5d, 0x0e, 0x37, 0x46, 0x4a, + 0x52, 0x53, 0x60, 0x6b, 0x89, 0xc9, 0xca, 0xed, 0x0a, 0x0c, 0x18, 0x33, + 0x3c, 0x40, 0x42, 0x76, 0x7a, 0x7d, 0xb6, 0x10, 0x29, 0x3e, 0x42, 0x75, + 0xa6, 0xbf, 0xcb, 0xd3, 0xdc, 0xe1, 0x00, 0x05, 0x08, 0x25, 0x67, 0x6c, + 0x72, 0xde, 0x26, 0x72, 0x88, 0xbe, 0xfa, 0x05, 0x57, 0x77, 0x78, 0x83, + 0xce, 0xd5, 0x44, 0x49, 0x8b, 0xab, 0xbc, 0xca, 0xd3, 0x1c, 0x34, 0x4a, + 0xaa, 0xc7, 0xe5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, + 0x17, 0x22, 0x2a, 0x2f, 0x36, 0x3d, 0x43, +}; + +#endif /* MLD_CONFIG_PARAMETER_SET == 87 */ + +#endif /* !EXPECTED_TEST_VECTORS_H */ diff --git a/examples/disabled_apis/main.c b/examples/disabled_apis/main.c new file mode 100644 index 000000000..28247a4ee --- /dev/null +++ b/examples/disabled_apis/main.c @@ -0,0 +1,91 @@ +/* + * Copyright (c) The mlkem-native project authors + * Copyright (c) The mldsa-native project authors + * SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT + */ + +#include +#include +#include + +#include +#include "expected_test_vectors.h" + +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) +#include "test_only_rng/notrandombytes.h" +#endif + +#define CHECK(x) \ + do \ + { \ + int rc; \ + rc = (x); \ + if (!rc) \ + { \ + fprintf(stderr, "ERROR (%s,%d)\n", __FILE__, __LINE__); \ + return 1; \ + } \ + } while (0) + +#define TEST_MSG \ + "This is a test message for ML-DSA digital signature algorithm!" +#define TEST_MSG_LEN (sizeof(TEST_MSG) - 1) + +#define TEST_CTX "test_context_123" +#define TEST_CTX_LEN (sizeof(TEST_CTX) - 1) + +int main(void) +{ +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) + { + uint8_t pk[CRYPTO_PUBLICKEYBYTES]; + uint8_t sk[CRYPTO_SECRETKEYBYTES]; + + randombytes_reset(); + + printf("Generating keypair... "); + CHECK(crypto_sign_keypair(pk, sk) == 0); + printf("DONE\n"); + + printf("Checking keypair against expected values... "); + CHECK(memcmp(pk, expected_pk, CRYPTO_PUBLICKEYBYTES) == 0); + CHECK(memcmp(sk, expected_sk, CRYPTO_SECRETKEYBYTES) == 0); + printf("DONE\n"); + } +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ + +#if !defined(MLD_CONFIG_NO_SIGN_API) + { + uint8_t sig[CRYPTO_BYTES]; + size_t siglen; + + printf("Signing message... "); + CHECK(crypto_sign_signature(sig, &siglen, (const uint8_t *)TEST_MSG, + TEST_MSG_LEN, (const uint8_t *)TEST_CTX, + TEST_CTX_LEN, expected_sk) == 0); + printf("DONE\n"); + +#if !defined(MLD_CONFIG_NO_VERIFY_API) + printf("Verifying generated signature... "); + CHECK(crypto_sign_verify(sig, siglen, (const uint8_t *)TEST_MSG, + TEST_MSG_LEN, (const uint8_t *)TEST_CTX, + TEST_CTX_LEN, expected_pk) == 0); + printf("DONE\n"); +#endif /* !MLD_CONFIG_NO_VERIFY_API */ + } +#endif /* !MLD_CONFIG_NO_SIGN_API */ + +#if !defined(MLD_CONFIG_NO_VERIFY_API) + { + printf("Verifying expected signature... "); + CHECK(crypto_sign_verify(expected_sig, sizeof(expected_sig), + (const uint8_t *)TEST_MSG, TEST_MSG_LEN, + (const uint8_t *)TEST_CTX, TEST_CTX_LEN, + expected_pk) == 0); + printf("DONE\n"); + } +#endif /* !MLD_CONFIG_NO_VERIFY_API */ + + printf("All tests passed!\n"); + return 0; +} diff --git a/examples/disabled_apis/mldsa_native b/examples/disabled_apis/mldsa_native new file mode 120000 index 000000000..ac02e87eb --- /dev/null +++ b/examples/disabled_apis/mldsa_native @@ -0,0 +1 @@ +../basic/mldsa_native \ No newline at end of file diff --git a/examples/disabled_apis/test_only_rng b/examples/disabled_apis/test_only_rng new file mode 120000 index 000000000..440411ebf --- /dev/null +++ b/examples/disabled_apis/test_only_rng @@ -0,0 +1 @@ +../basic/test_only_rng \ No newline at end of file diff --git a/examples/disabled_apis_native/.gitignore b/examples/disabled_apis_native/.gitignore new file mode 100644 index 000000000..eb98a94f1 --- /dev/null +++ b/examples/disabled_apis_native/.gitignore @@ -0,0 +1,3 @@ +# SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT + +build diff --git a/examples/disabled_apis_native/Makefile b/examples/disabled_apis_native/Makefile new file mode 100644 index 000000000..233af8d53 --- /dev/null +++ b/examples/disabled_apis_native/Makefile @@ -0,0 +1,118 @@ +# Copyright (c) The mlkem-native project authors +# Copyright (c) The mldsa-native project authors +# SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT + +.PHONY: build run clean +.DEFAULT_GOAL := all + +CC ?= gcc + +# Adjust CFLAGS if needed +CFLAGS := \ + -Wall \ + -Wextra \ + -Werror=unused-result \ + -Wpedantic \ + -Werror \ + -Wmissing-prototypes \ + -Wshadow \ + -Wpointer-arith \ + -Wredundant-decls \ + -Wconversion \ + -Wsign-conversion \ + -Wno-long-long \ + -Wno-unknown-pragmas \ + -Wno-unused-command-line-argument \ + -O3 \ + -fomit-frame-pointer \ + -std=c99 \ + -pedantic \ + -MMD \ + $(CFLAGS) + +AUTO ?= 1 +include auto.mk + +# Append cross-prefix for cross compilation +ifeq (,$(findstring $(CROSS_PREFIX),$(CC))) +CC := $(CROSS_PREFIX)$(CC) +endif + +MLD_SOURCE=$(wildcard \ + mldsa_native/src/*.c \ + mldsa_native/src/**/*.c \ + mldsa_native/src/**/**/*.c \ + mldsa_native/src/**/**/**/*.c \ + mldsa_native/src/**/**/**/**/*.c \ + mldsa_native/src/**/**/**/*.S \ + mldsa_native/src/**/**/**/**/*.S) + +INC=-Imldsa_native +RNG_SOURCE=$(wildcard test_only_rng/*.c) +ALL_SOURCE=$(MLD_SOURCE) $(RNG_SOURCE) main.c + +BUILD_DIR=build + +CFLAGS += -DMLD_CONFIG_NAMESPACE_PREFIX=mldsa +CFLAGS += -DMLD_CONFIG_USE_NATIVE_BACKEND_ARITH +CFLAGS += -DMLD_CONFIG_USE_NATIVE_BACKEND_FIPS202 + +# Disabled API flags +KEYGEN_ONLY_FLAGS = -DMLD_CONFIG_NO_SIGN_API -DMLD_CONFIG_NO_VERIFY_API +SIGN_ONLY_FLAGS = -DMLD_CONFIG_NO_KEYPAIR_API -DMLD_CONFIG_NO_VERIFY_API +VERIFY_ONLY_FLAGS = -DMLD_CONFIG_NO_KEYPAIR_API -DMLD_CONFIG_NO_SIGN_API +SIGN_VERIFY_FLAGS = -DMLD_CONFIG_NO_KEYPAIR_API + +# Per-target CFLAGS for each combination +$(BUILD_DIR)/test_keygen_only_44: CFLAGS += -DMLD_CONFIG_PARAMETER_SET=44 $(KEYGEN_ONLY_FLAGS) +$(BUILD_DIR)/test_keygen_only_65: CFLAGS += -DMLD_CONFIG_PARAMETER_SET=65 $(KEYGEN_ONLY_FLAGS) +$(BUILD_DIR)/test_keygen_only_87: CFLAGS += -DMLD_CONFIG_PARAMETER_SET=87 $(KEYGEN_ONLY_FLAGS) +$(BUILD_DIR)/test_sign_only_44: CFLAGS += -DMLD_CONFIG_PARAMETER_SET=44 $(SIGN_ONLY_FLAGS) +$(BUILD_DIR)/test_sign_only_65: CFLAGS += -DMLD_CONFIG_PARAMETER_SET=65 $(SIGN_ONLY_FLAGS) +$(BUILD_DIR)/test_sign_only_87: CFLAGS += -DMLD_CONFIG_PARAMETER_SET=87 $(SIGN_ONLY_FLAGS) +$(BUILD_DIR)/test_verify_only_44: CFLAGS += -DMLD_CONFIG_PARAMETER_SET=44 $(VERIFY_ONLY_FLAGS) +$(BUILD_DIR)/test_verify_only_65: CFLAGS += -DMLD_CONFIG_PARAMETER_SET=65 $(VERIFY_ONLY_FLAGS) +$(BUILD_DIR)/test_verify_only_87: CFLAGS += -DMLD_CONFIG_PARAMETER_SET=87 $(VERIFY_ONLY_FLAGS) +$(BUILD_DIR)/test_sign_verify_44: CFLAGS += -DMLD_CONFIG_PARAMETER_SET=44 $(SIGN_VERIFY_FLAGS) +$(BUILD_DIR)/test_sign_verify_65: CFLAGS += -DMLD_CONFIG_PARAMETER_SET=65 $(SIGN_VERIFY_FLAGS) +$(BUILD_DIR)/test_sign_verify_87: CFLAGS += -DMLD_CONFIG_PARAMETER_SET=87 $(SIGN_VERIFY_FLAGS) + +ALL_BINARIES = \ + $(BUILD_DIR)/test_keygen_only_44 \ + $(BUILD_DIR)/test_keygen_only_65 \ + $(BUILD_DIR)/test_keygen_only_87 \ + $(BUILD_DIR)/test_sign_only_44 \ + $(BUILD_DIR)/test_sign_only_65 \ + $(BUILD_DIR)/test_sign_only_87 \ + $(BUILD_DIR)/test_verify_only_44 \ + $(BUILD_DIR)/test_verify_only_65 \ + $(BUILD_DIR)/test_verify_only_87 \ + $(BUILD_DIR)/test_sign_verify_44 \ + $(BUILD_DIR)/test_sign_verify_65 \ + $(BUILD_DIR)/test_sign_verify_87 + +$(ALL_BINARIES): $(ALL_SOURCE) + echo "$@" + mkdir -p $(BUILD_DIR) + $(CC) $(CFLAGS) $(INC) $^ -o $@ + +all: build + +build: $(ALL_BINARIES) + +run: $(ALL_BINARIES) + $(EXEC_WRAPPER) ./$(BUILD_DIR)/test_keygen_only_44 + $(EXEC_WRAPPER) ./$(BUILD_DIR)/test_keygen_only_65 + $(EXEC_WRAPPER) ./$(BUILD_DIR)/test_keygen_only_87 + $(EXEC_WRAPPER) ./$(BUILD_DIR)/test_sign_only_44 + $(EXEC_WRAPPER) ./$(BUILD_DIR)/test_sign_only_65 + $(EXEC_WRAPPER) ./$(BUILD_DIR)/test_sign_only_87 + $(EXEC_WRAPPER) ./$(BUILD_DIR)/test_verify_only_44 + $(EXEC_WRAPPER) ./$(BUILD_DIR)/test_verify_only_65 + $(EXEC_WRAPPER) ./$(BUILD_DIR)/test_verify_only_87 + $(EXEC_WRAPPER) ./$(BUILD_DIR)/test_sign_verify_44 + $(EXEC_WRAPPER) ./$(BUILD_DIR)/test_sign_verify_65 + $(EXEC_WRAPPER) ./$(BUILD_DIR)/test_sign_verify_87 + +clean: + rm -rf $(BUILD_DIR) diff --git a/examples/disabled_apis_native/README.md b/examples/disabled_apis_native/README.md new file mode 100644 index 000000000..8e97c5a02 --- /dev/null +++ b/examples/disabled_apis_native/README.md @@ -0,0 +1,14 @@ +[//]: # (SPDX-License-Identifier: CC-BY-4.0) + +# Disabled APIs (Native Backends) + +Same as [disabled_apis](../disabled_apis), but with native arithmetic +and FIPS-202 backends enabled (`MLD_CONFIG_USE_NATIVE_BACKEND_ARITH`, +`MLD_CONFIG_USE_NATIVE_BACKEND_FIPS202`). + +## Usage + +```bash +make build # Build all 12 variants +make run # Run all 12 variants +``` diff --git a/examples/disabled_apis_native/auto.mk b/examples/disabled_apis_native/auto.mk new file mode 120000 index 000000000..ce5c161cb --- /dev/null +++ b/examples/disabled_apis_native/auto.mk @@ -0,0 +1 @@ +../../test/mk/auto.mk \ No newline at end of file diff --git a/examples/disabled_apis_native/expected_test_vectors.h b/examples/disabled_apis_native/expected_test_vectors.h new file mode 120000 index 000000000..dadc3e0d1 --- /dev/null +++ b/examples/disabled_apis_native/expected_test_vectors.h @@ -0,0 +1 @@ +../disabled_apis/expected_test_vectors.h \ No newline at end of file diff --git a/examples/disabled_apis_native/main.c b/examples/disabled_apis_native/main.c new file mode 120000 index 000000000..e33fe0713 --- /dev/null +++ b/examples/disabled_apis_native/main.c @@ -0,0 +1 @@ +../disabled_apis/main.c \ No newline at end of file diff --git a/examples/disabled_apis_native/mldsa_native b/examples/disabled_apis_native/mldsa_native new file mode 120000 index 000000000..ac02e87eb --- /dev/null +++ b/examples/disabled_apis_native/mldsa_native @@ -0,0 +1 @@ +../basic/mldsa_native \ No newline at end of file diff --git a/examples/disabled_apis_native/test_only_rng b/examples/disabled_apis_native/test_only_rng new file mode 120000 index 000000000..440411ebf --- /dev/null +++ b/examples/disabled_apis_native/test_only_rng @@ -0,0 +1 @@ +../basic/test_only_rng \ No newline at end of file diff --git a/examples/monolithic_build/mldsa_native/mldsa_native_config.h b/examples/monolithic_build/mldsa_native/mldsa_native_config.h index a8ccf0dc5..565d10fc8 100644 --- a/examples/monolithic_build/mldsa_native/mldsa_native_config.h +++ b/examples/monolithic_build/mldsa_native/mldsa_native_config.h @@ -126,6 +126,57 @@ *****************************************************************************/ /* #define MLD_CONFIG_EXTERNAL_API_QUALIFIER */ +/****************************************************************************** + * Name: MLD_CONFIG_NO_KEYPAIR_API + * + * Description: By default, mldsa-native includes support for generating key + * pairs. If you don't need this, set MLD_CONFIG_NO_KEYPAIR_API + * to exclude crypto_sign_keypair, crypto_sign_keypair_internal, + * crypto_sign_pk_from_sk, and all internal APIs only needed by + * those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_KEYPAIR_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_SIGN_API + * + * Description: By default, mldsa-native includes support for creating + * signatures. If you don't need this, set MLD_CONFIG_NO_SIGN_API + * to exclude crypto_sign, crypto_sign_signature, + * crypto_sign_signature_extmu, crypto_sign_signature_internal, + * crypto_sign_signature_pre_hash_internal, + * crypto_sign_signature_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_SIGN_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_VERIFY_API + * + * Description: By default, mldsa-native includes support for verifying + * signatures. If you don't need this, set + * MLD_CONFIG_NO_VERIFY_API to exclude crypto_sign_open, + * crypto_sign_verify, crypto_sign_verify_extmu, + * crypto_sign_verify_internal, + * crypto_sign_verify_pre_hash_internal, + * crypto_sign_verify_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_VERIFY_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_INTERNAL_API_ONLY + * + * Description: Set this to remove all public APIs except + * crypto_sign_keypair_internal, crypto_sign_signature_internal, + * and crypto_sign_verify_internal. + * + *****************************************************************************/ +/* #define MLD_CONFIG_INTERNAL_API_ONLY */ + /****************************************************************************** * Name: MLD_CONFIG_NO_RANDOMIZED_API * diff --git a/examples/monolithic_build_multilevel/mldsa_native/mldsa_native_config.h b/examples/monolithic_build_multilevel/mldsa_native/mldsa_native_config.h index 1f5f2ba64..a6113ebc1 100644 --- a/examples/monolithic_build_multilevel/mldsa_native/mldsa_native_config.h +++ b/examples/monolithic_build_multilevel/mldsa_native/mldsa_native_config.h @@ -128,6 +128,57 @@ *****************************************************************************/ /* #define MLD_CONFIG_EXTERNAL_API_QUALIFIER */ +/****************************************************************************** + * Name: MLD_CONFIG_NO_KEYPAIR_API + * + * Description: By default, mldsa-native includes support for generating key + * pairs. If you don't need this, set MLD_CONFIG_NO_KEYPAIR_API + * to exclude crypto_sign_keypair, crypto_sign_keypair_internal, + * crypto_sign_pk_from_sk, and all internal APIs only needed by + * those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_KEYPAIR_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_SIGN_API + * + * Description: By default, mldsa-native includes support for creating + * signatures. If you don't need this, set MLD_CONFIG_NO_SIGN_API + * to exclude crypto_sign, crypto_sign_signature, + * crypto_sign_signature_extmu, crypto_sign_signature_internal, + * crypto_sign_signature_pre_hash_internal, + * crypto_sign_signature_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_SIGN_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_VERIFY_API + * + * Description: By default, mldsa-native includes support for verifying + * signatures. If you don't need this, set + * MLD_CONFIG_NO_VERIFY_API to exclude crypto_sign_open, + * crypto_sign_verify, crypto_sign_verify_extmu, + * crypto_sign_verify_internal, + * crypto_sign_verify_pre_hash_internal, + * crypto_sign_verify_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_VERIFY_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_INTERNAL_API_ONLY + * + * Description: Set this to remove all public APIs except + * crypto_sign_keypair_internal, crypto_sign_signature_internal, + * and crypto_sign_verify_internal. + * + *****************************************************************************/ +/* #define MLD_CONFIG_INTERNAL_API_ONLY */ + /****************************************************************************** * Name: MLD_CONFIG_NO_RANDOMIZED_API * diff --git a/examples/monolithic_build_multilevel_native/mldsa_native/mldsa_native_config.h b/examples/monolithic_build_multilevel_native/mldsa_native/mldsa_native_config.h index 80052d3f1..9a4b69f28 100644 --- a/examples/monolithic_build_multilevel_native/mldsa_native/mldsa_native_config.h +++ b/examples/monolithic_build_multilevel_native/mldsa_native/mldsa_native_config.h @@ -132,6 +132,57 @@ *****************************************************************************/ #define MLD_CONFIG_EXTERNAL_API_QUALIFIER static +/****************************************************************************** + * Name: MLD_CONFIG_NO_KEYPAIR_API + * + * Description: By default, mldsa-native includes support for generating key + * pairs. If you don't need this, set MLD_CONFIG_NO_KEYPAIR_API + * to exclude crypto_sign_keypair, crypto_sign_keypair_internal, + * crypto_sign_pk_from_sk, and all internal APIs only needed by + * those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_KEYPAIR_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_SIGN_API + * + * Description: By default, mldsa-native includes support for creating + * signatures. If you don't need this, set MLD_CONFIG_NO_SIGN_API + * to exclude crypto_sign, crypto_sign_signature, + * crypto_sign_signature_extmu, crypto_sign_signature_internal, + * crypto_sign_signature_pre_hash_internal, + * crypto_sign_signature_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_SIGN_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_VERIFY_API + * + * Description: By default, mldsa-native includes support for verifying + * signatures. If you don't need this, set + * MLD_CONFIG_NO_VERIFY_API to exclude crypto_sign_open, + * crypto_sign_verify, crypto_sign_verify_extmu, + * crypto_sign_verify_internal, + * crypto_sign_verify_pre_hash_internal, + * crypto_sign_verify_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_VERIFY_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_INTERNAL_API_ONLY + * + * Description: Set this to remove all public APIs except + * crypto_sign_keypair_internal, crypto_sign_signature_internal, + * and crypto_sign_verify_internal. + * + *****************************************************************************/ +/* #define MLD_CONFIG_INTERNAL_API_ONLY */ + /****************************************************************************** * Name: MLD_CONFIG_NO_RANDOMIZED_API * diff --git a/examples/monolithic_build_native/mldsa_native/mldsa_native_config.h b/examples/monolithic_build_native/mldsa_native/mldsa_native_config.h index cd9c692c9..6b552156e 100644 --- a/examples/monolithic_build_native/mldsa_native/mldsa_native_config.h +++ b/examples/monolithic_build_native/mldsa_native/mldsa_native_config.h @@ -126,6 +126,57 @@ *****************************************************************************/ /* #define MLD_CONFIG_EXTERNAL_API_QUALIFIER */ +/****************************************************************************** + * Name: MLD_CONFIG_NO_KEYPAIR_API + * + * Description: By default, mldsa-native includes support for generating key + * pairs. If you don't need this, set MLD_CONFIG_NO_KEYPAIR_API + * to exclude crypto_sign_keypair, crypto_sign_keypair_internal, + * crypto_sign_pk_from_sk, and all internal APIs only needed by + * those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_KEYPAIR_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_SIGN_API + * + * Description: By default, mldsa-native includes support for creating + * signatures. If you don't need this, set MLD_CONFIG_NO_SIGN_API + * to exclude crypto_sign, crypto_sign_signature, + * crypto_sign_signature_extmu, crypto_sign_signature_internal, + * crypto_sign_signature_pre_hash_internal, + * crypto_sign_signature_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_SIGN_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_VERIFY_API + * + * Description: By default, mldsa-native includes support for verifying + * signatures. If you don't need this, set + * MLD_CONFIG_NO_VERIFY_API to exclude crypto_sign_open, + * crypto_sign_verify, crypto_sign_verify_extmu, + * crypto_sign_verify_internal, + * crypto_sign_verify_pre_hash_internal, + * crypto_sign_verify_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_VERIFY_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_INTERNAL_API_ONLY + * + * Description: Set this to remove all public APIs except + * crypto_sign_keypair_internal, crypto_sign_signature_internal, + * and crypto_sign_verify_internal. + * + *****************************************************************************/ +/* #define MLD_CONFIG_INTERNAL_API_ONLY */ + /****************************************************************************** * Name: MLD_CONFIG_NO_RANDOMIZED_API * diff --git a/examples/multilevel_build/mldsa_native/mldsa_native_config.h b/examples/multilevel_build/mldsa_native/mldsa_native_config.h index 39a100819..5faca3840 100644 --- a/examples/multilevel_build/mldsa_native/mldsa_native_config.h +++ b/examples/multilevel_build/mldsa_native/mldsa_native_config.h @@ -127,6 +127,57 @@ *****************************************************************************/ /* #define MLD_CONFIG_EXTERNAL_API_QUALIFIER */ +/****************************************************************************** + * Name: MLD_CONFIG_NO_KEYPAIR_API + * + * Description: By default, mldsa-native includes support for generating key + * pairs. If you don't need this, set MLD_CONFIG_NO_KEYPAIR_API + * to exclude crypto_sign_keypair, crypto_sign_keypair_internal, + * crypto_sign_pk_from_sk, and all internal APIs only needed by + * those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_KEYPAIR_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_SIGN_API + * + * Description: By default, mldsa-native includes support for creating + * signatures. If you don't need this, set MLD_CONFIG_NO_SIGN_API + * to exclude crypto_sign, crypto_sign_signature, + * crypto_sign_signature_extmu, crypto_sign_signature_internal, + * crypto_sign_signature_pre_hash_internal, + * crypto_sign_signature_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_SIGN_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_VERIFY_API + * + * Description: By default, mldsa-native includes support for verifying + * signatures. If you don't need this, set + * MLD_CONFIG_NO_VERIFY_API to exclude crypto_sign_open, + * crypto_sign_verify, crypto_sign_verify_extmu, + * crypto_sign_verify_internal, + * crypto_sign_verify_pre_hash_internal, + * crypto_sign_verify_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_VERIFY_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_INTERNAL_API_ONLY + * + * Description: Set this to remove all public APIs except + * crypto_sign_keypair_internal, crypto_sign_signature_internal, + * and crypto_sign_verify_internal. + * + *****************************************************************************/ +/* #define MLD_CONFIG_INTERNAL_API_ONLY */ + /****************************************************************************** * Name: MLD_CONFIG_NO_RANDOMIZED_API * diff --git a/examples/multilevel_build_native/mldsa_native/mldsa_native_config.h b/examples/multilevel_build_native/mldsa_native/mldsa_native_config.h index 71b8161b5..30bf3e292 100644 --- a/examples/multilevel_build_native/mldsa_native/mldsa_native_config.h +++ b/examples/multilevel_build_native/mldsa_native/mldsa_native_config.h @@ -129,6 +129,57 @@ *****************************************************************************/ /* #define MLD_CONFIG_EXTERNAL_API_QUALIFIER */ +/****************************************************************************** + * Name: MLD_CONFIG_NO_KEYPAIR_API + * + * Description: By default, mldsa-native includes support for generating key + * pairs. If you don't need this, set MLD_CONFIG_NO_KEYPAIR_API + * to exclude crypto_sign_keypair, crypto_sign_keypair_internal, + * crypto_sign_pk_from_sk, and all internal APIs only needed by + * those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_KEYPAIR_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_SIGN_API + * + * Description: By default, mldsa-native includes support for creating + * signatures. If you don't need this, set MLD_CONFIG_NO_SIGN_API + * to exclude crypto_sign, crypto_sign_signature, + * crypto_sign_signature_extmu, crypto_sign_signature_internal, + * crypto_sign_signature_pre_hash_internal, + * crypto_sign_signature_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_SIGN_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_VERIFY_API + * + * Description: By default, mldsa-native includes support for verifying + * signatures. If you don't need this, set + * MLD_CONFIG_NO_VERIFY_API to exclude crypto_sign_open, + * crypto_sign_verify, crypto_sign_verify_extmu, + * crypto_sign_verify_internal, + * crypto_sign_verify_pre_hash_internal, + * crypto_sign_verify_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_VERIFY_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_INTERNAL_API_ONLY + * + * Description: Set this to remove all public APIs except + * crypto_sign_keypair_internal, crypto_sign_signature_internal, + * and crypto_sign_verify_internal. + * + *****************************************************************************/ +/* #define MLD_CONFIG_INTERNAL_API_ONLY */ + /****************************************************************************** * Name: MLD_CONFIG_NO_RANDOMIZED_API * diff --git a/mldsa/mldsa_native.h b/mldsa/mldsa_native.h index fd150a9df..770781945 100644 --- a/mldsa/mldsa_native.h +++ b/mldsa/mldsa_native.h @@ -205,6 +205,7 @@ extern "C" { #endif +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) /************************************************* * Name: crypto_sign_keypair_internal * @@ -243,6 +244,7 @@ int MLD_API_NAMESPACE(keypair_internal)( #endif ); +#if !defined(MLD_CONFIG_INTERNAL_API_ONLY) /************************************************* * Name: crypto_sign_keypair * @@ -276,7 +278,10 @@ int MLD_API_NAMESPACE(keypair)( MLD_CONFIG_CONTEXT_PARAMETER_TYPE context #endif ); +#endif /* !MLD_CONFIG_INTERNAL_API_ONLY */ +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) /************************************************* * Name: crypto_sign_signature_internal * @@ -323,6 +328,7 @@ int MLD_API_NAMESPACE(signature_internal)( #endif ); +#if !defined(MLD_CONFIG_INTERNAL_API_ONLY) /************************************************* * Name: crypto_sign_signature * @@ -438,7 +444,10 @@ int MLD_API_NAMESPACE(sign)( MLD_CONFIG_CONTEXT_PARAMETER_TYPE context #endif ); +#endif /* !MLD_CONFIG_INTERNAL_API_ONLY */ +#endif /* !MLD_CONFIG_NO_SIGN_API */ +#if !defined(MLD_CONFIG_NO_VERIFY_API) /************************************************* * Name: crypto_sign_verify_internal * @@ -477,6 +486,7 @@ int MLD_API_NAMESPACE(verify_internal)( #endif ); +#if !defined(MLD_CONFIG_INTERNAL_API_ONLY) /************************************************* * Name: crypto_sign_verify * @@ -581,6 +591,8 @@ int MLD_API_NAMESPACE(open)( MLD_CONFIG_CONTEXT_PARAMETER_TYPE context #endif ); +#endif /* !MLD_CONFIG_INTERNAL_API_ONLY */ +#endif /* !MLD_CONFIG_NO_VERIFY_API */ /************************************************* * Hash algorithm constants for domain separation @@ -599,6 +611,8 @@ int MLD_API_NAMESPACE(open)( #define MLD_PREHASH_SHAKE_128 11 #define MLD_PREHASH_SHAKE_256 12 +#if !defined(MLD_CONFIG_INTERNAL_API_ONLY) +#if !defined(MLD_CONFIG_NO_SIGN_API) /************************************************* * Name: crypto_sign_signature_pre_hash_internal * @@ -647,7 +661,9 @@ int MLD_API_NAMESPACE(signature_pre_hash_internal)( MLD_CONFIG_CONTEXT_PARAMETER_TYPE context #endif ); +#endif /* !MLD_CONFIG_NO_SIGN_API */ +#if !defined(MLD_CONFIG_NO_VERIFY_API) /************************************************* * Name: crypto_sign_verify_pre_hash_internal * @@ -691,7 +707,9 @@ int MLD_API_NAMESPACE(verify_pre_hash_internal)( MLD_CONFIG_CONTEXT_PARAMETER_TYPE context #endif ); +#endif /* !MLD_CONFIG_NO_VERIFY_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) /************************************************* * Name: crypto_sign_signature_pre_hash_shake256 * @@ -731,7 +749,9 @@ int MLD_API_NAMESPACE(signature_pre_hash_shake256)( MLD_CONFIG_CONTEXT_PARAMETER_TYPE context #endif ); +#endif /* !MLD_CONFIG_NO_SIGN_API */ +#if !defined(MLD_CONFIG_NO_VERIFY_API) /************************************************* * Name: crypto_sign_verify_pre_hash_shake256 * @@ -767,10 +787,13 @@ int MLD_API_NAMESPACE(verify_pre_hash_shake256)( MLD_CONFIG_CONTEXT_PARAMETER_TYPE context #endif ); +#endif /* !MLD_CONFIG_NO_VERIFY_API */ +#endif /* !MLD_CONFIG_INTERNAL_API_ONLY */ /* Maximum formatted domain separation message length */ #define MLD_DOMAIN_SEPARATION_MAX_BYTES (2 + 255 + 11 + 64) +#if !defined(MLD_CONFIG_INTERNAL_API_ONLY) /************************************************* * Name: mld_prepare_domain_separation_prefix * @@ -815,6 +838,7 @@ size_t MLD_API_NAMESPACE(prepare_domain_separation_prefix)( uint8_t prefix[MLD_DOMAIN_SEPARATION_MAX_BYTES], const uint8_t *ph, size_t phlen, const uint8_t *ctx, size_t ctxlen, int hashalg); +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) /************************************************* * Name: crypto_sign_pk_from_sk * @@ -850,6 +874,8 @@ int MLD_API_NAMESPACE(pk_from_sk)( MLD_CONFIG_CONTEXT_PARAMETER_TYPE context #endif ); +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ +#endif /* !MLD_CONFIG_INTERNAL_API_ONLY */ #ifdef __cplusplus } diff --git a/mldsa/mldsa_native_config.h b/mldsa/mldsa_native_config.h index 25dc88771..df405e32b 100644 --- a/mldsa/mldsa_native_config.h +++ b/mldsa/mldsa_native_config.h @@ -111,6 +111,57 @@ *****************************************************************************/ /* #define MLD_CONFIG_EXTERNAL_API_QUALIFIER */ +/****************************************************************************** + * Name: MLD_CONFIG_NO_KEYPAIR_API + * + * Description: By default, mldsa-native includes support for generating key + * pairs. If you don't need this, set MLD_CONFIG_NO_KEYPAIR_API + * to exclude crypto_sign_keypair, crypto_sign_keypair_internal, + * crypto_sign_pk_from_sk, and all internal APIs only needed by + * those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_KEYPAIR_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_SIGN_API + * + * Description: By default, mldsa-native includes support for creating + * signatures. If you don't need this, set MLD_CONFIG_NO_SIGN_API + * to exclude crypto_sign, crypto_sign_signature, + * crypto_sign_signature_extmu, crypto_sign_signature_internal, + * crypto_sign_signature_pre_hash_internal, + * crypto_sign_signature_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_SIGN_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_VERIFY_API + * + * Description: By default, mldsa-native includes support for verifying + * signatures. If you don't need this, set + * MLD_CONFIG_NO_VERIFY_API to exclude crypto_sign_open, + * crypto_sign_verify, crypto_sign_verify_extmu, + * crypto_sign_verify_internal, + * crypto_sign_verify_pre_hash_internal, + * crypto_sign_verify_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_VERIFY_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_INTERNAL_API_ONLY + * + * Description: Set this to remove all public APIs except + * crypto_sign_keypair_internal, crypto_sign_signature_internal, + * and crypto_sign_verify_internal. + * + *****************************************************************************/ +/* #define MLD_CONFIG_INTERNAL_API_ONLY */ + /****************************************************************************** * Name: MLD_CONFIG_NO_RANDOMIZED_API * diff --git a/mldsa/src/fips202/fips202.c b/mldsa/src/fips202/fips202.c index 78a1a41a3..1523f0868 100644 --- a/mldsa/src/fips202/fips202.c +++ b/mldsa/src/fips202/fips202.c @@ -262,6 +262,7 @@ void mld_shake256_release(mld_shake256ctx *state) mld_zeroize(state, sizeof(mld_shake256ctx)); } +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) || !defined(MLD_CONFIG_INTERNAL_API_ONLY) MLD_INTERNAL_API void mld_shake256(uint8_t *out, size_t outlen, const uint8_t *in, size_t inlen) { @@ -273,5 +274,6 @@ void mld_shake256(uint8_t *out, size_t outlen, const uint8_t *in, size_t inlen) mld_shake256_squeeze(out, outlen, &state); mld_shake256_release(&state); } +#endif /* !MLD_CONFIG_NO_KEYPAIR_API || !MLD_CONFIG_INTERNAL_API_ONLY */ #endif /* !MLD_CONFIG_MULTILEVEL_NO_SHARED */ diff --git a/mldsa/src/fips202/fips202.h b/mldsa/src/fips202/fips202.h index 3f0c8f6ce..c0e42663c 100644 --- a/mldsa/src/fips202/fips202.h +++ b/mldsa/src/fips202/fips202.h @@ -220,6 +220,8 @@ __contract__( assigns(memory_slice(state, sizeof(mld_shake256ctx))) ); +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) || \ + !defined(MLD_CONFIG_INTERNAL_API_ONLY) #define mld_shake256 MLD_NAMESPACE(shake256) /************************************************* * Name: mld_shake256 @@ -240,5 +242,6 @@ __contract__( requires(memory_no_alias(out, outlen)) assigns(memory_slice(out, outlen)) ); +#endif /* !MLD_CONFIG_NO_KEYPAIR_API || !MLD_CONFIG_INTERNAL_API_ONLY */ #endif /* !MLD_FIPS202_FIPS202_H */ diff --git a/mldsa/src/fips202/fips202x4.c b/mldsa/src/fips202/fips202x4.c index 5b98e4a00..74a6ebbf2 100644 --- a/mldsa/src/fips202/fips202x4.c +++ b/mldsa/src/fips202/fips202x4.c @@ -22,6 +22,8 @@ #include "fips202x4.h" #include "keccakf1600.h" +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) || !defined(MLD_CONFIG_NO_SIGN_API) || \ + !defined(MLD_CONFIG_REDUCE_RAM) static void mld_keccak_absorb_once_x4(uint64_t *s, uint32_t r, const uint8_t *in0, const uint8_t *in1, const uint8_t *in2, const uint8_t *in3, @@ -119,6 +121,8 @@ __contract__( nblocks--; } } +#endif /* !MLD_CONFIG_NO_KEYPAIR_API || !MLD_CONFIG_NO_SIGN_API || \ + !MLD_CONFIG_REDUCE_RAM */ #if !defined(MLD_CONFIG_REDUCE_RAM) MLD_INTERNAL_API @@ -150,6 +154,7 @@ void mld_shake128x4_release(mld_shake128x4ctx *state) } #endif /* !MLD_CONFIG_REDUCE_RAM */ +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) || !defined(MLD_CONFIG_NO_SIGN_API) MLD_INTERNAL_API void mld_shake256x4_absorb_once(mld_shake256x4ctx *state, const uint8_t *in0, const uint8_t *in1, const uint8_t *in2, @@ -177,6 +182,7 @@ void mld_shake256x4_release(mld_shake256x4ctx *state) /* @[FIPS204, Section 3.6.3] Destruction of intermediate values. */ mld_zeroize(state, sizeof(mld_shake256x4ctx)); } +#endif /* !MLD_CONFIG_NO_KEYPAIR_API || !MLD_CONFIG_NO_SIGN_API */ #endif /* !MLD_CONFIG_MULTILEVEL_NO_SHARED && !MLD_CONFIG_SERIAL_FIPS202_ONLY \ */ diff --git a/mldsa/src/fips202/fips202x4.h b/mldsa/src/fips202/fips202x4.h index 91a1a927b..0b524a8fd 100644 --- a/mldsa/src/fips202/fips202x4.h +++ b/mldsa/src/fips202/fips202x4.h @@ -71,6 +71,7 @@ MLD_INTERNAL_API void mld_shake128x4_release(mld_shake128x4ctx *state); #endif /* !MLD_CONFIG_REDUCE_RAM */ +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) || !defined(MLD_CONFIG_NO_SIGN_API) #define mld_shake256x4_absorb_once MLD_NAMESPACE(shake256x4_absorb_once) MLD_INTERNAL_API void mld_shake256x4_absorb_once(mld_shake256x4ctx *state, const uint8_t *in0, @@ -112,6 +113,7 @@ void mld_shake256x4_init(mld_shake256x4ctx *state); #define mld_shake256x4_release MLD_NAMESPACE(shake256x4_release) MLD_INTERNAL_API void mld_shake256x4_release(mld_shake256x4ctx *state); +#endif /* !MLD_CONFIG_NO_KEYPAIR_API || !MLD_CONFIG_NO_SIGN_API */ #endif /* !MLD_CONFIG_SERIAL_FIPS202_ONLY */ #endif /* !MLD_FIPS202_FIPS202X4_H */ diff --git a/mldsa/src/fips202/keccakf1600.c b/mldsa/src/fips202/keccakf1600.c index bda3da9a4..527d91c58 100644 --- a/mldsa/src/fips202/keccakf1600.c +++ b/mldsa/src/fips202/keccakf1600.c @@ -84,6 +84,7 @@ void mld_keccakf1600_xor_bytes(uint64_t *state, const unsigned char *data, #endif /* !MLD_SYS_LITTLE_ENDIAN */ } +#if (!defined(MLD_CONFIG_NO_KEYPAIR_API) || !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_REDUCE_RAM)) && !defined(MLD_CONFIG_SERIAL_FIPS202_ONLY) MLD_INTERNAL_API void mld_keccakf1600x4_extract_bytes(uint64_t *state, unsigned char *data0, unsigned char *data1, unsigned char *data2, @@ -131,6 +132,8 @@ void mld_keccakf1600x4_permute(uint64_t *state) mld_keccakf1600_permute(state + MLD_KECCAK_LANES * 2); mld_keccakf1600_permute(state + MLD_KECCAK_LANES * 3); } +#endif /* (!MLD_CONFIG_NO_KEYPAIR_API || !MLD_CONFIG_NO_SIGN_API || \ + !MLD_CONFIG_REDUCE_RAM) && !MLD_CONFIG_SERIAL_FIPS202_ONLY */ static const uint64_t mld_KeccakF_RoundConstants[MLD_KECCAK_NROUNDS] = { (uint64_t)0x0000000000000001ULL, (uint64_t)0x0000000000008082ULL, diff --git a/mldsa/src/fips202/keccakf1600.h b/mldsa/src/fips202/keccakf1600.h index c226804a3..8b6621d23 100644 --- a/mldsa/src/fips202/keccakf1600.h +++ b/mldsa/src/fips202/keccakf1600.h @@ -43,6 +43,9 @@ __contract__( assigns(memory_slice(state, sizeof(uint64_t) * MLD_KECCAK_LANES)) ); +#if (!defined(MLD_CONFIG_NO_KEYPAIR_API) || \ + !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_REDUCE_RAM)) && \ + !defined(MLD_CONFIG_SERIAL_FIPS202_ONLY) #define mld_keccakf1600x4_extract_bytes \ MLD_NAMESPACE(keccakf1600x4_extract_bytes) MLD_INTERNAL_API @@ -93,6 +96,8 @@ __contract__( requires(memory_no_alias(state, sizeof(uint64_t) * MLD_KECCAK_LANES * MLD_KECCAK_WAY)) assigns(memory_slice(state, sizeof(uint64_t) * MLD_KECCAK_LANES * MLD_KECCAK_WAY)) ); +#endif /* (!MLD_CONFIG_NO_KEYPAIR_API || !MLD_CONFIG_NO_SIGN_API || \ + !MLD_CONFIG_REDUCE_RAM) && !MLD_CONFIG_SERIAL_FIPS202_ONLY */ #define mld_keccakf1600_permute MLD_NAMESPACE(keccakf1600_permute) MLD_INTERNAL_API diff --git a/mldsa/src/fips202/native/aarch64/auto.h b/mldsa/src/fips202/native/aarch64/auto.h index 4375cc197..5da037a15 100644 --- a/mldsa/src/fips202/native/aarch64/auto.h +++ b/mldsa/src/fips202/native/aarch64/auto.h @@ -37,6 +37,7 @@ #include "x1_scalar.h" #endif +#if !defined(MLD_CONFIG_SERIAL_FIPS202_ONLY) && !defined(MLD_CONFIG_REDUCE_RAM) /* * Keccak-f1600x2/x4 * @@ -68,4 +69,6 @@ #endif /* !__ARM_FEATURE_SHA3 */ +#endif /* !MLD_CONFIG_SERIAL_FIPS202_ONLY && !MLD_CONFIG_REDUCE_RAM */ + #endif /* !MLD_FIPS202_NATIVE_AARCH64_AUTO_H */ diff --git a/mldsa/src/native/aarch64/meta.h b/mldsa/src/native/aarch64/meta.h index 2923b8c55..688ba4c14 100644 --- a/mldsa/src/native/aarch64/meta.h +++ b/mldsa/src/native/aarch64/meta.h @@ -66,6 +66,7 @@ static MLD_INLINE int mld_rej_uniform_native(int32_t *r, unsigned len, return (int)mld_rej_uniform_asm(r, buf, buflen, mld_rej_uniform_table); } +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) #if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLDSA_ETA == 2 MLD_MUST_CHECK_RETURN_VALUE static MLD_INLINE int mld_rej_uniform_eta2_native(int32_t *r, unsigned len, @@ -119,7 +120,9 @@ static MLD_INLINE int mld_rej_uniform_eta4_native(int32_t *r, unsigned len, return (int)outlen; } #endif /* MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLDSA_ETA == 4 */ +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) #if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || \ (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87) MLD_MUST_CHECK_RETURN_VALUE @@ -140,6 +143,7 @@ static MLD_INLINE int mld_poly_decompose_88_native(int32_t *a1, int32_t *a0) } #endif /* MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 44 \ */ +#endif /* !MLD_CONFIG_NO_SIGN_API */ MLD_MUST_CHECK_RETURN_VALUE static MLD_INLINE int mld_poly_caddq_native(int32_t a[MLDSA_N]) @@ -148,6 +152,7 @@ static MLD_INLINE int mld_poly_caddq_native(int32_t a[MLDSA_N]) return MLD_NATIVE_FUNC_SUCCESS; } +#if !defined(MLD_CONFIG_NO_VERIFY_API) #if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || \ (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87) MLD_MUST_CHECK_RETURN_VALUE @@ -170,6 +175,7 @@ static MLD_INLINE int mld_poly_use_hint_88_native(int32_t *b, const int32_t *a, } #endif /* MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 44 \ */ +#endif /* !MLD_CONFIG_NO_VERIFY_API */ MLD_MUST_CHECK_RETURN_VALUE static MLD_INLINE int mld_poly_chknorm_native(const int32_t *a, int32_t B) @@ -177,6 +183,7 @@ static MLD_INLINE int mld_poly_chknorm_native(const int32_t *a, int32_t B) return mld_poly_chknorm_asm(a, B); } +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) #if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLD_CONFIG_PARAMETER_SET == 44 MLD_MUST_CHECK_RETURN_VALUE static MLD_INLINE int mld_polyz_unpack_17_native(int32_t *r, const uint8_t *buf) @@ -206,6 +213,7 @@ static MLD_INLINE int mld_poly_pointwise_montgomery_native( mld_poly_pointwise_montgomery_asm(out, in0, in1); return MLD_NATIVE_FUNC_SUCCESS; } +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ #if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLDSA_L == 4 MLD_MUST_CHECK_RETURN_VALUE diff --git a/mldsa/src/native/aarch64/src/arith_native_aarch64.h b/mldsa/src/native/aarch64/src/arith_native_aarch64.h index 9737b70e4..17e10ae99 100644 --- a/mldsa/src/native/aarch64/src/arith_native_aarch64.h +++ b/mldsa/src/native/aarch64/src/arith_native_aarch64.h @@ -26,13 +26,22 @@ extern const int32_t mld_aarch64_intt_zetas_layer123456[]; #define mld_rej_uniform_table MLD_NAMESPACE(rej_uniform_table) extern const uint8_t mld_rej_uniform_table[]; +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) #define mld_rej_uniform_eta_table MLD_NAMESPACE(rej_uniform_eta_table) extern const uint8_t mld_rej_uniform_eta_table[]; +#endif +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) +#if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLD_CONFIG_PARAMETER_SET == 44 #define mld_polyz_unpack_17_indices MLD_NAMESPACE(polyz_unpack_17_indices) extern const uint8_t mld_polyz_unpack_17_indices[]; +#endif +#if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || \ + (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87) #define mld_polyz_unpack_19_indices MLD_NAMESPACE(polyz_unpack_19_indices) extern const uint8_t mld_polyz_unpack_19_indices[]; +#endif +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ /* @@ -60,6 +69,7 @@ MLD_MUST_CHECK_RETURN_VALUE uint64_t mld_rej_uniform_asm(int32_t *r, const uint8_t *buf, unsigned buflen, const uint8_t *table); +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) #define mld_rej_uniform_eta2_asm MLD_NAMESPACE(rej_uniform_eta2_asm) MLD_MUST_CHECK_RETURN_VALUE uint64_t mld_rej_uniform_eta2_asm(int32_t *r, const uint8_t *buf, @@ -69,12 +79,15 @@ uint64_t mld_rej_uniform_eta2_asm(int32_t *r, const uint8_t *buf, MLD_MUST_CHECK_RETURN_VALUE uint64_t mld_rej_uniform_eta4_asm(int32_t *r, const uint8_t *buf, unsigned buflen, const uint8_t *table); +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) #define mld_poly_decompose_32_asm MLD_NAMESPACE(poly_decompose_32_asm) void mld_poly_decompose_32_asm(int32_t *a1, int32_t *a0); #define mld_poly_decompose_88_asm MLD_NAMESPACE(poly_decompose_88_asm) void mld_poly_decompose_88_asm(int32_t *a1, int32_t *a0); +#endif /* !MLD_CONFIG_NO_SIGN_API */ #define mld_poly_caddq_asm MLD_NAMESPACE(poly_caddq_asm) void mld_poly_caddq_asm(int32_t *a) @@ -87,11 +100,13 @@ __contract__( ensures(array_bound(a, 0, MLDSA_N, 0, MLDSA_Q)) ); +#if !defined(MLD_CONFIG_NO_VERIFY_API) #define mld_poly_use_hint_32_asm MLD_NAMESPACE(poly_use_hint_32_asm) void mld_poly_use_hint_32_asm(int32_t *b, const int32_t *a, const int32_t *h); #define mld_poly_use_hint_88_asm MLD_NAMESPACE(poly_use_hint_88_asm) void mld_poly_use_hint_88_asm(int32_t *b, const int32_t *a, const int32_t *h); +#endif /* !MLD_CONFIG_NO_VERIFY_API */ #define mld_poly_chknorm_asm MLD_NAMESPACE(poly_chknorm_asm) MLD_MUST_CHECK_RETURN_VALUE @@ -106,6 +121,7 @@ __contract__( ensures((return_value == 0) == array_abs_bound(a, 0, MLDSA_N, B)) ); +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) #define mld_polyz_unpack_17_asm MLD_NAMESPACE(polyz_unpack_17_asm) void mld_polyz_unpack_17_asm(int32_t *r, const uint8_t *buf, const uint8_t *indices); @@ -118,6 +134,7 @@ void mld_polyz_unpack_19_asm(int32_t *r, const uint8_t *buf, MLD_NAMESPACE(poly_pointwise_montgomery_asm) void mld_poly_pointwise_montgomery_asm(int32_t *, const int32_t *, const int32_t *); +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ #define mld_polyvecl_pointwise_acc_montgomery_l4_asm \ MLD_NAMESPACE(polyvecl_pointwise_acc_montgomery_l4_asm) diff --git a/mldsa/src/native/aarch64/src/pointwise_montgomery.S b/mldsa/src/native/aarch64/src/pointwise_montgomery.S index 6ed2f9ebb..4dddd7a0e 100644 --- a/mldsa/src/native/aarch64/src/pointwise_montgomery.S +++ b/mldsa/src/native/aarch64/src/pointwise_montgomery.S @@ -3,7 +3,9 @@ */ #include "../../../common.h" -#if defined(MLD_ARITH_BACKEND_AARCH64) && !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) +#if defined(MLD_ARITH_BACKEND_AARCH64) && \ + (!defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API)) && \ + !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) /* * WARNING: This file is auto-derived from the mldsa-native source file @@ -76,4 +78,5 @@ Lpoly_pointwise_montgomery_loop_start: MLD_ASM_FN_SIZE(poly_pointwise_montgomery_asm) -#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED */ +#endif /* MLD_ARITH_BACKEND_AARCH64 && (!MLD_CONFIG_NO_SIGN_API || \ + !MLD_CONFIG_NO_VERIFY_API) && !MLD_CONFIG_MULTILEVEL_NO_SHARED */ diff --git a/mldsa/src/native/aarch64/src/poly_decompose_32_asm.S b/mldsa/src/native/aarch64/src/poly_decompose_32_asm.S index 64c0c3c94..4dd4a6b60 100644 --- a/mldsa/src/native/aarch64/src/poly_decompose_32_asm.S +++ b/mldsa/src/native/aarch64/src/poly_decompose_32_asm.S @@ -4,7 +4,7 @@ */ #include "../../../common.h" -#if defined(MLD_ARITH_BACKEND_AARCH64) && !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ +#if defined(MLD_ARITH_BACKEND_AARCH64) && !defined(MLD_CONFIG_NO_SIGN_API) && !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87)) /* @@ -80,6 +80,7 @@ Lpoly_decompose_32_loop: MLD_ASM_FN_SIZE(poly_decompose_32_asm) -#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ +#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_NO_SIGN_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 65 \ || MLD_CONFIG_PARAMETER_SET == 87) */ diff --git a/mldsa/src/native/aarch64/src/poly_decompose_88_asm.S b/mldsa/src/native/aarch64/src/poly_decompose_88_asm.S index 60fc06a6c..51c2bf6e0 100644 --- a/mldsa/src/native/aarch64/src/poly_decompose_88_asm.S +++ b/mldsa/src/native/aarch64/src/poly_decompose_88_asm.S @@ -4,7 +4,7 @@ */ #include "../../../common.h" -#if defined(MLD_ARITH_BACKEND_AARCH64) && !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ +#if defined(MLD_ARITH_BACKEND_AARCH64) && !defined(MLD_CONFIG_NO_SIGN_API) && !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLD_CONFIG_PARAMETER_SET == 44) /* @@ -80,6 +80,7 @@ Lpoly_decompose_88_loop: MLD_ASM_FN_SIZE(poly_decompose_88_asm) -#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ +#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_NO_SIGN_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 44) \ */ diff --git a/mldsa/src/native/aarch64/src/poly_use_hint_32_asm.S b/mldsa/src/native/aarch64/src/poly_use_hint_32_asm.S index e772c1c17..e7c03ad00 100644 --- a/mldsa/src/native/aarch64/src/poly_use_hint_32_asm.S +++ b/mldsa/src/native/aarch64/src/poly_use_hint_32_asm.S @@ -4,7 +4,7 @@ */ #include "../../../common.h" -#if defined(MLD_ARITH_BACKEND_AARCH64) && !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ +#if defined(MLD_ARITH_BACKEND_AARCH64) && !defined(MLD_CONFIG_NO_VERIFY_API) && !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87)) /* @@ -97,6 +97,7 @@ Lpoly_use_hint_32_loop: MLD_ASM_FN_SIZE(poly_use_hint_32_asm) -#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ +#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_NO_VERIFY_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 65 \ || MLD_CONFIG_PARAMETER_SET == 87) */ diff --git a/mldsa/src/native/aarch64/src/poly_use_hint_88_asm.S b/mldsa/src/native/aarch64/src/poly_use_hint_88_asm.S index a2429c8da..af9e0f786 100644 --- a/mldsa/src/native/aarch64/src/poly_use_hint_88_asm.S +++ b/mldsa/src/native/aarch64/src/poly_use_hint_88_asm.S @@ -4,7 +4,7 @@ */ #include "../../../common.h" -#if defined(MLD_ARITH_BACKEND_AARCH64) && !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ +#if defined(MLD_ARITH_BACKEND_AARCH64) && !defined(MLD_CONFIG_NO_VERIFY_API) && !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLD_CONFIG_PARAMETER_SET == 44) /* @@ -105,6 +105,7 @@ Lpoly_use_hint_88_loop: MLD_ASM_FN_SIZE(poly_use_hint_88_asm) -#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ +#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_NO_VERIFY_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 44) \ */ diff --git a/mldsa/src/native/aarch64/src/polyz_unpack_17_asm.S b/mldsa/src/native/aarch64/src/polyz_unpack_17_asm.S index c677c4866..3d18cdeea 100644 --- a/mldsa/src/native/aarch64/src/polyz_unpack_17_asm.S +++ b/mldsa/src/native/aarch64/src/polyz_unpack_17_asm.S @@ -5,7 +5,9 @@ */ #include "../../../common.h" -#if defined(MLD_ARITH_BACKEND_AARCH64) && !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ +#if defined(MLD_ARITH_BACKEND_AARCH64) && \ + (!defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API)) && \ + !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLD_CONFIG_PARAMETER_SET == 44) /* @@ -66,6 +68,7 @@ Lpolyz_unpack_17_loop: MLD_ASM_FN_SIZE(polyz_unpack_17_asm) -#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ +#endif /* MLD_ARITH_BACKEND_AARCH64 && (!MLD_CONFIG_NO_SIGN_API || \ + !MLD_CONFIG_NO_VERIFY_API) && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 44) \ */ diff --git a/mldsa/src/native/aarch64/src/polyz_unpack_19_asm.S b/mldsa/src/native/aarch64/src/polyz_unpack_19_asm.S index 271a1643c..3620d11c4 100644 --- a/mldsa/src/native/aarch64/src/polyz_unpack_19_asm.S +++ b/mldsa/src/native/aarch64/src/polyz_unpack_19_asm.S @@ -5,7 +5,9 @@ */ #include "../../../common.h" -#if defined(MLD_ARITH_BACKEND_AARCH64) && !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ +#if defined(MLD_ARITH_BACKEND_AARCH64) && \ + (!defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API)) && \ + !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87)) /* @@ -63,6 +65,7 @@ Lpolyz_unpack_19_loop: MLD_ASM_FN_SIZE(polyz_unpack_19_asm) -#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ +#endif /* MLD_ARITH_BACKEND_AARCH64 && (!MLD_CONFIG_NO_SIGN_API || \ + !MLD_CONFIG_NO_VERIFY_API) && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 65 \ || MLD_CONFIG_PARAMETER_SET == 87) */ diff --git a/mldsa/src/native/aarch64/src/polyz_unpack_table.c b/mldsa/src/native/aarch64/src/polyz_unpack_table.c index 1fb8ff400..3d482285c 100644 --- a/mldsa/src/native/aarch64/src/polyz_unpack_table.c +++ b/mldsa/src/native/aarch64/src/polyz_unpack_table.c @@ -16,22 +16,32 @@ #include "arith_native_aarch64.h" +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) /* Table of indices used for tbl instructions in polyz_unpack_{17,19}. * See autogen for details. */ +#if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLD_CONFIG_PARAMETER_SET == 44 MLD_ALIGN const uint8_t mld_polyz_unpack_17_indices[] = { 0, 1, 2, 255, 2, 3, 4, 255, 4, 5, 6, 255, 6, 7, 8, 255, 9, 10, 11, 255, 11, 12, 13, 255, 13, 14, 15, 255, 15, 16, 17, 255, 2, 3, 4, 255, 4, 5, 6, 255, 6, 7, 8, 255, 8, 9, 10, 255, 11, 12, 13, 255, 13, 14, 15, 255, 15, 16, 17, 255, 17, 18, 19, 255, }; +#endif /* MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 44 \ + */ +#if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || \ + (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87) MLD_ALIGN const uint8_t mld_polyz_unpack_19_indices[] = { 0, 1, 2, 255, 2, 3, 4, 255, 5, 6, 7, 255, 7, 8, 9, 255, 10, 11, 12, 255, 12, 13, 14, 255, 15, 16, 17, 255, 17, 18, 19, 255, 4, 5, 6, 255, 6, 7, 8, 255, 9, 10, 11, 255, 11, 12, 13, 255, 14, 15, 16, 255, 16, 17, 18, 255, 19, 20, 21, 255, 21, 22, 23, 255, }; +#endif /* MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 65 \ + || MLD_CONFIG_PARAMETER_SET == 87 */ + +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ #else /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED */ diff --git a/mldsa/src/native/aarch64/src/rej_uniform_eta2_asm.S b/mldsa/src/native/aarch64/src/rej_uniform_eta2_asm.S index eecfb2d6e..f8e1793a8 100644 --- a/mldsa/src/native/aarch64/src/rej_uniform_eta2_asm.S +++ b/mldsa/src/native/aarch64/src/rej_uniform_eta2_asm.S @@ -6,6 +6,7 @@ #include "../../../common.h" #if defined(MLD_ARITH_BACKEND_AARCH64) && \ + !defined(MLD_CONFIG_NO_KEYPAIR_API) && \ !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLDSA_ETA == 2) @@ -131,5 +132,6 @@ Lrej_uniform_eta2_final_copy: MLD_ASM_FN_SIZE(rej_uniform_eta2_asm) -#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ +#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_NO_KEYPAIR_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLDSA_ETA == 2) */ diff --git a/mldsa/src/native/aarch64/src/rej_uniform_eta4_asm.S b/mldsa/src/native/aarch64/src/rej_uniform_eta4_asm.S index caa89e273..e9206a41a 100644 --- a/mldsa/src/native/aarch64/src/rej_uniform_eta4_asm.S +++ b/mldsa/src/native/aarch64/src/rej_uniform_eta4_asm.S @@ -6,6 +6,7 @@ #include "../../../common.h" #if defined(MLD_ARITH_BACKEND_AARCH64) && \ + !defined(MLD_CONFIG_NO_KEYPAIR_API) && \ !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLDSA_ETA == 4) @@ -124,5 +125,6 @@ Lrej_uniform_eta4_final_copy: MLD_ASM_FN_SIZE(rej_uniform_eta4_asm) -#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ +#endif /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_NO_KEYPAIR_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLDSA_ETA == 4) */ diff --git a/mldsa/src/native/aarch64/src/rej_uniform_eta_table.c b/mldsa/src/native/aarch64/src/rej_uniform_eta_table.c index 13ce6df66..395e99cc0 100644 --- a/mldsa/src/native/aarch64/src/rej_uniform_eta_table.c +++ b/mldsa/src/native/aarch64/src/rej_uniform_eta_table.c @@ -11,7 +11,8 @@ #include "../../../common.h" -#if defined(MLD_ARITH_BACKEND_AARCH64) && \ +#if defined(MLD_ARITH_BACKEND_AARCH64) && \ + !defined(MLD_CONFIG_NO_KEYPAIR_API) && \ !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) #include "arith_native_aarch64.h" @@ -536,8 +537,10 @@ MLD_ALIGN const uint8_t mld_rej_uniform_eta_table[] = { 8, 9, 10, 11, 12, 13, 14, 15 /* 255 */, }; -#else /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED */ +#else /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_NO_KEYPAIR_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED */ MLD_EMPTY_CU(aarch64_rej_uniform_eta_table) -#endif /* !(MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED) */ +#endif /* !(MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_NO_KEYPAIR_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED) */ diff --git a/mldsa/src/native/api.h b/mldsa/src/native/api.h index f7faf5b45..351b42408 100644 --- a/mldsa/src/native/api.h +++ b/mldsa/src/native/api.h @@ -193,6 +193,7 @@ __contract__( ); #endif /* MLD_USE_NATIVE_REJ_UNIFORM */ +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) #if defined(MLD_USE_NATIVE_REJ_UNIFORM_ETA2) #if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLDSA_ETA == 2 /************************************************* @@ -262,7 +263,9 @@ __contract__( ); #endif /* MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLDSA_ETA == 4 */ #endif /* MLD_USE_NATIVE_REJ_UNIFORM_ETA4 */ +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) #if defined(MLD_USE_NATIVE_POLY_DECOMPOSE_32) #if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || \ (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87) @@ -335,6 +338,7 @@ __contract__( #endif /* MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 44 \ */ #endif /* MLD_USE_NATIVE_POLY_DECOMPOSE_88 */ +#endif /* !MLD_CONFIG_NO_SIGN_API */ #if defined(MLD_USE_NATIVE_POLY_CADDQ) /************************************************* @@ -358,6 +362,7 @@ __contract__( ); #endif /* MLD_USE_NATIVE_POLY_CADDQ */ +#if !defined(MLD_CONFIG_NO_VERIFY_API) #if defined(MLD_USE_NATIVE_POLY_USE_HINT_32) #if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || \ (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87) @@ -420,6 +425,7 @@ __contract__( #endif /* MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 44 \ */ #endif /* MLD_USE_NATIVE_POLY_USE_HINT_88 */ +#endif /* !MLD_CONFIG_NO_VERIFY_API */ #if defined(MLD_USE_NATIVE_POLY_CHKNORM) /************************************************* @@ -453,6 +459,7 @@ __contract__( ); #endif /* MLD_USE_NATIVE_POLY_CHKNORM */ +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) #if defined(MLD_USE_NATIVE_POLYZ_UNPACK_17) #if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLD_CONFIG_PARAMETER_SET == 44 /************************************************* @@ -537,6 +544,7 @@ __contract__( ensures((return_value == MLD_NATIVE_FUNC_FALLBACK) ==> array_unchanged(c, MLDSA_N)) ); #endif /* MLD_USE_NATIVE_POINTWISE_MONTGOMERY */ +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ #if defined(MLD_USE_NATIVE_POLYVECL_POINTWISE_ACC_MONTGOMERY_L4) #if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLDSA_L == 4 diff --git a/mldsa/src/native/x86_64/meta.h b/mldsa/src/native/x86_64/meta.h index 9e45b661e..c9a533a5e 100644 --- a/mldsa/src/native/x86_64/meta.h +++ b/mldsa/src/native/x86_64/meta.h @@ -83,6 +83,7 @@ static MLD_INLINE int mld_rej_uniform_native(int32_t *r, unsigned len, return (int)mld_rej_uniform_avx2(r, buf); } +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) #if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLDSA_ETA == 2 MLD_MUST_CHECK_RETURN_VALUE static MLD_INLINE int mld_rej_uniform_eta2_native(int32_t *r, unsigned len, @@ -140,7 +141,9 @@ static MLD_INLINE int mld_rej_uniform_eta4_native(int32_t *r, unsigned len, return (int)outlen; } #endif /* MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLDSA_ETA == 4 */ +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) #if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || \ (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87) MLD_MUST_CHECK_RETURN_VALUE @@ -169,7 +172,7 @@ static MLD_INLINE int mld_poly_decompose_88_native(int32_t *a1, int32_t *a0) } #endif /* MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 44 \ */ - +#endif /* !MLD_CONFIG_NO_SIGN_API */ MLD_MUST_CHECK_RETURN_VALUE static MLD_INLINE int mld_poly_caddq_native(int32_t a[MLDSA_N]) @@ -182,6 +185,7 @@ static MLD_INLINE int mld_poly_caddq_native(int32_t a[MLDSA_N]) return MLD_NATIVE_FUNC_SUCCESS; } +#if !defined(MLD_CONFIG_NO_VERIFY_API) #if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || \ (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87) MLD_MUST_CHECK_RETURN_VALUE @@ -212,7 +216,7 @@ static MLD_INLINE int mld_poly_use_hint_88_native(int32_t *b, const int32_t *a, } #endif /* MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 44 \ */ - +#endif /* !MLD_CONFIG_NO_VERIFY_API */ MLD_MUST_CHECK_RETURN_VALUE static MLD_INLINE int mld_poly_chknorm_native(const int32_t *a, int32_t B) @@ -224,6 +228,7 @@ static MLD_INLINE int mld_poly_chknorm_native(const int32_t *a, int32_t B) return mld_poly_chknorm_avx2(a, B); } +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) #if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLD_CONFIG_PARAMETER_SET == 44 MLD_MUST_CHECK_RETURN_VALUE static MLD_INLINE int mld_polyz_unpack_17_native(int32_t *r, const uint8_t *a) @@ -264,6 +269,7 @@ static MLD_INLINE int mld_poly_pointwise_montgomery_native( mld_pointwise_avx2(c, a, b, mld_qdata); return MLD_NATIVE_FUNC_SUCCESS; } +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ #if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLDSA_L == 4 MLD_MUST_CHECK_RETURN_VALUE diff --git a/mldsa/src/native/x86_64/src/arith_native_x86_64.h b/mldsa/src/native/x86_64/src/arith_native_x86_64.h index 956a6e541..e4172ee93 100644 --- a/mldsa/src/native/x86_64/src/arith_native_x86_64.h +++ b/mldsa/src/native/x86_64/src/arith_native_x86_64.h @@ -67,6 +67,7 @@ MLD_MUST_CHECK_RETURN_VALUE unsigned mld_rej_uniform_avx2(int32_t *r, const uint8_t buf[MLD_AVX2_REJ_UNIFORM_BUFLEN]); +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) #define mld_rej_uniform_eta2_avx2 MLD_NAMESPACE(mld_rej_uniform_eta2_avx2) MLD_MUST_CHECK_RETURN_VALUE unsigned mld_rej_uniform_eta2_avx2( @@ -76,31 +77,38 @@ unsigned mld_rej_uniform_eta2_avx2( MLD_MUST_CHECK_RETURN_VALUE unsigned mld_rej_uniform_eta4_avx2( int32_t *r, const uint8_t buf[MLD_AVX2_REJ_UNIFORM_ETA4_BUFLEN]); +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) #define mld_poly_decompose_32_avx2 MLD_NAMESPACE(mld_poly_decompose_32_avx2) void mld_poly_decompose_32_avx2(int32_t *a1, int32_t *a0); #define mld_poly_decompose_88_avx2 MLD_NAMESPACE(mld_poly_decompose_88_avx2) void mld_poly_decompose_88_avx2(int32_t *a1, int32_t *a0); +#endif /* !MLD_CONFIG_NO_SIGN_API */ #define mld_poly_caddq_avx2 MLD_NAMESPACE(poly_caddq_avx2) void mld_poly_caddq_avx2(int32_t *r); +#if !defined(MLD_CONFIG_NO_VERIFY_API) #define mld_poly_use_hint_32_avx2 MLD_NAMESPACE(mld_poly_use_hint_32_avx2) void mld_poly_use_hint_32_avx2(int32_t *b, const int32_t *a, const int32_t *h); #define mld_poly_use_hint_88_avx2 MLD_NAMESPACE(mld_poly_use_hint_88_avx2) void mld_poly_use_hint_88_avx2(int32_t *b, const int32_t *a, const int32_t *h); +#endif /* !MLD_CONFIG_NO_VERIFY_API */ #define mld_poly_chknorm_avx2 MLD_NAMESPACE(mld_poly_chknorm_avx2) MLD_MUST_CHECK_RETURN_VALUE int mld_poly_chknorm_avx2(const int32_t *a, int32_t B); +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) #define mld_polyz_unpack_17_avx2 MLD_NAMESPACE(mld_polyz_unpack_17_avx2) void mld_polyz_unpack_17_avx2(int32_t *r, const uint8_t *a); #define mld_polyz_unpack_19_avx2 MLD_NAMESPACE(mld_polyz_unpack_19_avx2) void mld_polyz_unpack_19_avx2(int32_t *r, const uint8_t *a); +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ #define mld_pointwise_avx2 MLD_NAMESPACE(pointwise_avx2) void mld_pointwise_avx2(int32_t *c, const int32_t *a, const int32_t *b, diff --git a/mldsa/src/native/x86_64/src/poly_decompose_32_avx2.c b/mldsa/src/native/x86_64/src/poly_decompose_32_avx2.c index 4bc584b1b..c97d0c729 100644 --- a/mldsa/src/native/x86_64/src/poly_decompose_32_avx2.c +++ b/mldsa/src/native/x86_64/src/poly_decompose_32_avx2.c @@ -24,6 +24,7 @@ #include "../../../common.h" #if defined(MLD_ARITH_BACKEND_X86_64_DEFAULT) && \ + !defined(MLD_CONFIG_NO_SIGN_API) && \ !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || \ (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87)) @@ -143,13 +144,14 @@ void mld_poly_decompose_32_avx2(int32_t *a1, int32_t *a0) } } -#else /* MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_MULTILEVEL_NO_SHARED \ - && (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == \ - 65 || MLD_CONFIG_PARAMETER_SET == 87) */ +#else /* MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_NO_SIGN_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ + (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 65 \ + || MLD_CONFIG_PARAMETER_SET == 87) */ MLD_EMPTY_CU(avx2_poly_decompose_32) -#endif /* !(MLD_ARITH_BACKEND_X86_64_DEFAULT && \ +#endif /* !(MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_NO_SIGN_API && \ !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 65 \ || MLD_CONFIG_PARAMETER_SET == 87)) */ diff --git a/mldsa/src/native/x86_64/src/poly_decompose_88_avx2.c b/mldsa/src/native/x86_64/src/poly_decompose_88_avx2.c index edb9114c8..d6a28d2d1 100644 --- a/mldsa/src/native/x86_64/src/poly_decompose_88_avx2.c +++ b/mldsa/src/native/x86_64/src/poly_decompose_88_avx2.c @@ -24,6 +24,7 @@ #include "../../../common.h" #if defined(MLD_ARITH_BACKEND_X86_64_DEFAULT) && \ + !defined(MLD_CONFIG_NO_SIGN_API) && \ !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || \ MLD_CONFIG_PARAMETER_SET == 44) @@ -143,13 +144,14 @@ void mld_poly_decompose_88_avx2(int32_t *a1, int32_t *a0) _mm256_store_si256((__m256i *)&a0[8 * i], f0); } } -#else /* MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_MULTILEVEL_NO_SHARED \ - && (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == \ - 44) */ +#else /* MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_NO_SIGN_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ + (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 44) \ + */ MLD_EMPTY_CU(avx2_poly_decompose_88) -#endif /* !(MLD_ARITH_BACKEND_X86_64_DEFAULT && \ +#endif /* !(MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_NO_SIGN_API && \ !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == \ 44)) */ diff --git a/mldsa/src/native/x86_64/src/poly_use_hint_32_avx2.c b/mldsa/src/native/x86_64/src/poly_use_hint_32_avx2.c index 9a5c866bb..f38e13ef1 100644 --- a/mldsa/src/native/x86_64/src/poly_use_hint_32_avx2.c +++ b/mldsa/src/native/x86_64/src/poly_use_hint_32_avx2.c @@ -20,6 +20,7 @@ #include "../../../common.h" #if defined(MLD_ARITH_BACKEND_X86_64_DEFAULT) && \ + !defined(MLD_CONFIG_NO_VERIFY_API) && \ !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || \ (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87)) @@ -86,13 +87,14 @@ void mld_poly_use_hint_32_avx2(int32_t *b, const int32_t *a, } } -#else /* MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_MULTILEVEL_NO_SHARED \ - && (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == \ - 65 || MLD_CONFIG_PARAMETER_SET == 87) */ +#else /* MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_NO_VERIFY_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ + (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 65 \ + || MLD_CONFIG_PARAMETER_SET == 87) */ MLD_EMPTY_CU(avx2_poly_use_hint_32) -#endif /* !(MLD_ARITH_BACKEND_X86_64_DEFAULT && \ +#endif /* !(MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_NO_VERIFY_API && \ !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 65 \ || MLD_CONFIG_PARAMETER_SET == 87)) */ diff --git a/mldsa/src/native/x86_64/src/poly_use_hint_88_avx2.c b/mldsa/src/native/x86_64/src/poly_use_hint_88_avx2.c index 32fa2e6c6..01c17bb54 100644 --- a/mldsa/src/native/x86_64/src/poly_use_hint_88_avx2.c +++ b/mldsa/src/native/x86_64/src/poly_use_hint_88_avx2.c @@ -20,6 +20,7 @@ #include "../../../common.h" #if defined(MLD_ARITH_BACKEND_X86_64_DEFAULT) && \ + !defined(MLD_CONFIG_NO_VERIFY_API) && \ !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || \ MLD_CONFIG_PARAMETER_SET == 44) @@ -88,15 +89,16 @@ void mld_poly_use_hint_88_avx2(int32_t *b, const int32_t *a, } } -#else /* MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_MULTILEVEL_NO_SHARED \ - && (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == \ - 44) */ +#else /* MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_NO_VERIFY_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ + (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 44) \ + */ MLD_EMPTY_CU(avx2_poly_use_hint_88) -#endif /* !(MLD_ARITH_BACKEND_X86_64_DEFAULT && \ - !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ - (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == \ +#endif /* !(MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_NO_VERIFY_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ + (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == \ 44)) */ /* To facilitate single-compilation-unit (SCU) builds, undefine all macros. diff --git a/mldsa/src/native/x86_64/src/polyz_unpack_17_avx2.c b/mldsa/src/native/x86_64/src/polyz_unpack_17_avx2.c index 9e8dd9158..ac98bf64f 100644 --- a/mldsa/src/native/x86_64/src/polyz_unpack_17_avx2.c +++ b/mldsa/src/native/x86_64/src/polyz_unpack_17_avx2.c @@ -20,6 +20,8 @@ #include "../../../common.h" #if defined(MLD_ARITH_BACKEND_X86_64_DEFAULT) && \ + (!defined(MLD_CONFIG_NO_SIGN_API) || \ + !defined(MLD_CONFIG_NO_VERIFY_API)) && \ !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || \ MLD_CONFIG_PARAMETER_SET == 44) @@ -79,13 +81,14 @@ void mld_polyz_unpack_17_avx2(int32_t *r, const uint8_t *a) _mm256_store_si256((__m256i *)&r[8 * i], f); } } -#else /* MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_MULTILEVEL_NO_SHARED \ - && (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == \ - 44) */ +#else /* MLD_ARITH_BACKEND_X86_64_DEFAULT && (!MLD_CONFIG_NO_SIGN_API || \ + !MLD_CONFIG_NO_VERIFY_API) && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ + (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 44) \ + */ MLD_EMPTY_CU(avx2_polyz_unpack_17) -#endif /* !(MLD_ARITH_BACKEND_X86_64_DEFAULT && \ - !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ +#endif /* !(MLD_ARITH_BACKEND_X86_64_DEFAULT && (!MLD_CONFIG_NO_SIGN_API || \ + !MLD_CONFIG_NO_VERIFY_API) && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == \ 44)) */ diff --git a/mldsa/src/native/x86_64/src/polyz_unpack_19_avx2.c b/mldsa/src/native/x86_64/src/polyz_unpack_19_avx2.c index a5cc1b641..fe5c3895b 100644 --- a/mldsa/src/native/x86_64/src/polyz_unpack_19_avx2.c +++ b/mldsa/src/native/x86_64/src/polyz_unpack_19_avx2.c @@ -20,6 +20,8 @@ #include "../../../common.h" #if defined(MLD_ARITH_BACKEND_X86_64_DEFAULT) && \ + (!defined(MLD_CONFIG_NO_SIGN_API) || \ + !defined(MLD_CONFIG_NO_VERIFY_API)) && \ !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || \ (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87)) @@ -81,13 +83,14 @@ void mld_polyz_unpack_19_avx2(int32_t *r, const uint8_t *a) } } -#else /* MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_MULTILEVEL_NO_SHARED \ - && (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == \ - 65 || MLD_CONFIG_PARAMETER_SET == 87) */ +#else /* MLD_ARITH_BACKEND_X86_64_DEFAULT && (!MLD_CONFIG_NO_SIGN_API || \ + !MLD_CONFIG_NO_VERIFY_API) && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ + (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 65 \ + || MLD_CONFIG_PARAMETER_SET == 87) */ MLD_EMPTY_CU(avx2_polyz_unpack_19) -#endif /* !(MLD_ARITH_BACKEND_X86_64_DEFAULT && \ - !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ +#endif /* !(MLD_ARITH_BACKEND_X86_64_DEFAULT && (!MLD_CONFIG_NO_SIGN_API || \ + !MLD_CONFIG_NO_VERIFY_API) && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 65 \ || MLD_CONFIG_PARAMETER_SET == 87)) */ diff --git a/mldsa/src/native/x86_64/src/rej_uniform_eta2_avx2.c b/mldsa/src/native/x86_64/src/rej_uniform_eta2_avx2.c index b763d403b..dac73995b 100644 --- a/mldsa/src/native/x86_64/src/rej_uniform_eta2_avx2.c +++ b/mldsa/src/native/x86_64/src/rej_uniform_eta2_avx2.c @@ -20,6 +20,7 @@ #include "../../../common.h" #if defined(MLD_ARITH_BACKEND_X86_64_DEFAULT) && \ + !defined(MLD_CONFIG_NO_KEYPAIR_API) && \ !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLDSA_ETA == 2) @@ -141,13 +142,14 @@ unsigned int mld_rej_uniform_eta2_avx2( return ctr; } -#else /* MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_MULTILEVEL_NO_SHARED \ - && (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLDSA_ETA == 2) */ +#else /* MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_NO_KEYPAIR_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ + (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLDSA_ETA == 2) */ MLD_EMPTY_CU(avx2_rej_uniform_eta2) -#endif /* !(MLD_ARITH_BACKEND_X86_64_DEFAULT && \ - !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ +#endif /* !(MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_NO_KEYPAIR_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLDSA_ETA == 2)) */ /* To facilitate single-compilation-unit (SCU) builds, undefine all macros. diff --git a/mldsa/src/native/x86_64/src/rej_uniform_eta4_avx2.c b/mldsa/src/native/x86_64/src/rej_uniform_eta4_avx2.c index 9ae716437..6f41486d2 100644 --- a/mldsa/src/native/x86_64/src/rej_uniform_eta4_avx2.c +++ b/mldsa/src/native/x86_64/src/rej_uniform_eta4_avx2.c @@ -20,6 +20,7 @@ #include "../../../common.h" #if defined(MLD_ARITH_BACKEND_X86_64_DEFAULT) && \ + !defined(MLD_CONFIG_NO_KEYPAIR_API) && \ !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLDSA_ETA == 4) @@ -125,13 +126,14 @@ unsigned int mld_rej_uniform_eta4_avx2( return ctr; } -#else /* MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_MULTILEVEL_NO_SHARED \ - && (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLDSA_ETA == 4) */ +#else /* MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_NO_KEYPAIR_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ + (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLDSA_ETA == 4) */ MLD_EMPTY_CU(avx2_rej_uniform_eta4) -#endif /* !(MLD_ARITH_BACKEND_X86_64_DEFAULT && \ - !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ +#endif /* !(MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_NO_KEYPAIR_API && \ + !MLD_CONFIG_MULTILEVEL_NO_SHARED && \ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLDSA_ETA == 4)) */ /* To facilitate single-compilation-unit (SCU) builds, undefine all macros. diff --git a/mldsa/src/packing.c b/mldsa/src/packing.c index 7add516ce..698374e03 100644 --- a/mldsa/src/packing.c +++ b/mldsa/src/packing.c @@ -16,6 +16,7 @@ #define mld_unpack_hints MLD_ADD_PARAM_SET(mld_unpack_hints) /* End of parameter set namespacing */ +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) MLD_INTERNAL_API void mld_pack_pk(uint8_t pk[MLDSA_CRYPTO_PUBLICKEYBYTES], const uint8_t rho[MLDSA_SEEDBYTES], const mld_polyveck *t1) @@ -34,7 +35,9 @@ void mld_pack_pk(uint8_t pk[MLDSA_CRYPTO_PUBLICKEYBYTES], &t1->vec[i]); } } +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ +#if !defined(MLD_CONFIG_NO_VERIFY_API) MLD_INTERNAL_API void mld_unpack_pk(uint8_t rho[MLDSA_SEEDBYTES], mld_polyveck *t1, const uint8_t pk[MLDSA_CRYPTO_PUBLICKEYBYTES]) @@ -49,7 +52,9 @@ void mld_unpack_pk(uint8_t rho[MLDSA_SEEDBYTES], mld_polyveck *t1, mld_polyt1_unpack(&t1->vec[i], pk + i * MLDSA_POLYT1_PACKEDBYTES); } } +#endif /* !MLD_CONFIG_NO_VERIFY_API */ +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) MLD_INTERNAL_API void mld_pack_sk(uint8_t sk[MLDSA_CRYPTO_SECRETKEYBYTES], const uint8_t rho[MLDSA_SEEDBYTES], @@ -74,7 +79,9 @@ void mld_pack_sk(uint8_t sk[MLDSA_CRYPTO_SECRETKEYBYTES], mld_polyveck_pack_t0(sk, t0); } +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) || !defined(MLD_CONFIG_NO_SIGN_API) MLD_INTERNAL_API void mld_unpack_sk(uint8_t rho[MLDSA_SEEDBYTES], uint8_t tr[MLDSA_TRBYTES], uint8_t key[MLDSA_SEEDBYTES], mld_polyveck *t0, @@ -98,7 +105,9 @@ void mld_unpack_sk(uint8_t rho[MLDSA_SEEDBYTES], uint8_t tr[MLDSA_TRBYTES], mld_polyveck_unpack_t0(t0, sk); } +#endif /* !MLD_CONFIG_NO_KEYPAIR_API || !MLD_CONFIG_NO_SIGN_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) MLD_INTERNAL_API void mld_pack_sig_c_h(uint8_t sig[MLDSA_CRYPTO_BYTES], const uint8_t c[MLDSA_CTILDEBYTES], const mld_polyveck *h, @@ -179,7 +188,9 @@ void mld_pack_sig_z(uint8_t sig[MLDSA_CRYPTO_BYTES], const mld_poly *zi, sig += i * MLDSA_POLYZ_PACKEDBYTES; mld_polyz_pack(sig, zi); } +#endif /* !MLD_CONFIG_NO_SIGN_API */ +#if !defined(MLD_CONFIG_NO_VERIFY_API) /************************************************* * Name: mld_unpack_hints * @@ -274,7 +285,9 @@ __contract__( return 0; } +#endif /* !MLD_CONFIG_NO_VERIFY_API */ +#if !defined(MLD_CONFIG_NO_VERIFY_API) MLD_INTERNAL_API int mld_unpack_sig(uint8_t c[MLDSA_CTILDEBYTES], mld_polyvecl *z, mld_polyveck *h, const uint8_t sig[MLDSA_CRYPTO_BYTES]) @@ -287,6 +300,7 @@ int mld_unpack_sig(uint8_t c[MLDSA_CTILDEBYTES], mld_polyvecl *z, return mld_unpack_hints(h, sig); } +#endif /* !MLD_CONFIG_NO_VERIFY_API */ /* To facilitate single-compilation-unit (SCU) builds, undefine all macros. * Don't modify by hand -- this is auto-generated by scripts/autogen. */ diff --git a/mldsa/src/packing.h b/mldsa/src/packing.h index 576577277..24bcdcefa 100644 --- a/mldsa/src/packing.h +++ b/mldsa/src/packing.h @@ -7,6 +7,7 @@ #include "polyvec.h" +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) #define mld_pack_pk MLD_NAMESPACE_KL(pack_pk) /************************************************* * Name: mld_pack_pk @@ -66,8 +67,9 @@ __contract__( array_abs_bound(s2->vec[k2].coeffs, 0, MLDSA_N, MLDSA_ETA + 1))) assigns(memory_slice(sk, MLDSA_CRYPTO_SECRETKEYBYTES)) ); +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ - +#if !defined(MLD_CONFIG_NO_SIGN_API) #define mld_pack_sig_c_h MLD_NAMESPACE_KL(pack_sig_c_h) /************************************************* * Name: mld_pack_sig_c_h @@ -123,7 +125,9 @@ __contract__( requires(array_bound(zi->coeffs, 0, MLDSA_N, -(MLDSA_GAMMA1 - 1), MLDSA_GAMMA1 + 1)) assigns(memory_slice(sig, MLDSA_CRYPTO_BYTES)) ); +#endif /* !MLD_CONFIG_NO_SIGN_API */ +#if !defined(MLD_CONFIG_NO_VERIFY_API) #define mld_unpack_pk MLD_NAMESPACE_KL(unpack_pk) /************************************************* * Name: mld_unpack_pk @@ -146,8 +150,9 @@ __contract__( ensures(forall(k0, 0, MLDSA_K, array_bound(t1->vec[k0].coeffs, 0, MLDSA_N, 0, 1 << 10))) ); +#endif /* !MLD_CONFIG_NO_VERIFY_API */ - +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) || !defined(MLD_CONFIG_NO_SIGN_API) #define mld_unpack_sk MLD_NAMESPACE_KL(unpack_sk) /************************************************* * Name: mld_unpack_sk @@ -188,7 +193,9 @@ __contract__( ensures(forall(k2, 0, MLDSA_K, array_bound(s2->vec[k2].coeffs, 0, MLDSA_N, MLD_POLYETA_UNPACK_LOWER_BOUND, MLDSA_ETA + 1))) ); +#endif /* !MLD_CONFIG_NO_KEYPAIR_API || !MLD_CONFIG_NO_SIGN_API */ +#if !defined(MLD_CONFIG_NO_VERIFY_API) #define mld_unpack_sig MLD_NAMESPACE_KL(unpack_sig) /************************************************* * Name: mld_unpack_sig @@ -221,4 +228,6 @@ __contract__( array_bound(h->vec[k1].coeffs, 0, MLDSA_N, 0, 2))) ensures(return_value >= 0 && return_value <= 1) ); +#endif /* !MLD_CONFIG_NO_VERIFY_API */ + #endif /* !MLD_PACKING_H */ diff --git a/mldsa/src/poly.c b/mldsa/src/poly.c index b7609fc37..4188c256e 100644 --- a/mldsa/src/poly.c +++ b/mldsa/src/poly.c @@ -91,6 +91,7 @@ void mld_poly_caddq(mld_poly *a) mld_poly_caddq_c(a); } +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) || !defined(MLD_CONFIG_NO_SIGN_API) /* Reference: We use destructive version (output=first input) to avoid * reasoning about aliasing in the CBMC specification */ MLD_INTERNAL_API @@ -111,7 +112,9 @@ void mld_poly_add(mld_poly *r, const mld_poly *b) r->coeffs[i] = r->coeffs[i] + b->coeffs[i]; } } +#endif /* !MLD_CONFIG_NO_KEYPAIR_API || !MLD_CONFIG_NO_SIGN_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) /* Reference: We use destructive version (output=first input) to avoid * reasoning about aliasing in the CBMC specification */ MLD_INTERNAL_API @@ -134,7 +137,9 @@ void mld_poly_sub(mld_poly *r, const mld_poly *b) mld_assert_bound(r->coeffs, MLDSA_N, INT32_MIN, MLD_REDUCE32_DOMAIN_MAX); } +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ +#if !defined(MLD_CONFIG_NO_VERIFY_API) MLD_INTERNAL_API void mld_poly_shiftl(mld_poly *a) { @@ -155,7 +160,7 @@ void mld_poly_shiftl(mld_poly *a) } mld_assert_bound(a->coeffs, MLDSA_N, 0, MLDSA_Q); } - +#endif /* !MLD_CONFIG_NO_VERIFY_API */ static MLD_INLINE int32_t mld_fqmul(int32_t a, int32_t b) __contract__( @@ -451,6 +456,7 @@ void mld_poly_invntt_tomont(mld_poly *a) mld_poly_invntt_tomont_c(a); } +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) MLD_STATIC_TESTABLE void mld_poly_pointwise_montgomery_c(mld_poly *c, const mld_poly *a, const mld_poly *b) @@ -497,7 +503,9 @@ void mld_poly_pointwise_montgomery(mld_poly *c, const mld_poly *a, #endif /* MLD_USE_NATIVE_POINTWISE_MONTGOMERY */ mld_poly_pointwise_montgomery_c(c, a, b); } +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) MLD_INTERNAL_API void mld_poly_power2round(mld_poly *a1, mld_poly *a0, const mld_poly *a) { @@ -520,6 +528,7 @@ void mld_poly_power2round(mld_poly *a1, mld_poly *a0, const mld_poly *a) (MLD_2_POW_D / 2) + 1); mld_assert_bound(a1->coeffs, MLDSA_N, 0, ((MLDSA_Q - 1) / MLD_2_POW_D) + 1); } +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ #ifndef MLD_POLY_UNIFORM_NBLOCKS #define MLD_POLY_UNIFORM_NBLOCKS \ @@ -737,6 +746,7 @@ void mld_poly_uniform_4x(mld_poly *vec0, mld_poly *vec1, mld_poly *vec2, #endif /* !MLD_CONFIG_SERIAL_FIPS202_ONLY && !MLD_CONFIG_REDUCE_RAM */ +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) MLD_INTERNAL_API void mld_polyt1_pack(uint8_t r[MLDSA_POLYT1_PACKEDBYTES], const mld_poly *a) { @@ -761,7 +771,9 @@ void mld_polyt1_pack(uint8_t r[MLDSA_POLYT1_PACKEDBYTES], const mld_poly *a) r[5 * i + 4] = (uint8_t)((a->coeffs[4 * i + 3] >> 2) & 0xFF); } } +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ +#if !defined(MLD_CONFIG_NO_VERIFY_API) MLD_INTERNAL_API void mld_polyt1_unpack(mld_poly *r, const uint8_t a[MLDSA_POLYT1_PACKEDBYTES]) { @@ -785,7 +797,9 @@ void mld_polyt1_unpack(mld_poly *r, const uint8_t a[MLDSA_POLYT1_PACKEDBYTES]) mld_assert_bound(r->coeffs, MLDSA_N, 0, 1 << 10); } +#endif /* !MLD_CONFIG_NO_VERIFY_API */ +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) MLD_INTERNAL_API void mld_polyt0_pack(uint8_t r[MLDSA_POLYT0_PACKEDBYTES], const mld_poly *a) { @@ -833,7 +847,9 @@ void mld_polyt0_pack(uint8_t r[MLDSA_POLYT0_PACKEDBYTES], const mld_poly *a) r[13 * i + 12] = (uint8_t)((t[7] >> 5) & 0xFF); } } +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) || !defined(MLD_CONFIG_NO_SIGN_API) MLD_INTERNAL_API void mld_polyt0_unpack(mld_poly *r, const uint8_t a[MLDSA_POLYT0_PACKEDBYTES]) { @@ -894,6 +910,7 @@ void mld_polyt0_unpack(mld_poly *r, const uint8_t a[MLDSA_POLYT0_PACKEDBYTES]) mld_assert_bound(r->coeffs, MLDSA_N, -(1 << (MLDSA_D - 1)) + 1, (1 << (MLDSA_D - 1)) + 1); } +#endif /* !MLD_CONFIG_NO_KEYPAIR_API || !MLD_CONFIG_NO_SIGN_API */ MLD_STATIC_TESTABLE uint32_t mld_poly_chknorm_c(const mld_poly *a, int32_t B) __contract__( diff --git a/mldsa/src/poly.h b/mldsa/src/poly.h index 17f54f980..533903228 100644 --- a/mldsa/src/poly.h +++ b/mldsa/src/poly.h @@ -57,6 +57,7 @@ __contract__( ensures(array_bound(a->coeffs, 0, MLDSA_N, 0, MLDSA_Q)) ); +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) || !defined(MLD_CONFIG_NO_SIGN_API) #define mld_poly_add MLD_NAMESPACE(poly_add) /************************************************* * Name: mld_poly_add @@ -84,7 +85,9 @@ __contract__( ensures(forall(k3, 0, MLDSA_N, r->coeffs[k3] < MLD_REDUCE32_DOMAIN_MAX)) ensures(forall(k4, 0, MLDSA_N, r->coeffs[k4] >= INT32_MIN)) ); +#endif /* !MLD_CONFIG_NO_KEYPAIR_API || !MLD_CONFIG_NO_SIGN_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) #define mld_poly_sub MLD_NAMESPACE(poly_sub) /************************************************* * Name: mld_poly_sub @@ -110,7 +113,9 @@ __contract__( assigns(memory_slice(r, sizeof(mld_poly))) ensures(array_bound(r->coeffs, 0, MLDSA_N, INT32_MIN, MLD_REDUCE32_DOMAIN_MAX)) ); +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ +#if !defined(MLD_CONFIG_NO_VERIFY_API) #define mld_poly_shiftl MLD_NAMESPACE(poly_shiftl) /************************************************* * Name: mld_poly_shiftl @@ -128,6 +133,7 @@ __contract__( assigns(memory_slice(a, sizeof(mld_poly))) ensures(array_bound(a->coeffs, 0, MLDSA_N, 0, MLDSA_Q)) ); +#endif /* !MLD_CONFIG_NO_VERIFY_API */ #define mld_poly_ntt MLD_NAMESPACE(poly_ntt) /************************************************* @@ -168,6 +174,7 @@ __contract__( ensures(array_abs_bound(a->coeffs, 0, MLDSA_N, MLD_INTT_BOUND)) ); +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) #define mld_poly_pointwise_montgomery MLD_NAMESPACE(poly_pointwise_montgomery) /************************************************* * Name: mld_poly_pointwise_montgomery @@ -192,7 +199,9 @@ __contract__( assigns(memory_slice(c, sizeof(mld_poly))) ensures(array_abs_bound(c->coeffs, 0, MLDSA_N, MLDSA_Q)) ); +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) #define mld_poly_power2round MLD_NAMESPACE(poly_power2round) /************************************************* * Name: mld_poly_power2round @@ -220,6 +229,7 @@ __contract__( ensures(array_bound(a0->coeffs, 0, MLDSA_N, -(MLD_2_POW_D/2)+1, (MLD_2_POW_D/2)+1)) ensures(array_bound(a1->coeffs, 0, MLDSA_N, 0, ((MLDSA_Q - 1) / MLD_2_POW_D) + 1)) ); +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ #define mld_poly_uniform MLD_NAMESPACE(poly_uniform) /************************************************* @@ -278,6 +288,7 @@ __contract__( ); #endif /* !MLD_CONFIG_SERIAL_FIPS202_ONLY && !MLD_CONFIG_REDUCE_RAM */ +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) #define mld_polyt1_pack MLD_NAMESPACE(polyt1_pack) /************************************************* * Name: mld_polyt1_pack @@ -297,7 +308,9 @@ __contract__( requires(array_bound(a->coeffs, 0, MLDSA_N, 0, 1 << 10)) assigns(memory_slice(r, MLDSA_POLYT1_PACKEDBYTES)) ); +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ +#if !defined(MLD_CONFIG_NO_VERIFY_API) #define mld_polyt1_unpack MLD_NAMESPACE(polyt1_unpack) /************************************************* * Name: mld_polyt1_unpack @@ -316,7 +329,9 @@ __contract__( assigns(memory_slice(r, sizeof(mld_poly))) ensures(array_bound(r->coeffs, 0, MLDSA_N, 0, 1 << 10)) ); +#endif /* !MLD_CONFIG_NO_VERIFY_API */ +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) #define mld_polyt0_pack MLD_NAMESPACE(polyt0_pack) /************************************************* * Name: mld_polyt0_pack @@ -336,8 +351,9 @@ __contract__( requires(array_bound(a->coeffs, 0, MLDSA_N, -(1<<(MLDSA_D-1)) + 1, (1<<(MLDSA_D-1)) + 1)) assigns(memory_slice(r, MLDSA_POLYT0_PACKEDBYTES)) ); +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ - +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) || !defined(MLD_CONFIG_NO_SIGN_API) #define mld_polyt0_unpack MLD_NAMESPACE(polyt0_unpack) /************************************************* * Name: mld_polyt0_unpack @@ -356,6 +372,7 @@ __contract__( assigns(memory_slice(r, sizeof(mld_poly))) ensures(array_bound(r->coeffs, 0, MLDSA_N, -(1<<(MLDSA_D-1)) + 1, (1<<(MLDSA_D-1)) + 1)) ); +#endif /* !MLD_CONFIG_NO_KEYPAIR_API || !MLD_CONFIG_NO_SIGN_API */ #define mld_poly_chknorm MLD_NAMESPACE(poly_chknorm) /************************************************* diff --git a/mldsa/src/poly_kl.c b/mldsa/src/poly_kl.c index 84ae53a7e..dcc759836 100644 --- a/mldsa/src/poly_kl.c +++ b/mldsa/src/poly_kl.c @@ -37,6 +37,7 @@ /* End of parameter set namespacing */ +#if !defined(MLD_CONFIG_NO_SIGN_API) MLD_STATIC_TESTABLE void mld_poly_decompose_c(mld_poly *a1, mld_poly *a0) __contract__( @@ -123,7 +124,9 @@ unsigned int mld_poly_make_hint(mld_poly *h, const mld_poly *a0, mld_assert_bound(h->coeffs, MLDSA_N, 0, 2); return s; } +#endif /* !MLD_CONFIG_NO_SIGN_API */ +#if !defined(MLD_CONFIG_NO_VERIFY_API) MLD_STATIC_TESTABLE void mld_poly_use_hint_c(mld_poly *b, const mld_poly *a, const mld_poly *h) __contract__( @@ -181,7 +184,9 @@ void mld_poly_use_hint(mld_poly *b, const mld_poly *a, const mld_poly *h) 65 || MLD_CONFIG_PARAMETER_SET == 87) */ mld_poly_use_hint_c(b, a, h); } +#endif /* !MLD_CONFIG_NO_VERIFY_API */ +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) /************************************************* * Name: mld_rej_eta * @@ -485,7 +490,9 @@ void mld_poly_uniform_eta(mld_poly *r, const uint8_t seed[MLDSA_CRHBYTES], mld_zeroize(extseed, sizeof(extseed)); } #endif /* MLD_CONFIG_SERIAL_FIPS202_ONLY */ +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) #define MLD_POLY_UNIFORM_GAMMA1_NBLOCKS \ ((MLDSA_POLYZ_PACKEDBYTES + MLD_STREAM256_BLOCKBYTES - 1) / \ MLD_STREAM256_BLOCKBYTES) @@ -571,7 +578,9 @@ void mld_poly_uniform_gamma1_4x(mld_poly *r0, mld_poly *r1, mld_poly *r2, mld_zeroize(extseed, sizeof(extseed)); } #endif /* !MLD_CONFIG_SERIAL_FIPS202_ONLY */ +#endif /* !MLD_CONFIG_NO_SIGN_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) MLD_INTERNAL_API void mld_poly_challenge(mld_poly *c, const uint8_t seed[MLDSA_CTILDEBYTES]) { @@ -654,7 +663,9 @@ void mld_poly_challenge(mld_poly *c, const uint8_t seed[MLDSA_CTILDEBYTES]) mld_zeroize(buf, sizeof(buf)); mld_zeroize(&signs, sizeof(signs)); } +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) MLD_INTERNAL_API void mld_polyeta_pack(uint8_t r[MLDSA_POLYETA_PACKEDBYTES], const mld_poly *a) { @@ -702,7 +713,9 @@ void mld_polyeta_pack(uint8_t r[MLDSA_POLYETA_PACKEDBYTES], const mld_poly *a) #error "Invalid value of MLDSA_ETA" #endif /* MLDSA_ETA != 2 && MLDSA_ETA != 4 */ } +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) || !defined(MLD_CONFIG_NO_SIGN_API) void mld_polyeta_unpack(mld_poly *r, const uint8_t a[MLDSA_POLYETA_PACKEDBYTES]) { unsigned int i; @@ -751,8 +764,9 @@ void mld_polyeta_unpack(mld_poly *r, const uint8_t a[MLDSA_POLYETA_PACKEDBYTES]) mld_assert_bound(r->coeffs, MLDSA_N, MLD_POLYETA_UNPACK_LOWER_BOUND, MLDSA_ETA + 1); } +#endif /* !MLD_CONFIG_NO_KEYPAIR_API || !MLD_CONFIG_NO_SIGN_API */ - +#if !defined(MLD_CONFIG_NO_SIGN_API) MLD_INTERNAL_API void mld_polyz_pack(uint8_t r[MLDSA_POLYZ_PACKEDBYTES], const mld_poly *a) { @@ -805,7 +819,9 @@ void mld_polyz_pack(uint8_t r[MLDSA_POLYZ_PACKEDBYTES], const mld_poly *a) } #endif /* MLD_CONFIG_PARAMETER_SET != 44 */ } +#endif /* !MLD_CONFIG_NO_SIGN_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) MLD_STATIC_TESTABLE void mld_polyz_unpack_c( mld_poly *r, const uint8_t a[MLDSA_POLYZ_PACKEDBYTES]) __contract__( @@ -931,6 +947,7 @@ void mld_polyw1_pack(uint8_t r[MLDSA_POLYW1_PACKEDBYTES], const mld_poly *a) } #endif /* MLD_CONFIG_PARAMETER_SET != 44 */ } +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ /* To facilitate single-compilation-unit (SCU) builds, undefine all macros. */ diff --git a/mldsa/src/poly_kl.h b/mldsa/src/poly_kl.h index a7c71707d..19c24ee2e 100644 --- a/mldsa/src/poly_kl.h +++ b/mldsa/src/poly_kl.h @@ -9,6 +9,7 @@ #include "common.h" #include "poly.h" +#if !defined(MLD_CONFIG_NO_SIGN_API) #define mld_poly_decompose MLD_NAMESPACE_KL(poly_decompose) /************************************************* * Name: mld_poly_decompose @@ -69,7 +70,9 @@ __contract__( ensures(return_value <= MLDSA_N) ensures(array_bound(h->coeffs, 0, MLDSA_N, 0, 2)) ); +#endif /* !MLD_CONFIG_NO_SIGN_API */ +#if !defined(MLD_CONFIG_NO_VERIFY_API) #define mld_poly_use_hint MLD_NAMESPACE_KL(poly_use_hint) /************************************************* * Name: mld_poly_use_hint @@ -92,7 +95,9 @@ __contract__( assigns(memory_slice(b, sizeof(mld_poly))) ensures(array_bound(b->coeffs, 0, MLDSA_N, 0, (MLDSA_Q-1)/(2*MLDSA_GAMMA2))) ); +#endif /* !MLD_CONFIG_NO_VERIFY_API */ +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) #if !defined(MLD_CONFIG_SERIAL_FIPS202_ONLY) #define mld_poly_uniform_eta_4x MLD_NAMESPACE_KL(poly_uniform_eta_4x) /************************************************* @@ -159,7 +164,9 @@ __contract__( ensures(array_abs_bound(r->coeffs, 0, MLDSA_N, MLDSA_ETA + 1)) ); #endif /* MLD_CONFIG_SERIAL_FIPS202_ONLY */ +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) #if MLD_CONFIG_PARAMETER_SET == 65 || defined(MLD_CONFIG_SERIAL_FIPS202_ONLY) #define mld_poly_uniform_gamma1 MLD_NAMESPACE_KL(poly_uniform_gamma1) /************************************************* @@ -221,7 +228,9 @@ __contract__( ensures(array_bound(r3->coeffs, 0, MLDSA_N, -(MLDSA_GAMMA1 - 1), MLDSA_GAMMA1 + 1)) ); #endif /* !MLD_CONFIG_SERIAL_FIPS202_ONLY */ +#endif /* !MLD_CONFIG_NO_SIGN_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) #define mld_poly_challenge MLD_NAMESPACE_KL(poly_challenge) /************************************************* * Name: mld_poly_challenge @@ -243,7 +252,9 @@ __contract__( /* All coefficients of c are -1, 0 or +1 */ ensures(array_bound(c->coeffs, 0, MLDSA_N, -1, 2)) ); +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) #define mld_polyeta_pack MLD_NAMESPACE_KL(polyeta_pack) /************************************************* * Name: mld_polyeta_pack @@ -262,7 +273,9 @@ __contract__( requires(array_abs_bound(a->coeffs, 0, MLDSA_N, MLDSA_ETA + 1)) assigns(memory_slice(r, MLDSA_POLYETA_PACKEDBYTES)) ); +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) || !defined(MLD_CONFIG_NO_SIGN_API) /* * polyeta_unpack produces coefficients in [-MLDSA_ETA,MLDSA_ETA] for * well-formed inputs (i.e., those produced by polyeta_pack). @@ -296,7 +309,9 @@ __contract__( assigns(memory_slice(r, sizeof(mld_poly))) ensures(array_bound(r->coeffs, 0, MLDSA_N, MLD_POLYETA_UNPACK_LOWER_BOUND, MLDSA_ETA + 1)) ); +#endif /* !MLD_CONFIG_NO_KEYPAIR_API || !MLD_CONFIG_NO_SIGN_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) #define mld_polyz_pack MLD_NAMESPACE_KL(polyz_pack) /************************************************* * Name: mld_polyz_pack @@ -316,8 +331,9 @@ __contract__( requires(array_bound(a->coeffs, 0, MLDSA_N, -(MLDSA_GAMMA1 - 1), MLDSA_GAMMA1 + 1)) assigns(memory_slice(r, MLDSA_POLYZ_PACKEDBYTES)) ); +#endif /* !MLD_CONFIG_NO_SIGN_API */ - +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) #define mld_polyz_unpack MLD_NAMESPACE_KL(polyz_unpack) /************************************************* * Name: mld_polyz_unpack @@ -356,5 +372,6 @@ __contract__( requires(array_bound(a->coeffs, 0, MLDSA_N, 0, (MLDSA_Q-1)/(2*MLDSA_GAMMA2))) assigns(memory_slice(r, MLDSA_POLYW1_PACKEDBYTES)) ); +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ #endif /* !MLD_POLY_KL_H */ diff --git a/mldsa/src/polyvec.c b/mldsa/src/polyvec.c index 10d0d76c2..042bd7c6f 100644 --- a/mldsa/src/polyvec.c +++ b/mldsa/src/polyvec.c @@ -249,6 +249,7 @@ void mld_polyvec_matrix_pointwise_montgomery(mld_polyveck *t, mld_polymat *mat, /**************************************************************/ /************ Vectors of polynomials of length MLDSA_L **************/ /**************************************************************/ +#if !defined(MLD_CONFIG_NO_SIGN_API) MLD_INTERNAL_API void mld_polyvecl_uniform_gamma1(mld_polyvecl *v, const uint8_t seed[MLDSA_CRHBYTES], @@ -291,6 +292,7 @@ void mld_polyvecl_uniform_gamma1(mld_polyvecl *v, mld_assert_bound_2d(v->vec, MLDSA_L, MLDSA_N, -(MLDSA_GAMMA1 - 1), MLDSA_GAMMA1 + 1); } +#endif /* !MLD_CONFIG_NO_SIGN_API */ MLD_INTERNAL_API void mld_polyvecl_ntt(mld_polyvecl *v) @@ -418,6 +420,7 @@ void mld_polyvecl_pointwise_acc_montgomery(mld_poly *w, const mld_polyvecl *u, mld_polyvecl_pointwise_acc_montgomery_c(w, u, v); } +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) || !defined(MLD_CONFIG_NO_VERIFY_API) MLD_INTERNAL_API uint32_t mld_polyvecl_chknorm(const mld_polyvecl *v, int32_t bound) { @@ -442,6 +445,7 @@ uint32_t mld_polyvecl_chknorm(const mld_polyvecl *v, int32_t bound) } return t; } +#endif /* !MLD_CONFIG_NO_KEYPAIR_API || !MLD_CONFIG_NO_VERIFY_API */ /**************************************************************/ /************ Vectors of polynomials of length MLDSA_K **************/ @@ -490,6 +494,7 @@ void mld_polyveck_caddq(mld_polyveck *v) mld_assert_bound_2d(v->vec, MLDSA_K, MLDSA_N, 0, MLDSA_Q); } +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) || !defined(MLD_CONFIG_NO_SIGN_API) /* Reference: We use destructive version (output=first input) to avoid * reasoning about aliasing in the CBMC specification */ MLD_INTERNAL_API @@ -512,7 +517,9 @@ void mld_polyveck_add(mld_polyveck *u, const mld_polyveck *v) mld_assert_bound_2d(u->vec, MLDSA_K, MLDSA_N, INT32_MIN, MLD_REDUCE32_DOMAIN_MAX); } +#endif /* !MLD_CONFIG_NO_KEYPAIR_API || !MLD_CONFIG_NO_SIGN_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) MLD_INTERNAL_API void mld_polyveck_sub(mld_polyveck *u, const mld_polyveck *v) { @@ -536,7 +543,9 @@ void mld_polyveck_sub(mld_polyveck *u, const mld_polyveck *v) mld_assert_bound_2d(u->vec, MLDSA_K, MLDSA_N, INT32_MIN, MLD_REDUCE32_DOMAIN_MAX); } +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ +#if !defined(MLD_CONFIG_NO_VERIFY_API) MLD_INTERNAL_API void mld_polyveck_shiftl(mld_polyveck *v) { @@ -558,7 +567,9 @@ void mld_polyveck_shiftl(mld_polyveck *v) mld_assert_bound_2d(v->vec, MLDSA_K, MLDSA_N, 0, MLDSA_Q); } +#endif /* !MLD_CONFIG_NO_VERIFY_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) MLD_INTERNAL_API void mld_polyveck_ntt(mld_polyveck *v) { @@ -577,6 +588,7 @@ void mld_polyveck_ntt(mld_polyveck *v) } mld_assert_abs_bound_2d(v->vec, MLDSA_K, MLDSA_N, MLD_NTT_BOUND); } +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ MLD_INTERNAL_API void mld_polyveck_invntt_tomont(mld_polyveck *v) @@ -598,6 +610,7 @@ void mld_polyveck_invntt_tomont(mld_polyveck *v) mld_assert_abs_bound_2d(v->vec, MLDSA_K, MLDSA_N, MLD_INTT_BOUND); } +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) MLD_INTERNAL_API void mld_polyveck_pointwise_poly_montgomery(mld_polyveck *r, const mld_poly *a, const mld_polyveck *v) @@ -617,7 +630,9 @@ void mld_polyveck_pointwise_poly_montgomery(mld_polyveck *r, const mld_poly *a, } mld_assert_abs_bound_2d(r->vec, MLDSA_K, MLDSA_N, MLDSA_Q); } +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) || !defined(MLD_CONFIG_NO_SIGN_API) MLD_INTERNAL_API uint32_t mld_polyveck_chknorm(const mld_polyveck *v, int32_t bound) { @@ -643,7 +658,9 @@ uint32_t mld_polyveck_chknorm(const mld_polyveck *v, int32_t bound) return t; } +#endif /* !MLD_CONFIG_NO_KEYPAIR_API || !MLD_CONFIG_NO_SIGN_API */ +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) MLD_INTERNAL_API void mld_polyveck_power2round(mld_polyveck *v1, mld_polyveck *v0, const mld_polyveck *v) @@ -668,7 +685,9 @@ void mld_polyveck_power2round(mld_polyveck *v1, mld_polyveck *v0, mld_assert_bound_2d(v1->vec, MLDSA_K, MLDSA_N, 0, ((MLDSA_Q - 1) / MLD_2_POW_D) + 1); } +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) MLD_INTERNAL_API void mld_polyveck_decompose(mld_polyveck *v1, mld_polyveck *v0) { @@ -717,7 +736,9 @@ unsigned int mld_polyveck_make_hint(mld_polyveck *h, const mld_polyveck *v0, mld_assert_bound_2d(h->vec, MLDSA_K, MLDSA_N, 0, 2); return s; } +#endif /* !MLD_CONFIG_NO_SIGN_API */ +#if !defined(MLD_CONFIG_NO_VERIFY_API) MLD_INTERNAL_API void mld_polyveck_use_hint(mld_polyveck *w, const mld_polyveck *u, const mld_polyveck *h) @@ -742,7 +763,9 @@ void mld_polyveck_use_hint(mld_polyveck *w, const mld_polyveck *u, mld_assert_bound_2d(w->vec, MLDSA_K, MLDSA_N, 0, (MLDSA_Q - 1) / (2 * MLDSA_GAMMA2)); } +#endif /* !MLD_CONFIG_NO_VERIFY_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) MLD_INTERNAL_API void mld_polyveck_pack_w1(uint8_t r[MLDSA_K * MLDSA_POLYW1_PACKEDBYTES], const mld_polyveck *w1) @@ -761,7 +784,9 @@ void mld_polyveck_pack_w1(uint8_t r[MLDSA_K * MLDSA_POLYW1_PACKEDBYTES], mld_polyw1_pack(&r[i * MLDSA_POLYW1_PACKEDBYTES], &w1->vec[i]); } } +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) MLD_INTERNAL_API void mld_polyveck_pack_eta(uint8_t r[MLDSA_K * MLDSA_POLYETA_PACKEDBYTES], const mld_polyveck *p) @@ -813,7 +838,9 @@ void mld_polyveck_pack_t0(uint8_t r[MLDSA_K * MLDSA_POLYT0_PACKEDBYTES], mld_polyt0_pack(&r[i * MLDSA_POLYT0_PACKEDBYTES], &p->vec[i]); } } +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) || !defined(MLD_CONFIG_NO_SIGN_API) MLD_INTERNAL_API void mld_polyvecl_unpack_eta( mld_polyvecl *p, const uint8_t r[MLDSA_L * MLDSA_POLYETA_PACKEDBYTES]) @@ -827,7 +854,9 @@ void mld_polyvecl_unpack_eta( mld_assert_bound_2d(p->vec, MLDSA_L, MLDSA_N, MLD_POLYETA_UNPACK_LOWER_BOUND, MLDSA_ETA + 1); } +#endif /* !MLD_CONFIG_NO_KEYPAIR_API || !MLD_CONFIG_NO_SIGN_API */ +#if !defined(MLD_CONFIG_NO_VERIFY_API) MLD_INTERNAL_API void mld_polyvecl_unpack_z(mld_polyvecl *z, const uint8_t r[MLDSA_L * MLDSA_POLYZ_PACKEDBYTES]) @@ -841,7 +870,9 @@ void mld_polyvecl_unpack_z(mld_polyvecl *z, mld_assert_bound_2d(z->vec, MLDSA_L, MLDSA_N, -(MLDSA_GAMMA1 - 1), MLDSA_GAMMA1 + 1); } +#endif /* !MLD_CONFIG_NO_VERIFY_API */ +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) || !defined(MLD_CONFIG_NO_SIGN_API) MLD_INTERNAL_API void mld_polyveck_unpack_eta( mld_polyveck *p, const uint8_t r[MLDSA_K * MLDSA_POLYETA_PACKEDBYTES]) @@ -869,6 +900,7 @@ void mld_polyveck_unpack_t0(mld_polyveck *p, mld_assert_bound_2d(p->vec, MLDSA_K, MLDSA_N, -(1 << (MLDSA_D - 1)) + 1, (1 << (MLDSA_D - 1)) + 1); } +#endif /* !MLD_CONFIG_NO_KEYPAIR_API || !MLD_CONFIG_NO_SIGN_API */ /* To facilitate single-compilation-unit (SCU) builds, undefine all macros. * Don't modify by hand -- this is auto-generated by scripts/autogen. */ diff --git a/mldsa/src/polyvec.h b/mldsa/src/polyvec.h index 043ac1ad7..01a9c9a06 100644 --- a/mldsa/src/polyvec.h +++ b/mldsa/src/polyvec.h @@ -26,6 +26,7 @@ typedef struct } mld_polyvecl; +#if !defined(MLD_CONFIG_NO_SIGN_API) #define mld_polyvecl_uniform_gamma1 MLD_NAMESPACE_KL(polyvecl_uniform_gamma1) /************************************************* * Name: mld_polyvecl_uniform_gamma1 @@ -51,6 +52,7 @@ __contract__( ensures(forall(k0, 0, MLDSA_L, array_bound(v->vec[k0].coeffs, 0, MLDSA_N, -(MLDSA_GAMMA1 - 1), MLDSA_GAMMA1 + 1))) ); +#endif /* !MLD_CONFIG_NO_SIGN_API */ #define mld_polyvecl_ntt MLD_NAMESPACE_KL(polyvecl_ntt) /************************************************* @@ -108,7 +110,7 @@ __contract__( ensures(array_abs_bound(w->coeffs, 0, MLDSA_N, MLDSA_Q)) ); - +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) || !defined(MLD_CONFIG_NO_VERIFY_API) #define mld_polyvecl_chknorm MLD_NAMESPACE_KL(polyvecl_chknorm) /************************************************* * Name: mld_polyvecl_chknorm @@ -133,6 +135,7 @@ __contract__( ensures(return_value == 0 || return_value == 0xFFFFFFFF) ensures((return_value == 0) == forall(k1, 0, MLDSA_L, array_abs_bound(v->vec[k1].coeffs, 0, MLDSA_N, B))) ); +#endif /* !MLD_CONFIG_NO_KEYPAIR_API || !MLD_CONFIG_NO_VERIFY_API */ /* Vectors of polynomials of length MLDSA_K */ typedef struct @@ -192,6 +195,7 @@ __contract__( array_bound(v->vec[k1].coeffs, 0, MLDSA_N, 0, MLDSA_Q))) ); +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) || !defined(MLD_CONFIG_NO_SIGN_API) #define mld_polyveck_add MLD_NAMESPACE_KL(polyveck_add) /************************************************* * Name: mld_polyveck_add @@ -216,7 +220,9 @@ __contract__( ensures(forall(q2, 0, MLDSA_K, array_bound(u->vec[q2].coeffs, 0, MLDSA_N, INT32_MIN, MLD_REDUCE32_DOMAIN_MAX))) ); +#endif /* !MLD_CONFIG_NO_KEYPAIR_API || !MLD_CONFIG_NO_SIGN_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) #define mld_polyveck_sub MLD_NAMESPACE_KL(polyveck_sub) /************************************************* * Name: mld_polyveck_sub @@ -239,7 +245,9 @@ __contract__( ensures(forall(k0, 0, MLDSA_K, array_bound(u->vec[k0].coeffs, 0, MLDSA_N, INT32_MIN, MLD_REDUCE32_DOMAIN_MAX))) ); +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ +#if !defined(MLD_CONFIG_NO_VERIFY_API) #define mld_polyveck_shiftl MLD_NAMESPACE_KL(polyveck_shiftl) /************************************************* * Name: mld_polyveck_shiftl @@ -258,7 +266,9 @@ __contract__( assigns(memory_slice(v, sizeof(mld_polyveck))) ensures(forall(k1, 0, MLDSA_K, array_bound(v->vec[k1].coeffs, 0, MLDSA_N, 0, MLDSA_Q))) ); +#endif /* !MLD_CONFIG_NO_VERIFY_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) #define mld_polyveck_ntt MLD_NAMESPACE_KL(polyveck_ntt) /************************************************* * Name: mld_polyveck_ntt @@ -276,6 +286,7 @@ __contract__( assigns(memory_slice(v, sizeof(mld_polyveck))) ensures(forall(k1, 0, MLDSA_K, array_abs_bound(v->vec[k1].coeffs, 0, MLDSA_N, MLD_NTT_BOUND))) ); +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ #define mld_polyveck_invntt_tomont MLD_NAMESPACE_KL(polyveck_invntt_tomont) /************************************************* @@ -296,6 +307,7 @@ __contract__( ensures(forall(k1, 0, MLDSA_K, array_abs_bound(v->vec[k1].coeffs, 0, MLDSA_N, MLD_INTT_BOUND))) ); +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) #define mld_polyveck_pointwise_poly_montgomery \ MLD_NAMESPACE_KL(polyveck_pointwise_poly_montgomery) /************************************************* @@ -321,7 +333,9 @@ __contract__( assigns(memory_slice(r, sizeof(mld_polyveck))) ensures(forall(k1, 0, MLDSA_K, array_abs_bound(r->vec[k1].coeffs, 0, MLDSA_N, MLDSA_Q))) ); +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) || !defined(MLD_CONFIG_NO_SIGN_API) #define mld_polyveck_chknorm MLD_NAMESPACE_KL(polyveck_chknorm) /************************************************* * Name: mld_polyveck_chknorm @@ -347,7 +361,9 @@ __contract__( ensures(return_value == 0 || return_value == 0xFFFFFFFF) ensures((return_value == 0) == forall(k1, 0, MLDSA_K, array_abs_bound(v->vec[k1].coeffs, 0, MLDSA_N, B))) ); +#endif /* !MLD_CONFIG_NO_KEYPAIR_API || !MLD_CONFIG_NO_SIGN_API */ +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) #define mld_polyveck_power2round MLD_NAMESPACE_KL(polyveck_power2round) /************************************************* * Name: mld_polyveck_power2round @@ -376,7 +392,9 @@ __contract__( ensures(forall(k1, 0, MLDSA_K, array_bound(v0->vec[k1].coeffs, 0, MLDSA_N, -(MLD_2_POW_D/2)+1, (MLD_2_POW_D/2)+1))) ensures(forall(k2, 0, MLDSA_K, array_bound(v1->vec[k2].coeffs, 0, MLDSA_N, 0, ((MLDSA_Q - 1) / MLD_2_POW_D) + 1))) ); +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) #define mld_polyveck_decompose MLD_NAMESPACE_KL(polyveck_decompose) /************************************************* * Name: mld_polyveck_decompose @@ -437,7 +455,9 @@ __contract__( ensures(return_value <= MLDSA_N * MLDSA_K) ensures(forall(k1, 0, MLDSA_K, array_bound(h->vec[k1].coeffs, 0, MLDSA_N, 0, 2))) ); +#endif /* !MLD_CONFIG_NO_SIGN_API */ +#if !defined(MLD_CONFIG_NO_VERIFY_API) #define mld_polyveck_use_hint MLD_NAMESPACE_KL(polyveck_use_hint) /************************************************* * Name: mld_polyveck_use_hint @@ -464,7 +484,9 @@ __contract__( ensures(forall(k2, 0, MLDSA_K, array_bound(w->vec[k2].coeffs, 0, MLDSA_N, 0, (MLDSA_Q-1)/(2*MLDSA_GAMMA2)))) ); +#endif /* !MLD_CONFIG_NO_VERIFY_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) #define mld_polyveck_pack_w1 MLD_NAMESPACE_KL(polyveck_pack_w1) /************************************************* * Name: mld_polyveck_pack_w1 @@ -487,7 +509,9 @@ __contract__( array_bound(w1->vec[k1].coeffs, 0, MLDSA_N, 0, (MLDSA_Q-1)/(2*MLDSA_GAMMA2)))) assigns(memory_slice(r, MLDSA_K * MLDSA_POLYW1_PACKEDBYTES)) ); +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) #define mld_polyveck_pack_eta MLD_NAMESPACE_KL(polyveck_pack_eta) /************************************************* * Name: mld_polyveck_pack_eta @@ -553,7 +577,9 @@ __contract__( array_bound(p->vec[k0].coeffs, 0, MLDSA_N, -(1<<(MLDSA_D-1)) + 1, (1<<(MLDSA_D-1)) + 1))) assigns(memory_slice(r, MLDSA_K * MLDSA_POLYT0_PACKEDBYTES)) ); +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) || !defined(MLD_CONFIG_NO_SIGN_API) #define mld_polyvecl_unpack_eta MLD_NAMESPACE_KL(polyvecl_unpack_eta) /************************************************* * Name: mld_polyvecl_unpack_eta @@ -575,7 +601,9 @@ __contract__( ensures(forall(k1, 0, MLDSA_L, array_bound(p->vec[k1].coeffs, 0, MLDSA_N, MLD_POLYETA_UNPACK_LOWER_BOUND, MLDSA_ETA + 1))) ); +#endif /* !MLD_CONFIG_NO_KEYPAIR_API || !MLD_CONFIG_NO_SIGN_API */ +#if !defined(MLD_CONFIG_NO_VERIFY_API) #define mld_polyvecl_unpack_z MLD_NAMESPACE_KL(polyvecl_unpack_z) /************************************************* * Name: mld_polyvecl_unpack_z @@ -597,7 +625,9 @@ __contract__( ensures(forall(k1, 0, MLDSA_L, array_bound(z->vec[k1].coeffs, 0, MLDSA_N, -(MLDSA_GAMMA1 - 1), MLDSA_GAMMA1 + 1))) ); +#endif /* !MLD_CONFIG_NO_VERIFY_API */ +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) || !defined(MLD_CONFIG_NO_SIGN_API) #define mld_polyveck_unpack_eta MLD_NAMESPACE_KL(polyveck_unpack_eta) /************************************************* * Name: mld_polyveck_unpack_eta @@ -641,6 +671,7 @@ __contract__( ensures(forall(k1, 0, MLDSA_K, array_bound(p->vec[k1].coeffs, 0, MLDSA_N, -(1<<(MLDSA_D-1)) + 1, (1<<(MLDSA_D-1)) + 1))) ); +#endif /* !MLD_CONFIG_NO_KEYPAIR_API || !MLD_CONFIG_NO_SIGN_API */ #define mld_polymat_get_row MLD_NAMESPACE_KL(polymat_get_row) /************************************************* diff --git a/mldsa/src/sign.c b/mldsa/src/sign.c index c307e7187..593a1b685 100644 --- a/mldsa/src/sign.c +++ b/mldsa/src/sign.c @@ -54,6 +54,7 @@ /* End of parameter set namespacing */ +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) static int mld_check_pct(uint8_t const pk[MLDSA_CRYPTO_PUBLICKEYBYTES], uint8_t const sk[MLDSA_CRYPTO_SECRETKEYBYTES], MLD_CONFIG_CONTEXT_PARAMETER_TYPE context) @@ -361,6 +362,7 @@ int mld_sign_keypair_internal(uint8_t pk[MLDSA_CRYPTO_PUBLICKEYBYTES], return mld_check_pct(pk, sk, context); } +#if !defined(MLD_CONFIG_INTERNAL_API_ONLY) #if !defined(MLD_CONFIG_NO_RANDOMIZED_API) MLD_MUST_CHECK_RETURN_VALUE MLD_EXTERNAL_API @@ -384,7 +386,10 @@ int mld_sign_keypair(uint8_t pk[MLDSA_CRYPTO_PUBLICKEYBYTES], return ret; } #endif /* !MLD_CONFIG_NO_RANDOMIZED_API */ +#endif /* !MLD_CONFIG_INTERNAL_API_ONLY */ +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) /************************************************* * Name: mld_H * @@ -440,7 +445,9 @@ __contract__( /* @[FIPS204, Section 3.6.3] Destruction of intermediate values. */ mld_zeroize(&state, sizeof(state)); } +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) /************************************************* * Name: mld_compute_pack_z * @@ -851,6 +858,7 @@ int mld_sign_signature_internal(uint8_t sig[MLDSA_CRYPTO_BYTES], size_t *siglen, return ret; } +#if !defined(MLD_CONFIG_INTERNAL_API_ONLY) #if !defined(MLD_CONFIG_NO_RANDOMIZED_API) MLD_MUST_CHECK_RETURN_VALUE MLD_EXTERNAL_API @@ -971,7 +979,10 @@ int mld_sign(uint8_t *sm, size_t *smlen, const uint8_t *m, size_t mlen, return ret; } #endif /* !MLD_CONFIG_NO_RANDOMIZED_API */ +#endif /* !MLD_CONFIG_INTERNAL_API_ONLY */ +#endif /* !MLD_CONFIG_NO_SIGN_API */ +#if !defined(MLD_CONFIG_NO_VERIFY_API) MLD_MUST_CHECK_RETURN_VALUE MLD_EXTERNAL_API int mld_sign_verify_internal(const uint8_t *sig, size_t siglen, @@ -1100,6 +1111,7 @@ int mld_sign_verify_internal(const uint8_t *sig, size_t siglen, return ret; } +#if !defined(MLD_CONFIG_INTERNAL_API_ONLY) MLD_MUST_CHECK_RETURN_VALUE MLD_EXTERNAL_API int mld_sign_verify(const uint8_t *sig, size_t siglen, const uint8_t *m, @@ -1184,8 +1196,11 @@ int mld_sign_open(uint8_t *m, size_t *mlen, const uint8_t *sm, size_t smlen, return ret; } +#endif /* !MLD_CONFIG_INTERNAL_API_ONLY */ +#endif /* !MLD_CONFIG_NO_VERIFY_API */ - +#if !defined(MLD_CONFIG_INTERNAL_API_ONLY) +#if !defined(MLD_CONFIG_NO_SIGN_API) MLD_MUST_CHECK_RETURN_VALUE MLD_EXTERNAL_API int mld_sign_signature_pre_hash_internal( @@ -1226,7 +1241,9 @@ int mld_sign_signature_pre_hash_internal( mld_zeroize(pre, sizeof(pre)); return ret; } +#endif /* !MLD_CONFIG_NO_SIGN_API */ +#if !defined(MLD_CONFIG_NO_VERIFY_API) MLD_MUST_CHECK_RETURN_VALUE MLD_EXTERNAL_API int mld_sign_verify_pre_hash_internal( @@ -1255,7 +1272,9 @@ int mld_sign_verify_pre_hash_internal( mld_zeroize(pre, sizeof(pre)); return ret; } +#endif /* !MLD_CONFIG_NO_VERIFY_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) MLD_MUST_CHECK_RETURN_VALUE MLD_EXTERNAL_API int mld_sign_signature_pre_hash_shake256( @@ -1275,7 +1294,9 @@ int mld_sign_signature_pre_hash_shake256( mld_zeroize(ph, sizeof(ph)); return ret; } +#endif /* !MLD_CONFIG_NO_SIGN_API */ +#if !defined(MLD_CONFIG_NO_VERIFY_API) MLD_MUST_CHECK_RETURN_VALUE MLD_EXTERNAL_API int mld_sign_verify_pre_hash_shake256( @@ -1294,8 +1315,9 @@ int mld_sign_verify_pre_hash_shake256( mld_zeroize(ph, sizeof(ph)); return ret; } +#endif /* !MLD_CONFIG_NO_VERIFY_API */ - +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) #define MLD_PRE_HASH_OID_LEN 11 /************************************************* @@ -1421,7 +1443,9 @@ size_t mld_prepare_domain_separation_prefix( mld_memcpy(prefix + 2 + ctxlen + MLD_PRE_HASH_OID_LEN, ph, phlen); return 2 + ctxlen + MLD_PRE_HASH_OID_LEN + phlen; } +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) MLD_EXTERNAL_API int mld_sign_pk_from_sk(uint8_t pk[MLDSA_CRYPTO_PUBLICKEYBYTES], const uint8_t sk[MLDSA_CRYPTO_SECRETKEYBYTES], @@ -1496,6 +1520,8 @@ int mld_sign_pk_from_sk(uint8_t pk[MLDSA_CRYPTO_PUBLICKEYBYTES], return ret; } +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ +#endif /* !MLD_CONFIG_INTERNAL_API_ONLY */ /* To facilitate single-compilation-unit (SCU) builds, undefine all macros. * Don't modify by hand -- this is auto-generated by scripts/autogen. */ diff --git a/mldsa/src/sign.h b/mldsa/src/sign.h index ba8c9f5bd..27901944a 100644 --- a/mldsa/src/sign.h +++ b/mldsa/src/sign.h @@ -88,6 +88,7 @@ #define MLD_PREHASH_SHAKE_128 11 #define MLD_PREHASH_SHAKE_256 12 +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) /************************************************* * Name: mld_sign_keypair_internal * @@ -125,6 +126,7 @@ __contract__( return_value == MLD_ERR_OUT_OF_MEMORY || return_value == MLD_ERR_RNG_FAIL) ); +#if !defined(MLD_CONFIG_INTERNAL_API_ONLY) /************************************************* * Name: mld_sign_keypair * @@ -158,7 +160,10 @@ __contract__( ensures(return_value == 0 || return_value == MLD_ERR_FAIL || return_value == MLD_ERR_OUT_OF_MEMORY || return_value == MLD_ERR_RNG_FAIL) ); +#endif /* !MLD_CONFIG_INTERNAL_API_ONLY */ +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) /************************************************* * Name: mld_sign_signature_internal * @@ -217,6 +222,7 @@ __contract__( ensures(return_value != 0 ==> *siglen == 0) ); +#if !defined(MLD_CONFIG_INTERNAL_API_ONLY) /************************************************* * Name: mld_sign_signature * @@ -351,7 +357,10 @@ __contract__( || return_value == MLD_ERR_OUT_OF_MEMORY || return_value == MLD_ERR_RNG_FAIL)) ); +#endif /* !MLD_CONFIG_INTERNAL_API_ONLY */ +#endif /* !MLD_CONFIG_NO_SIGN_API */ +#if !defined(MLD_CONFIG_NO_VERIFY_API) /************************************************* * Name: mld_sign_verify_internal * @@ -396,6 +405,7 @@ __contract__( ensures(return_value == 0 || return_value == MLD_ERR_FAIL || return_value == MLD_ERR_OUT_OF_MEMORY) ); +#if !defined(MLD_CONFIG_INTERNAL_API_ONLY) /************************************************* * Name: mld_sign_verify * @@ -510,7 +520,11 @@ __contract__( assigns(memory_slice(mlen, sizeof(size_t))) ensures(return_value == 0 || return_value == MLD_ERR_FAIL || return_value == MLD_ERR_OUT_OF_MEMORY) ); +#endif /* !MLD_CONFIG_INTERNAL_API_ONLY */ +#endif /* !MLD_CONFIG_NO_VERIFY_API */ +#if !defined(MLD_CONFIG_INTERNAL_API_ONLY) +#if !defined(MLD_CONFIG_NO_SIGN_API) /************************************************* * Name: mld_sign_signature_pre_hash_internal * @@ -567,7 +581,9 @@ __contract__( ensures((return_value == 0 && *siglen == MLDSA_CRYPTO_BYTES) || ((return_value == MLD_ERR_FAIL || return_value == MLD_ERR_OUT_OF_MEMORY) && *siglen == 0)) ); +#endif /* !MLD_CONFIG_NO_SIGN_API */ +#if !defined(MLD_CONFIG_NO_VERIFY_API) /************************************************* * Name: mld_sign_verify_pre_hash_internal * @@ -616,7 +632,9 @@ __contract__( requires(memory_no_alias(pk, MLDSA_CRYPTO_PUBLICKEYBYTES)) ensures(return_value == 0 || return_value == MLD_ERR_FAIL || return_value == MLD_ERR_OUT_OF_MEMORY) ); +#endif /* !MLD_CONFIG_NO_VERIFY_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) /************************************************* * Name: mld_sign_signature_pre_hash_shake256 * @@ -665,7 +683,9 @@ __contract__( ensures((return_value == 0 && *siglen == MLDSA_CRYPTO_BYTES) || ((return_value == MLD_ERR_FAIL || return_value == MLD_ERR_OUT_OF_MEMORY) && *siglen == 0)) ); +#endif /* !MLD_CONFIG_NO_SIGN_API */ +#if !defined(MLD_CONFIG_NO_VERIFY_API) /************************************************* * Name: mld_sign_verify_pre_hash_shake256 * @@ -707,7 +727,9 @@ __contract__( requires(memory_no_alias(pk, MLDSA_CRYPTO_PUBLICKEYBYTES)) ensures(return_value == 0 || return_value == MLD_ERR_FAIL || return_value == MLD_ERR_OUT_OF_MEMORY) ); +#endif /* !MLD_CONFIG_NO_VERIFY_API */ +#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API) /* Maximum formatted domain separation message length: * - Pure ML-DSA: 0x00 || ctxlen || ctx (max 255) * - HashML-DSA: 0x01 || ctxlen || ctx (max 255) || oid (11) || ph (max 64) */ @@ -765,7 +787,9 @@ __contract__( assigns(memory_slice(prefix, MLD_DOMAIN_SEPARATION_MAX_BYTES)) ensures(return_value <= MLD_DOMAIN_SEPARATION_MAX_BYTES) ); +#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */ +#if !defined(MLD_CONFIG_NO_KEYPAIR_API) /************************************************* * Name: mld_sign_pk_from_sk * @@ -803,4 +827,7 @@ __contract__( assigns(memory_slice(pk, MLDSA_CRYPTO_PUBLICKEYBYTES)) ensures(return_value == 0 || return_value == MLD_ERR_FAIL || return_value == MLD_ERR_OUT_OF_MEMORY) ); +#endif /* !MLD_CONFIG_NO_KEYPAIR_API */ +#endif /* !MLD_CONFIG_INTERNAL_API_ONLY */ + #endif /* !MLD_SIGN_H */ diff --git a/proofs/cbmc/mldsa_native_config_cbmc.h b/proofs/cbmc/mldsa_native_config_cbmc.h index 6267361d7..27642fa6c 100644 --- a/proofs/cbmc/mldsa_native_config_cbmc.h +++ b/proofs/cbmc/mldsa_native_config_cbmc.h @@ -125,6 +125,57 @@ *****************************************************************************/ /* #define MLD_CONFIG_EXTERNAL_API_QUALIFIER */ +/****************************************************************************** + * Name: MLD_CONFIG_NO_KEYPAIR_API + * + * Description: By default, mldsa-native includes support for generating key + * pairs. If you don't need this, set MLD_CONFIG_NO_KEYPAIR_API + * to exclude crypto_sign_keypair, crypto_sign_keypair_internal, + * crypto_sign_pk_from_sk, and all internal APIs only needed by + * those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_KEYPAIR_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_SIGN_API + * + * Description: By default, mldsa-native includes support for creating + * signatures. If you don't need this, set MLD_CONFIG_NO_SIGN_API + * to exclude crypto_sign, crypto_sign_signature, + * crypto_sign_signature_extmu, crypto_sign_signature_internal, + * crypto_sign_signature_pre_hash_internal, + * crypto_sign_signature_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_SIGN_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_VERIFY_API + * + * Description: By default, mldsa-native includes support for verifying + * signatures. If you don't need this, set + * MLD_CONFIG_NO_VERIFY_API to exclude crypto_sign_open, + * crypto_sign_verify, crypto_sign_verify_extmu, + * crypto_sign_verify_internal, + * crypto_sign_verify_pre_hash_internal, + * crypto_sign_verify_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_VERIFY_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_INTERNAL_API_ONLY + * + * Description: Set this to remove all public APIs except + * crypto_sign_keypair_internal, crypto_sign_signature_internal, + * and crypto_sign_verify_internal. + * + *****************************************************************************/ +/* #define MLD_CONFIG_INTERNAL_API_ONLY */ + /****************************************************************************** * Name: MLD_CONFIG_NO_RANDOMIZED_API * diff --git a/scripts/autogen b/scripts/autogen index bd0e0b83c..194199980 100755 --- a/scripts/autogen +++ b/scripts/autogen @@ -988,7 +988,8 @@ def gen_aarch64_rej_uniform_eta_table(): yield from gen_header() yield '#include "../../../common.h"' yield "" - yield "#if defined(MLD_ARITH_BACKEND_AARCH64) && \\" + yield "#if defined(MLD_ARITH_BACKEND_AARCH64) && \\" + yield " !defined(MLD_CONFIG_NO_KEYPAIR_API) && \\" yield " !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED)" yield "" yield '#include "arith_native_aarch64.h"' @@ -1003,11 +1004,15 @@ def gen_aarch64_rej_uniform_eta_table(): yield ",".join(map(str, idxs)) + f" /* {i} */," yield "};" yield "" - yield "#else" + yield ("#else /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_NO_KEYPAIR_API && \\") + yield " !MLD_CONFIG_MULTILEVEL_NO_SHARED */" yield "" yield "MLD_EMPTY_CU(aarch64_rej_uniform_eta_table)" yield "" - yield "#endif" + yield ( + "#endif /* !(MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_NO_KEYPAIR_API && \\" + ) + yield " !MLD_CONFIG_MULTILEVEL_NO_SHARED) */" yield "" update_file("dev/aarch64_opt/src/rej_uniform_eta_table.c", "\n".join(gen())) @@ -1089,6 +1094,15 @@ def gen_aarch64_polyz_unpack_indices(bit_width): def gen_aarch64_polyz_unpack_table(): + # Map gamma1_bits to parameter set guards + param_set_guards = { + 17: "#if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || MLD_CONFIG_PARAMETER_SET == 44", + 19: ( + "#if defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || \\\n" + " (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87)" + ), + } + def format_row(vals): return ", ".join(f"{v:>3}" for v in vals) + "," @@ -1101,17 +1115,22 @@ def gen_aarch64_polyz_unpack_table(): yield "" yield '#include "arith_native_aarch64.h"' yield "" + yield "#if !defined(MLD_CONFIG_NO_SIGN_API) || !defined(MLD_CONFIG_NO_VERIFY_API)" yield "/* Table of indices used for tbl instructions in polyz_unpack_{17,19}." yield " * See autogen for details. */" yield "" for gamma1_bits in [17, 19]: bit_width = gamma1_bits + 1 indices = list(gen_aarch64_polyz_unpack_indices(bit_width)) + yield param_set_guards[gamma1_bits] yield f"MLD_ALIGN const uint8_t mld_polyz_unpack_{gamma1_bits}_indices[] = {{" for row_start in range(0, len(indices), 16): yield " " + format_row(indices[row_start : row_start + 16]) yield "};" + yield "#endif" yield "" + yield "#endif /* !MLD_CONFIG_NO_SIGN_API || !MLD_CONFIG_NO_VERIFY_API */" + yield "" yield "#else /* MLD_ARITH_BACKEND_AARCH64 && !MLD_CONFIG_MULTILEVEL_NO_SHARED */" yield "" yield "MLD_EMPTY_CU(aarch64_polyz_unpack_table)" diff --git a/scripts/tests b/scripts/tests index 56b2c86c3..8e09a643c 100755 --- a/scripts/tests +++ b/scripts/tests @@ -215,6 +215,8 @@ class TEST_TYPES(Enum): ALLOC = 20 BASIC_LOWRAM = 21 RNG_FAIL = 22 + DISABLED_APIS = 23 + DISABLED_APIS_NATIVE = 24 def is_benchmark(self): return self in [TEST_TYPES.BENCH, TEST_TYPES.BENCH_COMPONENTS] @@ -237,6 +239,8 @@ class TEST_TYPES(Enum): TEST_TYPES.MULTILEVEL_BUILD_NATIVE, TEST_TYPES.BASIC_DETERMINISTIC, TEST_TYPES.BASIC_LOWRAM, + TEST_TYPES.DISABLED_APIS, + TEST_TYPES.DISABLED_APIS_NATIVE, ] @staticmethod @@ -276,6 +280,10 @@ class TEST_TYPES(Enum): return "Example (mldsa-native as code package without randombytes() implementation)" if self == TEST_TYPES.BASIC_LOWRAM: return "Example (mldsa-native with reduced RAM usage)" + if self == TEST_TYPES.DISABLED_APIS: + return "Example (disabled APIs)" + if self == TEST_TYPES.DISABLED_APIS_NATIVE: + return "Example (disabled APIs, native)" if self == TEST_TYPES.MONOLITHIC_BUILD: return "Example (monobuild)" if self == TEST_TYPES.MONOLITHIC_BUILD_NATIVE: @@ -322,6 +330,10 @@ class TEST_TYPES(Enum): return "examples/multilevel_build" if self == TEST_TYPES.MULTILEVEL_BUILD_NATIVE: return "examples/multilevel_build_native" + if self == TEST_TYPES.DISABLED_APIS: + return "examples/disabled_apis" + if self == TEST_TYPES.DISABLED_APIS_NATIVE: + return "examples/disabled_apis_native" return "" def make_target(self): @@ -361,6 +373,10 @@ class TEST_TYPES(Enum): return "" if self == TEST_TYPES.MULTILEVEL_BUILD_NATIVE: return "" + if self == TEST_TYPES.DISABLED_APIS: + return "" + if self == TEST_TYPES.DISABLED_APIS_NATIVE: + return "" if self == TEST_TYPES.SIZE: return "size" if self == TEST_TYPES.UNIT: @@ -1230,6 +1246,8 @@ def cli(): "monolithic_build_multilevel_native", "multilevel_build", "multilevel_build_native", + "disabled_apis", + "disabled_apis_native", ], action="append", default=[], @@ -1311,6 +1329,8 @@ def cli(): "monolithic_build_multilevel_native", "multilevel_build", "multilevel_build_native", + "disabled_apis", + "disabled_apis_native", ], action="append", ) diff --git a/test/configs/break_pct_config.h b/test/configs/break_pct_config.h index e2e1014af..2b4b81a6f 100644 --- a/test/configs/break_pct_config.h +++ b/test/configs/break_pct_config.h @@ -127,6 +127,57 @@ *****************************************************************************/ /* #define MLD_CONFIG_EXTERNAL_API_QUALIFIER */ +/****************************************************************************** + * Name: MLD_CONFIG_NO_KEYPAIR_API + * + * Description: By default, mldsa-native includes support for generating key + * pairs. If you don't need this, set MLD_CONFIG_NO_KEYPAIR_API + * to exclude crypto_sign_keypair, crypto_sign_keypair_internal, + * crypto_sign_pk_from_sk, and all internal APIs only needed by + * those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_KEYPAIR_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_SIGN_API + * + * Description: By default, mldsa-native includes support for creating + * signatures. If you don't need this, set MLD_CONFIG_NO_SIGN_API + * to exclude crypto_sign, crypto_sign_signature, + * crypto_sign_signature_extmu, crypto_sign_signature_internal, + * crypto_sign_signature_pre_hash_internal, + * crypto_sign_signature_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_SIGN_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_VERIFY_API + * + * Description: By default, mldsa-native includes support for verifying + * signatures. If you don't need this, set + * MLD_CONFIG_NO_VERIFY_API to exclude crypto_sign_open, + * crypto_sign_verify, crypto_sign_verify_extmu, + * crypto_sign_verify_internal, + * crypto_sign_verify_pre_hash_internal, + * crypto_sign_verify_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_VERIFY_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_INTERNAL_API_ONLY + * + * Description: Set this to remove all public APIs except + * crypto_sign_keypair_internal, crypto_sign_signature_internal, + * and crypto_sign_verify_internal. + * + *****************************************************************************/ +/* #define MLD_CONFIG_INTERNAL_API_ONLY */ + /****************************************************************************** * Name: MLD_CONFIG_NO_RANDOMIZED_API * diff --git a/test/configs/custom_memcpy_config.h b/test/configs/custom_memcpy_config.h index d9065a3e6..adcef5e84 100644 --- a/test/configs/custom_memcpy_config.h +++ b/test/configs/custom_memcpy_config.h @@ -126,6 +126,57 @@ *****************************************************************************/ /* #define MLD_CONFIG_EXTERNAL_API_QUALIFIER */ +/****************************************************************************** + * Name: MLD_CONFIG_NO_KEYPAIR_API + * + * Description: By default, mldsa-native includes support for generating key + * pairs. If you don't need this, set MLD_CONFIG_NO_KEYPAIR_API + * to exclude crypto_sign_keypair, crypto_sign_keypair_internal, + * crypto_sign_pk_from_sk, and all internal APIs only needed by + * those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_KEYPAIR_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_SIGN_API + * + * Description: By default, mldsa-native includes support for creating + * signatures. If you don't need this, set MLD_CONFIG_NO_SIGN_API + * to exclude crypto_sign, crypto_sign_signature, + * crypto_sign_signature_extmu, crypto_sign_signature_internal, + * crypto_sign_signature_pre_hash_internal, + * crypto_sign_signature_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_SIGN_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_VERIFY_API + * + * Description: By default, mldsa-native includes support for verifying + * signatures. If you don't need this, set + * MLD_CONFIG_NO_VERIFY_API to exclude crypto_sign_open, + * crypto_sign_verify, crypto_sign_verify_extmu, + * crypto_sign_verify_internal, + * crypto_sign_verify_pre_hash_internal, + * crypto_sign_verify_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_VERIFY_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_INTERNAL_API_ONLY + * + * Description: Set this to remove all public APIs except + * crypto_sign_keypair_internal, crypto_sign_signature_internal, + * and crypto_sign_verify_internal. + * + *****************************************************************************/ +/* #define MLD_CONFIG_INTERNAL_API_ONLY */ + /****************************************************************************** * Name: MLD_CONFIG_NO_RANDOMIZED_API * diff --git a/test/configs/custom_memset_config.h b/test/configs/custom_memset_config.h index b2c931139..01c8ca3bc 100644 --- a/test/configs/custom_memset_config.h +++ b/test/configs/custom_memset_config.h @@ -126,6 +126,57 @@ *****************************************************************************/ /* #define MLD_CONFIG_EXTERNAL_API_QUALIFIER */ +/****************************************************************************** + * Name: MLD_CONFIG_NO_KEYPAIR_API + * + * Description: By default, mldsa-native includes support for generating key + * pairs. If you don't need this, set MLD_CONFIG_NO_KEYPAIR_API + * to exclude crypto_sign_keypair, crypto_sign_keypair_internal, + * crypto_sign_pk_from_sk, and all internal APIs only needed by + * those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_KEYPAIR_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_SIGN_API + * + * Description: By default, mldsa-native includes support for creating + * signatures. If you don't need this, set MLD_CONFIG_NO_SIGN_API + * to exclude crypto_sign, crypto_sign_signature, + * crypto_sign_signature_extmu, crypto_sign_signature_internal, + * crypto_sign_signature_pre_hash_internal, + * crypto_sign_signature_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_SIGN_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_VERIFY_API + * + * Description: By default, mldsa-native includes support for verifying + * signatures. If you don't need this, set + * MLD_CONFIG_NO_VERIFY_API to exclude crypto_sign_open, + * crypto_sign_verify, crypto_sign_verify_extmu, + * crypto_sign_verify_internal, + * crypto_sign_verify_pre_hash_internal, + * crypto_sign_verify_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_VERIFY_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_INTERNAL_API_ONLY + * + * Description: Set this to remove all public APIs except + * crypto_sign_keypair_internal, crypto_sign_signature_internal, + * and crypto_sign_verify_internal. + * + *****************************************************************************/ +/* #define MLD_CONFIG_INTERNAL_API_ONLY */ + /****************************************************************************** * Name: MLD_CONFIG_NO_RANDOMIZED_API * diff --git a/test/configs/custom_native_capability_config_0.h b/test/configs/custom_native_capability_config_0.h index 1d08a7df6..575295392 100644 --- a/test/configs/custom_native_capability_config_0.h +++ b/test/configs/custom_native_capability_config_0.h @@ -127,6 +127,57 @@ *****************************************************************************/ /* #define MLD_CONFIG_EXTERNAL_API_QUALIFIER */ +/****************************************************************************** + * Name: MLD_CONFIG_NO_KEYPAIR_API + * + * Description: By default, mldsa-native includes support for generating key + * pairs. If you don't need this, set MLD_CONFIG_NO_KEYPAIR_API + * to exclude crypto_sign_keypair, crypto_sign_keypair_internal, + * crypto_sign_pk_from_sk, and all internal APIs only needed by + * those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_KEYPAIR_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_SIGN_API + * + * Description: By default, mldsa-native includes support for creating + * signatures. If you don't need this, set MLD_CONFIG_NO_SIGN_API + * to exclude crypto_sign, crypto_sign_signature, + * crypto_sign_signature_extmu, crypto_sign_signature_internal, + * crypto_sign_signature_pre_hash_internal, + * crypto_sign_signature_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_SIGN_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_VERIFY_API + * + * Description: By default, mldsa-native includes support for verifying + * signatures. If you don't need this, set + * MLD_CONFIG_NO_VERIFY_API to exclude crypto_sign_open, + * crypto_sign_verify, crypto_sign_verify_extmu, + * crypto_sign_verify_internal, + * crypto_sign_verify_pre_hash_internal, + * crypto_sign_verify_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_VERIFY_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_INTERNAL_API_ONLY + * + * Description: Set this to remove all public APIs except + * crypto_sign_keypair_internal, crypto_sign_signature_internal, + * and crypto_sign_verify_internal. + * + *****************************************************************************/ +/* #define MLD_CONFIG_INTERNAL_API_ONLY */ + /****************************************************************************** * Name: MLD_CONFIG_NO_RANDOMIZED_API * diff --git a/test/configs/custom_native_capability_config_1.h b/test/configs/custom_native_capability_config_1.h index 475e3bc7e..c9d66254d 100644 --- a/test/configs/custom_native_capability_config_1.h +++ b/test/configs/custom_native_capability_config_1.h @@ -127,6 +127,57 @@ *****************************************************************************/ /* #define MLD_CONFIG_EXTERNAL_API_QUALIFIER */ +/****************************************************************************** + * Name: MLD_CONFIG_NO_KEYPAIR_API + * + * Description: By default, mldsa-native includes support for generating key + * pairs. If you don't need this, set MLD_CONFIG_NO_KEYPAIR_API + * to exclude crypto_sign_keypair, crypto_sign_keypair_internal, + * crypto_sign_pk_from_sk, and all internal APIs only needed by + * those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_KEYPAIR_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_SIGN_API + * + * Description: By default, mldsa-native includes support for creating + * signatures. If you don't need this, set MLD_CONFIG_NO_SIGN_API + * to exclude crypto_sign, crypto_sign_signature, + * crypto_sign_signature_extmu, crypto_sign_signature_internal, + * crypto_sign_signature_pre_hash_internal, + * crypto_sign_signature_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_SIGN_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_VERIFY_API + * + * Description: By default, mldsa-native includes support for verifying + * signatures. If you don't need this, set + * MLD_CONFIG_NO_VERIFY_API to exclude crypto_sign_open, + * crypto_sign_verify, crypto_sign_verify_extmu, + * crypto_sign_verify_internal, + * crypto_sign_verify_pre_hash_internal, + * crypto_sign_verify_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_VERIFY_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_INTERNAL_API_ONLY + * + * Description: Set this to remove all public APIs except + * crypto_sign_keypair_internal, crypto_sign_signature_internal, + * and crypto_sign_verify_internal. + * + *****************************************************************************/ +/* #define MLD_CONFIG_INTERNAL_API_ONLY */ + /****************************************************************************** * Name: MLD_CONFIG_NO_RANDOMIZED_API * diff --git a/test/configs/custom_native_capability_config_CPUID_AVX2.h b/test/configs/custom_native_capability_config_CPUID_AVX2.h index bd040208a..89144f699 100644 --- a/test/configs/custom_native_capability_config_CPUID_AVX2.h +++ b/test/configs/custom_native_capability_config_CPUID_AVX2.h @@ -127,6 +127,57 @@ *****************************************************************************/ /* #define MLD_CONFIG_EXTERNAL_API_QUALIFIER */ +/****************************************************************************** + * Name: MLD_CONFIG_NO_KEYPAIR_API + * + * Description: By default, mldsa-native includes support for generating key + * pairs. If you don't need this, set MLD_CONFIG_NO_KEYPAIR_API + * to exclude crypto_sign_keypair, crypto_sign_keypair_internal, + * crypto_sign_pk_from_sk, and all internal APIs only needed by + * those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_KEYPAIR_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_SIGN_API + * + * Description: By default, mldsa-native includes support for creating + * signatures. If you don't need this, set MLD_CONFIG_NO_SIGN_API + * to exclude crypto_sign, crypto_sign_signature, + * crypto_sign_signature_extmu, crypto_sign_signature_internal, + * crypto_sign_signature_pre_hash_internal, + * crypto_sign_signature_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_SIGN_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_VERIFY_API + * + * Description: By default, mldsa-native includes support for verifying + * signatures. If you don't need this, set + * MLD_CONFIG_NO_VERIFY_API to exclude crypto_sign_open, + * crypto_sign_verify, crypto_sign_verify_extmu, + * crypto_sign_verify_internal, + * crypto_sign_verify_pre_hash_internal, + * crypto_sign_verify_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_VERIFY_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_INTERNAL_API_ONLY + * + * Description: Set this to remove all public APIs except + * crypto_sign_keypair_internal, crypto_sign_signature_internal, + * and crypto_sign_verify_internal. + * + *****************************************************************************/ +/* #define MLD_CONFIG_INTERNAL_API_ONLY */ + /****************************************************************************** * Name: MLD_CONFIG_NO_RANDOMIZED_API * diff --git a/test/configs/custom_native_capability_config_ID_AA64PFR1_EL1.h b/test/configs/custom_native_capability_config_ID_AA64PFR1_EL1.h index dfc2c437a..051bc83ef 100644 --- a/test/configs/custom_native_capability_config_ID_AA64PFR1_EL1.h +++ b/test/configs/custom_native_capability_config_ID_AA64PFR1_EL1.h @@ -127,6 +127,57 @@ *****************************************************************************/ /* #define MLD_CONFIG_EXTERNAL_API_QUALIFIER */ +/****************************************************************************** + * Name: MLD_CONFIG_NO_KEYPAIR_API + * + * Description: By default, mldsa-native includes support for generating key + * pairs. If you don't need this, set MLD_CONFIG_NO_KEYPAIR_API + * to exclude crypto_sign_keypair, crypto_sign_keypair_internal, + * crypto_sign_pk_from_sk, and all internal APIs only needed by + * those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_KEYPAIR_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_SIGN_API + * + * Description: By default, mldsa-native includes support for creating + * signatures. If you don't need this, set MLD_CONFIG_NO_SIGN_API + * to exclude crypto_sign, crypto_sign_signature, + * crypto_sign_signature_extmu, crypto_sign_signature_internal, + * crypto_sign_signature_pre_hash_internal, + * crypto_sign_signature_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_SIGN_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_VERIFY_API + * + * Description: By default, mldsa-native includes support for verifying + * signatures. If you don't need this, set + * MLD_CONFIG_NO_VERIFY_API to exclude crypto_sign_open, + * crypto_sign_verify, crypto_sign_verify_extmu, + * crypto_sign_verify_internal, + * crypto_sign_verify_pre_hash_internal, + * crypto_sign_verify_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_VERIFY_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_INTERNAL_API_ONLY + * + * Description: Set this to remove all public APIs except + * crypto_sign_keypair_internal, crypto_sign_signature_internal, + * and crypto_sign_verify_internal. + * + *****************************************************************************/ +/* #define MLD_CONFIG_INTERNAL_API_ONLY */ + /****************************************************************************** * Name: MLD_CONFIG_NO_RANDOMIZED_API * diff --git a/test/configs/custom_randombytes_config.h b/test/configs/custom_randombytes_config.h index fb87ed4c9..8a556a16c 100644 --- a/test/configs/custom_randombytes_config.h +++ b/test/configs/custom_randombytes_config.h @@ -126,6 +126,57 @@ *****************************************************************************/ /* #define MLD_CONFIG_EXTERNAL_API_QUALIFIER */ +/****************************************************************************** + * Name: MLD_CONFIG_NO_KEYPAIR_API + * + * Description: By default, mldsa-native includes support for generating key + * pairs. If you don't need this, set MLD_CONFIG_NO_KEYPAIR_API + * to exclude crypto_sign_keypair, crypto_sign_keypair_internal, + * crypto_sign_pk_from_sk, and all internal APIs only needed by + * those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_KEYPAIR_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_SIGN_API + * + * Description: By default, mldsa-native includes support for creating + * signatures. If you don't need this, set MLD_CONFIG_NO_SIGN_API + * to exclude crypto_sign, crypto_sign_signature, + * crypto_sign_signature_extmu, crypto_sign_signature_internal, + * crypto_sign_signature_pre_hash_internal, + * crypto_sign_signature_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_SIGN_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_VERIFY_API + * + * Description: By default, mldsa-native includes support for verifying + * signatures. If you don't need this, set + * MLD_CONFIG_NO_VERIFY_API to exclude crypto_sign_open, + * crypto_sign_verify, crypto_sign_verify_extmu, + * crypto_sign_verify_internal, + * crypto_sign_verify_pre_hash_internal, + * crypto_sign_verify_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_VERIFY_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_INTERNAL_API_ONLY + * + * Description: Set this to remove all public APIs except + * crypto_sign_keypair_internal, crypto_sign_signature_internal, + * and crypto_sign_verify_internal. + * + *****************************************************************************/ +/* #define MLD_CONFIG_INTERNAL_API_ONLY */ + /****************************************************************************** * Name: MLD_CONFIG_NO_RANDOMIZED_API * diff --git a/test/configs/custom_stdlib_config.h b/test/configs/custom_stdlib_config.h index 36c8eaf9d..87e359a17 100644 --- a/test/configs/custom_stdlib_config.h +++ b/test/configs/custom_stdlib_config.h @@ -127,6 +127,57 @@ *****************************************************************************/ /* #define MLD_CONFIG_EXTERNAL_API_QUALIFIER */ +/****************************************************************************** + * Name: MLD_CONFIG_NO_KEYPAIR_API + * + * Description: By default, mldsa-native includes support for generating key + * pairs. If you don't need this, set MLD_CONFIG_NO_KEYPAIR_API + * to exclude crypto_sign_keypair, crypto_sign_keypair_internal, + * crypto_sign_pk_from_sk, and all internal APIs only needed by + * those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_KEYPAIR_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_SIGN_API + * + * Description: By default, mldsa-native includes support for creating + * signatures. If you don't need this, set MLD_CONFIG_NO_SIGN_API + * to exclude crypto_sign, crypto_sign_signature, + * crypto_sign_signature_extmu, crypto_sign_signature_internal, + * crypto_sign_signature_pre_hash_internal, + * crypto_sign_signature_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_SIGN_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_VERIFY_API + * + * Description: By default, mldsa-native includes support for verifying + * signatures. If you don't need this, set + * MLD_CONFIG_NO_VERIFY_API to exclude crypto_sign_open, + * crypto_sign_verify, crypto_sign_verify_extmu, + * crypto_sign_verify_internal, + * crypto_sign_verify_pre_hash_internal, + * crypto_sign_verify_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_VERIFY_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_INTERNAL_API_ONLY + * + * Description: Set this to remove all public APIs except + * crypto_sign_keypair_internal, crypto_sign_signature_internal, + * and crypto_sign_verify_internal. + * + *****************************************************************************/ +/* #define MLD_CONFIG_INTERNAL_API_ONLY */ + /****************************************************************************** * Name: MLD_CONFIG_NO_RANDOMIZED_API * diff --git a/test/configs/custom_zeroize_config.h b/test/configs/custom_zeroize_config.h index 3102fd8ba..9b6c62b04 100644 --- a/test/configs/custom_zeroize_config.h +++ b/test/configs/custom_zeroize_config.h @@ -126,6 +126,57 @@ *****************************************************************************/ /* #define MLD_CONFIG_EXTERNAL_API_QUALIFIER */ +/****************************************************************************** + * Name: MLD_CONFIG_NO_KEYPAIR_API + * + * Description: By default, mldsa-native includes support for generating key + * pairs. If you don't need this, set MLD_CONFIG_NO_KEYPAIR_API + * to exclude crypto_sign_keypair, crypto_sign_keypair_internal, + * crypto_sign_pk_from_sk, and all internal APIs only needed by + * those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_KEYPAIR_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_SIGN_API + * + * Description: By default, mldsa-native includes support for creating + * signatures. If you don't need this, set MLD_CONFIG_NO_SIGN_API + * to exclude crypto_sign, crypto_sign_signature, + * crypto_sign_signature_extmu, crypto_sign_signature_internal, + * crypto_sign_signature_pre_hash_internal, + * crypto_sign_signature_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_SIGN_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_VERIFY_API + * + * Description: By default, mldsa-native includes support for verifying + * signatures. If you don't need this, set + * MLD_CONFIG_NO_VERIFY_API to exclude crypto_sign_open, + * crypto_sign_verify, crypto_sign_verify_extmu, + * crypto_sign_verify_internal, + * crypto_sign_verify_pre_hash_internal, + * crypto_sign_verify_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_VERIFY_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_INTERNAL_API_ONLY + * + * Description: Set this to remove all public APIs except + * crypto_sign_keypair_internal, crypto_sign_signature_internal, + * and crypto_sign_verify_internal. + * + *****************************************************************************/ +/* #define MLD_CONFIG_INTERNAL_API_ONLY */ + /****************************************************************************** * Name: MLD_CONFIG_NO_RANDOMIZED_API * diff --git a/test/configs/no_asm_config.h b/test/configs/no_asm_config.h index 8127b4c3a..068da470e 100644 --- a/test/configs/no_asm_config.h +++ b/test/configs/no_asm_config.h @@ -127,6 +127,57 @@ *****************************************************************************/ /* #define MLD_CONFIG_EXTERNAL_API_QUALIFIER */ +/****************************************************************************** + * Name: MLD_CONFIG_NO_KEYPAIR_API + * + * Description: By default, mldsa-native includes support for generating key + * pairs. If you don't need this, set MLD_CONFIG_NO_KEYPAIR_API + * to exclude crypto_sign_keypair, crypto_sign_keypair_internal, + * crypto_sign_pk_from_sk, and all internal APIs only needed by + * those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_KEYPAIR_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_SIGN_API + * + * Description: By default, mldsa-native includes support for creating + * signatures. If you don't need this, set MLD_CONFIG_NO_SIGN_API + * to exclude crypto_sign, crypto_sign_signature, + * crypto_sign_signature_extmu, crypto_sign_signature_internal, + * crypto_sign_signature_pre_hash_internal, + * crypto_sign_signature_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_SIGN_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_VERIFY_API + * + * Description: By default, mldsa-native includes support for verifying + * signatures. If you don't need this, set + * MLD_CONFIG_NO_VERIFY_API to exclude crypto_sign_open, + * crypto_sign_verify, crypto_sign_verify_extmu, + * crypto_sign_verify_internal, + * crypto_sign_verify_pre_hash_internal, + * crypto_sign_verify_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_VERIFY_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_INTERNAL_API_ONLY + * + * Description: Set this to remove all public APIs except + * crypto_sign_keypair_internal, crypto_sign_signature_internal, + * and crypto_sign_verify_internal. + * + *****************************************************************************/ +/* #define MLD_CONFIG_INTERNAL_API_ONLY */ + /****************************************************************************** * Name: MLD_CONFIG_NO_RANDOMIZED_API * diff --git a/test/configs/serial_fips202_config.h b/test/configs/serial_fips202_config.h index 918575d2b..5fcc32866 100644 --- a/test/configs/serial_fips202_config.h +++ b/test/configs/serial_fips202_config.h @@ -126,6 +126,57 @@ *****************************************************************************/ /* #define MLD_CONFIG_EXTERNAL_API_QUALIFIER */ +/****************************************************************************** + * Name: MLD_CONFIG_NO_KEYPAIR_API + * + * Description: By default, mldsa-native includes support for generating key + * pairs. If you don't need this, set MLD_CONFIG_NO_KEYPAIR_API + * to exclude crypto_sign_keypair, crypto_sign_keypair_internal, + * crypto_sign_pk_from_sk, and all internal APIs only needed by + * those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_KEYPAIR_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_SIGN_API + * + * Description: By default, mldsa-native includes support for creating + * signatures. If you don't need this, set MLD_CONFIG_NO_SIGN_API + * to exclude crypto_sign, crypto_sign_signature, + * crypto_sign_signature_extmu, crypto_sign_signature_internal, + * crypto_sign_signature_pre_hash_internal, + * crypto_sign_signature_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_SIGN_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_VERIFY_API + * + * Description: By default, mldsa-native includes support for verifying + * signatures. If you don't need this, set + * MLD_CONFIG_NO_VERIFY_API to exclude crypto_sign_open, + * crypto_sign_verify, crypto_sign_verify_extmu, + * crypto_sign_verify_internal, + * crypto_sign_verify_pre_hash_internal, + * crypto_sign_verify_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_VERIFY_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_INTERNAL_API_ONLY + * + * Description: Set this to remove all public APIs except + * crypto_sign_keypair_internal, crypto_sign_signature_internal, + * and crypto_sign_verify_internal. + * + *****************************************************************************/ +/* #define MLD_CONFIG_INTERNAL_API_ONLY */ + /****************************************************************************** * Name: MLD_CONFIG_NO_RANDOMIZED_API * diff --git a/test/configs/test_alloc_config.h b/test/configs/test_alloc_config.h index 44e9cad80..7b6099891 100644 --- a/test/configs/test_alloc_config.h +++ b/test/configs/test_alloc_config.h @@ -129,6 +129,57 @@ *****************************************************************************/ /* #define MLD_CONFIG_EXTERNAL_API_QUALIFIER */ +/****************************************************************************** + * Name: MLD_CONFIG_NO_KEYPAIR_API + * + * Description: By default, mldsa-native includes support for generating key + * pairs. If you don't need this, set MLD_CONFIG_NO_KEYPAIR_API + * to exclude crypto_sign_keypair, crypto_sign_keypair_internal, + * crypto_sign_pk_from_sk, and all internal APIs only needed by + * those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_KEYPAIR_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_SIGN_API + * + * Description: By default, mldsa-native includes support for creating + * signatures. If you don't need this, set MLD_CONFIG_NO_SIGN_API + * to exclude crypto_sign, crypto_sign_signature, + * crypto_sign_signature_extmu, crypto_sign_signature_internal, + * crypto_sign_signature_pre_hash_internal, + * crypto_sign_signature_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_SIGN_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_NO_VERIFY_API + * + * Description: By default, mldsa-native includes support for verifying + * signatures. If you don't need this, set + * MLD_CONFIG_NO_VERIFY_API to exclude crypto_sign_open, + * crypto_sign_verify, crypto_sign_verify_extmu, + * crypto_sign_verify_internal, + * crypto_sign_verify_pre_hash_internal, + * crypto_sign_verify_pre_hash_shake256, and all internal APIs + * only needed by those functions. + * + *****************************************************************************/ +/* #define MLD_CONFIG_NO_VERIFY_API */ + +/****************************************************************************** + * Name: MLD_CONFIG_INTERNAL_API_ONLY + * + * Description: Set this to remove all public APIs except + * crypto_sign_keypair_internal, crypto_sign_signature_internal, + * and crypto_sign_verify_internal. + * + *****************************************************************************/ +/* #define MLD_CONFIG_INTERNAL_API_ONLY */ + /****************************************************************************** * Name: MLD_CONFIG_NO_RANDOMIZED_API *