20 #include <gnutls/gnutls.h>
21 #include <gnutls/crypto.h>
22 #ifdef HAVE_GNUTLS_ABSTRACT_H
23 # include <gnutls/abstract.h>
26 #if !defined(HAVE_NETTLE) || !defined(HAVE_GMP) || !defined(HAVE_GNUTLS_RND)
31 # include <libtasn1.h>
35 # include <nettle/asn1.h>
36 # include <nettle/rsa.h>
37 # include <nettle/bignum.h>
52 #error HAVE_GNUTLS not defines, this file should not be included
63 #define mpz_powm(w,n,e,m) \
64 gcry_mpi_powm((w)->num, (n)->num, (e)->num, (m)->num);
65 #define mpz_init(n) do { (n)->num = NULL; } while(0)
66 #define mpz_clear(n) gcry_mpi_release((n)->num)
80 gcry_mpi_scan(&x->
num, GCRYMPI_FMT_USG, s, length,
NULL);
86 gcry_mpi_print(GCRYMPI_FMT_USG, s, length,
NULL, x->
num);
123 if (cls == ASN1_CLASS_STRUCTURED)
131 der->
data = (
const unsigned char *) der_buf;
166 key->size = (gcry_mpi_get_nbits(
key->n->num)+7)/8;
180 gcry_md_hash_buffer(GCRY_MD_SHA1,
hash, data,
len);
200 #define dumpl(b,l) tdsdump_dump_buf(TDS_DBG_INFO1, #b, b, l)
202 #define dumpl(b,l) do {} while(0)
204 #define dump(b) dumpl(b, sizeof(b))
207 #define hash_func sha1
217 dest[
n] = dest[
n] ^ src[
n];
255 const unsigned db_len = key_size -
hash_len - 1;
257 if (length +
hash_len * 2 + 2 > key_size)
262 memset(&em, 0,
sizeof(em));
264 em.all[key_size - length - 1] = 0x1;
265 memcpy(em.all+(key_size - length), message, length);
266 dumpl(em.db, db_len);
269 random(random_ctx,
hash_len, em.ros);
274 dumpl(em.db, db_len);
289 if (!
oaep_encrypt(
key->size, random_ctx, random, length, message, gibberish))
297 tds5_rsa_encrypt(
const void *
key,
size_t key_len,
const void *nonce,
size_t nonce_len,
const char *pwd,
size_t *em_size)
301 gnutls_datum_t pubkey_datum = { (
unsigned char *)
key, key_len };
305 size_t message_len, pwd_len;
307 unsigned char der_buf[2048];
308 size_t size =
sizeof(der_buf);
313 pwd_len = strlen(pwd);
314 message_len = nonce_len + pwd_len;
318 memcpy(message, nonce, nonce_len);
319 memcpy(message + nonce_len, pwd, pwd_len);
323 ret = gnutls_pem_base64_decode(
"RSA PUBLIC KEY", &pubkey_datum, der_buf, &
size);
350 *em_size = pubkey.
size;
#define TDS_PUT_UA4BE(ptr, val)
std::ofstream out("events_result.xml")
main entry point for tests
static int oaep_encrypt(size_t key_size, void *random_ctx, nettle_random_func *random, size_t length, const uint8_t *message, mpz_t m)
static int rsa_encrypt_oaep(const struct rsa_public_key *key, void *random_ctx, nettle_random_func *random, size_t length, const uint8_t *message, mpz_t gibberish)
static int rsa_public_key_from_der_iterator(struct rsa_public_key *key, unsigned key_bits, struct asn1_der_iterator *der)
static void rnd_func(void *ctx, size_t len, uint8_t *out)
static const char label[]
void nettle_random_func(void *ctx, size_t len, uint8_t *out)
#define mpz_powm(w, n, e, m)
static void memxor(uint8_t *dest, const uint8_t *src, size_t len)
static void nettle_mpz_get_str_256(unsigned length, uint8_t *s, const mpz_t x)
static void sha1(uint8_t *hash, const void *data, size_t len)
static enum asn1_iterator_result asn1_der_iterator_first(struct asn1_der_iterator *der, int size, const void *der_buf)
static void rsa_public_key_init(struct rsa_public_key *key)
static void * tds5_rsa_encrypt(const void *key, size_t key_len, const void *nonce, size_t nonce_len, const char *pwd, size_t *em_size)
static void mgf_mask(uint8_t *dest, size_t dest_len, const uint8_t *mask, size_t mask_len)
static enum asn1_iterator_result asn1_der_iterator_next(struct asn1_der_iterator *der)
static void rsa_public_key_clear(struct rsa_public_key *key)
static void nettle_mpz_set_str_256_u(mpz_t x, unsigned length, const uint8_t *s)
@ ASN1_ITERATOR_PRIMITIVE
@ ASN1_ITERATOR_CONSTRUCTED
const struct ncbi::grid::netcache::search::fields::SIZE size
const struct ncbi::grid::netcache::search::fields::KEY key
#define tds_random_buffer
const unsigned char * data
const unsigned char * data_end