h2c 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/README.md +2 -0
- data/lib/ext/curve/bls12381_g1.rb +2 -2
- data/lib/ext/curve/bls12381_g1_11iso.rb +2 -2
- data/lib/h2c/expander/xmd.rb +1 -1
- data/lib/h2c/expander.rb +1 -0
- data/lib/h2c/hash_to_point.rb +6 -5
- data/lib/h2c/m2c/isogeny/bls12381_g1.rb +2 -2
- data/lib/h2c/suite.rb +5 -5
- data/lib/h2c/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3de2455d74c152fea54a81e553295ba16f3122e1af6e3d2196e52055eb179180
|
4
|
+
data.tar.gz: 6bc78d7cbfa6110f5cee57aff3d099e1a86a25f3a511b7ea13ad4b366aa38bab
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7654446bc65c08a1eb073f4f4de149809e9b44c58d19f9eb420ff2a6c9f9277c5e2b7e7827cde92514e3807fa1ea7544e344be9441c9ac636d256dbdff522af6
|
7
|
+
data.tar.gz: 8e4f8ee2aed37e8639869ea488a276f597dc0264cacd50bd8dc1a22ff2316da3ee2adc879af92a922f54e2f6cd7307d57368ec53be8a4d95a6e551fe38465239
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -10,6 +10,8 @@ The following cipher suites are currently supported:
|
|
10
10
|
* secp256k1_XMD:SHA-256_SSWU_RO_
|
11
11
|
* BLS12381G1_XMD:SHA-256_SSWU_NU_
|
12
12
|
* BLS12381G1_XMD:SHA-256_SSWU_RO_
|
13
|
+
* P256_XMD:SHA-256_SSWU_NU_
|
14
|
+
* P256_XMD:SHA-256_SSWU_RO_
|
13
15
|
* P384_XMD:SHA-384_SSWU_NU_
|
14
16
|
* P384_XMD:SHA-384_SSWU_RO_
|
15
17
|
* P521_XMD:SHA-512_SSWU_NU_
|
data/lib/h2c/expander/xmd.rb
CHANGED
@@ -3,7 +3,7 @@ require "digest"
|
|
3
3
|
|
4
4
|
module H2C
|
5
5
|
module Expander
|
6
|
-
# Expander::
|
6
|
+
# Expander::XMD produces a uniformly random byte string using a cryptographic hash function H that outputs b bits.
|
7
7
|
class XMD
|
8
8
|
attr_reader :dst, :digest
|
9
9
|
# Constructor
|
data/lib/h2c/expander.rb
CHANGED
@@ -33,6 +33,7 @@ module H2C
|
|
33
33
|
# Get expander implementation
|
34
34
|
# @param [String] func Hash function name. Currently supported by 'SHA-256' and 'SHA-512'.
|
35
35
|
# @raise [H2C::Error] If invalid func specified.
|
36
|
+
# @return [XMD] expander implementation, currently only XMD is supported.
|
36
37
|
def get(func, dst, _k)
|
37
38
|
unless HashFunc::XMD_FUNCS.include?(func)
|
38
39
|
raise H2C::Error, "func #{func} is unsupported."
|
data/lib/h2c/hash_to_point.rb
CHANGED
@@ -31,19 +31,20 @@ module H2C
|
|
31
31
|
# https://www.ietf.org/archive/id/draft-irtf-cfrg-hash-to-curve-16.html#name-hash_to_field-implementatio
|
32
32
|
# @param [String] msg A byte string containing the message to hash.
|
33
33
|
# @param [Integer] count The number of elements of Field to output.
|
34
|
+
# @param [Integer] modulo (Optional) This value is a finite field of characteristic p in the
|
35
|
+
# hash to curve specification. Other protocols such as FROST can be order of curve.
|
34
36
|
# @return [Array]
|
35
|
-
def hash_to_field(msg, count)
|
36
|
-
field = suite.curve.field
|
37
|
+
def hash_to_field(msg, count, modulo = suite.curve.field.prime)
|
37
38
|
len = count * suite.m * suite.l
|
38
39
|
pseudo = suite.exp.expand(msg, len)
|
39
40
|
u = []
|
40
|
-
|
41
|
+
count.times do |i|
|
41
42
|
v = []
|
42
|
-
|
43
|
+
suite.m.times do |j|
|
43
44
|
offset = suite.l * (j + i * suite.m)
|
44
45
|
t = pseudo[offset, (offset + suite.l)]
|
45
46
|
vj = t.unpack1("H*").to_i(16)
|
46
|
-
v[j] =
|
47
|
+
v[j] = vj % modulo
|
47
48
|
end
|
48
49
|
u[i] = v
|
49
50
|
end
|
data/lib/h2c/suite.rb
CHANGED
@@ -6,8 +6,8 @@ module H2C
|
|
6
6
|
|
7
7
|
SECP256K1_XMDSHA256_SSWU_NU_ = "secp256k1_XMD:SHA-256_SSWU_NU_"
|
8
8
|
SECP256K1_XMDSHA256_SSWU_RO_ = "secp256k1_XMD:SHA-256_SSWU_RO_"
|
9
|
-
|
10
|
-
|
9
|
+
BLS12381G1_XMDSHA256_SSWU_NU_ = "BLS12381G1_XMD:SHA-256_SSWU_NU_"
|
10
|
+
BLS12381G1_XMDSHA256_SSWU_RO_ = "BLS12381G1_XMD:SHA-256_SSWU_RO_"
|
11
11
|
P256_XMDSHA256_SSWU_NU_ = "P256_XMD:SHA-256_SSWU_NU_"
|
12
12
|
P256_XMDSHA256_SSWU_RO_ = "P256_XMD:SHA-256_SSWU_RO_"
|
13
13
|
P384_XMDSHA384_SSWU_NU_ = "P384_XMD:SHA-384_SSWU_NU_"
|
@@ -29,12 +29,12 @@ module H2C
|
|
29
29
|
@l = 48
|
30
30
|
@map = M2C::SSWUAB0.new(H2C::M2C::ISOGeny::Secp256k1.new, -11)
|
31
31
|
@ro = (id == SECP256K1_XMDSHA256_SSWU_RO_)
|
32
|
-
when
|
33
|
-
@curve =
|
32
|
+
when BLS12381G1_XMDSHA256_SSWU_NU_, BLS12381G1_XMDSHA256_SSWU_RO_
|
33
|
+
@curve = BLS::Group::BLS12381G1
|
34
34
|
@exp = Expander.get(HashFunc::SHA256, dst, @k)
|
35
35
|
@l = 64
|
36
36
|
@map = M2C::SSWUAB0.new(H2C::M2C::ISOGeny::BLS12381G1.new, 11)
|
37
|
-
@ro = (id ==
|
37
|
+
@ro = (id == BLS12381G1_XMDSHA256_SSWU_RO_)
|
38
38
|
when P256_XMDSHA256_SSWU_NU_, P256_XMDSHA256_SSWU_RO_
|
39
39
|
@curve = ECDSA::Group::Nistp256
|
40
40
|
@exp = Expander.get(HashFunc::SHA256, dst, @k)
|
data/lib/h2c/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: h2c
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- azuchi
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-02-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ecdsa
|