truthid-sdk 0.1.0 → 0.2.1
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: 0a47574f1984f266aa065d72422ffe8648e4990e94131ad463dc990c4102e32f
|
|
4
|
+
data.tar.gz: c71783c7be86c06f884f9d89410fb08823d206b1c813273dc708b65728a7ae7f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c38083d861e3dd58245bde521d7192e588d03811cf05e284f25fb8a559c97bbe2c854b1f07150b9349b2a74e5519d1b5376097add764050a04099204fcbb6de7
|
|
7
|
+
data.tar.gz: c4ba696630c50f68f293a5f662feacd49e240c570b48202f43939cfeee4c4afdf26fd4494eaa2ea5f653e30077c3b1e065dfc6aa71cd1a200487975d2a1f92b3
|
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
|
+
"0x60c060405234801562000010575f80fd5b50604051620029e1380380620029e183398181016040528101906200003691906200040f565b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806200009c57505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80620000d357505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806200010a57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806200014157505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1562000179576040517fd3c1346900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050835f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050600160045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550505050505062000493565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620003d982620003ae565b9050919050565b620003eb81620003cd565b8114620003f6575f80fd5b50565b5f815190506200040981620003e0565b92915050565b5f805f805f60a086880312156200042b576200042a620003aa565b5b5f6200043a88828901620003f9565b95505060206200044d88828901620003f9565b94505060406200046088828901620003f9565b93505060606200047388828901620003f9565b92505060806200048688828901620003f9565b9150509295509295909350565b60805160a051612509620004d85f395f8181610e4a01528181610ecf0152818161131c015261150801525f818161043901528181610e6e01526114b101526125095ff3fe608060405260043610610101575f3560e01c80637fc29f4411610094578063b61d27f611610063578063b61d27f61461031c578063d6b2a11914610344578063de314b1914610380578063ea7f8d12146103aa578063f9a6bc47146103e657610108565b80637fc29f44146102785780638da5cb5b146102a0578063b0d691fe146102ca578063b111cb84146102f457610108565b806347e1da2a116100d057806347e1da2a146101d65780635ec5f611146101fe5780635efb870a146102265780636ff1c9bc1461025057610108565b8063134e18f41461010c57806319822f7c146101365780631b11092d146101725780631f7b6324146101ae57610108565b3661010857005b5f80fd5b348015610117575f80fd5b5061012061040e565b60405161012d9190611935565b60405180910390f35b348015610141575f80fd5b5061015c600480360381019061015791906119e8565b610436565b6040516101699190611a63565b60405180910390f35b34801561017d575f80fd5b5061019860048036038101906101939190611aa6565b610540565b6040516101a59190611aeb565b60405180910390f35b3480156101b9575f80fd5b506101d460048036038101906101cf9190611aa6565b61055d565b005b3480156101e1575f80fd5b506101fc60048036038101906101f79190611c0f565b61068a565b005b348015610209575f80fd5b50610224600480360381019061021f9190611cbf565b6107b8565b005b348015610231575f80fd5b5061023a610c24565b6040516102479190611935565b60405180910390f35b34801561025b575f80fd5b5061027660048036038101906102719190611aa6565b610c4b565b005b348015610283575f80fd5b5061029e60048036038101906102999190611aa6565b610da5565b005b3480156102ab575f80fd5b506102b4610e48565b6040516102c19190611935565b60405180910390f35b3480156102d5575f80fd5b506102de610e6c565b6040516102eb9190611935565b60405180910390f35b3480156102ff575f80fd5b5061031a60048036038101906103159190611aa6565b610e90565b005b348015610327575f80fd5b50610342600480360381019061033d9190611d64565b61107b565b005b34801561034f575f80fd5b5061036a60048036038101906103659190611dd5565b6110d7565b6040516103779190611ed7565b60405180910390f35b34801561038b575f80fd5b50610394611101565b6040516103a19190611935565b60405180910390f35b3480156103b5575f80fd5b506103d060048036038101906103cb9190611aa6565b611129565b6040516103dd9190611aeb565b60405180910390f35b3480156103f1575f80fd5b5061040c60048036038101906104079190611aa6565b611146565b005b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104bc576040517fd663742a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104c684846111e8565b90505f8214610539575f3373ffffffffffffffffffffffffffffffffffffffff16836040516104f490611f24565b5f6040518083038185875af1925050503d805f811461052e576040519150601f19603f3d011682016040523d82523d5f602084013e610533565b606091505b50509050505b9392505050565b6003602052805f5260405f205f915054906101000a900460ff1681565b6105656114af565b60035f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166105f057806040517f65c51f9b0000000000000000000000000000000000000000000000000000000081526004016105e79190611935565b60405180910390fd5b5f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f15c62ec158a6c18af42b447791266b9b0764ba2a6df610890d4da85c3d4185db60405160405180910390a250565b6106926114af565b81819050868690501415806106ad5750838390508686905014155b156106e4576040517fa24a13a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b868690508110156107af576107a287878381811061070757610706611f38565b5b905060200201602081019061071c9190611aa6565b86868481811061072f5761072e611f38565b5b9050602002013585858581811061074957610748611f38565b5b905060200281019061075b9190611f71565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f820116905080830192505050505050506115c8565b80806001019150506106e6565b50505050505050565b6107c06114af565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061082557505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8061085b57505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15610892576040517f7bfd2e8300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60045f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f60045f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f60045f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550825f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f7d0e095a647df85a97e599720d80b50880b2ecc31e150feed19d4cf7efb9ba3360405160405180910390a4505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cd1576040517f738a24b100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d36576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f479050610d53828260405180602001604052805f8152506115c8565b8173ffffffffffffffffffffffffffffffffffffffff167f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd969582604051610d999190611a63565b60405180910390a25050565b610dad6114af565b600160045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f5ce8465543f339c0f85c5850c82753bc1c889ba1a51e745ea6ba92ccb5929b9960405160405180910390a250565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610e986114af565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610f1d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15610f54576040517fb592bbbc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610fe057806040517ff517897c000000000000000000000000000000000000000000000000000000008152600401610fd79190611935565b60405180910390fd5b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f7f83670760ccf6df0d685c2ffa624d26ca757940c78361fcbbf187253055f95160405160405180910390a250565b6110836114af565b6110d1848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f820116905080830192505050505050506115c8565b50505050565b6060828260049080926110ec93929190611fdb565b8101906110f9919061215d565b905092915050565b5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6004602052805f5260405f205f915054906101000a900460ff1681565b61114e6114af565b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167ff4b028fa4bd9385c15dccd7fdd200fc185c66c07a48637084d0a410eef3319d660405160405180910390a250565b5f805f80611205868061010001906112009190611f71565b611648565b9250925092507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0825f1c118061124f5750601b8160ff161415801561124e5750601c8160ff1614155b5b1561126057600193505050506114a9565b5f856040516020016112729190612218565b6040516020818303038152906040528051906020012090505f6001828487876040515f81526020016040526040516112ad9493929190612267565b6020604051602081039080840390855afa1580156112cd573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361131a576001955050505050506114a9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361137a575f955050505050506114a9565b60035f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156113e457506113e38880606001906113de9190611f71565b6116a3565b5b1561149f575f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639b57a128826040518263ffffffff1660e01b81526004016114419190611935565b602060405180830381865afa15801561145c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061148091906122d4565b611492576001955050505050506114a9565b5f955050505050506114a9565b6001955050505050505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561155757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b801561158f57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156115c6576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f808473ffffffffffffffffffffffffffffffffffffffff1684846040516115f09190612361565b5f6040518083038185875af1925050503d805f811461162a576040519150601f19603f3d011682016040523d82523d5f602084013e61162f565b606091505b50915091508161164157805160208201fd5b5050505050565b5f805f60418585905014611688576040517f4be6321b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b843592506020850135915060408501355f1a90509250925092565b5f60048383905010156116b8575f9050611865565b5f8335905063b61d27f660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603611739575f73ffffffffffffffffffffffffffffffffffffffff60048601351690506117308161186b565b92505050611865565b6347e1da2a60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603611860573073ffffffffffffffffffffffffffffffffffffffff1663d6b2a11985856040518363ffffffff1660e01b81526004016117c09291906123c1565b5f60405180830381865afa9250505080156117fd57506040513d5f823e3d601f19601f820116820180604052508101906117fa919061248c565b60015b61180a575f915050611865565b5f5b81518110156118545761183882828151811061182b5761182a611f38565b5b602002602001015161186b565b611847575f9350505050611865565b808060010191505061180c565b50600192505050611865565b5f9150505b92915050565b5f3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156118ef575060045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b9050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61191f826118f6565b9050919050565b61192f81611915565b82525050565b5f6020820190506119485f830184611926565b92915050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f61012082840312156119795761197861195f565b5b81905092915050565b5f819050919050565b61199481611982565b811461199e575f80fd5b50565b5f813590506119af8161198b565b92915050565b5f819050919050565b6119c7816119b5565b81146119d1575f80fd5b50565b5f813590506119e2816119be565b92915050565b5f805f606084860312156119ff576119fe611957565b5b5f84013567ffffffffffffffff811115611a1c57611a1b61195b565b5b611a2886828701611963565b9350506020611a39868287016119a1565b9250506040611a4a868287016119d4565b9150509250925092565b611a5d816119b5565b82525050565b5f602082019050611a765f830184611a54565b92915050565b611a8581611915565b8114611a8f575f80fd5b50565b5f81359050611aa081611a7c565b92915050565b5f60208284031215611abb57611aba611957565b5b5f611ac884828501611a92565b91505092915050565b5f8115159050919050565b611ae581611ad1565b82525050565b5f602082019050611afe5f830184611adc565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112611b2557611b24611b04565b5b8235905067ffffffffffffffff811115611b4257611b41611b08565b5b602083019150836020820283011115611b5e57611b5d611b0c565b5b9250929050565b5f8083601f840112611b7a57611b79611b04565b5b8235905067ffffffffffffffff811115611b9757611b96611b08565b5b602083019150836020820283011115611bb357611bb2611b0c565b5b9250929050565b5f8083601f840112611bcf57611bce611b04565b5b8235905067ffffffffffffffff811115611bec57611beb611b08565b5b602083019150836020820283011115611c0857611c07611b0c565b5b9250929050565b5f805f805f8060608789031215611c2957611c28611957565b5b5f87013567ffffffffffffffff811115611c4657611c4561195b565b5b611c5289828a01611b10565b9650965050602087013567ffffffffffffffff811115611c7557611c7461195b565b5b611c8189828a01611b65565b9450945050604087013567ffffffffffffffff811115611ca457611ca361195b565b5b611cb089828a01611bba565b92509250509295509295509295565b5f805f60608486031215611cd657611cd5611957565b5b5f611ce386828701611a92565b9350506020611cf486828701611a92565b9250506040611d0586828701611a92565b9150509250925092565b5f8083601f840112611d2457611d23611b04565b5b8235905067ffffffffffffffff811115611d4157611d40611b08565b5b602083019150836001820283011115611d5d57611d5c611b0c565b5b9250929050565b5f805f8060608587031215611d7c57611d7b611957565b5b5f611d8987828801611a92565b9450506020611d9a878288016119d4565b935050604085013567ffffffffffffffff811115611dbb57611dba61195b565b5b611dc787828801611d0f565b925092505092959194509250565b5f8060208385031215611deb57611dea611957565b5b5f83013567ffffffffffffffff811115611e0857611e0761195b565b5b611e1485828601611d0f565b92509250509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611e5281611915565b82525050565b5f611e638383611e49565b60208301905092915050565b5f602082019050919050565b5f611e8582611e20565b611e8f8185611e2a565b9350611e9a83611e3a565b805f5b83811015611eca578151611eb18882611e58565b9750611ebc83611e6f565b925050600181019050611e9d565b5085935050505092915050565b5f6020820190508181035f830152611eef8184611e7b565b905092915050565b5f81905092915050565b50565b5f611f0f5f83611ef7565b9150611f1a82611f01565b5f82019050919050565b5f611f2e82611f04565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f80fd5b5f80fd5b5f80fd5b5f8083356001602003843603038112611f8d57611f8c611f65565b5b80840192508235915067ffffffffffffffff821115611faf57611fae611f69565b5b602083019250600182023603831315611fcb57611fca611f6d565b5b509250929050565b5f80fd5b5f80fd5b5f8085851115611fee57611fed611fd3565b5b83861115611fff57611ffe611fd7565b5b6001850283019150848603905094509492505050565b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61205b82612015565b810181811067ffffffffffffffff8211171561207a57612079612025565b5b80604052505050565b5f61208c61194e565b90506120988282612052565b919050565b5f67ffffffffffffffff8211156120b7576120b6612025565b5b602082029050602081019050919050565b5f6120da6120d58461209d565b612083565b905080838252602082019050602084028301858111156120fd576120fc611b0c565b5b835b8181101561212657806121128882611a92565b8452602084019350506020810190506120ff565b5050509392505050565b5f82601f83011261214457612143611b04565b5b81356121548482602086016120c8565b91505092915050565b5f6020828403121561217257612171611957565b5b5f82013567ffffffffffffffff81111561218f5761218e61195b565b5b61219b84828501612130565b91505092915050565b5f81905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f82015250565b5f6121e2601c836121a4565b91506121ed826121ae565b601c82019050919050565b5f819050919050565b61221261220d82611982565b6121f8565b82525050565b5f612222826121d6565b915061222e8284612201565b60208201915081905092915050565b61224681611982565b82525050565b5f60ff82169050919050565b6122618161224c565b82525050565b5f60808201905061227a5f83018761223d565b6122876020830186612258565b612294604083018561223d565b6122a1606083018461223d565b95945050505050565b6122b381611ad1565b81146122bd575f80fd5b50565b5f815190506122ce816122aa565b92915050565b5f602082840312156122e9576122e8611957565b5b5f6122f6848285016122c0565b91505092915050565b5f81519050919050565b5f5b8381101561232657808201518184015260208101905061230b565b5f8484015250505050565b5f61233b826122ff565b6123458185611ef7565b9350612355818560208601612309565b80840191505092915050565b5f61236c8284612331565b915081905092915050565b5f82825260208201905092915050565b828183375f83830152505050565b5f6123a08385612377565b93506123ad838584612387565b6123b683612015565b840190509392505050565b5f6020820190508181035f8301526123da818486612395565b90509392505050565b5f815190506123f181611a7c565b92915050565b5f6124096124048461209d565b612083565b9050808382526020820190506020840283018581111561242c5761242b611b0c565b5b835b81811015612455578061244188826123e3565b84526020840193505060208101905061242e565b5050509392505050565b5f82601f83011261247357612472611b04565b5b81516124838482602086016123f7565b91505092915050565b5f602082840312156124a1576124a0611957565b5b5f82015167ffffffffffffffff8111156124be576124bd61195b565b5b6124ca8482850161245f565b9150509291505056fea26469706673582212201fc328573d5d4c2c6d307cddb9f875f265e9a619c64bd7e27371e61aa607493e64736f6c63430008180033".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.1
|
|
4
|
+
version: 0.2.1
|
|
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:
|