crypto-lite 0.3.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8183e61c6a0d2fbdbf73f3615936a89690efb9114ad884e27b2ffdfd158a5b21
4
- data.tar.gz: f6305e0256269da07ae597271a1ea452f9a1b5b61877891b74b2430075fea88d
3
+ metadata.gz: fa60a6933e949f9b2cdf2ca665775533edd9ebbf80682aa99095bf39016f44ad
4
+ data.tar.gz: a02c578732edb686e84bfcb62bdcfc3e5d18583af22566c33819faff7ff071cc
5
5
  SHA512:
6
- metadata.gz: 9f975461c066bdfa6c59be9f8a2847b221a8ef991dbdda21b86d877f26ee7bb21b4dfa2412cfd5df2481608e21eb5dd56df9d8a1efa04c89e17ed6070befcd16
7
- data.tar.gz: 96e57d11f5fa912f1f43cfab8785439b4ae0f9021f1a045c71ab12f0abcd711c4df1d034367659eb333e205bbc2405d65d433d7914f1443c104c98ac384c473e
6
+ metadata.gz: 25f749066f58f0de25d62d4b73ba9a6169ba66d2f5e3541ccbd56954f74261e42e754ea270bc91c6ad6d6a9194e20b2beeeb461a2439a981ef576443c02d9af8
7
+ data.tar.gz: badbeaeb2d2e5e54fb7af1127933615c1e5a8a9f7595bc9f2451c603bcc70cd63856f18bc9a0a7013a8f9b82ed441ecc168383b3187338a1c815eac166a8b523
data/README.md CHANGED
@@ -15,23 +15,36 @@
15
15
  **SHA256 - Secure Hash Algorithm (SHA) 256-Bit (32 Bytes)**
16
16
 
17
17
 
18
+ Note: By default all hash functions return binary strings.
19
+ Use `String#hexdigest` (or `String#bin_to_hex`
20
+ or `String#btoh`)
21
+ to convert binary strings to hex(adecimal)
22
+ strings (via `Bytes.bin_to_hex`).
23
+
24
+
25
+
26
+
18
27
  ``` ruby
19
28
  require 'crypto' ## or use require 'crypto-lite'
20
29
 
21
30
  ## try abc
22
- sha256( "abc" ) #=> "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
23
- sha256( "abc".b ) #=> "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
24
- sha256( "\x61\x62\x63" ) #=> "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
25
- sha256( 0x616263 ) #=> "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
31
+ sha256( "abc" ).hexdigest #=> "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
32
+ sha256( "abc".b ).hexdigest #=> "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
33
+ sha256( "\x61\x62\x63" ).hexdigest #=> "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
34
+
35
+ sha256( hex: '616263' ).hexdigest #=> "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
36
+ sha256( hex: '0x616263' ).hexdigest #=> "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
37
+ sha256( hex: '0X616263' ).hexdigest #=> "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
38
+ ```
26
39
 
27
- sha256( hex: '616263' ) #=> "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
28
- sha256( hex: '0x616263' ) #=> "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
29
- sha256( hex: '0X616263' ) #=> "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
40
+ <!--
41
+ sha256( 0x616263 ) #=> "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
30
42
 
31
43
  # "auto-magic" hex string to binary string conversion heuristic
32
44
  sha256( '0x616263' ) #=> "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
33
45
  sha256( '0X616263' ) #=> "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
34
- ```
46
+
47
+ -->
35
48
 
36
49
 
37
50
  Bonus Back Stage Tip: How does SHA256 work?
@@ -45,27 +58,32 @@ Onwards with more sha256 examples:
45
58
 
46
59
  ``` ruby
47
60
  ## try a
48
- sha256( "a" ) #=> "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb"
49
- sha256( "\x61" ) #=> "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb"
61
+ sha256( "a" ).hexdigest #=> "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb"
62
+ sha256( "\x61" ).hexdigest #=> "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb"
63
+
64
+ sha256( hex: '61' ).hexdigest #=> "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb"
65
+ sha256( hex: '0x61' ).hexdigest #=> "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb"
66
+
67
+
68
+ ## try some more
69
+ sha256( "Hello, Cryptos!" ).hexdigest #=> "33eedea60b0662c66c289ceba71863a864cf84b00e10002ca1069bf58f9362d5"
70
+ ```
71
+
72
+ <!--
50
73
  sha256( 0b01100001 ) #=> "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb"
51
74
  sha256( 0x61 ) #=> "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb"
52
75
 
53
- sha256( hex: '61' ) #=> "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb"
54
- sha256( hex: '0x61' ) #=> "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb"
55
-
56
76
  # "auto-magic" hex string to binary string conversion heuristic
57
77
  sha256( '0x61' ) #=> "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb"
58
78
 
79
+ -->
59
80
 
60
- ## try some more
61
- sha256( "Hello, Cryptos!" ) #=> "33eedea60b0662c66c289ceba71863a864cf84b00e10002ca1069bf58f9362d5"
62
- ```
63
81
 
64
82
 
65
83
  **SHA3-256 - Secure Hashing Algorthim (SHA) 3, 256-Bit (32 Bytes)**
66
84
 
67
85
  ``` ruby
68
- sha3_256( "Hello, Cryptos!" ) #=> "7dddf4bc9b86352b67e8823e5010ddbd2a90a854469e2517992ca7ca89e5bd58"
86
+ sha3_256( "Hello, Cryptos!" ).hexdigest #=> "7dddf4bc9b86352b67e8823e5010ddbd2a90a854469e2517992ca7ca89e5bd58"
69
87
  ```
70
88
 
71
89
  Note: Yes, SHA256 vs SHA3-256 / SHA-2 vs SHA-3 the hashing functions are
@@ -79,7 +97,7 @@ The sha3_256 is part of the (newer) Secure Hash Algorithm (SHA) 3 family / stand
79
97
  **Keccak 256-Bit**
80
98
 
81
99
  ``` ruby
82
- keccak256( "Hello, Cryptos!" ) #=> "2cf14baa817e931f5cc2dcb63c889619d6b7ae0794fc2223ebadf8e672c776f5"
100
+ keccak256( "Hello, Cryptos!" ).hexdigest #=> "2cf14baa817e931f5cc2dcb63c889619d6b7ae0794fc2223ebadf8e672c776f5"
83
101
  ```
84
102
 
85
103
 
@@ -101,13 +119,13 @@ original or official? - check your hash:
101
119
  For keccak 256-bit:
102
120
 
103
121
  ``` ruby
104
- keccak256( '' ) #=> "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"
122
+ keccak256( '' ).hexdigest #=> "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"
105
123
  ```
106
124
 
107
125
  For sha3 256-bit:
108
126
 
109
127
  ``` ruby
110
- sha3_256( '' ) #=> "a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a"
128
+ sha3_256( '' ).hexdigest #=> "a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a"
111
129
  ```
112
130
 
113
131
 
@@ -118,9 +136,9 @@ sha3_256( '' ) #=> "a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80
118
136
 
119
137
 
120
138
  ``` ruby
121
- rmd160( "Hello, Cryptos!" ) #=>"4d65f7b740bbade4097e1348e15d2a7d52ac5f53"
139
+ rmd160( "Hello, Cryptos!" ).hexdigest #=>"4d65f7b740bbade4097e1348e15d2a7d52ac5f53"
122
140
  # or use the alias / alternate name
123
- ripemd160( "Hello, Cryptos!" ) #=>"4d65f7b740bbade4097e1348e15d2a7d52ac5f53"
141
+ ripemd160( "Hello, Cryptos!" ).hexdigest #=>"4d65f7b740bbade4097e1348e15d2a7d52ac5f53"
124
142
  ```
125
143
 
126
144
 
@@ -162,14 +180,16 @@ to the hash function and that will "automagically"
162
180
  handle the hex-to-bin conversion for you. Example:
163
181
 
164
182
  ``` ruby
165
- sha256( hex: '61' ) #=> "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb"
166
- sha256( hex: '0x61' ) #=> "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb"
183
+ sha256( hex: '61' ).hexdigest #=> "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb"
184
+ sha256( hex: '0x61' ).hexdigest #=> "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb"
167
185
 
168
- sha256( hex: '616263' ) #=> "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
169
- sha256( hex: '0x616263' ) #=> "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
170
- sha256( hex: '0X616263' ) #=> "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
186
+ sha256( hex: '616263' ).hexdigest #=> "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
187
+ sha256( hex: '0x616263' ).hexdigest #=> "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
188
+ sha256( hex: '0X616263' ).hexdigest #=> "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
171
189
  ```
172
190
 
191
+
192
+ <!-- >
173
193
  What about the built-in "auto-magic" hex-to-bin conversion / heuristic?
174
194
 
175
195
  Yes, if your passed in string starts with the
@@ -194,6 +214,9 @@ hash256( '6fe6b145a3908a4d6616b13c1109717add8672c900' )
194
214
 
195
215
  # and so on
196
216
  ```
217
+ -->
218
+
219
+
197
220
 
198
221
 
199
222
  #### Hash Function Helpers
@@ -204,10 +227,10 @@ All-in-one "best-of-both-worlds" helper - first hash with sha256 and than hash w
204
227
 
205
228
 
206
229
  ``` ruby
207
- hash160( '02b9d1cc0b793b03b9f64d022e9c67d5f32670b03f636abf0b3147b34123d13990' )
230
+ hash160( '02b9d1cc0b793b03b9f64d022e9c67d5f32670b03f636abf0b3147b34123d13990' ).hexdigest
208
231
  #=> "e6b145a3908a4d6616b13c1109717add8672c900"
209
232
 
210
- hash160( '02b4632d08485ff1df2db55b9dafd23347d1c47a457072a1e87be26896549a8737' )
233
+ hash160( '02b4632d08485ff1df2db55b9dafd23347d1c47a457072a1e87be26896549a8737' ).hexdigest
211
234
  #=> "93ce48570b55c42c2af816aeaba06cfee1224fae"
212
235
  ```
213
236
 
@@ -222,7 +245,7 @@ All-in-one double sha256 hash helper, that is, first hash with sha256 and than h
222
245
 
223
246
 
224
247
  ``` ruby
225
- hash256( '6fe6b145a3908a4d6616b13c1109717add8672c900' )
248
+ hash256( '6fe6b145a3908a4d6616b13c1109717add8672c900' ).hexdigest
226
249
  #=> "02335f08b8fe4ddad263a50b7a33c5d38ea1cbd8fd2056a1320a3ddece541711"
227
250
  ```
228
251
 
@@ -233,29 +256,34 @@ hash256( '6fe6b145a3908a4d6616b13c1109717add8672c900' )
233
256
  Base58 encoding / decoding with leading zero bytes (in hex or binary strings) getting encoded from `00` to `1` and back:
234
257
 
235
258
  ``` ruby
236
- base58( "516b6fcd0f" ) #=> "ABnLTmg"
237
- base58( "00000000000000000000123456789abcdef0" ) #=> "111111111143c9JGph3DZ"
259
+ base58( hex: "516b6fcd0f" ) #=> "ABnLTmg"
260
+ base58( hex: "00000000000000000000123456789abcdef0" ) #=> "111111111143c9JGph3DZ"
238
261
  # or with optional 0x or 0X prefix
239
- base58( "0x516b6fcd0f" ) #=> "ABnLTmg"
240
- base58( "0x00000000000000000000123456789abcdef0" ) #=> "111111111143c9JGph3DZ"
262
+ base58( hex: "0x516b6fcd0f" ) #=> "ABnLTmg"
263
+ base58( hex: "0x00000000000000000000123456789abcdef0" ) #=> "111111111143c9JGph3DZ"
241
264
 
242
- unbase58( "ABnLTmg" ) #=> "516b6fcd0f"
265
+ unbase58( "ABnLTmg" ) #=> "516b6fcd0f"
243
266
  unbase58( "111111111143c9JGph3DZ" ) #=> "00000000000000000000123456789abcdef0"
244
267
  ```
245
268
 
269
+ <!-- todo/fix: check if unbase58 needs #bin_to_hex ???
270
+ -->
271
+
246
272
 
247
273
  **BASE58CHECK - BASE58(X || SHA256(SHA256(X))[:4])**
248
274
 
249
275
  Base58 encoding with an extra 4-byte secure hash checksum.
250
276
 
251
277
  ``` ruby
252
- base58check( "516b6fcd0f" ) #=> "237LSrY9NUUas"
253
- base58check( "00f54a5851e9372b87810a8e60cdd2e7cfd80b6e31" ) #=> "1PMycacnJaSqwwJqjawXBErnLsZ7RkXUAs"
278
+ base58check( hex: "516b6fcd0f" ) #=> "237LSrY9NUUas"
279
+ base58check( hex: "00f54a5851e9372b87810a8e60cdd2e7cfd80b6e31" ) #=> "1PMycacnJaSqwwJqjawXBErnLsZ7RkXUAs"
254
280
 
255
281
  unbase58check( "237LSrY9NUUas" ) #=> "516b6fcd0f"
256
282
  unbase58check( "1PMycacnJaSqwwJqjawXBErnLsZ7RkXUAs" ) #=> "00f54a5851e9372b87810a8e60cdd2e7cfd80b6e31"
257
283
  ```
258
284
 
285
+ <!-- todo/fix: check if unbase58check needs #bin_to_hex ???
286
+ -->
259
287
 
260
288
 
261
289
  ### Public Key Signature Algorithms
@@ -313,7 +341,7 @@ Sign a transaction with an (elliptic curve) private key:
313
341
  ``` ruby
314
342
  # Step 1 - Calculate the Transaction (tx) Hash
315
343
  tx = 'from: Alice to: Bob cryptos: 43_000_000_000'
316
- txhash = sha256( tx )
344
+ txhash = sha256( tx ).hexdigest
317
345
 
318
346
  # Step 2 - Get the Signer's Private key
319
347
  private_key = EC::PrivateKey.new( 1234 ) # This private key is just an example. It should be much more secure!
@@ -340,7 +368,7 @@ Verify a signed transaction with an (elliptic curve) public key:
340
368
  ``` ruby
341
369
  # Step 1 - Calculate the Transaction (tx) Hash
342
370
  tx = 'from: Alice to: Bob cryptos: 43_000_000_000'
343
- txhash = sha256( tx )
371
+ txhash = sha256( tx ).hexdigest
344
372
 
345
373
  # Step 2 - Get the Signer's Public Key
346
374
  public_key = EC::PublicKey.new(
@@ -582,11 +610,11 @@ Let's follow the steps from [How to create Bitcoin Address](https://en.bitcoin.i
582
610
  pk = "0250863ad64a87ae8a2fe83c1af1a8403cb53f53e486d8511dad8a04887e5b2352"
583
611
 
584
612
  # 1. Perform SHA-256 hashing on the public key
585
- step1 = sha256( pk )
613
+ step1 = sha256( hex: pk ).hexdigest
586
614
  #=> "0b7c28c9b7290c98d7438e70b3d3f7c848fbd7d1dc194ff83f4f7cc9b1378e98"
587
615
 
588
616
  # 2. Perform RIPEMD-160 hashing on the result of SHA-256
589
- step2 = ripemd160( step1 )
617
+ step2 = ripemd160( hex: step1 ).hexdigest
590
618
  #=> "f54a5851e9372b87810a8e60cdd2e7cfd80b6e31"
591
619
 
592
620
  # 3. Add version byte in front of RIPEMD-160 hash (0x00 for Bitcoin Main Network)
@@ -594,11 +622,11 @@ step3 = "00" + step2
594
622
  #=> "00f54a5851e9372b87810a8e60cdd2e7cfd80b6e31"
595
623
 
596
624
  # 4. Perform SHA-256 hash on the extended RIPEMD-160 result
597
- step4 = sha256( step3 )
625
+ step4 = sha256( hex: step3 ).hexdigest
598
626
  #=> "ad3c854da227c7e99c4abfad4ea41d71311160df2e415e713318c70d67c6b41c"
599
627
 
600
628
  # 5. Perform SHA-256 hash on the result of the previous SHA-256 hash
601
- step5 = sha256( step4 )
629
+ step5 = sha256( hex: step4 ).hexdigest
602
630
  #=> "c7f18fe8fcbed6396741e58ad259b5cb16b7fd7f041904147ba1dcffabf747fd"
603
631
 
604
632
  # 6. Take the first 4 bytes of the second SHA-256 hash. This is the address checksum
@@ -613,7 +641,7 @@ step7 = step3 + step6
613
641
 
614
642
  # 8. Convert the result from a byte string into a base58 string using Base58 encoding.
615
643
  # This is the most commonly used Bitcoin Address format.
616
- addr = base58( step7 )
644
+ addr = base58( hex: step7 )
617
645
  #=> "1PMycacnJaSqwwJqjawXBErnLsZ7RkXUAs"
618
646
  ```
619
647
 
@@ -629,7 +657,7 @@ pk = "0250863ad64a87ae8a2fe83c1af1a8403cb53f53e486d8511dad8a04887e5b2352"
629
657
  # 1. Perform HASH-160 hashing on the public key
630
658
  # a) Perform SHA-256 hashing on the public key
631
659
  # b) Perform RIPEMD-160 hashing on the result of SHA-256
632
- step1 = hash160( pk )
660
+ step1 = hash160( hex: pk ).hexdigest
633
661
  #=> "f54a5851e9372b87810a8e60cdd2e7cfd80b6e31"
634
662
 
635
663
  # 2. Add version byte in front of RIPEMD-160 hash (0x00 for Bitoin Main Network)
@@ -646,7 +674,7 @@ step2 = "00" + step1
646
674
  # e) Convert the result from a byte string into a base58 string
647
675
  # using Base58 encoding.
648
676
  # This is the most commonly used Bitcoin Address format.
649
- addr = base58check( step2 )
677
+ addr = base58check( hex: step2 )
650
678
  #=> "1PMycacnJaSqwwJqjawXBErnLsZ7RkXUAs"
651
679
  ```
652
680
 
@@ -676,11 +704,11 @@ This is all then converted to Base58, which shortens the string and makes it eas
676
704
  privatekey = "ef235aacf90d9f4aadd8c92e4b2562e1d9eb97f0df9ba3b508258739cb013db2"
677
705
  extended = "80" + privatekey + "01"
678
706
  #=> "80ef235aacf90d9f4aadd8c92e4b2562e1d9eb97f0df9ba3b508258739cb013db201"
679
- checksum = hash256( extended )[0..7]
707
+ checksum = hash256( hex: extended ).hexdigest[0..7]
680
708
  #=> "66557e53"
681
709
  extendedchecksum = extended + checksum
682
710
  #=> "80ef235aacf90d9f4aadd8c92e4b2562e1d9eb97f0df9ba3b508258739cb013db20166557e53"
683
- wif = base58( extendedchecksum )
711
+ wif = base58( hex: extendedchecksum )
684
712
  #=> "L5EZftvrYaSudiozVRzTqLcHLNDoVn7H5HSfM9BAN6tMJX8oTWz6"
685
713
  ```
686
714
 
@@ -690,7 +718,7 @@ Or let's try again with the base58check (`BASE58(X || SHA256(SHA256(X))[:4])`) s
690
718
  privatekey = "ef235aacf90d9f4aadd8c92e4b2562e1d9eb97f0df9ba3b508258739cb013db2"
691
719
  extended = "80" + privatekey + "01"
692
720
  #=> "80ef235aacf90d9f4aadd8c92e4b2562e1d9eb97f0df9ba3b508258739cb013db201"
693
- wif = base58check( extended )
721
+ wif = base58check( hex: extended )
694
722
  #=> "L5EZftvrYaSudiozVRzTqLcHLNDoVn7H5HSfM9BAN6tMJX8oTWz6"
695
723
  ```
696
724
 
@@ -832,7 +860,7 @@ pk = "022744c02580b4905349bc481a60c308c2d98d823d44888835047f6bc5c38c4e8f"
832
860
  # 1. Perform HASH-160 hashing on the public key
833
861
  # a) Perform SHA-256 hashing on the public key
834
862
  # b) Perform RIPEMD-160 hashing on the result of SHA-256
835
- step1 = hash160( pk )
863
+ step1 = hash160( hex: pk ).hexdigest
836
864
  #=> "a1f37969bcb547cd9c3a28fa07c2269ef813340a"
837
865
 
838
866
  # 2. Add version byte in front of RIPEMD-160 hash (0x1e for Dodge Main Network)
@@ -849,7 +877,7 @@ step2 = "1e" + step1
849
877
  # e) Convert the result from a byte string into a base58 string
850
878
  # using Base58 encoding.
851
879
  # This is the most commonly used Dodge Address format.
852
- addr = base58check( step2 )
880
+ addr = base58check( hex: step2 )
853
881
  #=> "DKuR12onkdp5GxC5c8DgXhGe4Z2AqCK3Xh"
854
882
  ```
855
883
 
@@ -980,7 +1008,7 @@ to calculate the hash of the public key
980
1008
 
981
1009
  ``` ruby
982
1010
  pub = "6e145ccef1033dea239875dd00dfb4fee6e3348b84985c92f103444683bae07b83b5c38e5e2b0c8529d7fa3f64d46daa1ece2d9ac14cab9477d042c84c32ccd0"
983
- hash = keccak256( pub )
1011
+ hash = keccak256( hex: pub ).hexdigest
984
1012
  #=> "2a5bc342ed616b5ba5732269001d3f1ef827552ae1114027bd3ecf1f086ba0f9"
985
1013
  ```
986
1014
 
data/Rakefile CHANGED
@@ -19,6 +19,7 @@ Hoe.spec 'crypto-lite' do
19
19
  self.history_file = 'CHANGELOG.md'
20
20
 
21
21
  self.extra_deps = [
22
+ ['bytes'],
22
23
  ['digest-lite'],
23
24
  ['base32-alphabets'],
24
25
  ['base58-alphabets'],
@@ -1,25 +1,64 @@
1
-
2
1
  module CryptoHelper
3
- ### note: use include CryptoHelper
4
- ## to get "top-level" / global helpers
5
2
 
6
- ## add convenience "top-level" helpers
7
- def sha256( *args, **kwargs ) Crypto.sha256( *args, **kwargs ); end
8
- def sha3_256( *args, **kwargs ) Crypto.sha3_256( *args, **kwargs ); end
9
3
 
10
- def keccak256( *args, **kwargs ) Crypto.keccak256( *args, **kwargs ); end
4
+ ###
5
+ # todo: change ''.b to BYTE_ZERO constant or such - why? why not?
6
+
7
+
8
+ ######
9
+ # add convenience helpers
10
+ def base58( bin=''.b, hex: nil )
11
+ bin = hex.hex_to_bin if hex # uses Bytes.hex_to_bin
12
+ Crypto::Metal.base58( bin )
13
+ end
11
14
 
12
- def rmd160( *args, **kwargs ) Crypto.rmd160( *args, **kwargs ); end
13
- ## def ripemd160( input ) Crypto.rmd160( input ); end
15
+ def base58check( bin=''.b, hex: nil )
16
+ bin = hex.hex_to_bin if hex # uses Bytes.hex_to_bin
17
+ Crypto::Metal.base58check( bin )
18
+ end
19
+
20
+ def keccak256( bin=''.b, hex: nil )
21
+ bin = hex.hex_to_bin if hex # uses Bytes.hex_to_bin
22
+ Crypto::Metal.keccak256( bin )
23
+ end
24
+
25
+ def rmd160( bin=''.b, hex: nil )
26
+ bin = hex.hex_to_bin if hex # uses Bytes.hex_to_bin
27
+ Crypto::Metal.rmd160( bin )
28
+ end
29
+ ## add alias RIPEMD160 - why? why not?
14
30
  alias_method :ripemd160, :rmd160
15
31
 
16
- def hash160( *args, **kwargs ) Crypto.hash160( *args, **kwargs ); end
32
+ def sha256( bin=''.b, hex: nil,
33
+ engine: nil )
34
+ bin = hex.hex_to_bin if hex # uses Bytes.hex_to_bin
35
+ Crypto::Metal.sha256( bin, engine )
36
+ end
37
+
38
+ def sha3_256( bin=''.b, hex: nil,
39
+ engine: nil )
40
+ bin = hex.hex_to_bin if hex # uses Bytes.hex_to_bin
41
+ Crypto::Metal.sha3_256( bin, engine )
42
+ end
17
43
 
18
- def hash256( *args, **kwargs ) Crypto.hash256( *args, **kwargs ); end
44
+ def hash160( bin=''.b, hex: nil )
45
+ bin = hex.hex_to_bin if hex # uses Bytes.hex_to_bin
46
+ Crypto::Metal.hash160( bin )
47
+ end
19
48
 
49
+ def hash256( bin=''.b, hex: nil )
50
+ bin = hex.hex_to_bin if hex # uses Bytes.hex_to_bin
51
+ Crypto::Metal.hash256( bin )
52
+ end
53
+ end # module CryptoHelper
20
54
 
21
- def base58( *args, **kwargs ) Crypto.base58( *args, **kwargs ); end
22
- def base58check( *args, **kwargs ) Crypto.base58check( *args, **kwargs ); end
23
- end
24
55
 
25
56
 
57
+ module Crypto
58
+ extend CryptoHelper
59
+ ##
60
+ ## lets you use
61
+ ## Crypto.sha256( bin, hex: ) -> bin
62
+ ## Crytpo.base58( bin, hex: ) -> bin
63
+ ## etc.
64
+ end # module Crypto
@@ -1,72 +1,56 @@
1
- module Crypto
2
- module Metal
3
-
4
- def self.debug?() Crypto.debug?; end
5
1
 
6
- ########################
7
- ### to the "metal" crypto primitives
8
- ## work with binary strings (aka byte arrays) / data
9
-
10
- ##
11
- ## todo/check: use/keep bin-suffix in name - why? why not?
2
+ module Crypto
3
+ module MetalHelper
12
4
 
5
+ ####
6
+ # note: all (digest) hash functions
7
+ # take in a binary string and return a binary string!!!!
13
8
 
14
- def self.base58bin( input )
15
- ## todo/check: input must be a (binary) string - why? why not?
16
- Base58::Bitcoin.encode_bin( input )
9
+ def base58( bin )
10
+ Base58::Bitcoin.encode_bin( bin )
17
11
  end
18
12
 
19
- def self.base58bin_check( input )
20
- ## todo/check: input must be a (binary) string - why? why not?
21
- hash256 = hash256bin( input )
22
- base58bin( input + hash256[0,4] )
13
+ def base58check( bin )
14
+ hash256 = hash256( bin )
15
+ base58( bin + hash256[0,4] )
23
16
  end
24
17
 
25
18
 
26
19
  ########################
27
20
  # (secure) hash functions
28
21
 
29
- def self.keccak256bin( input )
30
- message = message( input ) ## "normalize" / convert to (binary) string
31
- Digest::KeccakLite.digest( message, 256 )
22
+ def keccak256( bin )
23
+ Digest::KeccakLite.digest( bin, 256 )
32
24
  end
33
25
 
34
- def self.rmd160bin( input )
35
- message = message( input ) ## "normalize" / convert to (binary) string
36
- Digest::RMD160.digest( message )
26
+ def rmd160( bin )
27
+ Digest::RMD160.digest( bin )
37
28
  end
38
-
39
29
  ## add alias RIPEMD160 - why? why not?
40
- class << self
41
- alias_method :ripemd160bin, :rmd160bin
42
- end
30
+ alias_method :ripemd160, :rmd160
43
31
 
44
32
 
45
- def self.sha256bin( input, engine=nil ) ## todo/check: add alias sha256b or such to - why? why not?
46
- message = message( input ) ## "normalize" / convert to (binary) string
47
-
33
+ def sha256( bin, engine=nil ) ## todo/check: add alias sha256b or such to - why? why not?
48
34
  if engine && ['openssl'].include?( engine.to_s.downcase )
49
- puts " engine: #{engine}" if debug?
35
+ ## puts " engine: #{engine}" if debug?
50
36
  digest = OpenSSL::Digest::SHA256.new
51
37
  ## or use OpenSSL::Digest.new( 'SHA256' )
52
- digest.update( message )
38
+ digest.update( bin )
53
39
  digest.digest
54
40
  else ## use "built-in" hash function from digest module
55
- Digest::SHA256.digest( message )
41
+ Digest::SHA256.digest( bin )
56
42
  end
57
43
  end
58
44
 
59
45
 
60
- def self.sha3_256bin( input, engine=nil )
61
- message = message( input ) ## "normalize" / convert to (binary) string
62
-
46
+ def sha3_256( bin, engine=nil )
63
47
  if engine && ['openssl'].include?( engine.to_s.downcase )
64
- puts " engine: #{engine}" if debug?
48
+ ## puts " engine: #{engine}" if debug?
65
49
  digest = OpenSSL::Digest.new( 'SHA3-256' )
66
- digest.update( message )
50
+ digest.update( bin )
67
51
  digest.digest
68
52
  else ## use "built-in" hash function from digest module
69
- Digest::SHA3Lite.digest( message, 256 )
53
+ Digest::SHA3Lite.digest( bin, 256 )
70
54
  end
71
55
  end
72
56
 
@@ -80,56 +64,23 @@ module Metal
80
64
  # ripemd160.unpack( "H*" )[0] # Convert back to hex
81
65
  # end
82
66
 
83
- def self.hash160bin( input )
84
- message = message( input ) ## "normalize" / convert to (binary) string
85
-
86
- rmd160bin(sha256bin( message ))
67
+ def hash160( bin )
68
+ rmd160(sha256( bin ))
87
69
  end
88
70
 
89
-
90
- def self.hash256bin( input )
91
- message = message( input ) ## "normalize" / convert to (binary) string
92
-
93
- sha256bin(sha256bin( message ))
71
+ def hash256( bin )
72
+ sha256(sha256( bin ))
94
73
  end
74
+ end # module MetalHelper
95
75
 
96
76
 
97
- ##############################
98
- ## helpers
99
- def self.message( input ) ## convert input to (binary) string
100
- if debug?
101
- input_type = if input.is_a?( String )
102
- "#{input.class.name}/#{input.encoding}"
103
- else
104
- input.class.name
105
- end
106
- puts " input: #{input} (#{input_type})"
107
- end
108
-
109
- message = if input.is_a?( Integer ) ## assume byte if single (unsigned) integer
110
- raise ArgumentError, "expected unsigned byte (0-255) - got #{input} (0x#{input.to_s(16)}) - can't pack negative number; sorry" if input < 0
111
- ## note: pack - H (String) => hex string (high nibble first)
112
- ## todo/check: is there a better way to convert integer number to (binary) string!!!
113
- [input.to_s(16)].pack('H*')
114
- else ## assume (binary) string
115
- input
116
- end
117
-
118
- if debug?
119
- bytes = message.bytes
120
- bin = bytes.map {|byte| byte.to_s(2).rjust(8, "0")}.join( ' ' )
121
- hex = bytes.map {|byte| byte.to_s(16).rjust(2, "0")}.join( ' ' )
122
- puts " #{pluralize( bytes.size, 'byte')}: #{bytes.inspect}"
123
- puts " binary: #{bin}"
124
- puts " hex: #{hex}"
125
- end
126
-
127
- message
128
- end
77
+ module Metal
78
+ extend MetalHelper
79
+ ## lets you use
80
+ ## Crypto::Metal.sha256( bin ) -> bin
81
+ ## Crytpo::Metal.base58( bin ) -> bin
82
+ ## etc.
83
+ end # module Metal
84
+ end # module Crypto
129
85
 
130
- def self.pluralize( count, noun )
131
- count == 1 ? "#{count} #{noun}" : "#{count} #{noun}s"
132
- end
133
86
 
134
- end # module Metal
135
- end # module Crypto
@@ -2,8 +2,8 @@
2
2
  module CryptoLite
3
3
 
4
4
  MAJOR = 0
5
- MINOR = 3
6
- PATCH = 1
5
+ MINOR = 4
6
+ PATCH = 0
7
7
  VERSION = [MAJOR,MINOR,PATCH].join('.')
8
8
 
9
9
  def self.version
data/lib/crypto-lite.rb CHANGED
@@ -5,141 +5,35 @@ require 'openssl'
5
5
 
6
6
 
7
7
  ## our own 3rd party (2nd party?)
8
+ require 'bytes'
9
+
10
+ ## extend String
11
+ class String
12
+ alias_method :hexdigest, :bin_to_hex ## note: bin_to_hex added via Bytes!!!
13
+ end
14
+
15
+
8
16
  require 'digest-lite' # e.g. keccak (original submission/proposal NOT official sha3)
9
17
  require 'base32-alphabets'
10
18
  require 'base58-alphabets'
11
19
  require 'elliptic'
12
20
 
13
21
 
14
-
15
22
  ## our own code
16
23
  require_relative 'crypto-lite/version' # note: let version always go first
17
24
  require_relative 'crypto-lite/config'
18
25
  require_relative 'crypto-lite/metal'
19
-
20
-
21
-
22
-
23
- module Crypto
24
-
25
- def self.base58( *args, **kwargs )
26
- input = args_to_input( args, kwargs )
27
- Metal.base58bin( input )
28
- end
29
-
30
- def self.base58check( *args, **kwargs )
31
- input = args_to_input( args, kwargs )
32
- Metal.base58bin_check( input )
33
- end
34
-
35
-
36
- ########################
37
- # (secure) hash functions
38
-
39
- def self.keccak256( *args, **kwargs )
40
- input = args_to_input( args, kwargs )
41
- Metal.keccak256bin( input ).unpack( 'H*' )[0]
42
- end
43
-
44
-
45
- def self.rmd160( *args, **kwargs )
46
- input = args_to_input( args, kwargs )
47
- Metal.rmd160bin( input ).unpack( 'H*' )[0]
48
- end
49
-
50
- ## add alias RIPEMD160 - why? why not?
51
- class << self
52
- alias_method :ripemd160, :rmd160
53
- end
54
-
55
-
56
- def self.sha256( *args, **kwargs )
57
- input = args_to_input( args, kwargs )
58
- engine = kwargs[:engine]
59
- Metal.sha256bin( input, engine ).unpack( 'H*' )[0]
60
- end
61
-
62
- def self.sha3_256( *args, **kwargs )
63
- input = args_to_input( args, kwargs )
64
- Metal.sha3_256bin( input ).unpack( 'H*' )[0]
65
- end
66
-
67
-
68
-
69
- def self.hash160( *args, **kwargs )
70
- input = args_to_input( args, kwargs )
71
- Metal.hash160bin( input ).unpack( 'H*' )[0]
72
- end
73
-
74
- def self.hash256( *args, **kwargs )
75
- input = args_to_input( args, kwargs )
76
- Metal.hash256bin( input ).unpack( 'H*' )[0]
77
- end
78
-
79
-
80
-
81
- ########
82
- # more helpers
83
- ## check if it is a hex (string)
84
- ## - allow optiona 0x or 0X and allow abcdef and ABCDEF
85
- HEX_RE = /\A(?:0x)?[0-9a-f]+\z/i
86
-
87
- def self.args_to_input( args, kwargs )
88
- if kwargs[:hex]
89
- hex = kwargs[:hex]
90
- raise ArgumentError, "expected hex string (0-9a-f) - got >#{hex}< - can't pack string; sorry" unless hex =~ HEX_RE
91
-
92
- hex = strip0x( hex ) ## check if input starts with 0x or 0X if yes - (auto-)cut off!!!!!
93
- [hex].pack( 'H*' )
94
- else ## assume single input arg for now
95
- input = args[0]
96
- input = hex_to_bin_automagic( input ) ## add automagic hex (string) to bin (string) check - why? why not?
97
- input
98
- end
99
- end
100
-
101
- def self.hex_to_bin_automagic( input )
102
- ## todo/check/fix: add configure setting to turn off automagic - why? why not?
103
- if input.is_a?( String ) && input =~ HEX_RE
104
- if input[0,2] == '0x' || input[0,2] == '0X'
105
- ## starting with 0x or 0X always assume hex string for now - why? why not?
106
- input = input[2..-1]
107
- [input].pack( 'H*' )
108
- elsif input.size >= 10
109
- ## note: hex heuristic!!
110
- ## for now assumes string MUST have more than 10 digits to qualify!!!
111
- [input].pack( 'H*' )
112
- else
113
- input ## pass through as is!!! (e.g. a, abc, etc.)
114
- end
115
- else
116
- input ## pass through as is
117
- end
118
- end
119
-
120
-
121
- def self.strip0x( str ) ## todo/check: add alias e.g. strip_hex_prefix or such - why? why not?
122
- (str[0,2] == '0x' || str[0,2] == '0X') ? str[2..-1] : str
123
- end
124
-
125
- # def self.hex_to_bin( str )
126
- # str = strip0x( str ) ## check if input starts with 0x or 0X if yes - (auto-)cut off!!!!!
127
- # [str].pack( 'H*' )
128
- # end
129
-
130
- end # module Crypto
131
-
132
-
133
-
134
-
135
26
  require_relative 'crypto-lite/helper'
136
- include CryptoHelper # add convenience "top-level" / global helpers
137
27
 
138
28
 
139
29
  require_relative 'crypto-lite/sign_rsa'
140
30
  RSA = Crypto::RSA
141
31
 
142
32
 
33
+ ## auto-add top-level helpers - why? why not?
34
+ include CryptoHelper
35
+
36
+
143
37
 
144
38
 
145
39
  puts CryptoLite.banner ## say hello
data/test/test_base58.rb CHANGED
@@ -9,14 +9,16 @@ require 'helper'
9
9
  class TestBase58 < MiniTest::Test
10
10
 
11
11
  HEX_TESTS = [
12
- ["00000000000000000000", "1111111111"],
12
+ ["00000000000000000000", "1111111111"],
13
13
  ["00000000000000000000123456789abcdef0", "111111111143c9JGph3DZ"],
14
14
  ]
15
15
 
16
+
16
17
  def test_hex
17
18
  HEX_TESTS.each do |item|
18
- assert_equal item[1], base58( hex: item[0] )
19
- assert_equal item[1], base58( item[0] )
19
+ assert_equal item[1], Crypto.base58( hex: item[0] )
20
+ bin = Bytes.hex_to_bin( item[0] )
21
+ assert_equal item[1], Crypto.base58( bin )
20
22
  end
21
23
  end
22
24
 
@@ -27,10 +29,11 @@ def test_bitcoin_addr
27
29
  pkh = 'f54a5851e9372b87810a8e60cdd2e7cfd80b6e31'
28
30
 
29
31
  ## all-in-one
30
- assert_equal addr_exp, base58check( hex: '00' + pkh )
31
- assert_equal addr_exp, base58check( '00' + pkh )
32
+ assert_equal addr_exp, Crypto.base58check( hex: '00' + pkh )
33
+ bin = Bytes.hex_to_bin('00' + pkh)
34
+ assert_equal addr_exp, Crypto.base58check( bin )
32
35
 
33
- assert_equal addr_exp, Crypto::Metal.base58bin_check( "\x00" + [pkh].pack('H*') )
36
+ assert_equal addr_exp, Crypto::Metal.base58check( "\x00" + [pkh].pack('H*') )
34
37
  end
35
38
 
36
39
  end # class TestBase58
@@ -11,11 +11,11 @@ class TestBitcoinAddr < MiniTest::Test
11
11
  def test_bitcoin_addr_v1
12
12
  pk = "0250863ad64a87ae8a2fe83c1af1a8403cb53f53e486d8511dad8a04887e5b2352"
13
13
 
14
- step1 = sha256( pk )
14
+ step1 = Crypto.sha256( hex: pk ).hexdigest
15
15
  assert_equal "0b7c28c9b7290c98d7438e70b3d3f7c848fbd7d1dc194ff83f4f7cc9b1378e98",
16
16
  step1
17
17
 
18
- step2 = ripemd160( step1 )
18
+ step2 = Crypto.ripemd160( hex: step1 ).hexdigest
19
19
  assert_equal "f54a5851e9372b87810a8e60cdd2e7cfd80b6e31",
20
20
  step2
21
21
 
@@ -23,11 +23,11 @@ def test_bitcoin_addr_v1
23
23
  assert_equal "00f54a5851e9372b87810a8e60cdd2e7cfd80b6e31",
24
24
  step3
25
25
 
26
- step4 = sha256( step3 )
26
+ step4 = Crypto.sha256( hex: step3 ).hexdigest
27
27
  assert_equal "ad3c854da227c7e99c4abfad4ea41d71311160df2e415e713318c70d67c6b41c",
28
28
  step4
29
29
 
30
- step5 = sha256( step4 )
30
+ step5 = Crypto.sha256( hex: step4 ).hexdigest
31
31
  assert_equal "c7f18fe8fcbed6396741e58ad259b5cb16b7fd7f041904147ba1dcffabf747fd",
32
32
  step5
33
33
 
@@ -37,7 +37,7 @@ def test_bitcoin_addr_v1
37
37
  step7 = step3 + step6
38
38
  assert_equal "00f54a5851e9372b87810a8e60cdd2e7cfd80b6e31c7f18fe8", step7
39
39
 
40
- addr = base58( step7 )
40
+ addr = Crypto.base58( hex: step7 )
41
41
  assert_equal "1PMycacnJaSqwwJqjawXBErnLsZ7RkXUAs", addr
42
42
  end
43
43
 
@@ -45,13 +45,13 @@ end
45
45
  def test_bitcoin_addr_v2
46
46
  pk = "0250863ad64a87ae8a2fe83c1af1a8403cb53f53e486d8511dad8a04887e5b2352"
47
47
 
48
- step1 = hash160( pk )
48
+ step1 = Crypto.hash160( hex: pk ).hexdigest
49
49
  assert_equal "f54a5851e9372b87810a8e60cdd2e7cfd80b6e31", step1
50
50
 
51
51
  step2 = "00" + step1
52
52
  assert_equal "00f54a5851e9372b87810a8e60cdd2e7cfd80b6e31", step2
53
53
 
54
- addr = base58check( step2 )
54
+ addr = Crypto.base58check( hex: step2 )
55
55
  assert_equal "1PMycacnJaSqwwJqjawXBErnLsZ7RkXUAs", addr
56
56
  end
57
57
 
data/test/test_hash.rb CHANGED
@@ -24,22 +24,28 @@ class TestHash < MiniTest::Test
24
24
  ]
25
25
 
26
26
 
27
+ def assert_hexdigest( exp, bin )
28
+ assert_equal exp, bin.hexdigest
29
+ end
30
+
31
+
27
32
 
28
33
  def test_keccak256
29
34
  KECCAK256_TESTS.each do |item|
30
- assert_equal item[1], keccak256( item[0].b )
35
+ assert_hexdigest item[1], Crypto.keccak256( item[0].b )
31
36
  end
32
37
  end
33
38
 
34
39
  def test_sha3_256
35
40
  SHA3_256_TESTS.each do |item|
36
- assert_equal item[1], sha3_256( item[0].b )
41
+ assert_hexdigest item[1], Crypto.sha3_256( item[0].b )
37
42
  end
38
43
  end
39
44
 
40
45
  def test_ripemd160
41
46
  RIPEMD160_TESTS.each do |item|
42
- assert_equal item[1], ripemd160( item[0].b )
47
+ assert_hexdigest item[1], Crypto.ripemd160( item[0].b )
48
+ assert_hexdigest item[1], Crypto.rmd160( item[0].b )
43
49
  end
44
50
  end
45
51
 
@@ -30,10 +30,17 @@ class TestHashSha < MiniTest::Test
30
30
  ]
31
31
 
32
32
 
33
+
34
+ def assert_hexdigest( exp, bin )
35
+ assert_equal exp, bin.hexdigest
36
+ end
37
+
38
+
39
+
33
40
  def test_bin
34
41
  BIN_TESTS.each do |item|
35
- assert_equal item[1], sha256( item[0].b )
36
- assert_equal item[1], sha256( item[0].b, engine: 'openssl' )
42
+ assert_hexdigest item[1], Crypto.sha256( item[0].b )
43
+ assert_hexdigest item[1], Crypto.sha256( item[0].b, engine: 'openssl' )
37
44
  end
38
45
  end
39
46
 
@@ -42,17 +49,17 @@ def test_abc
42
49
  ['abc',
43
50
  'abc'.b,
44
51
  "\x61\x62\x63",
45
- 0x616263
52
+ # 0x616263
46
53
  ].each do |input|
47
- assert_equal SHA256_ABC, sha256( input )
48
- assert_equal SHA256_ABC, sha256( input, engine: 'openssl' )
54
+ assert_hexdigest SHA256_ABC, Crypto.sha256( input )
55
+ assert_hexdigest SHA256_ABC, Crypto.sha256( input, engine: 'openssl' )
49
56
  end
50
57
 
51
58
  ['616263',
52
59
  '0x616263',
53
60
  '0X616263'
54
61
  ].each do |input|
55
- assert_equal SHA256_ABC, sha256( hex: input )
62
+ assert_hexdigest SHA256_ABC, Crypto.sha256( hex: input )
56
63
  end
57
64
  ## pp sha256hex( 'hello' ) -- fails - uses non-hex chars
58
65
 
@@ -60,30 +67,30 @@ def test_abc
60
67
 
61
68
  [ 'a',
62
69
  "\x61",
63
- 0b01100001,
64
- 0x61
70
+ # 0b01100001,
71
+ # 0x61
65
72
  ].each do |input|
66
- assert_equal SHA256_A, sha256( input )
67
- assert_equal SHA256_A, sha256( input, engine: 'openssl' )
73
+ assert_hexdigest SHA256_A, Crypto.sha256( input )
74
+ assert_hexdigest SHA256_A, Crypto.sha256( input, engine: 'openssl' )
68
75
  end
69
76
 
70
77
  ['61',
71
78
  '0x61',
72
79
  '0X61'
73
80
  ].each do |input|
74
- assert_equal SHA256_A, sha256( hex: input )
81
+ assert_hexdigest SHA256_A, Crypto.sha256( hex: input )
75
82
  end
76
83
 
77
84
  [ 'b',
78
- 0b01100010
85
+ # 0b01100010
79
86
  ].each do |input|
80
- assert_equal SHA256_B, sha256( input )
87
+ assert_hexdigest SHA256_B, Crypto.sha256( input )
81
88
  end
82
89
 
83
90
  [ 'c',
84
- 0b01100011
91
+ # 0b01100011
85
92
  ].each do |input|
86
- assert_equal SHA256_C, sha256( input )
93
+ assert_hexdigest SHA256_C, Crypto.sha256( input )
87
94
  end
88
95
  end
89
96
 
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crypto-lite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-12-09 00:00:00.000000000 Z
11
+ date: 2022-12-11 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bytes
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: digest-lite
15
29
  requirement: !ruby/object:Gem::Requirement