-- Leo's gemini proxy

-- Connecting to git.thebackupbox.net:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini

repo: urcd
action: commit
revision:
path_from:
revision_from: e11c4e5751678c7c7ad0e523e43304e402785e6c:
path_to:
revision_to:

git.thebackupbox.net

urcd

git://git.thebackupbox.net/urcd

commit e11c4e5751678c7c7ad0e523e43304e402785e6c
Author: root <root@localhost.(none)>
Date:   Fri Dec 26 14:17:27 2014 +0000

    [urcd] wtf

diff --git a/src/cryptoserv.c b/src/cryptoserv.c

index fc50dd8a7f0b8998fe3b69370c91df144ce53f54..

index ..8b89dd974b73db2df3aeff69f3d5092ca0370704 100644

--- a/src/cryptoserv.c
+++ b/src/cryptoserv.c
@@ -428,6 +428,10 @@ main(int argc, char *argv[])
     continue;
    }
   }
- if (write(1,buffer0,i)<=0) exit(14);
+  if (write(1,buffer0,i)<=0) exit(14);
+  if ((i>=4)&&(!memcmp("quit",buffer1,4))) {
+   write(1,"",0); // send EOF
+   exit(15);
+  }
  }
 }
diff --git a/src/liburc.c b/src/liburc.c

index 91532acc87f6672ea0f54cd5d960ae952f833dec..

index ..6325cbe6040adc161d2c3ab05009da4b19a094bb 100644

--- a/src/liburc.c
+++ b/src/liburc.c
@@ -56,6 +56,7 @@ PyObject *pyrandombytes(PyObject *self, PyObject *args, PyObject *kw){
 PyObject *pyurchub_fmt(PyObject *self, PyObject *args, PyObject *kw) {
  unsigned char p[1024*2];
  char *b;
+ Py_ssize_t psize = 0;
  Py_ssize_t bsize = 0;
  static const char *kwlist[] = {"b",0};
  if (!PyArg_ParseTupleAndKeywords(
@@ -67,14 +68,15 @@ PyObject *pyurchub_fmt(PyObject *self, PyObject *args, PyObject *kw) {
   &bsize
  )) return Py_BuildValue("i", -1);
  if (bsize > IRC_MTU) return Py_BuildValue("i", -1);
- if (urchub_fmt(p,b,bsize) == -1) return Py_BuildValue("i", -1);
- return PyBytes_FromStringAndSize((char *)p, 2+12+4+8+bsize);
+ if (urchub_fmt(p,&psize,b,bsize) == -1) return Py_BuildValue("i", -1);
+ return PyBytes_FromStringAndSize((char *)p, psize);
 }

 PyObject *pyurcsign_fmt(PyObject *self, PyObject *args, PyObject *kw) {
  unsigned char p[1024*2];
  char *b;
  char *sk;
+ Py_ssize_t psize = 0;
  Py_ssize_t bsize = 0;
  Py_ssize_t sksize = 0;
  static const char *kwlist[] = {"b","sk",0};
@@ -90,8 +92,8 @@ PyObject *pyurcsign_fmt(PyObject *self, PyObject *args, PyObject *kw) {
  )) return Py_BuildValue("i", -1);
  if (sksize != 64) return Py_BuildValue("i", -1);
  if (bsize > IRC_MTU) return Py_BuildValue("i", -1);
- if (urcsign_fmt(p,b,bsize,sk) == -1) return Py_BuildValue("i", -1);
- return PyBytes_FromStringAndSize((char *)p, 2+12+4+8+bsize+64);
+ if (urcsign_fmt(p,&psize,b,bsize,sk) == -1) return Py_BuildValue("i", -1);
+ return PyBytes_FromStringAndSize((char *)p, psize);
 }

 PyObject *pyurcsign_verify(PyObject *self, PyObject *args, PyObject *kw) {
@@ -119,6 +121,7 @@ PyObject *pyurcsecretbox_fmt(PyObject *self, PyObject *args, PyObject *kw) {
  unsigned char p[1024*2];
  char *b;
  char *sk;
+ Py_ssize_t psize = 0;
  Py_ssize_t bsize = 0;
  Py_ssize_t sksize = 0;
  static const char *kwlist[] = {"b","sk",0};
@@ -134,14 +137,15 @@ PyObject *pyurcsecretbox_fmt(PyObject *self, PyObject *args, PyObject *kw) {
  )) return Py_BuildValue("i", -1);
  if (sksize != 32) return Py_BuildValue("i", -1);
  if (bsize > IRC_MTU) return Py_BuildValue("i", -1);
- if (urcsecretbox_fmt(p,b,bsize,sk) == -1) return Py_BuildValue("i", -1);
- return PyBytes_FromStringAndSize((char *)p, 2+12+4+8+bsize+(256-bsize%256)+16);
+ if (urcsecretbox_fmt(p,&psize,b,bsize,sk) == -1) return Py_BuildValue("i", -1);
+ return PyBytes_FromStringAndSize((char *)p, psize);
 }

 PyObject *pyurcsecretbox_open(PyObject *self, PyObject *args, PyObject *kw) {
  unsigned char b[1024*2];
  char *p;
  char *sk;
+ Py_ssize_t bsize = 0;
  Py_ssize_t psize = 0;
  Py_ssize_t sksize = 0;
  static const char *kwlist[] = {"p","sk",0};
@@ -157,8 +161,8 @@ PyObject *pyurcsecretbox_open(PyObject *self, PyObject *args, PyObject *kw) {
  )) return Py_BuildValue("i", -1);
  if (sksize != 32) return Py_BuildValue("i", -1);
  if (psize > URC_MTU) return Py_BuildValue("i", -1);
- if (urcsecretbox_open(b,p,psize,sk) == -1) return Py_BuildValue("i", -1);
- return PyBytes_FromStringAndSize((char *)b, -2-12-4-8+psize-16);
+ if (urcsecretbox_open(b,&bsize,p,psize,sk) == -1) return Py_BuildValue("i", -1);
+ return PyBytes_FromStringAndSize((char *)b, bsize);
 }

 PyObject *pyurcsignsecretbox_fmt(PyObject *self, PyObject *args, PyObject *kw) {
@@ -166,6 +170,7 @@ PyObject *pyurcsignsecretbox_fmt(PyObject *self, PyObject *args, PyObject *kw) {
  char *b;
  char *ssk;
  char *csk;
+ Py_ssize_t psize = 0;
  Py_ssize_t bsize = 0;
  Py_ssize_t ssksize = 0;
  Py_ssize_t csksize = 0;
@@ -185,14 +190,15 @@ PyObject *pyurcsignsecretbox_fmt(PyObject *self, PyObject *args, PyObject *kw) {
  if (ssksize != 64) return Py_BuildValue("i", -1);
  if (csksize != 32) return Py_BuildValue("i", -1);
  if (bsize > IRC_MTU) return Py_BuildValue("i", -1);
- if (urcsignsecretbox_fmt(p,b,bsize,ssk,csk) == -1) return Py_BuildValue("i", -1);
- return PyBytes_FromStringAndSize((char *)p, 2+12+4+8+bsize+(256-bsize%256)+64+16);
+ if (urcsignsecretbox_fmt(p,&psize,b,bsize,ssk,csk) == -1) return Py_BuildValue("i", -1);
+ return PyBytes_FromStringAndSize((char *)p, psize);
 }

 PyObject *pyurcsignsecretbox_open(PyObject *self, PyObject *args, PyObject *kw) {
  unsigned char b[1024*2];
  char *p;
  char *csk;
+ Py_ssize_t bsize = 0;
  Py_ssize_t psize = 0;
  Py_ssize_t csksize = 0;
  static const char *kwlist[] = {"p","csk",0};
@@ -208,14 +214,15 @@ PyObject *pyurcsignsecretbox_open(PyObject *self, PyObject *args, PyObject *kw)
  )) return Py_BuildValue("i", -1);
  if (csksize != 32) return Py_BuildValue("i", -1);
  if (psize > URC_MTU) return Py_BuildValue("i", -1);
- if (urcsignsecretbox_open(b,p,psize,csk) == -1) return Py_BuildValue("i", -1);
- return PyBytes_FromStringAndSize((char *)b, psize-16);
+ if (urcsignsecretbox_open(b,&bsize,p,psize,csk) == -1) return Py_BuildValue("i", -1);
+ return PyBytes_FromStringAndSize((char *)b, bsize);
 }

 PyObject *pyurcsignsecretbox_verify(PyObject *self, PyObject *args, PyObject *kw) {
  unsigned char *p;
  unsigned char *pk;
- Py_ssize_t psize=0, pksize=0;
+ Py_ssize_t psize=0;
+ Py_ssize_t pksize=0;
  static const char *kwlist[] = {"p", "pk", 0};
  if (!PyArg_ParseTupleAndKeywords(
   args,
@@ -237,6 +244,7 @@ PyObject *pyurccryptobox_fmt(PyObject *self, PyObject *args, PyObject *kw) {
  char *b;
  char *pk;
  char *sk;
+ Py_ssize_t psize = 0;
  Py_ssize_t bsize = 0;
  Py_ssize_t pksize = 0;
  Py_ssize_t sksize = 0;
@@ -256,8 +264,8 @@ PyObject *pyurccryptobox_fmt(PyObject *self, PyObject *args, PyObject *kw) {
  if (pksize != 32) return Py_BuildValue("i", -1);
  if (sksize != 32) return Py_BuildValue("i", -1);
  if (bsize > IRC_MTU) return Py_BuildValue("i", -1);
- if (urccryptobox_fmt(p,b,bsize,pk,sk) == -1) return Py_BuildValue("i", -1);
- return PyBytes_FromStringAndSize((char *)p, 2+12+4+8+bsize+(256-bsize%256)+16);
+ if (urccryptobox_fmt(p,&psize,b,bsize,pk,sk) == -1) return Py_BuildValue("i", -1);
+ return PyBytes_FromStringAndSize((char *)p, psize);
 }

 PyObject *pyurccryptobox_open(PyObject *self, PyObject *args, PyObject *kw) {
@@ -265,6 +273,7 @@ PyObject *pyurccryptobox_open(PyObject *self, PyObject *args, PyObject *kw) {
  char *p;
  char *pk;
  char *sk;
+ Py_ssize_t bsize = 0;
  Py_ssize_t psize = 0;
  Py_ssize_t pksize = 0;
  Py_ssize_t sksize = 0;
@@ -284,8 +293,8 @@ PyObject *pyurccryptobox_open(PyObject *self, PyObject *args, PyObject *kw) {
  if (pksize != 32) return Py_BuildValue("i", -1);
  if (sksize != 32) return Py_BuildValue("i", -1);
  if (psize > URC_MTU) return Py_BuildValue("i", -1);
- if (urccryptobox_open(b,p,psize,pk,sk) == -1) return Py_BuildValue("i", -1);
- return PyBytes_FromStringAndSize((char *)b, -2-12-4-8+psize-16);
+ if (urccryptobox_open(b,&bsize,p,psize,pk,sk) == -1) return Py_BuildValue("i", -1);
+ return PyBytes_FromStringAndSize((char *)b, bsize);
 }

 /* ImportError: workaround dummy init function (initliburc) */
diff --git a/src/liburc.h b/src/liburc.h

index d9daa198c8f31924738e6c6e6d9f42bd8a1ceda5..

index ..e28fe0c835386c270a9a78db3efd5958783b0770 100644

--- a/src/liburc.h
+++ b/src/liburc.h
@@ -80,7 +80,7 @@ void taia96n(unsigned char *ts) {
  randombytes(ts+8,4);
 }

-int urchub_fmt(unsigned char *p, unsigned char *b, int blen) {
+int urchub_fmt(unsigned char *p, int *plen, unsigned char *b, int blen) {
  if (blen > IRC_MTU) return -1;
  if (setlen(p,blen) == -1) return -1;
  taia96n(p+2);
@@ -90,10 +90,11 @@ int urchub_fmt(unsigned char *p, unsigned char *b, int blen) {
  p[15]=0;
  randombytes(p+2+12+4,8);
  memmove(p+2+12+4+8,b,blen);
+ *plen=2+12+4+8+blen;
  return 0;
 }

-int urcsign_fmt(unsigned char *p, unsigned char *b, int blen, unsigned char *sk) {
+int urcsign_fmt(unsigned char *p, int *plen, unsigned char *b, int blen, unsigned char *sk) {
  if (blen > IRC_MTU) return -1;
  unsigned char sm[1024*2];
  unsigned long long smlen;
@@ -108,6 +109,7 @@ int urcsign_fmt(unsigned char *p, unsigned char *b, int blen, unsigned char *sk)
  if (crypto_sign(sm,&smlen,p,2+12+4+8+blen,sk) == -1) return -1;
  memmove(p+2+12+4+8+blen,sm,32);
  memmove(p+2+12+4+8+blen+32,sm+smlen-32,32);
+ *plen=2+12+4+8+blen+64;
  return 0;
 }

@@ -123,7 +125,7 @@ int urcsign_verify(unsigned char *p, int plen, unsigned char *pk) {
  return crypto_sign_open(m,&mlen,(const unsigned char *)sm,plen,(const unsigned char *)pk);
 }

-int urcsecretbox_fmt(unsigned char *p, unsigned char *b, int blen, unsigned char *sk) {
+int urcsecretbox_fmt(unsigned char *p, int *plen, unsigned char *b, int blen, unsigned char *sk) {
  if (blen > IRC_MTU) return -1;
  int zlen = blen + (256 - blen % 256);
  unsigned char m[1024*2];
@@ -140,10 +142,11 @@ int urcsecretbox_fmt(unsigned char *p, unsigned char *b, int blen, unsigned char
  memmove(m+32,b,blen);
  if (crypto_secretbox(c,m,32+zlen,(const unsigned char *)p+2,(const unsigned char *)sk) == -1) return -1;
  memmove(p+2+12+4+8,c+16,zlen+16);
+ *plen=2+12+4+8+zlen+16;
  return 0;
 }

-int urcsecretbox_open(unsigned char *b, unsigned char *p, int plen, unsigned char *sk) {
+int urcsecretbox_open(unsigned char *b, int *blen, unsigned char *p, int plen, unsigned char *sk) {
  if (p[12] != 2) return -1;
  if (plen > URC_MTU) return -1;
  unsigned char m[1024*2];
@@ -153,10 +156,11 @@ int urcsecretbox_open(unsigned char *b, unsigned char *p, int plen, unsigned cha
  memmove(c+16,p+2+12+4+8,-2-12-4-8+plen);
  if (crypto_secretbox_open(m,c,16-2-12-4-8+plen,(const unsigned char *)p+2,(const unsigned char *)sk) == -1) return -1;
  memmove(b,m+32,-2-12-4-8+plen-16);
+ *blen=-2-12-4-8+plen-16;
  return 0;
 }

-int urcsignsecretbox_fmt(unsigned char *p, unsigned char *b, int blen, unsigned char *ssk, unsigned char *csk) {
+int urcsignsecretbox_fmt(unsigned char *p, int *plen, unsigned char *b, int blen, unsigned char *ssk, unsigned char *csk) {
  if (blen > IRC_MTU) return -1;
  int zlen = blen + (256 - blen % 256);
  unsigned char sm[1024*2];
@@ -180,10 +184,11 @@ int urcsignsecretbox_fmt(unsigned char *p, unsigned char *b, int blen, unsigned
  memmove(m+32,p+2+12+4+8,zlen+64);
  if (crypto_secretbox(c,m,32+zlen+64,(const unsigned char *)p+2,(const unsigned char *)csk) == -1) return -1;
  memmove(p+2+12+4+8,c+16,zlen+64+16);
+ *plen=2+12+4+8+zlen+64+16;
  return 0;
 }

-int urcsignsecretbox_open(unsigned char *b, unsigned char *p, int plen, unsigned char *sk) {
+int urcsignsecretbox_open(unsigned char *b, int *blen, unsigned char *p, int plen, unsigned char *sk) {
  if (p[12] != 3) return -1;
  if (plen > URC_MTU) return -1;
  unsigned char m[1024*2];
@@ -194,6 +199,7 @@ int urcsignsecretbox_open(unsigned char *b, unsigned char *p, int plen, unsigned
  if (crypto_secretbox_open(m,c,16-2-12-4-8+plen,(const unsigned char *)p+2,(const unsigned char *)sk) == -1) return -1;
  memmove(b,p,2+12+4+8);
  memmove(b+2+12+4+8,m+32,-2-12-4-8+plen-16);
+ *blen=plen-16;
  return 0;
 }

@@ -209,7 +215,7 @@ int urcsignsecretbox_verify(unsigned char *p, int plen, unsigned char *pk) {
  return crypto_sign_open(m,&mlen,(const unsigned char *)sm,plen,(const unsigned char *)pk);
 }

-int urccryptobox_fmt(unsigned char *p, unsigned char *b, int blen, unsigned char *pk, unsigned char *sk) {
+int urccryptobox_fmt(unsigned char *p, int *plen, unsigned char *b, int blen, unsigned char *pk, unsigned char *sk) {
  if (blen > IRC_MTU) return -1;
  int zlen = blen + (256 - blen % 256);
  unsigned char m[1024*2];
@@ -226,10 +232,11 @@ int urccryptobox_fmt(unsigned char *p, unsigned char *b, int blen, unsigned char
  memmove(m+32,b,blen);
  if (crypto_box(c,m,32+zlen,(const unsigned char *)p+2,(const unsigned char *)pk,(const unsigned char *)sk) == -1) return -1;
  memmove(p+2+12+4+8,c+16,zlen+16);
+ *plen=2+12+4+8+zlen+16;
  return 0;
 }

-int urccryptobox_open(unsigned char *b, unsigned char *p, int plen, unsigned char *pk, unsigned char *sk) {
+int urccryptobox_open(unsigned char *b, int *blen, unsigned char *p, int plen, unsigned char *pk, unsigned char *sk) {
  if (p[12] != 4) return -1;
  if (plen > URC_MTU) return -1;
  unsigned char m[1024*2];
@@ -238,6 +245,7 @@ int urccryptobox_open(unsigned char *b, unsigned char *p, int plen, unsigned cha
  bzero(c,16);
  memmove(c+16,p+2+12+4+8,-2-12-4-8+plen);
  if (crypto_box_open(m,c,16-2-12-4-8+plen,(const unsigned char *)p+2,(const unsigned char *)pk,(const unsigned char *)sk) == -1) return -1;
- memmove(b,m+32,-2-4-8+plen-16);
+ memmove(b,m+32,-2-12-4-8+plen-16);
+ *blen=-2-12-4-8+plen-16;
  return 0;
 }

-----END OF PAGE-----

-- Response ended

-- Page fetched on Sun Jun 2 17:04:24 2024