Merge pull request #3398 from Skgland/fix-3320

fix incorrect missing feature errors
This commit is contained in:
Mark Thom
2026-06-30 17:25:02 -07:00
committed by GitHub

View File

@@ -7915,7 +7915,7 @@ impl Machine {
#[cfg(not(feature = "crypto-full"))] #[cfg(not(feature = "crypto-full"))]
{ {
let stub_gen = || functor_stub(atom!("crypto_random_byte"), 1); 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()); let exception = self.machine_st.error_form(err, stub_gen());
self.machine_st.throw_exception(exception); self.machine_st.throw_exception(exception);
} }
@@ -8079,7 +8079,7 @@ impl Machine {
#[cfg(not(feature = "crypto-full"))] #[cfg(not(feature = "crypto-full"))]
{ {
let stub_gen = || functor_stub(atom!("crypto_data_hash"), 1); 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()); let exception = self.machine_st.error_form(err, stub_gen());
self.machine_st.throw_exception(exception); self.machine_st.throw_exception(exception);
return; return;
@@ -8132,7 +8132,7 @@ impl Machine {
#[cfg(not(feature = "crypto-full"))] #[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()); let exception = self.machine_st.error_form(err, stub_gen());
self.machine_st.throw_exception(exception); self.machine_st.throw_exception(exception);
} }
@@ -8215,7 +8215,7 @@ impl Machine {
#[cfg(not(feature = "crypto-full"))] #[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()); let exception = self.machine_st.error_form(err, stub1_gen());
self.machine_st.throw_exception(exception); self.machine_st.throw_exception(exception);
} }
@@ -8283,7 +8283,7 @@ impl Machine {
#[cfg(not(feature = "crypto-full"))] #[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()); let exception = self.machine_st.error_form(err, stub1_gen());
self.machine_st.throw_exception(exception); self.machine_st.throw_exception(exception);
} }
@@ -8409,152 +8409,111 @@ impl Machine {
pub(crate) fn crypto_curve_scalar_mult(&mut self) { pub(crate) fn crypto_curve_scalar_mult(&mut self) {
let stub_gen = || functor_stub(atom!("crypto_curve_scalar_mult"), 4); let stub_gen = || functor_stub(atom!("crypto_curve_scalar_mult"), 4);
{ let scalar_bytes = self
let scalar_bytes = self .machine_st
.machine_st .integers_to_bytevec(self.machine_st.registers[2], stub_gen);
.integers_to_bytevec(self.machine_st.registers[2], stub_gen); let point_bytes = self
let point_bytes = self .machine_st
.machine_st .integers_to_bytevec(self.machine_st.registers[3], stub_gen);
.integers_to_bytevec(self.machine_st.registers[3], stub_gen);
let mut point = secp256k1::Point::decode(&point_bytes).unwrap(); let mut point = secp256k1::Point::decode(&point_bytes).unwrap();
let scalar = secp256k1::Scalar::decode_reduce(&scalar_bytes); let scalar = secp256k1::Scalar::decode_reduce(&scalar_bytes);
point *= scalar; point *= scalar;
let uncompressed = step_or_resource_error!( let uncompressed = step_or_resource_error!(
self.machine_st, self.machine_st,
self.u8s_to_string(&point.encode_uncompressed()) self.u8s_to_string(&point.encode_uncompressed())
); );
unify!(self.machine_st, self.machine_st.registers[4], 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);
}
} }
#[inline(always)] #[inline(always)]
pub(crate) fn ed25519_seed_to_public_key(&mut self) { pub(crate) fn ed25519_seed_to_public_key(&mut self) {
let stub_gen = || functor_stub(atom!("ed25519_seed_keypair"), 2); let stub_gen = || functor_stub(atom!("ed25519_seed_keypair"), 2);
{ let seed_bytes = self
let seed_bytes = self .machine_st
.machine_st .integers_to_bytevec(self.machine_st.registers[1], stub_gen);
.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!( let complete_string = step_or_resource_error!(
self.machine_st, self.machine_st,
self.u8s_to_string(skey.public_key.encoded.as_ref()) self.u8s_to_string(skey.public_key.encoded.as_ref())
); );
unify!( unify!(
self.machine_st, self.machine_st,
self.machine_st.registers[2], self.machine_st.registers[2],
complete_string 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);
}
} }
#[inline(always)] #[inline(always)]
pub(crate) fn ed25519_sign_raw(&mut self) { pub(crate) fn ed25519_sign_raw(&mut self) {
let stub_gen = || functor_stub(atom!("ed25519_sign"), 4); let stub_gen = || functor_stub(atom!("ed25519_sign"), 4);
{ let seed_bytes = self
let seed_bytes = self .machine_st
.machine_st .integers_to_bytevec(self.machine_st.registers[1], stub_gen);
.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 encoding = cell_as_atom!(self.deref_register(3));
let data = self.string_encoding_bytes(self.machine_st.registers[2], encoding); let data = self.string_encoding_bytes(self.machine_st.registers[2], encoding);
let sig = skey.sign_raw(&data); let sig = skey.sign_raw(&data);
let sig_list = step_or_resource_error!( let sig_list = step_or_resource_error!(
self.machine_st, self.machine_st,
sized_iter_to_heap_list( sized_iter_to_heap_list(
&mut self.machine_st.heap, &mut self.machine_st.heap,
sig.as_ref().len(), sig.as_ref().len(),
sig.as_ref() sig.as_ref()
.iter() .iter()
.map(|b| fixnum_as_cell!(Fixnum::build_with(*b))) .map(|b| fixnum_as_cell!(Fixnum::build_with(*b)))
) )
); );
unify!(self.machine_st, self.machine_st.registers[4], sig_list); 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);
}
} }
#[inline(always)] #[inline(always)]
pub(crate) fn ed25519_verify_raw(&mut self) { pub(crate) fn ed25519_verify_raw(&mut self) {
let stub_gen = || functor_stub(atom!("ed25519_verify"), 4); let stub_gen = || functor_stub(atom!("ed25519_verify"), 4);
{ let key_bytes = self.string_encoding_bytes(self.machine_st.registers[1], atom!("octet"));
let key_bytes = let pkey = ed25519::PublicKey::decode(&key_bytes).unwrap();
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 encoding = cell_as_atom!(self.deref_register(3));
let data = self.string_encoding_bytes(self.machine_st.registers[2], encoding); let data = self.string_encoding_bytes(self.machine_st.registers[2], encoding);
let signature = self let signature = self
.machine_st .machine_st
.integers_to_bytevec(self.machine_st.registers[4], stub_gen); .integers_to_bytevec(self.machine_st.registers[4], stub_gen);
self.machine_st.fail = !pkey.verify_raw(&signature, &data); 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);
}
} }
#[inline(always)] #[inline(always)]
pub(crate) fn curve25519_scalar_mult(&mut self) { pub(crate) fn curve25519_scalar_mult(&mut self) {
let stub_gen = || functor_stub(atom!("curve25519_scalar_mult"), 3); let stub_gen = || functor_stub(atom!("curve25519_scalar_mult"), 3);
{ let scalar_bytes = self
let scalar_bytes = self .machine_st
.machine_st .integers_to_bytevec(self.machine_st.registers[1], stub_gen);
.integers_to_bytevec(self.machine_st.registers[1], stub_gen); let point_bytes = self
let point_bytes = self .machine_st
.machine_st .integers_to_bytevec(self.machine_st.registers[2], stub_gen);
.integers_to_bytevec(self.machine_st.registers[2], stub_gen);
let result = x25519::x25519( let result = x25519::x25519(
&<[u8; 32]>::try_from(&point_bytes[..]).unwrap(), &<[u8; 32]>::try_from(&point_bytes[..]).unwrap(),
&<[u8; 32]>::try_from(&scalar_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); 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);
}
} }
#[inline(always)] #[inline(always)]