Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/ssh_public_key.rb')
-rw-r--r--lib/gitlab/ssh_public_key.rb26
1 files changed, 20 insertions, 6 deletions
diff --git a/lib/gitlab/ssh_public_key.rb b/lib/gitlab/ssh_public_key.rb
index 6df54852d02..314cc5e2db6 100644
--- a/lib/gitlab/ssh_public_key.rb
+++ b/lib/gitlab/ssh_public_key.rb
@@ -2,13 +2,15 @@
module Gitlab
class SSHPublicKey
- Technology = Struct.new(:name, :key_class, :supported_sizes)
+ Technology = Struct.new(:name, :key_class, :supported_sizes, :supported_algorithms)
+ # See https://man.openbsd.org/sshd#AUTHORIZED_KEYS_FILE_FORMAT for the list of
+ # supported algorithms.
TECHNOLOGIES = [
- Technology.new(:rsa, OpenSSL::PKey::RSA, [1024, 2048, 3072, 4096]),
- Technology.new(:dsa, OpenSSL::PKey::DSA, [1024, 2048, 3072]),
- Technology.new(:ecdsa, OpenSSL::PKey::EC, [256, 384, 521]),
- Technology.new(:ed25519, Net::SSH::Authentication::ED25519::PubKey, [256])
+ Technology.new(:rsa, OpenSSL::PKey::RSA, [1024, 2048, 3072, 4096], %w(ssh-rsa)),
+ Technology.new(:dsa, OpenSSL::PKey::DSA, [1024, 2048, 3072], %w(ssh-dss)),
+ Technology.new(:ecdsa, OpenSSL::PKey::EC, [256, 384, 521], %w(ecdsa-sha2-nistp256 ecdsa-sha2-nistp384 ecdsa-sha2-nistp521)),
+ Technology.new(:ed25519, Net::SSH::Authentication::ED25519::PubKey, [256], %w(ssh-ed25519))
].freeze
def self.technology(name)
@@ -19,8 +21,20 @@ module Gitlab
TECHNOLOGIES.find { |tech| key.is_a?(tech.key_class) }
end
+ def self.supported_types
+ TECHNOLOGIES.map(&:name)
+ end
+
def self.supported_sizes(name)
- technology(name)&.supported_sizes
+ technology(name).supported_sizes
+ end
+
+ def self.supported_algorithms
+ TECHNOLOGIES.flat_map { |tech| tech.supported_algorithms }
+ end
+
+ def self.supported_algorithms_for_name(name)
+ technology(name).supported_algorithms
end
def self.sanitize(key_content)