Skip to content

Commit 8b75a07

Browse files
authored
Implement GroupDigest for NistP256 and Secp256k1 (#503)
Adds hash to curve according to draft v13: https://datatracker.ietf.org/doc/draft-irtf-cfrg-hash-to-curve/
1 parent 455dd3e commit 8b75a07

11 files changed

Lines changed: 708 additions & 7 deletions

File tree

.github/workflows/k256.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ jobs:
4141
- run: cargo build --target ${{ matrix.target }} --release --no-default-features --features ecdh
4242
- run: cargo build --target ${{ matrix.target }} --release --no-default-features --features ecdsa-core
4343
- run: cargo build --target ${{ matrix.target }} --release --no-default-features --features ecdsa
44+
- run: cargo build --target ${{ matrix.target }} --release --no-default-features --features hash2curve
4445
- run: cargo build --target ${{ matrix.target }} --release --no-default-features --features jwk
4546
- run: cargo build --target ${{ matrix.target }} --release --no-default-features --features keccak256
4647
- run: cargo build --target ${{ matrix.target }} --release --no-default-features --features pem
@@ -49,7 +50,7 @@ jobs:
4950
- run: cargo build --target ${{ matrix.target }} --release --no-default-features --features sha256
5051
- run: cargo build --target ${{ matrix.target }} --release --no-default-features --features ecdsa,keccak256
5152
- run: cargo build --target ${{ matrix.target }} --release --no-default-features --features ecdsa,sha256
52-
- run: cargo build --target ${{ matrix.target }} --release --no-default-features --features arithmetic,bits,ecdh,ecdsa,jwk,keccak256,pem,pkcs8,serde,sha256
53+
- run: cargo build --target ${{ matrix.target }} --release --no-default-features --features arithmetic,bits,ecdh,ecdsa,hash2curve,jwk,keccak256,pem,pkcs8,serde,sha256
5354

5455
benches:
5556
runs-on: ubuntu-latest

.github/workflows/p256.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,14 @@ jobs:
4141
- run: cargo build --target ${{ matrix.target }} --release --no-default-features --features ecdh
4242
- run: cargo build --target ${{ matrix.target }} --release --no-default-features --features ecdsa-core
4343
- run: cargo build --target ${{ matrix.target }} --release --no-default-features --features ecdsa
44+
- run: cargo build --target ${{ matrix.target }} --release --no-default-features --features hash2curve
4445
- run: cargo build --target ${{ matrix.target }} --release --no-default-features --features jwk
4546
- run: cargo build --target ${{ matrix.target }} --release --no-default-features --features pem
4647
- run: cargo build --target ${{ matrix.target }} --release --no-default-features --features pkcs8
4748
- run: cargo build --target ${{ matrix.target }} --release --no-default-features --features serde
4849
- run: cargo build --target ${{ matrix.target }} --release --no-default-features --features sha256
4950
- run: cargo build --target ${{ matrix.target }} --release --no-default-features --features voprf
50-
- run: cargo build --target ${{ matrix.target }} --release --no-default-features --features arithmetic,bits,ecdh,ecdsa,jwk,pem,pkcs8,serde,sha256,voprf
51+
- run: cargo build --target ${{ matrix.target }} --release --no-default-features --features arithmetic,bits,ecdh,ecdsa,hash2curve,jwk,pem,pkcs8,serde,sha256,voprf
5152

5253
test:
5354
runs-on: ubuntu-latest

k256/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ rust-version = "1.56"
1919

2020
[dependencies]
2121
cfg-if = "1.0"
22-
elliptic-curve = { version = "0.11.6", default-features = false, features = ["hazmat", "sec1"] }
22+
elliptic-curve = { version = "0.11.7", default-features = false, features = ["hazmat", "sec1"] }
2323
sec1 = { version = "0.2", default-features = false }
2424

2525
# optional dependencies
@@ -46,6 +46,7 @@ digest = ["ecdsa-core/digest", "ecdsa-core/hazmat"]
4646
ecdh = ["arithmetic", "elliptic-curve/ecdh"]
4747
ecdsa = ["arithmetic", "digest", "ecdsa-core/sign", "ecdsa-core/verify"]
4848
expose-field = ["arithmetic"]
49+
hash2curve = ["elliptic-curve/hash2curve"]
4950
jwk = ["elliptic-curve/jwk"]
5051
keccak256 = ["digest", "sha3"]
5152
pem = ["elliptic-curve/pem", "ecdsa-core/pem", "pkcs8"]

k256/src/arithmetic.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
33
pub(crate) mod affine;
44
mod field;
5+
#[cfg(feature = "hash2curve")]
6+
mod hash2curve;
57
mod mul;
68
pub(crate) mod projective;
79
pub(crate) mod scalar;

k256/src/arithmetic/affine.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ impl DecompressPoint<Secp256k1> for AffinePoint {
154154
let y = FieldElement::conditional_select(
155155
&beta.negate(1),
156156
&beta,
157-
beta.normalize().is_odd().ct_eq(&y_is_odd),
157+
beta.is_odd().ct_eq(&y_is_odd),
158158
);
159159

160160
Self {

k256/src/arithmetic/field/field_impl.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,7 @@ impl FieldElementImpl {
8989
}
9090

9191
pub fn is_odd(&self) -> Choice {
92-
debug_assert!(self.normalized);
93-
self.value.is_odd()
92+
self.normalize().value.is_odd()
9493
}
9594

9695
pub fn negate(&self, magnitude: u32) -> Self {

0 commit comments

Comments
 (0)