Module: PQCrypto::Signature
- Defined in:
- lib/pq_crypto/signature.rb
Defined Under Namespace
Classes: Keypair, PublicKey, SecretKey
Constant Summary
collapse
- CANONICAL_ALGORITHM =
:ml_dsa_65
- DETAILS =
AlgorithmRegistry.details_for_family(:ml_dsa).freeze
- NATIVE_DISPATCH =
{
ml_dsa_44: {
keypair: :native_ml_dsa_44_keypair,
sign: :native_ml_dsa_44_sign,
verify: :native_ml_dsa_44_verify,
keypair_from_seed: :native_ml_dsa_44_keypair_from_seed,
check_secret_key: :native_ml_dsa_44_check_secret_key,
}.freeze,
ml_dsa_65: {
keypair: :native_sign_keypair,
sign: :native_sign,
verify: :native_verify,
keypair_from_seed: :native_ml_dsa_keypair_from_seed,
check_secret_key: :native_ml_dsa_check_secret_key,
}.freeze,
ml_dsa_87: {
keypair: :native_ml_dsa_87_keypair,
sign: :native_ml_dsa_87_sign,
verify: :native_ml_dsa_87_verify,
keypair_from_seed: :native_ml_dsa_87_keypair_from_seed,
check_secret_key: :native_ml_dsa_87_check_secret_key,
}.freeze,
}.freeze
Class Method Summary
collapse
-
.details(algorithm) ⇒ Object
-
.generate(algorithm = CANONICAL_ALGORITHM) ⇒ Object
-
.public_key_from_bytes(algorithm, bytes) ⇒ Object
-
.public_key_from_pqc_container_der(der, algorithm = nil) ⇒ Object
-
.public_key_from_pqc_container_pem(pem, algorithm = nil) ⇒ Object
-
.public_key_from_spki_der(der, algorithm: nil) ⇒ Object
-
.public_key_from_spki_pem(pem, algorithm: nil) ⇒ Object
-
.secret_key_from_bytes(algorithm, bytes) ⇒ Object
-
.secret_key_from_pkcs8_der(der, passphrase: nil, require_encrypted: false) ⇒ Object
-
.secret_key_from_pkcs8_pem(pem, passphrase: nil, require_encrypted: false) ⇒ Object
-
.secret_key_from_pqc_container_der(der, algorithm = nil) ⇒ Object
-
.secret_key_from_pqc_container_pem(pem, algorithm = nil) ⇒ Object
-
.secret_key_from_seed(algorithm, seed) ⇒ Object
-
.supported ⇒ Object
Class Method Details
.details(algorithm) ⇒ Object
107
108
109
|
# File 'lib/pq_crypto/signature.rb', line 107
def details(algorithm)
DETAILS.fetch(resolve_algorithm!(algorithm)).dup
end
|
.generate(algorithm = CANONICAL_ALGORITHM) ⇒ Object
36
37
38
39
40
41
|
# File 'lib/pq_crypto/signature.rb', line 36
def generate(algorithm = CANONICAL_ALGORITHM)
algorithm = resolve_algorithm!(algorithm)
public_key, secret_key = PQCrypto.__send__(native_method_for(algorithm, :keypair))
Keypair.new(PublicKey.new(algorithm, public_key),
SecretKey.new(algorithm, secret_key, freshly_generated: true))
end
|
.public_key_from_bytes(algorithm, bytes) ⇒ Object
43
44
45
46
|
# File 'lib/pq_crypto/signature.rb', line 43
def public_key_from_bytes(algorithm, bytes)
resolve_algorithm!(algorithm)
PublicKey.new(algorithm, bytes)
end
|
.public_key_from_pqc_container_der(der, algorithm = nil) ⇒ Object
57
58
59
60
61
|
# File 'lib/pq_crypto/signature.rb', line 57
def public_key_from_pqc_container_der(der, algorithm = nil)
resolved_algorithm, bytes = Serialization.public_key_from_pqc_container_der(algorithm, der)
resolve_algorithm!(resolved_algorithm)
PublicKey.new(resolved_algorithm, bytes)
end
|
.public_key_from_pqc_container_pem(pem, algorithm = nil) ⇒ Object
63
64
65
66
67
|
# File 'lib/pq_crypto/signature.rb', line 63
def public_key_from_pqc_container_pem(pem, algorithm = nil)
resolved_algorithm, bytes = Serialization.public_key_from_pqc_container_pem(algorithm, pem)
resolve_algorithm!(resolved_algorithm)
PublicKey.new(resolved_algorithm, bytes)
end
|
.public_key_from_spki_der(der, algorithm: nil) ⇒ Object
81
82
83
84
85
|
# File 'lib/pq_crypto/signature.rb', line 81
def public_key_from_spki_der(der, algorithm: nil)
resolved_algorithm, bytes = SPKI.decode_der(der)
validate_algorithm_match!(algorithm, resolved_algorithm) if algorithm
PublicKey.new(resolve_algorithm!(resolved_algorithm), bytes)
end
|
.public_key_from_spki_pem(pem, algorithm: nil) ⇒ Object
87
88
89
90
91
|
# File 'lib/pq_crypto/signature.rb', line 87
def public_key_from_spki_pem(pem, algorithm: nil)
resolved_algorithm, bytes = SPKI.decode_pem(pem)
validate_algorithm_match!(algorithm, resolved_algorithm) if algorithm
PublicKey.new(resolve_algorithm!(resolved_algorithm), bytes)
end
|
.secret_key_from_bytes(algorithm, bytes) ⇒ Object
48
49
50
51
|
# File 'lib/pq_crypto/signature.rb', line 48
def secret_key_from_bytes(algorithm, bytes)
resolve_algorithm!(algorithm)
SecretKey.new(algorithm, bytes)
end
|
.secret_key_from_pkcs8_der(der, passphrase: nil, require_encrypted: false) ⇒ Object
93
94
95
96
97
98
|
# File 'lib/pq_crypto/signature.rb', line 93
def secret_key_from_pkcs8_der(der, passphrase: nil, require_encrypted: false)
require_encrypted = Internal.strict_boolean!(require_encrypted, name: "require_encrypted")
secret_key_from_decoded_pkcs8(
*PKCS8.decode_der(der, passphrase: passphrase, require_encrypted: require_encrypted)
)
end
|
.secret_key_from_pkcs8_pem(pem, passphrase: nil, require_encrypted: false) ⇒ Object
100
101
102
103
104
105
|
# File 'lib/pq_crypto/signature.rb', line 100
def secret_key_from_pkcs8_pem(pem, passphrase: nil, require_encrypted: false)
require_encrypted = Internal.strict_boolean!(require_encrypted, name: "require_encrypted")
secret_key_from_decoded_pkcs8(
*PKCS8.decode_pem(pem, passphrase: passphrase, require_encrypted: require_encrypted)
)
end
|
.secret_key_from_pqc_container_der(der, algorithm = nil) ⇒ Object
69
70
71
72
73
|
# File 'lib/pq_crypto/signature.rb', line 69
def secret_key_from_pqc_container_der(der, algorithm = nil)
resolved_algorithm, bytes = Serialization.secret_key_from_pqc_container_der(algorithm, der)
resolve_algorithm!(resolved_algorithm)
SecretKey.new(resolved_algorithm, bytes)
end
|
.secret_key_from_pqc_container_pem(pem, algorithm = nil) ⇒ Object
75
76
77
78
79
|
# File 'lib/pq_crypto/signature.rb', line 75
def secret_key_from_pqc_container_pem(pem, algorithm = nil)
resolved_algorithm, bytes = Serialization.secret_key_from_pqc_container_pem(algorithm, pem)
resolve_algorithm!(resolved_algorithm)
SecretKey.new(resolved_algorithm, bytes)
end
|
.secret_key_from_seed(algorithm, seed) ⇒ Object
53
54
55
|
# File 'lib/pq_crypto/signature.rb', line 53
def secret_key_from_seed(algorithm, seed)
SecretKey.from_seed(resolve_algorithm!(algorithm), seed)
end
|
.supported ⇒ Object
111
112
113
|
# File 'lib/pq_crypto/signature.rb', line 111
def supported
DETAILS.keys.dup
end
|