|
5 | 5 |
|
6 | 6 | let(:private_key) { 'd62e76ab4a907d7634ada0d9709b4ed2bfc7c51c421127b7fc93c0141e461797' } |
7 | 7 | let(:public_key) do |
8 | | - '04a01f01fa942d2233a64aebe0b36c16ebdfd1c453ac5297591f20e2bfaba869e17e15f5f7367ee6f16121c64cac3ecdd517920a36f5145dc2a881ae9371873ac6' |
| 8 | + '04a01f01fa942d2233a64aebe0b36c16ebdfd1c453ac5297591f20e2bfaba869e17e15f5f7367ee6f1' \ |
| 9 | + '6121c64cac3ecdd517920a36f5145dc2a881ae9371873ac6' |
9 | 10 | end |
10 | 11 | let(:random_secret) { 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' } |
11 | 12 |
|
12 | 13 | describe '#initialize' do |
13 | 14 | context 'when no parameters are passed' do |
14 | | - it 'utilizes default options' do |
| 15 | + it 'utilizes default key_size' do |
15 | 16 | expect(crypto_suite.key_size).to be(256) |
| 17 | + end |
| 18 | + |
| 19 | + it 'utilizes default digest_algorithm' do |
16 | 20 | expect(crypto_suite.digest_algorithm).to eql('SHA256') |
| 21 | + end |
| 22 | + |
| 23 | + it 'utilizes default curve' do |
17 | 24 | expect(crypto_suite.curve).to eql('prime256v1') |
| 25 | + end |
| 26 | + |
| 27 | + it 'utilizes default cipher' do |
18 | 28 | expect(crypto_suite.cipher).to eql('aes-256-cbc') |
19 | 29 | end |
20 | 30 | end |
|
30 | 40 | ) |
31 | 41 | end |
32 | 42 |
|
33 | | - it 'utilizes options passed' do |
| 43 | + it 'utilizes key_size option passed' do |
34 | 44 | expect(crypto_suite.key_size).to be(384) |
| 45 | + end |
| 46 | + |
| 47 | + it 'utilizes digest_algorithm option passed' do |
35 | 48 | expect(crypto_suite.digest_algorithm).to eql('SHA224') |
| 49 | + end |
| 50 | + |
| 51 | + it 'utilizes curve option passed' do |
36 | 52 | expect(crypto_suite.curve).to eql('secp384r1') |
| 53 | + end |
| 54 | + |
| 55 | + it 'utilizes cipher option passed' do |
37 | 56 | expect(crypto_suite.cipher).to eql('aes-128-cbc') |
38 | 57 | end |
39 | 58 | end |
|
69 | 88 | end |
70 | 89 |
|
71 | 90 | describe '#generate_private_key' do |
72 | | - it 'generates a valid EC private_key' do |
| 91 | + it 'generates a private_key string' do |
73 | 92 | private_key = crypto_suite.generate_private_key |
74 | 93 | expect(private_key).to be_a(String) |
| 94 | + end |
75 | 95 |
|
76 | | - public_key = crypto_suite.restore_public_key private_key |
77 | | - |
78 | | - group = OpenSSL::PKey::EC::Group.new(crypto_suite.curve) |
79 | | - |
80 | | - private_key_bn = OpenSSL::BN.new(private_key, 16) |
81 | | - public_key_bn = OpenSSL::BN.new(public_key, 16) |
82 | | - public_key_point = OpenSSL::PKey::EC::Point.new(group, public_key_bn) |
83 | | - |
84 | | - asn1 = OpenSSL::ASN1::Sequence( |
85 | | - [ |
86 | | - OpenSSL::ASN1::Integer.new(1), |
87 | | - OpenSSL::ASN1::OctetString(private_key_bn.to_s(2)), |
88 | | - OpenSSL::ASN1::ObjectId(crypto_suite.curve, 0, :EXPLICIT), |
89 | | - OpenSSL::ASN1::BitString(public_key_point.to_octet_string(:uncompressed), 1, :EXPLICIT) |
90 | | - ] |
91 | | - ) |
92 | | - |
93 | | - pkey = OpenSSL::PKey::EC.new(asn1.to_der) |
94 | | - |
| 96 | + it 'generates a private_key' do |
| 97 | + private_key = crypto_suite.generate_private_key |
| 98 | + pkey = crypto_suite.pkey_from_private_key(private_key) |
95 | 99 | expect(pkey.private?).to be(true) |
| 100 | + end |
| 101 | + |
| 102 | + it 'matches itself' do |
| 103 | + private_key = crypto_suite.generate_private_key |
| 104 | + pkey = crypto_suite.pkey_from_private_key(private_key) |
96 | 105 | expect(pkey.private_key.to_s(16).downcase).to eql(private_key) |
97 | 106 | end |
98 | 107 | end |
99 | 108 |
|
100 | 109 | describe '#generate_csr' do |
101 | | - it 'generates a OpenSSL::X509::Request with the proper key' do |
102 | | - req = crypto_suite.generate_csr(private_key) |
| 110 | + subject(:response_value) { crypto_suite.generate_csr(private_key) } |
| 111 | + |
| 112 | + it 'generates a OpenSSL::X509::Request' do |
| 113 | + expect(response_value).to be_a(OpenSSL::X509::Request) |
| 114 | + end |
103 | 115 |
|
104 | | - expect(req).to be_a(OpenSSL::X509::Request) |
105 | | - expect(req.public_key.private_key.to_s(16).downcase).to eql(private_key) |
| 116 | + it 'returns the proper value' do |
| 117 | + expect(response_value.public_key.private_key.to_s(16).downcase).to eql(private_key) |
106 | 118 | end |
107 | 119 | end |
108 | 120 |
|
|
122 | 134 |
|
123 | 135 | describe '#hexdigest' do |
124 | 136 | it 'generates a hexdigest' do |
125 | | - expect(crypto_suite.hexdigest('hello world')).to eql('b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9') |
| 137 | + expected_digest = 'b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9' |
| 138 | + expect(crypto_suite.hexdigest('hello world')).to eql(expected_digest) |
126 | 139 | end |
127 | 140 | end |
128 | 141 |
|
|
187 | 200 | end |
188 | 201 |
|
189 | 202 | describe '#pkey_from_private_key' do |
| 203 | + subject(:return_value) { crypto_suite.pkey_from_private_key(private_key) } |
| 204 | + |
190 | 205 | it 'converts a private key into a OpenSSL::PKey::EC' do |
191 | | - pkey = crypto_suite.pkey_from_private_key(private_key) |
192 | | - expect(pkey).to be_a(OpenSSL::PKey::EC) |
193 | | - expect(pkey.private_key).to eql(OpenSSL::BN.new(private_key, 16)) |
| 206 | + expect(return_value).to be_a(OpenSSL::PKey::EC) |
| 207 | + end |
| 208 | + |
| 209 | + it 'private_key is expected to equal the original private key' do |
| 210 | + expect(return_value.private_key).to eql(OpenSSL::BN.new(private_key, 16)) |
194 | 211 | end |
195 | 212 | end |
196 | 213 |
|
|
222 | 239 | '-----END CERTIFICATE-----' |
223 | 240 | end |
224 | 241 | let(:random_certificate_public_key) do |
225 | | - '04ca2509600ed223fbb645ff28b8d0f4229e3a81d8ca70607c571dd591a8c5c79f9886d68c7c76f5e588df19616e34bab2c4b186bc352ae87946b0127d40870fb4' |
| 242 | + '04ca2509600ed223fbb645ff28b8d0f4229e3a81d8ca70607c571dd591a8c5c79f9886d' \ |
| 243 | + '68c7c76f5e588df19616e34bab2c4b186bc352ae87946b0127d40870fb4' |
226 | 244 | end |
227 | 245 |
|
228 | 246 | it 'returns public_key from x509 certificate' do |
|
0 commit comments