Class: MLKEM::CLI

Inherits:
Thor
  • Object
show all
Defined in:
lib/ml_kem/cli.rb

Overview

Command Line Interface (CLI) for ML-KEM key encapsulation mechanism. Supports key generation, encapsulation, and decapsulation via Thor commands.

Examples:

Generate keys

$ mlkem keygen -p pub.pem -s priv.pem

Encapsulate

$ mlkem encaps -p pub.pem -c ct.txt -k secret.key

Decapsulate

$ mlkem decaps -s priv.pem -c ct.txt -k secret.key

Since:

  • 0.1.0

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.exit_on_failure?Boolean

Ensures the CLI exits with a non-zero status code on failure

Returns:

  • (Boolean)

Since:

  • 0.1.0



23
24
25
# File 'lib/ml_kem/cli.rb', line 23

def self.exit_on_failure?
  true
end

Instance Method Details

#decapsObject

Decapsulates a ciphertext to recover the shared secret using the private key.

Examples:

$ mlkem decaps -s priv.pem -c ct.txt -k secret.key

Parameters:

  • options (Hash)

    a customizable set of options

Since:

  • 0.1.0



94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/ml_kem/cli.rb', line 94

def decaps
  mlkem = create_mlkem_instance
  private_key_pem = File.read(options[:sk])
  private_key = decode_pem(private_key_pem)

  ciphertext_base64 = File.read(options[:ciphertext])
  ciphertext = Base64.decode64(ciphertext_base64)

  secret = mlkem.decaps(private_key, ciphertext)

  File.write(options[:sharedkey], Base64.strict_encode64(secret))

  puts "Decapsulation complete. Shared secret written to #{options[:sharedkey]}"
end

#encapsObject

Encapsulates a shared secret using the given public key.

Examples:

$ mlkem encaps -p pub.pem -c ct.txt -k secret.key

Parameters:

  • options (Hash)

    a customizable set of options

Since:

  • 0.1.0



68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/ml_kem/cli.rb', line 68

def encaps
  mlkem = create_mlkem_instance
  public_key_pem = File.read(options[:pk])
  public_key = decode_pem(public_key_pem)

  secret, ciphertext = mlkem.encaps(public_key)

  File.write(options[:ciphertext], Base64.strict_encode64(ciphertext))
  File.write(options[:sharedkey], Base64.strict_encode64(secret))

  puts "Encapsulation complete:\n  Ciphertext: #{options[:ciphertext]}\n  Shared Secret: #{options[:sharedkey]}"
end

#keygenObject

Generates a public/private key pair and stores them in PEM format.

Examples:

$ mlkem keygen -p pub.pem -s priv.pem

Parameters:

  • options (Hash)

    a customizable set of options

Since:

  • 0.1.0



45
46
47
48
49
50
51
52
53
# File 'lib/ml_kem/cli.rb', line 45

def keygen
  mlkem = create_mlkem_instance
  public_key, private_key = mlkem.keygen

  File.write(options[:pk], encode_pem(public_key, "PUBLIC KEY"))
  File.write(options[:sk], encode_pem(private_key, "PRIVATE KEY"))

  puts "Keys generated:\n  Public Key: #{options[:pk]}\n  Private Key: #{options[:sk]}"
end