mark all block comments that need format preserving so that
indent will not alter them when reformatting comments Reviewed-by: Rich Salz <rsalz@openssl.org> Reviewed-by: Matt Caswell <matt@openssl.org>
This commit is contained in:
parent
aa8a9266f9
commit
1d97c84351
152 changed files with 971 additions and 704 deletions
|
@ -69,7 +69,8 @@
|
||||||
#include <openssl/x509.h>
|
#include <openssl/x509.h>
|
||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
|
|
||||||
/* -inform arg - input format - default PEM (DER or PEM)
|
/*-
|
||||||
|
* -inform arg - input format - default PEM (DER or PEM)
|
||||||
* -in arg - input file - default stdin
|
* -in arg - input file - default stdin
|
||||||
* -i - indent the details by depth
|
* -i - indent the details by depth
|
||||||
* -offset - where in the file to start
|
* -offset - where in the file to start
|
||||||
|
|
|
@ -2829,7 +2829,8 @@ char *make_revocation_str(int rev_type, char *rev_arg)
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Convert revocation field to X509_REVOKED entry
|
/*-
|
||||||
|
* Convert revocation field to X509_REVOKED entry
|
||||||
* return code:
|
* return code:
|
||||||
* 0 error
|
* 0 error
|
||||||
* 1 OK
|
* 1 OK
|
||||||
|
|
|
@ -75,7 +75,8 @@ static int add_certs_from_file(STACK_OF(X509) *stack, char *certfile);
|
||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG crl2pkcs7_main
|
#define PROG crl2pkcs7_main
|
||||||
|
|
||||||
/* -inform arg - input format - default PEM (DER or PEM)
|
/*-
|
||||||
|
* -inform arg - input format - default PEM (DER or PEM)
|
||||||
* -outform arg - output format - default PEM
|
* -outform arg - output format - default PEM
|
||||||
* -in arg - input file - default stdin
|
* -in arg - input file - default stdin
|
||||||
* -out arg - output file - default stdout
|
* -out arg - output file - default stdout
|
||||||
|
|
|
@ -74,7 +74,8 @@
|
||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG dh_main
|
#define PROG dh_main
|
||||||
|
|
||||||
/* -inform arg - input format - default PEM (DER or PEM)
|
/*-
|
||||||
|
* -inform arg - input format - default PEM (DER or PEM)
|
||||||
* -outform arg - output format - default PEM
|
* -outform arg - output format - default PEM
|
||||||
* -in arg - input file - default stdin
|
* -in arg - input file - default stdin
|
||||||
* -out arg - output file - default stdout
|
* -out arg - output file - default stdout
|
||||||
|
|
|
@ -132,7 +132,8 @@
|
||||||
|
|
||||||
#define DEFBITS 2048
|
#define DEFBITS 2048
|
||||||
|
|
||||||
/* -inform arg - input format - default PEM (DER or PEM)
|
/*-
|
||||||
|
* -inform arg - input format - default PEM (DER or PEM)
|
||||||
* -outform arg - output format - default PEM
|
* -outform arg - output format - default PEM
|
||||||
* -in arg - input file - default stdin
|
* -in arg - input file - default stdin
|
||||||
* -out arg - output file - default stdout
|
* -out arg - output file - default stdout
|
||||||
|
|
|
@ -74,7 +74,8 @@
|
||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG dsa_main
|
#define PROG dsa_main
|
||||||
|
|
||||||
/* -inform arg - input format - default PEM (one of DER, NET or PEM)
|
/*-
|
||||||
|
* -inform arg - input format - default PEM (one of DER, NET or PEM)
|
||||||
* -outform arg - output format - default PEM
|
* -outform arg - output format - default PEM
|
||||||
* -in arg - input file - default stdin
|
* -in arg - input file - default stdin
|
||||||
* -out arg - output file - default stdout
|
* -out arg - output file - default stdout
|
||||||
|
|
|
@ -75,7 +75,8 @@
|
||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG dsaparam_main
|
#define PROG dsaparam_main
|
||||||
|
|
||||||
/* -inform arg - input format - default PEM (DER or PEM)
|
/*-
|
||||||
|
* -inform arg - input format - default PEM (DER or PEM)
|
||||||
* -outform arg - output format - default PEM
|
* -outform arg - output format - default PEM
|
||||||
* -in arg - input file - default stdin
|
* -in arg - input file - default stdin
|
||||||
* -out arg - output file - default stdout
|
* -out arg - output file - default stdout
|
||||||
|
|
|
@ -70,7 +70,8 @@
|
||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG ec_main
|
#define PROG ec_main
|
||||||
|
|
||||||
/* -inform arg - input format - default PEM (one of DER, NET or PEM)
|
/*-
|
||||||
|
* -inform arg - input format - default PEM (one of DER, NET or PEM)
|
||||||
* -outform arg - output format - default PEM
|
* -outform arg - output format - default PEM
|
||||||
* -in arg - input file - default stdin
|
* -in arg - input file - default stdin
|
||||||
* -out arg - output file - default stdout
|
* -out arg - output file - default stdout
|
||||||
|
|
|
@ -87,7 +87,8 @@
|
||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG ecparam_main
|
#define PROG ecparam_main
|
||||||
|
|
||||||
/* -inform arg - input format - default PEM (DER or PEM)
|
/*-
|
||||||
|
* -inform arg - input format - default PEM (DER or PEM)
|
||||||
* -outform arg - output format - default PEM
|
* -outform arg - output format - default PEM
|
||||||
* -in arg - input file - default stdin
|
* -in arg - input file - default stdin
|
||||||
* -out arg - output file - default stdout
|
* -out arg - output file - default stdout
|
||||||
|
|
|
@ -238,7 +238,8 @@ int main(int Argc, char *ARGV[])
|
||||||
long errline;
|
long errline;
|
||||||
|
|
||||||
#if defined( OPENSSL_SYS_VMS) && (__INITIAL_POINTER_SIZE == 64)
|
#if defined( OPENSSL_SYS_VMS) && (__INITIAL_POINTER_SIZE == 64)
|
||||||
/* 2011-03-22 SMS.
|
/*-
|
||||||
|
* 2011-03-22 SMS.
|
||||||
* If we have 32-bit pointers everywhere, then we're safe, and
|
* If we have 32-bit pointers everywhere, then we're safe, and
|
||||||
* we bypass this mess, as on non-VMS systems. (See ARGV,
|
* we bypass this mess, as on non-VMS systems. (See ARGV,
|
||||||
* above.)
|
* above.)
|
||||||
|
|
|
@ -43,7 +43,8 @@ static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p,
|
||||||
char *passwd, BIO *out, int quiet, int table, int reverse,
|
char *passwd, BIO *out, int quiet, int table, int reverse,
|
||||||
size_t pw_maxlen, int usecrypt, int use1, int useapr1);
|
size_t pw_maxlen, int usecrypt, int use1, int useapr1);
|
||||||
|
|
||||||
/* -crypt - standard Unix password algorithm (default)
|
/*-
|
||||||
|
* -crypt - standard Unix password algorithm (default)
|
||||||
* -1 - MD5-based password algorithm
|
* -1 - MD5-based password algorithm
|
||||||
* -apr1 - MD5-based password algorithm, Apache variant
|
* -apr1 - MD5-based password algorithm, Apache variant
|
||||||
* -salt string - salt
|
* -salt string - salt
|
||||||
|
|
|
@ -66,7 +66,8 @@
|
||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG rand_main
|
#define PROG rand_main
|
||||||
|
|
||||||
/* -out file - write to file
|
/*-
|
||||||
|
* -out file - write to file
|
||||||
* -rand file:file - PRNG seed files
|
* -rand file:file - PRNG seed files
|
||||||
* -base64 - base64 encode output
|
* -base64 - base64 encode output
|
||||||
* -hex - hex encode output
|
* -hex - hex encode output
|
||||||
|
|
|
@ -99,7 +99,8 @@
|
||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG req_main
|
#define PROG req_main
|
||||||
|
|
||||||
/* -inform arg - input format - default PEM (DER or PEM)
|
/*-
|
||||||
|
* -inform arg - input format - default PEM (DER or PEM)
|
||||||
* -outform arg - output format - default PEM
|
* -outform arg - output format - default PEM
|
||||||
* -in arg - input file - default stdin
|
* -in arg - input file - default stdin
|
||||||
* -out arg - output file - default stdout
|
* -out arg - output file - default stdout
|
||||||
|
|
|
@ -74,7 +74,8 @@
|
||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG rsa_main
|
#define PROG rsa_main
|
||||||
|
|
||||||
/* -inform arg - input format - default PEM (one of DER, NET or PEM)
|
/*-
|
||||||
|
* -inform arg - input format - default PEM (one of DER, NET or PEM)
|
||||||
* -outform arg - output format - default PEM
|
* -outform arg - output format - default PEM
|
||||||
* -in arg - input file - default stdin
|
* -in arg - input file - default stdin
|
||||||
* -out arg - output file - default stdout
|
* -out arg - output file - default stdout
|
||||||
|
|
|
@ -532,7 +532,7 @@ redoit:
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
ling.l_onoff=1;
|
ling.l_onoff=1;
|
||||||
ling.l_linger=0;
|
ling.l_linger=0;
|
||||||
i=setsockopt(ret,SOL_SOCKET,SO_LINGER,(char *)&ling,sizeof(ling));
|
i=setsockopt(ret,SOL_SOCKET,SO_LINGER,(char *)&ling,sizeof(ling));
|
||||||
|
|
|
@ -73,7 +73,8 @@
|
||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG spkac_main
|
#define PROG spkac_main
|
||||||
|
|
||||||
/* -in arg - input file - default stdin
|
/*-
|
||||||
|
* -in arg - input file - default stdin
|
||||||
* -out arg - output file - default stdout
|
* -out arg - output file - default stdout
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -1130,7 +1130,7 @@ static X509_STORE *create_cert_store(char *ca_path, char *ca_file)
|
||||||
|
|
||||||
static int MS_CALLBACK verify_cb(int ok, X509_STORE_CTX *ctx)
|
static int MS_CALLBACK verify_cb(int ok, X509_STORE_CTX *ctx)
|
||||||
{
|
{
|
||||||
/*
|
/*-
|
||||||
char buf[256];
|
char buf[256];
|
||||||
|
|
||||||
if (!ok)
|
if (!ok)
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
#ifdef USE_DECC_INIT
|
#ifdef USE_DECC_INIT
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
* 2010-04-26 SMS.
|
* 2010-04-26 SMS.
|
||||||
*
|
*
|
||||||
*----------------------------------------------------------------------
|
*----------------------------------------------------------------------
|
||||||
|
|
|
@ -41,7 +41,7 @@
|
||||||
#include "aes_locl.h"
|
#include "aes_locl.h"
|
||||||
|
|
||||||
#ifndef AES_ASM
|
#ifndef AES_ASM
|
||||||
/*
|
/*-
|
||||||
Te0[x] = S [x].[02, 01, 01, 03];
|
Te0[x] = S [x].[02, 01, 01, 03];
|
||||||
Te1[x] = S [x].[03, 02, 01, 01];
|
Te1[x] = S [x].[03, 02, 01, 01];
|
||||||
Te2[x] = S [x].[01, 03, 02, 01];
|
Te2[x] = S [x].[01, 03, 02, 01];
|
||||||
|
|
|
@ -105,7 +105,7 @@ typedef unsigned long long u64;
|
||||||
})
|
})
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
/*
|
/*-
|
||||||
Te [x] = S [x].[02, 01, 01, 03, 02, 01, 01, 03];
|
Te [x] = S [x].[02, 01, 01, 03, 02, 01, 01, 03];
|
||||||
Te0[x] = S [x].[02, 01, 01, 03];
|
Te0[x] = S [x].[02, 01, 01, 03];
|
||||||
Te1[x] = S [x].[03, 02, 01, 01];
|
Te1[x] = S [x].[03, 02, 01, 01];
|
||||||
|
@ -116,7 +116,7 @@ Te3[x] = S [x].[01, 01, 03, 02];
|
||||||
#define Te1 (u32)((u64*)((u8*)Te+3))
|
#define Te1 (u32)((u64*)((u8*)Te+3))
|
||||||
#define Te2 (u32)((u64*)((u8*)Te+2))
|
#define Te2 (u32)((u64*)((u8*)Te+2))
|
||||||
#define Te3 (u32)((u64*)((u8*)Te+1))
|
#define Te3 (u32)((u64*)((u8*)Te+1))
|
||||||
/*
|
/*-
|
||||||
Td [x] = Si[x].[0e, 09, 0d, 0b, 0e, 09, 0d, 0b];
|
Td [x] = Si[x].[0e, 09, 0d, 0b, 0e, 09, 0d, 0b];
|
||||||
Td0[x] = Si[x].[0e, 09, 0d, 0b];
|
Td0[x] = Si[x].[0e, 09, 0d, 0b];
|
||||||
Td1[x] = Si[x].[0b, 0e, 09, 0d];
|
Td1[x] = Si[x].[0b, 0e, 09, 0d];
|
||||||
|
|
|
@ -254,7 +254,8 @@ int ASN1_item_sign_ctx(const ASN1_ITEM *it,
|
||||||
signature);
|
signature);
|
||||||
if (rv == 1)
|
if (rv == 1)
|
||||||
outl = signature->length;
|
outl = signature->length;
|
||||||
/* Return value meanings:
|
/*-
|
||||||
|
* Return value meanings:
|
||||||
* <=0: error.
|
* <=0: error.
|
||||||
* 1: method does everything.
|
* 1: method does everything.
|
||||||
* 2: carry on as normal.
|
* 2: carry on as normal.
|
||||||
|
|
|
@ -54,7 +54,8 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/* This is an implementation of the ASN1 Time structure which is:
|
/*-
|
||||||
|
* This is an implementation of the ASN1 Time structure which is:
|
||||||
* Time ::= CHOICE {
|
* Time ::= CHOICE {
|
||||||
* utcTime UTCTime,
|
* utcTime UTCTime,
|
||||||
* generalTime GeneralizedTime }
|
* generalTime GeneralizedTime }
|
||||||
|
|
|
@ -63,7 +63,8 @@
|
||||||
|
|
||||||
/* UTF8 utilities */
|
/* UTF8 utilities */
|
||||||
|
|
||||||
/* This parses a UTF8 string one character at a time. It is passed a pointer
|
/*-
|
||||||
|
* This parses a UTF8 string one character at a time. It is passed a pointer
|
||||||
* to the string and the length of the string. It sets 'value' to the value of
|
* to the string and the length of the string. It sets 'value' to the value of
|
||||||
* the current character. It returns the number of characters read or a
|
* the current character. It returns the number of characters read or a
|
||||||
* negative error code:
|
* negative error code:
|
||||||
|
|
|
@ -367,7 +367,8 @@ typedef struct ASN1_VALUE_st ASN1_VALUE;
|
||||||
|
|
||||||
TYPEDEF_D2I2D_OF(void);
|
TYPEDEF_D2I2D_OF(void);
|
||||||
|
|
||||||
/* The following macros and typedefs allow an ASN1_ITEM
|
/*-
|
||||||
|
* The following macros and typedefs allow an ASN1_ITEM
|
||||||
* to be embedded in a structure and referenced. Since
|
* to be embedded in a structure and referenced. Since
|
||||||
* the ASN1_ITEM pointers need to be globally accessible
|
* the ASN1_ITEM pointers need to be globally accessible
|
||||||
* (possibly from shared libraries) they may exist in
|
* (possibly from shared libraries) they may exist in
|
||||||
|
|
|
@ -129,7 +129,8 @@ extern "C" {
|
||||||
|
|
||||||
/* This is a ASN1 type which just embeds a template */
|
/* This is a ASN1 type which just embeds a template */
|
||||||
|
|
||||||
/* This pair helps declare a SEQUENCE. We can do:
|
/*-
|
||||||
|
* This pair helps declare a SEQUENCE. We can do:
|
||||||
*
|
*
|
||||||
* ASN1_SEQUENCE(stname) = {
|
* ASN1_SEQUENCE(stname) = {
|
||||||
* ... SEQUENCE components ...
|
* ... SEQUENCE components ...
|
||||||
|
@ -231,7 +232,8 @@ extern "C" {
|
||||||
ASN1_ITEM_end(tname)
|
ASN1_ITEM_end(tname)
|
||||||
|
|
||||||
|
|
||||||
/* This pair helps declare a CHOICE type. We can do:
|
/*-
|
||||||
|
* This pair helps declare a CHOICE type. We can do:
|
||||||
*
|
*
|
||||||
* ASN1_CHOICE(chname) = {
|
* ASN1_CHOICE(chname) = {
|
||||||
* ... CHOICE options ...
|
* ... CHOICE options ...
|
||||||
|
|
|
@ -62,7 +62,8 @@
|
||||||
#include <openssl/asn1t.h>
|
#include <openssl/asn1t.h>
|
||||||
#include <openssl/x509.h>
|
#include <openssl/x509.h>
|
||||||
|
|
||||||
/* X509_ATTRIBUTE: this has the following form:
|
/*-
|
||||||
|
* X509_ATTRIBUTE: this has the following form:
|
||||||
*
|
*
|
||||||
* typedef struct x509_attributes_st
|
* typedef struct x509_attributes_st
|
||||||
* {
|
* {
|
||||||
|
|
|
@ -61,7 +61,8 @@
|
||||||
#include <openssl/asn1t.h>
|
#include <openssl/asn1t.h>
|
||||||
#include <openssl/x509.h>
|
#include <openssl/x509.h>
|
||||||
|
|
||||||
/* X509_REQ_INFO is handled in an unusual way to get round
|
/*-
|
||||||
|
* X509_REQ_INFO is handled in an unusual way to get round
|
||||||
* invalid encodings. Some broken certificate requests don't
|
* invalid encodings. Some broken certificate requests don't
|
||||||
* encode the attributes field if it is empty. This is in
|
* encode the attributes field if it is empty. This is in
|
||||||
* violation of PKCS#10 but we need to tolerate it. We do
|
* violation of PKCS#10 but we need to tolerate it. We do
|
||||||
|
|
|
@ -72,7 +72,7 @@ extern "C" {
|
||||||
#define BF_ENCRYPT 1
|
#define BF_ENCRYPT 1
|
||||||
#define BF_DECRYPT 0
|
#define BF_DECRYPT 0
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
* ! BF_LONG has to be at least 32 bits wide. If it's wider, then !
|
* ! BF_LONG has to be at least 32 bits wide. If it's wider, then !
|
||||||
* ! BF_LONG_LOG2 has to be defined along. !
|
* ! BF_LONG_LOG2 has to be defined along. !
|
||||||
|
|
|
@ -94,7 +94,7 @@
|
||||||
* on all source code distributions.
|
* on all source code distributions.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
* This code contains numerious changes and enhancements which were
|
* This code contains numerious changes and enhancements which were
|
||||||
* made by lots of contributors over the last years to Patrick Powell's
|
* made by lots of contributors over the last years to Patrick Powell's
|
||||||
* original code:
|
* original code:
|
||||||
|
|
|
@ -218,7 +218,8 @@ extern "C" {
|
||||||
#define BIO_GHBN_CTRL_FLUSH 5
|
#define BIO_GHBN_CTRL_FLUSH 5
|
||||||
|
|
||||||
/* Mostly used in the SSL BIO */
|
/* Mostly used in the SSL BIO */
|
||||||
/* Not used anymore
|
/*-
|
||||||
|
* Not used anymore
|
||||||
* #define BIO_FLAGS_PROTOCOL_DELAYED_READ 0x10
|
* #define BIO_FLAGS_PROTOCOL_DELAYED_READ 0x10
|
||||||
* #define BIO_FLAGS_PROTOCOL_DELAYED_WRITE 0x20
|
* #define BIO_FLAGS_PROTOCOL_DELAYED_WRITE 0x20
|
||||||
* #define BIO_FLAGS_PROTOCOL_STARTUP 0x40
|
* #define BIO_FLAGS_PROTOCOL_STARTUP 0x40
|
||||||
|
@ -336,7 +337,8 @@ DECLARE_STACK_OF(BIO)
|
||||||
|
|
||||||
typedef struct bio_f_buffer_ctx_struct
|
typedef struct bio_f_buffer_ctx_struct
|
||||||
{
|
{
|
||||||
/* Buffers are setup like this:
|
/*-
|
||||||
|
* Buffers are setup like this:
|
||||||
*
|
*
|
||||||
* <---------------------- size ----------------------->
|
* <---------------------- size ----------------------->
|
||||||
* +---------------------------------------------------+
|
* +---------------------------------------------------+
|
||||||
|
@ -715,7 +717,8 @@ int BIO_hex_string(BIO *out, int indent, int width, unsigned char *data,
|
||||||
int datalen);
|
int datalen);
|
||||||
|
|
||||||
struct hostent *BIO_gethostbyname(const char *name);
|
struct hostent *BIO_gethostbyname(const char *name);
|
||||||
/* We might want a thread-safe interface too:
|
/*-
|
||||||
|
* We might want a thread-safe interface too:
|
||||||
* struct hostent *BIO_gethostbyname_r(const char *name,
|
* struct hostent *BIO_gethostbyname_r(const char *name,
|
||||||
* struct hostent *result, void *buffer, size_t buflen);
|
* struct hostent *result, void *buffer, size_t buflen);
|
||||||
* or something similar (caller allocates a struct hostent,
|
* or something similar (caller allocates a struct hostent,
|
||||||
|
|
|
@ -436,7 +436,7 @@ static long acpt_ctrl(BIO *b, int cmd, long num, void *ptr)
|
||||||
ret=(long)data->bind_mode;
|
ret=(long)data->bind_mode;
|
||||||
break;
|
break;
|
||||||
case BIO_CTRL_DUP:
|
case BIO_CTRL_DUP:
|
||||||
/* dbio=(BIO *)ptr;
|
/*- dbio=(BIO *)ptr;
|
||||||
if (data->param_port) EAY EAY
|
if (data->param_port) EAY EAY
|
||||||
BIO_set_port(dbio,data->param_port);
|
BIO_set_port(dbio,data->param_port);
|
||||||
if (data->param_hostname)
|
if (data->param_hostname)
|
||||||
|
|
|
@ -269,7 +269,8 @@ static int bio_read(BIO *bio, char *buf, int size_)
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* non-copying interface: provide pointer to available data in buffer
|
/*-
|
||||||
|
* non-copying interface: provide pointer to available data in buffer
|
||||||
* bio_nread0: return number of available bytes
|
* bio_nread0: return number of available bytes
|
||||||
* bio_nread: also advance index
|
* bio_nread: also advance index
|
||||||
* (example usage: bio_nread0(), read from buffer, bio_nread()
|
* (example usage: bio_nread0(), read from buffer, bio_nread()
|
||||||
|
@ -422,7 +423,8 @@ static int bio_write(BIO *bio, const char *buf, int num_)
|
||||||
return num;
|
return num;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* non-copying interface: provide pointer to region to write to
|
/*-
|
||||||
|
* non-copying interface: provide pointer to region to write to
|
||||||
* bio_nwrite0: check how much space is available
|
* bio_nwrite0: check how much space is available
|
||||||
* bio_nwrite: also increase length
|
* bio_nwrite: also increase length
|
||||||
* (example usage: bio_nwrite0(), write to buffer, bio_nwrite()
|
* (example usage: bio_nwrite0(), write to buffer, bio_nwrite()
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#if !(defined(__GNUC__) && __GNUC__>=2)
|
#if !(defined(__GNUC__) && __GNUC__>=2)
|
||||||
# include "../bn_asm.c" /* kind of dirty hack for Sun Studio */
|
# include "../bn_asm.c" /* kind of dirty hack for Sun Studio */
|
||||||
#else
|
#else
|
||||||
/*
|
/*-
|
||||||
* x86_64 BIGNUM accelerator version 0.1, December 2002.
|
* x86_64 BIGNUM accelerator version 0.1, December 2002.
|
||||||
*
|
*
|
||||||
* Implemented by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
|
* Implemented by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
|
||||||
|
@ -64,7 +64,7 @@
|
||||||
#undef mul
|
#undef mul
|
||||||
#undef mul_add
|
#undef mul_add
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
* "m"(a), "+m"(r) is the way to favor DirectPath µ-code;
|
* "m"(a), "+m"(r) is the way to favor DirectPath µ-code;
|
||||||
* "g"(0) let the compiler to decide where does it
|
* "g"(0) let the compiler to decide where does it
|
||||||
* want to keep the value of zero;
|
* want to keep the value of zero;
|
||||||
|
|
|
@ -70,7 +70,8 @@ int BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b)
|
||||||
bn_check_top(a);
|
bn_check_top(a);
|
||||||
bn_check_top(b);
|
bn_check_top(b);
|
||||||
|
|
||||||
/* a + b a+b
|
/*-
|
||||||
|
* a + b a+b
|
||||||
* a + -b a-b
|
* a + -b a-b
|
||||||
* -a + b b-a
|
* -a + b b-a
|
||||||
* -a + -b -(a+b)
|
* -a + -b -(a+b)
|
||||||
|
@ -266,7 +267,8 @@ int BN_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b)
|
||||||
bn_check_top(a);
|
bn_check_top(a);
|
||||||
bn_check_top(b);
|
bn_check_top(b);
|
||||||
|
|
||||||
/* a - b a-b
|
/*-
|
||||||
|
* a - b a-b
|
||||||
* a - -b a+b
|
* a - -b a+b
|
||||||
* -a - b -(a+b)
|
* -a - b -(a+b)
|
||||||
* -a - -b b-a
|
* -a - -b b-a
|
||||||
|
|
|
@ -172,7 +172,8 @@ int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d,
|
||||||
#endif /* OPENSSL_NO_ASM */
|
#endif /* OPENSSL_NO_ASM */
|
||||||
|
|
||||||
|
|
||||||
/* BN_div computes dv := num / divisor, rounding towards
|
/*-
|
||||||
|
* BN_div computes dv := num / divisor, rounding towards
|
||||||
* zero, and sets up rm such that dv*divisor + rm = num holds.
|
* zero, and sets up rm such that dv*divisor + rm = num holds.
|
||||||
* Thus:
|
* Thus:
|
||||||
* dv->neg == num->neg ^ divisor->neg (unless the result is zero)
|
* dv->neg == num->neg ^ divisor->neg (unless the result is zero)
|
||||||
|
|
|
@ -200,7 +200,8 @@ int BN_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, const BIGNUM *m,
|
||||||
bn_check_top(p);
|
bn_check_top(p);
|
||||||
bn_check_top(m);
|
bn_check_top(m);
|
||||||
|
|
||||||
/* For even modulus m = 2^k*m_odd, it might make sense to compute
|
/*-
|
||||||
|
* For even modulus m = 2^k*m_odd, it might make sense to compute
|
||||||
* a^p mod m_odd and a^p mod 2^k separately (with Montgomery
|
* a^p mod m_odd and a^p mod 2^k separately (with Montgomery
|
||||||
* exponentiation for the odd part), using appropriate exponent
|
* exponentiation for the odd part), using appropriate exponent
|
||||||
* reductions, and combine the results using the CRT.
|
* reductions, and combine the results using the CRT.
|
||||||
|
|
|
@ -263,7 +263,8 @@ BIGNUM *int_bn_mod_inverse(BIGNUM *in,
|
||||||
if (!BN_nnmod(B, B, A, ctx)) goto err;
|
if (!BN_nnmod(B, B, A, ctx)) goto err;
|
||||||
}
|
}
|
||||||
sign = -1;
|
sign = -1;
|
||||||
/* From B = a mod |n|, A = |n| it follows that
|
/*-
|
||||||
|
* From B = a mod |n|, A = |n| it follows that
|
||||||
*
|
*
|
||||||
* 0 <= B < A,
|
* 0 <= B < A,
|
||||||
* -sign*X*a == B (mod |n|),
|
* -sign*X*a == B (mod |n|),
|
||||||
|
@ -280,7 +281,7 @@ BIGNUM *int_bn_mod_inverse(BIGNUM *in,
|
||||||
|
|
||||||
while (!BN_is_zero(B))
|
while (!BN_is_zero(B))
|
||||||
{
|
{
|
||||||
/*
|
/*-
|
||||||
* 0 < B < |n|,
|
* 0 < B < |n|,
|
||||||
* 0 < A <= |n|,
|
* 0 < A <= |n|,
|
||||||
* (1) -sign*X*a == B (mod |n|),
|
* (1) -sign*X*a == B (mod |n|),
|
||||||
|
@ -327,7 +328,8 @@ BIGNUM *int_bn_mod_inverse(BIGNUM *in,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* We still have (1) and (2).
|
/*-
|
||||||
|
* We still have (1) and (2).
|
||||||
* Both A and B are odd.
|
* Both A and B are odd.
|
||||||
* The following computations ensure that
|
* The following computations ensure that
|
||||||
*
|
*
|
||||||
|
@ -363,7 +365,7 @@ BIGNUM *int_bn_mod_inverse(BIGNUM *in,
|
||||||
{
|
{
|
||||||
BIGNUM *tmp;
|
BIGNUM *tmp;
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
* 0 < B < A,
|
* 0 < B < A,
|
||||||
* (*) -sign*X*a == B (mod |n|),
|
* (*) -sign*X*a == B (mod |n|),
|
||||||
* sign*Y*a == A (mod |n|)
|
* sign*Y*a == A (mod |n|)
|
||||||
|
@ -410,7 +412,8 @@ BIGNUM *int_bn_mod_inverse(BIGNUM *in,
|
||||||
if (!BN_div(D,M,A,B,ctx)) goto err;
|
if (!BN_div(D,M,A,B,ctx)) goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Now
|
/*-
|
||||||
|
* Now
|
||||||
* A = D*B + M;
|
* A = D*B + M;
|
||||||
* thus we have
|
* thus we have
|
||||||
* (**) sign*Y*a == D*B + M (mod |n|).
|
* (**) sign*Y*a == D*B + M (mod |n|).
|
||||||
|
@ -423,7 +426,8 @@ BIGNUM *int_bn_mod_inverse(BIGNUM *in,
|
||||||
B=M;
|
B=M;
|
||||||
/* ... so we have 0 <= B < A again */
|
/* ... so we have 0 <= B < A again */
|
||||||
|
|
||||||
/* Since the former M is now B and the former B is now A,
|
/*-
|
||||||
|
* Since the former M is now B and the former B is now A,
|
||||||
* (**) translates into
|
* (**) translates into
|
||||||
* sign*Y*a == D*A + B (mod |n|),
|
* sign*Y*a == D*A + B (mod |n|),
|
||||||
* i.e.
|
* i.e.
|
||||||
|
@ -476,7 +480,7 @@ BIGNUM *int_bn_mod_inverse(BIGNUM *in,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
* The while loop (Euclid's algorithm) ends when
|
* The while loop (Euclid's algorithm) ends when
|
||||||
* A == gcd(a,n);
|
* A == gcd(a,n);
|
||||||
* we have
|
* we have
|
||||||
|
@ -565,7 +569,8 @@ static BIGNUM *BN_mod_inverse_no_branch(BIGNUM *in,
|
||||||
if (!BN_nnmod(B, pB, A, ctx)) goto err;
|
if (!BN_nnmod(B, pB, A, ctx)) goto err;
|
||||||
}
|
}
|
||||||
sign = -1;
|
sign = -1;
|
||||||
/* From B = a mod |n|, A = |n| it follows that
|
/*-
|
||||||
|
* From B = a mod |n|, A = |n| it follows that
|
||||||
*
|
*
|
||||||
* 0 <= B < A,
|
* 0 <= B < A,
|
||||||
* -sign*X*a == B (mod |n|),
|
* -sign*X*a == B (mod |n|),
|
||||||
|
@ -576,7 +581,7 @@ static BIGNUM *BN_mod_inverse_no_branch(BIGNUM *in,
|
||||||
{
|
{
|
||||||
BIGNUM *tmp;
|
BIGNUM *tmp;
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
* 0 < B < A,
|
* 0 < B < A,
|
||||||
* (*) -sign*X*a == B (mod |n|),
|
* (*) -sign*X*a == B (mod |n|),
|
||||||
* sign*Y*a == A (mod |n|)
|
* sign*Y*a == A (mod |n|)
|
||||||
|
@ -591,7 +596,8 @@ static BIGNUM *BN_mod_inverse_no_branch(BIGNUM *in,
|
||||||
/* (D, M) := (A/B, A%B) ... */
|
/* (D, M) := (A/B, A%B) ... */
|
||||||
if (!BN_div(D,M,pA,B,ctx)) goto err;
|
if (!BN_div(D,M,pA,B,ctx)) goto err;
|
||||||
|
|
||||||
/* Now
|
/*-
|
||||||
|
* Now
|
||||||
* A = D*B + M;
|
* A = D*B + M;
|
||||||
* thus we have
|
* thus we have
|
||||||
* (**) sign*Y*a == D*B + M (mod |n|).
|
* (**) sign*Y*a == D*B + M (mod |n|).
|
||||||
|
@ -604,7 +610,8 @@ static BIGNUM *BN_mod_inverse_no_branch(BIGNUM *in,
|
||||||
B=M;
|
B=M;
|
||||||
/* ... so we have 0 <= B < A again */
|
/* ... so we have 0 <= B < A again */
|
||||||
|
|
||||||
/* Since the former M is now B and the former B is now A,
|
/*-
|
||||||
|
* Since the former M is now B and the former B is now A,
|
||||||
* (**) translates into
|
* (**) translates into
|
||||||
* sign*Y*a == D*A + B (mod |n|),
|
* sign*Y*a == D*A + B (mod |n|),
|
||||||
* i.e.
|
* i.e.
|
||||||
|
@ -632,7 +639,7 @@ static BIGNUM *BN_mod_inverse_no_branch(BIGNUM *in,
|
||||||
sign = -sign;
|
sign = -sign;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
* The while loop (Euclid's algorithm) ends when
|
* The while loop (Euclid's algorithm) ends when
|
||||||
* A == gcd(a,n);
|
* A == gcd(a,n);
|
||||||
* we have
|
* we have
|
||||||
|
|
|
@ -118,7 +118,8 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Bignum consistency macros
|
/*-
|
||||||
|
* Bignum consistency macros
|
||||||
* There is one "API" macro, bn_fix_top(), for stripping leading zeroes from
|
* There is one "API" macro, bn_fix_top(), for stripping leading zeroes from
|
||||||
* bignum data after direct manipulations on the data. There is also an
|
* bignum data after direct manipulations on the data. There is also an
|
||||||
* "internal" macro, bn_check_top(), for verifying that there are no leading
|
* "internal" macro, bn_check_top(), for verifying that there are no leading
|
||||||
|
@ -268,7 +269,7 @@ struct bn_gencb_st
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
* BN_window_bits_for_exponent_size -- macro for sliding window mod_exp functions
|
* BN_window_bits_for_exponent_size -- macro for sliding window mod_exp functions
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
|
|
|
@ -72,7 +72,8 @@ const char BN_version[]="Big Number" OPENSSL_VERSION_PTEXT;
|
||||||
|
|
||||||
/* This stuff appears to be completely unused, so is deprecated */
|
/* This stuff appears to be completely unused, so is deprecated */
|
||||||
#ifndef OPENSSL_NO_DEPRECATED
|
#ifndef OPENSSL_NO_DEPRECATED
|
||||||
/* For a 32 bit machine
|
/*-
|
||||||
|
* For a 32 bit machine
|
||||||
* 2 - 4 == 128
|
* 2 - 4 == 128
|
||||||
* 3 - 8 == 256
|
* 3 - 8 == 256
|
||||||
* 4 - 16 == 512
|
* 4 - 16 == 512
|
||||||
|
|
|
@ -348,7 +348,8 @@ BN_ULONG bn_add_part_words(BN_ULONG *r,
|
||||||
/* Karatsuba recursive multiplication algorithm
|
/* Karatsuba recursive multiplication algorithm
|
||||||
* (cf. Knuth, The Art of Computer Programming, Vol. 2) */
|
* (cf. Knuth, The Art of Computer Programming, Vol. 2) */
|
||||||
|
|
||||||
/* r is 2*n2 words in size,
|
/*-
|
||||||
|
* r is 2*n2 words in size,
|
||||||
* a and b are both n2 words in size.
|
* a and b are both n2 words in size.
|
||||||
* n2 must be a power of 2.
|
* n2 must be a power of 2.
|
||||||
* We multiply and return the result.
|
* We multiply and return the result.
|
||||||
|
@ -466,7 +467,8 @@ void bn_mul_recursive(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n2,
|
||||||
bn_mul_recursive(&(r[n2]),&(a[n]),&(b[n]),n,dna,dnb,p);
|
bn_mul_recursive(&(r[n2]),&(a[n]),&(b[n]),n,dna,dnb,p);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* t[32] holds (a[0]-a[1])*(b[1]-b[0]), c1 is the sign
|
/*-
|
||||||
|
* t[32] holds (a[0]-a[1])*(b[1]-b[0]), c1 is the sign
|
||||||
* r[10] holds (a[0]*b[0])
|
* r[10] holds (a[0]*b[0])
|
||||||
* r[32] holds (b[1]*b[1])
|
* r[32] holds (b[1]*b[1])
|
||||||
*/
|
*/
|
||||||
|
@ -483,7 +485,8 @@ void bn_mul_recursive(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n2,
|
||||||
c1+=(int)(bn_add_words(&(t[n2]),&(t[n2]),t,n2));
|
c1+=(int)(bn_add_words(&(t[n2]),&(t[n2]),t,n2));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* t[32] holds (a[0]-a[1])*(b[1]-b[0])+(a[0]*b[0])+(a[1]*b[1])
|
/*-
|
||||||
|
* t[32] holds (a[0]-a[1])*(b[1]-b[0])+(a[0]*b[0])+(a[1]*b[1])
|
||||||
* r[10] holds (a[0]*b[0])
|
* r[10] holds (a[0]*b[0])
|
||||||
* r[32] holds (b[1]*b[1])
|
* r[32] holds (b[1]*b[1])
|
||||||
* c1 holds the carry bits
|
* c1 holds the carry bits
|
||||||
|
@ -638,7 +641,8 @@ void bn_mul_part_recursive(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* t[32] holds (a[0]-a[1])*(b[1]-b[0]), c1 is the sign
|
/*-
|
||||||
|
* t[32] holds (a[0]-a[1])*(b[1]-b[0]), c1 is the sign
|
||||||
* r[10] holds (a[0]*b[0])
|
* r[10] holds (a[0]*b[0])
|
||||||
* r[32] holds (b[1]*b[1])
|
* r[32] holds (b[1]*b[1])
|
||||||
*/
|
*/
|
||||||
|
@ -655,7 +659,8 @@ void bn_mul_part_recursive(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n,
|
||||||
c1+=(int)(bn_add_words(&(t[n2]),&(t[n2]),t,n2));
|
c1+=(int)(bn_add_words(&(t[n2]),&(t[n2]),t,n2));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* t[32] holds (a[0]-a[1])*(b[1]-b[0])+(a[0]*b[0])+(a[1]*b[1])
|
/*-
|
||||||
|
* t[32] holds (a[0]-a[1])*(b[1]-b[0])+(a[0]*b[0])+(a[1]*b[1])
|
||||||
* r[10] holds (a[0]*b[0])
|
* r[10] holds (a[0]*b[0])
|
||||||
* r[32] holds (b[1]*b[1])
|
* r[32] holds (b[1]*b[1])
|
||||||
* c1 holds the carry bits
|
* c1 holds the carry bits
|
||||||
|
@ -682,7 +687,8 @@ void bn_mul_part_recursive(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* a and b must be the same size, which is n2.
|
/*-
|
||||||
|
* a and b must be the same size, which is n2.
|
||||||
* r needs to be n2 words and t needs to be n2*2
|
* r needs to be n2 words and t needs to be n2*2
|
||||||
*/
|
*/
|
||||||
void bn_mul_low_recursive(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n2,
|
void bn_mul_low_recursive(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n2,
|
||||||
|
@ -707,7 +713,8 @@ void bn_mul_low_recursive(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n2,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* a and b must be the same size, which is n2.
|
/*-
|
||||||
|
* a and b must be the same size, which is n2.
|
||||||
* r needs to be n2 words and t needs to be n2*2
|
* r needs to be n2 words and t needs to be n2*2
|
||||||
* l is the low words of the output.
|
* l is the low words of the output.
|
||||||
* t needs to be n2*3
|
* t needs to be n2*3
|
||||||
|
@ -775,7 +782,8 @@ void bn_mul_high(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, BN_ULONG *l, int n2,
|
||||||
bn_mul_recursive(r,&(a[n]),&(b[n]),n,0,0,&(t[n2]));
|
bn_mul_recursive(r,&(a[n]),&(b[n]),n,0,0,&(t[n2]));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* s0 == low(al*bl)
|
/*-
|
||||||
|
* s0 == low(al*bl)
|
||||||
* s1 == low(ah*bh)+low((al-ah)*(bh-bl))+low(al*bl)+high(al*bl)
|
* s1 == low(ah*bh)+low((al-ah)*(bh-bl))+low(al*bl)+high(al*bl)
|
||||||
* We know s0 and s1 so the only unknown is high(al*bl)
|
* We know s0 and s1 so the only unknown is high(al*bl)
|
||||||
* high(al*bl) == s1 - low(ah*bh+s0+(al-ah)*(bh-bl))
|
* high(al*bl) == s1 - low(ah*bh+s0+(al-ah)*(bh-bl))
|
||||||
|
@ -812,16 +820,19 @@ void bn_mul_high(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, BN_ULONG *l, int n2,
|
||||||
lp[i]=((~mp[i])+1)&BN_MASK2;
|
lp[i]=((~mp[i])+1)&BN_MASK2;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* s[0] = low(al*bl)
|
/*-
|
||||||
|
* s[0] = low(al*bl)
|
||||||
* t[3] = high(al*bl)
|
* t[3] = high(al*bl)
|
||||||
* t[10] = (a[0]-a[1])*(b[1]-b[0]) neg is the sign
|
* t[10] = (a[0]-a[1])*(b[1]-b[0]) neg is the sign
|
||||||
* r[10] = (a[1]*b[1])
|
* r[10] = (a[1]*b[1])
|
||||||
*/
|
*/
|
||||||
/* R[10] = al*bl
|
/*-
|
||||||
|
* R[10] = al*bl
|
||||||
* R[21] = al*bl + ah*bh + (a[0]-a[1])*(b[1]-b[0])
|
* R[21] = al*bl + ah*bh + (a[0]-a[1])*(b[1]-b[0])
|
||||||
* R[32] = ah*bh
|
* R[32] = ah*bh
|
||||||
*/
|
*/
|
||||||
/* R[1]=t[3]+l[0]+r[0](+-)t[0] (have carry/borrow)
|
/*-
|
||||||
|
* R[1]=t[3]+l[0]+r[0](+-)t[0] (have carry/borrow)
|
||||||
* R[2]=r[0]+t[3]+r[1](+-)t[1] (have carry/borrow)
|
* R[2]=r[0]+t[3]+r[1](+-)t[1] (have carry/borrow)
|
||||||
* R[3]=r[1]+(carry/borrow)
|
* R[3]=r[1]+(carry/borrow)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -524,7 +524,8 @@ loop:
|
||||||
{
|
{
|
||||||
BN_ULONG rnd_word = BN_get_word(rnd);
|
BN_ULONG rnd_word = BN_get_word(rnd);
|
||||||
|
|
||||||
/* In the case that the candidate prime is a single word then
|
/*-
|
||||||
|
* In the case that the candidate prime is a single word then
|
||||||
* we check that:
|
* we check that:
|
||||||
* 1) It's greater than primes[i] because we shouldn't reject
|
* 1) It's greater than primes[i] because we shouldn't reject
|
||||||
* 3 as being a prime number because it's a multiple of
|
* 3 as being a prime number because it's a multiple of
|
||||||
|
@ -532,7 +533,8 @@ loop:
|
||||||
* 2) That it's not a multiple of a known prime. We don't
|
* 2) That it's not a multiple of a known prime. We don't
|
||||||
* check that rnd-1 is also coprime to all the known
|
* check that rnd-1 is also coprime to all the known
|
||||||
* primes because there aren't many small primes where
|
* primes because there aren't many small primes where
|
||||||
* that's true. */
|
* that's true.
|
||||||
|
*/
|
||||||
for (i=1; i<NUMPRIMES && primes[i]<rnd_word; i++)
|
for (i=1; i<NUMPRIMES && primes[i]<rnd_word; i++)
|
||||||
{
|
{
|
||||||
if ((mods[i]+delta)%primes[i] == 0)
|
if ((mods[i]+delta)%primes[i] == 0)
|
||||||
|
|
|
@ -172,7 +172,8 @@ int BN_div_recp(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m,
|
||||||
i,ctx); /* BN_reciprocal returns i, or -1 for an error */
|
i,ctx); /* BN_reciprocal returns i, or -1 for an error */
|
||||||
if (recp->shift == -1) goto err;
|
if (recp->shift == -1) goto err;
|
||||||
|
|
||||||
/* d := |round(round(m / 2^BN_num_bits(N)) * recp->Nr / 2^(i - BN_num_bits(N)))|
|
/*-
|
||||||
|
* d := |round(round(m / 2^BN_num_bits(N)) * recp->Nr / 2^(i - BN_num_bits(N)))|
|
||||||
* = |round(round(m / 2^BN_num_bits(N)) * round(2^i / N) / 2^(i - BN_num_bits(N)))|
|
* = |round(round(m / 2^BN_num_bits(N)) * round(2^i / N) / 2^(i - BN_num_bits(N)))|
|
||||||
* <= |(m / 2^BN_num_bits(N)) * (2^i / N) * (2^BN_num_bits(N) / 2^i)|
|
* <= |(m / 2^BN_num_bits(N)) * (2^i / N) * (2^BN_num_bits(N) / 2^i)|
|
||||||
* = |m/N|
|
* = |m/N|
|
||||||
|
|
|
@ -190,7 +190,8 @@ void bn_sqr_normal(BN_ULONG *r, const BN_ULONG *a, int n, BN_ULONG *tmp)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef BN_RECURSION
|
#ifdef BN_RECURSION
|
||||||
/* r is 2*n words in size,
|
/*-
|
||||||
|
* r is 2*n words in size,
|
||||||
* a and b are both n words in size. (There's not actually a 'b' here ...)
|
* a and b are both n words in size. (There's not actually a 'b' here ...)
|
||||||
* n must be a power of 2.
|
* n must be a power of 2.
|
||||||
* We multiply and return the result.
|
* We multiply and return the result.
|
||||||
|
@ -249,7 +250,8 @@ void bn_sqr_recursive(BN_ULONG *r, const BN_ULONG *a, int n2, BN_ULONG *t)
|
||||||
bn_sqr_recursive(r,a,n,p);
|
bn_sqr_recursive(r,a,n,p);
|
||||||
bn_sqr_recursive(&(r[n2]),&(a[n]),n,p);
|
bn_sqr_recursive(&(r[n2]),&(a[n]),n,p);
|
||||||
|
|
||||||
/* t[32] holds (a[0]-a[1])*(a[1]-a[0]), it is negative or zero
|
/*-
|
||||||
|
* t[32] holds (a[0]-a[1])*(a[1]-a[0]), it is negative or zero
|
||||||
* r[10] holds (a[0]*b[0])
|
* r[10] holds (a[0]*b[0])
|
||||||
* r[32] holds (b[1]*b[1])
|
* r[32] holds (b[1]*b[1])
|
||||||
*/
|
*/
|
||||||
|
@ -259,7 +261,8 @@ void bn_sqr_recursive(BN_ULONG *r, const BN_ULONG *a, int n2, BN_ULONG *t)
|
||||||
/* t[32] is negative */
|
/* t[32] is negative */
|
||||||
c1-=(int)(bn_sub_words(&(t[n2]),t,&(t[n2]),n2));
|
c1-=(int)(bn_sub_words(&(t[n2]),t,&(t[n2]),n2));
|
||||||
|
|
||||||
/* t[32] holds (a[0]-a[1])*(a[1]-a[0])+(a[0]*a[0])+(a[1]*a[1])
|
/*-
|
||||||
|
* t[32] holds (a[0]-a[1])*(a[1]-a[0])+(a[0]*a[0])+(a[1]*a[1])
|
||||||
* r[10] holds (a[0]*a[0])
|
* r[10] holds (a[0]*a[0])
|
||||||
* r[32] holds (a[1]*a[1])
|
* r[32] holds (a[1]*a[1])
|
||||||
* c1 holds the carry bits
|
* c1 holds the carry bits
|
||||||
|
|
|
@ -135,7 +135,8 @@ BIGNUM *BN_mod_sqrt(BIGNUM *in, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx)
|
||||||
|
|
||||||
if (e == 1)
|
if (e == 1)
|
||||||
{
|
{
|
||||||
/* The easy case: (|p|-1)/2 is odd, so 2 has an inverse
|
/*-
|
||||||
|
* The easy case: (|p|-1)/2 is odd, so 2 has an inverse
|
||||||
* modulo (|p|-1)/2, and square roots can be computed
|
* modulo (|p|-1)/2, and square roots can be computed
|
||||||
* directly by modular exponentiation.
|
* directly by modular exponentiation.
|
||||||
* We have
|
* We have
|
||||||
|
@ -152,7 +153,8 @@ BIGNUM *BN_mod_sqrt(BIGNUM *in, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx)
|
||||||
|
|
||||||
if (e == 2)
|
if (e == 2)
|
||||||
{
|
{
|
||||||
/* |p| == 5 (mod 8)
|
/*-
|
||||||
|
* |p| == 5 (mod 8)
|
||||||
*
|
*
|
||||||
* In this case 2 is always a non-square since
|
* In this case 2 is always a non-square since
|
||||||
* Legendre(2,p) = (-1)^((p^2-1)/8) for any odd prime.
|
* Legendre(2,p) = (-1)^((p^2-1)/8) for any odd prime.
|
||||||
|
@ -262,7 +264,8 @@ BIGNUM *BN_mod_sqrt(BIGNUM *in, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx)
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Now we know that (if p is indeed prime) there is an integer
|
/*-
|
||||||
|
* Now we know that (if p is indeed prime) there is an integer
|
||||||
* k, 0 <= k < 2^e, such that
|
* k, 0 <= k < 2^e, such that
|
||||||
*
|
*
|
||||||
* a^q * y^k == 1 (mod p).
|
* a^q * y^k == 1 (mod p).
|
||||||
|
@ -318,7 +321,8 @@ BIGNUM *BN_mod_sqrt(BIGNUM *in, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx)
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
/* Now b is a^q * y^k for some even k (0 <= k < 2^E
|
/*-
|
||||||
|
* Now b is a^q * y^k for some even k (0 <= k < 2^E
|
||||||
* where E refers to the original value of e, which we
|
* where E refers to the original value of e, which we
|
||||||
* don't keep in a variable), and x is a^((q+1)/2) * y^(k/2).
|
* don't keep in a variable), and x is a^((q+1)/2) * y^(k/2).
|
||||||
*
|
*
|
||||||
|
|
|
@ -601,7 +601,8 @@ static int str_copy(CONF *conf, char *section, char **pto, char *from)
|
||||||
}
|
}
|
||||||
e++;
|
e++;
|
||||||
}
|
}
|
||||||
/* So at this point we have
|
/*-
|
||||||
|
* So at this point we have
|
||||||
* np which is the start of the name string which is
|
* np which is the start of the name string which is
|
||||||
* '\0' terminated.
|
* '\0' terminated.
|
||||||
* cp which is the start of the section string which is
|
* cp which is the start of the section string which is
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* crypto/constant_time_locl.h */
|
/* crypto/constant_time_locl.h */
|
||||||
/*
|
/*-
|
||||||
* Utilities for constant-time cryptography.
|
* Utilities for constant-time cryptography.
|
||||||
*
|
*
|
||||||
* Author: Emilia Kasper (emilia@openssl.org)
|
* Author: Emilia Kasper (emilia@openssl.org)
|
||||||
|
@ -53,7 +53,7 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
* The boolean methods return a bitmask of all ones (0xff...f) for true
|
* The boolean methods return a bitmask of all ones (0xff...f) for true
|
||||||
* and 0 for false. This is useful for choosing a value based on the result
|
* and 0 for false. This is useful for choosing a value based on the result
|
||||||
* of a conditional in constant time. For example,
|
* of a conditional in constant time. For example,
|
||||||
|
@ -112,7 +112,7 @@ static inline unsigned int constant_time_eq_int(int a, int b);
|
||||||
static inline unsigned char constant_time_eq_int_8(int a, int b);
|
static inline unsigned char constant_time_eq_int_8(int a, int b);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
* Returns (mask & a) | (~mask & b).
|
* Returns (mask & a) | (~mask & b).
|
||||||
*
|
*
|
||||||
* When |mask| is all 1s or all 0s (as returned by the methods above),
|
* When |mask| is all 1s or all 0s (as returned by the methods above),
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* crypto/constant_time_test.c */
|
/* crypto/constant_time_test.c */
|
||||||
/*
|
/*-
|
||||||
* Utilities for constant-time cryptography.
|
* Utilities for constant-time cryptography.
|
||||||
*
|
*
|
||||||
* Author: Emilia Kasper (emilia@openssl.org)
|
* Author: Emilia Kasper (emilia@openssl.org)
|
||||||
|
|
|
@ -525,7 +525,8 @@ int CRYPTO_remove_all_info(void);
|
||||||
void CRYPTO_dbg_malloc(void *addr,int num,const char *file,int line,int before_p);
|
void CRYPTO_dbg_malloc(void *addr,int num,const char *file,int line,int before_p);
|
||||||
void CRYPTO_dbg_realloc(void *addr1,void *addr2,int num,const char *file,int line,int before_p);
|
void CRYPTO_dbg_realloc(void *addr1,void *addr2,int num,const char *file,int line,int before_p);
|
||||||
void CRYPTO_dbg_free(void *addr,int before_p);
|
void CRYPTO_dbg_free(void *addr,int before_p);
|
||||||
/* Tell the debugging code about options. By default, the following values
|
/*-
|
||||||
|
* Tell the debugging code about options. By default, the following values
|
||||||
* apply:
|
* apply:
|
||||||
*
|
*
|
||||||
* 0: Clear all options.
|
* 0: Clear all options.
|
||||||
|
|
|
@ -362,7 +362,8 @@
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* IP and FP
|
/*-
|
||||||
|
* IP and FP
|
||||||
* The problem is more of a geometric problem that random bit fiddling.
|
* The problem is more of a geometric problem that random bit fiddling.
|
||||||
0 1 2 3 4 5 6 7 62 54 46 38 30 22 14 6
|
0 1 2 3 4 5 6 7 62 54 46 38 30 22 14 6
|
||||||
8 9 10 11 12 13 14 15 60 52 44 36 28 20 12 4
|
8 9 10 11 12 13 14 15 60 52 44 36 28 20 12 4
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
/* crypto/des/des_old.h -*- mode:C; c-file-style: "eay" -*- */
|
/* crypto/des/des_old.h -*- mode:C; c-file-style: "eay" -*- */
|
||||||
|
|
||||||
/* WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
|
/*-
|
||||||
|
* WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
|
||||||
*
|
*
|
||||||
* The function names in here are deprecated and are only present to
|
* The function names in here are deprecated and are only present to
|
||||||
* provide an interface compatible with openssl 0.9.6 and older as
|
* provide an interface compatible with openssl 0.9.6 and older as
|
||||||
|
|
|
@ -380,7 +380,7 @@ int main(int argc, char *argv[])
|
||||||
DES_ENCRYPT);
|
DES_ENCRYPT);
|
||||||
DES_ede3_cbcm_encrypt(&cbc_data[16],&cbc_out[16],i-16,&ks,&ks2,&ks3,
|
DES_ede3_cbcm_encrypt(&cbc_data[16],&cbc_out[16],i-16,&ks,&ks2,&ks3,
|
||||||
&iv3,&iv2,DES_ENCRYPT);
|
&iv3,&iv2,DES_ENCRYPT);
|
||||||
/* if (memcmp(cbc_out,cbc3_ok,
|
/*- if (memcmp(cbc_out,cbc3_ok,
|
||||||
(unsigned int)(strlen((char *)cbc_data)+1+7)/8*8) != 0)
|
(unsigned int)(strlen((char *)cbc_data)+1+7)/8*8) != 0)
|
||||||
{
|
{
|
||||||
printf("des_ede3_cbc_encrypt encrypt error\n");
|
printf("des_ede3_cbc_encrypt encrypt error\n");
|
||||||
|
|
|
@ -66,7 +66,7 @@
|
||||||
OPENSSL_IMPLEMENT_GLOBAL(int,DES_rw_mode,DES_PCBC_MODE)
|
OPENSSL_IMPLEMENT_GLOBAL(int,DES_rw_mode,DES_PCBC_MODE)
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
* WARNINGS:
|
* WARNINGS:
|
||||||
*
|
*
|
||||||
* - The data format used by DES_enc_write() and DES_enc_read()
|
* - The data format used by DES_enc_write() and DES_enc_read()
|
||||||
|
|
|
@ -63,7 +63,7 @@
|
||||||
#include "des_locl.h"
|
#include "des_locl.h"
|
||||||
#include <openssl/rand.h>
|
#include <openssl/rand.h>
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
* WARNINGS:
|
* WARNINGS:
|
||||||
*
|
*
|
||||||
* - The data format used by DES_enc_write() and DES_enc_read()
|
* - The data format used by DES_enc_write() and DES_enc_read()
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* crypto/des/ncbc_enc.c */
|
/* crypto/des/ncbc_enc.c */
|
||||||
/*
|
/*-
|
||||||
* #included by:
|
* #included by:
|
||||||
* cbc_enc.c (DES_cbc_encrypt)
|
* cbc_enc.c (DES_cbc_encrypt)
|
||||||
* des_enc.c (DES_ncbc_encrypt)
|
* des_enc.c (DES_ncbc_encrypt)
|
||||||
|
|
|
@ -57,7 +57,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* @(#)des.h 2.2 88/08/10 4.0 RPCSRC; from 2.7 88/02/08 SMI */
|
/* @(#)des.h 2.2 88/08/10 4.0 RPCSRC; from 2.7 88/02/08 SMI */
|
||||||
/*
|
/*-
|
||||||
* Sun RPC is a product of Sun Microsystems, Inc. and is provided for
|
* Sun RPC is a product of Sun Microsystems, Inc. and is provided for
|
||||||
* unrestricted use provided that this legend is included on all tape
|
* unrestricted use provided that this legend is included on all tape
|
||||||
* media and as a part of the software program in whole or part. Users
|
* media and as a part of the software program in whole or part. Users
|
||||||
|
|
|
@ -106,7 +106,8 @@ int DES_check_key_parity(const_DES_cblock *key)
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Weak and semi week keys as take from
|
/*-
|
||||||
|
* Weak and semi week keys as take from
|
||||||
* %A D.W. Davies
|
* %A D.W. Davies
|
||||||
* %A W.L. Price
|
* %A W.L. Price
|
||||||
* %T Security for Computer Networks
|
* %T Security for Computer Networks
|
||||||
|
@ -399,7 +400,7 @@ int DES_key_sched(const_DES_cblock *key, DES_key_schedule *schedule)
|
||||||
{
|
{
|
||||||
return(DES_set_key(key,schedule));
|
return(DES_set_key(key,schedule));
|
||||||
}
|
}
|
||||||
/*
|
/*-
|
||||||
#undef des_fixup_key_parity
|
#undef des_fixup_key_parity
|
||||||
void des_fixup_key_parity(des_cblock *key)
|
void des_fixup_key_parity(des_cblock *key)
|
||||||
{
|
{
|
||||||
|
|
|
@ -61,7 +61,8 @@
|
||||||
#include <openssl/bn.h>
|
#include <openssl/bn.h>
|
||||||
#include <openssl/dh.h>
|
#include <openssl/dh.h>
|
||||||
|
|
||||||
/* Check that p is a safe prime and
|
/*-
|
||||||
|
* Check that p is a safe prime and
|
||||||
* if g is 2, 3 or 5, check that it is a suitable generator
|
* if g is 2, 3 or 5, check that it is a suitable generator
|
||||||
* where
|
* where
|
||||||
* for 2, p mod 24 == 11
|
* for 2, p mod 24 == 11
|
||||||
|
|
|
@ -77,7 +77,8 @@ int DH_generate_parameters_ex(DH *ret, int prime_len, int generator, BN_GENCB *c
|
||||||
return dh_builtin_genparams(ret, prime_len, generator, cb);
|
return dh_builtin_genparams(ret, prime_len, generator, cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We generate DH parameters as follows
|
/*-
|
||||||
|
* We generate DH parameters as follows
|
||||||
* find a prime q which is prime_len/2 bits long.
|
* find a prime q which is prime_len/2 bits long.
|
||||||
* p=(2*q)+1 or (p-1)/2 = q
|
* p=(2*q)+1 or (p-1)/2 = q
|
||||||
* For this case, g is a generator if
|
* For this case, g is a generator if
|
||||||
|
|
|
@ -213,7 +213,8 @@ static int dsa_priv_decode(EVP_PKEY *pkey, PKCS8_PRIV_KEY_INFO *p8)
|
||||||
goto decerr;
|
goto decerr;
|
||||||
if (sk_ASN1_TYPE_num(ndsa) != 2)
|
if (sk_ASN1_TYPE_num(ndsa) != 2)
|
||||||
goto decerr;
|
goto decerr;
|
||||||
/* Handle Two broken types:
|
/*-
|
||||||
|
* Handle Two broken types:
|
||||||
* SEQUENCE {parameters, priv_key}
|
* SEQUENCE {parameters, priv_key}
|
||||||
* SEQUENCE {pub_key, priv_key}
|
* SEQUENCE {pub_key, priv_key}
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -167,7 +167,8 @@ int DSA_sign(int type, const unsigned char *dgst, int dlen, unsigned char *sig,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* data has already been hashed (probably with SHA or SHA-1). */
|
/* data has already been hashed (probably with SHA or SHA-1). */
|
||||||
/* returns
|
/*-
|
||||||
|
* returns
|
||||||
* 1: correct signature
|
* 1: correct signature
|
||||||
* 0: incorrect signature
|
* 0: incorrect signature
|
||||||
* -1: error
|
* -1: error
|
||||||
|
|
|
@ -93,7 +93,8 @@ NULL,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
/* These macro wrappers replace attempts to use the dsa_mod_exp() and
|
/*-
|
||||||
|
* These macro wrappers replace attempts to use the dsa_mod_exp() and
|
||||||
* bn_mod_exp() handlers in the DSA_METHOD structure. We avoid the problem of
|
* bn_mod_exp() handlers in the DSA_METHOD structure. We avoid the problem of
|
||||||
* having a the macro work as an expression by bundling an "err_instr". So;
|
* having a the macro work as an expression by bundling an "err_instr". So;
|
||||||
*
|
*
|
||||||
|
|
|
@ -174,7 +174,8 @@ static int vms_load(DSO *dso)
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* A file specification may look like this:
|
/*-
|
||||||
|
* A file specification may look like this:
|
||||||
*
|
*
|
||||||
* node::dev:[dir-spec]name.type;ver
|
* node::dev:[dir-spec]name.type;ver
|
||||||
*
|
*
|
||||||
|
|
|
@ -118,7 +118,7 @@ typedef enum {
|
||||||
typedef struct ec_method_st EC_METHOD;
|
typedef struct ec_method_st EC_METHOD;
|
||||||
|
|
||||||
typedef struct ec_group_st
|
typedef struct ec_group_st
|
||||||
/*
|
/*-
|
||||||
EC_METHOD *meth;
|
EC_METHOD *meth;
|
||||||
-- field definition
|
-- field definition
|
||||||
-- curve coefficients
|
-- curve coefficients
|
||||||
|
|
|
@ -143,7 +143,8 @@ static int gf2m_Madd(const EC_GROUP *group, const BIGNUM *x, BIGNUM *x1, BIGNUM
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Compute the x, y affine coordinates from the point (x1, z1) (x2, z2)
|
/*-
|
||||||
|
* Compute the x, y affine coordinates from the point (x1, z1) (x2, z2)
|
||||||
* using Montgomery point multiplication algorithm Mxy() in appendix of
|
* using Montgomery point multiplication algorithm Mxy() in appendix of
|
||||||
* Lopez, J. and Dahab, R. "Fast multiplication on elliptic curves over
|
* Lopez, J. and Dahab, R. "Fast multiplication on elliptic curves over
|
||||||
* GF(2^m) without precomputation" (CHES '99, LNCS 1717).
|
* GF(2^m) without precomputation" (CHES '99, LNCS 1717).
|
||||||
|
@ -212,7 +213,8 @@ static int gf2m_Mxy(const EC_GROUP *group, const BIGNUM *x, const BIGNUM *y, BIG
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Computes scalar*point and stores the result in r.
|
/*-
|
||||||
|
* Computes scalar*point and stores the result in r.
|
||||||
* point can not equal r.
|
* point can not equal r.
|
||||||
* Uses a modified algorithm 2P of
|
* Uses a modified algorithm 2P of
|
||||||
* Lopez, J. and Dahab, R. "Fast multiplication on elliptic curves over
|
* Lopez, J. and Dahab, R. "Fast multiplication on elliptic curves over
|
||||||
|
@ -318,7 +320,8 @@ static int ec_GF2m_montgomery_point_multiply(const EC_GROUP *group, EC_POINT *r,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Computes the sum
|
/*-
|
||||||
|
* Computes the sum
|
||||||
* scalar*group->generator + scalars[0]*points[0] + ... + scalars[num-1]*points[num-1]
|
* scalar*group->generator + scalars[0]*points[0] + ... + scalars[num-1]*points[num-1]
|
||||||
* gracefully ignoring NULL scalar values.
|
* gracefully ignoring NULL scalar values.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -586,7 +586,8 @@ int ec_GF2m_simple_is_on_curve(const EC_GROUP *group, const EC_POINT *point, BN_
|
||||||
lh = BN_CTX_get(ctx);
|
lh = BN_CTX_get(ctx);
|
||||||
if (lh == NULL) goto err;
|
if (lh == NULL) goto err;
|
||||||
|
|
||||||
/* We have a curve defined by a Weierstrass equation
|
/*-
|
||||||
|
* We have a curve defined by a Weierstrass equation
|
||||||
* y^2 + x*y = x^3 + a*x^2 + b.
|
* y^2 + x*y = x^3 + a*x^2 + b.
|
||||||
* <=> x^3 + a*x^2 + x*y + b + y^2 = 0
|
* <=> x^3 + a*x^2 + x*y + b + y^2 = 0
|
||||||
* <=> ((x + a) * x + y ) * x + b + y^2 = 0
|
* <=> ((x + a) * x + y ) * x + b + y^2 = 0
|
||||||
|
@ -606,7 +607,8 @@ int ec_GF2m_simple_is_on_curve(const EC_GROUP *group, const EC_POINT *point, BN_
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Indicates whether two points are equal.
|
/*-
|
||||||
|
* Indicates whether two points are equal.
|
||||||
* Return values:
|
* Return values:
|
||||||
* -1 error
|
* -1 error
|
||||||
* 0 equal (in affine coordinates)
|
* 0 equal (in affine coordinates)
|
||||||
|
|
|
@ -117,7 +117,8 @@ struct ec_method_st {
|
||||||
void (*point_clear_finish)(EC_POINT *);
|
void (*point_clear_finish)(EC_POINT *);
|
||||||
int (*point_copy)(EC_POINT *, const EC_POINT *);
|
int (*point_copy)(EC_POINT *, const EC_POINT *);
|
||||||
|
|
||||||
/* used by EC_POINT_set_to_infinity,
|
/*-
|
||||||
|
* used by EC_POINT_set_to_infinity,
|
||||||
* EC_POINT_set_Jprojective_coordinates_GFp,
|
* EC_POINT_set_Jprojective_coordinates_GFp,
|
||||||
* EC_POINT_get_Jprojective_coordinates_GFp,
|
* EC_POINT_get_Jprojective_coordinates_GFp,
|
||||||
* EC_POINT_set_affine_coordinates_GFp, ..._GF2m,
|
* EC_POINT_set_affine_coordinates_GFp, ..._GF2m,
|
||||||
|
|
|
@ -482,7 +482,8 @@ int ec_wNAF_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *scalar,
|
||||||
if (!(tmp = EC_POINT_new(group)))
|
if (!(tmp = EC_POINT_new(group)))
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
/* prepare precomputed values:
|
/*-
|
||||||
|
* prepare precomputed values:
|
||||||
* val_sub[i][0] := points[i]
|
* val_sub[i][0] := points[i]
|
||||||
* val_sub[i][1] := 3 * points[i]
|
* val_sub[i][1] := 3 * points[i]
|
||||||
* val_sub[i][2] := 5 * points[i]
|
* val_sub[i][2] := 5 * points[i]
|
||||||
|
@ -607,7 +608,8 @@ int ec_wNAF_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *scalar,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ec_wNAF_precompute_mult()
|
/*-
|
||||||
|
* ec_wNAF_precompute_mult()
|
||||||
* creates an EC_PRE_COMP object with preprecomputed multiples of the generator
|
* creates an EC_PRE_COMP object with preprecomputed multiples of the generator
|
||||||
* for use with wNAF splitting as implemented in ec_wNAF_mul().
|
* for use with wNAF splitting as implemented in ec_wNAF_mul().
|
||||||
*
|
*
|
||||||
|
|
|
@ -46,7 +46,8 @@ typedef int64_t s64;
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
/* INTERNAL REPRESENTATION OF FIELD ELEMENTS
|
/*-
|
||||||
|
* INTERNAL REPRESENTATION OF FIELD ELEMENTS
|
||||||
*
|
*
|
||||||
* Field elements are represented as a_0 + 2^56*a_1 + 2^112*a_2 + 2^168*a_3
|
* Field elements are represented as a_0 + 2^56*a_1 + 2^112*a_2 + 2^168*a_3
|
||||||
* using 64-bit coefficients called 'limbs',
|
* using 64-bit coefficients called 'limbs',
|
||||||
|
@ -94,7 +95,8 @@ static const felem_bytearray nistp224_curve_params[5] = {
|
||||||
0x44,0xd5,0x81,0x99,0x85,0x00,0x7e,0x34}
|
0x44,0xd5,0x81,0x99,0x85,0x00,0x7e,0x34}
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Precomputed multiples of the standard generator
|
/*-
|
||||||
|
* Precomputed multiples of the standard generator
|
||||||
* Points are given in coordinates (X, Y, Z) where Z normally is 1
|
* Points are given in coordinates (X, Y, Z) where Z normally is 1
|
||||||
* (0 for the point at infinity).
|
* (0 for the point at infinity).
|
||||||
* For each field element, slice a_0 is word 0, etc.
|
* For each field element, slice a_0 is word 0, etc.
|
||||||
|
@ -573,9 +575,11 @@ static void felem_reduce(felem out, const widefelem in)
|
||||||
/* output[3] <= 2^56 + 2^16 */
|
/* output[3] <= 2^56 + 2^16 */
|
||||||
out[2] = output[2] & 0x00ffffffffffffff;
|
out[2] = output[2] & 0x00ffffffffffffff;
|
||||||
|
|
||||||
/* out[0] < 2^56, out[1] < 2^56, out[2] < 2^56,
|
/*-
|
||||||
|
* out[0] < 2^56, out[1] < 2^56, out[2] < 2^56,
|
||||||
* out[3] <= 2^56 + 2^16 (due to final carry),
|
* out[3] <= 2^56 + 2^16 (due to final carry),
|
||||||
* so out < 2*p */
|
* so out < 2*p
|
||||||
|
*/
|
||||||
out[3] = output[3];
|
out[3] = output[3];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -752,13 +756,15 @@ copy_conditional(felem out, const felem in, limb icopy)
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Double an elliptic curve point:
|
/*-
|
||||||
|
* Double an elliptic curve point:
|
||||||
* (X', Y', Z') = 2 * (X, Y, Z), where
|
* (X', Y', Z') = 2 * (X, Y, Z), where
|
||||||
* X' = (3 * (X - Z^2) * (X + Z^2))^2 - 8 * X * Y^2
|
* X' = (3 * (X - Z^2) * (X + Z^2))^2 - 8 * X * Y^2
|
||||||
* Y' = 3 * (X - Z^2) * (X + Z^2) * (4 * X * Y^2 - X') - 8 * Y^2
|
* Y' = 3 * (X - Z^2) * (X + Z^2) * (4 * X * Y^2 - X') - 8 * Y^2
|
||||||
* Z' = (Y + Z)^2 - Y^2 - Z^2 = 2 * Y * Z
|
* Z' = (Y + Z)^2 - Y^2 - Z^2 = 2 * Y * Z
|
||||||
* Outputs can equal corresponding inputs, i.e., x_out == x_in is allowed,
|
* Outputs can equal corresponding inputs, i.e., x_out == x_in is allowed,
|
||||||
* while x_out == y_in is not (maybe this works, but it's not tested). */
|
* while x_out == y_in is not (maybe this works, but it's not tested).
|
||||||
|
*/
|
||||||
static void
|
static void
|
||||||
point_double(felem x_out, felem y_out, felem z_out,
|
point_double(felem x_out, felem y_out, felem z_out,
|
||||||
const felem x_in, const felem y_in, const felem z_in)
|
const felem x_in, const felem y_in, const felem z_in)
|
||||||
|
@ -830,7 +836,8 @@ point_double(felem x_out, felem y_out, felem z_out,
|
||||||
felem_reduce(y_out, tmp);
|
felem_reduce(y_out, tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add two elliptic curve points:
|
/*-
|
||||||
|
* Add two elliptic curve points:
|
||||||
* (X_1, Y_1, Z_1) + (X_2, Y_2, Z_2) = (X_3, Y_3, Z_3), where
|
* (X_1, Y_1, Z_1) + (X_2, Y_2, Z_2) = (X_3, Y_3, Z_3), where
|
||||||
* X_3 = (Z_1^3 * Y_2 - Z_2^3 * Y_1)^2 - (Z_1^2 * X_2 - Z_2^2 * X_1)^3 -
|
* X_3 = (Z_1^3 * Y_2 - Z_2^3 * Y_1)^2 - (Z_1^2 * X_2 - Z_2^2 * X_1)^3 -
|
||||||
* 2 * Z_2^2 * X_1 * (Z_1^2 * X_2 - Z_2^2 * X_1)^2
|
* 2 * Z_2^2 * X_1 * (Z_1^2 * X_2 - Z_2^2 * X_1)^2
|
||||||
|
@ -968,8 +975,10 @@ static void point_add(felem x3, felem y3, felem z3,
|
||||||
felem_scalar(ftmp5, 2);
|
felem_scalar(ftmp5, 2);
|
||||||
/* ftmp5[i] < 2 * 2^57 = 2^58 */
|
/* ftmp5[i] < 2 * 2^57 = 2^58 */
|
||||||
|
|
||||||
/* x_out = (z1^3*y2 - z2^3*y1)^2 - (z1^2*x2 - z2^2*x1)^3 -
|
/*-
|
||||||
2*z2^2*x1*(z1^2*x2 - z2^2*x1)^2 */
|
* x_out = (z1^3*y2 - z2^3*y1)^2 - (z1^2*x2 - z2^2*x1)^3 -
|
||||||
|
* 2*z2^2*x1*(z1^2*x2 - z2^2*x1)^2
|
||||||
|
*/
|
||||||
felem_diff_128_64(tmp2, ftmp5);
|
felem_diff_128_64(tmp2, ftmp5);
|
||||||
/* tmp2[i] < 2^117 + 2^64 + 8 < 2^118 */
|
/* tmp2[i] < 2^117 + 2^64 + 8 < 2^118 */
|
||||||
felem_reduce(x_out, tmp2);
|
felem_reduce(x_out, tmp2);
|
||||||
|
@ -982,8 +991,10 @@ static void point_add(felem x3, felem y3, felem z3,
|
||||||
felem_mul(tmp2, ftmp3, ftmp2);
|
felem_mul(tmp2, ftmp3, ftmp2);
|
||||||
/* tmp2[i] < 4 * 2^57 * 2^59 = 2^118 */
|
/* tmp2[i] < 4 * 2^57 * 2^59 = 2^118 */
|
||||||
|
|
||||||
/* y_out = (z1^3*y2 - z2^3*y1)*(z2^2*x1*(z1^2*x2 - z2^2*x1)^2 - x_out) -
|
/*-
|
||||||
z2^3*y1*(z1^2*x2 - z2^2*x1)^3 */
|
* y_out = (z1^3*y2 - z2^3*y1)*(z2^2*x1*(z1^2*x2 - z2^2*x1)^2 - x_out) -
|
||||||
|
* z2^3*y1*(z1^2*x2 - z2^2*x1)^3
|
||||||
|
*/
|
||||||
widefelem_diff(tmp2, tmp);
|
widefelem_diff(tmp2, tmp);
|
||||||
/* tmp2[i] < 2^118 + 2^120 < 2^121 */
|
/* tmp2[i] < 2^118 + 2^120 < 2^121 */
|
||||||
felem_reduce(y_out, tmp2);
|
felem_reduce(y_out, tmp2);
|
||||||
|
|
|
@ -79,7 +79,8 @@ static const felem_bytearray nistp256_curve_params[5] = {
|
||||||
0xcb, 0xb6, 0x40, 0x68, 0x37, 0xbf, 0x51, 0xf5}
|
0xcb, 0xb6, 0x40, 0x68, 0x37, 0xbf, 0x51, 0xf5}
|
||||||
};
|
};
|
||||||
|
|
||||||
/* The representation of field elements.
|
/*-
|
||||||
|
* The representation of field elements.
|
||||||
* ------------------------------------
|
* ------------------------------------
|
||||||
*
|
*
|
||||||
* We represent field elements with either four 128-bit values, eight 128-bit
|
* We represent field elements with either four 128-bit values, eight 128-bit
|
||||||
|
@ -248,7 +249,8 @@ static void longfelem_scalar(longfelem out, const u64 scalar)
|
||||||
/* zero105 is 0 mod p */
|
/* zero105 is 0 mod p */
|
||||||
static const felem zero105 = { two105m41m9, two105, two105m41p9, two105m41p9 };
|
static const felem zero105 = { two105m41m9, two105, two105m41p9, two105m41p9 };
|
||||||
|
|
||||||
/* smallfelem_neg sets |out| to |-small|
|
/*-
|
||||||
|
* smallfelem_neg sets |out| to |-small|
|
||||||
* On exit:
|
* On exit:
|
||||||
* out[i] < out[i] + 2^105
|
* out[i] < out[i] + 2^105
|
||||||
*/
|
*/
|
||||||
|
@ -261,7 +263,8 @@ static void smallfelem_neg(felem out, const smallfelem small)
|
||||||
out[3] = zero105[3] - small[3];
|
out[3] = zero105[3] - small[3];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* felem_diff subtracts |in| from |out|
|
/*-
|
||||||
|
* felem_diff subtracts |in| from |out|
|
||||||
* On entry:
|
* On entry:
|
||||||
* in[i] < 2^104
|
* in[i] < 2^104
|
||||||
* On exit:
|
* On exit:
|
||||||
|
@ -288,7 +291,8 @@ static void felem_diff(felem out, const felem in)
|
||||||
/* zero107 is 0 mod p */
|
/* zero107 is 0 mod p */
|
||||||
static const felem zero107 = { two107m43m11, two107, two107m43p11, two107m43p11 };
|
static const felem zero107 = { two107m43m11, two107, two107m43p11, two107m43p11 };
|
||||||
|
|
||||||
/* An alternative felem_diff for larger inputs |in|
|
/*-
|
||||||
|
* An alternative felem_diff for larger inputs |in|
|
||||||
* felem_diff_zero107 subtracts |in| from |out|
|
* felem_diff_zero107 subtracts |in| from |out|
|
||||||
* On entry:
|
* On entry:
|
||||||
* in[i] < 2^106
|
* in[i] < 2^106
|
||||||
|
@ -309,7 +313,8 @@ static void felem_diff_zero107(felem out, const felem in)
|
||||||
out[3] -= in[3];
|
out[3] -= in[3];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* longfelem_diff subtracts |in| from |out|
|
/*-
|
||||||
|
* longfelem_diff subtracts |in| from |out|
|
||||||
* On entry:
|
* On entry:
|
||||||
* in[i] < 7*2^67
|
* in[i] < 7*2^67
|
||||||
* On exit:
|
* On exit:
|
||||||
|
@ -352,7 +357,8 @@ static void longfelem_diff(longfelem out, const longfelem in)
|
||||||
/* zero110 is 0 mod p */
|
/* zero110 is 0 mod p */
|
||||||
static const felem zero110 = { two64m0, two110p32m0, two64m46, two64m32 };
|
static const felem zero110 = { two64m0, two110p32m0, two64m46, two64m32 };
|
||||||
|
|
||||||
/* felem_shrink converts an felem into a smallfelem. The result isn't quite
|
/*-
|
||||||
|
* felem_shrink converts an felem into a smallfelem. The result isn't quite
|
||||||
* minimal as the value may be greater than p.
|
* minimal as the value may be greater than p.
|
||||||
*
|
*
|
||||||
* On entry:
|
* On entry:
|
||||||
|
@ -404,12 +410,14 @@ static void felem_shrink(smallfelem out, const felem in)
|
||||||
/* As tmp[3] < 2^65, high is either 1 or 0 */
|
/* As tmp[3] < 2^65, high is either 1 or 0 */
|
||||||
high <<= 63;
|
high <<= 63;
|
||||||
high >>= 63;
|
high >>= 63;
|
||||||
/* high is:
|
/*-
|
||||||
|
* high is:
|
||||||
* all ones if the high word of tmp[3] is 1
|
* all ones if the high word of tmp[3] is 1
|
||||||
* all zeros if the high word of tmp[3] if 0 */
|
* all zeros if the high word of tmp[3] if 0 */
|
||||||
low = tmp[3];
|
low = tmp[3];
|
||||||
mask = low >> 63;
|
mask = low >> 63;
|
||||||
/* mask is:
|
/*-
|
||||||
|
* mask is:
|
||||||
* all ones if the MSB of low is 1
|
* all ones if the MSB of low is 1
|
||||||
* all zeros if the MSB of low if 0 */
|
* all zeros if the MSB of low if 0 */
|
||||||
low &= bottom63bits;
|
low &= bottom63bits;
|
||||||
|
@ -417,7 +425,8 @@ static void felem_shrink(smallfelem out, const felem in)
|
||||||
/* if low was greater than kPrime3Test then the MSB is zero */
|
/* if low was greater than kPrime3Test then the MSB is zero */
|
||||||
low = ~low;
|
low = ~low;
|
||||||
low >>= 63;
|
low >>= 63;
|
||||||
/* low is:
|
/*-
|
||||||
|
* low is:
|
||||||
* all ones if low was > kPrime3Test
|
* all ones if low was > kPrime3Test
|
||||||
* all zeros if low was <= kPrime3Test */
|
* all zeros if low was <= kPrime3Test */
|
||||||
mask = (mask & low) | high;
|
mask = (mask & low) | high;
|
||||||
|
@ -447,7 +456,8 @@ static void smallfelem_expand(felem out, const smallfelem in)
|
||||||
out[3] = in[3];
|
out[3] = in[3];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* smallfelem_square sets |out| = |small|^2
|
/*-
|
||||||
|
* smallfelem_square sets |out| = |small|^2
|
||||||
* On entry:
|
* On entry:
|
||||||
* small[i] < 2^64
|
* small[i] < 2^64
|
||||||
* On exit:
|
* On exit:
|
||||||
|
@ -525,7 +535,8 @@ static void smallfelem_square(longfelem out, const smallfelem small)
|
||||||
out[7] = high;
|
out[7] = high;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* felem_square sets |out| = |in|^2
|
/*-
|
||||||
|
* felem_square sets |out| = |in|^2
|
||||||
* On entry:
|
* On entry:
|
||||||
* in[i] < 2^109
|
* in[i] < 2^109
|
||||||
* On exit:
|
* On exit:
|
||||||
|
@ -538,7 +549,8 @@ static void felem_square(longfelem out, const felem in)
|
||||||
smallfelem_square(out, small);
|
smallfelem_square(out, small);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* smallfelem_mul sets |out| = |small1| * |small2|
|
/*-
|
||||||
|
* smallfelem_mul sets |out| = |small1| * |small2|
|
||||||
* On entry:
|
* On entry:
|
||||||
* small1[i] < 2^64
|
* small1[i] < 2^64
|
||||||
* small2[i] < 2^64
|
* small2[i] < 2^64
|
||||||
|
@ -653,7 +665,8 @@ static void smallfelem_mul(longfelem out, const smallfelem small1, const smallfe
|
||||||
out[7] = high;
|
out[7] = high;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* felem_mul sets |out| = |in1| * |in2|
|
/*-
|
||||||
|
* felem_mul sets |out| = |in1| * |in2|
|
||||||
* On entry:
|
* On entry:
|
||||||
* in1[i] < 2^109
|
* in1[i] < 2^109
|
||||||
* in2[i] < 2^109
|
* in2[i] < 2^109
|
||||||
|
@ -668,7 +681,8 @@ static void felem_mul(longfelem out, const felem in1, const felem in2)
|
||||||
smallfelem_mul(out, small1, small2);
|
smallfelem_mul(out, small1, small2);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* felem_small_mul sets |out| = |small1| * |in2|
|
/*-
|
||||||
|
* felem_small_mul sets |out| = |small1| * |in2|
|
||||||
* On entry:
|
* On entry:
|
||||||
* small1[i] < 2^64
|
* small1[i] < 2^64
|
||||||
* in2[i] < 2^109
|
* in2[i] < 2^109
|
||||||
|
@ -688,7 +702,8 @@ static void felem_small_mul(longfelem out, const smallfelem small1, const felem
|
||||||
/* zero100 is 0 mod p */
|
/* zero100 is 0 mod p */
|
||||||
static const felem zero100 = { two100m36m4, two100, two100m36p4, two100m36p4 };
|
static const felem zero100 = { two100m36m4, two100, two100m36p4, two100m36p4 };
|
||||||
|
|
||||||
/* Internal function for the different flavours of felem_reduce.
|
/*-
|
||||||
|
* Internal function for the different flavours of felem_reduce.
|
||||||
* felem_reduce_ reduces the higher coefficients in[4]-in[7].
|
* felem_reduce_ reduces the higher coefficients in[4]-in[7].
|
||||||
* On entry:
|
* On entry:
|
||||||
* out[0] >= in[6] + 2^32*in[6] + in[7] + 2^32*in[7]
|
* out[0] >= in[6] + 2^32*in[6] + in[7] + 2^32*in[7]
|
||||||
|
@ -735,7 +750,8 @@ static void felem_reduce_(felem out, const longfelem in)
|
||||||
out[3] += (in[7] * 3);
|
out[3] += (in[7] * 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* felem_reduce converts a longfelem into an felem.
|
/*-
|
||||||
|
* felem_reduce converts a longfelem into an felem.
|
||||||
* To be called directly after felem_square or felem_mul.
|
* To be called directly after felem_square or felem_mul.
|
||||||
* On entry:
|
* On entry:
|
||||||
* in[0] < 2^64, in[1] < 3*2^64, in[2] < 5*2^64, in[3] < 7*2^64
|
* in[0] < 2^64, in[1] < 3*2^64, in[2] < 5*2^64, in[3] < 7*2^64
|
||||||
|
@ -752,7 +768,8 @@ static void felem_reduce(felem out, const longfelem in)
|
||||||
|
|
||||||
felem_reduce_(out, in);
|
felem_reduce_(out, in);
|
||||||
|
|
||||||
/* out[0] > 2^100 - 2^36 - 2^4 - 3*2^64 - 3*2^96 - 2^64 - 2^96 > 0
|
/*-
|
||||||
|
* out[0] > 2^100 - 2^36 - 2^4 - 3*2^64 - 3*2^96 - 2^64 - 2^96 > 0
|
||||||
* out[1] > 2^100 - 2^64 - 7*2^96 > 0
|
* out[1] > 2^100 - 2^64 - 7*2^96 > 0
|
||||||
* out[2] > 2^100 - 2^36 + 2^4 - 5*2^64 - 5*2^96 > 0
|
* out[2] > 2^100 - 2^36 + 2^4 - 5*2^64 - 5*2^96 > 0
|
||||||
* out[3] > 2^100 - 2^36 + 2^4 - 7*2^64 - 5*2^96 - 3*2^96 > 0
|
* out[3] > 2^100 - 2^36 + 2^4 - 7*2^64 - 5*2^96 - 3*2^96 > 0
|
||||||
|
@ -764,7 +781,8 @@ static void felem_reduce(felem out, const longfelem in)
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/* felem_reduce_zero105 converts a larger longfelem into an felem.
|
/*-
|
||||||
|
* felem_reduce_zero105 converts a larger longfelem into an felem.
|
||||||
* On entry:
|
* On entry:
|
||||||
* in[0] < 2^71
|
* in[0] < 2^71
|
||||||
* On exit:
|
* On exit:
|
||||||
|
@ -779,7 +797,8 @@ static void felem_reduce_zero105(felem out, const longfelem in)
|
||||||
|
|
||||||
felem_reduce_(out, in);
|
felem_reduce_(out, in);
|
||||||
|
|
||||||
/* out[0] > 2^105 - 2^41 - 2^9 - 2^71 - 2^103 - 2^71 - 2^103 > 0
|
/*-
|
||||||
|
* out[0] > 2^105 - 2^41 - 2^9 - 2^71 - 2^103 - 2^71 - 2^103 > 0
|
||||||
* out[1] > 2^105 - 2^71 - 2^103 > 0
|
* out[1] > 2^105 - 2^71 - 2^103 > 0
|
||||||
* out[2] > 2^105 - 2^41 + 2^9 - 2^71 - 2^103 > 0
|
* out[2] > 2^105 - 2^41 + 2^9 - 2^71 - 2^103 > 0
|
||||||
* out[3] > 2^105 - 2^41 + 2^9 - 2^71 - 2^103 - 2^103 > 0
|
* out[3] > 2^105 - 2^41 + 2^9 - 2^71 - 2^103 - 2^103 > 0
|
||||||
|
@ -881,7 +900,8 @@ static void smallfelem_mul_contract(smallfelem out, const smallfelem in1, const
|
||||||
felem_contract(out, tmp);
|
felem_contract(out, tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* felem_is_zero returns a limb with all bits set if |in| == 0 (mod p) and 0
|
/*-
|
||||||
|
* felem_is_zero returns a limb with all bits set if |in| == 0 (mod p) and 0
|
||||||
* otherwise.
|
* otherwise.
|
||||||
* On entry:
|
* On entry:
|
||||||
* small[i] < 2^64
|
* small[i] < 2^64
|
||||||
|
@ -926,7 +946,8 @@ static int smallfelem_is_zero_int(const smallfelem small)
|
||||||
return (int) (smallfelem_is_zero(small) & ((limb)1));
|
return (int) (smallfelem_is_zero(small) & ((limb)1));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* felem_inv calculates |out| = |in|^{-1}
|
/*-
|
||||||
|
* felem_inv calculates |out| = |in|^{-1}
|
||||||
*
|
*
|
||||||
* Based on Fermat's Little Theorem:
|
* Based on Fermat's Little Theorem:
|
||||||
* a^p = a (mod p)
|
* a^p = a (mod p)
|
||||||
|
@ -1005,14 +1026,16 @@ static void smallfelem_inv_contract(smallfelem out, const smallfelem in)
|
||||||
felem_contract(out, tmp);
|
felem_contract(out, tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Group operations
|
/*-
|
||||||
|
* Group operations
|
||||||
* ----------------
|
* ----------------
|
||||||
*
|
*
|
||||||
* Building on top of the field operations we have the operations on the
|
* Building on top of the field operations we have the operations on the
|
||||||
* elliptic curve group itself. Points on the curve are represented in Jacobian
|
* elliptic curve group itself. Points on the curve are represented in Jacobian
|
||||||
* coordinates */
|
* coordinates */
|
||||||
|
|
||||||
/* point_double calculates 2*(x_in, y_in, z_in)
|
/*-
|
||||||
|
* point_double calculates 2*(x_in, y_in, z_in)
|
||||||
*
|
*
|
||||||
* The method is taken from:
|
* The method is taken from:
|
||||||
* http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
|
* http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
|
||||||
|
@ -1140,7 +1163,8 @@ copy_small_conditional(felem out, const smallfelem in, limb mask)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* point_add calcuates (x1, y1, z1) + (x2, y2, z2)
|
/*-
|
||||||
|
* point_add calcuates (x1, y1, z1) + (x2, y2, z2)
|
||||||
*
|
*
|
||||||
* The method is taken from:
|
* The method is taken from:
|
||||||
* http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#addition-add-2007-bl,
|
* http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#addition-add-2007-bl,
|
||||||
|
@ -1329,7 +1353,8 @@ static void point_add_small(smallfelem x3, smallfelem y3, smallfelem z3,
|
||||||
felem_shrink(z3, felem_z3);
|
felem_shrink(z3, felem_z3);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Base point pre computation
|
/*-
|
||||||
|
* Base point pre computation
|
||||||
* --------------------------
|
* --------------------------
|
||||||
*
|
*
|
||||||
* Two different sorts of precomputed tables are used in the following code.
|
* Two different sorts of precomputed tables are used in the following code.
|
||||||
|
|
|
@ -109,7 +109,8 @@ static const felem_bytearray nistp521_curve_params[5] =
|
||||||
0x66, 0x50}
|
0x66, 0x50}
|
||||||
};
|
};
|
||||||
|
|
||||||
/* The representation of field elements.
|
/*-
|
||||||
|
* The representation of field elements.
|
||||||
* ------------------------------------
|
* ------------------------------------
|
||||||
*
|
*
|
||||||
* We represent field elements with nine values. These values are either 64 or
|
* We represent field elements with nine values. These values are either 64 or
|
||||||
|
@ -291,7 +292,8 @@ static void felem_scalar128(largefelem out, limb scalar)
|
||||||
out[8] *= scalar;
|
out[8] *= scalar;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* felem_neg sets |out| to |-in|
|
/*-
|
||||||
|
* felem_neg sets |out| to |-in|
|
||||||
* On entry:
|
* On entry:
|
||||||
* in[i] < 2^59 + 2^14
|
* in[i] < 2^59 + 2^14
|
||||||
* On exit:
|
* On exit:
|
||||||
|
@ -314,7 +316,8 @@ static void felem_neg(felem out, const felem in)
|
||||||
out[8] = two62m2 - in[8];
|
out[8] = two62m2 - in[8];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* felem_diff64 subtracts |in| from |out|
|
/*-
|
||||||
|
* felem_diff64 subtracts |in| from |out|
|
||||||
* On entry:
|
* On entry:
|
||||||
* in[i] < 2^59 + 2^14
|
* in[i] < 2^59 + 2^14
|
||||||
* On exit:
|
* On exit:
|
||||||
|
@ -337,7 +340,8 @@ static void felem_diff64(felem out, const felem in)
|
||||||
out[8] += two62m2 - in[8];
|
out[8] += two62m2 - in[8];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* felem_diff_128_64 subtracts |in| from |out|
|
/*-
|
||||||
|
* felem_diff_128_64 subtracts |in| from |out|
|
||||||
* On entry:
|
* On entry:
|
||||||
* in[i] < 2^62 + 2^17
|
* in[i] < 2^62 + 2^17
|
||||||
* On exit:
|
* On exit:
|
||||||
|
@ -360,7 +364,8 @@ static void felem_diff_128_64(largefelem out, const felem in)
|
||||||
out[8] += two63m5 - in[8];
|
out[8] += two63m5 - in[8];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* felem_diff_128_64 subtracts |in| from |out|
|
/*-
|
||||||
|
* felem_diff_128_64 subtracts |in| from |out|
|
||||||
* On entry:
|
* On entry:
|
||||||
* in[i] < 2^126
|
* in[i] < 2^126
|
||||||
* On exit:
|
* On exit:
|
||||||
|
@ -383,7 +388,8 @@ static void felem_diff128(largefelem out, const largefelem in)
|
||||||
out[8] += (two127m69 - in[8]);
|
out[8] += (two127m69 - in[8]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* felem_square sets |out| = |in|^2
|
/*-
|
||||||
|
* felem_square sets |out| = |in|^2
|
||||||
* On entry:
|
* On entry:
|
||||||
* in[i] < 2^62
|
* in[i] < 2^62
|
||||||
* On exit:
|
* On exit:
|
||||||
|
@ -395,7 +401,8 @@ static void felem_square(largefelem out, const felem in)
|
||||||
felem_scalar(inx2, in, 2);
|
felem_scalar(inx2, in, 2);
|
||||||
felem_scalar(inx4, in, 4);
|
felem_scalar(inx4, in, 4);
|
||||||
|
|
||||||
/* We have many cases were we want to do
|
/*-
|
||||||
|
* We have many cases were we want to do
|
||||||
* in[x] * in[y] +
|
* in[x] * in[y] +
|
||||||
* in[y] * in[x]
|
* in[y] * in[x]
|
||||||
* This is obviously just
|
* This is obviously just
|
||||||
|
@ -474,7 +481,8 @@ static void felem_square(largefelem out, const felem in)
|
||||||
out[7] += ((uint128_t) in[8]) * inx2[8];
|
out[7] += ((uint128_t) in[8]) * inx2[8];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* felem_mul sets |out| = |in1| * |in2|
|
/*-
|
||||||
|
* felem_mul sets |out| = |in1| * |in2|
|
||||||
* On entry:
|
* On entry:
|
||||||
* in1[i] < 2^64
|
* in1[i] < 2^64
|
||||||
* in2[i] < 2^63
|
* in2[i] < 2^63
|
||||||
|
@ -589,7 +597,8 @@ static void felem_mul(largefelem out, const felem in1, const felem in2)
|
||||||
|
|
||||||
static const limb bottom52bits = 0xfffffffffffff;
|
static const limb bottom52bits = 0xfffffffffffff;
|
||||||
|
|
||||||
/* felem_reduce converts a largefelem to an felem.
|
/*-
|
||||||
|
* felem_reduce converts a largefelem to an felem.
|
||||||
* On entry:
|
* On entry:
|
||||||
* in[i] < 2^128
|
* in[i] < 2^128
|
||||||
* On exit:
|
* On exit:
|
||||||
|
@ -677,7 +686,8 @@ static void felem_mul_reduce(felem out, const felem in1, const felem in2)
|
||||||
felem_reduce(out, tmp);
|
felem_reduce(out, tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* felem_inv calculates |out| = |in|^{-1}
|
/*-
|
||||||
|
* felem_inv calculates |out| = |in|^{-1}
|
||||||
*
|
*
|
||||||
* Based on Fermat's Little Theorem:
|
* Based on Fermat's Little Theorem:
|
||||||
* a^p = a (mod p)
|
* a^p = a (mod p)
|
||||||
|
@ -769,7 +779,8 @@ static const felem kPrime =
|
||||||
0x03ffffffffffffff, 0x03ffffffffffffff, 0x01ffffffffffffff
|
0x03ffffffffffffff, 0x03ffffffffffffff, 0x01ffffffffffffff
|
||||||
};
|
};
|
||||||
|
|
||||||
/* felem_is_zero returns a limb with all bits set if |in| == 0 (mod p) and 0
|
/*-
|
||||||
|
* felem_is_zero returns a limb with all bits set if |in| == 0 (mod p) and 0
|
||||||
* otherwise.
|
* otherwise.
|
||||||
* On entry:
|
* On entry:
|
||||||
* in[i] < 2^59 + 2^14
|
* in[i] < 2^59 + 2^14
|
||||||
|
@ -834,7 +845,8 @@ static int felem_is_zero_int(const felem in)
|
||||||
return (int) (felem_is_zero(in) & ((limb)1));
|
return (int) (felem_is_zero(in) & ((limb)1));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* felem_contract converts |in| to its unique, minimal representation.
|
/*-
|
||||||
|
* felem_contract converts |in| to its unique, minimal representation.
|
||||||
* On entry:
|
* On entry:
|
||||||
* in[i] < 2^59 + 2^14
|
* in[i] < 2^59 + 2^14
|
||||||
*/
|
*/
|
||||||
|
@ -930,14 +942,16 @@ static void felem_contract(felem out, const felem in)
|
||||||
sign = -(out[7] >> 63); out[7] += (two58 & sign); out[8] -= (1 & sign);
|
sign = -(out[7] >> 63); out[7] += (two58 & sign); out[8] -= (1 & sign);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Group operations
|
/*-
|
||||||
|
* Group operations
|
||||||
* ----------------
|
* ----------------
|
||||||
*
|
*
|
||||||
* Building on top of the field operations we have the operations on the
|
* Building on top of the field operations we have the operations on the
|
||||||
* elliptic curve group itself. Points on the curve are represented in Jacobian
|
* elliptic curve group itself. Points on the curve are represented in Jacobian
|
||||||
* coordinates */
|
* coordinates */
|
||||||
|
|
||||||
/* point_double calcuates 2*(x_in, y_in, z_in)
|
/*-
|
||||||
|
* point_double calcuates 2*(x_in, y_in, z_in)
|
||||||
*
|
*
|
||||||
* The method is taken from:
|
* The method is taken from:
|
||||||
* http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
|
* http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
|
||||||
|
@ -974,11 +988,13 @@ point_double(felem x_out, felem y_out, felem z_out,
|
||||||
felem_scalar64(ftmp2, 3);
|
felem_scalar64(ftmp2, 3);
|
||||||
/* ftmp2[i] < 3*2^60 + 3*2^15 */
|
/* ftmp2[i] < 3*2^60 + 3*2^15 */
|
||||||
felem_mul(tmp, ftmp, ftmp2);
|
felem_mul(tmp, ftmp, ftmp2);
|
||||||
/* tmp[i] < 17(3*2^121 + 3*2^76)
|
/*-
|
||||||
|
* tmp[i] < 17(3*2^121 + 3*2^76)
|
||||||
* = 61*2^121 + 61*2^76
|
* = 61*2^121 + 61*2^76
|
||||||
* < 64*2^121 + 64*2^76
|
* < 64*2^121 + 64*2^76
|
||||||
* = 2^127 + 2^82
|
* = 2^127 + 2^82
|
||||||
* < 2^128 */
|
* < 2^128
|
||||||
|
*/
|
||||||
felem_reduce(alpha, tmp);
|
felem_reduce(alpha, tmp);
|
||||||
|
|
||||||
/* x' = alpha^2 - 8*beta */
|
/* x' = alpha^2 - 8*beta */
|
||||||
|
@ -1011,22 +1027,30 @@ point_double(felem x_out, felem y_out, felem z_out,
|
||||||
felem_diff64(beta, x_out);
|
felem_diff64(beta, x_out);
|
||||||
/* beta[i] < 2^61 + 2^60 + 2^16 */
|
/* beta[i] < 2^61 + 2^60 + 2^16 */
|
||||||
felem_mul(tmp, alpha, beta);
|
felem_mul(tmp, alpha, beta);
|
||||||
/* tmp[i] < 17*((2^59 + 2^14)(2^61 + 2^60 + 2^16))
|
/*-
|
||||||
|
* tmp[i] < 17*((2^59 + 2^14)(2^61 + 2^60 + 2^16))
|
||||||
* = 17*(2^120 + 2^75 + 2^119 + 2^74 + 2^75 + 2^30)
|
* = 17*(2^120 + 2^75 + 2^119 + 2^74 + 2^75 + 2^30)
|
||||||
* = 17*(2^120 + 2^119 + 2^76 + 2^74 + 2^30)
|
* = 17*(2^120 + 2^119 + 2^76 + 2^74 + 2^30)
|
||||||
* < 2^128 */
|
* < 2^128
|
||||||
|
*/
|
||||||
felem_square(tmp2, gamma);
|
felem_square(tmp2, gamma);
|
||||||
/* tmp2[i] < 17*(2^59 + 2^14)^2
|
/*-
|
||||||
* = 17*(2^118 + 2^74 + 2^28) */
|
* tmp2[i] < 17*(2^59 + 2^14)^2
|
||||||
|
* = 17*(2^118 + 2^74 + 2^28)
|
||||||
|
*/
|
||||||
felem_scalar128(tmp2, 8);
|
felem_scalar128(tmp2, 8);
|
||||||
/* tmp2[i] < 8*17*(2^118 + 2^74 + 2^28)
|
/*-
|
||||||
|
* tmp2[i] < 8*17*(2^118 + 2^74 + 2^28)
|
||||||
* = 2^125 + 2^121 + 2^81 + 2^77 + 2^35 + 2^31
|
* = 2^125 + 2^121 + 2^81 + 2^77 + 2^35 + 2^31
|
||||||
* < 2^126 */
|
* < 2^126
|
||||||
|
*/
|
||||||
felem_diff128(tmp, tmp2);
|
felem_diff128(tmp, tmp2);
|
||||||
/* tmp[i] < 2^127 - 2^69 + 17(2^120 + 2^119 + 2^76 + 2^74 + 2^30)
|
/*-
|
||||||
|
* tmp[i] < 2^127 - 2^69 + 17(2^120 + 2^119 + 2^76 + 2^74 + 2^30)
|
||||||
* = 2^127 + 2^124 + 2^122 + 2^120 + 2^118 + 2^80 + 2^78 + 2^76 +
|
* = 2^127 + 2^124 + 2^122 + 2^120 + 2^118 + 2^80 + 2^78 + 2^76 +
|
||||||
* 2^74 + 2^69 + 2^34 + 2^30
|
* 2^74 + 2^69 + 2^34 + 2^30
|
||||||
* < 2^128 */
|
* < 2^128
|
||||||
|
*/
|
||||||
felem_reduce(y_out, tmp);
|
felem_reduce(y_out, tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1042,7 +1066,8 @@ copy_conditional(felem out, const felem in, limb mask)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* point_add calcuates (x1, y1, z1) + (x2, y2, z2)
|
/*-
|
||||||
|
* point_add calcuates (x1, y1, z1) + (x2, y2, z2)
|
||||||
*
|
*
|
||||||
* The method is taken from
|
* The method is taken from
|
||||||
* http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#addition-add-2007-bl,
|
* http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#addition-add-2007-bl,
|
||||||
|
@ -1205,7 +1230,8 @@ static void point_add(felem x3, felem y3, felem z3,
|
||||||
felem_assign(z3, z_out);
|
felem_assign(z3, z_out);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Base point pre computation
|
/*-
|
||||||
|
* Base point pre computation
|
||||||
* --------------------------
|
* --------------------------
|
||||||
*
|
*
|
||||||
* Two different sorts of precomputed tables are used in the following code.
|
* Two different sorts of precomputed tables are used in the following code.
|
||||||
|
|
|
@ -107,7 +107,7 @@ void ec_GFp_nistp_points_make_affine_internal(size_t num, void *point_array,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
* This function looks at 5+1 scalar bits (5 current, 1 adjacent less
|
* This function looks at 5+1 scalar bits (5 current, 1 adjacent less
|
||||||
* significant bit), and recodes them into a signed digit for use in fast point
|
* significant bit), and recodes them into a signed digit for use in fast point
|
||||||
* multiplication: the use of signed rather than unsigned digits means that
|
* multiplication: the use of signed rather than unsigned digits means that
|
||||||
|
|
|
@ -320,9 +320,11 @@ int ec_GFp_simple_group_check_discriminant(const EC_GROUP *group, BN_CTX *ctx)
|
||||||
if (!BN_copy(b, group->b)) goto err;
|
if (!BN_copy(b, group->b)) goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check the discriminant:
|
/*-
|
||||||
|
* check the discriminant:
|
||||||
* y^2 = x^3 + a*x + b is an elliptic curve <=> 4*a^3 + 27*b^2 != 0 (mod p)
|
* y^2 = x^3 + a*x + b is an elliptic curve <=> 4*a^3 + 27*b^2 != 0 (mod p)
|
||||||
* 0 =< a, b < p */
|
* 0 =< a, b < p
|
||||||
|
*/
|
||||||
if (BN_is_zero(a))
|
if (BN_is_zero(a))
|
||||||
{
|
{
|
||||||
if (BN_is_zero(b)) goto err;
|
if (BN_is_zero(b)) goto err;
|
||||||
|
@ -975,7 +977,8 @@ int ec_GFp_simple_is_on_curve(const EC_GROUP *group, const EC_POINT *point, BN_C
|
||||||
Z6 = BN_CTX_get(ctx);
|
Z6 = BN_CTX_get(ctx);
|
||||||
if (Z6 == NULL) goto err;
|
if (Z6 == NULL) goto err;
|
||||||
|
|
||||||
/* We have a curve defined by a Weierstrass equation
|
/*-
|
||||||
|
* We have a curve defined by a Weierstrass equation
|
||||||
* y^2 = x^3 + a*x + b.
|
* y^2 = x^3 + a*x + b.
|
||||||
* The point to consider is given in Jacobian projective coordinates
|
* The point to consider is given in Jacobian projective coordinates
|
||||||
* where (X, Y, Z) represents (x, y) = (X/Z^2, Y/Z^3).
|
* where (X, Y, Z) represents (x, y) = (X/Z^2, Y/Z^3).
|
||||||
|
@ -1081,7 +1084,8 @@ int ec_GFp_simple_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *
|
||||||
Zb23 = BN_CTX_get(ctx);
|
Zb23 = BN_CTX_get(ctx);
|
||||||
if (Zb23 == NULL) goto end;
|
if (Zb23 == NULL) goto end;
|
||||||
|
|
||||||
/* We have to decide whether
|
/*-
|
||||||
|
* We have to decide whether
|
||||||
* (X_a/Z_a^2, Y_a/Z_a^3) = (X_b/Z_b^2, Y_b/Z_b^3),
|
* (X_a/Z_a^2, Y_a/Z_a^3) = (X_b/Z_b^2, Y_b/Z_b^3),
|
||||||
* or equivalently, whether
|
* or equivalently, whether
|
||||||
* (X_a*Z_b^2, Y_a*Z_b^3) = (X_b*Z_a^2, Y_b*Z_a^3).
|
* (X_a*Z_b^2, Y_a*Z_b^3) = (X_b*Z_a^2, Y_b*Z_a^3).
|
||||||
|
|
|
@ -61,7 +61,8 @@
|
||||||
#include <openssl/engine.h>
|
#include <openssl/engine.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* returns
|
/*-
|
||||||
|
* returns
|
||||||
* 1: correct signature
|
* 1: correct signature
|
||||||
* 0: incorrect signature
|
* 0: incorrect signature
|
||||||
* -1: error
|
* -1: error
|
||||||
|
@ -75,7 +76,8 @@ int ECDSA_do_verify(const unsigned char *dgst, int dgst_len,
|
||||||
return ecdsa->meth->ecdsa_do_verify(dgst, dgst_len, sig, eckey);
|
return ecdsa->meth->ecdsa_do_verify(dgst, dgst_len, sig, eckey);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* returns
|
/*-
|
||||||
|
* returns
|
||||||
* 1: correct signature
|
* 1: correct signature
|
||||||
* 0: incorrect signature
|
* 0: incorrect signature
|
||||||
* -1: error
|
* -1: error
|
||||||
|
|
|
@ -82,7 +82,7 @@ void ENGINE_load_builtin_engines(void)
|
||||||
#ifndef OPENSSL_NO_HW_4758_CCA
|
#ifndef OPENSSL_NO_HW_4758_CCA
|
||||||
ENGINE_load_4758cca();
|
ENGINE_load_4758cca();
|
||||||
#endif
|
#endif
|
||||||
/*
|
/*-
|
||||||
* These engines have been disabled as they do not currently build
|
* These engines have been disabled as they do not currently build
|
||||||
#ifndef OPENSSL_NO_HW_AEP
|
#ifndef OPENSSL_NO_HW_AEP
|
||||||
ENGINE_load_aep();
|
ENGINE_load_aep();
|
||||||
|
|
|
@ -291,7 +291,8 @@ typedef EVP_PKEY * (*ENGINE_LOAD_KEY_PTR)(ENGINE *, const char *,
|
||||||
typedef int (*ENGINE_SSL_CLIENT_CERT_PTR)(ENGINE *, SSL *ssl,
|
typedef int (*ENGINE_SSL_CLIENT_CERT_PTR)(ENGINE *, SSL *ssl,
|
||||||
STACK_OF(X509_NAME) *ca_dn, X509 **pcert, EVP_PKEY **pkey,
|
STACK_OF(X509_NAME) *ca_dn, X509 **pcert, EVP_PKEY **pkey,
|
||||||
STACK_OF(X509) **pother, UI_METHOD *ui_method, void *callback_data);
|
STACK_OF(X509) **pother, UI_METHOD *ui_method, void *callback_data);
|
||||||
/* These callback types are for an ENGINE's handler for cipher and digest logic.
|
/*-
|
||||||
|
* These callback types are for an ENGINE's handler for cipher and digest logic.
|
||||||
* These handlers have these prototypes;
|
* These handlers have these prototypes;
|
||||||
* int foo(ENGINE *e, const EVP_CIPHER **cipher, const int **nids, int nid);
|
* int foo(ENGINE *e, const EVP_CIPHER **cipher, const int **nids, int nid);
|
||||||
* int foo(ENGINE *e, const EVP_MD **digest, const int **nids, int nid);
|
* int foo(ENGINE *e, const EVP_MD **digest, const int **nids, int nid);
|
||||||
|
@ -359,13 +360,14 @@ void ENGINE_load_builtin_engines(void);
|
||||||
unsigned int ENGINE_get_table_flags(void);
|
unsigned int ENGINE_get_table_flags(void);
|
||||||
void ENGINE_set_table_flags(unsigned int flags);
|
void ENGINE_set_table_flags(unsigned int flags);
|
||||||
|
|
||||||
/* Manage registration of ENGINEs per "table". For each type, there are 3
|
/*- Manage registration of ENGINEs per "table". For each type, there are 3
|
||||||
* functions;
|
* functions;
|
||||||
* ENGINE_register_***(e) - registers the implementation from 'e' (if it has one)
|
* ENGINE_register_***(e) - registers the implementation from 'e' (if it has one)
|
||||||
* ENGINE_unregister_***(e) - unregister the implementation from 'e'
|
* ENGINE_unregister_***(e) - unregister the implementation from 'e'
|
||||||
* ENGINE_register_all_***() - call ENGINE_register_***() for each 'e' in the list
|
* ENGINE_register_all_***() - call ENGINE_register_***() for each 'e' in the list
|
||||||
* Cleanup is automatically registered from each table when required, so
|
* Cleanup is automatically registered from each table when required, so
|
||||||
* ENGINE_cleanup() will reverse any "register" operations. */
|
* ENGINE_cleanup() will reverse any "register" operations.
|
||||||
|
*/
|
||||||
|
|
||||||
int ENGINE_register_RSA(ENGINE *e);
|
int ENGINE_register_RSA(ENGINE *e);
|
||||||
void ENGINE_unregister_RSA(ENGINE *e);
|
void ENGINE_unregister_RSA(ENGINE *e);
|
||||||
|
|
|
@ -396,7 +396,7 @@ static long enc_callback_ctrl(BIO *b, int cmd, bio_info_cb *fp)
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
void BIO_set_cipher_ctx(b,c)
|
void BIO_set_cipher_ctx(b,c)
|
||||||
BIO *b;
|
BIO *b;
|
||||||
EVP_CIPHER_ctx *c;
|
EVP_CIPHER_ctx *c;
|
||||||
|
|
|
@ -264,7 +264,7 @@ static int md_gets(BIO *bp, char *buf, int size)
|
||||||
return((int)ret);
|
return((int)ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
static int md_puts(bp,str)
|
static int md_puts(bp,str)
|
||||||
BIO *bp;
|
BIO *bp;
|
||||||
char *str;
|
char *str;
|
||||||
|
|
|
@ -56,7 +56,7 @@
|
||||||
* [including the GNU Public Licence.]
|
* [including the GNU Public Licence.]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
From: Arne Ansper <arne@cyber.ee>
|
From: Arne Ansper <arne@cyber.ee>
|
||||||
|
|
||||||
Why BIO_f_reliable?
|
Why BIO_f_reliable?
|
||||||
|
|
|
@ -74,7 +74,8 @@
|
||||||
#define conv_ascii2bin(a) (data_ascii2bin[os_toascii[a]&0x7f])
|
#define conv_ascii2bin(a) (data_ascii2bin[os_toascii[a]&0x7f])
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* 64 char lines
|
/*-
|
||||||
|
* 64 char lines
|
||||||
* pad input with 0
|
* pad input with 0
|
||||||
* left over chars are set to =
|
* left over chars are set to =
|
||||||
* 1 byte => xx==
|
* 1 byte => xx==
|
||||||
|
@ -88,7 +89,8 @@
|
||||||
static const unsigned char data_bin2ascii[65]="ABCDEFGHIJKLMNOPQRSTUVWXYZ\
|
static const unsigned char data_bin2ascii[65]="ABCDEFGHIJKLMNOPQRSTUVWXYZ\
|
||||||
abcdefghijklmnopqrstuvwxyz0123456789+/";
|
abcdefghijklmnopqrstuvwxyz0123456789+/";
|
||||||
|
|
||||||
/* 0xF0 is a EOLN
|
/*-
|
||||||
|
* 0xF0 is a EOLN
|
||||||
* 0xF1 is ignore but next needs to be 0xF0 (for \r\n processing).
|
* 0xF1 is ignore but next needs to be 0xF0 (for \r\n processing).
|
||||||
* 0xF2 is EOF
|
* 0xF2 is EOF
|
||||||
* 0xE0 is ignore at start of line.
|
* 0xE0 is ignore at start of line.
|
||||||
|
@ -228,7 +230,8 @@ void EVP_DecodeInit(EVP_ENCODE_CTX *ctx)
|
||||||
ctx->expect_nl=0;
|
ctx->expect_nl=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -1 for error
|
/*-
|
||||||
|
* -1 for error
|
||||||
* 0 for last line
|
* 0 for last line
|
||||||
* 1 for full line
|
* 1 for full line
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -75,7 +75,7 @@
|
||||||
#include <openssl/bio.h>
|
#include <openssl/bio.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
#define EVP_RC2_KEY_SIZE 16
|
#define EVP_RC2_KEY_SIZE 16
|
||||||
#define EVP_RC4_KEY_SIZE 16
|
#define EVP_RC4_KEY_SIZE 16
|
||||||
#define EVP_BLOWFISH_KEY_SIZE 16
|
#define EVP_BLOWFISH_KEY_SIZE 16
|
||||||
|
|
|
@ -185,7 +185,7 @@ BLOCK_CIPHER_def_ecb(cname, kstruct, nid, block_size, key_len, flags, \
|
||||||
init_key, cleanup, set_asn1, get_asn1, ctrl)
|
init_key, cleanup, set_asn1, get_asn1, ctrl)
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
#define BLOCK_CIPHER_defs(cname, kstruct, \
|
#define BLOCK_CIPHER_defs(cname, kstruct, \
|
||||||
nid, block_size, key_len, iv_len, flags,\
|
nid, block_size, key_len, iv_len, flags,\
|
||||||
init_key, cleanup, set_asn1, get_asn1, ctrl)\
|
init_key, cleanup, set_asn1, get_asn1, ctrl)\
|
||||||
|
|
|
@ -94,7 +94,7 @@ int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, unsigned char **ek
|
||||||
return(npubk);
|
return(npubk);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* MACRO
|
/*- MACRO
|
||||||
void EVP_SealUpdate(ctx,out,outl,in,inl)
|
void EVP_SealUpdate(ctx,out,outl,in,inl)
|
||||||
EVP_CIPHER_CTX *ctx;
|
EVP_CIPHER_CTX *ctx;
|
||||||
unsigned char *out;
|
unsigned char *out;
|
||||||
|
|
|
@ -100,7 +100,7 @@ static unsigned char cfb_cipher64[CFB_TEST_SIZE]={
|
||||||
0x2C,0x17,0x25,0xD0,0x1A,0x38,0xB7,0x2A,
|
0x2C,0x17,0x25,0xD0,0x1A,0x38,0xB7,0x2A,
|
||||||
0x39,0x61,0x37,0xDC,0x79,0xFB,0x9F,0x45
|
0x39,0x61,0x37,0xDC,0x79,0xFB,0x9F,0x45
|
||||||
|
|
||||||
/* 0xF9,0x78,0x32,0xB5,0x42,0x1A,0x6B,0x38,
|
/*- 0xF9,0x78,0x32,0xB5,0x42,0x1A,0x6B,0x38,
|
||||||
0x9A,0x44,0xD6,0x04,0x19,0x43,0xC4,0xD9,
|
0x9A,0x44,0xD6,0x04,0x19,0x43,0xC4,0xD9,
|
||||||
0x3D,0x1E,0xAE,0x47,0xFC,0xCF,0x29,0x0B,*/
|
0x3D,0x1E,0xAE,0x47,0xFC,0xCF,0x29,0x0B,*/
|
||||||
};
|
};
|
||||||
|
|
|
@ -370,7 +370,7 @@ int JPAKE_STEP2_generate(JPAKE_STEP2 *send, JPAKE_CTX *ctx)
|
||||||
BIGNUM *t1 = BN_new();
|
BIGNUM *t1 = BN_new();
|
||||||
BIGNUM *t2 = BN_new();
|
BIGNUM *t2 = BN_new();
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
* X = g^{(xa + xc + xd) * xb * s}
|
* X = g^{(xa + xc + xd) * xb * s}
|
||||||
* t1 = g^xa
|
* t1 = g^xa
|
||||||
*/
|
*/
|
||||||
|
@ -382,7 +382,7 @@ int JPAKE_STEP2_generate(JPAKE_STEP2 *send, JPAKE_CTX *ctx)
|
||||||
/* t2 = xb * s */
|
/* t2 = xb * s */
|
||||||
BN_mod_mul(t2, ctx->xb, ctx->secret, ctx->p.q, ctx->ctx);
|
BN_mod_mul(t2, ctx->xb, ctx->secret, ctx->p.q, ctx->ctx);
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
* ZKP(xb * s)
|
* ZKP(xb * s)
|
||||||
* XXX: this is kinda funky, because we're using
|
* XXX: this is kinda funky, because we're using
|
||||||
*
|
*
|
||||||
|
@ -407,7 +407,7 @@ static int compute_key(JPAKE_CTX *ctx, const BIGNUM *gx)
|
||||||
BIGNUM *t2 = BN_new();
|
BIGNUM *t2 = BN_new();
|
||||||
BIGNUM *t3 = BN_new();
|
BIGNUM *t3 = BN_new();
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
* K = (gx/g^{xb * xd * s})^{xb}
|
* K = (gx/g^{xb * xd * s})^{xb}
|
||||||
* = (g^{(xc + xa + xb) * xd * s - xb * xd *s})^{xb}
|
* = (g^{(xc + xa + xb) * xd * s - xb * xd *s})^{xb}
|
||||||
* = (g^{(xa + xc) * xd * s})^{xb}
|
* = (g^{(xa + xc) * xd * s})^{xb}
|
||||||
|
@ -440,7 +440,7 @@ int JPAKE_STEP2_process(JPAKE_CTX *ctx, const JPAKE_STEP2 *received)
|
||||||
BIGNUM *t2 = BN_new();
|
BIGNUM *t2 = BN_new();
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
* g' = g^{xc + xa + xb} [from our POV]
|
* g' = g^{xc + xa + xb} [from our POV]
|
||||||
* t1 = xa + xb
|
* t1 = xa + xb
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -128,12 +128,12 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
ERR_load_crypto_strings();
|
ERR_load_crypto_strings();
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
BN_hex2bn(&p, "fd7f53811d75122952df4a9c2eece4e7f611b7523cef4400c31e3f80b6512669455d402251fb593d8d58fabfc5f5ba30f6cb9b556cd7813b801d346ff26660b76b9950a5a49f9fe8047b1022c24fbba9d7feb7c61bf83b57e7c6a8a6150f04fb83f6d3c51ec3023554135a169132f675f3ae2b61d72aeff22203199dd14801c7");
|
BN_hex2bn(&p, "fd7f53811d75122952df4a9c2eece4e7f611b7523cef4400c31e3f80b6512669455d402251fb593d8d58fabfc5f5ba30f6cb9b556cd7813b801d346ff26660b76b9950a5a49f9fe8047b1022c24fbba9d7feb7c61bf83b57e7c6a8a6150f04fb83f6d3c51ec3023554135a169132f675f3ae2b61d72aeff22203199dd14801c7");
|
||||||
BN_hex2bn(&g, "f7e1a085d69b3ddecbbcab5c36b857b97994afbbfa3aea82f9574c0b3d0782675159578ebad4594fe67107108180b449167123e84c281613b7cf09328cc8a6e13c167a8b547c8d28e0a3ae1e2bb3a675916ea37f0bfa213562f1fb627a01243bcca4f1bea8519089a883dfe15ae59f06928b665e807b552564014c3bfecf492a");
|
BN_hex2bn(&g, "f7e1a085d69b3ddecbbcab5c36b857b97994afbbfa3aea82f9574c0b3d0782675159578ebad4594fe67107108180b449167123e84c281613b7cf09328cc8a6e13c167a8b547c8d28e0a3ae1e2bb3a675916ea37f0bfa213562f1fb627a01243bcca4f1bea8519089a883dfe15ae59f06928b665e807b552564014c3bfecf492a");
|
||||||
BN_hex2bn(&q, "9760508f15230bccb292b982a2eb840bf0581cf5");
|
BN_hex2bn(&q, "9760508f15230bccb292b982a2eb840bf0581cf5");
|
||||||
*/
|
*/
|
||||||
/*
|
/*-
|
||||||
p = BN_new();
|
p = BN_new();
|
||||||
BN_generate_prime(p, 1024, 1, NULL, NULL, NULL, NULL);
|
BN_generate_prime(p, 1024, 1, NULL, NULL, NULL, NULL);
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -71,14 +71,14 @@ extern "C" {
|
||||||
|
|
||||||
|
|
||||||
/* ASN.1 from Kerberos RFC 1510
|
/* ASN.1 from Kerberos RFC 1510
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* EncryptedData ::= SEQUENCE {
|
/*- EncryptedData ::= SEQUENCE {
|
||||||
** etype[0] INTEGER, -- EncryptionType
|
* etype[0] INTEGER, -- EncryptionType
|
||||||
** kvno[1] INTEGER OPTIONAL,
|
* kvno[1] INTEGER OPTIONAL,
|
||||||
** cipher[2] OCTET STRING -- ciphertext
|
* cipher[2] OCTET STRING -- ciphertext
|
||||||
** }
|
* }
|
||||||
*/
|
*/
|
||||||
typedef struct krb5_encdata_st
|
typedef struct krb5_encdata_st
|
||||||
{
|
{
|
||||||
ASN1_INTEGER *etype;
|
ASN1_INTEGER *etype;
|
||||||
|
@ -88,11 +88,11 @@ typedef struct krb5_encdata_st
|
||||||
|
|
||||||
DECLARE_STACK_OF(KRB5_ENCDATA)
|
DECLARE_STACK_OF(KRB5_ENCDATA)
|
||||||
|
|
||||||
/* PrincipalName ::= SEQUENCE {
|
/*- PrincipalName ::= SEQUENCE {
|
||||||
** name-type[0] INTEGER,
|
* name-type[0] INTEGER,
|
||||||
** name-string[1] SEQUENCE OF GeneralString
|
* name-string[1] SEQUENCE OF GeneralString
|
||||||
** }
|
* }
|
||||||
*/
|
*/
|
||||||
typedef struct krb5_princname_st
|
typedef struct krb5_princname_st
|
||||||
{
|
{
|
||||||
ASN1_INTEGER *nametype;
|
ASN1_INTEGER *nametype;
|
||||||
|
@ -102,13 +102,13 @@ typedef struct krb5_princname_st
|
||||||
DECLARE_STACK_OF(KRB5_PRINCNAME)
|
DECLARE_STACK_OF(KRB5_PRINCNAME)
|
||||||
|
|
||||||
|
|
||||||
/* Ticket ::= [APPLICATION 1] SEQUENCE {
|
/*- Ticket ::= [APPLICATION 1] SEQUENCE {
|
||||||
** tkt-vno[0] INTEGER,
|
* tkt-vno[0] INTEGER,
|
||||||
** realm[1] Realm,
|
* realm[1] Realm,
|
||||||
** sname[2] PrincipalName,
|
* sname[2] PrincipalName,
|
||||||
** enc-part[3] EncryptedData
|
* enc-part[3] EncryptedData
|
||||||
** }
|
* }
|
||||||
*/
|
*/
|
||||||
typedef struct krb5_tktbody_st
|
typedef struct krb5_tktbody_st
|
||||||
{
|
{
|
||||||
ASN1_INTEGER *tktvno;
|
ASN1_INTEGER *tktvno;
|
||||||
|
@ -121,17 +121,17 @@ typedef STACK_OF(KRB5_TKTBODY) KRB5_TICKET;
|
||||||
DECLARE_STACK_OF(KRB5_TKTBODY)
|
DECLARE_STACK_OF(KRB5_TKTBODY)
|
||||||
|
|
||||||
|
|
||||||
/* AP-REQ ::= [APPLICATION 14] SEQUENCE {
|
/*- AP-REQ ::= [APPLICATION 14] SEQUENCE {
|
||||||
** pvno[0] INTEGER,
|
* pvno[0] INTEGER,
|
||||||
** msg-type[1] INTEGER,
|
* msg-type[1] INTEGER,
|
||||||
** ap-options[2] APOptions,
|
* ap-options[2] APOptions,
|
||||||
** ticket[3] Ticket,
|
* ticket[3] Ticket,
|
||||||
** authenticator[4] EncryptedData
|
* authenticator[4] EncryptedData
|
||||||
** }
|
* }
|
||||||
**
|
*
|
||||||
** APOptions ::= BIT STRING {
|
* APOptions ::= BIT STRING {
|
||||||
** reserved(0), use-session-key(1), mutual-required(2) }
|
* reserved(0), use-session-key(1), mutual-required(2) }
|
||||||
*/
|
*/
|
||||||
typedef struct krb5_ap_req_st
|
typedef struct krb5_ap_req_st
|
||||||
{
|
{
|
||||||
ASN1_INTEGER *pvno;
|
ASN1_INTEGER *pvno;
|
||||||
|
@ -148,11 +148,11 @@ DECLARE_STACK_OF(KRB5_APREQBODY)
|
||||||
/* Authenticator Stuff */
|
/* Authenticator Stuff */
|
||||||
|
|
||||||
|
|
||||||
/* Checksum ::= SEQUENCE {
|
/*- Checksum ::= SEQUENCE {
|
||||||
** cksumtype[0] INTEGER,
|
* cksumtype[0] INTEGER,
|
||||||
** checksum[1] OCTET STRING
|
* checksum[1] OCTET STRING
|
||||||
** }
|
* }
|
||||||
*/
|
*/
|
||||||
typedef struct krb5_checksum_st
|
typedef struct krb5_checksum_st
|
||||||
{
|
{
|
||||||
ASN1_INTEGER *ctype;
|
ASN1_INTEGER *ctype;
|
||||||
|
@ -162,11 +162,11 @@ typedef struct krb5_checksum_st
|
||||||
DECLARE_STACK_OF(KRB5_CHECKSUM)
|
DECLARE_STACK_OF(KRB5_CHECKSUM)
|
||||||
|
|
||||||
|
|
||||||
/* EncryptionKey ::= SEQUENCE {
|
/*- EncryptionKey ::= SEQUENCE {
|
||||||
** keytype[0] INTEGER,
|
* keytype[0] INTEGER,
|
||||||
** keyvalue[1] OCTET STRING
|
* keyvalue[1] OCTET STRING
|
||||||
** }
|
* }
|
||||||
*/
|
*/
|
||||||
typedef struct krb5_encryptionkey_st
|
typedef struct krb5_encryptionkey_st
|
||||||
{
|
{
|
||||||
ASN1_INTEGER *ktype;
|
ASN1_INTEGER *ktype;
|
||||||
|
@ -176,11 +176,11 @@ typedef struct krb5_encryptionkey_st
|
||||||
DECLARE_STACK_OF(KRB5_ENCKEY)
|
DECLARE_STACK_OF(KRB5_ENCKEY)
|
||||||
|
|
||||||
|
|
||||||
/* AuthorizationData ::= SEQUENCE OF SEQUENCE {
|
/*- AuthorizationData ::= SEQUENCE OF SEQUENCE {
|
||||||
** ad-type[0] INTEGER,
|
* ad-type[0] INTEGER,
|
||||||
** ad-data[1] OCTET STRING
|
* ad-data[1] OCTET STRING
|
||||||
** }
|
* }
|
||||||
*/
|
*/
|
||||||
typedef struct krb5_authorization_st
|
typedef struct krb5_authorization_st
|
||||||
{
|
{
|
||||||
ASN1_INTEGER *adtype;
|
ASN1_INTEGER *adtype;
|
||||||
|
@ -190,19 +190,19 @@ typedef struct krb5_authorization_st
|
||||||
DECLARE_STACK_OF(KRB5_AUTHDATA)
|
DECLARE_STACK_OF(KRB5_AUTHDATA)
|
||||||
|
|
||||||
|
|
||||||
/* -- Unencrypted authenticator
|
/*- -- Unencrypted authenticator
|
||||||
** Authenticator ::= [APPLICATION 2] SEQUENCE {
|
* Authenticator ::= [APPLICATION 2] SEQUENCE {
|
||||||
** authenticator-vno[0] INTEGER,
|
* authenticator-vno[0] INTEGER,
|
||||||
** crealm[1] Realm,
|
* crealm[1] Realm,
|
||||||
** cname[2] PrincipalName,
|
* cname[2] PrincipalName,
|
||||||
** cksum[3] Checksum OPTIONAL,
|
* cksum[3] Checksum OPTIONAL,
|
||||||
** cusec[4] INTEGER,
|
* cusec[4] INTEGER,
|
||||||
** ctime[5] KerberosTime,
|
* ctime[5] KerberosTime,
|
||||||
** subkey[6] EncryptionKey OPTIONAL,
|
* subkey[6] EncryptionKey OPTIONAL,
|
||||||
** seq-number[7] INTEGER OPTIONAL,
|
* seq-number[7] INTEGER OPTIONAL,
|
||||||
** authorization-data[8] AuthorizationData OPTIONAL
|
* authorization-data[8] AuthorizationData OPTIONAL
|
||||||
** }
|
* }
|
||||||
*/
|
*/
|
||||||
typedef struct krb5_authenticator_st
|
typedef struct krb5_authenticator_st
|
||||||
{
|
{
|
||||||
ASN1_INTEGER *avno;
|
ASN1_INTEGER *avno;
|
||||||
|
@ -220,15 +220,15 @@ typedef STACK_OF(KRB5_AUTHENTBODY) KRB5_AUTHENT;
|
||||||
DECLARE_STACK_OF(KRB5_AUTHENTBODY)
|
DECLARE_STACK_OF(KRB5_AUTHENTBODY)
|
||||||
|
|
||||||
|
|
||||||
/* DECLARE_ASN1_FUNCTIONS(type) = DECLARE_ASN1_FUNCTIONS_name(type, type) =
|
/*- DECLARE_ASN1_FUNCTIONS(type) = DECLARE_ASN1_FUNCTIONS_name(type, type) =
|
||||||
** type *name##_new(void);
|
* type *name##_new(void);
|
||||||
** void name##_free(type *a);
|
* void name##_free(type *a);
|
||||||
** DECLARE_ASN1_ENCODE_FUNCTIONS(type, name, name) =
|
* DECLARE_ASN1_ENCODE_FUNCTIONS(type, name, name) =
|
||||||
** DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) =
|
* DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) =
|
||||||
** type *d2i_##name(type **a, const unsigned char **in, long len);
|
* type *d2i_##name(type **a, const unsigned char **in, long len);
|
||||||
** int i2d_##name(type *a, unsigned char **out);
|
* int i2d_##name(type *a, unsigned char **out);
|
||||||
** DECLARE_ASN1_ITEM(itname) = OPENSSL_EXTERN const ASN1_ITEM itname##_it
|
* DECLARE_ASN1_ITEM(itname) = OPENSSL_EXTERN const ASN1_ITEM itname##_it
|
||||||
*/
|
*/
|
||||||
|
|
||||||
DECLARE_ASN1_FUNCTIONS(KRB5_ENCDATA)
|
DECLARE_ASN1_FUNCTIONS(KRB5_ENCDATA)
|
||||||
DECLARE_ASN1_FUNCTIONS(KRB5_PRINCNAME)
|
DECLARE_ASN1_FUNCTIONS(KRB5_PRINCNAME)
|
||||||
|
|
|
@ -56,7 +56,8 @@
|
||||||
* [including the GNU Public Licence.]
|
* [including the GNU Public Licence.]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Code for dynamic hash table routines
|
/*-
|
||||||
|
* Code for dynamic hash table routines
|
||||||
* Author - Eric Young v 2.0
|
* Author - Eric Young v 2.0
|
||||||
*
|
*
|
||||||
* 2.2 eay - added #include "crypto.h" so the memory leak checking code is
|
* 2.2 eay - added #include "crypto.h" so the memory leak checking code is
|
||||||
|
|
|
@ -49,7 +49,7 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
* This is a generic 32 bit "collector" for message digest algorithms.
|
* This is a generic 32 bit "collector" for message digest algorithms.
|
||||||
* Whenever needed it collects input character stream into chunks of
|
* Whenever needed it collects input character stream into chunks of
|
||||||
* 32 bit values and invokes a block function that performs actual hash
|
* 32 bit values and invokes a block function that performs actual hash
|
||||||
|
|
|
@ -70,7 +70,7 @@ extern "C" {
|
||||||
#error MD4 is disabled.
|
#error MD4 is disabled.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
* ! MD4_LONG has to be at least 32 bits wide. If it's wider, then !
|
* ! MD4_LONG has to be at least 32 bits wide. If it's wider, then !
|
||||||
* ! MD4_LONG_LOG2 has to be defined along. !
|
* ! MD4_LONG_LOG2 has to be defined along. !
|
||||||
|
|
|
@ -82,7 +82,7 @@
|
||||||
} \
|
} \
|
||||||
} while(0)
|
} while(0)
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
* Even though permitted values for TABLE_BITS are 8, 4 and 1, it should
|
* Even though permitted values for TABLE_BITS are 8, 4 and 1, it should
|
||||||
* never be set to 8. 8 is effectively reserved for testing purposes.
|
* never be set to 8. 8 is effectively reserved for testing purposes.
|
||||||
* TABLE_BITS>1 are lookup-table-driven implementations referred to as
|
* TABLE_BITS>1 are lookup-table-driven implementations referred to as
|
||||||
|
|
|
@ -148,7 +148,8 @@ struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result)
|
||||||
/* Since there was no gmtime_r() to do this stuff for us,
|
/* Since there was no gmtime_r() to do this stuff for us,
|
||||||
we have to do it the hard way. */
|
we have to do it the hard way. */
|
||||||
{
|
{
|
||||||
/* The VMS epoch is the astronomical Smithsonian date,
|
/*-
|
||||||
|
* The VMS epoch is the astronomical Smithsonian date,
|
||||||
if I remember correctly, which is November 17, 1858.
|
if I remember correctly, which is November 17, 1858.
|
||||||
Furthermore, time is measure in thenths of microseconds
|
Furthermore, time is measure in thenths of microseconds
|
||||||
and stored in quadwords (64 bit integers). unix_epoch
|
and stored in quadwords (64 bit integers). unix_epoch
|
||||||
|
|
|
@ -639,7 +639,8 @@
|
||||||
#define NID_ripemd160WithRSA 119
|
#define NID_ripemd160WithRSA 119
|
||||||
#define OBJ_ripemd160WithRSA 1L,3L,36L,3L,3L,1L,2L
|
#define OBJ_ripemd160WithRSA 1L,3L,36L,3L,3L,1L,2L
|
||||||
|
|
||||||
/* Taken from rfc2040
|
/*-
|
||||||
|
* Taken from rfc2040
|
||||||
* RC5_CBC_Parameters ::= SEQUENCE {
|
* RC5_CBC_Parameters ::= SEQUENCE {
|
||||||
* version INTEGER (v1_0(16)),
|
* version INTEGER (v1_0(16)),
|
||||||
* rounds INTEGER (8..127),
|
* rounds INTEGER (8..127),
|
||||||
|
@ -1028,7 +1029,7 @@ const void * OBJ_bsearch_ex_(const void *key,const void *base,int num,
|
||||||
#define DECLARE_OBJ_BSEARCH_GLOBAL_CMP_FN(type1, type2, nm) \
|
#define DECLARE_OBJ_BSEARCH_GLOBAL_CMP_FN(type1, type2, nm) \
|
||||||
type2 * OBJ_bsearch_##nm(type1 *key, type2 const *base, int num)
|
type2 * OBJ_bsearch_##nm(type1 *key, type2 const *base, int num)
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
* Unsolved problem: if a type is actually a pointer type, like
|
* Unsolved problem: if a type is actually a pointer type, like
|
||||||
* nid_triple is, then its impossible to get a const where you need
|
* nid_triple is, then its impossible to get a const where you need
|
||||||
* it. Consider:
|
* it. Consider:
|
||||||
|
|
|
@ -90,7 +90,7 @@ extern "C" {
|
||||||
#define OCSP_RESPID_KEY 0x400
|
#define OCSP_RESPID_KEY 0x400
|
||||||
#define OCSP_NOTIME 0x800
|
#define OCSP_NOTIME 0x800
|
||||||
|
|
||||||
/* CertID ::= SEQUENCE {
|
/*- CertID ::= SEQUENCE {
|
||||||
* hashAlgorithm AlgorithmIdentifier,
|
* hashAlgorithm AlgorithmIdentifier,
|
||||||
* issuerNameHash OCTET STRING, -- Hash of Issuer's DN
|
* issuerNameHash OCTET STRING, -- Hash of Issuer's DN
|
||||||
* issuerKeyHash OCTET STRING, -- Hash of Issuers public key (excluding the tag & length fields)
|
* issuerKeyHash OCTET STRING, -- Hash of Issuers public key (excluding the tag & length fields)
|
||||||
|
@ -106,7 +106,7 @@ typedef struct ocsp_cert_id_st
|
||||||
|
|
||||||
DECLARE_STACK_OF(OCSP_CERTID)
|
DECLARE_STACK_OF(OCSP_CERTID)
|
||||||
|
|
||||||
/* Request ::= SEQUENCE {
|
/*- Request ::= SEQUENCE {
|
||||||
* reqCert CertID,
|
* reqCert CertID,
|
||||||
* singleRequestExtensions [0] EXPLICIT Extensions OPTIONAL }
|
* singleRequestExtensions [0] EXPLICIT Extensions OPTIONAL }
|
||||||
*/
|
*/
|
||||||
|
@ -120,7 +120,7 @@ DECLARE_STACK_OF(OCSP_ONEREQ)
|
||||||
DECLARE_ASN1_SET_OF(OCSP_ONEREQ)
|
DECLARE_ASN1_SET_OF(OCSP_ONEREQ)
|
||||||
|
|
||||||
|
|
||||||
/* TBSRequest ::= SEQUENCE {
|
/*- TBSRequest ::= SEQUENCE {
|
||||||
* version [0] EXPLICIT Version DEFAULT v1,
|
* version [0] EXPLICIT Version DEFAULT v1,
|
||||||
* requestorName [1] EXPLICIT GeneralName OPTIONAL,
|
* requestorName [1] EXPLICIT GeneralName OPTIONAL,
|
||||||
* requestList SEQUENCE OF Request,
|
* requestList SEQUENCE OF Request,
|
||||||
|
@ -134,7 +134,7 @@ typedef struct ocsp_req_info_st
|
||||||
STACK_OF(X509_EXTENSION) *requestExtensions;
|
STACK_OF(X509_EXTENSION) *requestExtensions;
|
||||||
} OCSP_REQINFO;
|
} OCSP_REQINFO;
|
||||||
|
|
||||||
/* Signature ::= SEQUENCE {
|
/*- Signature ::= SEQUENCE {
|
||||||
* signatureAlgorithm AlgorithmIdentifier,
|
* signatureAlgorithm AlgorithmIdentifier,
|
||||||
* signature BIT STRING,
|
* signature BIT STRING,
|
||||||
* certs [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL }
|
* certs [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL }
|
||||||
|
@ -146,7 +146,7 @@ typedef struct ocsp_signature_st
|
||||||
STACK_OF(X509) *certs;
|
STACK_OF(X509) *certs;
|
||||||
} OCSP_SIGNATURE;
|
} OCSP_SIGNATURE;
|
||||||
|
|
||||||
/* OCSPRequest ::= SEQUENCE {
|
/*- OCSPRequest ::= SEQUENCE {
|
||||||
* tbsRequest TBSRequest,
|
* tbsRequest TBSRequest,
|
||||||
* optionalSignature [0] EXPLICIT Signature OPTIONAL }
|
* optionalSignature [0] EXPLICIT Signature OPTIONAL }
|
||||||
*/
|
*/
|
||||||
|
@ -156,7 +156,7 @@ typedef struct ocsp_request_st
|
||||||
OCSP_SIGNATURE *optionalSignature; /* OPTIONAL */
|
OCSP_SIGNATURE *optionalSignature; /* OPTIONAL */
|
||||||
} OCSP_REQUEST;
|
} OCSP_REQUEST;
|
||||||
|
|
||||||
/* OCSPResponseStatus ::= ENUMERATED {
|
/*- OCSPResponseStatus ::= ENUMERATED {
|
||||||
* successful (0), --Response has valid confirmations
|
* successful (0), --Response has valid confirmations
|
||||||
* malformedRequest (1), --Illegal confirmation request
|
* malformedRequest (1), --Illegal confirmation request
|
||||||
* internalError (2), --Internal error in issuer
|
* internalError (2), --Internal error in issuer
|
||||||
|
@ -173,7 +173,7 @@ typedef struct ocsp_request_st
|
||||||
#define OCSP_RESPONSE_STATUS_SIGREQUIRED 5
|
#define OCSP_RESPONSE_STATUS_SIGREQUIRED 5
|
||||||
#define OCSP_RESPONSE_STATUS_UNAUTHORIZED 6
|
#define OCSP_RESPONSE_STATUS_UNAUTHORIZED 6
|
||||||
|
|
||||||
/* ResponseBytes ::= SEQUENCE {
|
/*- ResponseBytes ::= SEQUENCE {
|
||||||
* responseType OBJECT IDENTIFIER,
|
* responseType OBJECT IDENTIFIER,
|
||||||
* response OCTET STRING }
|
* response OCTET STRING }
|
||||||
*/
|
*/
|
||||||
|
@ -183,7 +183,7 @@ typedef struct ocsp_resp_bytes_st
|
||||||
ASN1_OCTET_STRING *response;
|
ASN1_OCTET_STRING *response;
|
||||||
} OCSP_RESPBYTES;
|
} OCSP_RESPBYTES;
|
||||||
|
|
||||||
/* OCSPResponse ::= SEQUENCE {
|
/*- OCSPResponse ::= SEQUENCE {
|
||||||
* responseStatus OCSPResponseStatus,
|
* responseStatus OCSPResponseStatus,
|
||||||
* responseBytes [0] EXPLICIT ResponseBytes OPTIONAL }
|
* responseBytes [0] EXPLICIT ResponseBytes OPTIONAL }
|
||||||
*/
|
*/
|
||||||
|
@ -193,7 +193,7 @@ struct ocsp_response_st
|
||||||
OCSP_RESPBYTES *responseBytes;
|
OCSP_RESPBYTES *responseBytes;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* ResponderID ::= CHOICE {
|
/*- ResponderID ::= CHOICE {
|
||||||
* byName [1] Name,
|
* byName [1] Name,
|
||||||
* byKey [2] KeyHash }
|
* byKey [2] KeyHash }
|
||||||
*/
|
*/
|
||||||
|
@ -211,11 +211,11 @@ struct ocsp_responder_id_st
|
||||||
DECLARE_STACK_OF(OCSP_RESPID)
|
DECLARE_STACK_OF(OCSP_RESPID)
|
||||||
DECLARE_ASN1_FUNCTIONS(OCSP_RESPID)
|
DECLARE_ASN1_FUNCTIONS(OCSP_RESPID)
|
||||||
|
|
||||||
/* KeyHash ::= OCTET STRING --SHA-1 hash of responder's public key
|
/*- KeyHash ::= OCTET STRING --SHA-1 hash of responder's public key
|
||||||
* --(excluding the tag and length fields)
|
* --(excluding the tag and length fields)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* RevokedInfo ::= SEQUENCE {
|
/*- RevokedInfo ::= SEQUENCE {
|
||||||
* revocationTime GeneralizedTime,
|
* revocationTime GeneralizedTime,
|
||||||
* revocationReason [0] EXPLICIT CRLReason OPTIONAL }
|
* revocationReason [0] EXPLICIT CRLReason OPTIONAL }
|
||||||
*/
|
*/
|
||||||
|
@ -225,7 +225,7 @@ typedef struct ocsp_revoked_info_st
|
||||||
ASN1_ENUMERATED *revocationReason;
|
ASN1_ENUMERATED *revocationReason;
|
||||||
} OCSP_REVOKEDINFO;
|
} OCSP_REVOKEDINFO;
|
||||||
|
|
||||||
/* CertStatus ::= CHOICE {
|
/*- CertStatus ::= CHOICE {
|
||||||
* good [0] IMPLICIT NULL,
|
* good [0] IMPLICIT NULL,
|
||||||
* revoked [1] IMPLICIT RevokedInfo,
|
* revoked [1] IMPLICIT RevokedInfo,
|
||||||
* unknown [2] IMPLICIT UnknownInfo }
|
* unknown [2] IMPLICIT UnknownInfo }
|
||||||
|
@ -243,7 +243,7 @@ typedef struct ocsp_cert_status_st
|
||||||
} value;
|
} value;
|
||||||
} OCSP_CERTSTATUS;
|
} OCSP_CERTSTATUS;
|
||||||
|
|
||||||
/* SingleResponse ::= SEQUENCE {
|
/*- SingleResponse ::= SEQUENCE {
|
||||||
* certID CertID,
|
* certID CertID,
|
||||||
* certStatus CertStatus,
|
* certStatus CertStatus,
|
||||||
* thisUpdate GeneralizedTime,
|
* thisUpdate GeneralizedTime,
|
||||||
|
@ -262,7 +262,7 @@ typedef struct ocsp_single_response_st
|
||||||
DECLARE_STACK_OF(OCSP_SINGLERESP)
|
DECLARE_STACK_OF(OCSP_SINGLERESP)
|
||||||
DECLARE_ASN1_SET_OF(OCSP_SINGLERESP)
|
DECLARE_ASN1_SET_OF(OCSP_SINGLERESP)
|
||||||
|
|
||||||
/* ResponseData ::= SEQUENCE {
|
/*- ResponseData ::= SEQUENCE {
|
||||||
* version [0] EXPLICIT Version DEFAULT v1,
|
* version [0] EXPLICIT Version DEFAULT v1,
|
||||||
* responderID ResponderID,
|
* responderID ResponderID,
|
||||||
* producedAt GeneralizedTime,
|
* producedAt GeneralizedTime,
|
||||||
|
@ -278,7 +278,7 @@ typedef struct ocsp_response_data_st
|
||||||
STACK_OF(X509_EXTENSION) *responseExtensions;
|
STACK_OF(X509_EXTENSION) *responseExtensions;
|
||||||
} OCSP_RESPDATA;
|
} OCSP_RESPDATA;
|
||||||
|
|
||||||
/* BasicOCSPResponse ::= SEQUENCE {
|
/*- BasicOCSPResponse ::= SEQUENCE {
|
||||||
* tbsResponseData ResponseData,
|
* tbsResponseData ResponseData,
|
||||||
* signatureAlgorithm AlgorithmIdentifier,
|
* signatureAlgorithm AlgorithmIdentifier,
|
||||||
* signature BIT STRING,
|
* signature BIT STRING,
|
||||||
|
@ -308,7 +308,7 @@ typedef struct ocsp_basic_response_st
|
||||||
STACK_OF(X509) *certs;
|
STACK_OF(X509) *certs;
|
||||||
} OCSP_BASICRESP;
|
} OCSP_BASICRESP;
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
* CRLReason ::= ENUMERATED {
|
* CRLReason ::= ENUMERATED {
|
||||||
* unspecified (0),
|
* unspecified (0),
|
||||||
* keyCompromise (1),
|
* keyCompromise (1),
|
||||||
|
@ -329,7 +329,8 @@ typedef struct ocsp_basic_response_st
|
||||||
#define OCSP_REVOKED_STATUS_CERTIFICATEHOLD 6
|
#define OCSP_REVOKED_STATUS_CERTIFICATEHOLD 6
|
||||||
#define OCSP_REVOKED_STATUS_REMOVEFROMCRL 8
|
#define OCSP_REVOKED_STATUS_REMOVEFROMCRL 8
|
||||||
|
|
||||||
/* CrlID ::= SEQUENCE {
|
/*-
|
||||||
|
* CrlID ::= SEQUENCE {
|
||||||
* crlUrl [0] EXPLICIT IA5String OPTIONAL,
|
* crlUrl [0] EXPLICIT IA5String OPTIONAL,
|
||||||
* crlNum [1] EXPLICIT INTEGER OPTIONAL,
|
* crlNum [1] EXPLICIT INTEGER OPTIONAL,
|
||||||
* crlTime [2] EXPLICIT GeneralizedTime OPTIONAL }
|
* crlTime [2] EXPLICIT GeneralizedTime OPTIONAL }
|
||||||
|
@ -341,7 +342,8 @@ typedef struct ocsp_crl_id_st
|
||||||
ASN1_GENERALIZEDTIME *crlTime;
|
ASN1_GENERALIZEDTIME *crlTime;
|
||||||
} OCSP_CRLID;
|
} OCSP_CRLID;
|
||||||
|
|
||||||
/* ServiceLocator ::= SEQUENCE {
|
/*-
|
||||||
|
* ServiceLocator ::= SEQUENCE {
|
||||||
* issuer Name,
|
* issuer Name,
|
||||||
* locator AuthorityInfoAccessSyntax OPTIONAL }
|
* locator AuthorityInfoAccessSyntax OPTIONAL }
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -5,7 +5,8 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Numeric release version identifier:
|
/*-
|
||||||
|
* Numeric release version identifier:
|
||||||
* MNNFFPPS: major minor fix patch status
|
* MNNFFPPS: major minor fix patch status
|
||||||
* The status nibble has one of the values 0 for development, 1 to e for betas
|
* The status nibble has one of the values 0 for development, 1 to e for betas
|
||||||
* 1 to 14, and f for release. The patch level is exactly that.
|
* 1 to 14, and f for release. The patch level is exactly that.
|
||||||
|
@ -38,7 +39,8 @@ extern "C" {
|
||||||
#define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT
|
#define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT
|
||||||
|
|
||||||
|
|
||||||
/* The macros below are to be used for shared library (.so, .dll, ...)
|
/*-
|
||||||
|
* The macros below are to be used for shared library (.so, .dll, ...)
|
||||||
* versioning. That kind of versioning works a bit differently between
|
* versioning. That kind of versioning works a bit differently between
|
||||||
* operating systems. The most usual scheme is to set a major and a minor
|
* operating systems. The most usual scheme is to set a major and a minor
|
||||||
* number, and have the runtime loader check that the major number is equal
|
* number, and have the runtime loader check that the major number is equal
|
||||||
|
|
|
@ -76,7 +76,7 @@ extern "C" {
|
||||||
#undef PKCS7_SIGNER_INFO
|
#undef PKCS7_SIGNER_INFO
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
Encryption_ID DES-CBC
|
Encryption_ID DES-CBC
|
||||||
Digest_ID MD5
|
Digest_ID MD5
|
||||||
Digest_Encryption_ID rsaEncryption
|
Digest_Encryption_ID rsaEncryption
|
||||||
|
|
|
@ -58,7 +58,7 @@
|
||||||
#include <openssl/rand.h>
|
#include <openssl/rand.h>
|
||||||
#include <openssl/buffer.h>
|
#include <openssl/buffer.h>
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
* Query the EGD <URL: http://www.lothar.com/tech/crypto/>.
|
* Query the EGD <URL: http://www.lothar.com/tech/crypto/>.
|
||||||
*
|
*
|
||||||
* This module supplies three routines:
|
* This module supplies three routines:
|
||||||
|
|
|
@ -129,7 +129,7 @@ static unsigned char cfb_cipher64[CFB_TEST_SIZE]={
|
||||||
0x2C,0x17,0x25,0xD0,0x1A,0x38,0xB7,0x2A,
|
0x2C,0x17,0x25,0xD0,0x1A,0x38,0xB7,0x2A,
|
||||||
0x39,0x61,0x37,0xDC,0x79,0xFB,0x9F,0x45
|
0x39,0x61,0x37,0xDC,0x79,0xFB,0x9F,0x45
|
||||||
|
|
||||||
/* 0xF9,0x78,0x32,0xB5,0x42,0x1A,0x6B,0x38,
|
/*- 0xF9,0x78,0x32,0xB5,0x42,0x1A,0x6B,0x38,
|
||||||
0x9A,0x44,0xD6,0x04,0x19,0x43,0xC4,0xD9,
|
0x9A,0x44,0xD6,0x04,0x19,0x43,0xC4,0xD9,
|
||||||
0x3D,0x1E,0xAE,0x47,0xFC,0xCF,0x29,0x0B,*/
|
0x3D,0x1E,0xAE,0x47,0xFC,0xCF,0x29,0x0B,*/
|
||||||
};
|
};
|
||||||
|
|
|
@ -79,7 +79,7 @@ void RC4(RC4_KEY *key, size_t len, const unsigned char *indata,
|
||||||
d=key->data;
|
d=key->data;
|
||||||
|
|
||||||
#if defined(RC4_CHUNK) && !defined(PEDANTIC)
|
#if defined(RC4_CHUNK) && !defined(PEDANTIC)
|
||||||
/*
|
/*-
|
||||||
* The original reason for implementing this(*) was the fact that
|
* The original reason for implementing this(*) was the fact that
|
||||||
* pre-21164a Alpha CPUs don't have byte load/store instructions
|
* pre-21164a Alpha CPUs don't have byte load/store instructions
|
||||||
* and e.g. a byte store has to be done with 64-bit load, shift,
|
* and e.g. a byte store has to be done with 64-bit load, shift,
|
||||||
|
@ -126,7 +126,7 @@ void RC4(RC4_KEY *key, size_t len, const unsigned char *indata,
|
||||||
RC4_CHUNK ichunk,otp;
|
RC4_CHUNK ichunk,otp;
|
||||||
const union { long one; char little; } is_endian = {1};
|
const union { long one; char little; } is_endian = {1};
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
* I reckon we can afford to implement both endian
|
* I reckon we can afford to implement both endian
|
||||||
* cases and to decide which way to take at run-time
|
* cases and to decide which way to take at run-time
|
||||||
* because the machine code appears to be very compact
|
* because the machine code appears to be very compact
|
||||||
|
|
|
@ -98,7 +98,7 @@ int RSA_verify_PKCS1_PSS_mgf1(RSA *rsa, const unsigned char *mHash,
|
||||||
hLen = M_EVP_MD_size(Hash);
|
hLen = M_EVP_MD_size(Hash);
|
||||||
if (hLen < 0)
|
if (hLen < 0)
|
||||||
goto err;
|
goto err;
|
||||||
/*
|
/*-
|
||||||
* Negative sLen has special meanings:
|
* Negative sLen has special meanings:
|
||||||
* -1 sLen == hLen
|
* -1 sLen == hLen
|
||||||
* -2 salt length is autorecovered from signature
|
* -2 salt length is autorecovered from signature
|
||||||
|
@ -210,7 +210,7 @@ int RSA_padding_add_PKCS1_PSS_mgf1(RSA *rsa, unsigned char *EM,
|
||||||
hLen = M_EVP_MD_size(Hash);
|
hLen = M_EVP_MD_size(Hash);
|
||||||
if (hLen < 0)
|
if (hLen < 0)
|
||||||
goto err;
|
goto err;
|
||||||
/*
|
/*-
|
||||||
* Negative sLen has special meanings:
|
* Negative sLen has special meanings:
|
||||||
* -1 sLen == hLen
|
* -1 sLen == hLen
|
||||||
* -2 salt length is maximized
|
* -2 salt length is maximized
|
||||||
|
|
|
@ -70,7 +70,7 @@ extern "C" {
|
||||||
#error SHA is disabled.
|
#error SHA is disabled.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
* ! SHA_LONG has to be at least 32 bits wide. If it's wider, then !
|
* ! SHA_LONG has to be at least 32 bits wide. If it's wider, then !
|
||||||
* ! SHA_LONG_LOG2 has to be defined along. !
|
* ! SHA_LONG_LOG2 has to be defined along. !
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue