Sha256: 6f9af0c232f7d8787d3295ed9c09390d0e7157df8b6b6e84f955f86e02748ac0

Contents?: true

Size: 1.68 KB

Versions: 6

Compression:

Stored size: 1.68 KB

Contents

# encoding: binary
# frozen_string_literal: true

module RbNaCl
  module OneTimeAuths
    # Computes an authenticator using poly1305
    #
    # The authenticator can be used at a later time to verify the provenance of
    # the message by recomputing the tag over the message and then comparing it to
    # the provided authenticator.  The class provides methods for generating
    # signatures and also has a constant-time implementation for checking them.
    #
    # As the name suggests, this is a **ONE TIME** authenticator.  Computing an
    # authenticator for two messages using the same key probably gives an
    # attacker enough information to forge further authenticators for the same
    # key.
    #
    # This is a secret key authenticator, i.e. anyone who can verify signatures
    # can also create them.
    #
    # @see http://nacl.cr.yp.to/onetimeauth.html
    class Poly1305 < Auth
      extend Sodium

      sodium_type :onetimeauth
      sodium_primitive :poly1305
      sodium_constant :BYTES
      sodium_constant :KEYBYTES

      sodium_function :onetimeauth_poly1305,
                      :crypto_onetimeauth_poly1305,
                      %i[pointer pointer ulong_long pointer]

      sodium_function :onetimeauth_poly1305_verify,
                      :crypto_onetimeauth_poly1305_verify,
                      %i[pointer pointer ulong_long pointer]

      private

      def compute_authenticator(authenticator, message)
        self.class.onetimeauth_poly1305(authenticator, message, message.bytesize, key)
      end

      def verify_message(authenticator, message)
        self.class.onetimeauth_poly1305_verify(authenticator, message, message.bytesize, key)
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
rbnacl-7.1.2 lib/rbnacl/one_time_auths/poly1305.rb
rbnacl-7.1.1 lib/rbnacl/one_time_auths/poly1305.rb
rbnacl-7.1.0 lib/rbnacl/one_time_auths/poly1305.rb
rbnacl-7.0.0 lib/rbnacl/one_time_auths/poly1305.rb
rbnacl-6.0.1 lib/rbnacl/one_time_auths/poly1305.rb
rbnacl-6.0.0 lib/rbnacl/one_time_auths/poly1305.rb