Ruby implementation of the Cipher-based Message Authentication Code (CMAC)
Ruby
Switch branches/tags
Latest commit 91e9aa4 Nov 13, 2016 @jtdowney Add code of conduct
Permalink
Failed to load latest commit information.
lib
spec
.gitignore
.rspec
.ruby-version
.travis.yml
CODE_OF_CONDUCT.md
Gemfile
LICENSE
README.md
Rakefile
cmac.gemspec

README.md

CMAC Build Status

This gem is ruby implementation of the Cipher-based Message Authentication Code (CMAC) as defined in RFC4493, RFC4494, and RFC4615. Message authentication codes provide integrity protection of data given that two parties share a secret key.

key = OpenSSL::Random.random_bytes(16)
message = 'attack at dawn'
cmac = CMAC.new(key)
cmac.sign(message)
 => "\xF6\xB8\xC1L]s\xBF\x1A\x87<\xA4\xA1Z\xE0f\xAA"

Once you've obtained the signature (also called a tag) of a message you can use CMAC to verify it as well.

tag = "\xF6\xB8\xC1L]s\xBF\x1A\x87<\xA4\xA1Z\xE0f\xAA"
cmac.valid_message?(tag, message)
 => true
cmac.valid_message?(tag, 'attack at dusk')
 => false

CMAC can also be used with a variable length input key as described in RFC4615.

key = 'setec astronomy'
message = 'attack at dawn'
cmac = CMAC.new(key)
cmac.sign(message)
 => "\\\x11\x90\xE6\x91\xB2\xC4\x82`\x90\xA6\xEC:\x0E\x1C\xF3"