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