Deprecate `from_slice` methods in favor of arrays
Support for Rust arrays is now much better so slice-accepting methods that require a fixed length can be replaced with a method that accepts an array. `from_slice()` has been deprecated and replaced with `from_byte_array()`
This commit is contained in:
parent
03c7606618
commit
089043546f
|
@ -108,11 +108,10 @@ mod message_signing {
|
||||||
serialized
|
serialized
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Create from a byte slice.
|
/// Creates a `MessageSignature` from a fixed-length array.
|
||||||
pub fn from_slice(bytes: &[u8]) -> Result<MessageSignature, MessageSignatureError> {
|
pub fn from_byte_array(
|
||||||
if bytes.len() != 65 {
|
bytes: &[u8; 65],
|
||||||
return Err(MessageSignatureError::InvalidLength);
|
) -> Result<MessageSignature, MessageSignatureError> {
|
||||||
}
|
|
||||||
// We just check this here so we can safely subtract further.
|
// We just check this here so we can safely subtract further.
|
||||||
if bytes[0] < 27 {
|
if bytes[0] < 27 {
|
||||||
return Err(MessageSignatureError::InvalidEncoding(
|
return Err(MessageSignatureError::InvalidEncoding(
|
||||||
|
@ -126,6 +125,14 @@ mod message_signing {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Create a `MessageSignature` from a byte slice.
|
||||||
|
#[deprecated(since = "TBD", note = "Use `from_byte_array` instead.")]
|
||||||
|
pub fn from_slice(bytes: &[u8]) -> Result<MessageSignature, MessageSignatureError> {
|
||||||
|
let byte_array: [u8; 65] =
|
||||||
|
bytes.try_into().map_err(|_| MessageSignatureError::InvalidLength)?;
|
||||||
|
Self::from_byte_array(&byte_array)
|
||||||
|
}
|
||||||
|
|
||||||
/// Attempt to recover a public key from the signature and the signed message.
|
/// Attempt to recover a public key from the signature and the signed message.
|
||||||
///
|
///
|
||||||
/// To get the message hash from a message, use [super::signed_msg_hash].
|
/// To get the message hash from a message, use [super::signed_msg_hash].
|
||||||
|
@ -170,9 +177,14 @@ mod message_signing {
|
||||||
impl MessageSignature {
|
impl MessageSignature {
|
||||||
/// Convert a signature from base64 encoding.
|
/// Convert a signature from base64 encoding.
|
||||||
pub fn from_base64(s: &str) -> Result<MessageSignature, MessageSignatureError> {
|
pub fn from_base64(s: &str) -> Result<MessageSignature, MessageSignatureError> {
|
||||||
let bytes =
|
if s.len() != 88 {
|
||||||
BASE64_STANDARD.decode(s).map_err(|_| MessageSignatureError::InvalidBase64)?;
|
return Err(MessageSignatureError::InvalidLength);
|
||||||
MessageSignature::from_slice(&bytes)
|
}
|
||||||
|
let mut byte_array = [0; 65];
|
||||||
|
BASE64_STANDARD
|
||||||
|
.decode_slice_unchecked(s, &mut byte_array)
|
||||||
|
.map_err(|_| MessageSignatureError::InvalidBase64)?;
|
||||||
|
MessageSignature::from_byte_array(&byte_array)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Convert to base64 encoding.
|
/// Convert to base64 encoding.
|
||||||
|
@ -258,6 +270,10 @@ mod tests {
|
||||||
assert_eq!(signature2.is_signed_by_address(&secp, &p2pkh, msg_hash), Ok(true));
|
assert_eq!(signature2.is_signed_by_address(&secp, &p2pkh, msg_hash), Ok(true));
|
||||||
|
|
||||||
assert_eq!(pubkey.0, secp256k1::PublicKey::from_secret_key(&secp, &privkey));
|
assert_eq!(pubkey.0, secp256k1::PublicKey::from_secret_key(&secp, &privkey));
|
||||||
|
let signature_base64 = signature.to_base64();
|
||||||
|
let signature_round_trip =
|
||||||
|
super::MessageSignature::from_base64(&signature_base64).expect("message signature");
|
||||||
|
assert_eq!(signature, signature_round_trip);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
Loading…
Reference in New Issue