Merge rust-bitcoin/rust-bitcoin#2032: Update base64 usage to 0.21.3
18e2854a42
Update base64 usage to 0.21.3 (junderw) Pull request description: Closes #2031 The imports are a bit bike-sheddy... but I think this is fine. ACKs for top commit: tcharding: ACK18e2854a42
apoelstra: ACK18e2854a42
Tree-SHA512: 5707adc2066ef33a30e81eb74ddcb938350e5853438152278767c824a45909a0b4761d036e4e5f21fccd61102c4734936b5fd570dbd87140cd3b679dc9c7eec4
This commit is contained in:
commit
1cb5cb7547
|
@ -10,9 +10,9 @@ checksum = "08f9b8508dccb7687a1d6c4ce66b2b0ecef467c94667de27d8d7fe1f8d2a9cdc"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "base64"
|
name = "base64"
|
||||||
version = "0.13.0"
|
version = "0.21.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
|
checksum = "414dcefbc63d77c526a76b3afcf6fbb9b5e2791c19c3aa2297733208750c6e53"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bech32"
|
name = "bech32"
|
||||||
|
|
|
@ -10,9 +10,9 @@ checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "base64"
|
name = "base64"
|
||||||
version = "0.13.1"
|
version = "0.21.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
|
checksum = "414dcefbc63d77c526a76b3afcf6fbb9b5e2791c19c3aa2297733208750c6e53"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bech32"
|
name = "bech32"
|
||||||
|
|
|
@ -41,7 +41,7 @@ hashes = { package = "bitcoin_hashes", version = "0.13.0", default-features = fa
|
||||||
secp256k1 = { version = "0.27.0", default-features = false, features = ["bitcoin_hashes"] }
|
secp256k1 = { version = "0.27.0", default-features = false, features = ["bitcoin_hashes"] }
|
||||||
hex_lit = "0.1.1"
|
hex_lit = "0.1.1"
|
||||||
|
|
||||||
base64 = { version = "0.13.0", optional = true }
|
base64 = { version = "0.21.3", optional = true }
|
||||||
# Only use this feature for no-std builds, otherwise use bitcoinconsensus-std.
|
# Only use this feature for no-std builds, otherwise use bitcoinconsensus-std.
|
||||||
bitcoinconsensus = { version = "0.20.2-0.5.0", default-features = false, optional = true }
|
bitcoinconsensus = { version = "0.20.2-0.5.0", default-features = false, optional = true }
|
||||||
|
|
||||||
|
|
|
@ -818,6 +818,7 @@ mod display_from_str {
|
||||||
use core::str::FromStr;
|
use core::str::FromStr;
|
||||||
|
|
||||||
use base64::display::Base64Display;
|
use base64::display::Base64Display;
|
||||||
|
use base64::prelude::{Engine as _, BASE64_STANDARD};
|
||||||
use internals::write_err;
|
use internals::write_err;
|
||||||
|
|
||||||
use super::{Error, Psbt};
|
use super::{Error, Psbt};
|
||||||
|
@ -857,7 +858,7 @@ mod display_from_str {
|
||||||
|
|
||||||
impl Display for Psbt {
|
impl Display for Psbt {
|
||||||
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
|
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
|
||||||
write!(f, "{}", Base64Display::with_config(&self.serialize(), base64::STANDARD))
|
write!(f, "{}", Base64Display::new(&self.serialize(), &BASE64_STANDARD))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -865,7 +866,7 @@ mod display_from_str {
|
||||||
type Err = PsbtParseError;
|
type Err = PsbtParseError;
|
||||||
|
|
||||||
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||||
let data = base64::decode(s).map_err(PsbtParseError::Base64Encoding)?;
|
let data = BASE64_STANDARD.decode(s).map_err(PsbtParseError::Base64Encoding)?;
|
||||||
Psbt::deserialize(&data).map_err(PsbtParseError::PsbtEncoding)
|
Psbt::deserialize(&data).map_err(PsbtParseError::PsbtEncoding)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,8 +26,6 @@ mod message_signing {
|
||||||
|
|
||||||
use crate::address::{Address, AddressType};
|
use crate::address::{Address, AddressType};
|
||||||
use crate::crypto::key::PublicKey;
|
use crate::crypto::key::PublicKey;
|
||||||
#[cfg(feature = "base64")]
|
|
||||||
use crate::prelude::*;
|
|
||||||
|
|
||||||
/// An error used for dealing with Bitcoin Signed Messages.
|
/// An error used for dealing with Bitcoin Signed Messages.
|
||||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||||
|
@ -159,39 +157,42 @@ mod message_signing {
|
||||||
None => Ok(false),
|
None => Ok(false),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Convert a signature from base64 encoding.
|
|
||||||
#[cfg(feature = "base64")]
|
#[cfg(feature = "base64")]
|
||||||
|
mod base64_impls {
|
||||||
|
use base64::prelude::{Engine as _, BASE64_STANDARD};
|
||||||
|
|
||||||
|
use super::*;
|
||||||
|
use crate::prelude::String;
|
||||||
|
|
||||||
|
impl MessageSignature {
|
||||||
|
/// 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 = base64::decode(s).map_err(|_| MessageSignatureError::InvalidBase64)?;
|
let bytes =
|
||||||
|
BASE64_STANDARD.decode(s).map_err(|_| MessageSignatureError::InvalidBase64)?;
|
||||||
MessageSignature::from_slice(&bytes)
|
MessageSignature::from_slice(&bytes)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Convert to base64 encoding.
|
/// Convert to base64 encoding.
|
||||||
#[cfg(feature = "base64")]
|
pub fn to_base64(self) -> String { BASE64_STANDARD.encode(self.serialize()) }
|
||||||
pub fn to_base64(self) -> String { base64::encode(&self.serialize()[..]) }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "base64")]
|
|
||||||
impl fmt::Display for MessageSignature {
|
impl fmt::Display for MessageSignature {
|
||||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
let bytes = self.serialize();
|
let bytes = self.serialize();
|
||||||
// This avoids the allocation of a String.
|
// This avoids the allocation of a String.
|
||||||
write!(
|
write!(f, "{}", base64::display::Base64Display::new(&bytes, &BASE64_STANDARD))
|
||||||
f,
|
|
||||||
"{}",
|
|
||||||
base64::display::Base64Display::with_config(&bytes[..], base64::STANDARD)
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "base64")]
|
|
||||||
impl core::str::FromStr for MessageSignature {
|
impl core::str::FromStr for MessageSignature {
|
||||||
type Err = MessageSignatureError;
|
type Err = MessageSignatureError;
|
||||||
fn from_str(s: &str) -> Result<MessageSignature, MessageSignatureError> {
|
fn from_str(s: &str) -> Result<MessageSignature, MessageSignatureError> {
|
||||||
MessageSignature::from_base64(s)
|
MessageSignature::from_base64(s)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Hash message for signature using Bitcoin's message signing format.
|
/// Hash message for signature using Bitcoin's message signing format.
|
||||||
|
@ -260,6 +261,7 @@ mod tests {
|
||||||
#[test]
|
#[test]
|
||||||
#[cfg(all(feature = "secp-recovery", feature = "base64"))]
|
#[cfg(all(feature = "secp-recovery", feature = "base64"))]
|
||||||
fn test_incorrect_message_signature() {
|
fn test_incorrect_message_signature() {
|
||||||
|
use base64::prelude::{Engine as _, BASE64_STANDARD};
|
||||||
use secp256k1;
|
use secp256k1;
|
||||||
|
|
||||||
use crate::crypto::key::PublicKey;
|
use crate::crypto::key::PublicKey;
|
||||||
|
@ -276,7 +278,8 @@ mod tests {
|
||||||
let signature =
|
let signature =
|
||||||
super::MessageSignature::from_base64(signature_base64).expect("message signature");
|
super::MessageSignature::from_base64(signature_base64).expect("message signature");
|
||||||
|
|
||||||
let pubkey = PublicKey::from_slice(&base64::decode(pubkey_base64).expect("base64 string"))
|
let pubkey =
|
||||||
|
PublicKey::from_slice(&BASE64_STANDARD.decode(pubkey_base64).expect("base64 string"))
|
||||||
.expect("pubkey slice");
|
.expect("pubkey slice");
|
||||||
|
|
||||||
let p2pkh = Address::p2pkh(&pubkey, Network::Bitcoin);
|
let p2pkh = Address::p2pkh(&pubkey, Network::Bitcoin);
|
||||||
|
|
Loading…
Reference in New Issue