aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/tvmauth/src/rw/rw_sign.c
diff options
context:
space:
mode:
authorDevtools Arcadia <arcadia-devtools@yandex-team.ru>2022-02-07 18:08:42 +0300
committerDevtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net>2022-02-07 18:08:42 +0300
commit1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch)
treee26c9fed0de5d9873cce7e00bc214573dc2195b7 /library/cpp/tvmauth/src/rw/rw_sign.c
downloadydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
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;
+}