Module: PQCrypto::KEM
- Defined in:
- lib/pq_crypto/kem.rb
Defined Under Namespace
Classes: EncapsulationResult, Keypair, PublicKey, SecretKey
Constant Summary
collapse
- CANONICAL_ALGORITHM =
:ml_kem_768
- DETAILS =
AlgorithmRegistry.details_for_family(:ml_kem).freeze
- NATIVE_DISPATCH =
{
ml_kem_512: {
keypair: :native_ml_kem_512_keypair,
keypair_from_seed: :native_ml_kem_512_keypair_from_seed,
encapsulate: :native_ml_kem_512_encapsulate,
decapsulate: :native_ml_kem_512_decapsulate,
}.freeze,
ml_kem_768: {
keypair: :native_ml_kem_keypair,
keypair_from_seed: :native_ml_kem_keypair_from_seed,
encapsulate: :native_ml_kem_encapsulate,
decapsulate: :native_ml_kem_decapsulate,
}.freeze,
ml_kem_1024: {
keypair: :native_ml_kem_1024_keypair,
keypair_from_seed: :native_ml_kem_1024_keypair_from_seed,
encapsulate: :native_ml_kem_1024_encapsulate,
decapsulate: :native_ml_kem_1024_decapsulate,
}.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) ⇒ Object
-
.secret_key_from_pkcs8_pem(pem, passphrase: nil) ⇒ 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
91
92
93
|
# File 'lib/pq_crypto/kem.rb', line 91
def details(algorithm)
DETAILS.fetch(resolve_algorithm!(algorithm)).dup
end
|
.generate(algorithm = CANONICAL_ALGORITHM) ⇒ Object
33
34
35
36
37
|
# File 'lib/pq_crypto/kem.rb', line 33
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))
end
|
.public_key_from_bytes(algorithm, bytes) ⇒ Object
39
40
41
|
# File 'lib/pq_crypto/kem.rb', line 39
def public_key_from_bytes(algorithm, bytes)
PublicKey.new(resolve_algorithm!(algorithm), bytes)
end
|
.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
79
80
81
82
83
|
# File 'lib/pq_crypto/kem.rb', line 79
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
85
86
87
88
89
|
# File 'lib/pq_crypto/kem.rb', line 85
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
43
44
45
|
# File 'lib/pq_crypto/kem.rb', line 43
def secret_key_from_bytes(algorithm, bytes)
SecretKey.new(resolve_algorithm!(algorithm), bytes)
end
|
.secret_key_from_pkcs8_der(der, passphrase: nil) ⇒ Object
71
72
73
|
# File 'lib/pq_crypto/kem.rb', line 71
def secret_key_from_pkcs8_der(der, passphrase: nil)
secret_key_from_decoded_pkcs8(*PKCS8.decode_der(der, passphrase: passphrase))
end
|
.secret_key_from_pkcs8_pem(pem, passphrase: nil) ⇒ Object
75
76
77
|
# File 'lib/pq_crypto/kem.rb', line 75
def secret_key_from_pkcs8_pem(pem, passphrase: nil)
secret_key_from_decoded_pkcs8(*PKCS8.decode_pem(pem, passphrase: passphrase))
end
|
.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
47
48
49
|
# File 'lib/pq_crypto/kem.rb', line 47
def secret_key_from_seed(algorithm, seed)
SecretKey.from_seed(resolve_algorithm!(algorithm), seed)
end
|
.supported ⇒ Object
95
96
97
|
# File 'lib/pq_crypto/kem.rb', line 95
def supported
DETAILS.keys.dup
end
|