ed25519: Panic (triggering abort) if nullptr passed into APIs
This commit is contained in:
parent
efb4246ad3
commit
d41cf37841
|
@ -10,15 +10,13 @@ use std::slice;
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern "C" fn ed25519_generate_keypair(sk: *mut [u8; 32], vk: *mut [u8; 32]) {
|
pub extern "C" fn ed25519_generate_keypair(sk: *mut [u8; 32], vk: *mut [u8; 32]) {
|
||||||
|
let sk = unsafe { sk.as_mut() }.unwrap();
|
||||||
|
let vk = unsafe { vk.as_mut() }.unwrap();
|
||||||
|
|
||||||
let signing_key = SigningKey::new(OsRng);
|
let signing_key = SigningKey::new(OsRng);
|
||||||
|
|
||||||
if let Some(sk) = unsafe { sk.as_mut() } {
|
*sk = signing_key.into();
|
||||||
*sk = signing_key.into();
|
*vk = VerificationKey::from(&signing_key).into();
|
||||||
}
|
|
||||||
|
|
||||||
if let Some(vk) = unsafe { vk.as_mut() } {
|
|
||||||
*vk = VerificationKey::from(&signing_key).into();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
|
@ -28,10 +26,7 @@ pub extern "C" fn ed25519_sign(
|
||||||
msg_len: size_t,
|
msg_len: size_t,
|
||||||
signature: *mut [u8; 64],
|
signature: *mut [u8; 64],
|
||||||
) -> bool {
|
) -> bool {
|
||||||
let sk = SigningKey::from(*match unsafe { sk.as_ref() } {
|
let sk = SigningKey::from(*unsafe { sk.as_ref() }.unwrap());
|
||||||
Some(sk) => sk,
|
|
||||||
None => return false,
|
|
||||||
});
|
|
||||||
|
|
||||||
let msg = unsafe { slice::from_raw_parts(msg, msg_len) };
|
let msg = unsafe { slice::from_raw_parts(msg, msg_len) };
|
||||||
|
|
||||||
|
@ -54,10 +49,7 @@ pub extern "C" fn ed25519_verify(
|
||||||
msg: *const c_uchar,
|
msg: *const c_uchar,
|
||||||
msg_len: size_t,
|
msg_len: size_t,
|
||||||
) -> bool {
|
) -> bool {
|
||||||
let vk = match VerificationKey::try_from(*match unsafe { vk.as_ref() } {
|
let vk = match VerificationKey::try_from(*unsafe { vk.as_ref() }.unwrap()) {
|
||||||
Some(vk) => vk,
|
|
||||||
None => return false,
|
|
||||||
}) {
|
|
||||||
Ok(vk) => vk,
|
Ok(vk) => vk,
|
||||||
Err(_) => return false,
|
Err(_) => return false,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue