selfsdk 0.0.166 → 0.0.171

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
  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