dh: remove including of c-files
This commit is contained in:
parent
71ccad06bd
commit
2bdebb3932
233
src/pk/dh/dh.c
233
src/pk/dh/dh.c
@ -17,231 +17,8 @@
|
||||
|
||||
#ifdef LTC_MDH
|
||||
|
||||
/* size of a packet header in bytes */
|
||||
#define PACKET_SIZE 4
|
||||
|
||||
/* Section tags */
|
||||
#define PACKET_SECT_DH 1
|
||||
|
||||
/* Subsection Tags for the first three sections */
|
||||
#define PACKET_SUB_KEY 0
|
||||
#define PACKET_SUB_ENCRYPTED 1
|
||||
#define PACKET_SUB_SIGNED 2
|
||||
#define PACKET_SUB_ENC_KEY 3
|
||||
|
||||
#define OUTPUT_BIGNUM(num, out, y, z) \
|
||||
{ \
|
||||
if ((y + 4) > *outlen) { return CRYPT_BUFFER_OVERFLOW; } \
|
||||
z = (unsigned long)mp_unsigned_bin_size(num); \
|
||||
STORE32L(z, out+y); \
|
||||
y += 4; \
|
||||
if ((y + z) > *outlen) { return CRYPT_BUFFER_OVERFLOW; } \
|
||||
if ((err = mp_to_unsigned_bin(num, out+y)) != CRYPT_OK) { return err; } \
|
||||
y += z; \
|
||||
}
|
||||
|
||||
#define INPUT_BIGNUM(num, in, x, y, inlen) \
|
||||
{ \
|
||||
/* load value */ \
|
||||
if ((y + 4) > inlen) { \
|
||||
err = CRYPT_INVALID_PACKET; \
|
||||
goto error; \
|
||||
} \
|
||||
LOAD32L(x, in+y); \
|
||||
y += 4; \
|
||||
\
|
||||
/* sanity check... */ \
|
||||
if ((x+y) > inlen) { \
|
||||
err = CRYPT_INVALID_PACKET; \
|
||||
goto error; \
|
||||
} \
|
||||
\
|
||||
/* load it */ \
|
||||
if ((err = mp_read_unsigned_bin(num, (unsigned char *)in+y, (int)x)) != CRYPT_OK) {\
|
||||
goto error; \
|
||||
} \
|
||||
y += x; \
|
||||
}
|
||||
|
||||
static void packet_store_header(unsigned char *dst, int section, int subsection)
|
||||
{
|
||||
LTC_ARGCHK(dst != NULL);
|
||||
|
||||
/* store version number */
|
||||
dst[0] = (unsigned char)(CRYPT&255);
|
||||
dst[1] = (unsigned char)((CRYPT>>8)&255);
|
||||
|
||||
/* store section and subsection */
|
||||
dst[2] = (unsigned char)(section & 255);
|
||||
dst[3] = (unsigned char)(subsection & 255);
|
||||
|
||||
}
|
||||
|
||||
static int packet_valid_header(unsigned char *src, int section, int subsection)
|
||||
{
|
||||
unsigned long ver;
|
||||
|
||||
LTC_ARGCHK(src != NULL);
|
||||
|
||||
/* check version */
|
||||
ver = ((unsigned long)src[0]) | ((unsigned long)src[1] << 8U);
|
||||
if (CRYPT < ver) {
|
||||
return CRYPT_INVALID_PACKET;
|
||||
}
|
||||
|
||||
/* check section and subsection */
|
||||
if (section != (int)src[2] || subsection != (int)src[3]) {
|
||||
return CRYPT_INVALID_PACKET;
|
||||
}
|
||||
|
||||
return CRYPT_OK;
|
||||
}
|
||||
|
||||
|
||||
/* max export size we'll encounter (smaller than this but lets round up a bit) */
|
||||
#define DH_BUF_SIZE 1200
|
||||
|
||||
/* This holds the key settings. ***MUST*** be organized by size from smallest to largest. */
|
||||
static const struct {
|
||||
int size;
|
||||
char *name, *base, *prime;
|
||||
} sets[] = {
|
||||
#ifdef DH768
|
||||
{
|
||||
96,
|
||||
"DH-768",
|
||||
"4",
|
||||
"F///////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"//////m3wvV"
|
||||
},
|
||||
#endif
|
||||
#ifdef DH1024
|
||||
{
|
||||
128,
|
||||
"DH-1024",
|
||||
"4",
|
||||
"F///////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////m3C47"
|
||||
},
|
||||
#endif
|
||||
#ifdef DH1280
|
||||
{
|
||||
160,
|
||||
"DH-1280",
|
||||
"4",
|
||||
"F///////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"//////////////////////////////m4kSN"
|
||||
},
|
||||
#endif
|
||||
#ifdef DH1536
|
||||
{
|
||||
192,
|
||||
"DH-1536",
|
||||
"4",
|
||||
"F///////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////m5uqd"
|
||||
},
|
||||
#endif
|
||||
#ifdef DH1792
|
||||
{
|
||||
224,
|
||||
"DH-1792",
|
||||
"4",
|
||||
"F///////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"//////////////////////////////////////////////////////mT/sd"
|
||||
},
|
||||
#endif
|
||||
#ifdef DH2048
|
||||
{
|
||||
256,
|
||||
"DH-2048",
|
||||
"4",
|
||||
"3///////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"/////////////////////////////////////////m8MPh"
|
||||
},
|
||||
#endif
|
||||
#ifdef DH2560
|
||||
{
|
||||
320,
|
||||
"DH-2560",
|
||||
"4",
|
||||
"3///////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"/////mKFpF"
|
||||
},
|
||||
#endif
|
||||
#ifdef DH3072
|
||||
{
|
||||
384,
|
||||
"DH-3072",
|
||||
"4",
|
||||
"3///////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"/////////////////////////////m32nN"
|
||||
},
|
||||
#endif
|
||||
#ifdef DH4096
|
||||
{
|
||||
512,
|
||||
"DH-4096",
|
||||
"4",
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"/////////////////////m8pOF"
|
||||
},
|
||||
#endif
|
||||
{
|
||||
0,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL
|
||||
}
|
||||
};
|
||||
|
||||
static int is_valid_idx(int n)
|
||||
{
|
||||
int x;
|
||||
|
||||
for (x = 0; sets[x].size; x++);
|
||||
if ((n < 0) || (n >= x)) {
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
#include "dh_static.h"
|
||||
|
||||
/**
|
||||
Test the DH sub-system (can take a while)
|
||||
@ -318,7 +95,7 @@ void dh_sizes(int *low, int *high)
|
||||
int dh_get_size(dh_key *key)
|
||||
{
|
||||
LTC_ARGCHK(key != NULL);
|
||||
if (is_valid_idx(key->idx) == 1) {
|
||||
if (dh_is_valid_idx(key->idx) == 1) {
|
||||
return sets[key->idx].size;
|
||||
} else {
|
||||
return INT_MAX; /* large value that would cause dh_make_key() to fail */
|
||||
@ -523,7 +300,7 @@ int dh_import(const unsigned char *in, unsigned long inlen, dh_key *key)
|
||||
}
|
||||
|
||||
/* is the key idx valid? */
|
||||
if (is_valid_idx(key->idx) != 1) {
|
||||
if (dh_is_valid_idx(key->idx) != 1) {
|
||||
err = CRYPT_PK_TYPE_MISMATCH;
|
||||
goto error;
|
||||
}
|
||||
@ -601,6 +378,4 @@ done:
|
||||
return err;
|
||||
}
|
||||
|
||||
#include "dh_sys.c"
|
||||
|
||||
#endif
|
||||
#endif /* LTC_MDH */
|
||||
|
163
src/pk/dh/dh_static.c
Normal file
163
src/pk/dh/dh_static.c
Normal file
@ -0,0 +1,163 @@
|
||||
/* LibTomCrypt, modular cryptographic library -- Tom St Denis
|
||||
*
|
||||
* LibTomCrypt is a library that provides various cryptographic
|
||||
* algorithms in a highly modular and flexible manner.
|
||||
*
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
/**
|
||||
@file dh_static.c
|
||||
DH crypto, Tom St Denis
|
||||
*/
|
||||
|
||||
#ifdef LTC_MDH
|
||||
|
||||
#define __DECL_DH_STATIC_H__
|
||||
#include "dh_static.h"
|
||||
|
||||
/* This holds the key settings. ***MUST*** be organized by size from smallest to largest. */
|
||||
const dh_set sets[] = {
|
||||
#ifdef DH768
|
||||
{
|
||||
96,
|
||||
"DH-768",
|
||||
"4",
|
||||
"F///////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"//////m3wvV"
|
||||
},
|
||||
#endif
|
||||
#ifdef DH1024
|
||||
{
|
||||
128,
|
||||
"DH-1024",
|
||||
"4",
|
||||
"F///////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////m3C47"
|
||||
},
|
||||
#endif
|
||||
#ifdef DH1280
|
||||
{
|
||||
160,
|
||||
"DH-1280",
|
||||
"4",
|
||||
"F///////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"//////////////////////////////m4kSN"
|
||||
},
|
||||
#endif
|
||||
#ifdef DH1536
|
||||
{
|
||||
192,
|
||||
"DH-1536",
|
||||
"4",
|
||||
"F///////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////m5uqd"
|
||||
},
|
||||
#endif
|
||||
#ifdef DH1792
|
||||
{
|
||||
224,
|
||||
"DH-1792",
|
||||
"4",
|
||||
"F///////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"//////////////////////////////////////////////////////mT/sd"
|
||||
},
|
||||
#endif
|
||||
#ifdef DH2048
|
||||
{
|
||||
256,
|
||||
"DH-2048",
|
||||
"4",
|
||||
"3///////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"/////////////////////////////////////////m8MPh"
|
||||
},
|
||||
#endif
|
||||
#ifdef DH2560
|
||||
{
|
||||
320,
|
||||
"DH-2560",
|
||||
"4",
|
||||
"3///////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"/////mKFpF"
|
||||
},
|
||||
#endif
|
||||
#ifdef DH3072
|
||||
{
|
||||
384,
|
||||
"DH-3072",
|
||||
"4",
|
||||
"3///////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"/////////////////////////////m32nN"
|
||||
},
|
||||
#endif
|
||||
#ifdef DH4096
|
||||
{
|
||||
512,
|
||||
"DH-4096",
|
||||
"4",
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"////////////////////////////////////////////////////////////"
|
||||
"/////////////////////m8pOF"
|
||||
},
|
||||
#endif
|
||||
{
|
||||
0,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL
|
||||
}
|
||||
};
|
||||
|
||||
int dh_is_valid_idx(int n)
|
||||
{
|
||||
int x;
|
||||
|
||||
for (x = 0; sets[x].size; x++);
|
||||
if ((n < 0) || (n >= x)) {
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
#endif /* LTC_MDH */
|
125
src/pk/dh/dh_static.h
Normal file
125
src/pk/dh/dh_static.h
Normal file
@ -0,0 +1,125 @@
|
||||
#ifndef __DH_STATIC_H__
|
||||
#define __DH_STATIC_H__
|
||||
#ifndef __DECL_DH_STATIC_H__
|
||||
#define __DECL_DH_STATIC_H__ extern
|
||||
#endif
|
||||
|
||||
/* LibTomCrypt, modular cryptographic library -- Tom St Denis
|
||||
*
|
||||
* LibTomCrypt is a library that provides various cryptographic
|
||||
* algorithms in a highly modular and flexible manner.
|
||||
*
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
/**
|
||||
@file dh_static.h
|
||||
DH crypto, Tom St Denis
|
||||
*/
|
||||
|
||||
#ifdef LTC_MDH
|
||||
|
||||
/* size of a packet header in bytes */
|
||||
#define PACKET_SIZE 4
|
||||
|
||||
/* Section tags */
|
||||
#define PACKET_SECT_DH 1
|
||||
|
||||
/* Subsection Tags for the first three sections */
|
||||
#define PACKET_SUB_KEY 0
|
||||
#define PACKET_SUB_ENCRYPTED 1
|
||||
#define PACKET_SUB_SIGNED 2
|
||||
#define PACKET_SUB_ENC_KEY 3
|
||||
|
||||
#define OUTPUT_BIGNUM(num, out, y, z) \
|
||||
{ \
|
||||
if ((y + 4) > *outlen) { return CRYPT_BUFFER_OVERFLOW; } \
|
||||
z = (unsigned long)mp_unsigned_bin_size(num); \
|
||||
STORE32L(z, out+y); \
|
||||
y += 4; \
|
||||
if ((y + z) > *outlen) { return CRYPT_BUFFER_OVERFLOW; } \
|
||||
if ((err = mp_to_unsigned_bin(num, out+y)) != CRYPT_OK) { return err; } \
|
||||
y += z; \
|
||||
}
|
||||
|
||||
#define INPUT_BIGNUM(num, in, x, y, inlen) \
|
||||
{ \
|
||||
/* load value */ \
|
||||
if ((y + 4) > inlen) { \
|
||||
err = CRYPT_INVALID_PACKET; \
|
||||
goto error; \
|
||||
} \
|
||||
LOAD32L(x, in+y); \
|
||||
y += 4; \
|
||||
\
|
||||
/* sanity check... */ \
|
||||
if ((x+y) > inlen) { \
|
||||
err = CRYPT_INVALID_PACKET; \
|
||||
goto error; \
|
||||
} \
|
||||
\
|
||||
/* load it */ \
|
||||
if ((err = mp_read_unsigned_bin(num, (unsigned char *)in+y, (int)x)) != CRYPT_OK) {\
|
||||
goto error; \
|
||||
} \
|
||||
y += x; \
|
||||
}
|
||||
|
||||
static inline void packet_store_header (unsigned char *dst, int section, int subsection)
|
||||
{
|
||||
LTC_ARGCHK(dst != NULL);
|
||||
|
||||
/* store version number */
|
||||
dst[0] = (unsigned char)(CRYPT&255);
|
||||
dst[1] = (unsigned char)((CRYPT>>8)&255);
|
||||
|
||||
/* store section and subsection */
|
||||
dst[2] = (unsigned char)(section & 255);
|
||||
dst[3] = (unsigned char)(subsection & 255);
|
||||
|
||||
}
|
||||
|
||||
static inline int packet_valid_header (unsigned char *src, int section, int subsection)
|
||||
{
|
||||
unsigned long ver;
|
||||
|
||||
LTC_ARGCHK(src != NULL);
|
||||
|
||||
/* check version */
|
||||
ver = ((unsigned long)src[0]) | ((unsigned long)src[1] << 8U);
|
||||
if (CRYPT < ver) {
|
||||
return CRYPT_INVALID_PACKET;
|
||||
}
|
||||
|
||||
/* check section and subsection */
|
||||
if (section != (int)src[2] || subsection != (int)src[3]) {
|
||||
return CRYPT_INVALID_PACKET;
|
||||
}
|
||||
|
||||
return CRYPT_OK;
|
||||
}
|
||||
|
||||
#ifndef DH_BUF_SIZE
|
||||
/* max export size we'll encounter (smaller than this but lets round up a bit) */
|
||||
#define DH_BUF_SIZE 1200
|
||||
#endif /* DH_BUF_SIZE */
|
||||
|
||||
typedef struct {
|
||||
int size;
|
||||
char *name, *base, *prime;
|
||||
} dh_set;
|
||||
|
||||
/* This holds the key settings. ***MUST*** be organized by size from smallest to largest. */
|
||||
__DECL_DH_STATIC_H__ const dh_set sets[];
|
||||
|
||||
|
||||
int dh_is_valid_idx(int n);
|
||||
|
||||
|
||||
#endif /* __DH_STATIC_H__ */
|
||||
|
||||
#endif /* LTC_MDH */
|
@ -9,11 +9,17 @@
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
|
||||
*/
|
||||
|
||||
#include "tomcrypt.h"
|
||||
|
||||
#ifdef LTC_MDH
|
||||
/**
|
||||
@file dh_sys.c
|
||||
DH Crypto, Tom St Denis
|
||||
*/
|
||||
|
||||
#include "dh_static.h"
|
||||
|
||||
|
||||
/**
|
||||
Encrypt a short symmetric key with a public DH key
|
||||
@param in The symmetric key to encrypt
|
||||
@ -323,7 +329,7 @@ int dh_sign_hash(const unsigned char *in, unsigned long inlen,
|
||||
}
|
||||
|
||||
/* is the IDX valid ? */
|
||||
if (is_valid_idx(key->idx) != 1) {
|
||||
if (dh_is_valid_idx(key->idx) != 1) {
|
||||
return CRYPT_PK_INVALID_TYPE;
|
||||
}
|
||||
|
||||
@ -482,3 +488,5 @@ done:
|
||||
mp_clear_multi(tmp, m, g, p, b, a, NULL);
|
||||
return err;
|
||||
}
|
||||
|
||||
#endif /* LTC_MDH */
|
||||
|
Loading…
Reference in New Issue
Block a user