From eb06f19c3294c34cdd39ed7c35b819f7ff5655d7 Mon Sep 17 00:00:00 2001 From: Skgland Date: Mon, 29 Jun 2026 20:13:10 +0200 Subject: [PATCH] fix incorrect missing feature errors this was accidentally introduced in mthom/scryer-prolog#3320 fixes mthom/scryer-prolog#3397 --- src/machine/system_calls.rs | 181 ++++++++++++++---------------------- 1 file changed, 70 insertions(+), 111 deletions(-) diff --git a/src/machine/system_calls.rs b/src/machine/system_calls.rs index 0e36d1ad..ae65d752 100644 --- a/src/machine/system_calls.rs +++ b/src/machine/system_calls.rs @@ -7915,7 +7915,7 @@ impl Machine { #[cfg(not(feature = "crypto-full"))] { let stub_gen = || functor_stub(atom!("crypto_random_byte"), 1); - let err = self.machine_st.missing_feature_error(atom!("crypto")); + let err = self.machine_st.missing_feature_error(atom!("crypto-full")); let exception = self.machine_st.error_form(err, stub_gen()); self.machine_st.throw_exception(exception); } @@ -8079,7 +8079,7 @@ impl Machine { #[cfg(not(feature = "crypto-full"))] { let stub_gen = || functor_stub(atom!("crypto_data_hash"), 1); - let err = self.machine_st.missing_feature_error(atom!("crypto")); + let err = self.machine_st.missing_feature_error(atom!("crypto-full")); let exception = self.machine_st.error_form(err, stub_gen()); self.machine_st.throw_exception(exception); return; @@ -8132,7 +8132,7 @@ impl Machine { #[cfg(not(feature = "crypto-full"))] { - let err = self.machine_st.missing_feature_error(atom!("crypto")); + let err = self.machine_st.missing_feature_error(atom!("crypto-full")); let exception = self.machine_st.error_form(err, stub_gen()); self.machine_st.throw_exception(exception); } @@ -8215,7 +8215,7 @@ impl Machine { #[cfg(not(feature = "crypto-full"))] { - let err = self.machine_st.missing_feature_error(atom!("crypto")); + let err = self.machine_st.missing_feature_error(atom!("crypto-full")); let exception = self.machine_st.error_form(err, stub1_gen()); self.machine_st.throw_exception(exception); } @@ -8283,7 +8283,7 @@ impl Machine { #[cfg(not(feature = "crypto-full"))] { - let err = self.machine_st.missing_feature_error(atom!("crypto")); + let err = self.machine_st.missing_feature_error(atom!("crypto-full")); let exception = self.machine_st.error_form(err, stub1_gen()); self.machine_st.throw_exception(exception); } @@ -8409,152 +8409,111 @@ impl Machine { pub(crate) fn crypto_curve_scalar_mult(&mut self) { let stub_gen = || functor_stub(atom!("crypto_curve_scalar_mult"), 4); - { - let scalar_bytes = self - .machine_st - .integers_to_bytevec(self.machine_st.registers[2], stub_gen); - let point_bytes = self - .machine_st - .integers_to_bytevec(self.machine_st.registers[3], stub_gen); + let scalar_bytes = self + .machine_st + .integers_to_bytevec(self.machine_st.registers[2], stub_gen); + let point_bytes = self + .machine_st + .integers_to_bytevec(self.machine_st.registers[3], stub_gen); - let mut point = secp256k1::Point::decode(&point_bytes).unwrap(); - let scalar = secp256k1::Scalar::decode_reduce(&scalar_bytes); - point *= scalar; + let mut point = secp256k1::Point::decode(&point_bytes).unwrap(); + let scalar = secp256k1::Scalar::decode_reduce(&scalar_bytes); + point *= scalar; - let uncompressed = step_or_resource_error!( - self.machine_st, - self.u8s_to_string(&point.encode_uncompressed()) - ); + let uncompressed = step_or_resource_error!( + self.machine_st, + self.u8s_to_string(&point.encode_uncompressed()) + ); - unify!(self.machine_st, self.machine_st.registers[4], uncompressed); - } - - { - let err = self.machine_st.missing_feature_error(atom!("crypto")); - let exception = self.machine_st.error_form(err, stub_gen()); - self.machine_st.throw_exception(exception); - } + unify!(self.machine_st, self.machine_st.registers[4], uncompressed); } #[inline(always)] pub(crate) fn ed25519_seed_to_public_key(&mut self) { let stub_gen = || functor_stub(atom!("ed25519_seed_keypair"), 2); - { - let seed_bytes = self - .machine_st - .integers_to_bytevec(self.machine_st.registers[1], stub_gen); + let seed_bytes = self + .machine_st + .integers_to_bytevec(self.machine_st.registers[1], stub_gen); - let skey = ed25519::PrivateKey::from_seed(&seed_bytes); + let skey = ed25519::PrivateKey::from_seed(&seed_bytes); - let complete_string = step_or_resource_error!( - self.machine_st, - self.u8s_to_string(skey.public_key.encoded.as_ref()) - ); + let complete_string = step_or_resource_error!( + self.machine_st, + self.u8s_to_string(skey.public_key.encoded.as_ref()) + ); - unify!( - self.machine_st, - self.machine_st.registers[2], - complete_string - ); - } - - { - let err = self.machine_st.missing_feature_error(atom!("crypto")); - let exception = self.machine_st.error_form(err, stub_gen()); - self.machine_st.throw_exception(exception); - } + unify!( + self.machine_st, + self.machine_st.registers[2], + complete_string + ); } #[inline(always)] pub(crate) fn ed25519_sign_raw(&mut self) { let stub_gen = || functor_stub(atom!("ed25519_sign"), 4); - { - let seed_bytes = self - .machine_st - .integers_to_bytevec(self.machine_st.registers[1], stub_gen); + let seed_bytes = self + .machine_st + .integers_to_bytevec(self.machine_st.registers[1], stub_gen); - let skey = ed25519::PrivateKey::from_seed(&seed_bytes); + let skey = ed25519::PrivateKey::from_seed(&seed_bytes); - let encoding = cell_as_atom!(self.deref_register(3)); - let data = self.string_encoding_bytes(self.machine_st.registers[2], encoding); + let encoding = cell_as_atom!(self.deref_register(3)); + let data = self.string_encoding_bytes(self.machine_st.registers[2], encoding); - let sig = skey.sign_raw(&data); - let sig_list = step_or_resource_error!( - self.machine_st, - sized_iter_to_heap_list( - &mut self.machine_st.heap, - sig.as_ref().len(), - sig.as_ref() - .iter() - .map(|b| fixnum_as_cell!(Fixnum::build_with(*b))) - ) - ); + let sig = skey.sign_raw(&data); + let sig_list = step_or_resource_error!( + self.machine_st, + sized_iter_to_heap_list( + &mut self.machine_st.heap, + sig.as_ref().len(), + sig.as_ref() + .iter() + .map(|b| fixnum_as_cell!(Fixnum::build_with(*b))) + ) + ); - unify!(self.machine_st, self.machine_st.registers[4], sig_list); - } - - { - let err = self.machine_st.missing_feature_error(atom!("crypto")); - let exception = self.machine_st.error_form(err, stub_gen()); - self.machine_st.throw_exception(exception); - } + unify!(self.machine_st, self.machine_st.registers[4], sig_list); } #[inline(always)] pub(crate) fn ed25519_verify_raw(&mut self) { let stub_gen = || functor_stub(atom!("ed25519_verify"), 4); - { - let key_bytes = - self.string_encoding_bytes(self.machine_st.registers[1], atom!("octet")); - let pkey = ed25519::PublicKey::decode(&key_bytes).unwrap(); + let key_bytes = self.string_encoding_bytes(self.machine_st.registers[1], atom!("octet")); + let pkey = ed25519::PublicKey::decode(&key_bytes).unwrap(); - let encoding = cell_as_atom!(self.deref_register(3)); - let data = self.string_encoding_bytes(self.machine_st.registers[2], encoding); + let encoding = cell_as_atom!(self.deref_register(3)); + let data = self.string_encoding_bytes(self.machine_st.registers[2], encoding); - let signature = self - .machine_st - .integers_to_bytevec(self.machine_st.registers[4], stub_gen); + let signature = self + .machine_st + .integers_to_bytevec(self.machine_st.registers[4], stub_gen); - self.machine_st.fail = !pkey.verify_raw(&signature, &data); - } - - { - let err = self.machine_st.missing_feature_error(atom!("crypto")); - let exception = self.machine_st.error_form(err, stub_gen()); - self.machine_st.throw_exception(exception); - } + self.machine_st.fail = !pkey.verify_raw(&signature, &data); } #[inline(always)] pub(crate) fn curve25519_scalar_mult(&mut self) { let stub_gen = || functor_stub(atom!("curve25519_scalar_mult"), 3); - { - let scalar_bytes = self - .machine_st - .integers_to_bytevec(self.machine_st.registers[1], stub_gen); - let point_bytes = self - .machine_st - .integers_to_bytevec(self.machine_st.registers[2], stub_gen); + let scalar_bytes = self + .machine_st + .integers_to_bytevec(self.machine_st.registers[1], stub_gen); + let point_bytes = self + .machine_st + .integers_to_bytevec(self.machine_st.registers[2], stub_gen); - let result = x25519::x25519( - &<[u8; 32]>::try_from(&point_bytes[..]).unwrap(), - &<[u8; 32]>::try_from(&scalar_bytes[..]).unwrap(), - ); + let result = x25519::x25519( + &<[u8; 32]>::try_from(&point_bytes[..]).unwrap(), + &<[u8; 32]>::try_from(&scalar_bytes[..]).unwrap(), + ); - let string = step_or_resource_error!(self.machine_st, self.u8s_to_string(&result[..])); + let string = step_or_resource_error!(self.machine_st, self.u8s_to_string(&result[..])); - unify!(self.machine_st, self.machine_st.registers[3], string); - } - - { - let err = self.machine_st.missing_feature_error(atom!("crypto")); - let exception = self.machine_st.error_form(err, stub_gen()); - self.machine_st.throw_exception(exception); - } + unify!(self.machine_st, self.machine_st.registers[3], string); } #[inline(always)]