removed unused code (base85 and crc32)

This commit is contained in:
TLINDEN
2015-04-19 19:49:13 +02:00
parent 0aecc59f39
commit d019ec4b9e
18 changed files with 30 additions and 578 deletions

View File

@@ -1 +1 @@
0.2.5 0.2.6

View File

@@ -60,11 +60,13 @@ Pretty Curved Privacy - File encryption using eliptic curve cryptography.
(cd src && ./usage.sh) (cd src && ./usage.sh)
# generate pypcp types # generate pypcp types
bindings/py/gencffi.pl include/pcp/defines.h include/pcp/structs.h include/pcp/key.h \ cd bindings/py
./gencffi.pl include/pcp/defines.h include/pcp/structs.h include/pcp/key.h \
include/pcp/buffer.h include/pcp/context.h \ include/pcp/buffer.h include/pcp/context.h \
include/pcp/ed.h include/pcp/crypto.h include/pcp/vault.h \ include/pcp/ed.h include/pcp/crypto.h include/pcp/vault.h \
include/pcp/mgmt.h include/pcp/keyhash.h \ include/pcp/mgmt.h include/pcp/keyhash.h \
include/pcp/pcpstream.h include/pcp/z85.h > bindings/py/pypcp/raw.py include/pcp/pcpstream.h include/pcp/z85.h > bindings/py/pypcp/raw.py
cd -
exit exit
fi fi

View File

@@ -25,7 +25,7 @@ my %sobytes = (
'crypto_generichash_BYTES_MAX' => 64, 'crypto_generichash_BYTES_MAX' => 64,
); );
my @ignore = qw(digital_crc32.h base85.h uthash.h); my @ignore = qw(uthash.h);
my @code; my @code;
my @structs; my @structs;

View File

@@ -2,7 +2,6 @@ PCPEXPORT = pcp.h \
pcp/crypto.h \ pcp/crypto.h \
pcp/config.h \ pcp/config.h \
pcp/defines.h \ pcp/defines.h \
pcp/digital_crc32.h \
pcp/getpass.h \ pcp/getpass.h \
pcp/jenhash.h \ pcp/jenhash.h \
pcp/key.h \ pcp/key.h \
@@ -16,7 +15,6 @@ PCPEXPORT = pcp.h \
pcp/z85.h \ pcp/z85.h \
pcp/zmq_z85.h \ pcp/zmq_z85.h \
pcp/ed.h \ pcp/ed.h \
pcp/base85.h \
pcp/buffer.h \ pcp/buffer.h \
pcp/mgmt.h \ pcp/mgmt.h \
pcp/pcpstream.h \ pcp/pcpstream.h \

View File

@@ -6,12 +6,10 @@ extern "C" {
#endif #endif
#include "pcp/config.h" #include "pcp/config.h"
#include "pcp/base85.h"
#include "pcp/buffer.h" #include "pcp/buffer.h"
#include "pcp/context.h" #include "pcp/context.h"
#include "pcp/crypto.h" #include "pcp/crypto.h"
#include "pcp/defines.h" #include "pcp/defines.h"
#include "pcp/digital_crc32.h"
#include "pcp/ed.h" #include "pcp/ed.h"
#include "pcp/getpass.h" #include "pcp/getpass.h"
#include "pcp/jenhash.h" #include "pcp/jenhash.h"

View File

@@ -1,36 +0,0 @@
/*
Source from GIT
Licensed under the terms of the LGPL 2.1.
*/
#ifndef HAVE_BASE85_H
#define HAVE_BASE85_H
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "defines.h"
#include "context.h"
#undef DEBUG_85
#ifdef DEBUG_85
#define say(a) fprintf(stderr, a)
#define say1(a,b) fprintf(stderr, a, b)
#define say2(a,b,c) fprintf(stderr, a, b, c)
#else
#define say(a) do { /* nothing */ } while (0)
#define say1(a,b) do { /* nothing */ } while (0)
#define say2(a,b,c) do { /* nothing */ } while (0)
#endif
int decode_85(PCPCTX *ptx, char *dst, const char *buffer, int len);
void encode_85(char *buf, const unsigned char *data, int bytes);
#define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
#define error(...) (fatal(ptx, __VA_ARGS__), -1)
#endif /* HAVE_BASE85_H */

View File

@@ -1,43 +0,0 @@
/* -*- c++ -*- */
/*
* Copyright 2005,2011 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
* GNU Radio is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3, or (at your option)
* any later version.
*
* GNU Radio is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GNU Radio; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street,
* Boston, MA 02110-1301, USA.
*/
#ifndef INCLUDED_DIGITAL_CRC32_H
#define INCLUDED_DIGITAL_CRC32_H
#include <stdlib.h>
/*!
* \brief update running CRC-32
* \ingroup misc
*
* Update a running CRC with the bytes buf[0..len-1] The CRC should be
* initialized to all 1's, and the transmitted value is the 1's
* complement of the final running CRC. The resulting CRC should be
* transmitted in big endian order.
*/
unsigned int
digital_update_crc32(unsigned int crc, const unsigned char *buf, size_t len);
unsigned int
digital_crc32(const unsigned char *buf, size_t len);
#endif /* INCLUDED_CRC32_H */

View File

@@ -27,9 +27,9 @@ pkgconfig_DATA = libpcp1.pc
libpcp1_la_SOURCES = platform.c mem.c version.c \ libpcp1_la_SOURCES = platform.c mem.c version.c \
context.c z85.c zmq_z85.c key.c randomart.c \ context.c z85.c zmq_z85.c key.c randomart.c \
vault.c jenhash.c digital_crc32.c \ vault.c jenhash.c \
crypto.c ed.c keyhash.c scrypt.c \ crypto.c ed.c keyhash.c scrypt.c \
base85.c util.c buffer.c mgmt.c keysig.c pcpstream.c util.c buffer.c mgmt.c keysig.c pcpstream.c
include_HEADERS = ../include/pcp.h include_HEADERS = ../include/pcp.h

View File

@@ -1,111 +0,0 @@
/*
Source from GIT
Licensed under the terms of the LGPL 2.1.
*/
#include "base85.h"
static const char en85[] = {
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
'U', 'V', 'W', 'X', 'Y', 'Z',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
'u', 'v', 'w', 'x', 'y', 'z',
'!', '#', '$', '%', '&', '(', ')', '*', '+', '-',
';', '<', '=', '>', '?', '@', '^', '_', '`', '{',
'|', '}', '~'
};
static char de85[256];
static void prep_base85(void)
{
size_t i;
if (de85['Z'])
return;
for (i = 0; i < ARRAY_SIZE(en85); i++) {
int ch = en85[i];
de85[ch] = i + 1;
}
}
int decode_85(PCPCTX *ptx, char *dst, const char *buffer, int len)
{
prep_base85();
say1("len: %d\n", len);
say2("decode 85 <%.*s>\n", len / 4 * 5, buffer);
while (len) {
unsigned acc = 0;
int de, cnt = 4;
unsigned char ch;
do {
ch = *buffer++;
de = de85[ch];
if (--de < 0)
return error("invalid base85 alphabet <%02x> de: %d\n", ch, de);
acc = acc * 85 + de;
} while (--cnt);
ch = *buffer++;
de = de85[ch];
if (--de < 0 && ch != '\0')
return error("invalid base85 alphabet <%02x> left\n", ch);
/* Detect overflow. */
if (0xffffffff / 85 < acc ||
0xffffffff - de < (acc *= 85))
return error("invalid base85 sequence %.5s => %08x\n", buffer-5, acc);
acc += de;
/* say1(" %08x\n", acc); */
say1("%.5s", buffer-5);
say2(" => %08x (len: %d)\n", acc, len);
cnt = (len < 4) ? len : 4;
len -= cnt;
do {
acc = (acc << 8) | (acc >> 24);
*dst++ = acc;
} while (--cnt);
}
say("\n");
return 0;
}
void encode_85(char *buf, const unsigned char *data, int bytes)
{
say("encode 85\n");
int pad = bytes % 4;
if(pad > 0) {
pad = 4 - pad;
say1("pad: %d\n", pad);
data = realloc((void *)data, bytes + pad);
memset((void *)&data[bytes], 0, pad);
}
while (bytes) {
unsigned acc = 0;
int cnt;
for (cnt = 24; cnt >= 0; cnt -= 8) {
unsigned ch = *data++;
acc |= ch << cnt;
if (--bytes == 0)
break;
}
say1(" %08x", acc);
for (cnt = 4; cnt >= 0; cnt--) {
int val = acc % 85;
acc /= 85;
buf[cnt] = en85[val];
}
say1(" => %.5s\n", buf);
buf += 5;
}
say("\n");
*buf = 0;
}

View File

@@ -1,119 +0,0 @@
/* -*- c++ -*- */
/*
* Copyright 2005,2011 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
* GNU Radio is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3, or (at your option)
* any later version.
*
* GNU Radio is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GNU Radio; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street,
* Boston, MA 02110-1301, USA.
*/
/*
* See also ISO 3309 [ISO-3309] or ITU-T V.42 [ITU-V42] for a formal specification.
*/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <digital_crc32.h>
/* Automatically generated CRC function */
/* polynomial: 0x104C11DB7 */
unsigned int
digital_update_crc32(unsigned int crc, const unsigned char *data, size_t len)
{
static const unsigned int table[256] = {
0x00000000U,0x04C11DB7U,0x09823B6EU,0x0D4326D9U,
0x130476DCU,0x17C56B6BU,0x1A864DB2U,0x1E475005U,
0x2608EDB8U,0x22C9F00FU,0x2F8AD6D6U,0x2B4BCB61U,
0x350C9B64U,0x31CD86D3U,0x3C8EA00AU,0x384FBDBDU,
0x4C11DB70U,0x48D0C6C7U,0x4593E01EU,0x4152FDA9U,
0x5F15ADACU,0x5BD4B01BU,0x569796C2U,0x52568B75U,
0x6A1936C8U,0x6ED82B7FU,0x639B0DA6U,0x675A1011U,
0x791D4014U,0x7DDC5DA3U,0x709F7B7AU,0x745E66CDU,
0x9823B6E0U,0x9CE2AB57U,0x91A18D8EU,0x95609039U,
0x8B27C03CU,0x8FE6DD8BU,0x82A5FB52U,0x8664E6E5U,
0xBE2B5B58U,0xBAEA46EFU,0xB7A96036U,0xB3687D81U,
0xAD2F2D84U,0xA9EE3033U,0xA4AD16EAU,0xA06C0B5DU,
0xD4326D90U,0xD0F37027U,0xDDB056FEU,0xD9714B49U,
0xC7361B4CU,0xC3F706FBU,0xCEB42022U,0xCA753D95U,
0xF23A8028U,0xF6FB9D9FU,0xFBB8BB46U,0xFF79A6F1U,
0xE13EF6F4U,0xE5FFEB43U,0xE8BCCD9AU,0xEC7DD02DU,
0x34867077U,0x30476DC0U,0x3D044B19U,0x39C556AEU,
0x278206ABU,0x23431B1CU,0x2E003DC5U,0x2AC12072U,
0x128E9DCFU,0x164F8078U,0x1B0CA6A1U,0x1FCDBB16U,
0x018AEB13U,0x054BF6A4U,0x0808D07DU,0x0CC9CDCAU,
0x7897AB07U,0x7C56B6B0U,0x71159069U,0x75D48DDEU,
0x6B93DDDBU,0x6F52C06CU,0x6211E6B5U,0x66D0FB02U,
0x5E9F46BFU,0x5A5E5B08U,0x571D7DD1U,0x53DC6066U,
0x4D9B3063U,0x495A2DD4U,0x44190B0DU,0x40D816BAU,
0xACA5C697U,0xA864DB20U,0xA527FDF9U,0xA1E6E04EU,
0xBFA1B04BU,0xBB60ADFCU,0xB6238B25U,0xB2E29692U,
0x8AAD2B2FU,0x8E6C3698U,0x832F1041U,0x87EE0DF6U,
0x99A95DF3U,0x9D684044U,0x902B669DU,0x94EA7B2AU,
0xE0B41DE7U,0xE4750050U,0xE9362689U,0xEDF73B3EU,
0xF3B06B3BU,0xF771768CU,0xFA325055U,0xFEF34DE2U,
0xC6BCF05FU,0xC27DEDE8U,0xCF3ECB31U,0xCBFFD686U,
0xD5B88683U,0xD1799B34U,0xDC3ABDEDU,0xD8FBA05AU,
0x690CE0EEU,0x6DCDFD59U,0x608EDB80U,0x644FC637U,
0x7A089632U,0x7EC98B85U,0x738AAD5CU,0x774BB0EBU,
0x4F040D56U,0x4BC510E1U,0x46863638U,0x42472B8FU,
0x5C007B8AU,0x58C1663DU,0x558240E4U,0x51435D53U,
0x251D3B9EU,0x21DC2629U,0x2C9F00F0U,0x285E1D47U,
0x36194D42U,0x32D850F5U,0x3F9B762CU,0x3B5A6B9BU,
0x0315D626U,0x07D4CB91U,0x0A97ED48U,0x0E56F0FFU,
0x1011A0FAU,0x14D0BD4DU,0x19939B94U,0x1D528623U,
0xF12F560EU,0xF5EE4BB9U,0xF8AD6D60U,0xFC6C70D7U,
0xE22B20D2U,0xE6EA3D65U,0xEBA91BBCU,0xEF68060BU,
0xD727BBB6U,0xD3E6A601U,0xDEA580D8U,0xDA649D6FU,
0xC423CD6AU,0xC0E2D0DDU,0xCDA1F604U,0xC960EBB3U,
0xBD3E8D7EU,0xB9FF90C9U,0xB4BCB610U,0xB07DABA7U,
0xAE3AFBA2U,0xAAFBE615U,0xA7B8C0CCU,0xA379DD7BU,
0x9B3660C6U,0x9FF77D71U,0x92B45BA8U,0x9675461FU,
0x8832161AU,0x8CF30BADU,0x81B02D74U,0x857130C3U,
0x5D8A9099U,0x594B8D2EU,0x5408ABF7U,0x50C9B640U,
0x4E8EE645U,0x4A4FFBF2U,0x470CDD2BU,0x43CDC09CU,
0x7B827D21U,0x7F436096U,0x7200464FU,0x76C15BF8U,
0x68860BFDU,0x6C47164AU,0x61043093U,0x65C52D24U,
0x119B4BE9U,0x155A565EU,0x18197087U,0x1CD86D30U,
0x029F3D35U,0x065E2082U,0x0B1D065BU,0x0FDC1BECU,
0x3793A651U,0x3352BBE6U,0x3E119D3FU,0x3AD08088U,
0x2497D08DU,0x2056CD3AU,0x2D15EBE3U,0x29D4F654U,
0xC5A92679U,0xC1683BCEU,0xCC2B1D17U,0xC8EA00A0U,
0xD6AD50A5U,0xD26C4D12U,0xDF2F6BCBU,0xDBEE767CU,
0xE3A1CBC1U,0xE760D676U,0xEA23F0AFU,0xEEE2ED18U,
0xF0A5BD1DU,0xF464A0AAU,0xF9278673U,0xFDE69BC4U,
0x89B8FD09U,0x8D79E0BEU,0x803AC667U,0x84FBDBD0U,
0x9ABC8BD5U,0x9E7D9662U,0x933EB0BBU,0x97FFAD0CU,
0xAFB010B1U,0xAB710D06U,0xA6322BDFU,0xA2F33668U,
0xBCB4666DU,0xB8757BDAU,0xB5365D03U,0xB1F740B4U,
};
while (len > 0)
{
crc = table[*data ^ ((crc >> 24) & 0xff)] ^ (crc << 8);
data++;
len--;
}
return crc;
}
unsigned int
digital_crc32(const unsigned char *buf, size_t len)
{
return digital_update_crc32(0xffffffff, buf, len) ^ 0xffffffff;
}

View File

@@ -316,7 +316,7 @@ RECURSIVE = NO
# excluded from the INPUT source files. This way you can easily exclude a # excluded from the INPUT source files. This way you can easily exclude a
# subdirectory from a directory tree whose root is specified with the INPUT tag. # subdirectory from a directory tree whose root is specified with the INPUT tag.
EXCLUDE = include/pcp/base85.h include/pcp/config.h include/pcp/digital_crc32.h include/pcp/jenhash.h include/pcp/platform.h include/pcp/uthash.h include/pcp/zmq_z85.h EXCLUDE = include/pcp/config.h include/pcp/jenhash.h include/pcp/platform.h include/pcp/uthash.h include/pcp/zmq_z85.h
# If the value of the INPUT tag contains directories, you can use the # If the value of the INPUT tag contains directories, you can use the
# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude

View File

@@ -124,7 +124,7 @@
.\" ======================================================================== .\" ========================================================================
.\" .\"
.IX Title "PCP1 1" .IX Title "PCP1 1"
.TH PCP1 1 "2015-01-17" "PCP 0.2.5" "USER CONTRIBUTED DOCUMENTATION" .TH PCP1 1 "2015-04-19" "PCP 0.2.6" "USER CONTRIBUTED DOCUMENTATION"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents. .\" way too many mistakes in technical documents.
.if n .ad l .if n .ad l
@@ -167,7 +167,8 @@ Pretty Curved Privacy \- File encryption using eliptic curve cryptography.
\& \-e \-\-encrypt Asym\-Encrypt a message. If none of \-i or \-r \& \-e \-\-encrypt Asym\-Encrypt a message. If none of \-i or \-r
\& has been given, encrypt the message symetrically. \& has been given, encrypt the message symetrically.
\& \-A \-\-anonymous Use anonymous sender key pair. \& \-A \-\-anonymous Use anonymous sender key pair.
\& \-m \-\-encrypt\-me Symetrically encrypt a message. \& \-M \-\-add\-myself Add you primary pub key to list of recipients.
\& \-m \-\-encrypt\-sym Symetrically encrypt a message.
\& \-d \-\-decrypt Decrypt a message. \& \-d \-\-decrypt Decrypt a message.
\& \&
\& Signature Options: \& Signature Options:
@@ -268,10 +269,13 @@ Pretty Curved Privacy \- File encryption using eliptic curve cryptography.
\& your own primary key pair. In this mode the \& your own primary key pair. In this mode the
\& recipient doesn\*(Aqt need to have your public \& recipient doesn\*(Aqt need to have your public
\& key. \& key.
\& \-m \-\-encrypt\-me Sym\-Encrypt a message. Specify \-I and/or \& \-m \-\-encrypt\-sym Sym\-Encrypt a message. Specify \-I and/or
\& \-O for input/output file. You will be asked \& \-O for input/output file. You will be asked
\& for a passphrase. No key material will \& for a passphrase. No key material will
\& be used. Same as \-e without \-r and \-i. \& be used. Same as \-e without \-r and \-i.
\& \-M \-\-add\-myself Add yourself to list of recipients in asymmetric
\& encryption mode, so that you can decrypt it as
\& well.
\& \-d \-\-decrypt Decrypt a message. Read from stdin or \& \-d \-\-decrypt Decrypt a message. Read from stdin or
\& specified via \-I. Output to stdout or \& specified via \-I. Output to stdout or
\& written to the file specified via \-O. \& written to the file specified via \-O.
@@ -438,6 +442,9 @@ Another example:
.Vb 1 .Vb 1
\& pcp1 \-e \-r Bobby \-r McCoy \-I message.txt \-O message.asc \& pcp1 \-e \-r Bobby \-r McCoy \-I message.txt \-O message.asc
.Ve .Ve
.Sp
As you can see, it is also possible to encrypt a message for multiple
recipients.
.IP "\fBAonymous public key encryption\fR" 4 .IP "\fBAonymous public key encryption\fR" 4
.IX Item "Aonymous public key encryption" .IX Item "Aonymous public key encryption"
In anonymous mode a random generated keypair will be used on the In anonymous mode a random generated keypair will be used on the

View File

@@ -39,7 +39,8 @@ Pretty Curved Privacy - File encryption using eliptic curve cryptography.
-e --encrypt Asym-Encrypt a message. If none of -i or -r -e --encrypt Asym-Encrypt a message. If none of -i or -r
has been given, encrypt the message symetrically. has been given, encrypt the message symetrically.
-A --anonymous Use anonymous sender key pair. -A --anonymous Use anonymous sender key pair.
-m --encrypt-me Symetrically encrypt a message. -M --add-myself Add you primary pub key to list of recipients.
-m --encrypt-sym Symetrically encrypt a message.
-d --decrypt Decrypt a message. -d --decrypt Decrypt a message.
Signature Options: Signature Options:
@@ -139,10 +140,13 @@ Pretty Curved Privacy - File encryption using eliptic curve cryptography.
your own primary key pair. In this mode the your own primary key pair. In this mode the
recipient doesn't need to have your public recipient doesn't need to have your public
key. key.
-m --encrypt-me Sym-Encrypt a message. Specify -I and/or -m --encrypt-sym Sym-Encrypt a message. Specify -I and/or
-O for input/output file. You will be asked -O for input/output file. You will be asked
for a passphrase. No key material will for a passphrase. No key material will
be used. Same as -e without -r and -i. be used. Same as -e without -r and -i.
-M --add-myself Add yourself to list of recipients in asymmetric
encryption mode, so that you can decrypt it as
well.
-d --decrypt Decrypt a message. Read from stdin or -d --decrypt Decrypt a message. Read from stdin or
specified via -I. Output to stdout or specified via -I. Output to stdout or
written to the file specified via -O. written to the file specified via -O.
@@ -303,6 +307,9 @@ Another example:
pcp1 -e -r Bobby -r McCoy -I message.txt -O message.asc pcp1 -e -r Bobby -r McCoy -I message.txt -O message.asc
As you can see, it is also possible to encrypt a message for multiple
recipients.
=item B<Aonymous public key encryption> =item B<Aonymous public key encryption>
In anonymous mode a random generated keypair will be used on the In anonymous mode a random generated keypair will be used on the

View File

@@ -38,7 +38,6 @@
#include "keyprint.h" #include "keyprint.h"
#include "keyhash.h" #include "keyhash.h"
#include "util.h" #include "util.h"
#include "base85.h"
#include "buffer.h" #include "buffer.h"
#include "mgmt.h" #include "mgmt.h"
#include "context.h" #include "context.h"

View File

@@ -29,7 +29,6 @@
#include "pcp.h" #include "pcp.h"
#include "keymgmt.h" #include "keymgmt.h"
#include "keyhash.h" #include "keyhash.h"
#include "base85.h"
#include "context.h" #include "context.h"
void pcpkey_print(pcp_key_t *key, FILE *out); void pcpkey_print(pcp_key_t *key, FILE *out);

View File

@@ -34,7 +34,8 @@
"-e --encrypt Asym-Encrypt a message. If none of -i or -r\n" \ "-e --encrypt Asym-Encrypt a message. If none of -i or -r\n" \
" has been given, encrypt the message symetrically.\n" \ " has been given, encrypt the message symetrically.\n" \
"-A --anonymous Use anonymous sender key pair.\n" \ "-A --anonymous Use anonymous sender key pair.\n" \
"-m --encrypt-me Symetrically encrypt a message.\n" \ "-M --add-myself Add you primary pub key to list of recipients.\n" \
"-m --encrypt-sym Symetrically encrypt a message.\n" \
"-d --decrypt Decrypt a message.\n" \ "-d --decrypt Decrypt a message.\n" \
"\n" \ "\n" \
"Signature Options:\n" \ "Signature Options:\n" \

View File

@@ -20,7 +20,7 @@
# #
AM_CFLAGS = -I../include/pcp -I../src -I../libpcp/scrypt/crypto AM_CFLAGS = -I../include/pcp -I../src -I../libpcp/scrypt/crypto
check_PROGRAMS = col invalidkeys gencheader statictest cpptest \ check_PROGRAMS = invalidkeys gencheader statictest cpptest \
buffertest sample streamtest pipetest decodertest mangle buffertest sample streamtest pipetest decodertest mangle
EXTRA_DIST = Makefile.am Makefile.in *.c *.h *.sh *.pl *.py *.cfg *.cpp \ EXTRA_DIST = Makefile.am Makefile.in *.c *.h *.sh *.pl *.py *.cfg *.cpp \
@@ -55,9 +55,6 @@ pipetest_SOURCES = pipetest.c
decodertest_LDADD = ../libpcp/.libs/libpcp1.a decodertest_LDADD = ../libpcp/.libs/libpcp1.a
decodertest_SOURCES = decodertest.c decodertest_SOURCES = decodertest.c
col_LDADD = ../libpcp/.libs/libpcp1.a
col_SOURCES = collisions.c ../src/compat_getopt.c
mangle_LDADD = mangle_LDADD =
mangle_SOURCES = mangle.c mangle_SOURCES = mangle.c

View File

@@ -1,247 +0,0 @@
/*
Run:
./col -l 1000000 | sort | uniq -c | sort | grep -v "1 " | wc -l
This generates the hashes and shows the number of collisions.
Hash algorithm can be selected by commandline options, see col -h.
Algorithms from:
http://eternallyconfuzzled.com/tuts/algorithms/jsw_tut_hashing.aspx
*/
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <compat_getopt.h>
#include <sodium.h>
#include <limits.h>
// lib
#include "mem.h"
#include "defines.h"
#include "digital_crc32.h"
#define ROUNDS 10
unsigned djb_hash ( void *key, int len ) {
unsigned char *p = key;
unsigned h = 0U;
int i;
for ( i = 0; i < len; i++ )
h = 33 * h ^ p[i];
return h;
}
unsigned fnv_hash ( void *key, int len ) {
unsigned char *p = key;
unsigned h = 2166136261U;
int i;
for ( i = 0; i < len; i++ )
h = ( h * 16777619 ) ^ p[i];
return h;
}
unsigned sax_hash ( void *key, int len ) {
unsigned char *p = key;
unsigned h = 0;
int i;
for ( i = 0; i < len; i++ )
h ^= ( h << 5 ) + ( h >> 2 ) + p[i];
return h;
}
unsigned oat_hash ( void *key, int len ) {
unsigned char *p = key;
unsigned h = 0;
int i;
for ( i = 0; i < len; i++ ) {
h += p[i];
h += ( h << 10 );
h ^= ( h >> 6 );
}
h += ( h << 3 );
h ^= ( h >> 11 );
h += ( h << 15 );
return h;
}
//#define jen_hashsize(n) ( 1U << (n) )
//#define jen_hashmask(n) ( jen_hashsize ( n ) - 1 )
#define jen_mix(a,b,c) \
{ \
a -= b; a -= c; a ^= ( c >> 13 ); \
b -= c; b -= a; b ^= ( a << 8 ); \
c -= a; c -= b; c ^= ( b >> 13 ); \
a -= b; a -= c; a ^= ( c >> 12 ); \
b -= c; b -= a; b ^= ( a << 16 ); \
c -= a; c -= b; c ^= ( b >> 5 ); \
a -= b; a -= c; a ^= ( c >> 3 ); \
b -= c; b -= a; b ^= ( a << 10 ); \
c -= a; c -= b; c ^= ( b >> 15 ); \
}
unsigned jen_hash ( unsigned char *k, unsigned length, unsigned initval ) {
unsigned a, b;
unsigned c = initval;
unsigned len = length;
a = b = 0x9e3779b9;
while ( len >= 12 ) {
a += ( k[0] + ( (unsigned)k[1] << 8 )
+ ( (unsigned)k[2] << 16 )
+ ( (unsigned)k[3] << 24 ) );
b += ( k[4] + ( (unsigned)k[5] << 8 )
+ ( (unsigned)k[6] << 16 )
+ ( (unsigned)k[7] << 24 ) );
c += ( k[8] + ( (unsigned)k[9] << 8 )
+ ( (unsigned)k[10] << 16 )
+ ( (unsigned)k[11] << 24 ) );
jen_mix ( a, b, c );
k += 12;
len -= 12;
}
c += length;
switch ( len ) {
case 11: c += ( (unsigned)k[10] << 24 );
case 10: c += ( (unsigned)k[9] << 16 );
case 9 : c += ( (unsigned)k[8] << 8 );
/* First byte of c reserved for length */
case 8 : b += ( (unsigned)k[7] << 24 );
case 7 : b += ( (unsigned)k[6] << 16 );
case 6 : b += ( (unsigned)k[5] << 8 );
case 5 : b += k[4];
case 4 : a += ( (unsigned)k[3] << 24 );
case 3 : a += ( (unsigned)k[2] << 16 );
case 2 : a += ( (unsigned)k[1] << 8 );
case 1 : a += k[0];
}
jen_mix ( a, b, c );
return c;
}
char *keyid(int h, char *id, byte *pub, byte *sec) {
uint32_t s, p;
p = s = 0;
switch (h) {
case 1:
p = oat_hash(pub, 32);
s = oat_hash(sec, 32);
break;
case 2:
p = digital_crc32(pub, 32);
s = digital_crc32(sec, 32);
break;
case 3:
p = djb_hash(pub, 32);
s = djb_hash(sec, 32);
break;
case 4:
p = fnv_hash(pub, 32);
s = fnv_hash(sec, 32);
break;
case 5:
p = sax_hash(pub, 32);
s = sax_hash(sec, 32);
break;
case 6:
p = jen_hash(pub, 32, 0xd4a1);
s = jen_hash(sec, 32, 0xe8c0);
break;
}
snprintf(id, 17, "%08X%08X", p, s);
return id;
}
void usage () {
fprintf(stderr, "Options:\n");
fprintf(stderr, " -o use Jenkins OAT hashing\n");
fprintf(stderr, " -c use CRC32 checksums\n");
fprintf(stderr, " -d use DJB hash\n");
fprintf(stderr, " -s use SAX hash\n");
fprintf(stderr, " -f use FNV hash \n");
fprintf(stderr, " -j use Jenkins hash \n");
fprintf(stderr, " -l <rounds> specify rounds, default: 10\n");
fprintf(stderr, " -h print this help message\n");
fprintf(stderr, "When complete, check the output for collisions:\n");
fprintf(stderr, "cat hashfile | sort | uniq -c | sort | grep -v \"1 \" | wc -l\n");
exit(1);
}
int main(int argc, char **argv) {
byte public[32] = { 0 };
byte secret[32] = { 0 };
char *id = ucmalloc(17);
int i;
int opt;
int h = 1;
long long rounds = ROUNDS;
while (1) {
opt = getopt(argc, argv, "jsfdochl:");
if(opt == -1) {
break;
}
switch (opt) {
case 'o':
h = 1;
break;
case 'c':
h = 2;
break;
case 'd':
h = 3;
break;
case 'f':
h = 4;
break;
case 's':
h = 5;
break;
case 'j':
h = 6;
break;
case 'l':
rounds = strtoll(optarg, NULL, 10);
break;
case 'h':
usage();
}
}
for(i=0; i<rounds; i++) {
crypto_box_keypair (public, secret);
id = keyid(h, id, public, secret);
printf("%s\n", id);
}
return 0;
}