truthid-sdk 0.1.0 → 0.2.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: c3de2db41a1a8ad39fefae599250e957b77ae4f8b37ed27cf7db90331a6b2d38
4
- data.tar.gz: 3df13b1958fbb7cd0daa4896e3e74a97e28103fcfdf550b1ab36d527d135b6ae
3
+ metadata.gz: fecbfed431048149689d79792b689f7df5c3ef5a60b7efd96b5b16ad3ab7ff40
4
+ data.tar.gz: c8c0a53212362081e3cf3c711395204febe67b77e4d9d2663886ad0e5d0957e4
5
5
  SHA512:
6
- metadata.gz: ee362147ab288e09c41a734d1206f4b3dcf48c440cec13c28bbdff54da1ceb420ff66723eb3a1d6a92adba8f817171bfde9c25a48b84c19274848e35cdc986b5
7
- data.tar.gz: 41d7cb1bbf8bfc650802963923635bebfab7314707306cea33ee96a868e6a07dfad1c7e83b79deb7f481c98f9d0fedab1e8d477cbdf3e250299082bf2078202c
6
+ metadata.gz: 96e08a085335b776a54920714c384ee797fcf2eae83df5fd238885c6e80787e0e7df84af9dace2caaeef7a40c7263504089cbfa35a1c5ea1a8c0d918941a511d
7
+ data.tar.gz: 5fd1ef2baaed7952c85f649f7d77659e79dc98e5cf28b3537af0570abb6d6a8add908e4b4a67a27334b94da97713079d2d463af32e113a048ab7b90407804827
@@ -13,6 +13,7 @@ module TruthID
13
13
  }.freeze
14
14
 
15
15
  def initialize(network: "base-mainnet", rpc_url: nil)
16
+ @network = network
16
17
  url = rpc_url || RPC_URLS.fetch(network)
17
18
  @rpc = Eth::Client.create(url)
18
19
  @devices = Eth::Contract.from_abi(
@@ -57,7 +58,13 @@ module TruthID
57
58
  # JSON.generate já produz JSON compacto (sem espaços) — compatível com Dart e JS
58
59
  message = JSON.generate(challenge.to_h)
59
60
  begin
60
- signer = Eth::Signature.personal_recover(message, response.signature)
61
+ # personal_recover devolve a chave pública descomprimida (65 bytes),
62
+ # não um endereço — precisa do passo extra de derivar o endereço
63
+ # (keccak256 da chave pública) antes de comparar. Achado real: sem
64
+ # esse passo, essa comparação nunca batia com nenhum device_address
65
+ # de verdade, rejeitando toda assinatura válida.
66
+ public_key = Eth::Signature.personal_recover(message, response.signature)
67
+ signer = Eth::Util.public_key_to_address(public_key).to_s
61
68
  rescue => e
62
69
  return VerifyAuthResult.new(valid: false, reason: "Invalid signature format")
63
70
  end
@@ -82,12 +89,23 @@ module TruthID
82
89
  )
83
90
  end
84
91
 
92
+ # getSession reverte on-chain quando o hash é desconhecido — a única forma dessa
93
+ # chamada falhar contra um RPC funcionando, então qualquer erro aqui é tratado
94
+ # como "ainda não existe" em vez de propagado.
95
+ def read_session(hash_bytes)
96
+ session = @rpc.call(@sessions, "getSession", hash_bytes)
97
+ session[4] ? session : nil # session[4] == exists
98
+ rescue StandardError
99
+ nil
100
+ end
101
+ private :read_session
102
+
85
103
  def verify_session(session_hash)
86
104
  # bytes32: converte hex string → 32 bytes binários
87
105
  hash_bytes = [session_hash.delete_prefix("0x")].pack("H*")
88
106
 
89
- session = @rpc.call(@sessions, "getSession", hash_bytes)
90
- return SessionInfo.new(exists: false, revoked: false) unless session[4] # exists
107
+ session = read_session(hash_bytes)
108
+ return SessionInfo.new(exists: false, revoked: false) if session.nil?
91
109
 
92
110
  revoked = @rpc.call(@sessions, "isSessionRevoked", hash_bytes)
93
111
 
@@ -100,6 +118,13 @@ module TruthID
100
118
  )
101
119
  end
102
120
 
121
+ # Prevê o endereço da smart account (controller) pra uma owner key via
122
+ # CREATE2, antes da conta ser de fato deployada on-chain — computação
123
+ # local pura, sem chamada de rede. Ver smart_account.rb pro algoritmo.
124
+ def compute_smart_account_address(ledger_address, index: 0)
125
+ TruthID.compute_smart_account_address(ledger_address, network: @network, index: index)
126
+ end
127
+
103
128
  def check_device_status(device_pub_key)
104
129
  device = @rpc.call(@devices, "getDevice", device_pub_key)
105
130
  return DeviceStatus.new(exists: false, active: false) unless device[5] # exists
@@ -1,8 +1,30 @@
1
1
  module TruthID
2
2
  module Contracts
3
+ IDENTITY_REGISTRY_ADDRESSES = {
4
+ "base-sepolia" => "0xb56DbCB7580c097d3f64808064C2d5609dD6B243",
5
+ "base-mainnet" => "0x97787D6EE3EfD76962dc7E3Bf143E659D9961962"
6
+ }.freeze
7
+
8
+ # Immutables of the TruthIDAccountFactory (ERC-4337 smart account), used
9
+ # to predict a controller address via CREATE2 before it's ever deployed —
10
+ # see smart_account.rb. Same source as
11
+ # desktop/src/config/truthidAccount.ts.
12
+ SMART_ACCOUNT_FACTORY_ADDRESSES = {
13
+ "base-sepolia" => "0xc4Ca3A79BAb993C4B7cFD312C80c20b2182F8c1e",
14
+ "base-mainnet" => "0xc2C86cB7d8694EcA8BaAdD95B14842E8643aB262"
15
+ }.freeze
16
+
17
+ RECOVERY_MANAGER_ADDRESSES = {
18
+ "base-sepolia" => "0x97787D6EE3EfD76962dc7E3Bf143E659D9961962",
19
+ "base-mainnet" => "0x42Ca394c23aB027e877B9900B384f59E2Af23470"
20
+ }.freeze
21
+
22
+ # ERC-4337 EntryPoint v0.7 — same canonical singleton address on every chain.
23
+ ENTRY_POINT_V07_ADDRESS = "0x0000000071727De22E5E9d8BAf0edAc6f37da032".freeze
24
+
3
25
  DEVICE_REGISTRY_ADDRESSES = {
4
- "base-sepolia" => "0x225c67a98c9D675fE595ae05a2F9249C34d9C60a",
5
- "base-mainnet" => "0x4A7a307cb6872bde24BAf3E9de2BeC3Ddd03e144"
26
+ "base-sepolia" => "0xe40e10627D307B0994f1856584bcc5DC323a4330",
27
+ "base-mainnet" => "0x937702CBABDab0EEBD1A29f0a7A658FeF4582543"
6
28
  }.freeze
7
29
  DEVICE_REGISTRY_ABI = [
8
30
  {
@@ -35,8 +57,8 @@ module TruthID
35
57
  ].freeze
36
58
 
37
59
  SESSION_REGISTRY_ADDRESSES = {
38
- "base-sepolia" => "0xdeD2Ad865069CA6546172926540D3A3Aa73C1CA6",
39
- "base-mainnet" => "0x24074587a2aFB3aa5491361BB0a5eBee90797D1B"
60
+ "base-sepolia" => "0xc2C86cB7d8694EcA8BaAdD95B14842E8643aB262",
61
+ "base-mainnet" => "0x8C65527eDA3ce7754Bf87B34aC4ec8ce74D647e2"
40
62
  }.freeze
41
63
  SESSION_REGISTRY_ABI = [
42
64
  {
@@ -0,0 +1,47 @@
1
+ require "eth"
2
+
3
+ require_relative "contracts"
4
+ require_relative "truthid_account_bytecode"
5
+
6
+ module TruthID
7
+ # Predicts a TruthIDAccount's address via CREATE2 before it's deployed —
8
+ # pure local computation, no RPC call needed. Same algorithm as
9
+ # desktop/src/utils/computeSmartAccountAddress.ts and the TypeScript/Python
10
+ # SDKs' compute_smart_account_address, ported here so integrators don't
11
+ # need a TruthID server (or the desktop app) to know a user's smart account
12
+ # address ahead of time.
13
+ def self.compute_smart_account_address(ledger_address, network: "base-mainnet", index: 0)
14
+ factory_address = Contracts::SMART_ACCOUNT_FACTORY_ADDRESSES.fetch(network)
15
+ ledger_checksummed = Eth::Address.new(ledger_address).checksummed
16
+
17
+ # Must be packed (Eth::Abi.encode(..., true)), not the default ABI
18
+ # encoding — the contract uses abi.encodePacked(owner_, index) (address
19
+ # with no left-pad, 20 bytes), not abi.encode (address left-padded to 32
20
+ # bytes). Using the wrong encoding here produces a different salt than
21
+ # the factory computes on-chain, yielding a controller address that
22
+ # never matches reality.
23
+ salt = Eth::Util.keccak256(
24
+ Eth::Abi.encode(["address", "uint256"], [ledger_checksummed, index], true)
25
+ )
26
+
27
+ constructor_args = Eth::Abi.encode(
28
+ ["address", "address", "address", "address", "address"],
29
+ [
30
+ Contracts::ENTRY_POINT_V07_ADDRESS,
31
+ Contracts::DEVICE_REGISTRY_ADDRESSES.fetch(network),
32
+ Contracts::IDENTITY_REGISTRY_ADDRESSES.fetch(network),
33
+ Contracts::RECOVERY_MANAGER_ADDRESSES.fetch(network),
34
+ ledger_checksummed,
35
+ ]
36
+ )
37
+
38
+ creation_code_bytes = Eth::Util.hex_to_bin(TRUTHID_ACCOUNT_CREATION_CODE)
39
+ init_code_hash = Eth::Util.keccak256(creation_code_bytes + constructor_args)
40
+
41
+ factory_bytes = Eth::Util.hex_to_bin(Eth::Address.new(factory_address).checksummed)
42
+ create2_input = "\xff".b + factory_bytes + salt + init_code_hash
43
+ address_hash = Eth::Util.keccak256(create2_input)
44
+
45
+ Eth::Address.new("0x" + address_hash[-20..].unpack1("H*")).checksummed
46
+ end
47
+ end
@@ -0,0 +1,9 @@
1
+ module TruthID
2
+ # Creation code (constructor + runtime) of TruthIDAccount.sol — copied
3
+ # verbatim from desktop/src/config/truthidAccount.ts, the source of truth.
4
+ # Keep the two in sync whenever a new smart account implementation is
5
+ # deployed behind the factory (a new bytecode means a different CREATE2
6
+ # address for every owner).
7
+ TRUTHID_ACCOUNT_CREATION_CODE =
8
+ "0x61012060405234801562000011575f80fd5b50604051620023e0380380620023e08339818101604052810190620000379190620003eb565b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806200009d57505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80620000d457505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806200010b57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806200014257505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156200017a576040517fd3c1346900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508373ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250508273ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff166101008173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506001805f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050505050506200046f565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620003b5826200038a565b9050919050565b620003c781620003a9565b8114620003d2575f80fd5b50565b5f81519050620003e581620003bc565b92915050565b5f805f805f60a0868803121562000407576200040662000386565b5b5f6200041688828901620003d5565b95505060206200042988828901620003d5565b94505060406200043c88828901620003d5565b93505060606200044f88828901620003d5565b92505060806200046288828901620003d5565b9150509295509295909350565b60805160a05160c05160e05161010051611f09620004d75f395f81816107a40152610c5601525f6103dd01525f61078001525f818161099f01528181610a2401528181610e6b0152610fad01525f8181610402015281816109c30152610f560152611f095ff3fe6080604052600436106100f6575f3560e01c80638da5cb5b11610089578063d6b2a11911610058578063d6b2a11914610311578063de314b191461034d578063ea7f8d1214610377578063f9a6bc47146103b3576100fd565b80638da5cb5b1461026d578063b0d691fe14610297578063b111cb84146102c1578063b61d27f6146102e9576100fd565b806347e1da2a116100c557806347e1da2a146101cb5780635efb870a146101f35780636ff1c9bc1461021d5780637fc29f4414610245576100fd565b8063134e18f41461010157806319822f7c1461012b5780631b11092d146101675780631f7b6324146101a3576100fd565b366100fd57005b5f80fd5b34801561010c575f80fd5b506101156103db565b60405161012291906113da565b60405180910390f35b348015610136575f80fd5b50610151600480360381019061014c919061148d565b6103ff565b60405161015e9190611508565b60405180910390f35b348015610172575f80fd5b5061018d6004803603810190610188919061154b565b610509565b60405161019a9190611590565b60405180910390f35b3480156101ae575f80fd5b506101c960048036038101906101c4919061154b565b610525565b005b3480156101d6575f80fd5b506101f160048036038101906101ec91906116b4565b610650565b005b3480156101fe575f80fd5b5061020761077e565b60405161021491906113da565b60405180910390f35b348015610228575f80fd5b50610243600480360381019061023e919061154b565b6107a2565b005b348015610250575f80fd5b5061026b6004803603810190610266919061154b565b6108fb565b005b348015610278575f80fd5b5061028161099d565b60405161028e91906113da565b60405180910390f35b3480156102a2575f80fd5b506102ab6109c1565b6040516102b891906113da565b60405180910390f35b3480156102cc575f80fd5b506102e760048036038101906102e2919061154b565b6109e5565b005b3480156102f4575f80fd5b5061030f600480360381019061030a91906117b9565b610bce565b005b34801561031c575f80fd5b506103376004803603810190610332919061182a565b610c2a565b604051610344919061192c565b60405180910390f35b348015610358575f80fd5b50610361610c54565b60405161036e91906113da565b60405180910390f35b348015610382575f80fd5b5061039d6004803603810190610398919061154b565b610c78565b6040516103aa9190611590565b60405180910390f35b3480156103be575f80fd5b506103d960048036038101906103d4919061154b565b610c95565b005b7f000000000000000000000000000000000000000000000000000000000000000081565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610485576040517fd663742a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61048f8484610d37565b90505f8214610502575f3373ffffffffffffffffffffffffffffffffffffffff16836040516104bd90611979565b5f6040518083038185875af1925050503d805f81146104f7576040519150601f19603f3d011682016040523d82523d5f602084013e6104fc565b606091505b50509050505b9392505050565b5f602052805f5260405f205f915054906101000a900460ff1681565b61052d610f54565b5f808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166105b757806040517f65c51f9b0000000000000000000000000000000000000000000000000000000081526004016105ae91906113da565b60405180910390fd5b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f15c62ec158a6c18af42b447791266b9b0764ba2a6df610890d4da85c3d4185db60405160405180910390a250565b610658610f54565b81819050868690501415806106735750838390508686905014155b156106aa576040517fa24a13a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b86869050811015610775576107688787838181106106cd576106cc61198d565b5b90506020020160208101906106e2919061154b565b8686848181106106f5576106f461198d565b5b9050602002013585858581811061070f5761070e61198d565b5b905060200281019061072191906119c6565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f8201169050808301925050505050505061106d565b80806001019150506106ac565b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610827576040517f738a24b100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361088c576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f4790506108a9828260405180602001604052805f81525061106d565b8173ffffffffffffffffffffffffffffffffffffffff167f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd9695826040516108ef9190611508565b60405180910390a25050565b610903610f54565b6001805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f5ce8465543f339c0f85c5850c82753bc1c889ba1a51e745ea6ba92ccb5929b9960405160405180910390a250565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6109ed610f54565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610a7257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15610aa9576040517fb592bbbc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610b3457806040517ff517897c000000000000000000000000000000000000000000000000000000008152600401610b2b91906113da565b60405180910390fd5b60015f808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f7f83670760ccf6df0d685c2ffa624d26ca757940c78361fcbbf187253055f95160405160405180910390a250565b610bd6610f54565b610c24848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f8201169050808301925050505050505061106d565b50505050565b606082826004908092610c3f93929190611a30565b810190610c4c9190611bb2565b905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001602052805f5260405f205f915054906101000a900460ff1681565b610c9d610f54565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167ff4b028fa4bd9385c15dccd7fdd200fc185c66c07a48637084d0a410eef3319d660405160405180910390a250565b5f805f80610d5486806101000190610d4f91906119c6565b6110ed565b9250925092507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0825f1c1180610d9e5750601b8160ff1614158015610d9d5750601c8160ff1614155b5b15610daf5760019350505050610f4e565b5f85604051602001610dc19190611c6d565b6040516020818303038152906040528051906020012090505f6001828487876040515f8152602001604052604051610dfc9493929190611cbc565b6020604051602081039080840390855afa158015610e1c573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e6957600195505050505050610f4e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ec9575f95505050505050610f4e565b5f808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015610f325750610f31888060600190610f2c91906119c6565b611148565b5b15610f44575f95505050505050610f4e565b6001955050505050505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610ffc57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b801561103457503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b1561106b576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f808473ffffffffffffffffffffffffffffffffffffffff1684846040516110959190611d61565b5f6040518083038185875af1925050503d805f81146110cf576040519150601f19603f3d011682016040523d82523d5f602084013e6110d4565b606091505b5091509150816110e657805160208201fd5b5050505050565b5f805f6041858590501461112d576040517f4be6321b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b843592506020850135915060408501355f1a90509250925092565b5f600483839050101561115d575f905061130a565b5f8335905063b61d27f660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036111de575f73ffffffffffffffffffffffffffffffffffffffff60048601351690506111d581611310565b9250505061130a565b6347e1da2a60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603611305573073ffffffffffffffffffffffffffffffffffffffff1663d6b2a11985856040518363ffffffff1660e01b8152600401611265929190611dc1565b5f60405180830381865afa9250505080156112a257506040513d5f823e3d601f19601f8201168201806040525081019061129f9190611e8c565b60015b6112af575f91505061130a565b5f5b81518110156112f9576112dd8282815181106112d0576112cf61198d565b5b6020026020010151611310565b6112ec575f935050505061130a565b80806001019150506112b1565b5060019250505061130a565b5f9150505b92915050565b5f3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611394575060015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b9050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6113c48261139b565b9050919050565b6113d4816113ba565b82525050565b5f6020820190506113ed5f8301846113cb565b92915050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f610120828403121561141e5761141d611404565b5b81905092915050565b5f819050919050565b61143981611427565b8114611443575f80fd5b50565b5f8135905061145481611430565b92915050565b5f819050919050565b61146c8161145a565b8114611476575f80fd5b50565b5f8135905061148781611463565b92915050565b5f805f606084860312156114a4576114a36113fc565b5b5f84013567ffffffffffffffff8111156114c1576114c0611400565b5b6114cd86828701611408565b93505060206114de86828701611446565b92505060406114ef86828701611479565b9150509250925092565b6115028161145a565b82525050565b5f60208201905061151b5f8301846114f9565b92915050565b61152a816113ba565b8114611534575f80fd5b50565b5f8135905061154581611521565b92915050565b5f602082840312156115605761155f6113fc565b5b5f61156d84828501611537565b91505092915050565b5f8115159050919050565b61158a81611576565b82525050565b5f6020820190506115a35f830184611581565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126115ca576115c96115a9565b5b8235905067ffffffffffffffff8111156115e7576115e66115ad565b5b602083019150836020820283011115611603576116026115b1565b5b9250929050565b5f8083601f84011261161f5761161e6115a9565b5b8235905067ffffffffffffffff81111561163c5761163b6115ad565b5b602083019150836020820283011115611658576116576115b1565b5b9250929050565b5f8083601f840112611674576116736115a9565b5b8235905067ffffffffffffffff811115611691576116906115ad565b5b6020830191508360208202830111156116ad576116ac6115b1565b5b9250929050565b5f805f805f80606087890312156116ce576116cd6113fc565b5b5f87013567ffffffffffffffff8111156116eb576116ea611400565b5b6116f789828a016115b5565b9650965050602087013567ffffffffffffffff81111561171a57611719611400565b5b61172689828a0161160a565b9450945050604087013567ffffffffffffffff81111561174957611748611400565b5b61175589828a0161165f565b92509250509295509295509295565b5f8083601f840112611779576117786115a9565b5b8235905067ffffffffffffffff811115611796576117956115ad565b5b6020830191508360018202830111156117b2576117b16115b1565b5b9250929050565b5f805f80606085870312156117d1576117d06113fc565b5b5f6117de87828801611537565b94505060206117ef87828801611479565b935050604085013567ffffffffffffffff8111156118105761180f611400565b5b61181c87828801611764565b925092505092959194509250565b5f80602083850312156118405761183f6113fc565b5b5f83013567ffffffffffffffff81111561185d5761185c611400565b5b61186985828601611764565b92509250509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6118a7816113ba565b82525050565b5f6118b8838361189e565b60208301905092915050565b5f602082019050919050565b5f6118da82611875565b6118e4818561187f565b93506118ef8361188f565b805f5b8381101561191f57815161190688826118ad565b9750611911836118c4565b9250506001810190506118f2565b5085935050505092915050565b5f6020820190508181035f83015261194481846118d0565b905092915050565b5f81905092915050565b50565b5f6119645f8361194c565b915061196f82611956565b5f82019050919050565b5f61198382611959565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f80fd5b5f80fd5b5f80fd5b5f80833560016020038436030381126119e2576119e16119ba565b5b80840192508235915067ffffffffffffffff821115611a0457611a036119be565b5b602083019250600182023603831315611a2057611a1f6119c2565b5b509250929050565b5f80fd5b5f80fd5b5f8085851115611a4357611a42611a28565b5b83861115611a5457611a53611a2c565b5b6001850283019150848603905094509492505050565b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611ab082611a6a565b810181811067ffffffffffffffff82111715611acf57611ace611a7a565b5b80604052505050565b5f611ae16113f3565b9050611aed8282611aa7565b919050565b5f67ffffffffffffffff821115611b0c57611b0b611a7a565b5b602082029050602081019050919050565b5f611b2f611b2a84611af2565b611ad8565b90508083825260208201905060208402830185811115611b5257611b516115b1565b5b835b81811015611b7b5780611b678882611537565b845260208401935050602081019050611b54565b5050509392505050565b5f82601f830112611b9957611b986115a9565b5b8135611ba9848260208601611b1d565b91505092915050565b5f60208284031215611bc757611bc66113fc565b5b5f82013567ffffffffffffffff811115611be457611be3611400565b5b611bf084828501611b85565b91505092915050565b5f81905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f82015250565b5f611c37601c83611bf9565b9150611c4282611c03565b601c82019050919050565b5f819050919050565b611c67611c6282611427565b611c4d565b82525050565b5f611c7782611c2b565b9150611c838284611c56565b60208201915081905092915050565b611c9b81611427565b82525050565b5f60ff82169050919050565b611cb681611ca1565b82525050565b5f608082019050611ccf5f830187611c92565b611cdc6020830186611cad565b611ce96040830185611c92565b611cf66060830184611c92565b95945050505050565b5f81519050919050565b5f5b83811015611d26578082015181840152602081019050611d0b565b5f8484015250505050565b5f611d3b82611cff565b611d45818561194c565b9350611d55818560208601611d09565b80840191505092915050565b5f611d6c8284611d31565b915081905092915050565b5f82825260208201905092915050565b828183375f83830152505050565b5f611da08385611d77565b9350611dad838584611d87565b611db683611a6a565b840190509392505050565b5f6020820190508181035f830152611dda818486611d95565b90509392505050565b5f81519050611df181611521565b92915050565b5f611e09611e0484611af2565b611ad8565b90508083825260208201905060208402830185811115611e2c57611e2b6115b1565b5b835b81811015611e555780611e418882611de3565b845260208401935050602081019050611e2e565b5050509392505050565b5f82601f830112611e7357611e726115a9565b5b8151611e83848260208601611df7565b91505092915050565b5f60208284031215611ea157611ea06113fc565b5b5f82015167ffffffffffffffff811115611ebe57611ebd611400565b5b611eca84828501611e5f565b9150509291505056fea26469706673582212207ed351db470b125a7f8ea3b2f7f7a46410cd7e5246993e7ef2c6d6b50035072e64736f6c63430008180033".freeze
9
+ end
data/lib/truthid/types.rb CHANGED
@@ -24,27 +24,29 @@ module TruthID
24
24
 
25
25
  # AuthResponse é o que chega do mobile (chaves camelCase do JSON mapeadas manualmente)
26
26
  class AuthResponse
27
- attr_reader :approved, :nonce, :signature, :device_address
28
-
29
- def initialize(approved:, nonce:, signature:, device_address:)
30
- @approved = approved
31
- @nonce = nonce
32
- @signature = signature
33
- @device_address = device_address
27
+ attr_reader :approved, :nonce, :signature, :device_address, :session_signature
28
+
29
+ def initialize(approved:, nonce:, signature:, device_address:, session_signature: nil)
30
+ @approved = approved
31
+ @nonce = nonce
32
+ @signature = signature
33
+ @device_address = device_address
34
+ @session_signature = session_signature
34
35
  end
35
36
 
36
37
  def self.from_hash(h)
37
38
  new(
38
- approved: h["approved"],
39
- nonce: h["nonce"],
40
- signature: h["signature"],
41
- device_address: h["deviceAddress"]
39
+ approved: h["approved"],
40
+ nonce: h["nonce"],
41
+ signature: h["signature"],
42
+ device_address: h["deviceAddress"],
43
+ session_signature: h["sessionSignature"]
42
44
  )
43
45
  end
44
46
  end
45
47
 
46
48
  # Tipos de resultado: snake_case, sem necessidade de conversão JSON
47
49
  VerifyAuthResult = Struct.new(:valid, :identity_id, :device_address, :reason, keyword_init: true)
48
- SessionInfo = Struct.new(:exists, :revoked, :identity_id, :device_pub_key, :created_at, keyword_init: true)
49
- DeviceStatus = Struct.new(:exists, :active, :label, :identity_id, :added_at, keyword_init: true)
50
+ SessionInfo = Struct.new(:exists, :revoked, :identity_id, :device_pub_key, :created_at, keyword_init: true)
51
+ DeviceStatus = Struct.new(:exists, :active, :label, :identity_id, :added_at, keyword_init: true)
50
52
  end
data/lib/truthid.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  require_relative "truthid/contracts"
2
2
  require_relative "truthid/types"
3
+ require_relative "truthid/truthid_account_bytecode"
4
+ require_relative "truthid/smart_account"
3
5
  require_relative "truthid/client"
4
6
 
5
7
  module TruthID
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: truthid-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - masterlxz
@@ -23,6 +23,20 @@ dependencies:
23
23
  - - "~>"
24
24
  - !ruby/object:Gem::Version
25
25
  version: '0.5'
26
+ - !ruby/object:Gem::Dependency
27
+ name: rspec
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '3.13'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '3.13'
26
40
  description: TruthID passwordless, decentralized authentication SDK for Ruby. No TruthID-operated
27
41
  server, no passwords, no third-party login.
28
42
  executables: []
@@ -34,6 +48,8 @@ files:
34
48
  - lib/truthid.rb
35
49
  - lib/truthid/client.rb
36
50
  - lib/truthid/contracts.rb
51
+ - lib/truthid/smart_account.rb
52
+ - lib/truthid/truthid_account_bytecode.rb
37
53
  - lib/truthid/types.rb
38
54
  homepage: https://github.com/masterlxz/truthid/tree/main/sdk/ruby#readme
39
55
  licenses: