mldsa_gh 0.1.0
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 +7 -0
- data/LICENSE +21 -0
- data/README.md +88 -0
- data/ext/mldsa_gh_native/extconf.rb +14 -0
- data/ext/mldsa_gh_native/mldsa_gh_native.c +222 -0
- data/ext/mldsa_gh_native/mldsa_gh_native_all.c +24 -0
- data/ext/mldsa_gh_native/mldsa_gh_native_all.h +26 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/BUILDING.md +108 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/LICENSE +305 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/README.md +247 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/README.md +23 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/mldsa_native.c +803 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/mldsa_native.h +956 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/mldsa_native_asm.S +830 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/mldsa_native_config.h +855 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/cbmc.h +233 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/common.h +301 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/context.h +152 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/ct.c +21 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/ct.h +373 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/debug.c +75 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/debug.h +125 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/fips202.c +270 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/fips202.h +224 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/fips202x4.c +187 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/fips202x4.h +125 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/keccakf1600.c +510 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/keccakf1600.h +110 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/auto.h +85 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/fips202_native_aarch64.h +69 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x1_scalar_aarch64_asm.S +378 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x1_v84a_aarch64_asm.S +207 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x2_v84a_aarch64_asm.S +262 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x4_v8a_scalar_hybrid_aarch64_asm.S +1080 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x4_v8a_v84a_scalar_hybrid_aarch64_asm.S +990 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccakf1600_round_constants.c +47 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x1_scalar.h +27 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x1_v84a.h +36 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x2_v84a.h +40 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x4_v8a_scalar.h +32 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x4_v8a_v84a_scalar.h +37 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/api.h +129 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/README.md +10 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/mve.h +67 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/src/fips202_native_armv81m.h +37 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/src/keccak_f1600_x4_mve.S +717 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/src/keccak_f1600_x4_mve.c +42 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/src/keccak_f1600_x4_state_extract_bytes_mve.S +334 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/src/keccak_f1600_x4_state_xor_bytes_mve.S +355 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/src/keccakf1600_round_constants.c +53 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/auto.h +35 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/x86_64/keccak_f1600_x4_avx2.h +34 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/x86_64/src/fips202_native_x86_64.h +45 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/x86_64/src/keccak_f1600_x4_avx2_asm.S +488 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/x86_64/src/keccakf1600_constants.c +52 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/meta.h +314 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/aarch64_zetas.c +248 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/arith_native_aarch64.h +367 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_intt_aarch64_asm.S +786 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_ntt_aarch64_asm.S +686 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_pointwise_montgomery_aarch64_asm.S +106 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_poly_caddq_aarch64_asm.S +69 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_poly_chknorm_aarch64_asm.S +76 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_poly_decompose_32_aarch64_asm.S +108 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_poly_decompose_88_aarch64_asm.S +108 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_poly_use_hint_32_aarch64_asm.S +125 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_poly_use_hint_88_aarch64_asm.S +133 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_polyvecl_pointwise_acc_montgomery_l4_aarch64_asm.S +157 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_polyvecl_pointwise_acc_montgomery_l5_aarch64_asm.S +173 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_polyvecl_pointwise_acc_montgomery_l7_aarch64_asm.S +205 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_polyz_unpack_17_aarch64_asm.S +103 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_polyz_unpack_19_aarch64_asm.S +100 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_rej_uniform_aarch64_asm.S +222 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_rej_uniform_eta2_aarch64_asm.S +170 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_rej_uniform_eta4_aarch64_asm.S +163 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/polyz_unpack_table.c +52 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/rej_uniform_eta_table.c +547 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/rej_uniform_table.c +63 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/api.h +617 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/meta.h +24 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/meta.h +323 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/arith_native_x86_64.h +330 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/consts.c +157 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/consts.h +27 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_intt_avx2_asm.S +2333 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_ntt_avx2_asm.S +2405 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_nttunpack_avx2_asm.S +254 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_pointwise_acc_l4_avx2_asm.S +173 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_pointwise_acc_l5_avx2_asm.S +189 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_pointwise_acc_l7_avx2_asm.S +221 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_pointwise_avx2_asm.S +158 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_poly_caddq_avx2_asm.S +199 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_poly_chknorm_avx2_asm.S +176 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_poly_decompose_32_avx2_asm.S +490 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_poly_decompose_88_avx2_asm.S +489 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_poly_use_hint_32_avx2_asm.S +123 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_poly_use_hint_88_avx2_asm.S +125 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_polyz_unpack_17_avx2_asm.S +355 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_polyz_unpack_19_avx2_asm.S +355 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_rej_uniform_avx2_asm.S +132 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_rej_uniform_eta2_avx2_asm.S +205 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_rej_uniform_eta4_avx2_asm.S +176 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/rej_uniform_table.c +161 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/packing.c +213 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/packing.h +277 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/params.h +153 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/poly.c +1066 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/poly.h +464 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/poly_kl.c +910 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/poly_kl.h +367 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/polyvec.c +509 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/polyvec.h +435 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/polyvec_lazy.c +311 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/polyvec_lazy.h +652 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/randombytes.h +26 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/reduce.h +144 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/rounding.h +265 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/sign.c +1720 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/sign.h +850 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/symmetric.h +68 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/sys.h +327 -0
- data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/zetas.inc +55 -0
- data/lib/mldsa/parameter_set.rb +82 -0
- data/lib/mldsa/signing_key.rb +147 -0
- data/lib/mldsa/verify_key.rb +72 -0
- data/lib/mldsa/version.rb +7 -0
- data/lib/mldsa_gh.rb +93 -0
- metadata +225 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module MLDSA
|
|
4
|
+
# Public key for verifying ML-DSA signatures.
|
|
5
|
+
class VerifyKey
|
|
6
|
+
# @return [MLDSA::ParameterSet] ML-DSA parameter set for this key
|
|
7
|
+
attr_reader :parameter_set
|
|
8
|
+
|
|
9
|
+
# Import a public verification key.
|
|
10
|
+
#
|
|
11
|
+
# @param key [String] serialized public key bytes
|
|
12
|
+
# @param parameter_set [MLDSA::ParameterSet] one of {MLDSA::ML_DSA_44}, {MLDSA::ML_DSA_65}, or {MLDSA::ML_DSA_87}
|
|
13
|
+
# @raise [ArgumentError] if the parameter set is unsupported or the key has the wrong size
|
|
14
|
+
# @raise [TypeError] if key is not a String
|
|
15
|
+
def initialize(key, parameter_set)
|
|
16
|
+
parameter_set = MLDSA.validate_parameter_set(parameter_set)
|
|
17
|
+
MLDSA.validate_bytes(key, parameter_set.public_key_size, "public key")
|
|
18
|
+
|
|
19
|
+
@parameter_set = parameter_set
|
|
20
|
+
@key_bytes = MLDSA.copy_bytes(key)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Verify a signature over a message and optional context.
|
|
24
|
+
#
|
|
25
|
+
# @param signature [String] signature bytes
|
|
26
|
+
# @param message [String] signed message
|
|
27
|
+
# @param context [String] optional application context, at most 255 bytes
|
|
28
|
+
# @return [true] when verification succeeds
|
|
29
|
+
# @raise [MLDSA::VerifyError] if verification fails
|
|
30
|
+
# @raise [ArgumentError] if signature has the wrong size or context is too large
|
|
31
|
+
# @raise [TypeError] if context is not a String
|
|
32
|
+
def verify(signature, message, context: "")
|
|
33
|
+
MLDSA.validate_context(context)
|
|
34
|
+
MLDSA.validate_bytes(signature, parameter_set.signature_size, "signature")
|
|
35
|
+
|
|
36
|
+
return true if Native.verify(parameter_set.identifier, @key_bytes, signature, message, context)
|
|
37
|
+
|
|
38
|
+
raise VerifyError, "signature verification failed!"
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Verify a signature over a precomputed external message representative.
|
|
42
|
+
#
|
|
43
|
+
# @param signature [String] signature bytes
|
|
44
|
+
# @param mu [String] precomputed external message representative
|
|
45
|
+
# @return [true] when verification succeeds
|
|
46
|
+
# @raise [MLDSA::VerifyError] if verification fails
|
|
47
|
+
# @raise [ArgumentError] if signature or mu has the wrong size
|
|
48
|
+
# @raise [TypeError] if mu is not a String
|
|
49
|
+
def verify_mu(signature, mu)
|
|
50
|
+
MLDSA.validate_bytes(signature, parameter_set.signature_size, "signature")
|
|
51
|
+
MLDSA.validate_bytes(mu, parameter_set.mu_size, "mu")
|
|
52
|
+
|
|
53
|
+
return true if Native.verify_mu(parameter_set.identifier, @key_bytes, signature, mu)
|
|
54
|
+
|
|
55
|
+
raise VerifyError, "signature verification failed!"
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Export the public key.
|
|
59
|
+
#
|
|
60
|
+
# @return [String] mutable copy of the public key bytes
|
|
61
|
+
def to_bytes
|
|
62
|
+
@key_bytes.dup
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# String representation containing the public key bytes as hex.
|
|
66
|
+
#
|
|
67
|
+
# @return [String]
|
|
68
|
+
def inspect
|
|
69
|
+
"#<#{self.class}:#{@key_bytes.unpack1('H*')}>"
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
data/lib/mldsa_gh.rb
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "securerandom"
|
|
4
|
+
require "mldsa/version"
|
|
5
|
+
require "mldsa/parameter_set"
|
|
6
|
+
require "mldsa/signing_key"
|
|
7
|
+
require "mldsa/verify_key"
|
|
8
|
+
|
|
9
|
+
# Ruby bindings for ML-DSA-44, ML-DSA-65, and ML-DSA-87.
|
|
10
|
+
module MLDSA
|
|
11
|
+
module_function
|
|
12
|
+
|
|
13
|
+
# Size of an ML-DSA private seed in bytes.
|
|
14
|
+
# @return [Integer]
|
|
15
|
+
SEED_SIZE = 32
|
|
16
|
+
|
|
17
|
+
# Size of the hedging randomness supplied to mldsa-native in bytes.
|
|
18
|
+
# @return [Integer]
|
|
19
|
+
RANDOM_SIZE = 32
|
|
20
|
+
|
|
21
|
+
# Size of an external message representative `mu` in bytes.
|
|
22
|
+
# @return [Integer]
|
|
23
|
+
MU_SIZE = 64
|
|
24
|
+
|
|
25
|
+
# ML-DSA-44 parameter set.
|
|
26
|
+
# @return [MLDSA::ParameterSet]
|
|
27
|
+
ML_DSA_44 = ParameterSet.new(
|
|
28
|
+
identifier: 44,
|
|
29
|
+
private_key_size: 2560,
|
|
30
|
+
public_key_size: 1312,
|
|
31
|
+
signature_size: 2420
|
|
32
|
+
).freeze
|
|
33
|
+
|
|
34
|
+
# ML-DSA-65 parameter set.
|
|
35
|
+
# @return [MLDSA::ParameterSet]
|
|
36
|
+
ML_DSA_65 = ParameterSet.new(
|
|
37
|
+
identifier: 65,
|
|
38
|
+
private_key_size: 4032,
|
|
39
|
+
public_key_size: 1952,
|
|
40
|
+
signature_size: 3309
|
|
41
|
+
).freeze
|
|
42
|
+
|
|
43
|
+
# ML-DSA-87 parameter set.
|
|
44
|
+
# @return [MLDSA::ParameterSet]
|
|
45
|
+
ML_DSA_87 = ParameterSet.new(
|
|
46
|
+
identifier: 87,
|
|
47
|
+
private_key_size: 4896,
|
|
48
|
+
public_key_size: 2592,
|
|
49
|
+
signature_size: 4627
|
|
50
|
+
).freeze
|
|
51
|
+
ParameterSet.private_class_method :new
|
|
52
|
+
|
|
53
|
+
# Supported ML-DSA parameter sets.
|
|
54
|
+
# @return [Array<MLDSA::ParameterSet>]
|
|
55
|
+
PARAMETER_SETS = [ML_DSA_44, ML_DSA_65, ML_DSA_87].freeze
|
|
56
|
+
|
|
57
|
+
# Raised when a signature fails verification.
|
|
58
|
+
VerifyError = Class.new(StandardError)
|
|
59
|
+
|
|
60
|
+
# Raised when requesting a private seed from a key imported without one.
|
|
61
|
+
SeedUnavailableError = Class.new(StandardError)
|
|
62
|
+
|
|
63
|
+
require "mldsa_gh_native"
|
|
64
|
+
private_constant :Native
|
|
65
|
+
|
|
66
|
+
# @api private
|
|
67
|
+
def validate_parameter_set(parameter_set)
|
|
68
|
+
return parameter_set if PARAMETER_SETS.include?(parameter_set)
|
|
69
|
+
|
|
70
|
+
raise ArgumentError, "expected parameter set MLDSA::ML_DSA_44, MLDSA::ML_DSA_65, or MLDSA::ML_DSA_87, got #{parameter_set.inspect}"
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# @api private
|
|
74
|
+
def validate_bytes(value, size, name)
|
|
75
|
+
raise TypeError, "expected String, got #{value.class}" unless value.is_a?(String)
|
|
76
|
+
return true if value.bytesize == size
|
|
77
|
+
|
|
78
|
+
raise ArgumentError, "expected #{size}-byte #{name}, got #{value.bytesize}"
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# @api private
|
|
82
|
+
def validate_context(context)
|
|
83
|
+
raise TypeError, "expected String, got #{context.class}" unless context.is_a?(String)
|
|
84
|
+
return true if context.bytesize <= 255
|
|
85
|
+
|
|
86
|
+
raise ArgumentError, "expected context to be at most 255 bytes, got #{context.bytesize}"
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# @api private
|
|
90
|
+
def copy_bytes(value)
|
|
91
|
+
value.dup.freeze
|
|
92
|
+
end
|
|
93
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: mldsa_gh
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- vcsjones
|
|
8
|
+
bindir: bin
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: bundler
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '2.0'
|
|
19
|
+
- - "<"
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: '3'
|
|
22
|
+
type: :development
|
|
23
|
+
prerelease: false
|
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
+
requirements:
|
|
26
|
+
- - ">="
|
|
27
|
+
- !ruby/object:Gem::Version
|
|
28
|
+
version: '2.0'
|
|
29
|
+
- - "<"
|
|
30
|
+
- !ruby/object:Gem::Version
|
|
31
|
+
version: '3'
|
|
32
|
+
- !ruby/object:Gem::Dependency
|
|
33
|
+
name: rake-compiler
|
|
34
|
+
requirement: !ruby/object:Gem::Requirement
|
|
35
|
+
requirements:
|
|
36
|
+
- - ">="
|
|
37
|
+
- !ruby/object:Gem::Version
|
|
38
|
+
version: '1.2'
|
|
39
|
+
- - "<"
|
|
40
|
+
- !ruby/object:Gem::Version
|
|
41
|
+
version: '2'
|
|
42
|
+
type: :development
|
|
43
|
+
prerelease: false
|
|
44
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
45
|
+
requirements:
|
|
46
|
+
- - ">="
|
|
47
|
+
- !ruby/object:Gem::Version
|
|
48
|
+
version: '1.2'
|
|
49
|
+
- - "<"
|
|
50
|
+
- !ruby/object:Gem::Version
|
|
51
|
+
version: '2'
|
|
52
|
+
- !ruby/object:Gem::Dependency
|
|
53
|
+
name: rspec
|
|
54
|
+
requirement: !ruby/object:Gem::Requirement
|
|
55
|
+
requirements:
|
|
56
|
+
- - ">="
|
|
57
|
+
- !ruby/object:Gem::Version
|
|
58
|
+
version: '3.13'
|
|
59
|
+
- - "<"
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '4'
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - ">="
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '3.13'
|
|
69
|
+
- - "<"
|
|
70
|
+
- !ruby/object:Gem::Version
|
|
71
|
+
version: '4'
|
|
72
|
+
description: Ruby bindings for ML-DSA-44, ML-DSA-65, and ML-DSA-87 using mldsa-native.
|
|
73
|
+
executables: []
|
|
74
|
+
extensions:
|
|
75
|
+
- ext/mldsa_gh_native/extconf.rb
|
|
76
|
+
extra_rdoc_files: []
|
|
77
|
+
files:
|
|
78
|
+
- LICENSE
|
|
79
|
+
- README.md
|
|
80
|
+
- ext/mldsa_gh_native/extconf.rb
|
|
81
|
+
- ext/mldsa_gh_native/mldsa_gh_native.c
|
|
82
|
+
- ext/mldsa_gh_native/mldsa_gh_native_all.c
|
|
83
|
+
- ext/mldsa_gh_native/mldsa_gh_native_all.h
|
|
84
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/BUILDING.md
|
|
85
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/LICENSE
|
|
86
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/README.md
|
|
87
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/README.md
|
|
88
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/mldsa_native.c
|
|
89
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/mldsa_native.h
|
|
90
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/mldsa_native_asm.S
|
|
91
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/mldsa_native_config.h
|
|
92
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/cbmc.h
|
|
93
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/common.h
|
|
94
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/context.h
|
|
95
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/ct.c
|
|
96
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/ct.h
|
|
97
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/debug.c
|
|
98
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/debug.h
|
|
99
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/fips202.c
|
|
100
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/fips202.h
|
|
101
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/fips202x4.c
|
|
102
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/fips202x4.h
|
|
103
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/keccakf1600.c
|
|
104
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/keccakf1600.h
|
|
105
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/auto.h
|
|
106
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/fips202_native_aarch64.h
|
|
107
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x1_scalar_aarch64_asm.S
|
|
108
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x1_v84a_aarch64_asm.S
|
|
109
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x2_v84a_aarch64_asm.S
|
|
110
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x4_v8a_scalar_hybrid_aarch64_asm.S
|
|
111
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x4_v8a_v84a_scalar_hybrid_aarch64_asm.S
|
|
112
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccakf1600_round_constants.c
|
|
113
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x1_scalar.h
|
|
114
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x1_v84a.h
|
|
115
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x2_v84a.h
|
|
116
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x4_v8a_scalar.h
|
|
117
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x4_v8a_v84a_scalar.h
|
|
118
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/api.h
|
|
119
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/README.md
|
|
120
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/mve.h
|
|
121
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/src/fips202_native_armv81m.h
|
|
122
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/src/keccak_f1600_x4_mve.S
|
|
123
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/src/keccak_f1600_x4_mve.c
|
|
124
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/src/keccak_f1600_x4_state_extract_bytes_mve.S
|
|
125
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/src/keccak_f1600_x4_state_xor_bytes_mve.S
|
|
126
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/src/keccakf1600_round_constants.c
|
|
127
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/auto.h
|
|
128
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/x86_64/keccak_f1600_x4_avx2.h
|
|
129
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/x86_64/src/fips202_native_x86_64.h
|
|
130
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/x86_64/src/keccak_f1600_x4_avx2_asm.S
|
|
131
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/x86_64/src/keccakf1600_constants.c
|
|
132
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/meta.h
|
|
133
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/aarch64_zetas.c
|
|
134
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/arith_native_aarch64.h
|
|
135
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_intt_aarch64_asm.S
|
|
136
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_ntt_aarch64_asm.S
|
|
137
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_pointwise_montgomery_aarch64_asm.S
|
|
138
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_poly_caddq_aarch64_asm.S
|
|
139
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_poly_chknorm_aarch64_asm.S
|
|
140
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_poly_decompose_32_aarch64_asm.S
|
|
141
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_poly_decompose_88_aarch64_asm.S
|
|
142
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_poly_use_hint_32_aarch64_asm.S
|
|
143
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_poly_use_hint_88_aarch64_asm.S
|
|
144
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_polyvecl_pointwise_acc_montgomery_l4_aarch64_asm.S
|
|
145
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_polyvecl_pointwise_acc_montgomery_l5_aarch64_asm.S
|
|
146
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_polyvecl_pointwise_acc_montgomery_l7_aarch64_asm.S
|
|
147
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_polyz_unpack_17_aarch64_asm.S
|
|
148
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_polyz_unpack_19_aarch64_asm.S
|
|
149
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_rej_uniform_aarch64_asm.S
|
|
150
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_rej_uniform_eta2_aarch64_asm.S
|
|
151
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_rej_uniform_eta4_aarch64_asm.S
|
|
152
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/polyz_unpack_table.c
|
|
153
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/rej_uniform_eta_table.c
|
|
154
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/rej_uniform_table.c
|
|
155
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/api.h
|
|
156
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/meta.h
|
|
157
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/meta.h
|
|
158
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/arith_native_x86_64.h
|
|
159
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/consts.c
|
|
160
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/consts.h
|
|
161
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_intt_avx2_asm.S
|
|
162
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_ntt_avx2_asm.S
|
|
163
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_nttunpack_avx2_asm.S
|
|
164
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_pointwise_acc_l4_avx2_asm.S
|
|
165
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_pointwise_acc_l5_avx2_asm.S
|
|
166
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_pointwise_acc_l7_avx2_asm.S
|
|
167
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_pointwise_avx2_asm.S
|
|
168
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_poly_caddq_avx2_asm.S
|
|
169
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_poly_chknorm_avx2_asm.S
|
|
170
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_poly_decompose_32_avx2_asm.S
|
|
171
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_poly_decompose_88_avx2_asm.S
|
|
172
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_poly_use_hint_32_avx2_asm.S
|
|
173
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_poly_use_hint_88_avx2_asm.S
|
|
174
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_polyz_unpack_17_avx2_asm.S
|
|
175
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_polyz_unpack_19_avx2_asm.S
|
|
176
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_rej_uniform_avx2_asm.S
|
|
177
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_rej_uniform_eta2_avx2_asm.S
|
|
178
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_rej_uniform_eta4_avx2_asm.S
|
|
179
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/rej_uniform_table.c
|
|
180
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/packing.c
|
|
181
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/packing.h
|
|
182
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/params.h
|
|
183
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/poly.c
|
|
184
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/poly.h
|
|
185
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/poly_kl.c
|
|
186
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/poly_kl.h
|
|
187
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/polyvec.c
|
|
188
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/polyvec.h
|
|
189
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/polyvec_lazy.c
|
|
190
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/polyvec_lazy.h
|
|
191
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/randombytes.h
|
|
192
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/reduce.h
|
|
193
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/rounding.h
|
|
194
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/sign.c
|
|
195
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/sign.h
|
|
196
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/symmetric.h
|
|
197
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/sys.h
|
|
198
|
+
- ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/zetas.inc
|
|
199
|
+
- lib/mldsa/parameter_set.rb
|
|
200
|
+
- lib/mldsa/signing_key.rb
|
|
201
|
+
- lib/mldsa/verify_key.rb
|
|
202
|
+
- lib/mldsa/version.rb
|
|
203
|
+
- lib/mldsa_gh.rb
|
|
204
|
+
homepage: https://github.com/github/mldsa_gh
|
|
205
|
+
licenses:
|
|
206
|
+
- MIT
|
|
207
|
+
metadata: {}
|
|
208
|
+
rdoc_options: []
|
|
209
|
+
require_paths:
|
|
210
|
+
- lib
|
|
211
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
212
|
+
requirements:
|
|
213
|
+
- - ">="
|
|
214
|
+
- !ruby/object:Gem::Version
|
|
215
|
+
version: '3.0'
|
|
216
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
217
|
+
requirements:
|
|
218
|
+
- - ">="
|
|
219
|
+
- !ruby/object:Gem::Version
|
|
220
|
+
version: '0'
|
|
221
|
+
requirements: []
|
|
222
|
+
rubygems_version: 4.0.20
|
|
223
|
+
specification_version: 4
|
|
224
|
+
summary: Ruby bindings for ML-DSA
|
|
225
|
+
test_files: []
|