sixarm_ruby_xid 3.0.0 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4eb5fb0a077dc0f211a20f10c65c65b5f6a7745e
4
- data.tar.gz: d2f7fb50c2a0363c308e31d054338ccfc696fdb6
3
+ metadata.gz: 7a6cd306d753aa53345165bc0fe03abdb5f32038
4
+ data.tar.gz: 2ddb1e1f1c2d577434669f2d2b1f5c77b36b018e
5
5
  SHA512:
6
- metadata.gz: 63f43cd85cf5c7ae3a0a53dad2605494dece765a44bbaab1c0b5116d7dcf1a52360fa2d24c1ae20223a64962bafdde768cae64ab50b064ce80e5a0eb5a95437b
7
- data.tar.gz: 7bbbf160d7499466bad2e12e4e52fc73a7be39184c884732a7c653797fd85263bb98126bef6a736723d60ea464f9b22fe7d268d5571bd7af5701b1fb32a89ac7
6
+ metadata.gz: 5d2072630d29de5205328f7e571a7f5dce56a47b85b001da782f8faaeaf75bca1bfe5366dbfe878b2dab033447f02c0326d0221f1aba8d2275231900b4825122
7
+ data.tar.gz: 04e1403dc19e8065b7dd6c237619cbed0ef7714f4db1aaaeed900a8b3cd7b72601aef4870bb4c4fb356038c35838738de34aca3fdff3994704e87a30fcef7064
checksums.yaml.gz.sig CHANGED
Binary file
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # SixArm.com » Ruby » <br> SecureToken to generate a random string
1
+ # SixArm.com » Ruby » <br> XID excellent identifier
2
2
 
3
3
  [![Code Climate](https://codeclimate.com/github/SixArm/xid.png)](https://codeclimate.com/github/SixArm/xid)
4
4
  [![Build Status](https://travis-ci.org/SixArm/xid.png)](https://travis-ci.org/SixArm/xid)
@@ -11,28 +11,20 @@
11
11
 
12
12
  ## Introduction
13
13
 
14
- XID is a secure identifier string. It is much like a UUID (Universally Unique Identifier). The XID has a more-specific specfication, faster creation algorithms, faster comparison algorithms, and is fully translatable to a UUID if necessary.
15
-
16
- XID specification:
17
-
18
- * 128 bit.
19
- * Completely random.
20
- * Generated with a secure random generator.
21
- * The string representation is entirely hexidecimal: digits 0-9 and lowercase a-f.
22
-
23
- Comparison with UUID:
24
-
25
- * The XID and UUID are both 128 bit.
26
- * The XID has one form. The UUID has multiple forms, called variants and versions.
27
- * The XID is completely random. The UUID may have non-random pieces, such as a MAC sequence, and a fixed bit for the variant and version.
28
- * The XID specification requires the use of a secure random generator. The UUID has no guarantee.
29
- * The XID uses digits 0-9 and lowecase a-f. The UUID canoncical form uses dashes to separate sequencies, and can use uppercase or lowercase.
14
+ XID is an excellent identifier. The XID much like a UUID (Universally Unique Identifier) or GUID (Globally Unique Identifer).
30
15
 
31
16
  Example:
32
17
 
33
18
  XID.new
34
19
  #=> "90f44e35a062479289ff75ab2abc0ed3"
35
20
 
21
+ What makes the XID excellent: a streamlined specfication, stronger security, speedier algorithms, and simple string comparisons.
22
+
23
+ XID specification:
24
+
25
+ * 128 bit.
26
+ * Completely random and generated with a secure random generator.
27
+ * The string representation is entirely hexidecimal: digits 0-9 and lowercase a-f.
36
28
 
37
29
  For docs go to <http://sixarm.com/sixarm_ruby_xid/doc>
38
30
 
@@ -69,9 +61,62 @@ To install with high security:
69
61
 
70
62
  ## Details
71
63
 
72
- This uses Ruby's SecureRandom methods for strong security.
64
+ Methods:
65
+
66
+ * `XID.new`: generate a new XID string
67
+ * `XID#digest`: return a SHA256 digest as a 64-character string
68
+
69
+ Notes:
70
+
71
+ * XID uses Ruby's SecureRandom methods for strong security.
72
+ * An XID is a Ruby string, so you can do any string methods on it.
73
+
74
+
75
+ ## UUID comparison
76
+
77
+ The XID is much like a UUID:
78
+
79
+ * The XID and UUID are both 128 bit.
80
+ * The XID has one form. The UUID has multiple forms, known as variants and versions.
81
+ * The XID is completely random. The UUID may have non-random pieces, such as a MAC sequence, and a fixed bit for the variant and version.
82
+ * The XID specification requires the use of a secure random generator. The UUID has no guarantee, and some forms use predicatable sequences.
83
+ * The XID uses digits 0-9 and lowecase a-f. The UUID canoncical form uses dashes to separate sequencies, and may use uppercase or lowercase.
84
+
85
+ To format an XID in the style of a UUID canonical representation:
86
+
87
+ xid = "90f44e35a062479289ff75ab2abc0ed3"
88
+ xid.sub(/(.{8})(.{4})(.{4})(.{16})/,"#$1-#$2-#$3-#$4")
89
+ #=> "90f44e35-a062-4792-89ff75ab2abc0ed3"
90
+
91
+ Note: the result string is formatted like a UUID, but is not guaranteed to be valid UUID. This is because the XID is random, whereas the UUID specification requires a specific bit that indicates the UUID is random.
92
+
93
+ To format a UUID in the style of an XID:
94
+
95
+ uuid = "14fFE137-2DB2-4A37-A2A4-A04DB1C756CA"
96
+ uuid.gsub(/-/,"").downcase
97
+ #=> ""14f7e1372db24a37a2a4a04db1c756ca"
98
+
99
+ Note: the result string is formatted like a XID, but is not a valid XID. This is because there's no guarantee that the UUID was randomly generated using a secure random generator, and also because the UUID-4 specification requires a random UUID to set the third section's first digit to 4.
100
+
101
+
102
+ ## Unix tooling
103
+
104
+ To generate an XID on a typical Unix system, one way is the hexdump command:
105
+
106
+ $ hexdump -n 16 -v -e '16/1 "%02x" "\n"' /dev/random
107
+ b29dd48b7040f788fd926ebf1f4eddd0
108
+
109
+ To digest an XID by using SHA256:
110
+
111
+ $ echo -n "b29dd48b7040f788fd926ebf1f4eddd0" | shasum -a 256
112
+ afdfb0400e479285040e541ee87d9227d5731a7232ecfa5a07074ee0ad171c64
113
+
114
+
115
+ ## Database tooling
116
+
117
+ To store an XID in a database, one way is using a string field that is 32 characters long.
73
118
 
74
- SecureToken is a string, so you can do any string methods on it.
119
+ Some databases have specialize fields for 128 bit values, such as PostgreSQL and its UUID extensions. PostgreSQL states that a UUID field will accept a string that is lowercase and that omits dashes. PostgreSQL does not do any validity-checking on the UUID value. Thus it is viable to store an XID in a UUID field. Our team has a goal to create a PostgreSQL extension for the XID data type.
75
120
 
76
121
 
77
122
  ## Changes
@@ -4,6 +4,7 @@ Please see README
4
4
  =end
5
5
 
6
6
  require 'securerandom'
7
+ require 'digest/sha2'
7
8
 
8
9
  class XID < String
9
10
 
@@ -11,4 +12,8 @@ class XID < String
11
12
  super(SecureRandom.hex(16))
12
13
  end
13
14
 
15
+ def digest
16
+ Digest::SHA256.new.update(self).to_s
17
+ end
18
+
14
19
  end
@@ -3,7 +3,7 @@ require 'minitest/autorun'
3
3
  Minitest::Test ||= MiniTest::Unit::TestCase
4
4
  require 'simplecov'
5
5
  SimpleCov.start
6
- require 'xid'
6
+ require 'sixarm_ruby_xid'
7
7
 
8
8
  describe XID do
9
9
 
@@ -11,12 +11,12 @@ describe XID do
11
11
 
12
12
  it "is a string with the correct length and characters" do
13
13
  xid = XID.new
14
- xid.must_match /\A[0-9a-z]{32}\Z/
14
+ xid.must_match /\A[0-9a-f]{32}\z/
15
15
  end
16
16
 
17
17
  it "is always different" do
18
18
  seen = Set.new
19
- 999999.times.each{
19
+ 99999.times.each{
20
20
  xid = XID.new
21
21
  seen.include?(xid).must_equal false
22
22
  seen.add(xid)
@@ -25,4 +25,13 @@ describe XID do
25
25
 
26
26
  end
27
27
 
28
+ describe "#digest" do
29
+
30
+ it "digests" do
31
+ xid = XID.new
32
+ xid.digest.must_match /\A[0-9a-f]{64}\z/
33
+ end
34
+
35
+ end
36
+
28
37
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sixarm_ruby_xid
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - SixArm
@@ -30,10 +30,10 @@ cert_chain:
30
30
  sWRVEyjnjnNuAeLP9zv43IDXjS22L2efhap7IOinYjcecpfXJgQaU+6BFAY4sdkQ
31
31
  S1STYSfs3qySBxxAeEyZTw==
32
32
  -----END CERTIFICATE-----
33
- date: 2015-02-11 00:00:00.000000000 Z
33
+ date: 2015-02-12 00:00:00.000000000 Z
34
34
  dependencies: []
35
- description: XID.new generates a new string suitable for security, authentication,
36
- tracking, etc.
35
+ description: XID generates a new string suitable for security, authentication, tracking,
36
+ etc.
37
37
  email: sixarm@sixarm.com
38
38
  executables: []
39
39
  extensions: []
@@ -73,7 +73,7 @@ rubyforge_project:
73
73
  rubygems_version: 2.4.5
74
74
  signing_key:
75
75
  specification_version: 4
76
- summary: SixArm.com » Ruby » XID secure identifier
76
+ summary: SixArm.com » Ruby » XID excellent identifier
77
77
  test_files:
78
78
  - test/sixarm_ruby_xid_test.rb
79
79
  has_rdoc: true
metadata.gz.sig CHANGED
Binary file