aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/tvmauth/src/rw/rw_sign.c
diff options
context:
space:
mode:
authorqrort <qrort@yandex-team.com>2022-11-30 23:47:12 +0300
committerqrort <qrort@yandex-team.com>2022-11-30 23:47:12 +0300
commit22f8ae0e3f5d68b92aecccdf96c1d841a0334311 (patch)
treebffa27765faf54126ad44bcafa89fadecb7a73d7 /library/cpp/tvmauth/src/rw/rw_sign.c
parent332b99e2173f0425444abb759eebcb2fafaa9209 (diff)
downloadydb-22f8ae0e3f5d68b92aecccdf96c1d841a0334311.tar.gz
validate canons without yatest_common
Diffstat (limited to 'library/cpp/tvmauth/src/rw/rw_sign.c')
-rw-r--r--library/cpp/tvmauth/src/rw/rw_sign.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/library/cpp/tvmauth/src/rw/rw_sign.c b/library/cpp/tvmauth/src/rw/rw_sign.c
new file mode 100644
index 0000000000..e320808dd3
--- /dev/null
+++ b/library/cpp/tvmauth/src/rw/rw_sign.c
@@ -0,0 +1,46 @@
+#include "rw.h"
+
+TRwSignature* RwSignatureNew(void) {
+ TRwSignature* sig = NULL;
+ sig = malloc(sizeof(TRwSignature));
+ if (!sig)
+ return NULL;
+ sig->S = NULL;
+ return sig;
+}
+
+void RwSignatureFree(TRwSignature* sig) {
+ if (sig) {
+ if (sig->S)
+ BN_free(sig->S);
+ free(sig);
+ }
+}
+
+int RwNoPaddingSign(int flen, const unsigned char* from, unsigned char* to, TRwKey* rw) {
+ int i = 0, r = 0, num = -1;
+ TRwSignature* sig = NULL;
+
+ if (!rw || !rw->N || !rw->Meth || !rw->Meth->RwSign || !from || !to)
+ goto err;
+
+ if ((sig = rw->Meth->RwSign(from, flen, rw)) == NULL)
+ goto err;
+ num = BN_num_bytes(rw->N);
+
+ r = BN_bn2bin(sig->S, to);
+ if (r < 0)
+ goto err;
+
+ /* put zeroes to the rest of the 'to' buffer */
+ for (i = r; i < num; i++) {
+ to[i] = 0x00;
+ }
+
+err:
+ if (sig != NULL) {
+ RwSignatureFree(sig);
+ }
+
+ return r;
+}