Skip to content

Commit

Permalink
Merge pull request #1107 from herwinw/openssl_compare
Browse files Browse the repository at this point in the history
Add specs for compare methods of OpenSSL
  • Loading branch information
andrykonchin authored Nov 12, 2023
2 parents fe4fe13 + 1058a18 commit 745cac7
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 0 deletions.
42 changes: 42 additions & 0 deletions library/openssl/fixed_length_secure_compare_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
require_relative '../../spec_helper'
require 'openssl'

describe "OpenSSL.fixed_length_secure_compare" do
it "returns true for two strings with the same content" do
input1 = "the quick brown fox jumps over the lazy dog"
input2 = "the quick brown fox jumps over the lazy dog"
OpenSSL.fixed_length_secure_compare(input1, input2).should be_true
end

it "returns false for two strings of equal size with different content" do
input1 = "the quick brown fox jumps over the lazy dog"
input2 = "the lazy dog jumps over the quick brown fox"
OpenSSL.fixed_length_secure_compare(input1, input2).should be_false
end

it "converts both arguments to strings using #to_str" do
input1 = mock("input1")
input1.should_receive(:to_str).and_return("the quick brown fox jumps over the lazy dog")
input2 = mock("input2")
input2.should_receive(:to_str).and_return("the quick brown fox jumps over the lazy dog")
OpenSSL.fixed_length_secure_compare(input1, input2).should be_true
end

it "does not accept arguments that are not string and cannot be coerced into strings" do
-> {
OpenSSL.fixed_length_secure_compare("input1", :input2)
}.should raise_error(TypeError, 'no implicit conversion of Symbol into String')

-> {
OpenSSL.fixed_length_secure_compare(Object.new, "input2")
}.should raise_error(TypeError, 'no implicit conversion of Object into String')
end

it "raises an ArgumentError for two strings of different size" do
input1 = "the quick brown fox jumps over the lazy dog"
input2 = "the quick brown fox"
-> {
OpenSSL.fixed_length_secure_compare(input1, input2)
}.should raise_error(ArgumentError, 'inputs must be of equal length')
end
end
38 changes: 38 additions & 0 deletions library/openssl/secure_compare_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
require_relative '../../spec_helper'
require 'openssl'

describe "OpenSSL.secure_compare" do
it "returns true for two strings with the same content" do
input1 = "the quick brown fox jumps over the lazy dog"
input2 = "the quick brown fox jumps over the lazy dog"
OpenSSL.secure_compare(input1, input2).should be_true
end

it "returns false for two strings with different content" do
input1 = "the quick brown fox jumps over the lazy dog"
input2 = "the lazy dog jumps over the quick brown fox"
OpenSSL.secure_compare(input1, input2).should be_false
end

it "converts both arguments to strings using #to_str, but adds equality check for the original objects" do
input1 = mock("input1")
input1.should_receive(:to_str).and_return("the quick brown fox jumps over the lazy dog")
input2 = mock("input2")
input2.should_receive(:to_str).and_return("the quick brown fox jumps over the lazy dog")
OpenSSL.secure_compare(input1, input2).should be_false

input = mock("input")
input.should_receive(:to_str).twice.and_return("the quick brown fox jumps over the lazy dog")
OpenSSL.secure_compare(input, input).should be_true
end

it "does not accept arguments that are not string and cannot be coerced into strings" do
-> {
OpenSSL.secure_compare("input1", :input2)
}.should raise_error(TypeError, 'no implicit conversion of Symbol into String')

-> {
OpenSSL.secure_compare(Object.new, "input2")
}.should raise_error(TypeError, 'no implicit conversion of Object into String')
end
end

0 comments on commit 745cac7

Please sign in to comment.