Skip to content

Commit 658c513

Browse files
committed
Put aarch64 simd feature behind nightly feature flag
1 parent 87f205e commit 658c513

File tree

10 files changed

+32
-15
lines changed

10 files changed

+32
-15
lines changed

rust/bridge/ffi/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ license = "AGPL-3.0-only"
1414
name = "signal_ffi"
1515
crate-type = ["staticlib"]
1616

17+
[features]
18+
nightly = ["signal-crypto/nightly", "libsignal-protocol/nightly"]
19+
1720
[dependencies]
1821
libsignal-protocol = { path = "../../protocol" }
1922
device-transfer = { path = "../../device-transfer" }

rust/bridge/jni/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ license = "AGPL-3.0-only"
1414
name = "signal_jni"
1515
crate-type = ["cdylib"]
1616

17+
[features]
18+
nightly = ["libsignal-protocol/nightly", "signal-crypto/nightly"]
19+
1720
[dependencies]
1821
libsignal-protocol = { path = "../../protocol" }
1922
signal-crypto = { path = "../../crypto" }

rust/bridge/node/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ edition = "2018"
1414
name = "signal_node"
1515
crate-type = ["cdylib"]
1616

17+
[features]
18+
nightly = ["libsignal-protocol/nightly", "libsignal-bridge/nightly"]
19+
1720
[dependencies]
1821
libsignal-protocol = { path = "../../protocol" }
1922
libsignal-bridge = { path = "../shared", features = ["node"] }

rust/bridge/shared/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,4 @@ signal-neon-futures = { path = "../node/futures", optional = true }
3434
ffi = ["libc", "libsignal-bridge-macros/ffi"]
3535
jni = ["jni_crate", "libsignal-bridge-macros/jni"]
3636
node = ["neon", "linkme", "signal-neon-futures", "libsignal-bridge-macros/node"]
37+
nightly = ["signal-crypto/nightly", "libsignal-protocol/nightly"]

rust/crypto/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ rand = "0.7.3"
2020
sha-1 = "0.9"
2121
sha2 = "0.9"
2222

23+
[features]
24+
nightly = []
25+
2326
[target.'cfg(all(target_arch = "aarch64", any(target_os = "linux")))'.dependencies]
2427
libc = "0.2" # for getauxval
2528

rust/crypto/src/aes.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// SPDX-License-Identifier: AGPL-3.0-only
44
//
55

6-
#[cfg(target_arch = "aarch64")]
6+
#[cfg(all(target_arch = "aarch64", feature = "nightly"))]
77
mod aarch64;
88

99
use crate::error::{Error, Result};
@@ -17,7 +17,7 @@ pub enum Aes256 {
1717
Soft(aes_soft::Aes256),
1818
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
1919
AesNi(aesni::Aes256),
20-
#[cfg(target_arch = "aarch64")]
20+
#[cfg(all(target_arch = "aarch64", feature = "nightly"))]
2121
Aarch64(aarch64::Aes256Aarch64),
2222
}
2323

@@ -27,7 +27,7 @@ impl Aes256 {
2727
return Err(Error::InvalidKeySize);
2828
}
2929

30-
#[cfg(target_arch = "aarch64")]
30+
#[cfg(all(target_arch = "aarch64", feature = "nightly"))]
3131
{
3232
if crate::cpuid::has_armv8_crypto() {
3333
unsafe {
@@ -85,7 +85,7 @@ impl Aes256 {
8585
Aes256::Soft(aes) => trait_encrypt(aes, buf),
8686
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
8787
Aes256::AesNi(aes) => trait_encrypt(aes, buf),
88-
#[cfg(target_arch = "aarch64")]
88+
#[cfg(all(target_arch = "aarch64", feature = "nightly"))]
8989
Aes256::Aarch64(aes) => unsafe { aes.encrypt(buf) },
9090
}
9191
}

rust/crypto/src/cpuid.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,23 @@
33
// SPDX-License-Identifier: AGPL-3.0-only
44
//
55

6-
#[cfg(all(target_arch = "aarch64", target_os = "linux"))]
6+
#[cfg(all(target_arch = "aarch64", feature = "nightly", target_os = "linux"))]
77
pub fn has_armv8_crypto() -> bool {
88
// Require NEON, AES and PMULL
99
let hwcap_crypto = (1 << 1) | (1 << 3) | (1 << 4);
1010
let hwcap = unsafe { libc::getauxval(libc::AT_HWCAP) };
1111
hwcap & hwcap_crypto == hwcap_crypto
1212
}
1313

14-
#[cfg(all(target_arch = "aarch64", target_os = "ios"))]
14+
#[cfg(all(target_arch = "aarch64", feature = "nightly", target_os = "ios"))]
1515
pub fn has_armv8_crypto() -> bool {
1616
// All 64-bit iOS devices have AES/PMUL support
1717
true
1818
}
1919

2020
#[cfg(all(
2121
target_arch = "aarch64",
22+
feature = "nightly",
2223
not(any(target_os = "linux", target_os = "ios"))
2324
))]
2425
pub fn has_armv8_crypto() -> bool {

rust/crypto/src/lib.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,11 @@
33
// SPDX-License-Identifier: AGPL-3.0-only
44
//
55

6-
#![cfg_attr(target_arch = "aarch64", feature(stdsimd))]
7-
#![cfg_attr(target_arch = "aarch64", feature(aarch64_target_feature))]
6+
#![cfg_attr(all(target_arch = "aarch64", feature = "nightly"), feature(stdsimd))]
7+
#![cfg_attr(
8+
all(target_arch = "aarch64", feature = "nightly"),
9+
feature(aarch64_target_feature)
10+
)]
811
#![deny(clippy::unwrap_used)]
912

1013
mod error;

rust/crypto/src/polyval.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ mod polyval_soft;
1010
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
1111
mod polyval_clmul;
1212

13-
#[cfg(target_arch = "aarch64")]
13+
#[cfg(all(target_arch = "aarch64", feature = "nightly"))]
1414
mod polyval_pmul;
1515

1616
#[derive(Clone)]
1717
pub enum Polyval {
1818
Soft(polyval_soft::PolyvalSoft),
1919
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
2020
Clmul(polyval_clmul::PolyvalClmul),
21-
#[cfg(target_arch = "aarch64")]
21+
#[cfg(all(target_arch = "aarch64", feature = "nightly"))]
2222
Pmul(polyval_pmul::PolyvalPmul),
2323
}
2424

@@ -35,7 +35,7 @@ impl Polyval {
3535
}
3636
}
3737

38-
#[cfg(target_arch = "aarch64")]
38+
#[cfg(all(target_arch = "aarch64", feature = "nightly"))]
3939
{
4040
if crate::cpuid::has_armv8_crypto() {
4141
return Ok(Polyval::Pmul(polyval_pmul::PolyvalPmul::new(key)?));
@@ -54,7 +54,7 @@ impl Polyval {
5454
Polyval::Soft(polyval) => polyval.update(data),
5555
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
5656
Polyval::Clmul(polyval) => polyval.update(data),
57-
#[cfg(target_arch = "aarch64")]
57+
#[cfg(all(target_arch = "aarch64", feature = "nightly"))]
5858
Polyval::Pmul(polyval) => polyval.update(data),
5959
}
6060
}
@@ -64,7 +64,7 @@ impl Polyval {
6464
Polyval::Soft(polyval) => polyval.update_padded(data),
6565
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
6666
Polyval::Clmul(polyval) => polyval.update_padded(data),
67-
#[cfg(target_arch = "aarch64")]
67+
#[cfg(all(target_arch = "aarch64", feature = "nightly"))]
6868
Polyval::Pmul(polyval) => polyval.update_padded(data),
6969
}
7070
}
@@ -74,7 +74,7 @@ impl Polyval {
7474
Polyval::Soft(polyval) => polyval.finalize(),
7575
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
7676
Polyval::Clmul(polyval) => polyval.finalize(),
77-
#[cfg(target_arch = "aarch64")]
77+
#[cfg(all(target_arch = "aarch64", feature = "nightly"))]
7878
Polyval::Pmul(polyval) => polyval.finalize(),
7979
}
8080
}

rust/protocol/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ default = ["u64_backend"]
4040
u32_backend = ["curve25519-dalek/u32_backend"]
4141
u64_backend = ["curve25519-dalek/u64_backend"]
4242
simd_backend = ["curve25519-dalek/simd_backend"]
43-
nightly = ["curve25519-dalek/nightly"]
43+
nightly = ["curve25519-dalek/nightly", "signal-crypto/nightly"]
4444

4545
[dev-dependencies]
4646
criterion = "0.3"

0 commit comments

Comments
 (0)