mirror of
https://github.com/urbit/ares.git
synced 2024-12-23 13:25:03 +03:00
jets: rip out as_mut_bytes
This commit is contained in:
parent
0f9175ada6
commit
5b0b389775
@ -170,7 +170,7 @@ mod util {
|
|||||||
stack: &mut NockStack,
|
stack: &mut NockStack,
|
||||||
key: &mut [u8; N],
|
key: &mut [u8; N],
|
||||||
ads: Noun,
|
ads: Noun,
|
||||||
mut txt: Atom,
|
txt: Atom,
|
||||||
) -> Result {
|
) -> Result {
|
||||||
unsafe {
|
unsafe {
|
||||||
let ac_siv_data = _allocate_ads(stack, ads)?;
|
let ac_siv_data = _allocate_ads(stack, ads)?;
|
||||||
@ -180,16 +180,17 @@ mod util {
|
|||||||
);
|
);
|
||||||
|
|
||||||
let txt_len = met(3, txt);
|
let txt_len = met(3, txt);
|
||||||
let txt_bytes = &mut (txt.as_mut_bytes()[0..txt_len]);
|
|
||||||
|
|
||||||
let (mut iv, iv_bytes) = IndirectAtom::new_raw_mut_bytearray::<16, NockStack>(stack);
|
let (mut iv, iv_bytes) = IndirectAtom::new_raw_mut_bytearray::<16, NockStack>(stack);
|
||||||
|
|
||||||
match txt_len {
|
match txt_len {
|
||||||
0 => {
|
0 => {
|
||||||
ac_aes_siv_en::<N>(key, txt_bytes, siv_data, iv_bytes, &mut [0u8; 0]).unwrap();
|
ac_aes_siv_en::<N>(key, &mut [], siv_data, iv_bytes, &mut [0u8; 0]).unwrap();
|
||||||
Ok(T(stack, &[iv.normalize_as_atom().as_noun(), D(0), D(0)]))
|
Ok(T(stack, &[iv.normalize_as_atom().as_noun(), D(0), D(0)]))
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
|
let (_txt_ida, txt_bytes) = IndirectAtom::new_raw_mut_bytes(stack, txt_len);
|
||||||
|
txt_bytes.copy_from_slice(&txt.as_bytes()[0..txt_len]);
|
||||||
let (mut out_atom, out_bytes) = IndirectAtom::new_raw_mut_bytes(stack, txt_len);
|
let (mut out_atom, out_bytes) = IndirectAtom::new_raw_mut_bytes(stack, txt_len);
|
||||||
ac_aes_siv_en::<N>(key, txt_bytes, siv_data, iv_bytes, out_bytes).unwrap();
|
ac_aes_siv_en::<N>(key, txt_bytes, siv_data, iv_bytes, out_bytes).unwrap();
|
||||||
Ok(T(
|
Ok(T(
|
||||||
@ -209,19 +210,20 @@ mod util {
|
|||||||
stack: &mut NockStack,
|
stack: &mut NockStack,
|
||||||
key: &mut [u8; N],
|
key: &mut [u8; N],
|
||||||
ads: Noun,
|
ads: Noun,
|
||||||
mut iv: Atom,
|
iv: Atom,
|
||||||
len: Atom,
|
len: Atom,
|
||||||
mut txt: Atom,
|
txt: Atom,
|
||||||
) -> Result {
|
) -> Result {
|
||||||
unsafe {
|
unsafe {
|
||||||
let txt_len = match len.as_direct() {
|
let txt_len = match len.as_direct() {
|
||||||
Ok(direct) => direct.data() as usize,
|
Ok(direct) => direct.data() as usize,
|
||||||
Err(_) => return Err(JetErr::Fail(Error::NonDeterministic(D(0)))),
|
Err(_) => return Err(JetErr::Fail(Error::NonDeterministic(D(0)))),
|
||||||
};
|
};
|
||||||
let txt_bytes = &mut (txt.as_mut_bytes()[0..txt_len]);
|
let (_txt_ida, txt_bytes) = IndirectAtom::new_raw_mut_bytes(stack, txt_len);
|
||||||
|
txt_bytes.copy_from_slice(&txt.as_bytes()[0..txt_len]);
|
||||||
|
|
||||||
let iv_bytes = &mut [0u8; 16];
|
let iv_bytes = &mut [0u8; 16];
|
||||||
iv_bytes.copy_from_slice(&iv.as_mut_bytes()[0..16]);
|
iv_bytes.copy_from_slice(&iv.as_bytes()[0..16]);
|
||||||
|
|
||||||
let ac_siv_data = _allocate_ads(stack, ads)?;
|
let ac_siv_data = _allocate_ads(stack, ads)?;
|
||||||
let siv_data: &mut [&mut [u8]] = std::slice::from_raw_parts_mut(
|
let siv_data: &mut [&mut [u8]] = std::slice::from_raw_parts_mut(
|
||||||
|
@ -61,7 +61,7 @@ pub fn jet_shar(context: &mut Context, subject: Noun) -> Result {
|
|||||||
|
|
||||||
pub fn jet_sign(context: &mut Context, subject: Noun) -> Result {
|
pub fn jet_sign(context: &mut Context, subject: Noun) -> Result {
|
||||||
let stack = &mut context.stack;
|
let stack = &mut context.stack;
|
||||||
let mut msg = slot(subject, 12)?.as_atom()?;
|
let msg = slot(subject, 12)?.as_atom()?;
|
||||||
let sed = slot(subject, 13)?.as_atom()?;
|
let sed = slot(subject, 13)?.as_atom()?;
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
@ -73,7 +73,8 @@ pub fn jet_sign(context: &mut Context, subject: Noun) -> Result {
|
|||||||
seed[0..sed_bytes.len()].copy_from_slice(sed_bytes);
|
seed[0..sed_bytes.len()].copy_from_slice(sed_bytes);
|
||||||
|
|
||||||
let msg_len = met(3, msg);
|
let msg_len = met(3, msg);
|
||||||
let message = &mut (msg.as_mut_bytes())[0..msg_len]; // drop trailing zeros
|
let (_msg_ida, message) = IndirectAtom::new_raw_mut_bytes(stack, msg_len);
|
||||||
|
message.copy_from_slice(&msg.as_bytes()[0..msg_len]);
|
||||||
|
|
||||||
let (mut sig_ida, sig) = IndirectAtom::new_raw_mut_bytearray::<64, NockStack>(stack);
|
let (mut sig_ida, sig) = IndirectAtom::new_raw_mut_bytearray::<64, NockStack>(stack);
|
||||||
ac_ed_sign(message, seed, sig);
|
ac_ed_sign(message, seed, sig);
|
||||||
|
@ -11,14 +11,15 @@ pub fn jet_shas(context: &mut Context, subject: Noun) -> Result {
|
|||||||
let stack = &mut context.stack;
|
let stack = &mut context.stack;
|
||||||
let sam = slot(subject, 6)?;
|
let sam = slot(subject, 6)?;
|
||||||
let sal = slot(sam, 2)?.as_atom()?;
|
let sal = slot(sam, 2)?.as_atom()?;
|
||||||
let mut ruz = slot(sam, 3)?.as_atom()?;
|
let ruz = slot(sam, 3)?.as_atom()?;
|
||||||
|
|
||||||
let sal_bytes = &(sal.as_bytes())[0..met(3, sal)]; // drop trailing zeros
|
let sal_bytes = &(sal.as_bytes())[0..met(3, sal)]; // drop trailing zeros
|
||||||
let (mut _salt_ida, salt) = unsafe { IndirectAtom::new_raw_mut_bytes(stack, sal_bytes.len()) };
|
let (mut _salt_ida, salt) = unsafe { IndirectAtom::new_raw_mut_bytes(stack, sal_bytes.len()) };
|
||||||
salt.copy_from_slice(sal_bytes);
|
salt.copy_from_slice(sal_bytes);
|
||||||
|
|
||||||
let msg_len = met(3, ruz);
|
let msg_len = met(3, ruz);
|
||||||
let message = &mut (ruz.as_mut_bytes())[0..msg_len]; // drop trailing zeros
|
let (mut _msg_ida, message) = unsafe { IndirectAtom::new_raw_mut_bytes(stack, msg_len) };
|
||||||
|
message.copy_from_slice(&ruz.as_bytes()[0..msg_len]);
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
let (mut out_ida, out) = IndirectAtom::new_raw_mut_bytes(stack, 32);
|
let (mut out_ida, out) = IndirectAtom::new_raw_mut_bytes(stack, 32);
|
||||||
@ -30,12 +31,14 @@ pub fn jet_shas(context: &mut Context, subject: Noun) -> Result {
|
|||||||
pub fn jet_shax(context: &mut Context, subject: Noun) -> Result {
|
pub fn jet_shax(context: &mut Context, subject: Noun) -> Result {
|
||||||
let stack = &mut context.stack;
|
let stack = &mut context.stack;
|
||||||
let sam = slot(subject, 6)?;
|
let sam = slot(subject, 6)?;
|
||||||
let mut msg = sam.as_atom()?;
|
let msg = sam.as_atom()?;
|
||||||
let len = met(3, msg);
|
let len = met(3, msg);
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
|
let (mut _msg_ida, msg_copy) = IndirectAtom::new_raw_mut_bytes(stack, len);
|
||||||
|
msg_copy.copy_from_slice(&msg.as_bytes()[0..len]);
|
||||||
let (mut ida, out) = IndirectAtom::new_raw_mut_bytes(stack, 32);
|
let (mut ida, out) = IndirectAtom::new_raw_mut_bytes(stack, 32);
|
||||||
ac_shay(&mut (msg.as_mut_bytes())[0..len], out);
|
ac_shay(&mut (msg_copy)[0..len], out);
|
||||||
Ok(ida.normalize_as_atom().as_noun())
|
Ok(ida.normalize_as_atom().as_noun())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -44,18 +47,23 @@ pub fn jet_shay(context: &mut Context, subject: Noun) -> Result {
|
|||||||
let stack = &mut context.stack;
|
let stack = &mut context.stack;
|
||||||
let sam = slot(subject, 6)?;
|
let sam = slot(subject, 6)?;
|
||||||
let wid = slot(sam, 2)?.as_atom()?;
|
let wid = slot(sam, 2)?.as_atom()?;
|
||||||
let mut dat = slot(sam, 3)?.as_atom()?;
|
let dat = slot(sam, 3)?.as_atom()?;
|
||||||
|
|
||||||
let width = match wid.as_direct() {
|
let width = match wid.as_direct() {
|
||||||
Ok(direct) => direct.data() as usize,
|
Ok(direct) => direct.data() as usize,
|
||||||
Err(_) => return Err(JetErr::Fail(Error::NonDeterministic(D(0)))),
|
Err(_) => return Err(JetErr::Fail(Error::NonDeterministic(D(0)))),
|
||||||
};
|
};
|
||||||
|
|
||||||
let message = &mut (dat.as_mut_bytes())[0..width];
|
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
let (mut out_ida, out) = IndirectAtom::new_raw_mut_bytes(stack, 32);
|
let (mut out_ida, out) = IndirectAtom::new_raw_mut_bytes(stack, 32);
|
||||||
ac_shay(message, out);
|
if width > 0 {
|
||||||
|
let (mut _msg_ida, msg) = IndirectAtom::new_raw_mut_bytes(stack, width);
|
||||||
|
msg.copy_from_slice(&dat.as_bytes()[0..width]);
|
||||||
|
ac_shay(msg, out);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ac_shay(&mut [], out);
|
||||||
|
}
|
||||||
Ok(out_ida.normalize_as_atom().as_noun())
|
Ok(out_ida.normalize_as_atom().as_noun())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -64,7 +72,7 @@ pub fn jet_shal(context: &mut Context, subject: Noun) -> Result {
|
|||||||
let stack = &mut context.stack;
|
let stack = &mut context.stack;
|
||||||
let sam = slot(subject, 6)?;
|
let sam = slot(subject, 6)?;
|
||||||
let wid = slot(sam, 2)?.as_atom()?;
|
let wid = slot(sam, 2)?.as_atom()?;
|
||||||
let mut dat = slot(sam, 3)?.as_atom()?;
|
let dat = slot(sam, 3)?.as_atom()?;
|
||||||
|
|
||||||
let _width = match wid.as_direct() {
|
let _width = match wid.as_direct() {
|
||||||
Ok(direct) => direct.data() as usize,
|
Ok(direct) => direct.data() as usize,
|
||||||
@ -72,11 +80,17 @@ pub fn jet_shal(context: &mut Context, subject: Noun) -> Result {
|
|||||||
};
|
};
|
||||||
|
|
||||||
let msg_len = met(3, dat);
|
let msg_len = met(3, dat);
|
||||||
let message = &mut (dat.as_mut_bytes())[0..msg_len]; // drop trailing zeros
|
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
let (mut ida, out) = IndirectAtom::new_raw_mut_bytes(stack, 64);
|
let (mut ida, out) = IndirectAtom::new_raw_mut_bytes(stack, 64);
|
||||||
ac_shal(message, out);
|
if msg_len > 0 {
|
||||||
|
let (mut _msg_ida, msg) = IndirectAtom::new_raw_mut_bytes(stack, msg_len);
|
||||||
|
msg.copy_from_slice(&dat.as_bytes()[0..msg_len]);
|
||||||
|
ac_shal(msg, out);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ac_shal(&mut [], out);
|
||||||
|
}
|
||||||
Ok(ida.normalize_as_atom().as_noun())
|
Ok(ida.normalize_as_atom().as_noun())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -249,11 +249,6 @@ impl DirectAtom {
|
|||||||
let bytes: &[u8; 8] = unsafe { std::mem::transmute(&self.0) };
|
let bytes: &[u8; 8] = unsafe { std::mem::transmute(&self.0) };
|
||||||
&bytes[..]
|
&bytes[..]
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn as_mut_bytes(&mut self) -> &mut [u8] {
|
|
||||||
let bytes: &mut [u8; 8] = unsafe { std::mem::transmute(&mut self.0) };
|
|
||||||
&mut bytes[..]
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl fmt::Display for DirectAtom {
|
impl fmt::Display for DirectAtom {
|
||||||
@ -824,14 +819,6 @@ impl Atom {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn as_mut_bytes(&mut self) -> &mut [u8] {
|
|
||||||
if self.is_direct() {
|
|
||||||
unsafe { self.direct.as_mut_bytes() }
|
|
||||||
} else {
|
|
||||||
unsafe { self.indirect.as_mut_bytes() }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn as_u64(self) -> Result<u64> {
|
pub fn as_u64(self) -> Result<u64> {
|
||||||
if self.is_direct() {
|
if self.is_direct() {
|
||||||
Ok(unsafe { self.direct.data() })
|
Ok(unsafe { self.direct.data() })
|
||||||
|
Loading…
Reference in New Issue
Block a user