Sha256: 57c582b912b07232930a3a26071024f5151554b6815461514481453e5aaf19d0

Contents?: true

Size: 1.51 KB

Versions: 1

Compression:

Stored size: 1.51 KB

Contents

# frozen_string_literal: true

require 'aes-everywhere'

module RevbitsPamCicd
  module Secure
    class << self
      # @return [Array] `private_keys`
      def private_keys
        # key_a, key_b
        [rand(2..9), rand(2..9)]
      end

      # @return [Array] `public_keys`
      def public_keys(private_key_a, private_key_b, secret_creators)
        [public_key_a(private_key_a, secret_creators), public_key_b(private_key_b, secret_creators)]
      end

      # @return [Integer] `secret`
      def secret(encrypted_values, private_key_a, private_key_b, secret_creators)
        shared_key_a = shared_key_a(encrypted_values.dig('keyA'), private_key_a, secret_creators.dig(:prime))
        shared_key_b = shared_key_b(encrypted_values.dig('keyB'), private_key_b, secret_creators.dig(:prime))

        shared_key_a ** shared_key_b
      end

      # @return [String] decrypted value
      def decrypt(secret, encrypted_value)
        AES256.decrypt(encrypted_value.to_s, secret.to_s)
      end

      private

      def shared_key_a(key_a, private_key_a, prime)
        (key_a ** private_key_a) % prime
      end

      def shared_key_b(key_b, private_key_b, prime)
        (key_b ** private_key_b) % prime
      end

      def public_key_a(public_key_a, secret_creators)
        (secret_creators.dig(:generated) ** public_key_a) % secret_creators.dig(:prime)
      end

      def public_key_b(public_key_b, secret_creators)
        (secret_creators.dig(:generated) ** public_key_b) % secret_creators.dig(:prime)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
revbits_pam_cicd-0.1.2 lib/revbits_pam_cicd/secure.rb