Skip to content

Commit

Permalink
feat: add 32bit support
Browse files Browse the repository at this point in the history
  • Loading branch information
dignifiedquire committed Feb 1, 2022
1 parent aa9dc2e commit 1d37b87
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 9 deletions.
13 changes: 7 additions & 6 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,6 @@ jobs:
rust: nightly
arch: aarch64

# 64-bit Linux/arm64
- target: aarch64-unknown-linux-gnu
rust: nightly
arch: aarch64

runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v2
Expand All @@ -57,6 +52,8 @@ jobs:
run: |
$HOME/.cargo/bin/cargo test --release --target ${{ matrix.target }}
$HOME/.cargo/bin/cargo test --release --features portable --target ${{ matrix.target }}
# Linux tests
linux:
needs: set-msrv
Expand Down Expand Up @@ -90,6 +87,7 @@ jobs:
run: sudo apt-get install -y ocl-icd-opencl-dev
- run: ${{ matrix.deps }}
- run: cargo test --target ${{ matrix.target }}
- run: cargo test --target ${{ matrix.target }} --features portable

# macOS tests
macos:
Expand All @@ -110,14 +108,16 @@ jobs:
target: x86_64-apple-darwin
override: true
- run: cargo test
- run: cargo test --features portable

# Windows tests
windows:
needs: set-msrv
strategy:
matrix:
include:
- target: x86_64-pc-windows-gnu
# 64-bit Windows (MSVC)
- target: x86_64-pc-windows-msvc
toolchain: stable

runs-on: windows-latest
Expand All @@ -131,6 +131,7 @@ jobs:
override: true
- uses: msys2/setup-msys2@v2
- run: cargo test --target ${{ matrix.target }}
- run: cargo test --target ${{ matrix.target }} --features portable

clippy_check:
runs-on: ubuntu-latest
Expand Down
2 changes: 0 additions & 2 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@

#[cfg(not(target_endian = "little"))]
compile_error!("blstrs is only supported on little endian architectures");
#[cfg(not(target_pointer_width = "64"))]
compile_error!("blstrs is only supported on 64bit architectures");

#[macro_use]
mod macros;
Expand Down
44 changes: 43 additions & 1 deletion src/scalar.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,19 @@ const MODULUS: [u64; 4] = [
0x73ed_a753_299d_7d48,
];

/// The modulus as u32 limbs.
#[cfg(not(target_pointer_width = "64"))]
const MODULUS_LIMBS_32: [u32; 8] = [
0x0000_0001,
0xffff_ffff,
0xfffe_5bfe,
0x53bd_a402,
0x09a1_d805,
0x3339_d808,
0x299d_7d48,
0x73ed_a753,
];

// Little-endian non-Montgomery form not reduced mod p.
const MODULUS_REPR: [u8; 32] = [
0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x5b, 0xfe, 0xff, 0x02, 0xa4, 0xbd, 0x53,
Expand Down Expand Up @@ -465,18 +478,47 @@ impl PrimeField for Scalar {
}
}

#[cfg(not(target_pointer_width = "64"))]
type ReprBits = [u32; 8];

#[cfg(target_pointer_width = "64")]
type ReprBits = [u64; 4];

impl PrimeFieldBits for Scalar {
// Representation in non-Montgomery form.
type ReprBits = [u64; 4];
type ReprBits = ReprBits;

#[cfg(target_pointer_width = "64")]
fn to_le_bits(&self) -> FieldBits<Self::ReprBits> {
let mut limbs = [0u64; 4];
unsafe { blst_uint64_from_fr(limbs.as_mut_ptr(), &self.0) };

FieldBits::new(limbs)
}

#[cfg(not(target_pointer_width = "64"))]
fn to_le_bits(&self) -> FieldBits<Self::ReprBits> {
let bytes = self.to_bytes_le();
let limbs = [
u32::from_le_bytes(bytes[0..4].try_into().unwrap()),
u32::from_le_bytes(bytes[4..8].try_into().unwrap()),
u32::from_le_bytes(bytes[8..12].try_into().unwrap()),
u32::from_le_bytes(bytes[12..16].try_into().unwrap()),
u32::from_le_bytes(bytes[16..20].try_into().unwrap()),
u32::from_le_bytes(bytes[20..24].try_into().unwrap()),
u32::from_le_bytes(bytes[24..28].try_into().unwrap()),
u32::from_le_bytes(bytes[28..32].try_into().unwrap()),
];
FieldBits::new(limbs)
}

fn char_le_bits() -> FieldBits<Self::ReprBits> {
#[cfg(not(target_pointer_width = "64"))]
{
FieldBits::new(MODULUS_LIMBS_32)
}

#[cfg(target_pointer_width = "64")]
FieldBits::new(MODULUS)
}
}
Expand Down

0 comments on commit 1d37b87

Please sign in to comment.