Sha256: 8f0c762a239676ed869d16940616ac5a9595ee12af1ac7adc102847bd0a20846

Contents?: true

Size: 761 Bytes

Versions: 51

Compression:

Stored size: 761 Bytes

Contents

module RubySMB
  module Crypto
    module KDF
      def self.counter_mode(ki, label, context, length: 128)
        digest = OpenSSL::Digest.new('SHA256')
        r = 32

        n = length / 256
        n = 1 if n == 0

        raise ArgumentError if n > 2**r - 1
        result = ""

        n.times do |i|
          input = [i + 1].pack('L>')
          input << label
          input << "\x00"
          input << context
          input << [length].pack('L>')
          k = OpenSSL::HMAC.digest(digest, ki, input)
          result << k
        end

        return result[0...(length / 8)]
      rescue OpenSSL::OpenSSLError => e
        raise RubySMB::Error::EncryptionError, "Crypto::KDF.counter_mode OpenSSL error: #{e.message}"
      end
    end
  end
end

Version data entries

51 entries across 51 versions & 1 rubygems

Version Path
ruby_smb-3.3.13 lib/ruby_smb/crypto.rb
ruby_smb-3.3.12 lib/ruby_smb/crypto.rb
ruby_smb-3.3.11 lib/ruby_smb/crypto.rb
ruby_smb-3.3.10 lib/ruby_smb/crypto.rb
ruby_smb-3.3.9 lib/ruby_smb/crypto.rb
ruby_smb-3.3.7 lib/ruby_smb/crypto.rb
ruby_smb-3.3.6 lib/ruby_smb/crypto.rb
ruby_smb-3.3.5 lib/ruby_smb/crypto.rb
ruby_smb-3.3.4 lib/ruby_smb/crypto.rb
ruby_smb-3.3.3 lib/ruby_smb/crypto.rb
ruby_smb-3.3.2 lib/ruby_smb/crypto.rb
ruby_smb-3.3.1 lib/ruby_smb/crypto.rb
ruby_smb-3.3.0 lib/ruby_smb/crypto.rb
ruby_smb-3.2.8 lib/ruby_smb/crypto.rb
ruby_smb-3.2.7 lib/ruby_smb/crypto.rb
ruby_smb-3.2.6 lib/ruby_smb/crypto.rb
ruby_smb-3.2.5 lib/ruby_smb/crypto.rb
ruby_smb-3.2.4 lib/ruby_smb/crypto.rb
ruby_smb-3.2.3 lib/ruby_smb/crypto.rb
ruby_smb-3.2.2 lib/ruby_smb/crypto.rb