Sha256: b16059d4ed19ba62c72b7251649ab5d5dff45cb559cdf8f16f8b8a57c214ced3

Contents?: true

Size: 1.59 KB

Versions: 3

Compression:

Stored size: 1.59 KB

Contents

# frozen_string_literal: true

module JWT
  module JWA
    # Implementation of the HMAC family of algorithms (using RbNaCl prior to a certain version)
    class HmacRbNaClFixed
      include JWT::JWA::SigningAlgorithm

      def self.from_algorithm(algorithm)
        new(algorithm, ::RbNaCl::HMAC.const_get(algorithm.upcase.gsub('HS', 'SHA')))
      end

      def initialize(alg, hmac)
        @alg = alg
        @hmac = hmac
      end

      def sign(data:, signing_key:)
        signing_key ||= ''
        Deprecations.warning("The use of the algorithm #{alg} is deprecated and will be removed in the next major version of ruby-jwt")
        raise JWT::DecodeError, 'HMAC key expected to be a String' unless signing_key.is_a?(String)

        hmac.auth(padded_key_bytes(signing_key, hmac.key_bytes), data.encode('binary'))
      end

      def verify(data:, signature:, verification_key:)
        verification_key ||= ''
        Deprecations.warning("The use of the algorithm #{alg} is deprecated and will be removed in the next major version of ruby-jwt")
        raise JWT::DecodeError, 'HMAC key expected to be a String' unless verification_key.is_a?(String)

        hmac.verify(padded_key_bytes(verification_key, hmac.key_bytes), signature.encode('binary'), data.encode('binary'))
      rescue ::RbNaCl::BadAuthenticatorError, ::RbNaCl::LengthError
        false
      end

      register_algorithm(new('HS512256', ::RbNaCl::HMAC::SHA512256))

      private

      attr_reader :hmac

      def padded_key_bytes(key, bytesize)
        key.bytes.fill(0, key.bytesize...bytesize).pack('C*')
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 2 rubygems

Version Path
minato_ruby_api_client-0.2.2 vendor/bundle/ruby/3.2.0/gems/jwt-2.10.1/lib/jwt/jwa/hmac_rbnacl_fixed.rb
jwt-2.10.1 lib/jwt/jwa/hmac_rbnacl_fixed.rb
jwt-2.10.0 lib/jwt/jwa/hmac_rbnacl_fixed.rb