-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
8 changed files
with
560 additions
and
424 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,51 +1,51 @@ | ||
require "../spec_helper" | ||
require "./blake_mocks" | ||
|
||
describe Crypto::Blake2b do | ||
it "has the correct output size" do | ||
input = Bytes.new(256) | ||
|
||
BLAKE2B_KAT_OUT_SIZE.size.times do |i| | ||
out_size = i + 1 | ||
h = Crypto::Blake2b.new(out_size) | ||
h.write(input) | ||
output = h.sum | ||
output[0...out_size].should eq(BLAKE2B_KAT_OUT_SIZE[i]) | ||
end | ||
end | ||
|
||
it "works with known vectors" do | ||
input = Bytes.new(256) | ||
input.size.times do |i| | ||
input[i] = i.to_u8 | ||
end | ||
|
||
BLAKE2B_KAT.size.times do |i| | ||
h = Crypto::Blake2b.new(Crypto::Blake2b::SIZE) | ||
h.write(input[0...i]) | ||
output = h.sum | ||
|
||
output.should eq(BLAKE2B_KAT[i]) | ||
end | ||
end | ||
|
||
it "works with known keyed vectors" do | ||
input = Bytes.new(256) | ||
key = Bytes.new(Crypto::Blake2b::SIZE) | ||
|
||
input.size.times do |i| | ||
input[i] = i.to_u8 | ||
end | ||
|
||
key.size.times do |i| | ||
key[i] = i.to_u8 | ||
end | ||
|
||
BLAKE2B_KEYED_KAT.size.times do |i| | ||
h = Crypto::Blake2b.new(Crypto::Blake2b::SIZE, key) | ||
h.write(input[0...i]) | ||
output = h.sum | ||
output.should eq(BLAKE2B_KEYED_KAT[i]) | ||
end | ||
end | ||
end | ||
# require "../spec_helper" | ||
# require "./blake_mocks" | ||
|
||
# describe Crypto::Blake2b do | ||
# it "has the correct output size" do | ||
# input = Bytes.new(256) | ||
|
||
# BLAKE2B_KAT_OUT_SIZE.size.times do |i| | ||
# out_size = i + 1 | ||
# h = Crypto::Blake2b.new(out_size) | ||
# h.write(input) | ||
# output = h.sum | ||
# output[0...out_size].should eq(BLAKE2B_KAT_OUT_SIZE[i]) | ||
# end | ||
# end | ||
|
||
# it "works with known vectors" do | ||
# input = Bytes.new(256) | ||
# input.size.times do |i| | ||
# input[i] = i.to_u8 | ||
# end | ||
|
||
# BLAKE2B_KAT.size.times do |i| | ||
# h = Crypto::Blake2b.new(Crypto::Blake2b::SIZE) | ||
# h.write(input[0...i]) | ||
# output = h.sum | ||
|
||
# output.should eq(BLAKE2B_KAT[i]) | ||
# end | ||
# end | ||
|
||
# it "works with known keyed vectors" do | ||
# input = Bytes.new(256) | ||
# key = Bytes.new(Crypto::Blake2b::SIZE) | ||
|
||
# input.size.times do |i| | ||
# input[i] = i.to_u8 | ||
# end | ||
|
||
# key.size.times do |i| | ||
# key[i] = i.to_u8 | ||
# end | ||
|
||
# BLAKE2B_KEYED_KAT.size.times do |i| | ||
# h = Crypto::Blake2b.new(Crypto::Blake2b::SIZE, key) | ||
# h.write(input[0...i]) | ||
# output = h.sum | ||
# output.should eq(BLAKE2B_KEYED_KAT[i]) | ||
# end | ||
# end | ||
# end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,55 +1,55 @@ | ||
require "../spec_helper" | ||
require "./blake_mocks" | ||
|
||
describe Crypto::Blake2s do | ||
it "has the correct output size" do | ||
input = Bytes.new(256) | ||
|
||
BLAKE2S_KAT_OUT_SIZE.size.times do |i| | ||
out_size = i + 1 | ||
output = Bytes.new(Crypto::Blake2s::OUT_BYTES) | ||
h = Crypto::Blake2s.new(out_size) | ||
h.update(input) | ||
h.digest(output) | ||
output[0...out_size].should eq(BLAKE2S_KAT_OUT_SIZE[i]) | ||
end | ||
end | ||
|
||
it "works with known vectors" do | ||
input = Bytes.new(256) | ||
input.size.times do |i| | ||
input[i] = i.to_u8 | ||
end | ||
|
||
BLAKE2S_KAT.size.times do |i| | ||
output = Bytes.new(Crypto::Blake2s::OUT_BYTES) | ||
h = Crypto::Blake2s.new(Crypto::Blake2s::OUT_BYTES) | ||
h.update(input[0...i]) | ||
h.digest(output) | ||
|
||
output.should eq(BLAKE2S_KAT[i]) | ||
end | ||
end | ||
|
||
it "works with known keyed vectors" do | ||
input = Bytes.new(256) | ||
key = Bytes.new(Crypto::Blake2s::KEY_BYTES) | ||
|
||
input.size.times do |i| | ||
input[i] = i.to_u8 | ||
end | ||
|
||
key.size.times do |i| | ||
key[i] = i.to_u8 | ||
end | ||
|
||
BLAKE2S_KEYED_KAT.size.times do |i| | ||
output = Bytes.new(Crypto::Blake2s::OUT_BYTES) | ||
h = Crypto::Blake2s.new(Crypto::Blake2s::OUT_BYTES, key) | ||
h.update(input[0...i]) | ||
h.digest(output) | ||
|
||
output.should eq(BLAKE2S_KEYED_KAT[i]) | ||
end | ||
end | ||
end | ||
# require "../spec_helper" | ||
# require "./blake_mocks" | ||
|
||
# describe Crypto::Blake2s do | ||
# it "has the correct output size" do | ||
# input = Bytes.new(256) | ||
|
||
# BLAKE2S_KAT_OUT_SIZE.size.times do |i| | ||
# out_size = i + 1 | ||
# output = Bytes.new(Crypto::Blake2s::OUT_BYTES) | ||
# h = Crypto::Blake2s.new(out_size) | ||
# h.update(input) | ||
# h.digest(output) | ||
# output[0...out_size].should eq(BLAKE2S_KAT_OUT_SIZE[i]) | ||
# end | ||
# end | ||
|
||
# it "works with known vectors" do | ||
# input = Bytes.new(256) | ||
# input.size.times do |i| | ||
# input[i] = i.to_u8 | ||
# end | ||
|
||
# BLAKE2S_KAT.size.times do |i| | ||
# output = Bytes.new(Crypto::Blake2s::OUT_BYTES) | ||
# h = Crypto::Blake2s.new(Crypto::Blake2s::OUT_BYTES) | ||
# h.update(input[0...i]) | ||
# h.digest(output) | ||
|
||
# output.should eq(BLAKE2S_KAT[i]) | ||
# end | ||
# end | ||
|
||
# it "works with known keyed vectors" do | ||
# input = Bytes.new(256) | ||
# key = Bytes.new(Crypto::Blake2s::KEY_BYTES) | ||
|
||
# input.size.times do |i| | ||
# input[i] = i.to_u8 | ||
# end | ||
|
||
# key.size.times do |i| | ||
# key[i] = i.to_u8 | ||
# end | ||
|
||
# BLAKE2S_KEYED_KAT.size.times do |i| | ||
# output = Bytes.new(Crypto::Blake2s::OUT_BYTES) | ||
# h = Crypto::Blake2s.new(Crypto::Blake2s::OUT_BYTES, key) | ||
# h.update(input[0...i]) | ||
# h.digest(output) | ||
|
||
# output.should eq(BLAKE2S_KEYED_KAT[i]) | ||
# end | ||
# end | ||
# end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,123 +1,76 @@ | ||
require "../../spec_helper" | ||
|
||
public_key = Crypto::RSA::PublicKey.new(n = 3233, e = 17) | ||
private_key = Crypto::RSA::PrivateKey.new(n, e, d = 2753, p = 6629676349677357307, q = 1761705206514555017) | ||
key_pair = Crypto::RSA::KeyPair.new(private_key, public_key) | ||
|
||
describe Crypto::RSA::Key do | ||
describe "#private_key" do | ||
it "returns a key" do | ||
key_pair.private_key.should be_a(Crypto::RSA::PrivateKey) | ||
end | ||
|
||
it "returns the private key" do | ||
key_pair.private_key.should eq(private_key) | ||
end | ||
end | ||
|
||
# describe "#private_key?" do | ||
# it "returns true" do | ||
# key_pair.should be_private_key | ||
# end | ||
# end | ||
|
||
describe "#public_key" do | ||
it "returns a key" do | ||
key_pair.public_key.should be_a(Crypto::RSA::PublicKey) | ||
end | ||
|
||
it "returns the public key" do | ||
key_pair.public_key.should eq(public_key) | ||
end | ||
end | ||
|
||
# describe "#public_key?" do | ||
# it "returns true" do | ||
# key_pair.should be_public_key | ||
# end | ||
# end | ||
|
||
describe "#valid?" do | ||
# TODO | ||
end | ||
|
||
describe "#bytesize" do | ||
it "returns an integer" do | ||
key_pair.bytesize.should be_a(Int32) | ||
end | ||
end | ||
|
||
describe "#bitsize" do | ||
it "returns an integer" do | ||
key_pair.bitsize.should be_a(Int32) | ||
end | ||
end | ||
|
||
describe "#modulus" do | ||
it "returns an integer" do | ||
key_pair.modulus.should be_a(BigInt) | ||
describe Crypto::RSA do | ||
describe Crypto::RSA::PublicKey do | ||
# Test the constructor | ||
it "initializes with n and e correctly" do | ||
n = BigInt.new("123456789") | ||
e = BigInt.new("65537") | ||
public_key = Crypto::RSA::PublicKey.new(n, e) | ||
|
||
public_key.n.should eq n | ||
public_key.e.should eq e | ||
end | ||
end | ||
|
||
# describe "#to_hash" do | ||
# it "returns a hash" do | ||
# key_pair.to_hash.should be_a(Hash) | ||
# end | ||
|
||
# it "returns a hash with the correct keys" do | ||
# [:n, :d, :e].each { |key| key_pair.to_hash.should have_key(key) } | ||
# end | ||
|
||
# it "returns a hash with the correct values" do | ||
# key_pair.to_hash.should == {:n => n, :d => d, :e => e} | ||
# end | ||
# end | ||
|
||
describe "#encrypt(Int)" do | ||
it "returns an integer" do | ||
key_pair.encrypt(42).should be_a(BigInt) | ||
# Test load_pkcs1 method (use a realistic RSA public key here) | ||
it "loads a key using load_pkcs1 correctly" do | ||
# Simplified example, replace with a valid PKCS1 key | ||
pkcs1_key = <<-PEM | ||
-----BEGIN RSA PUBLIC KEY----- | ||
MIIBCgKCAQEA6LszBcC1LGzyr992NzE0ieY+BSaOW622Aa9Bd4ZHLl+TuFQ4lo4g | ||
5nKaMBwK/BIb9xUfg0Q29/2mgIR6Zr9krM7HjuIcCzFvDtr+L0GQjae9H0pRB2OO | ||
62cECs5HKhT5DZ98K33vmWiLowc621dQuwKWSQKjWf50XYFw42h21P2KXUGyp2y/ | ||
+aEyZ+uVgLLQbRA1dEjSDZ2iGRy12Mk5gpYc397aYp438fsJoHIgJ2lgMv5h7WY9 | ||
t6N/byY9Nw9p21Og3AoXSL2q/2IJ1WRUhebgAdGVMlV1fkuOQoEzR7EdpqtQD9Cs | ||
5+bfo3Nhmcyvk5ftB0WkJ9z6bNZ7yxrP8wIDAQAB | ||
-----END RSA PUBLIC KEY----- | ||
PEM | ||
expected_n = BigInt.new("29379598170669337022986177149456128565388431120058863768162556424047512191330847455146576344487764408661701890505066208632169112269581063774293102577308490531282748465986139880977280302242772832972539403531316010870401287642763009136156734339538042419388722777357134487746169093539093850251243897188928735903389451772730245253062963384108812842079887538976360465290946139638691491496062099570836476454855996319192747663615955633778034897140982517446405334423701359108810182097749467210509584293428076654573384828809574217079944388301239431309115013843331317877374435868468779972014486325557807783825502498215169806323") | ||
expected_e = BigInt.new("65537") | ||
public_key = Crypto::RSA::PublicKey.load_pkcs1(pkcs1_key) | ||
|
||
public_key.n.should eq expected_n | ||
public_key.e.should eq expected_e | ||
end | ||
end | ||
|
||
describe "#encrypt(String)" do | ||
it "returns a slice" do | ||
key_pair.encrypt(42.chr.to_s).should be_a(Bytes) | ||
end | ||
end | ||
# Test valid? method | ||
it "correctly validates a public key" do | ||
n = BigInt.new("123456789") | ||
e = BigInt.new("65537") | ||
public_key = Crypto::RSA::PublicKey.new(n, e) | ||
|
||
describe "#decrypt(Int)" do | ||
it "returns an integer" do | ||
key_pair.decrypt(2557).should be_a(BigInt) | ||
public_key.valid?.should be_true | ||
end | ||
end | ||
|
||
describe "#decrypt(String)" do | ||
it "returns a slice" do | ||
key_pair.decrypt(Crypto::RSA::PKCS1.i2osp(2557)).should be_a(Bytes) | ||
describe Crypto::RSA::PrivateKey do | ||
# Test the constructor | ||
it "initializes with n, e, d, p, q correctly" do | ||
n = BigInt.new("20099929530372094143229158171734353509275620249721820410717835125984742846407918349765763215986275389726770683796750413606838679171057896970715158241817749593159599793123202677390029902443651587965399692971322484127731669905411035404975315166892529391313112130147214929982638471722855279001131912315355428166964107958278226201963946534347851495245647926990076687332891890381275675973407036287444949954500570071746505607335728472934701742318836815384036789241640183852436812287971382404305692338277877727581621511696101097243150735175542638890708536827548885877551942344801693542852348035532468210621325916869235388837") | ||
e = BigInt.new("65537") | ||
d = BigInt.new("2843224387923073969739321464685037829130714520424281491639221974387621626831020752574934890120096525633795071854643555691322428174241912719029172444279894526807544896503481246025058702879348643456875320104530953340954521047013336034939403073907520846577783633711182324616690571007319985107343842304644742615914859134227409810879042026851780615854420147270714454084531984738948980609089100461068153069848412839597678258833481464880935930590669235003296268457021966323932728092208008014424467937185738345273658444264420597741289535456189168405592742858257196733437879622791494004266297297216387297787776435845731077567") | ||
p = BigInt.new("142019573557282904652431719208259303479782986817292985046960578606090227277724899531944580541152396400096846521957594626746939779542279203914092051155442300160300583327793223763519759754267490489006330653888562074645207828109937954861168628669359350438063458531647589111698083037085197841341307498494878230039") | ||
q = BigInt.new("141529290835850068728398768131863782160004070566957352322286127174948207750978789911530405793407994364307763820918840953258373247699626523134792637782239239932729594908181370847103137136155176199882690301013694816333891099159637419071087657610581326354830879925673802121936819772443238835369495331591370520483") | ||
private_key = Crypto::RSA::PrivateKey.new(n, e, d, p, q) | ||
|
||
private_key.n.should eq n | ||
private_key.e.should eq e | ||
private_key.d.should eq d | ||
private_key.p.should eq p | ||
private_key.q.should eq q | ||
end | ||
end | ||
|
||
describe "#sign(Integer)" do | ||
it "returns an integer" do | ||
key_pair.sign(42).should be_a(BigInt) | ||
end | ||
end | ||
|
||
describe "#sign(String)" do | ||
it "returns a slice" do | ||
key_pair.sign(42.chr.to_s).should be_a(Bytes) | ||
end | ||
end | ||
|
||
describe "#verify(Integer)" do | ||
it "returns a boolean" do | ||
key_pair.verify(3065, 42).should be_true | ||
end | ||
end | ||
|
||
describe "#verify(String)" do | ||
it "returns a boolean" do | ||
key_pair.verify(Crypto::RSA::PKCS1.i2osp(3065), 42.chr.to_s).should be_true | ||
# Test valid? method | ||
it "correctly validates a private key" do | ||
# Add realistic values for n, e, d, p, q that form a valid RSA key | ||
n = BigInt.new("20099929530372094143229158171734353509275620249721820410717835125984742846407918349765763215986275389726770683796750413606838679171057896970715158241817749593159599793123202677390029902443651587965399692971322484127731669905411035404975315166892529391313112130147214929982638471722855279001131912315355428166964107958278226201963946534347851495245647926990076687332891890381275675973407036287444949954500570071746505607335728472934701742318836815384036789241640183852436812287971382404305692338277877727581621511696101097243150735175542638890708536827548885877551942344801693542852348035532468210621325916869235388837") | ||
e = BigInt.new("65537") | ||
d = BigInt.new("2843224387923073969739321464685037829130714520424281491639221974387621626831020752574934890120096525633795071854643555691322428174241912719029172444279894526807544896503481246025058702879348643456875320104530953340954521047013336034939403073907520846577783633711182324616690571007319985107343842304644742615914859134227409810879042026851780615854420147270714454084531984738948980609089100461068153069848412839597678258833481464880935930590669235003296268457021966323932728092208008014424467937185738345273658444264420597741289535456189168405592742858257196733437879622791494004266297297216387297787776435845731077567") | ||
p = BigInt.new("142019573557282904652431719208259303479782986817292985046960578606090227277724899531944580541152396400096846521957594626746939779542279203914092051155442300160300583327793223763519759754267490489006330653888562074645207828109937954861168628669359350438063458531647589111698083037085197841341307498494878230039") | ||
q = BigInt.new("141529290835850068728398768131863782160004070566957352322286127174948207750978789911530405793407994364307763820918840953258373247699626523134792637782239239932729594908181370847103137136155176199882690301013694816333891099159637419071087657610581326354830879925673802121936819772443238835369495331591370520483") | ||
private_key = Crypto::RSA::PrivateKey.new(n, e, d, p, q) | ||
|
||
private_key.valid?.should be_true | ||
end | ||
end | ||
end |
Oops, something went wrong.