Class: Fontisan::Utilities::ChecksumCalculator

Inherits:
Object
  • Object
show all
Defined in:
lib/fontisan/utilities/checksum_calculator.rb

Overview

ChecksumCalculator provides stateless utility methods for calculating font file checksums.

This class implements the TrueType/OpenType checksum algorithm which sums all uint32 values in a file. The checksum is used to verify file integrity and calculate the checksumAdjustment value stored in the ‘head’ table.

Examples:

Calculate file checksum

checksum = ChecksumCalculator.calculate_file_checksum("font.ttf")
# => 2842116234

Calculate checksum adjustment

adjustment = ChecksumCalculator.calculate_adjustment(checksum)
# => 1452851062

Class Method Summary collapse

Class Method Details

.calculate_adjustment(file_checksum) ⇒ Integer

Calculate the checksum adjustment value for the ‘head’ table.

The checksum adjustment is stored at offset 8 in the ‘head’ table and is calculated as: CHECKSUM_ADJUSTMENT_MAGIC - file_checksum. This value ensures that the checksum of the entire font file equals the magic number.

Examples:

adjustment = ChecksumCalculator.calculate_adjustment(2842116234)
# => 1452851062

Parameters:

  • file_checksum (Integer)

    the calculated file checksum

Returns:

  • (Integer)

    the checksum adjustment value to write to the ‘head’ table



55
56
57
# File 'lib/fontisan/utilities/checksum_calculator.rb', line 55

def self.calculate_adjustment(file_checksum)
  (Constants::CHECKSUM_ADJUSTMENT_MAGIC - file_checksum) & 0xFFFFFFFF
end

.calculate_file_checksum(file_path) ⇒ Integer

Calculate the checksum of an entire font file.

The checksum is calculated by summing all uint32 (4-byte) values in the file. Files that are not multiples of 4 bytes are padded with zeros. The sum is masked to 32 bits to prevent overflow.

Examples:

checksum = ChecksumCalculator.calculate_file_checksum("font.ttf")
# => 2842116234

Parameters:

  • file_path (String)

    path to the font file

Returns:

  • (Integer)

    the calculated uint32 checksum

Raises:

  • (Errno::ENOENT)

    if the file does not exist

  • (Errno::EACCES)

    if the file cannot be read



36
37
38
39
40
# File 'lib/fontisan/utilities/checksum_calculator.rb', line 36

def self.calculate_file_checksum(file_path)
  File.open(file_path, "rb") do |file|
    calculate_checksum_from_io(file)
  end
end

.calculate_table_checksum(data) ⇒ Integer

Calculate checksum for raw table data.

This method calculates the checksum for a binary string of table data. Used when creating WOFF files or validating table integrity.

Examples:

checksum = ChecksumCalculator.calculate_table_checksum(table_data)
# => 1234567890

Parameters:

  • data (String)

    binary table data

Returns:

  • (Integer)

    the calculated uint32 checksum



70
71
72
73
74
# File 'lib/fontisan/utilities/checksum_calculator.rb', line 70

def self.calculate_table_checksum(data)
  io = StringIO.new(data)
  io.set_encoding(Encoding::BINARY)
  calculate_checksum_from_io(io)
end