Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add more specs for OpenSSL::Digest #1054

Merged
merged 9 commits into from
Oct 29, 2023
4 changes: 4 additions & 0 deletions .rubocop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@ Lint/AssignmentInCondition:
Lint/BooleanSymbol:
Enabled: false

Lint/DeprecatedOpenSSLConstant:
Exclude:
- library/openssl/digest/**/*.rb

Lint/InterpolationCheck:
Enabled: false

Expand Down
6 changes: 6 additions & 0 deletions library/openssl/digest/append_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
require_relative '../../../spec_helper'
require_relative 'shared/update'

describe "OpenSSL::Digest#<<" do
it_behaves_like :openssl_digest_update, :<<
end
44 changes: 44 additions & 0 deletions library/openssl/digest/block_length_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
require_relative '../../../spec_helper'
require_relative '../../../library/digest/sha1/shared/constants'
require_relative '../../../library/digest/sha256/shared/constants'
require_relative '../../../library/digest/sha384/shared/constants'
require_relative '../../../library/digest/sha512/shared/constants'
require 'openssl'

describe "OpenSSL::Digest#block_length" do
context "when the digest object is created via a name argument" do
it "returns a SHA1 block length" do
OpenSSL::Digest.new('sha1').block_length.should == SHA1Constants::BlockLength
end

it "returns a SHA256 block length" do
OpenSSL::Digest.new('sha256').block_length.should == SHA256Constants::BlockLength
end

it "returns a SHA384 block length" do
OpenSSL::Digest.new('sha384').block_length.should == SHA384Constants::BlockLength
end

it "returns a SHA512 block length" do
OpenSSL::Digest.new('sha512').block_length.should == SHA512Constants::BlockLength
end
end

context "when the digest object is created via a subclass" do
it "returns a SHA1 block length" do
OpenSSL::Digest::SHA1.new.block_length.should == SHA1Constants::BlockLength
end

it "returns a SHA256 block length" do
OpenSSL::Digest::SHA256.new.block_length.should == SHA256Constants::BlockLength
end

it "returns a SHA384 block length" do
OpenSSL::Digest::SHA384.new.block_length.should == SHA384Constants::BlockLength
end

it "returns a SHA512 block length" do
OpenSSL::Digest::SHA512.new.block_length.should == SHA512Constants::BlockLength
end
end
end
44 changes: 44 additions & 0 deletions library/openssl/digest/digest_length_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
require_relative '../../../spec_helper'
require_relative '../../../library/digest/sha1/shared/constants'
require_relative '../../../library/digest/sha256/shared/constants'
require_relative '../../../library/digest/sha384/shared/constants'
require_relative '../../../library/digest/sha512/shared/constants'
require 'openssl'

describe "OpenSSL::Digest#digest_length" do
context "when the digest object is created via a name argument" do
it "returns a SHA1 digest length" do
OpenSSL::Digest.new('sha1').digest_length.should == SHA1Constants::DigestLength
end

it "returns a SHA256 digest length" do
OpenSSL::Digest.new('sha256').digest_length.should == SHA256Constants::DigestLength
end

it "returns a SHA384 digest length" do
OpenSSL::Digest.new('sha384').digest_length.should == SHA384Constants::DigestLength
end

it "returns a SHA512 digest length" do
OpenSSL::Digest.new('sha512').digest_length.should == SHA512Constants::DigestLength
end
end

context "when the digest object is created via a subclass" do
it "returns a SHA1 digest length" do
OpenSSL::Digest::SHA1.new.digest_length.should == SHA1Constants::DigestLength
end

it "returns a SHA256 digest length" do
OpenSSL::Digest::SHA256.new.digest_length.should == SHA256Constants::DigestLength
end

it "returns a SHA384 digest length" do
OpenSSL::Digest::SHA384.new.digest_length.should == SHA384Constants::DigestLength
end

it "returns a SHA512 digest length" do
OpenSSL::Digest::SHA512.new.digest_length.should == SHA512Constants::DigestLength
end
end
end
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
require_relative '../../spec_helper'
require_relative '../../library/digest/sha1/shared/constants'
require_relative '../../library/digest/sha256/shared/constants'
require_relative '../../library/digest/sha384/shared/constants'
require_relative '../../library/digest/sha512/shared/constants'
require_relative '../../../spec_helper'
require_relative '../../../library/digest/sha1/shared/constants'
require_relative '../../../library/digest/sha256/shared/constants'
require_relative '../../../library/digest/sha384/shared/constants'
require_relative '../../../library/digest/sha512/shared/constants'
require 'openssl'

describe "OpenSSL::Digest" do

describe "OpenSSL::Digest class methods" do
describe ".digest" do
it "returns a SHA1 digest" do
OpenSSL::Digest.digest('sha1', SHA1Constants::Contents).should == SHA1Constants::Digest
Expand Down
141 changes: 141 additions & 0 deletions library/openssl/digest/initialize_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
require_relative '../../../spec_helper'
require_relative '../../../library/digest/sha1/shared/constants'
require_relative '../../../library/digest/sha256/shared/constants'
require_relative '../../../library/digest/sha384/shared/constants'
require_relative '../../../library/digest/sha512/shared/constants'
require 'openssl'

describe "OpenSSL::Digest#initialize" do
describe "can be called with a digest name" do
it "returns a SHA1 object" do
OpenSSL::Digest.new("sha1").name.should == "SHA1"
end

it "returns a SHA256 object" do
OpenSSL::Digest.new("sha256").name.should == "SHA256"
end

it "returns a SHA384 object" do
OpenSSL::Digest.new("sha384").name.should == "SHA384"
end

it "returns a SHA512 object" do
OpenSSL::Digest.new("sha512").name.should == "SHA512"
end

it "throws an error when called with an unknown digest" do
-> { OpenSSL::Digest.new("wd40") }.should raise_error(RuntimeError, /Unsupported digest algorithm \(wd40\)/)
end

it "cannot be called with a symbol" do
-> { OpenSSL::Digest.new(:SHA1) }.should raise_error(TypeError, /wrong argument type Symbol/)
end

it "does not call #to_str on the argument" do
name = mock("digest name")
name.should_not_receive(:to_str)
-> { OpenSSL::Digest.new(name) }.should raise_error(TypeError, /wrong argument type/)
end
end

describe "can be called with a digest object" do
it "returns a SHA1 object" do
OpenSSL::Digest.new(OpenSSL::Digest::SHA1.new).name.should == "SHA1"
end

it "returns a SHA256 object" do
OpenSSL::Digest.new(OpenSSL::Digest::SHA256.new).name.should == "SHA256"
end

it "returns a SHA384 object" do
OpenSSL::Digest.new(OpenSSL::Digest::SHA384.new).name.should == "SHA384"
end

it "returns a SHA512 object" do
OpenSSL::Digest.new(OpenSSL::Digest::SHA512.new).name.should == "SHA512"
end

it "ignores the state of the digest object" do
sha1 = OpenSSL::Digest.new('sha1', SHA1Constants::Contents)
OpenSSL::Digest.new(sha1).digest.should == SHA1Constants::BlankDigest
end
end

it "cannot be called with a digest class" do
-> { OpenSSL::Digest.new(OpenSSL::Digest::SHA1) }.should raise_error(TypeError, /wrong argument type Class/)
end

context "when called without an initial String argument" do
it "returns a SHA1 digest" do
OpenSSL::Digest.new("sha1").digest.should == SHA1Constants::BlankDigest
end

it "returns a SHA256 digest" do
OpenSSL::Digest.new("sha256").digest.should == SHA256Constants::BlankDigest
end

it "returns a SHA384 digest" do
OpenSSL::Digest.new("sha384").digest.should == SHA384Constants::BlankDigest
end

it "returns a SHA512 digest" do
OpenSSL::Digest.new("sha512").digest.should == SHA512Constants::BlankDigest
end
end

context "when called with an initial String argument" do
it "returns a SHA1 digest of that argument" do
OpenSSL::Digest.new("sha1", SHA1Constants::Contents).digest.should == SHA1Constants::Digest
end

it "returns a SHA256 digest of that argument" do
OpenSSL::Digest.new("sha256", SHA256Constants::Contents).digest.should == SHA256Constants::Digest
end

it "returns a SHA384 digest of that argument" do
OpenSSL::Digest.new("sha384", SHA384Constants::Contents).digest.should == SHA384Constants::Digest
end

it "returns a SHA512 digest of that argument" do
OpenSSL::Digest.new("sha512", SHA512Constants::Contents).digest.should == SHA512Constants::Digest
end
end

context "can be called on subclasses" do
describe "can be called without an initial String argument on subclasses" do
it "returns a SHA1 digest" do
OpenSSL::Digest::SHA1.new.digest.should == SHA1Constants::BlankDigest
end

it "returns a SHA256 digest" do
OpenSSL::Digest::SHA256.new.digest.should == SHA256Constants::BlankDigest
end

it "returns a SHA384 digest" do
OpenSSL::Digest::SHA384.new.digest.should == SHA384Constants::BlankDigest
end

it "returns a SHA512 digest" do
OpenSSL::Digest::SHA512.new.digest.should == SHA512Constants::BlankDigest
end
end

describe "can be called with an initial String argument on subclasses" do
it "returns a SHA1 digest" do
OpenSSL::Digest::SHA1.new(SHA1Constants::Contents).digest.should == SHA1Constants::Digest
end

it "returns a SHA256 digest" do
OpenSSL::Digest::SHA256.new(SHA256Constants::Contents).digest.should == SHA256Constants::Digest
end

it "returns a SHA384 digest" do
OpenSSL::Digest::SHA384.new(SHA384Constants::Contents).digest.should == SHA384Constants::Digest
end

it "returns a SHA512 digest" do
OpenSSL::Digest::SHA512.new(SHA512Constants::Contents).digest.should == SHA512Constants::Digest
end
end
end
end
16 changes: 16 additions & 0 deletions library/openssl/digest/name_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
require_relative '../../../spec_helper'
require 'openssl'

describe "OpenSSL::Digest#name" do
it "returns the name of digest" do
OpenSSL::Digest.new('SHA1').name.should == 'SHA1'
end

it "converts the name to the internal representation of OpenSSL" do
OpenSSL::Digest.new('sha1').name.should == 'SHA1'
end

it "works on subclasses too" do
OpenSSL::Digest::SHA1.new.name.should == 'SHA1'
end
end
36 changes: 36 additions & 0 deletions library/openssl/digest/reset_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
require_relative '../../../spec_helper'
require_relative '../../../library/digest/sha1/shared/constants'
require_relative '../../../library/digest/sha256/shared/constants'
require_relative '../../../library/digest/sha384/shared/constants'
require_relative '../../../library/digest/sha512/shared/constants'
require 'openssl'

describe "OpenSSL::Digest#reset" do
it "works for a SHA1 digest" do
digest = OpenSSL::Digest.new('sha1', SHA1Constants::Contents)
digest.reset
digest.update(SHA1Constants::Contents)
digest.digest.should == SHA1Constants::Digest
end

it "works for a SHA256 digest" do
digest = OpenSSL::Digest.new('sha256', SHA256Constants::Contents)
digest.reset
digest.update(SHA256Constants::Contents)
digest.digest.should == SHA256Constants::Digest
end

it "works for a SHA384 digest" do
digest = OpenSSL::Digest.new('sha384', SHA384Constants::Contents)
digest.reset
digest.update(SHA384Constants::Contents)
digest.digest.should == SHA384Constants::Digest
end

it "works for a SHA512 digest" do
digest = OpenSSL::Digest.new('sha512', SHA512Constants::Contents)
digest.reset
digest.update(SHA512Constants::Contents)
digest.digest.should == SHA512Constants::Digest
end
end
Loading