1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
// DO_NOT_STYLE
#include "deprecated.h"
#include "src/exception.h"
#include "src/utils.h"
#include <library/cpp/tvmauth/src/service_impl.h>
#include <library/cpp/tvmauth/src/user_impl.h>
#include <library/cpp/tvmauth/src/utils.h>
using namespace NTvmAuth;
using namespace NTvmAuthC;
TA_EErrorCode TA_CreateServiceContext(
uint32_t tvmId,
const char* secretBase64,
size_t secretBase64Size,
const char* tvmKeysResponse,
size_t tvmKeysResponseSize,
TA_TServiceContext** context) {
if ((tvmKeysResponse == nullptr && secretBase64 == nullptr) || context == nullptr)
return TA_EC_INVALID_PARAM;
return CatchExceptions([=]() -> TA_EErrorCode {
if (secretBase64Size && tvmKeysResponse) {
(*context) = reinterpret_cast<TA_TServiceContext*>(new TServiceContext::TImpl(
TStringBuf(secretBase64, secretBase64Size),
tvmId,
TStringBuf(tvmKeysResponse, tvmKeysResponseSize)));
} else if (secretBase64Size) {
(*context) = reinterpret_cast<TA_TServiceContext*>(new TServiceContext::TImpl(
TStringBuf(secretBase64, secretBase64Size)));
} else {
(*context) = reinterpret_cast<TA_TServiceContext*>(new TServiceContext::TImpl(
tvmId,
TStringBuf(tvmKeysResponse, tvmKeysResponseSize)));
}
return TA_EC_OK;
});
}
TA_EErrorCode TA_DeleteServiceContext(
TA_TServiceContext* context) {
return CatchExceptions([=]() -> TA_EErrorCode {
delete reinterpret_cast<TServiceContext::TImpl*>(context);
return TA_EC_OK;
});
}
TA_EErrorCode TA_CheckServiceTicket(
const TA_TServiceContext* context,
const char* ticketBody,
size_t ticketBodySize,
TA_TCheckedServiceTicket** ticket) {
if (context == nullptr || ticketBody == nullptr || ticket == nullptr)
return TA_EC_INVALID_PARAM;
return CatchExceptions([=]() -> TA_EErrorCode {
(*ticket) = reinterpret_cast<TA_TCheckedServiceTicket*>(
reinterpret_cast<const TServiceContext::TImpl*>(context)->Check(TStringBuf(ticketBody, ticketBodySize)).Release());
return NTvmAuthC::NUtils::CppErrorCodeToC(NTvmAuthC::NUtils::Translate(*ticket)->GetStatus());
});
}
TA_EErrorCode TA_SignCgiParamsForTvm(
const TA_TServiceContext* context,
const char* ts,
size_t tsSize,
const char* dst,
size_t dstSize,
const char* scopes,
size_t scopesSize,
char* sign,
size_t* signSize,
size_t maxSignatureSize) {
if (context == nullptr || scopes == nullptr || sign == nullptr || signSize == nullptr)
return TA_EC_INVALID_PARAM;
return CatchExceptions([=]() -> TA_EErrorCode {
const TString signedParams = reinterpret_cast<const TServiceContext::TImpl*>(context)->SignCgiParamsForTvm(
TStringBuf(ts, tsSize),
TStringBuf(dst, dstSize),
TStringBuf(scopes, scopesSize));
(*signSize) = signedParams.size();
if (maxSignatureSize < *signSize) {
return TA_EC_SMALL_BUFFER;
}
strcpy(sign, signedParams.c_str());
return TA_EC_OK;
});
}
TA_EErrorCode TA_CreateUserContext(
TA_EBlackboxEnv env,
const char* tvmKeysResponse,
size_t tvmKeysResponseSize,
TA_TUserContext** context) {
if (tvmKeysResponse == nullptr || context == nullptr)
return TA_EC_INVALID_PARAM;
return CatchExceptions([=]() -> TA_EErrorCode {
(*context) = reinterpret_cast<TA_TUserContext*>(
new TUserContext::TImpl(NTvmAuth::EBlackboxEnv(int(env)),
TStringBuf(tvmKeysResponse, tvmKeysResponseSize)));
return TA_EC_OK;
});
}
TA_EErrorCode TA_DeleteUserContext(
TA_TUserContext* context) {
return CatchExceptions([=]() -> TA_EErrorCode {
delete reinterpret_cast<TUserContext::TImpl*>(context);
return TA_EC_OK;
});
}
TA_EErrorCode TA_CheckUserTicket(
const TA_TUserContext* context,
const char* ticketBody,
size_t ticketBodySize,
TA_TCheckedUserTicket** ticket) {
if (context == nullptr || ticket == nullptr)
return TA_EC_INVALID_PARAM;
return CatchExceptions([=]() -> TA_EErrorCode {
(*ticket) = reinterpret_cast<TA_TCheckedUserTicket*>(
reinterpret_cast<const TUserContext::TImpl*>(context)->Check(TStringBuf(ticketBody, ticketBodySize)).Release());
return NTvmAuthC::NUtils::CppErrorCodeToC(NTvmAuthC::NUtils::Translate(*ticket)->GetStatus());
});
}
|