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 +4 -4
- data/lib/truthid/client.rb +28 -3
- data/lib/truthid/contracts.rb +26 -4
- data/lib/truthid/smart_account.rb +47 -0
- data/lib/truthid/truthid_account_bytecode.rb +9 -0
- data/lib/truthid/types.rb +15 -13
- data/lib/truthid.rb +2 -0
- metadata +17 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: fecbfed431048149689d79792b689f7df5c3ef5a60b7efd96b5b16ad3ab7ff40
|
|
4
|
+
data.tar.gz: c8c0a53212362081e3cf3c711395204febe67b77e4d9d2663886ad0e5d0957e4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 96e08a085335b776a54920714c384ee797fcf2eae83df5fd238885c6e80787e0e7df84af9dace2caaeef7a40c7263504089cbfa35a1c5ea1a8c0d918941a511d
|
|
7
|
+
data.tar.gz: 5fd1ef2baaed7952c85f649f7d77659e79dc98e5cf28b3537af0570abb6d6a8add908e4b4a67a27334b94da97713079d2d463af32e113a048ab7b90407804827
|
data/lib/truthid/client.rb
CHANGED
|
@@ -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
|
-
|
|
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 =
|
|
90
|
-
return SessionInfo.new(exists: false, revoked: false)
|
|
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
|
data/lib/truthid/contracts.rb
CHANGED
|
@@ -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" => "
|
|
5
|
-
"base-mainnet" => "
|
|
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" => "
|
|
39
|
-
"base-mainnet" => "
|
|
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
|
|
31
|
-
@nonce
|
|
32
|
-
@signature
|
|
33
|
-
@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:
|
|
39
|
-
nonce:
|
|
40
|
-
signature:
|
|
41
|
-
device_address:
|
|
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
|
|
49
|
-
DeviceStatus
|
|
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
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.
|
|
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:
|