selfsdk 0.0.164 → 0.0.169

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: 37a0711ed0feb251165f49fcfdce3573cb3845dea3e02263395baada7af5d0f6
4
- data.tar.gz: dd281cf75f58dc8ff14e22a8e71e32b400aa78a7ea806038a33c9cb8d9bf61ac
3
+ metadata.gz: e525b40ab24f81c5e2ece5c34a8bdb312fae674074981ba8188d168a4c27644d
4
+ data.tar.gz: c97ce7cf0278006e0ef0a3fff16b5ce80f0d5564c84b0419354dc41dab35bd21
5
5
  SHA512:
6
- metadata.gz: 81ce8dcd9ebdbccfd0991b0479ddba10d46806588d660a4c7ace4f76cc534d62c7c3ef3074060989504b11a7876c51e66bb5ec780ddce889d780750cc5724e85
7
- data.tar.gz: 296412709b0ad51d9e4ee748d2116f07f940168aa00c7ad9494ff432fca532f81e7c996e833641c36417f94a319a82d012fa49665eb8b7f2e651b39419ba77b5
6
+ metadata.gz: b069aaabdcc6a10a941c7ecdff18ec69d57d6773275903b9b8f9e1192ec045d1b43d361e57e8203abffd77878b184ac43ae84a2b0cd771112124a58e4860c1d4
7
+ data.tar.gz: 66d71475ac439e52ab6982e676348547a90cfd3455f80a091dbf8fb7af777185fe9aff65c341fda2d0ec406cb217557fdbdaa513a6a666326128d9dfdd370965
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,8 +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)
291
+ end
292
+ # In case this does not succeed start the process again.
293
+ if @acks.include? auth_id
294
+ if @acks[auth_id][:waiting]
295
+ close
296
+ start_connection
297
+ end
298
+ @acks.delete(auth_id)
288
299
  end
289
300
  end
290
301
 
@@ -404,14 +415,18 @@ module SelfSDK
404
415
 
405
416
  # Authenticates current client on the websocket server.
406
417
  def authenticate
418
+ @auth_id = SecureRandom.uuid if @auth_id.nil?
419
+
407
420
  SelfSDK.logger.info "authenticating"
408
421
  send_raw Msgproto::Auth.new(
409
422
  type: Msgproto::MsgType::AUTH,
410
- id: "authentication",
423
+ id: @auth_id,
411
424
  token: @jwt.auth_token,
412
425
  device: @device_id,
413
426
  offset: @offset,
414
427
  )
428
+
429
+ @auth_id = nil
415
430
  end
416
431
 
417
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.164
4
+ version: 0.0.169
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aldgate Ventures