]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - crypto.c
DP_QC_URI_POST extension (uri_post, uri_postbuf, crypto_uri_postbuf)
[xonotic/darkplaces.git] / crypto.c
index b679ed2d9a8fb0df76d5198ba8f9649be225294b..751116965b62a85d8777ea4a3aef9e378c2601ca 100644 (file)
--- a/crypto.c
+++ b/crypto.c
@@ -142,6 +142,7 @@ static size_t Crypto_UnParsePack(char *buf, size_t len, unsigned long header, co
 #define qd0_blind_id_INITIALIZE d0_blind_id_INITIALIZE
 #define qd0_blind_id_SHUTDOWN d0_blind_id_SHUTDOWN
 #define qd0_blind_id_util_sha256 d0_blind_id_util_sha256
+#define qd0_blind_id_sign_with_private_id_sign d0_blind_id_sign_with_private_id_sign
 
 #else
 
@@ -189,6 +190,7 @@ static D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL (*qd0_blind_id_sessionkey_public_
 static D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL (*qd0_blind_id_INITIALIZE) (void);
 static D0_EXPORT void (*qd0_blind_id_SHUTDOWN) (void);
 static D0_EXPORT void (*qd0_blind_id_util_sha256) (char *out, const char *in, size_t n);
+static D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL (*qd0_blind_id_sign_with_private_id_sign) (d0_blind_id_t *ctx, D0_BOOL is_first, D0_BOOL send_modulus, const char *message, size_t msglen, char *outbuf, size_t *outbuflen);
 static dllfunction_t d0_blind_id_funcs[] =
 {
        {"d0_blind_id_new", (void **) &qd0_blind_id_new},
@@ -224,6 +226,7 @@ static dllfunction_t d0_blind_id_funcs[] =
        {"d0_blind_id_INITIALIZE", (void **) &qd0_blind_id_INITIALIZE},
        {"d0_blind_id_SHUTDOWN", (void **) &qd0_blind_id_SHUTDOWN},
        {"d0_blind_id_util_sha256", (void **) &qd0_blind_id_util_sha256},
+       {"d0_blind_id_sign_with_private_id_sign", (void **) &qd0_blind_id_sign_with_private_id_sign},
        {NULL, NULL}
 };
 // end of d0_blind_id interface
@@ -726,7 +729,7 @@ qboolean Crypto_RetrieveHostKey(lhnetaddress_t *peeraddress, int *keyid, char *k
 }
 int Crypto_RetrieveLocalKey(int keyid, char *keyfp, size_t keyfplen, char *idfp, size_t idfplen) // return value: -1 if more to come, +1 if valid, 0 if end of list
 {
-       if(keyid < 0 || keyid > MAX_PUBKEYS)
+       if(keyid < 0 || keyid >= MAX_PUBKEYS)
                return 0;
        if(keyfp)
                *keyfp = 0;
@@ -2357,3 +2360,14 @@ int Crypto_ClientParsePacket(const char *data_in, size_t len_in, char *data_out,
 
        return CRYPTO_NOMATCH;
 }
+
+size_t Crypto_SignData(const void *data, size_t datasize, int keyid, void *signed_data, size_t signed_size)
+{
+       if(keyid < 0 || keyid >= MAX_PUBKEYS)
+               return 0;
+       if(!pubkeys_havepriv[keyid])
+               return 0;
+       if(qd0_blind_id_sign_with_private_id_sign(pubkeys[keyid], true, false, data, datasize, signed_data, &signed_size))
+               return signed_size;
+       return 0;
+}