get_token_family_key.h (3753B)
1 /* 2 This file is part of TALER 3 Copyright (C) 2024 Taler Systems SA 4 5 TALER is free software; you can redistribute it and/or modify it under the 6 terms of the GNU General Public License as published by the Free Software 7 Foundation; either version 3, or (at your option) any later version. 8 9 TALER is distributed in the hope that it will be useful, but WITHOUT ANY 10 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR 11 A PARTICULAR PURPOSE. See the GNU General Public License for more details. 12 13 You should have received a copy of the GNU General Public License along with 14 TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/> 15 */ 16 /** 17 * @file src/include/merchant-database/get_token_family_key.h 18 * @brief implementation of the get_token_family_key function for Postgres 19 * @author Christian Blättler 20 */ 21 #ifndef MERCHANT_DATABASE_GET_TOKEN_FAMILY_KEY_H 22 #define MERCHANT_DATABASE_GET_TOKEN_FAMILY_KEY_H 23 24 #include <gnunet/gnunet_common.h> 25 #include <taler/taler_util.h> 26 #include <taler/taler_json_lib.h> 27 #include "merchantdb_lib.h" 28 29 30 /** 31 * Details about a token key. 32 */ 33 struct TALER_MERCHANTDB_TokenFamilyKeyDetails 34 { 35 /** 36 * Tokens signed with this key are valid from this date on. 37 * This is the time the key was created. 38 */ 39 struct GNUNET_TIME_Timestamp signature_validity_start; 40 41 /** 42 * Tokens signed with this key are valid until this date. 43 */ 44 struct GNUNET_TIME_Timestamp signature_validity_end; 45 46 /** 47 * Private key expires for use at this time. Signatures can 48 * only be created until this point. 49 */ 50 struct GNUNET_TIME_Timestamp private_key_deleted_at; 51 52 /** 53 * Token family public key. 54 */ 55 struct TALER_TokenIssuePublicKey pub; 56 57 /** 58 * Token family private key. 59 */ 60 struct TALER_TokenIssuePrivateKey priv; 61 62 /** 63 * Details about the token family this key belongs to. 64 */ 65 struct TALER_MERCHANTDB_TokenFamilyDetails token_family; 66 }; 67 68 69 /** 70 * Serialize key lookup and creation for a token family. Starts a READ COMMITTED 71 * transaction if none is active. The caller must retain the lock until lookup, 72 * lifetime extension and insertion are complete, and commit or roll back any 73 * transaction started here. Existing transactions remain owned by the caller. 74 * 75 * @param pg database context with the instance selected 76 * @param token_family_slug family to lock 77 * @param[out] started_transaction true if this call started a transaction, 78 * including on failure (the caller must roll it back) 79 * @return database result code; zero if the family does not exist 80 */ 81 enum GNUNET_DB_QueryStatus 82 TALER_MERCHANTDB_lock_token_family ( 83 struct TALER_MERCHANTDB_PostgresContext *pg, 84 const char *token_family_slug, 85 bool *started_transaction); 86 87 88 /** 89 * Lookup details about a particular token family key. The valid_after field 90 * of the key has to be >= @e min_valid_after and < @e max_valid_after. 91 * 92 * @param pg database context 93 * @param instance_id instance to lookup token family key for 94 * @param token_family_slug slug of token family to lookup 95 * @param valid_at find a key with a validity period that includes this time 96 * @param sign_until find a private key that can sign until this time 97 * @param[out] details set to the token family key details on success, can be NULL 98 * (in that case we only want to check if the token family key exists) 99 * @return database result code 100 */ 101 enum GNUNET_DB_QueryStatus 102 TALER_MERCHANTDB_get_token_family_key ( 103 struct TALER_MERCHANTDB_PostgresContext *pg, 104 const char *instance_id, 105 const char *token_family_slug, 106 struct GNUNET_TIME_Timestamp valid_at, 107 struct GNUNET_TIME_Timestamp sign_until, 108 struct TALER_MERCHANTDB_TokenFamilyKeyDetails *details); 109 110 111 #endif