damsel/proto/cds.thrift

77 lines
3.0 KiB
Thrift
Raw Normal View History

include "base.thrift"
include "domain.thrift"
2016-06-10 15:53:11 +00:00
/** Часть мастер-ключа */
typedef binary MasterKeyShare;
2016-06-10 15:53:11 +00:00
typedef list<MasterKeyShare> MasterKeyShares;
2016-06-10 15:53:11 +00:00
/** Дата экспирации */
struct ExpDate {
2016-06-10 15:53:11 +00:00
/** Месяц 1..12 */
1: required i8 month
2016-06-10 15:53:11 +00:00
/** Год 2015..∞ */
2: required i16 year
}
2016-06-10 15:53:11 +00:00
/** Открытые карточные данные (в отличие от domain.BankCard) */
struct CardData {
2016-06-10 15:53:11 +00:00
/** Номер карточки без пробелов [0-9]{14,19} */
1: required string pan
2: required ExpDate exp_date
2016-06-10 15:53:11 +00:00
/** Имя держателя */
3: required string cardholder_name
2016-06-10 15:53:11 +00:00
/** Код верификации [0-9]{3,4} */
4: required string cvv
}
struct PutCardDataResult {
1: required domain.BankCard bank_card
2: required domain.PaymentSession session
}
union UnlockStatus {
1: base.Ok ok
2016-06-10 15:53:11 +00:00
/** сколько частей ключа нужно еще ввести, чтобы расшифровать хранилище */
2: i16 more_keys_needed
}
exception InvalidCardData {}
exception NoKeyring {}
exception KeyringLocked {}
exception KeyringExists {}
2016-06-10 15:53:11 +00:00
/** Интерфейс для администраторов */
service Keyring {
2016-06-10 15:53:11 +00:00
/** Создать новый кейринг
* threshold - минимально необходимое количество ключей для восстановления мастер ключа
* num_shares - общее количество частей, на которое нужно разбить мастер-ключ
*/
MasterKeyShares Init (1: i16 threshold, 2: i16 num_shares) throws (1: KeyringExists exists)
2016-06-10 15:53:11 +00:00
/** Предоставить часть мастер-ключа для расшифровки кейринга.
* Необходимо вызвать с разными частами мастер столько раз, сколько было указано в качестве
* параметра threshold при создании кейринга
*/
UnlockStatus Unlock (1: MasterKeyShare key_share) throws (1: NoKeyring no_keyring)
2016-06-10 15:53:11 +00:00
/** Зашифровать кейринг */
void Lock () throws ()
2016-06-10 15:53:11 +00:00
/** Добавить новый ключ в кейринг */
void Rotate () throws (1: KeyringLocked locked)
}
2016-06-10 15:53:11 +00:00
/** Интерфейс для приложений */
service Storage {
2016-06-10 15:53:11 +00:00
/** Получить карточные данные без CVV */
CardData GetCardData (1: domain.Token token)
throws (1: base.NotFound not_found, 2: KeyringLocked locked)
2016-06-10 15:53:11 +00:00
/** Получить карточные данные c CVV */
CardData GetSessionCardData (1: domain.Token token, 2: domain.PaymentSession session)
throws (1: base.NotFound not_found, 2: KeyringLocked locked)
2016-06-10 15:53:11 +00:00
/** Сохранить карточные данные */
PutCardDataResult PutCardData (1: CardData card_data)
throws (1: InvalidCardData invalid, 2: KeyringLocked locked)
}