selfsdk 0.0.166 → 0.0.171

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: 8c85c6fa67915d806be363e234ac87b2bdffc6d331a48a273f48f737bb476fa6
4
- data.tar.gz: fadf3e8a7df24cb74b71fc0e695f647b94510afb4092e58ca86f9aa6e0d2deaa
3
+ metadata.gz: 6dc6a29ff435f9b448759891a658f8ad4d93f2abf1981813ea00afbb448839d2
4
+ data.tar.gz: 9d6e5bb62bac11b939d5021fe5e52174e33930b667d4a3fc046070b58e62bc25
5
5
  SHA512:
6
- metadata.gz: dfc07013f91c98b460991df709e4526fe86ee37d6f26818d87fe3c29c10c99ec69401d1c51a1f7ab80f1a7bad1248ce81cb7091fa469d584863d962e6c39effa
7
- data.tar.gz: 7f3455f82fd7a2dec5579dd67d4a43a80ffc3fb24b35f90f7ab82bffd86d264e8760154decc7119ffc9c9fc6976669f2804f0f8222c7f52a6a0e4ebe55496cc5
6
+ metadata.gz: 82566b7f8beed7b293fbd3ec858969a526e570a77c093be3bfe3c7bc0535e25b9327887d673a762362c23fadd8044032903f03b4df814a8868eb4ffe029a3253
7
+ data.tar.gz: '096f7064f54238f411b8ec568ba83a5b1d9dd691780daa401ceb48a6c08c2c0a6346431d723d268ad0042b36b500f5c6b50fef33675e1d840473e866653ac81b'
data/lib/crypto.rb CHANGED
@@ -24,7 +24,8 @@ module SelfSDK
24
24
  keys = @account.otk['curve25519'].map{|k,v| {id: k, key: v}}.to_json
25
25
 
26
26
  # 1b-iv) post those keys to POST /v1/identities/<selfid>/devices/1/pre_keys/
27
- @client.post("/v1/apps/#{@client.jwt.id}/devices/#{@device}/pre_keys", keys)
27
+ res = @client.post("/v1/apps/#{@client.jwt.id}/devices/#{@device}/pre_keys", keys)
28
+ raise 'unable to push prekeys, please try in a few minutes' if res.code != 200
28
29
 
29
30
  # 1b-v) store the account to a file
30
31
  File.write(account_path, @account.to_pickle(storage_key))
@@ -89,6 +90,27 @@ module SelfSDK
89
90
 
90
91
  # 7b-ii) use the initial message to create a session for bob or carol
91
92
  session_with_bob = @account.inbound_session(m)
93
+
94
+ # 7b-iii) remove the session's prekey from the account
95
+ @account.remove_one_time_keys(session_with_bob)
96
+
97
+ current_one_time_keys = @account.otk['curve25519']
98
+
99
+ # 7b-iv) if the number of remaining prekeys is below a certain threshold, publish new keys
100
+ if current_one_time_keys.length < 10
101
+ @account.gen_otk(100)
102
+
103
+ keys = Array.new
104
+
105
+ @account.otk['curve25519'].each do |k,v|
106
+ keys.push({id: k, key: v}) if current_one_time_keys[k].nil?
107
+ end
108
+
109
+ res = @client.post("/v1/apps/#{@client.jwt.id}/devices/#{@device}/pre_keys", keys.to_json)
110
+ raise 'unable to push prekeys, please try in a few minutes' if res.code != 200
111
+ end
112
+
113
+ File.write(account_path, @account.to_pickle(@storage_key))
92
114
  end
93
115
 
94
116
  # 8) create a group session and set the identity of the account you're using
data/lib/messaging.rb CHANGED
@@ -43,6 +43,7 @@ module SelfSDK
43
43
  @client = client
44
44
  @ack_timeout = 60 # seconds
45
45
  @timeout = 120 # seconds
46
+ @auth_id = SecureRandom.uuid
46
47
  @device_id = options.fetch(:device_id, DEFAULT_DEVICE)
47
48
  @auto_reconnect = options.fetch(:auto_reconnect, DEFAULT_AUTO_RECONNECT)
48
49
  @raw_storage_dir = options.fetch(:storage_dir, DEFAULT_STORAGE_DIR)
@@ -264,8 +265,10 @@ module SelfSDK
264
265
  # Start sthe websocket listener
265
266
  def start
266
267
  SelfSDK.logger.info "starting"
268
+ auth_id = @auth_id.dup
269
+
267
270
  @mon.synchronize do
268
- @acks["authentication"] = { waiting_cond: @mon.new_cond,
271
+ @acks[auth_id] = { waiting_cond: @mon.new_cond,
269
272
  waiting: true,
270
273
  timeout: SelfSDK::Time.now + @ack_timeout }
271
274
  end
@@ -283,16 +286,16 @@ module SelfSDK
283
286
  end
284
287
 
285
288
  @mon.synchronize do
286
- @acks["authentication"][:waiting_cond].wait_while { @acks["authentication"][:waiting] }
287
- @acks.delete("authentication")
289
+ @acks[auth_id][:waiting_cond].wait_while { @acks[auth_id][:waiting] }
290
+ @acks.delete(auth_id)
288
291
  end
289
292
  # In case this does not succeed start the process again.
290
- if @acks.include? 'authentication'
291
- if @acks['authentication'][:waiting]
293
+ if @acks.include? auth_id
294
+ if @acks[auth_id][:waiting]
292
295
  close
293
296
  start_connection
294
297
  end
295
- @acks.delete("authentication")
298
+ @acks.delete(auth_id)
296
299
  end
297
300
  end
298
301
 
@@ -412,14 +415,18 @@ module SelfSDK
412
415
 
413
416
  # Authenticates current client on the websocket server.
414
417
  def authenticate
418
+ @auth_id = SecureRandom.uuid if @auth_id.nil?
419
+
415
420
  SelfSDK.logger.info "authenticating"
416
421
  send_raw Msgproto::Auth.new(
417
422
  type: Msgproto::MsgType::AUTH,
418
- id: "authentication",
423
+ id: @auth_id,
419
424
  token: @jwt.auth_token,
420
425
  device: @device_id,
421
426
  offset: @offset,
422
427
  )
428
+
429
+ @auth_id = nil
423
430
  end
424
431
 
425
432
  def send_raw(msg)
@@ -261,7 +261,7 @@ module SelfSDK
261
261
 
262
262
  sk = @keys[operation.signing_key]
263
263
 
264
- raise "operation specifies a signing key that does not exist" if k.nil?
264
+ raise "operation specifies a signing key that does not exist" if sk.nil?
265
265
 
266
266
  # if this is an account recovery, nuke all existing keys
267
267
  if sk.type == KEY_TYPE_RECOVERY
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: selfsdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.166
4
+ version: 0.0.171
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aldgate Ventures