1212 X25519PublicKey ,
1313)
1414from sqlalchemy import delete , insert , select
15- from sqlalchemy .orm import Session , contains_eager
15+ from sqlalchemy .orm import Session
1616
1717from db import get_session
1818from lib_relaysms_payload_specs .generated import relaysms_spec_payload as rrs
@@ -36,35 +36,33 @@ def get_keys_for_decryption(
3636 Fetch token and all necessary keys for decryption.
3737 Returns (Token, TokenHash, ss_kid, es_kid, es_kid_pk, ec_kid_pk).
3838 """
39- stmt = (
40- select (Token )
41- .join (Token .token_hash )
42- .join (TokenHash .server_keys )
43- .join (TokenHash .client_keys )
44- .where (Token .token_id == token_id_bytes )
45- .where (ServerEphemeralKey .key_index == key_id )
46- .where (ClientEphemeralKey .key_index == key_id )
47- .options (
48- contains_eager (Token .token_hash ).contains_eager (TokenHash .server_keys ),
49- contains_eager (Token .token_hash ).contains_eager (TokenHash .client_keys ),
50- )
51- )
52-
53- token = session .scalars (stmt ).first ()
39+ token = session .scalar (select (Token ).where (Token .token_id == token_id_bytes ))
5440 if not token :
55- raise ValueError ("Token or associated keys not found" )
41+ raise ValueError ("token not found" )
5642
57- token_hash_obj = token .token_hash
43+ token_hash_obj = session .scalar (
44+ select (TokenHash ).where (TokenHash .id == token .token_hash_id )
45+ )
5846 if not token_hash_obj :
59- raise ValueError ("Token hash not found" )
47+ raise ValueError ("token hash not found" )
6048
61- if not token_hash_obj .server_keys :
62- raise ValueError (f"Server ephemeral key not found for kid { key_id } " )
63- se_key = token_hash_obj .server_keys [0 ]
49+ se_key = session .scalar (
50+ select (ServerEphemeralKey ).where (
51+ ServerEphemeralKey .token_hash_id == token_hash_obj .id ,
52+ ServerEphemeralKey .key_index == key_id ,
53+ )
54+ )
55+ if not se_key :
56+ raise ValueError (f"server ephemeral key not found: kid={ key_id } " )
6457
65- if not token_hash_obj .client_keys :
66- raise ValueError (f"Client ephemeral key not found for kid { key_id } " )
67- ce_key = token_hash_obj .client_keys [0 ]
58+ ce_key = session .scalar (
59+ select (ClientEphemeralKey ).where (
60+ ClientEphemeralKey .token_hash_id == token_hash_obj .id ,
61+ ClientEphemeralKey .key_index == key_id ,
62+ )
63+ )
64+ if not ce_key :
65+ raise ValueError (f"client ephemeral key not found: kid={ key_id } " )
6866
6967 ss_kid = get_private_key (key_id , session ).private_bytes_raw ()
7068
0 commit comments